
למה לא כדאי לנסות להבין איך התוכנה שלנו עובדת? מסמכי עיצוב (Design בלע"ז) הם יותר עצובים או יותר מעצבנים? ואיך כל זה קשור ל"אפקט הצופה"
הכל התחיל כשניסיתי להבין איך מנגנון מסויים בקרביים האפלים של המוצר שלנו עובד. התחלתי לרחרח ולשאול שאלות, אבל מסתבר שאף אחד לא באמת יודע מה קורה שם בפנים. ניסיתי לבדוק בקוד עצמו, אבל כשראיתי איך הקוד נראה, מהר מאוד הבנתי שמכאן לא תצמח הישועה. אם אני הייתי הקוד הייתי מכניס את עצמי לללואה אינסופית ומסרב להריץ שום דבר אחר. גם היה לי קשה להבין איזה קומפיילר הסכים לקמפל את הזוועה הזאת.
ואז נזכרתי. הרי יש לנו מסמכי ארכיטקטורה ומסמכי Design, שבעברית נקראים מסמכי עיצוב. אני לא בטוח אם קראו להם כך בגלל שזה נורא מעצבן לכתוב אותם, או בגלל שנורא עצוב לקרוא אותם. בכל אופן, הרי השקענו לא מעט זמן ומחשבה בתכנון של התסבוכת הזאת שנקראת הפרוייקט שלנו, ותעדנו את הכל במסמכים מפורטים. הרי בדיוק לרגעים כאלו נועדו המסמכים, לא?
אחרי חצי יום של חיפוש במחשבים של כל חברי הצוות, בשרתים, בכל העננים ואיפה לא. בסוף ממש לפני יאוש, מצאתי. אלא שלצערי הרב לא מצאתי מסמך אחד שמתאר את המנגנון המסתורי, מצאתי שלושה. שלושה מסמכים שבאופן מופלא סתרו כל אחד את השניים האחרים במאת האחוזים, כאילו יצאו מציור של מ. ק. אשר. סתירה תלת-מימדית. עכשיו לך חפש ת'חברים שלך.
אז הלכתי לחפש את החברים התותחים שלי. אתם יודעים, בכל קבוצה יש את האחד או שניים האלה שרק הם באמת מבינים איך כל העסק עובד. אבל הבחורה בדיוק הייתה בחופש. אני לא מבין איך בכלל מאפשרים לה לצאת לחופש ועוד בדיוק כשאני צריך אותה! יש אנשים שכשהם יוצאים לחופש, אפשר לסגור את החברה עד שהם חוזרים.
אז עשיתי קצת רעש ובלאגן וצעקות, ואיך זה יכול להיות שאף אחד בבנין לא מבין איך המוצר שלנו בכלל עובד, ובשביל מה אנחנו כותבים מסמכים כאלה ארוכים שאין כל קשר ביניהם לבין מה שקורה במציאות, ובכלל שכבר נמאס לי ואני רוצה ללכת הביתה.
אחרי שנרגעתי, חשבתי לעצמי שבעצם אולי עדיף ככה. ראיתי בדמיוני את קערת הספגטי המכונה התוכנה שלנו (זה לא סתם דימוי, ראו בפוסט "ספגטיפיקציה"), ונזכרתי בדברי חכמינו "אין הברכה שורה אלא בדבר הסמוי מן העין". או במילים שלי: יש דברים שאולי עדיף שלא לדעת איך הם עובדים. כי ברגע שתתחיל לחפור ולנסות להבין איך כל העסק עובד, יש מצב שהעסק יפסיק לעבוד! פתאום ההתוכנה תרים את הראש, תסתכל מסביב ותשאל את עצמה: "מה הולך פה? הרי הקוד הזה בכלל לא יכול לעבוד!" ובאותו רגע התוכנה תקרוס לתוך עצמה בתוך ענן של באגים.
באותו הזמן, הגעתי למסקנה שחייבים לשמור על עיקרון אי הודאות של התוכנה. צריך לתת לדברים להיפתר מעצמם, באופן טבעי ובעיקר ללא התערבות יד מקודדת. זה קצת דומה לעיקרון אי הוודאות הפיסיקלי, או ליתר דיוק למה שמכונה בעולם המדעי אפקט הצופה – "עצם פעולת הצפייה באירוע מסוים עלולה לשנות את מהלכו". בבקשה. זה לא אני אמרתי – זה הוכח מדעית. ברגע שאתה מנסה להבין איך משהו עובד, הוא עלול להפסיק לעבוד.
אגב לאפקט זה ישנן השלכות רבות, בעיקר בתחום בדיקות התוכנה והוולידציה. שהרי ברור לכל בר דעת שאם עצם פעולת הבדיקה משנה את התנהגות המוצר, אז אין כל טעם לבדוק אותו! גם הכלל השני של התכנות ההישרדותי, הידוע יותר בשמו "עובד? אל תיגע" קשור לעיקרון הנ"ל. אבל אלו כבר נושאים לפוסטים עתידיים (יש למה לחכות!)
אבל חזרה לענייננו, מן הראוי להדגיש את חשיבות השמירה על עיקרון אי הוודאות של התוכנה. צריך להשאיר מקום לנס הזה להתרחש. וכמובן, שביום בו נהפוך את התוכנה לדטרמיניסטית וצפויה, מעבר לחשש שהתוכנה תפסיק לתפקד, ייתכן ועוד יקום מישהו וירצה שגם נסביר למה היא מתנהגת כמו שהיא מתנהגת. כל עוד שומרים על דרגות החופש ואי הוודאות בתוכנה, אי אפשר להאשים אותנו, את כותבי הקוד, בתוצאות הריצה שלה, יהיו אשר יהיו. במקום קוד דטרמיניסטי, עדיף קוד לכתוב קוד דתי-מיסטי.
לכן, בפעם הבא שאיזה מנהל פיתוח מבקש מכם לכתוב מסמך שמתאר איך המערכת עובדת, תסבירו לו שלא כדאי לו. לטובתו, עדיף להשאיר את העניין לוּט בערפל. שהרי אם הכל עובד אף אחד לא יקרא את המסמך. ואם משהו לא עובד, אז המסמך גם ככה לא יעזור.
והמהנדס החכם אומר: חוסר הוודאות הוא הכרחי, הוא הנתיב אל החופש." (דיפאק צ'ופרה)
מתחת לקו: הטקסט הבא נכתב מתחת לקו, כדי שחס וחלילה לא יאשימו אותי בהדתה (וגם כי עדיין מתלוננים שהפוסטים ארוכים מדי). ראו הוזהרתם קטע קוד דתי-מיסטי לפניכם:
במשך שנים ארוכות, כל פעם שהיה לי משבר באמונה והייתי מחפש דרך להתגבר עליו, הייתי מחכה למילואים. כשהייתי מגיע לבסיס, והייתי רואה איזה בלאגן אטומי הולך בצבא שלנו, מיד האמונה הייתה חוזרת ובגדול. מהר מאוד אתה קולט שבטוח יש פה איזו השגחה עליונה ששומרת עלינו, אחרת אין סיכוי שלא קורעים אותנו תוך חמש דקות. אבל אז הפסיקו לקרוא לי למילואים, אך מצד שני משברי האמונה לא פסקו ואולי אף התגברו. אז מה עושים? התשובה פשוטה, כל פעם כשהאמונה קצת נחלשת פותחים את הקוד של התוכנה שלנו. זה כמו זריקת מרץ. אתה רואה את הקוד ואז רואה את המוצר הסופי ומבין לבד שבטוח יש פה איזה כח עליון שגורם לדברים לעבוד.
נפלא!
אהבתיאהבתי
מצוין… מה עם עוד טורים חדשים???
אהבתיאהבתי
אהבתי את השיעור באמונה! אמיתי…
אהבתיLiked by 1 person