שתי התכונות שעושות מתכנת הן עצלות וזיכרון גרוע

שאלו מה עושה מתכנת טוב ותשמעו על אינטליגנציה, סקרנות, תשומת לב לפרטים, כישרון מתמטי. כל אלה עוזרים. אף אחד מהם אינו הדבר עצמו. ראיתי הרבה אנשים לומדים לתכנת, ושתי התכונות שניבאו מי ייעשה טוב בזה לא היו ברשימת המעלות של איש. הן היו עצלות וזיכרון חלש.

אני מתכוון לזה מילולית, ואני רוצה להגן על שתיהן.

עצלות

המתכנת העצל הוא זה שכשהוא עומד מול לעשות את אותו הדבר פעמיים, מסרב. לא מתוך עיקרון. מתוך חוסר רצון אמיתי, פיזי, להקליד את אותו הדבר שוב.

חוסר הרצון הזה הוא השורש של כל הרגל טוב במקצוע. אוטומציה היא עצלות עם קומפיילר. האדם שכותב סקריפט לשינוי שמות של מאתיים קבצים אינו חרוץ יותר מהאדם שמשנה את שמותיהם ביד; הוא חרוץ פחות, והוא מצא דרך לגרום למכונה לספוג את החריצות שהוא מסרב לספק. כל פונקציה שאי פעם הופרדה, כל לולאה שאי פעם נכתבה, כל מערכת בנייה, כל צינור הפצה, הם אנדרטה למישהו שלא היה לו כוח.

המתכנת החרוץ הוא סכנה. הוא יעתיק בשמחה בלוק קוד לחמישה מקומות ויערוך כל אחד מעט, מפני שזו עבודה, ועבודה היא מה שהוא בשבילה. הוא יריץ ביד את נוהל ההפצה של ארבעה-עשר הצעדים כל יום שישי במשך שנה בלי לחשוב פעם אחת שארבעה-עשר צעדים שלעולם אינם משתנים הם תוכנית שמחכה להיכתב. הוא אינו חווה את החזרה ככאב, ולכן לעולם אינו מתקן אותה. החריצות שלו היא בדיוק מה שהופך את הקוד שלו לבלתי ניתן לתחזוקה: הוא יכול לתחזק אותו, במאמץ רב, והוא מבלבל בין המאמץ לערך.

המתכנת העצל חווה חזרה ככאב ומתקן אותה מיד, מפני שלתקן אותה היא פחות עבודה מהחזרה השלישית. זה כל המנגנון. זו לא מטפורה.

יש תוצאה שנייה. עצלות גורמת לכם לקרוא את התיעוד. המתכנת החרוץ מנסה שבעה-עשר דברים. העצל חושב: מישהו בטח כבר עשה את זה, איפה זה? והוא מוצא את פונקציית הספרייה, את הכלי הקיים, את הניב הסטנדרטי, מפני שלחפש היה פחות מאמץ מלבנות. חצי מהמומחיות היא לדעת מה כבר קיים, ועצלות היא מה ששולח אתכם לחפש.

זיכרון גרוע

זה נשמע כמו פגם והוא החשוב מבין השניים.

מתכנת עם זיכרון מצוין יכול להחזיק בראשו מערכת גדולה ומבולגנת. הוא יודע שהדגל בשורה 340 משפיע על המשתנה הגלובלי בשורה 1200, שצריך לקרוא ל-init לפני configure אבל רק בריצה השנייה, שהמשתנה בשם count מחזיק בפועל גודל בבייטים. הוא יודע את כל זה, ומפני שהוא יודע, הוא לעולם אינו מתקן. הבלגן אינו עולה לו דבר. הוא האינדקס שלו.

ואז הוא עוזב, או שוכח, או מקבל פרויקט שני, והמערכת אינה ניתנת לתחזוקה, מפני שהיא הייתה ניתנת לתחזוקה רק על ידי הזיכרון שלו.

המתכנת עם הזיכרון הגרוע אינו יכול לעשות זאת. הוא אינו יכול לזכור ש-count הוא בייטים, אז הוא משנה את שמו ל-size_bytes. הוא אינו יכול לזכור את סדר הקריאה, אז הוא גורם ל-configure לקרוא ל-init בעצמה, או גורם לה להיכשל בקול רם אם דילגו עליה. הוא אינו יכול לזכור מה פונקציה עושה, אז הוא נותן לה שם שאומר, ואם היא עושה שלושה דברים הוא מפצל אותה לשלוש, מפני ששלושה שמות קצרים קל יותר לשכוח ולשחזר מהתנהגות ארוכה אחת. הוא כותב קוד שאינו צריך שיזכרו אותו, מפני שאינו יכול לזכור אותו.

זו הבהירות. כל עיקרון של קוד טוב, שמות בעלי משמעות, פונקציות קטנות, בלי מצב נסתר, בלי פעולה מרחוק, הוא טכניקה להפוך מערכת לקריאה למישהו ששכח אותה. המתכנת עם הזיכרון הגרוע הוא המישהו הזה כל בוקר, והוא כותב בשביל עצמו. התוצאה היא קוד שגם כל השאר יכולים לקרוא.

לזיכרון המצוין יש עוד עלות אחת. הוא עושה אותכם סובלניים למורכבות, ומורכבות היא האויב. אם אתם יכולים להחזיק בראש שנים-עשר תנאים שמשפיעים זה על זה, תכתבו קוד עם שנים-עשר תנאים שמשפיעים זה על זה, והוא יהיה נכון, ואיש מלבדכם לעולם לא יוכל לגעת בו. האדם שיכול להחזיק ארבעה ימצא עיצוב שצריך ארבעה. המגבלה מייצרת את הפשטות.

השתיים יחד

שימו לב שהתכונות מחזקות זו את זו. עצלות גורמת לכם לסרב לחזור על עצמכם, אז אתם מכלילים. זיכרון גרוע מונע מכם לעקוב אחר ההכללה אלא אם היא ברורה, אז אתם נותנים לה שם טוב ושומרים אותה קטנה. עצלות אז גורמת לכם לסרב לבדוק כל פעם איך הדבר עובד, אז אתם גורמים לו לעבוד בדרך המובנת מאליה. סחור סחור, ויוצא משהו שניתן לתחזוקה.

למעלות המקובלות אין את התכונה הזו. אינטליגנציה מאפשרת לכם להתחמק עם בלגן. חריצות מאפשרת לכם לקיים בלגן. זיכרון טוב מאפשר לכם לנווט בבלגן. שלושתן עושות את הבלגן בר-שרידה, ובלגן בר-שרידה הוא בלגן ששורד.

מה נובע מזה

אינני אומר שעליכם לנסות להיות עצלים או שכחנים; איני בטוח שאפשר לעשות זאת בכוונה. אני אומר שאם אתם כאלה, יש לכם את חומר הגלם, ושכשאתם מראיינים מתכנתים, זה שאומר שאינו מסוגל לסבול לעשות דבר פעמיים ואינו זוכר מה כתב בחודש שעבר מספר לכם משהו טוב על עצמו.

ואני אומר שאם יש לכם זיכרון מבריק ומרץ בלתי נדלה, היזהרו. כתבו כאילו אין לכם אף אחד מהם. לאדם שיתחזק את הקוד שלכם בשנה הבאה אין אף אחד מהם, ויש סיכוי סביר שהאדם הזה הוא אתם.