אנשים אוהבים לכתוב. הרבה מאוד אנשים אוהבים לכתוב. יותר אנשים אוהבים לדבר, אבל המון אוהבים לכתוב. והרבה. מתכנתים הם גם אנשים (ובכן, זה עדיין טעון הוכחה אבל בואו נצא מנקודת הנחה שזה נכון) וגם הם אוהבים לכתוב, והרבה.
באחד הפרוייקטים שבהם טיפלתי, עברה התוכנה מספר גלגולים שכללו התחלת פיתוח במיקור חוץ, המשך פיתוח עם פרילנסרים וסיום הפיתוח בבית החברה.
אפשר להגיד הרבה דברים טובים לזכותם של המפתחים ההודים, אבל ארכיטקטורה נכונה וקוד יעיל אינן הנקודות החזקות שלהם. מצד שני, ממש כמו אחד מהמנקים שלי בעבר, הם ישמחו לעשות תמיד מה שתגיד להם. צריך להוסיף תכונה קטנה ליישום – אין בעיה, שליכטה אחת ומאות שורות קוד חדשות נוספו. אין תכנון, אין פרקטיקות פיתוח מקובלות, אין תצורות תכנון (Design Patterns) – יש רק עבודה הודית קשה וארוכה שמניבה עשרות שורות קוד חדשות.
יש כמובן שימוש נרחב בתכונת העתק-הדבק של מרבית סביבות הפיתוח המודרניות, וכך מתקבל קוד מנופח, עם חזרות מרובות על אותם קטעי קוד, וכמעט בלתי ניתן לניפוי ותחזוקה. אבל בשביל זה יש הודים. יש לך באג אדוני? אין בעיה. מיד נכתב טלאי תיקון המוסיף עשרות שורות קוד נוספות. הנה אדוני, הבאג תוקן. המממממ…. ומה זה? אה כן, הטלאי גרם לעשר באגים חדשים. אין בעיה אדוני. תוך יום נדלוור לך טלאי שיתקן את זה, אל תדאג.
ובכן בשלב זה בדרך כלל אני מתחיל באמת לדאוג. פניתי לעזרת הפרילנסרים הנאמנים שלי. כעבור חודשיים, הפך קוד הספגטי לארוחה איטלקית דשנה. מאות שורות קוד חדשות נוספו. אכן נצפה מאמץ לתכנן ולבנות את הקוד בצורה ארכיטקטונית נכונה, אבל הוא שזור בפנינים מעברו ההודי שהפכו אותו לבלתי קריא בעליל. למה לא מחקתם את הזבל ההודי? אני זועק. ניסינו אבל זה נשבר, הם עונים, אז פחדנו לגעת בזה. מול טיעון ה"זה עובד אל תיגע בזה" גם אני נאלם דום…
פתאום יש באג. או דרישה חדשה, קטנטונת. ממש כלום. כמה שעות עבודה וזה מוכן. טוב, נחזור לפיתוח בבית, עם המפתחים המוכשרים שלי. מבט חטוף בפניהם מבהיר שאפשר לשכוח מכמה שעות. ההתמצאות בסבך ההודי ובנפתולי הארכיטקטורה החדשה מותיר אותם במצב של הלם קטטוני. אבל הי, אנחנו בישראל. איפה הגניוס היהודי? מיד מתגייסת כל מחלקת ה-R&D לפתרון המשבר. עוד כמה עשרות שורות קוד וזה מוכן. נכון שמהנדס המכרות שעבר הסבה לפיתוח לא ממש מבין איך זה עובד, אבל העיקר שזה עובד. או לא. כלומר זה עובד – חוץ ממקרי הקצה. "לא בדקתי את מקרי הקצה" הוא משיב במבטא כבד. אז מה עושים? אין בעיה עוד כמה בלוקים של אם-אז (כמובן באינדנטציה שלא תאפשר לזהות שום בלוק אחר באיזור) ומרבית מקרי הקצה מכוסים. חוץ מאלה שלא.
טוב, בטח כבר הבנתם לאן אני חותר. זו אולי הצהרה קצת בומבסטית, אבל אני טוען – הרבה קוד שווה איכות מוצר ירודה. כאשר אתם מוסיפים תכונה חדשה או מתקנים באג בקוד קיים – תמיד כדאי וצריך לבדוק – אולי אפשר להגיע למטרה הרצויה דוקא ע"י מחיקת קוד מיותר או עודף! במקום לבדוק איך אפשר לכתוב טלאי לבעיה, צריך לבדוק איך ניתן למחוק את הקוד שיצר את הבעיה מלכתחילה (וברוב המקרים נופלים בבדיקה הזאת על אוצרות הודיים נסתרים).
אז מחר כשאתם מגיעים לעבודה תשאלו את עצמכם – איזה שורת קוד נמחק היום בכדי להעלות את איכות המוצר שלנו.
ובכדי להיות פוליטיקלי קורקט – הודים/הודו הם רק משל למיקור חוץ שכשל. באותה מידה זה יכול להיות מזרח אירופה, סין או קבוצת בחורות חרדיות בקרית ספר…
Hear hear
מסכים עם כל מילה
פינגבאק: Efficient Android Code – A Case Study | Miron’s thoughts