התלמוד של המפתחהתלמוד של המפתח

מסכת אבות המפתח

עקרונות יסוד

6 הלכות

א

פונקציה העושה יותר מדבר אחד — כשרה אינה. מצאת בשמה את מילת ה"ו" — fetchAndSave, validateAndSend — חזקה שעוברת על הכתוב, ואין לה כפרה אלא פיצול.

אמרו חכמים: שם פונקציה שיש בו ו׳ החיבור הרי הוא כשלט אזהרה. ומעשה היה במפתח אחד שכתב getUserDataAndSendEmailAndLogToDatabase — ועד היום מחפשים את הבאג.

ב

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

ויהי היום ותיקן המפתח באג במקום אחד, וישכח את המשוכפל — ויהי הבאג, ויהיו הדמעות, ויהי לילה ארוך.

ג

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

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

מחלוקת
רבי מרטין הנקי אומר:

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

רבי קנות' המחושב חולק ואומר:

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

רבי מרטין הנקי:

ומתי ראית לאחרונה bottleneck אמיתי שלא ניתן לפתור בפשטות?

רבי קנות' המחושב:

כל יום שאני כותב קוד. אין פשרות על O(n²) כשיש O(n log n).

רבי מרטין הנקי:

כתוב קוד ברור קודם. מדוד. אז ובלבד — ייעל.

כתוב פשוט קודם. אם מדידה מוכיחה שזה אטי — אז תסבך. לא לפני.

ד

x, data, temp, manager2 — אלו שמות אסורים. שם המשתנה חייב לבטא כוונה, ומי שמשתמש בהם — הרי הוא כמי שמדבר בלשון סתרים.

נשאל אחד מן החכמים: מהו d2? ויאמר: איני יודע, ואני כתבתי אותו. הוי אומר: שם רע הוא גזרה על עצמך ועל הבאים אחריך.

ה

אסור לבנות פיצ׳ר שלא התבקש. הכותב קוד "למקרה שיהיה צורך" — כאילו בנה בית לאורח שלא יגיע.

עקרון YAGNI — You Aren't Gonna Need It. ודרשו חכמים: כל קוד שנכתב ולא נדרש — צריך לתחזק, צריך לבדוק, צריך להסביר. ולמה? לשם מה? לא ידוע.

ו

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

i++ // מגדיל את i באחד — הרי זו הערה שמחרפת את הקורא. אך הערה המסבירה מדוע נעשה דבר — כשרה היא ואף מצווה. ההבדל: what אסור, why מותר ואף רצוי.

מחלוקת
רבי בוב מרטין אומר:

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

רבי ג'ף עטווד חולק ואומר:

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

רבי בוב מרטין:

הערה שמתיישנת — גרועה מהיעדר הערה. שקר כתוב הוא מסוכן מדממה.

רבי ג'ף עטווד:

אז עדכן אותה! חוסר תחזוקה אינו נימוק לחוסר הסבר.

רבי בוב מרטין:

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

שניהם צודקים בחצי. הערות what — אסורות. הערות why — מצווה גמורה.