
על “מתכנתי הסודוקו” שבינינו - הגיבורים שהתעשייה צריכה אבל לא ראויה!
April 21, 2023 posted by Aviad Shalom
ב-2016 התחלתי את ההרפתקה הראשונה בקריירה שלי. זו הייתה השנה השנייה ללימודים שלי ובתור אחד ששירת 5.5 שנים בצבא בתפקיד שטח,
והיה צריך לשפר בגרויות בשביל להתקבל לאוניברסיטה שרציתי, עשיתי כל מה שביכולתי בשביל להשיג משרת סטודנט בשביל ש״מונה הקריירה״
יתחיל לדפוק, אחרי הכל, הייתי כבר בן 27.
באמצע שנת 2016, עם חיוך גדול על הפרצוף, שלחתי הודעות לכל מי שלקח אותי כמורה פרטי או העסיק אותי בתור מלצר שאני סיימתי!
וכמובן שלמרות שאף אחד לא ביקש לדעת או התעניין מיהרתי להגיד למה! - התקבלתי לחברה בשם NICE.
קצת מעביר קדימה, אחרי תפקיד ראשון כמפתח כלי בדיקה התקדמתי לצוות פיתוח קטן שמתחזק מוצרי legacy.
סיפרו לי על העבר המפואר של הצוות, שלמעשה היה צוות שתפקידו לעשות מוצרים תפורים היטב למידות והצרכים של לקוחות VIP שNICE רצתה לשמור קרוב אליה.
עם הזמן ירד הצורך של אותם מוצרים ומה שנשאר תחת המטרייה של הצוות זה 4 מוצרים עם 4 repositories עם המון(המון!) קוד, 2 אנשי QA ומפתח אחד שיושב באוקריאנה בשם סשה.
קצת על סשה, סשה היה המפתח שקיבל את פניי למאגרי הקוד השונים ולאינטרקציה ביני לבינו היה מגיע תוכנית ב- national geographic שסוקרת את הסצנה הפראית של ״ישראלי מאוד ישראלי פוגש אוקראיני מאוד אוקראיני - התנגשות בין תרבויות״, בהחלט נושא שצריך לזכות לפוסט.
סשה עשה לי הדרכה על כל repo בנפרד, הוא שלט בחומר, לא הייתה שאלה שהוא לא ידע לענות לי.
בנתיים במוח שלי בזמן ההדרכה של סשה על הrepos…
הרגשתי שאני הולך לאיבוד בטירה אפלה, עצומת ממדים ומלאת יצורים מהפלוקלור הרומני וסשה, עם פנס עמום וצהבהב הולך שם בנונשלנטיות ועושה לי סיור ומידי פעם מאיר על חפצים מלאי קורי עכביש או תמונות מוזרות עם דיוקנים של מפתחים שעזבו לפני המון זמן (ואני יכולתי להשבע שהם מסתכלים עליי!) וכמובן לכל חפץ או ייצור יש משמעמות ופונקציונליות והוא משנה את הstate של הטירה (מזדרונות, פתחים נסתרים, תעלות איוורור וכו׳)
אנסה עכשיו קצת לחבר יותר למציאות את ההקבלה , הטירה (= ארבעת הrepos) הייתה מורכבת מהמון ספריות צד שלישי, המון קבצי קונפיגרציות וכמעט כל פרוייקט היה עם פלטפורמה שונה, נבהלתי חששתי, אמרתי לעצמי ״כמות המידע שאני אמור להכיל פה שקול לשנת לימודים בתואר שאני עושה, איך אני יוצא מזה?״
אחרי כמה שבועות מהירים של onboarding בצוות והתהלכות בטירה באזורים אקזוטיים יותר ופחות ניתנה לי משימה סוף סוף!
אני שמחתי מאוד, כמבחינתי(הגרסה החרדתית יותר שלי) הdeadline למשימה היה גם התאריך שאני מסיים את הסבל שכובד הצפייה מעצמי גרם לי.
ההשלמה עם זה שאני אגיע לדדליין עם ידיים ריקות גרמה לי להיות קצת רגוע יותר, הרוגע הצליח ליצור לי מרחב למחשבה הבאה: ״וואלה הטירה גדולה ומורכבת, אבל זו עדיין טירה, ומה שאני מתקן פה זה מזדרון אחד שלא מתנהג כשורה״
עכשיו איך אני אמור לתקן את אותו מזדרון והאם זה מתיישב טוב עם שאר הטירה לא היה לי שמץ של מושג, ההנחה החרדתית שלי גרמה לי לחשוב שכל סיבוב של תמונה, או שינוי מקום של נברשת יגרום לשינוי בשני קומות מטה שידפוק לגמרי את הטירה. אבל לשמחתי נזכרתי שאני בתכלס מתעסק עם הטירה הלוקלית אצלי - לא טירה בפרודקשיין חלילה וחס.
הייתי די טרי עם הרעיון של git או כל כלי ניהול גרסאות אשר היה שם (יאפ לצערי אלגברה לינארית ומימוש רקורסיות לא לימד אותי את זה בשנה א׳), אבל ההבנה שאני יכול להפוך את הטירה לכהוטית ולחזור אחורה נתנה לי שחר לעוד מחשבה: ״יאללה בוא נשפץ את המזדרון המחורבן הזה, מקסימום אני אצא ליצן״ אז שיפצתי, הזזתי את הארון ספרים שחסם דלת שממנה היה אמור לצאת איזה ערפד (= העפתי איזה פונקציית בוליינית עם תנאי לא רלוונטי לרינדור הwin-winform ככה שהמסך יתעדכן כאשר נוסף איזה משהו לרשימה).
אחרי שהצלחתי לראות מחוץ לטירה את הערפד מציץ מהחלון בקומה שעבדתי עליה (ההתנהגות המצופה מטירה אפלה) לצד התפקוד הרגיל שלה חיכיתי לגזר דין של סשה.
הלכנו שוב ביחד, עם הפנס המעומעם שלו, תוך כדי שהוא אומר שלום לכל מיני ייצורים מוכרים ועצרנו ליד הארון ספרים שהזזתי.
״למה הארון ספרים עדיין פה? עכשיו אין לו בכלל שימוש…״ אמר סשה
חשבתי ולא היה לי שום דבר להגיד על זה, רק שהוא צודק - מניח שבאותו יום גיליתי את find usages שכמעט כל IDE מאפשר לבצע.
אבל בסופו של דבר קיבלתי כמה מילים טובות על התיקון באג הראשון שלי בטירה, אתם יכולים לנחש שהחוויה בנתה לי קצת יותר בטחון שהביא עמו יכולות וכלים חדשים כמו:
- יכולת להניח הנחות הגיוניות על המבנה שאני עובד עליו ( לדוגמא - אם אזיז את ארון הספרים בקומה 7 זה כנראה לא ישפיע על קומה 2, וגם אם כן יהיו תמרורי הזהרה), כמובן שעם הזמן ועם הניסיון ההתעסקות בסוגיה הזאת גרמה לי להבין את חשיבותם של unit testing ובדיקות אינטגרציה לזרימת הפיתוח.
- יכולת להסתכל על הטירה כמו שהיא, טירה ולא רק המון שורות קוד בתוך קבצים. בסוף להבין מה הפונקציונאליות של המוצר עצמו זה אחד הכלים שלי לפזר את חוסר הוודאות וללמוד אותו יותר מהר. לדוגמא יקח לנו הרבה יותר זמן להבין שאנחנו נמצאים בטירה אם לא יצא לנו להסתכל עליה מבחוץ.
- השלמה עם זה שאני לא באמת צריך לדעת על הנסיבתיות של כל חפץ ופינה בטירה, גם לא מעשי ברוב המקרים וגם לא באמת עוזר, תחשבו על הזמן שלקח לעשרות המתכנתים להוסיף את אלפי(או עשרות אלפי) שורות הקוד, תחשבו על כמות הבאגים שצצו מאנשים הQA שגרמו למתכנתים להזיז נברשות ופסנתרים מכושפים משם לכאן, מאות שעות אדם שעוצבו ע״ מאות נסיבות. בהמשך הקרייריה שלי ראיתי לא מעט מתכנתים חכמים חדים ומהירי מחשבה שהשאיפה ללמוד את *כל* מה שמסביב לבאג גרמה להם להתקע על משימה יחסית פשוטה תוך כדי שהם שורפים לעצמם את הערבים עם חברים ומשפחה. צריך גבולות גזרה.
עוד רגע מגיע לסודוקו!
כל החוויה המטלטת הזאת של כניסה חדשה לrepo לא הייתה נחלת העבר ועם הזמן הבנתי שמפתח ״מודרני״ נכנס לrepo חדש כל רבעון או שניים בגלל הדינמיות של התעשייה שלנו. עם זאת בהחלט הפכתי את אותה חוויה לפחות מטלטלת רגשית והרבה יותר נעימה. מתישהו הסיפור הרומנטי הזה של הrepo ה-״בית״ נעשה מאוד מאוד נדיר, אז אני נאלצתי לפתח כישורים שעוזרים לי להכנס מהר לrepo ו…יאפ להתנתק ממנו מהר.
בתקופה שלי בRiskified למשל היו קיימים אצלי במחשב 12 repos עם השפות/טכנולוגיות Scala,ruby, anguar, react. אתם חושבים שבתקופה הזאת של השנתיים נעשתי מומחה בכל אחת מהשפות הללו? ממש לא. בחרתי בשפה אחת שהייתה העיקרית ועם השאר הייתי חייב פשוט להכנס לאזור שדרוש שינוי/הרחבה והסקתי על סמך מה שנכתב קודם את מה שהייתי צריך לעשות. משמע בניגוד לגישה של ללמוד עקרונות של שפה, איך מגדירים פונקציות, איזה synatatic sugar יש לה, איך האינטרפטר/קומפיילר שלה עובד ועל המדיניות של ה-garbage collector שלה, פשוט נכנסתי לקוד, ״הקשבתי״ לשמות של הפונקציות, classes, משתנים ומתודות, כשראיתי כל מיני סימנים שאני לא מכיר ניסיתי לחבר אותם להקשר(או גיגלתי ספיצפית עליהם, עכשיו chat gpt בכלל יכול להאכיל אותנו בכפית), משמע עשיתי ״סודוקו״ לקוד, קוד שמימיני ושמאל מעליי או מתחתיי ועל סמך זה הבנתי איך אני אמור להרחיב את הפונקציה/מחלקה/קובץ.
פה אדגיש, הדבר נכון גם לא רק בבמישור של השפה והטכנולוגיה, הוא נכון גם לrepo חדש שאתה נכנס עליו! (כפי שכתבתי בתובנה השלישית). רגע אבל בואו שנייה נאזן את הגישה הזאת, בואו לא נגזים! זה
אומנם מתאים להרבה cases, וה״סודוקו״ הזה זה כישור מאוד הכרחי בשביל לסיים משימות בזמן ולא להתפזר, אבל עם זאת כן צריך להזהר מהמטריקס! (של הסודוקו) כי לא תמיד הוא בנוי נכון, לפעמים הוא עקום ו״השלמת יתר״ עם הסודוקו תשים אותך במשבצת של מתחזק קוד ספגטי מטונף שאעלה עובש ובעיקר, לא אינטואיטיבי בעליל.
עם הזמן למדתי ״להריח״ את הספגטי כאשר סמכתי על עצמי שאם לקח לי יותר מידי זמן להבין את הסודוקו והוא לא אינטואטיבי בעליל אז לחצתי על מנהליי וחבריי ששיפוץ חלקי נדרש - כי אנחנו אנשים טובים, ואם עברנו עינוי מקוד מסויים אין סיבה שחבר צוות אחר יעבור אחד כזה(ולא חבל על השעות מחקר?).
לסיום אגיד משהו מאוד אינטואטיבי. סטטיסטית, אתם גם תהיו מפתחי סודוקו בשלב כזה או אחר(ניראה לי שאני לא צריך להסביר אבל מוזמנים לאתגר את האמירה הזאת בתגובות) תקבלו את זה באהבה ורצון ללמוד. ברור שתיהיה לנו נטייה להתנגד למעמד שנכפה עלינו ולפעמים זה מרגיש כמו שמכריחים אותנו ללמוד וליישם תורה שנכתבה ע״י כמה דמויות מיושנות שמכתיבות לנו חוקים, הגדרות ועולמות תוכן. לדעתי חלק ממה שהופך מפתח לאיכותי זה לאתגר את המחשבה הזאת, לזרום עם הסודקו, בלי כעס, בלי מרירות, פשוט להפוך את ה״דירה להשכרה״ הזאת לבית זמני או טירה זמנית שאתם מרגיש בה נוח.