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

"חייבים כבר לעשות שיפוץ בבית. אבל ממש". ככה זה, כל כמה חודשים אשתי באה אלי עם הריטואל החוזר של לעשות שיפוץ בבית. הפעם הטריגר היה שהילד נתקע באמבטיה ולא הצליח לפתוח את הדלת כי הידית נתקעה. אפשר לחשוב. גם ככה הוא נמצא שם שעות על גבי שעות. שעות עד שמשכנעים אותו להיכנס ושעות עד שהוא יוצא, אז למי זה משנה עוד כמה דקות?
בפעם הקודמת זה הגיע בעקבות המשקוף בחדר של הבנות שהתמוטט ופיספס את הראש של הבת שלי בכמה סנטימטרים בודדים. אפשר לחשוב, לא קרה שום דבר. אף אחת לא נפגעה. אפשר לחזל"ש.
למי יש כח עכשיו לשיפוץ. לכל דבר אפשר להתרגל, ומה שלא הורג מחשל. או מחשמל, כמו במקרה של השקע השבור במטבח. ומי אמר שהמגירה של הצלחות צריכה להיסגר עד הסוף? או שחייב שיהיה אור במחסן? יש פנס בפלאפון.
אף פעם אין זמן לשיפוץ. כשהמילה זמן בהקשר הזה משמעותה "חשק". ולמה? כי כל שיפוץ, אתה יודע איפה הוא מתחיל, אבל אין לך מושג איפה ומתי הוא הולך להסתיים, אם בכלל.
וכמובן שכמו בחיים, כך גם בהיי-טק. גם אצלנו מדי פעם עושים שיפוץ. שיפוץ בקוד, כן? לא רק במשרדים. גם הקוד דורש שיפוץ לפעמים. אבל בהיי-טק כמו כל דבר בהיי-טק, אי אפשר לקרוא לזה סתם "שיפוץ". זה לא נשמע מספיק היי-טקי. אז המציאו לזה יופי של שם – ריפקטורינג. במקום לשפץ את הקוד מְרָפְקְטֶרִים אותו.
כידוע לרובנו, פקטורי זה מפעל, כלומר מקום בו מייצרים דברים. ולכן ריפקטורינג משמעותו זה לייצר שוב משהו שכבר קיים. זה נשמע תהליך מאוד פרודוקטיבי ויעיל לעשות שוב משהו שכבר עשינו קודם והוא אפילו כבר עובד. ממש תפור על ההיי-טק הידוע בשלל פרוססיו ותהליכיו היעילים להפליא.
ולא, זו לא המצאה שלי. הנה זה מה שיש להגיד לויקיפדיה על ריפקטורינג: ארגון הקוד מחדש (נקרא גם Refactoring ) משמעו שיפור קוד קיים על ידי שימוש בטכניקות שנועדו לשפר את המבנה הפנימי של הקוד מבלי לשנות את ההתנהגות החיצונית שלו. או במילים שלי: איך לעבוד קשה בשביל להגיע למקום בו כבר היית.
אין לי מושג מי כותבת את הערכים של ההיי-טק בויקיפדיה, אבל ברור לי שהיא אינה מקוראות פינת הקפה, ובודאי שאינה מודעת לכללי התכנות ההישרדותי. כל הריפקטורינג הזה עומד בסתירה גמורה לכלל השני של התכנות ההישרדותי שהוא כידוע: עובד? אל תיגע. ואם נגעת וגם שברת – שילמת.
אבל מה שחתם את גזר הדין, היה הטקסט הבא מויקיפדיה. יושבים? הנה זה בא:
יתרונות ה Refactoring לעומת בניית הקוד מחדש:
- הריפקטורינג אורך פחות זמן באופן משמעותי מתכנות מחדש, בהנחה שהאדם שמבצע את השינוי מכיר היטב את הקוד ואת הפונקציונליות שלו
- אי יצירת באגים חדשים
- המשך שיווק התוצר בכל שלב
- לו"ז צפוי
מה אומר ומה אדבר. כל האמון שלי בויקיפדיה התמוסס פלאים, כמו לראות קוד של ג'וניור טרי ולהבין שבאמת חבל על הזמן. אין להם שם צוות בדיקות בויקיפדיה? ונפרוט את הדברים לפרוטות (כי זה באמת לא שווה יותר מכמה גרושים):
"הריפקטורינג אורך פחות זמן…". פפףףףף. מה לוקח פחות זמן בדיוק? היה לכם משהו עובד ביד, אז בשביל מה לגעת? כן, אני יודע, תמיד מגיע הפרקפציוניסט הזה, שרק עושה שינוי קוסמטי בקוד. כלומר משאיר את כל החארה כמו שהוא, רק עוטף אותו בעטיפה יפה. בהיי-טק אוהבים לקרוא לזה Beautification, כלומר יִיפּוּי. אשכרה טיפול קוסמטי. החמור הבטיח למנהלת האומללה שהוא לא נוגע בשום דבר פונקציונלי, רק משנה את הסדר ומעדכן את הדוקומנטציה. למחרת כבר כלום לא עובד. כמו מה שקורה כשאני מחליף נורה בבית ואז כל החשמל נופל. הלכת לקוסמטקאית שתעשה אותך יפה ויצאת מפלצת. היו צריכים לקרוא לזה Beastification ולא Beautification. היפה והחיה. זה לא ייפוי, זה פוי. שעה של ביוטיפיקיישן, ושבוע לתקן את הנזקים.
נמשיך הלאה: "בהנחה שהאדם שמבצע את השינוי מכיר היטב את הקוד ואת הפונקציונליות שלו" -איזו מין הנחה זאת? ראיתם פעם שיפוצניק שיודע איפה בדיוק עוברת הצנרת? הוא מנסה בפינה הזאת, ואחר כך בשניה ופתאום בחצי בית אין רצפה. ככה זה גם בריפקטורינג. את מתחילה בפינה אחת של הקוד, שאולי פעם כתבת והבנת מה היא אמורה לעשות, אבל תוך שעות בודדות כבר שינית מאות קבצים, שאין לך מושג קלוש מה הם עושים ומה בכלל שינית בהם. אבל כבר אין דרך חזרה. הנחה אלק.
"אי יצירת באגים חדשים" – הסיבה היחידה שעולה בדעתי לחשוב שהריפקטורינג לא גורם לבעיות חדשות, היא שהוא חושף כל כך הרבה בעיות ישנות בתשתיות, כך שלאף אחד כבר לא ממש אכפת מהבאגים החדשים. ברגע שאתה מבין שכל העסק פה רקוב מהשורש (בבית, בקוד, בחברה…) כבר לא איכפת לך באמת מהבאגים החדשים, נכון? כשהאינסטלטור אומר שצריך להחליף את כל הצנרת של הבנין, הטפטוף בברז בגינה כבר לא באמת מטריד.
"המשך שיווק התוצר בכל שלב" קדחת. על הצ'ק-אין הראשון של הריפקטורינג כל האוטומציה מושבתת. כמו שאמרו זקני ההיי-טק: הבראנץ' נשבר ואנחנו קרסנו. בדיוק כמו בשיפוץ בבית. איך שההוא מתחיל לעבוד, אין ברירה אלא להסתלק מהבית עד שהוא מסיים. אז כשמישהו מתחיל ריפקטורינג, פשוט שישלח מייל לכולם: ה GIT סגור לרגל שיפוצים.
אבל שיא השיאים, כמו באג באמצע הדמו, כמו בלק-אאוט באמצע פרזנטציה בכנס, זה משפט המחץ הבא:
"לו"ז צפוי" מאיפה זה הגיע? מתי פעם אחת ראיתם שיפוץ שהסתיים בזמן. אתה יודע מתי ואיפה זה מתחיל, אבל אין לך מושג מתי ואיך זה יסתיים. ובעיקר לא כמה זה יעלה. ותיקי ההיי-טק בודאי זוכרים את הדפדפן המופלא מראשית ימי האינטרנט, הלא הוא נטסקייפ הנהדר. שעקבותיו אבדו אי שם בין גירסה 5 ל 6 בעקבות ריפקטורינג של הקוד.
ועוד כמה הגיגים על ריפקטורינג לקראת סיום הפוסט:
בת הדודה הסטודנטית של הריפקטורינג היא המילה האוניברסיטאית הנפוצה פקטור. פקטור, כידוע, הוא סוג של קסם אקדמי שגורם לציון במבחן להיות יותר גבוה ממה שהוא באמת, כלומר הוא משפר את הציון. למרות שלפחות פעם אחת בהיסטוריה האקדמית המפוקפקת שלי, קרה מקרה ובו הפקטור הפתיע לרעה, פרטים מתחת לקו. אבל אם כך, אזי רי-פקטור משמעותו הפוכה, כלומר לקחת משהו ולעשות אותו יותר גרוע. אז למה?
אבל מעבר למשחקי המילים המטופשים (וכן אפשר להמשיך עם זה למחוזות פחות מנומסים) חשוב לאפיין שני סוגים מרכזיים של חובבי שיפוץ הקוד. הסוג הראשון של המשפץ, הוא בדרך כלל מצוות האריסטוקרטיה. אופס, התכוונתי לומר צוות הארכי-טקטורה. אותו דינוזאור שכבר שנים לא כתב קוד, אבל הוא בטוח שאם רק היו נותנים לו הוא היה עושה את זה הרבה יותר טוב. הוא רק מלכלך על הקוד הנוכחי, ומתלונן כל הזמן, כמה זה גרוע, ואיך המהנדסים לא הבינו בכלל למה הוא התכוון, ובכלל המנדסים של היום זה כבר לא. הדרך הקלה להתמודדות עם ארכי-טקט כזה היא פשוט לתת לו לכתוב מחדש כמו שהוא רוצה. זה כבר יסתום לו את הפה (בדוק. אני מכיר אחד כזה מגוף ראשון).
אבל הסוג השני, והנפוץ יותר, אלו הם המהנדסים שאצלם השיפוץ הוא בדם, ממש טבע שני. חלק משגרת החיים. הם כל הזמן משפצים ומרפקטרים ועושים ביוטיפיקיישן און-גואינג, עד שאין להם זמן לממש את הפונקציונליות עצמה. ואז הם מבקשים עוד זמן, ואז צריך עוד שיפוץ ועוד זמן… וכך הסיפור (story), נמשך לעד. השיפוץ שאינו נגמר.
אבל אין מה לעשות, שיפוץ הוא חלק בלתי נפרד ממחזור החיים שלנו גם בבית וגם בעבודה. מסתבר ששום דבר שאנחנו עושים לא מושלם, ותמיד אפשר לשפץ עוד טיפה פה, ועוד טיפה שם. עד שפתאום פתאום נהיה מבול.
והאמת, שגם הפוסט הזה דורש שיפוץ לא קטן, אבל כמו שפתחתי – למי יש כח עכשיו לשיפוץ?
והמהנדסת החכמה אומרת: חוק הקידמה קובע שהכל עכשיו חייב להיות טוב יותר ממה שהיה קודם. האם אינך רואה שאם אתה רוצה משהו טוב יותר, וטוב יותר, וטוב יותר, אתה מאבד את הטוב. הטוב כבר לא נמדד (חנה ארדנט)
The law of progress holds that everything now must be better than what was there before. Don’t you see if you want something better, and better, and better, you lose the good. The good is no longer even being measured (Hannah Arendt)
מתחת לקו:
זה היה בסימסטר השלישי שלי בטכניון, באיזה קורס מתמטי מעורפל בשם משוואות דיפרנציאליות חלקיות, או אולי טורי פוריה והתמרות אינטגרליות, או קללה אחרת. אני כבר לא באמת זוכר.
מה שאני כן זוכר זה שהבוחן אמצע סימסטר היה מבחן אמריקאי בן עשר שאלות. כל תשובה נכונה מזכה ב 10 נקודות. אבל כדי שהסטונדטים המתוחכמים אך עצלנים לא יעשו טוטו, כל תשובה שגויה הורידה 5 נקודות. לא פראיירים היו שם, בטכניון, אי שם לקרא סוף המאה שעברה.
החלטתי לענות רק על השאלות שאני יודע בוודאות. היו רק חמש כאלה, מכובד למדי. לגבי שתיים נוספות התלבטתי, והחלטתי לא לקחת סיכון. 50 נקודות זה מכובד, ובטח יהיה פקטור של איזה 15-20 נקודות אז אני אעבור.
אחרי שבוע פרסמו את הציונים (אז, כשהאינטרנט עוד היה בחיתוליו, את הציונים היו תולים על לוח המודעות לפי תעודת זהות, עוד לא שמעו על פרטיות בימים ההם). כולם קיבלו ציונים חוץ ממני. אצלי לא היה ציון. ניגשתי למתרגל לברר מה קרה. הוא פתח את האקסל והראה לי שבתא שאמור להכיל את הציון שלי יש שגיאה. ישבנו לדבג את העסק, ומהר מאוד הבנו מה קרה.
המרצה המכובד החליט לעשות פקטור שורש. למי שאינה יודעת, הנוסחה פשוטה. לוקחים את הציון האמיתי, מוציאים לו שורש ומכפילים ב 10. מי שקיבל 100 (אף אחד) נשאר עם 100. מי שקיבל 64 קפץ ל 80. 25 הפך ל 50 וכן על זה הדרך.
אבל אני, אני עניתי רק על 5 שאלות. וטעיתי בכולן, לכן הציון המקורי שלי היה 25-. והציון אחרי פקטור היה 50i. אפילו האקסל לא ידע איך לאכול את זה.
איך זה נגמר? הכי טוב שאפשר. מיד למחרת התחילה שביתת המרצים הגדולה, שהסתיימה בפטור עם נקודות על כל הסימסטר. הלוואי על כולם.
גדול , וכל כך אמיתי ונכון….
אהבתיLiked by 1 person
חן חן, הכל אצלי אמיתי ונכון, אחרת זה לא היה "גדול"…
אהבתיאהבתי
בדרך כלל קורא ולא מגיב, אז כל הכבוד על הבלוג. משעשע ביותר. אני לגמרי מודע לכל הסיכונים של הריפקטורינג, וראיתי לא פעם איך הסיפור הזה הופך לחור שחור ששואף פנימה את כל המשאבים והמוטיבציה של צוותים. יחד עם זאת, כמו בחיים, לפעמים חייבים שיפוץ. וכמו בחיים, התוצאה של השיפוץ וכמות הסבל שבדרך יהיו תלויים ביכולות השיפוצניק (או הצוות).
יש מחיר לריפקטורינג, אבל גם יש מחיר ללא לעשות ריפקטורינג. כל אחד בוחר את הרעל משלו, אבל, בסוף, כולם שותים רעל כזה או אחר.
אהבתיאהבתי
"אז, כשהאינטרנט עוד היה בחיתוליו, את הציונים היו תולים על לוח המודעות לפי תעודת זהות, עוד לא שמעו על פרטיות בימים ההם" – מזכיר נשכחות מהימים שבמדפסת היו סיכות
אהבתיLiked by 1 person
ואת המערכת שעות לסימסטר היינו מקבלים במזכירות על דפי מדפסת עם חורים בצדדים…
אהבתיאהבתי
הרגת אותי לפחות פעמיים …
פעם ראשונה עם "הבראנץ' נשבר ואנחנו קרסנו"
ושניה עם הסיפור על הציון בבוחן … אם בארזים נפלה שלהבת – מה יגידו אזובי הקיר?!
אהבתיLiked by 1 person
האמת שהסיפור על הבוחן לא לגמרי מדויק. אני לא ידעתי אף תשובה אחת, סתם ניחשתי חמש תשובות…
אהבתיאהבתי
אחלה פוסט, חזק כמו תמיד.
אגב, שורש של 25- זה 5i לא מינוס 5i 🙂
אהבתיLiked by 1 person
צודק. וזה בכלל צריך להיות 50i… כי מכפילים ב 10
אהבתיאהבתי
תיקנתי…
אהבתיאהבתי
ענק, פשוט ענק..
הניתוח של הערך של ריפקטורינג בוויקיפדיה היה מדוייק להפליא, הזדהיתי עם כל מילה! 😂😂
אהבתיLiked by 1 person
שכחתי לכתוב שביסודי הייתי בחוק בייסיק שרץ על TRS80…
אהבתיאהבתי