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

אסור! אבל ממש אסור לבטל את עילת הסבירות. זה פשוט לא מתקמפל על הדעת. הרי בנפשנו ובתוכנתנו היא! אנחנו לא נעמוד בצד, בשקט, כבאג שאין לו הופכין. לא באג פולני אנחנו. אחים לגי"ט אנחנו, ונילחם יחד עד שורת הקוד האחרונה ועד השחזור האחרון.
וכל כך למה, אתן שואלות? אז במסגרת תפקידי כפרשננו לענייני איך באמת עובד ההיי-טק, אני עומד לחשוף בפניכן את האמת לאמיתה, פחות או יותר (בעיקר פחות).
עד הקצה
הכל התחיל בזה שכוהני הפרודקטריון (ע"ע) דחו את הארכי-טקטורה ואת הסְפֶּעק המהולל שכתבתי לטובת הפיצ'ר החדש. דחו! ועוד למי? לי!
ומה הייתה הסיבה? שהארכי-טקטורה המופתית שלי לכאורה לא טיפלה באיזה מקרה-קצה בלתי סביר בעליל. מה אומר ומה אמרג'ג'! על זה מפילים אותי? על מקרה קצה?
וכמה קצה אתן שואלות? קצה כזה כמו הסוף של הפיד בפייסבוק. קצה שבחיים לא תגיעו אליו. עכשיו לך תסביר להם שאין מצב שבאג כזה אכן יקרה במציאות. אמנם אנחנו מוכרים לכולם שאנחנו מתעסקים פה בטכנולוגיות קצה, אבל לא נראה לי שמדובר פה על קצה כזה. לפעמים מותר לוותר על קוצו של קוד, במיוחד קוץ בלתי סביר בעליל (ואני מניח שוותיקות המגזר, ודאי זוכרות שאי-שם בסוף המילניום הקודם, קראנו לבאגים קוצים, ופעולת הדיבוג כונתה ניכוש קוצים. כן, כן).
הם החליטו ללכת איתי עד הקצה, אז פצחנו בלולאת האשמות אינסופית שאת קִיצה מי ישורנו. ממש קץ האימפלמנטציה.
מבחן הבאג הסביר
וכאן בדיוק נכנסה לתמונה עילת הסבירות. מה הייתי עושה בלעדיה. שלפתי את העילה ושכנעתי את הפרודקטריון שהשטות ההיפותטית הזו היא כל כך לא סבירה, שאין שום צורך לבנות ארכי-טקטורה על מנת להתמודד איתה, ושזה רק יגדיל את אחוז דו-תסבוכת התוכנה במוצר שלנו, שגם ככה כבר מגיע לרמה בלתי-סבירה. זהו מבחן הבאג הסביר. אנחנו נטפל רק במה שסביר שיקרה, ומה שבקצה – שיישאר בקצה
אז הבנתן למה זה כל כך חשוב? תארו לעצמכן שאנחנו, הארכי-טקטים המצויים באמת נצטרך להתמודד עם כל מקרי הקצה האלה? הרי אפילו למקרי האמצע אנחנו מצליחים בקושי לייצר איזה ארכי-משהו-מקרטע. עילת-הסבירות היא זו שמאפשרת לנו להתפנות מלעסוק בזוטות, ובכל מיני קצוות לא סגורים, ולהתמקד בתפקידנו העיקרי – לייצר את בעיות העתיד.
שיטת הסניוריטי ופילוסופיית האקסינדט-ציאליזם
אז בית המשפט העליון של כוהני הפרודקטריון קיבל את עילת הסבירות שלי ואישר את הארכי כמו שהיא. עדר של זאבי אימפלמנטציה מורעבים הששים אלי קוד קמו ומימשו את הפיצ'ר בזמן שיא של ספרינט ומחצה.
למחרת כל הפרוגרמה קרסה.
נו! ומה הסבירות שזה יקרה? איפה עילת הסבירות כשצריך אותה? מצאה לה זמן להיעלם בדיוק בחמישה-לבטא. כמובן שבאופן אוטומטי הפעלתי את מנגנוני ההגנה שלי וטענתי לחסינות עקב שיטת הסניוריטי, הקובעת:
כמה שאתה יותר ותיק, ככה אתה פחות אשם
פשוט וקל. שיטת הסניוריטי מבוססת על פילוסופיה ידועה בשם האקסינדט-ציאליזם, שניתן לתמצתה למשפט מפתח אחד:
לא ניתן להוכיח קשר סיבתי בין השטות שעשה הארכי-טקט בשלבים הראשונים של הפרוייקט לבין דו-תסבוכת התוכנה שנוצרה בפרוייקט כתוצאה משטות זאת
פונקציית הלם
כצעד משלים באסטרטגיית ההגנה שלי, ועם קריסת עילת הסבירות שלי החלטתי להפעיל את שדה הזבשמ"א (לאלו שמתעצלות ללחוץ על לינקים: שדה ה"זה בעיה של מישהו אחר").
לצורך כך, עשיתי את הבלתי יאומן, וממרום מושבי הארכי-טוקרטי, כבשתי את גאוותי, סגרתי את כל הדיאגרמות הבלתי מובנות וצללתי אל נבכי הקוד.
לקח לי קצת זמן (שלושה ימים) להבין מה זה ההר הזה של הספגטי, שעוד בטרם הורדו כל הקבצים כבר מריחים ריכוז ברמה סופר גבוהה של דו-תסבוכת התוכנה, מוקף בענן של באגים פוטנציאליים שרק מחכים להזדמנות שלהם לבוא לידי דיבוג.
לבסוף, לאחר חיפושים רבים, מצאתי את הקבצים הרלוונטים לאותו פיצ'ר ואת הפונקציה הספציפית האחראית לאותו באג בלתי-סביר. אמנם הייתי צריך לנער שכבות של אבק מעל הספריות העתיקות האלו, שנכתבו על ידי ראשוני ההיי-טק אי-שם לפני פרוגרמות רבות. ופעם שנייה בפוסט הזה, מה אומר ומה אמרג'ג'. פונקציית הלם. ולא, לא במובן המתמטי (ראו מתחת לקו). אלא הלם פשוטו כמשמעו! כל מי שרק מעיף מבט על הפונקציה הזו חוטף הלם. או שוֹק תוכנתי. אין פלא שעם כזה קוד בלתי סביר מתרחש באג בלתי סביר.
עילת העילות ועיקרון אי הוודאות
ואז נפל לי הביטקוין. שכחתי את אחד הכללים החושבים ביותר של התכנות ההישרדותי, הלא הוא עיקרון אי הוודאות של התוכנה, שכלל הקוראות והקוראים וודאי כבר מכירים היטב. אסור בתכלית האיסור לנסות ולהבין איך הקוד עובד ועושה את מה שהוא אמור לעשות. צריך לתת מקום לנס הזה שנקרא תוכנה עובדת להתרחש. כמאמר חכמי הייטק ז"ל:
אין התוכנה רצה, אלא כשהקוד סמוי מן העין
חייבים להשאיר מקום לאי-הוודאות ולחוסר ההסתברות למלא את תפקידם. העיקרון הזה הוא עילת העילות והרו"ט-קוא"ז של כל הרו"ט-קוא"זים. ברגע שאת נכנסת לקוד עתיק וישן, ומנסה להבין איך הוא עובד, שלא לומר אם את מעיזה לגעת ולשנות אותו (ע"ע עובד – אל תיגע!), אזי אי הוודאות נעלמת לה, ועילת הסבירות מתפוגגת והופכת לענן של באגים.
אה, כן. וכל זה נכון כפל-כפליים כאשר את אותו קוד ישן וארכאי, כתב מישהו שהיום הוא ארכי-טקט בכיר ובלוגר בינוני.
והמהנדס החכם אומר: הארכי-טקטורה היא היכולת לחזות מה יקרה בעתיד, בתוספת היכולת להסביר לאחר מעשה מדוע זה לא קרה (וינסטון צ'רצ'יל, בשינוי קל)
מתחת לקו: אז המושג "פונקציית הלם" הוא מושג אמיתי להחריד (להחריד, כי עדיין יש לי סיוטי לילה כשאני נזכר בתקופת השפל האקדמאית שלי). אבל כהרגלי בקוד-אש, אני נוטה לתת פרשנות מגזרית למושגים מעולמות אחרים במיולד בזווית של הפלג המזרח-תיכוני וכו'.
אז כולן מכירות את פעמון גאוס הידוע, על התפלגות נורמלית. או במילים אחרות: רוב הסיכויים שמה שאמור לקרות יקרה, וסיכון קטנטן שמה שלא אמור לקרות יקרה. זהו הבסיס המדעי לעילת הסבירות התוכנתית. פעמון החירות שלנו.
אבל, במקרה של פונקציית הלם, ההתפלגות היא לא נורמלית בעליל. הגרף למטה (מויקיפדיה) מתאר איך נראית פונקציית הלם. וההסבר הוא פשוט. רוב הזמן הבא הבלתי סביר לא קורה אף פעם. אבל ישנה נקודת זמן אחת, על פי רוב ביום של שחרור גירסה חשובה ללקוחות מרכזיים או בדמו סופר-קריטי למשקיע פוטנציאלי שבה הבאג הבלתי סביר ישתחזר בוודאות. לא סתם וודאות של מאה אחוז. וודאות השואפת לאינסוף. עכשיו לכו תתמודדו עם זה.

Liberty Bell picture by Tony the Misfit on Flickr
"אין פלא שאם כזה קוד בלתי סביר מתרחש באג בלתי סביר."
צריך להיות 'שעם' כזה קוד בלתי סביר..
אל תשאל איזה כיף איתי במסיבות
אהבתיLiked by 1 person
שכוייח. האמת ששמיתי את הטעות בכוונה כדי לדעת עם מישהו בכלל קורא.
כנראה, שאיתי אפילו עוד יותר כיף…
אהבתיLiked by 1 person
אודי, כמות השנינות שנמצאת בפוסטים שלך לא קיימת באף מקום אחר… פשוט תענוג
אגב, הפרק איתך ב'עושים תוכנה' היה נהדר.
אהבתיLiked by 1 person
חן חן. שכחת לכתוב שאני גם צנוע.
אהבתיLiked by 1 person