#11 של מי השורה הזאת בכלל?

סיפור שהיה באמת

The_Judgment_of_Solomon 2

זה היה אמור להיות עוד יום עבודה סטנדרטי בחייו של ג', מתכנת ותיק ממוצא רוסי בחברת הייטק ידועה באזור המרכז. לא היו עליו באגים כבדים והוא כבר כמעט סיים לעבור על הספסיפקציה של החומרה החדשה. ככה שנראה שהולך להיות יום רגוע, שלא לומר אפילו משעמם. בערך ברבע לאחת עשרה, אחרי כוס הקפה השלישית זה קרה. ג' פתאום שם לב שכבר תשע דקות שלמות הוא לא בדק אם יש מיילים חדשים. הוא עבר ברפרוף על תוצאות הבדיקות של הגירסה האחרונה, שבאופן חשוד נראו זהות לכל תוצאות הבדיקות שנשלחו בחודשיים האחרונים. הוא גם ענה לאדמינית שהוא ממש היה רוצה אבל לא מסתדר לו להגיע להתנדבות בבית האבות הפעם. גם תגובה זו הייתה זהה באופן חשוד לתגובות של ג' לכל פעילויות ההתנדבות שהיו בשלוש השנים האחרונות. ואז ג' הגיע למייל בעל הכותרת התמימה: "Potential customer issue" (בעיה פוטנציאלית אצל הלקוח, למי שמתקשה). הוא פתח את המייל והתחיל לקרוא. כעבור כשעה וחצי של חפירות בקוד ג' סוף סוף הצליח להתנתק מהמסך, ושאגה אדירה הדהדה ברחבי הקומה: "מי החמור שכתב את השורה הזאת?!"

ג' לא התמהמה יותר מדי, ותוך דקות יצא מייל בעדיפות סופר עליונה, עם כותרת מודגשת ושלושה סימני קריאה. טובי המוחות של הארגון נקראו בניסיון נואש להבין את שורת הקוד העלומה שעל פי מיטב הבנתו ודיבוגו של ג' היא הגורמת לבעיה. אף אחד לא הצליח להסביר למה השורה המוזרה הזאת נמצאת שם ומה היא בדיוק אמורה לעשות. כדי להוסיף עוד נופך של מיסתורין לבעיה, אחת המתכנתות שמה לב פתאום להערה שהופיעה ממש מעל השורה החשודה בה נכתב: "To do: Not sure why this line is here, but don't delete it", או במילים אחרות: שלא תעיזו למחוק את השורה הזאת. ג' קפץ כנשוך נחש ומיד רץ לקמפל גירסה חדשה בה הוא פשוט מחק את אותה השורה שאין למוחקה. וראה זה פלא, בגירסה החדשה הבעיה אכן נעלמה כלא הייתה. ג' היה מאושר, עוד בעיית לקוח באה אל סיומה על הצד הטוב ביותר, ועוד בפחות מחצי יום עבודה.

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

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

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

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

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

[מבוסס על מאות סיפורים אמיתיים שקורים כל יום בעשרות חברות הייטק, השמות והעובדות שונו על מנת שלא לפגוע בשמם הטוב של אנשי ונשות התוכנה המעורבים]

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

3 תגובות בנושא “#11 של מי השורה הזאת בכלל?

  1. אחלה סיפור, משעשע ומבריק, אך לא ברור מה מוסיף לסיפור התיאור של ג' "ממוצא רוסי"?
    אני ישר נזכרתי בסיפור הקודם שלך שבו מסופר על המתכנת "ממוצא אסיאתי". בארה"ב למשל, אתה כבר מזמן היתה מואשם בשנאת זרים. בארץ כנראה הנורמה של הציבור נמוכה יותר, אך זה לא משנה את העובדה שקורא השורות יכול (אולי) להבחין בניחוח גזעני.

    אהבתי

  2. נהניתי לקרוא..אך לא מציאותי לשנים האחרונות. כיום הקוד נמצא בgit בו אפשר לזהות מי כתב כל שורה מיידית

    אהבתי

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

    אהבתי

כתיבת תגובה