סגור לרגל שיפוצים: על סיוט ושמו ריפקטורינג

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

מקור: Unsplash​

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

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

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

למי יש זמן לשפץ?

אף פעם אין זמן לשיפוץ. כשהמילה זמן בהקשר הזה משמעותה “חשק”. ולמה? כי כל שיפוץ, אתה יודע איפה הוא מתחיל, אבל אין לך מושג איפה ומתי הוא הולך להסתיים, אם בכלל.

וכמובן שכמו בחיים, כך גם בהייטק. גם אצלנו מדי פעם עושים שיפוץ. שיפוץ בקוד, כן? לא רק במשרדים. גם הקוד דורש שיפוץ לפעמים. אבל בהייטק כמו כל דבר בהייטק, אי אפשר לקרוא לזה סתם “שיפוץ”. זה לא נשמע מספיק הייטקי. אז המציאו לזה יופי של שם – ריפקטורינג. במקום לשפץ את הקוד מְרָפְקְטֶרִים אותו.

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

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

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

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

יתרונות ה Refactoring לעומת בניית הקוד מחדש:

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

  • אי יצירת באגים חדשים

  • המשך שיווק התוצר בכל שלב

  • לו”ז צפוי

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

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

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

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

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

“המשך שיווק התוצר בכל שלב”… קדחת. על הצ’ק-אין הראשון של הריפקטורינג כל האוטומציה מושבתת. כמו שאמרו זקני ההייטק: הבראנץ’ נשבר ואנחנו קרסנו. בדיוק כמו בשיפוץ בבית. איך שההוא מתחיל לעבוד, אין ברירה אלא להסתלק מהבית עד שהוא מסיים. אז כשמישהו מתחיל ריפקטורינג, פשוט שישלח מייל לכולם: ה-GIT סגור לרגל שיפוצים.

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

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

בין ריפקטורינג בקוד לפקטור באוניברסיטה

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

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

אבל הסוג השני, והנפוץ יותר, אלו הם המהנדסים שאצלם השיפוץ הוא בדם, ממש טבע שני. חלק משגרת החיים. הם כל הזמן משפצים ומרפקטרים ועושים ביוטיפיקיישן און-גואינג, עד שאין להם זמן לממש את הפונקציונליות עצמה. ואז הם מבקשים עוד זמן, ואז צריך עוד שיפוץ ועוד זמן… וכך הסיפור (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-. והציון אחרי פקטור היה -5i. אפילו האקסל לא ידע איך לאכול את זה.

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

 

 

 


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

אודי הרשקוביץ

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

הגב

19 תגובות על "סגור לרגל שיפוצים: על סיוט ושמו ריפקטורינג"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

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

סידור לפי:   חדש | ישן | הכי מדורגים
איתי
Guest

היה כיף לקרוא :)

מיכל
Guest
פיספסת בענק את המטרה של ריפקטורינג ולכן כל מה שכתבת, אבל הכל*, לא נכון. המטרה היא לא ליפייף קוד כי משעמם. המטרה היא להפוך אותו לכזה שניתן לתחזוקה יותר טובה. קודם היה משהו שעובד, אבל עם מיליון קופי-פייסטים כך ששינוי במקום אחד דרש שינוי בעוד מיליון (ואם לא עושים אותו שוברים את הקוד – ואפרופו – סביר להניח שמי שלא מכיר את הקוד ולא זהיר מספיק אכן לא יעשה אותו) והופכים את זה למצב שבו כל דבר כתוב רק פעם אחת. קודם היה משהו שקשה למצוא ולתחזק כי מישהו פיזר דברים במקומות לא קשורים, או להיפך: עשה god class אחד… Read more »
השם שלי קצר מידי
Guest
השם שלי קצר מידי

התגובה שבאתי לכתוב… הרסת לי :-)

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

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

ריפקטורינג הוא גם דבר קל במיוחד בשפות/סביבות נורמאליות. בממשק של IntelliJ בג׳אווה או כמעט כל שפה שיש לה typing התהליך הוא פשוט כמה קליקים וזהו. אין כמעט באגים שקשורים בזה. שווה את ״ההוצאה״ לחלוטין.

