#83 וכל המרבה הרי זה מסובך

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

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

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

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

דו-תסבוכת התוכנה

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

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

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

מכונת רוב גולדברג

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

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

פרדוקס חוק מור וחוק החמור

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

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

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

ככל שהמעבדים נעשים מהירים יותר והזיכרון הופך זול יותר, התוכנה הופכת איטית יותר ונפוחה יותר, תוך שימוש בכל המשאבים הזמינים.

נותנים לך, לא תיקח?

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

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

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

תערו של אוקאם

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

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

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

והמהנדסת החכמה אומרת: אתה מתחיל הכי מסובך שלך, ולאט לאט אתה מסתבך עוד יותר.


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

9 תגובות בנושא “#83 וכל המרבה הרי זה מסובך

  1. . funny as always, Udy. very true. In the name of elegance and future proofing and other 'noble' causes, too much code has and continues to be written.

    Liked by 1 person

  2. (קוראים, כי הקוראות כולן בנות פחות מ 22)
    ואני בת 17 🙈
    עדיין מותר לי לקרוא, נכון? 😉

    Liked by 1 person

    1. זה נקרא chicken bit לא מלשון תרנגול אלא מסלנג של "להשתפן", to chicken out, כי זה ביט שמאפשר לך "להשתפן" ולבטל שינוי גדול שאתה לא בטוח ב 100% בנכונות שלו.
      בתכנון צ'יפים המושג ידוע, ושם גם מוכיחים פורמלית (מתמטית) שאם מאלצים את הצ'יקן ביט למצבו הפעיל, הצ'יפ יחזור להתנהג באופן זהה לגרסה הקודמת.

      Liked by 1 person

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת /  לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת /  לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת /  לשנות )

מתחבר ל-%s