האם אני עטלף עיוור?? על מי לא נאמר "אם אתה מאמין שיכולים לקלקל תאמין שיכולים לקלקל"? פוסט רקורסיבי ומתוסבך על סיבוכיות. ותזכורת מסיבית התרנגול…

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