עמית
Guest

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

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

תותח על
Guest

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

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

אחרי השורש מכפילים ב-10?
Guest
אחרי השורש מכפילים ב-10?

50i-

אחרי השורש מכפילים ב-10?
Guest
אחרי השורש מכפילים ב-10?

50i
כי 5i בריבוע זה 25-
ויש את ההכפלה ב 10

רון
Guest

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

אוהד
Guest

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

Gal
Guest
עובד/ לא עובד זה ממש לא הפרמטר היחיד למדידת קוד! גם קריאות, עמידות לשינויים, והזמן שלוקח לבצע שינויים חשובים! זה רק טבעי שבמרדף היומיומי אחרי המשימות, תוספות קוד קטנות יצטברו ויכבידו על הנ”ל. לפעמים השקעה של מעט זמן בריפקטורינג(בגיבוי טסטים משמעותיים ואיכותיים) יחסכו המון זמן להרבה מפתחים בעתיד. משהו שחשוב להבין(ולא משתמע מהטקסט) – ריפקטורינג הוא אוסף של טכניקות/ patterns ממש כמו חילוק ארוך. ישנם סימנים(bad smells) שמרמזים שדרוש ריפקטורינג ויש כללים מאוד ספציפיים איך לבצע כל pattern של ריפקטורינג. אם עובדים נכון, מסודר, ובהדרגה, זו באמת תהיה משימה קלה. אם נוצרים באגים בעקבות ריפקטורינג, המשמעות היחידה היא שנעשו טעויות… Read more »
מיכל
Guest

מה שכתבתי למעלה

Metamark
Guest

דחוף ריפקטורינג לכתבה

איילוס
Guest

מעולה

second life
Guest

sad but true
צריך לקרוא לזה refracturing

second life
Guest

מסייג: יחד עם זאת כמובן שזה הליך חיוני ובלתי נמנע בתוכנה גדולה ומורכבת

סטארטאפיסט
Guest
הפוסט הכי מדוייק שקראתי בגיקטיים אי פעם. וגם אני כמו הכותב עם 21 שנות ניסיון בתעשיה (בתפקידי פיתוח בלבד ועד VP R&D שעדיין כותב קוד). המגיבים הממורמרים הם בדיוק כאלה שהכותב מתלונן עליהם. בטח קראו בלוגים ויוטיובים ו”חייבים לסדר את התשתיות פה בלה בלה בלה”. תקשיבו למתכנת זקן: הטכנולוגיה הלוהטת של היום זה הבדיחה של מחר. וכן, אני יודע שריפקטורינג זה לא עניין של טכנולוגיה, אבל לא תמיד חייבים לפצל ל4 קלאסים, או לאחד קוד של קופי-פייסט שבמקור נכתב מסיבה מסויימת. אני לא אומר שאני לעולם לא עושה ריפקטור, אבל אני הרבה יותר שמרן בנושא הזה מאחרים וברירת המחדל שלי… Read more »
מיכל
Guest

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

לא “חייבים” לפצל או לאחד עד ש… זה נושך אותך בתחת.

אתה בטח code monkey כזה שרואה ערך מוסף בלספור שורות קוד וחושב שיותר שורות זה יותר טוב, ויש לך מנהלים לא-טכנולוגיים שלא מבינים למה כל שינוי שאתה עושה לוקח ימים או למה יש כל כך הרבה באגים. אתה בטח אומר להם “ככה זה תוכנה” והם לא יודעים שבעצם בנית אותה בצורה גרועה ואתה יוצר פאצ’ים על פאצ’ים ובאגים על באגים.

הזכרת יוטיוב? הנה שיר עבורך: https://www.youtube.com/watch?v=qYodWEKCuGg

רועי
Guest

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

בנציה
Guest

אשמח אם תשתף את שם החברה בה אתה עובד כדי שאדע לא להגיש אליה קורות חיים.

wpDiscuz

תגיות לכתבה: