מחשוב הוא תחום טכנולוגי למדי. על מנת "להישאר בעניינים" או "להישאר רלוונטי" על העוסקים בתחום ללמוד באופן מתמיד טכנולוגיות וטכניקות חדשות. ניתן היה לצפות שאנשי תוכנה טובים יהיו גם, בהגדרה, לומדים מקצועיים. האמנם כך?!
אז זהו... זה לא תמיד עובד כל-כך. למתבונן מהצד לעתים הלמידה התכופה נראית שטחית ולא רצינית. ואז יש עוד למידה שטחית ולא-רצינית ועוד אחת - וחוזר חלילה. מה עם ללמוד ללמוד? בפוסט זה אני רוצה לדבר על הלמידה ועל הטעות הגדולה של התמקדות בחזות תוצאה ושיכחת הדרך.
דוגמה
נניח שאני רוצה להיכנס לתחום חדש: טניס נשים. מכיוון שאני גבר זה נשמע פשוט לא-מתאים, אבל ספורט הוא נושא שכולנו מבינים בו קצת. אפילו אם נדמה לנו ש"בכלל לא". חשבו מעט ושימו לב שאתם יכולים להעלות הרבה עובדות בנושא: הכדור הוא עגול, מרתון הוא 42~ ק"מ, ענפים מחולקים לרוב ע"פ גברים ונשים... .
נושאים טכנולוגים (במיוחד חדשים) הם הרבה פחות מוכרים ואינטואטיביים: למשל Big Data. אם הייתי מספר לכם שיש לי אפליקציה שולחנית עם המון נתונים (אולי איזה 10GB!!) ואני רוצה להיכנס לעולם ה Big Data - ייתכן וזה היה נשמע יותר הגיוני. "למה לא?" הייתם עונים "זה תחום חם היום." - "פשוט מגניב!".
עד כאן טוב ויפה. ובכן - כיצד עלי ללמוד טניס נשים?
"שלב ראשון - כדאי ללמוד מהטובים ביותר!" (טעות ראשונה). אני אצפה בכמה משחקניות הטניס הטובות ואתרשם מהסגנון. "שחקן טניס טוב נראה כמו שחקנים טובים אחרים" - אומר לעצמי (טעות שנייה).
טוב, לעבודה:
אני אתחיל מהגניחות - זה החלק שהכי קל לי לבצע. וואו - אני כבר מרגיש 50% שחקן טניס-נשים מקצועי! נשאר רק לסגור עוד כמה פרטים.
ע"פ סדר הפעולות שלהן - יש את הגשת הפתיחה. היא קצת קשה לי (הכדור נוחת לרוב בצד שלי של המגרש) אבל אני נחוש ולא אוותר. אחרי מספר ימים קרוב לוודאי שאוכל להגיש בצורה סבירה (כלומר לקלוע לצד השני של המגרש) ואז יש רק את הקטע של לרוץ (אני יודע!) ולחבוט - אלו כבר ממש האופטימיזציות האחרונות.
טוב נראה לי שאני כבר דיי מקצועי, אני יכול להציע פתרונות מבוססי טניס-נשים וקדימה לעבודה. אם יהיו בעיות - נפתור אותן בשטח.
קרוב לוודאי שזה נשמע מצחיק (השתדלתי), אבל התיאור אינו שונה כ"כ ממאמצי אימוץ שונים שנתקלתי בהם: SCRUM, Object-Oriented ו test-automation - ואלו הן רק כמה דוגמאות ("to name the few").
איך אפשר להשתפר
קודם כל אני חושב שקצת הומור עצמי לא מזיק (= כלומר מודעות עצמית שאינה ביקורתית מדי).
הדגשים העיקריים מניסיוני הם אלו:
התמקדו בתוצאות - והזהרו מהתמקדות ב"חזות המקצוען"
ב SCRUM צוותים ממהרים להציג לוחות Burn-down Charts ולעשות Stand up meeting.
אם אח"כ, בישיבת ה Retrospective, רק ה Scrum Master מדבר ומחלק ציונים לכל האחרים - כנראה שמשהו התפספס (סיפור אמיתי). אם יש לכם שני ספרינטים של Design ואז שני ספרינטים של "מימוש" ואולי עוד ספירנט "בדיקות ו Stabilization" - כנראה שמשהו התפספס (המשך של אותו הסיפור).
פעם ראיתי ראש צוות שלמד Object-Oriented באמצע הקריירה (הוא בא מ Kernel C). הוא יצר מחלקה "פונקציות", מחלקה "קבועים" ומחלקה "משתנים" (והמשיך לפתח פרוצדורלית, כמובן). "הבנתי את הסיפור" הוא הכריז. "נחמד, קצת עושה סדר - אבל אני לא מבין למה עשו מ OO כזה רעש..."
אנו רוצים "להראות" כמו המקצועניים ו"להרגיש" כמו המקצוענים - ומהר, אבל בעצם יותר חשוב שנראה שיפור מדיד (ע"פ מדדים אובייקטיבים) ולבסוף נגיע לתוצאות טובות יותר מאשר השיטה הישנה. האם לחלק את הפונקציה ל class נפרד משפר את הקוד? אם לא - חשוב לשפר סגנון או לזנוח את ה OO. עדיף Waterfall מוצלח (אם יש דבר כזה...) על SCRUM רע ועדיף תכנות פרוצדורלי מסודר על פני תכנות OO מגוחך.
קצת פחות מרשים, אבל יותר יעיל, זה להתחיל מהתחלה. בטניס ניתן לחבוט תקופה מול הקיר כדי להתרגל לחבוט בגובה (קצת מעל...) הרשת. בטכנולוגיה חדשה עדיף להתחיל בקטן ולהבין מה בעצם היא מציעה ולמה היא יותר טובה (אם בכלל).
אל תלמדו מהטובים ביותר
ללמוד "מהטובים ביותר", נשמע אינטואטיבית רעיון מוצלח.
כאן כדאי להכניס למשוואה את מודל דרייפוס (שאינו קשור לאלפרד דרייפוס - הקצין היהודי שהורשע על לא עוול בכפו). מודל דרייפוס מחלק את רמת המומחיות ל5 דרגות: חסר-ניסיון עד מקצוען. הוא מבחין בכך שחסר-ניסיון ילמד טוב ביותר על ידי הנחיות טכניות צעד-צעד (למשל tutorial) בעוד בעל ניסיון ילמד טוב יותר ע"י חקר הסיבתיות לעומק ובחינת האקסיומות. יתרה מכך הוא מספר על "קללת המומחיות" - מין קללה שרובצת על כל מי שעבר כברת דרך מקצועית ואינו יכול עוד להבין מדוע וכיצד קשה לחסרי-ניסיון בתחום להבין דברים מסוימים: מדוע הם הולכים לאיבוד אם מדברים לרגע על X או בוחנים לרגע את Y. זו קללה כמעט-בלתי ניתנת להסרה.
לכן, בתור מתחילים בתחום, עדיף לכם ללמוד ממישהו בעל ניסיון מסוים מאשר ישירות מה"מאסטר".
מודל זה יכול לעזור להסביר מדוע מרצים באוניברסיטה הם מורים גרועים למדי, אך הוא סותר כמה רגעים אפיים של סרטי קונג-פו מפורסמים. תחליטו אתם אם אתם מאמצים אותו או לא.
השיגו מישהו שכבר עשה זאת
מישהו שהיה שם ידע לומר לכם שגבר לא הולך לספורט נשים, עובדה שכנראה לא תתקלו בה גם את תקראו מספר ספרים - מכיוון שהיא ברורה מדי לדבר עליה ("קללת המומחיות"?)
אבל רגע, שנייה - עדיין אל תביאו אותו!
...
האם אתם מוכנים לשמוע שהמאמצים היפים שלכם הם "בכלל לא בכיוון" - ולנסות אחרת?
האם אתם מוכנים לשמוע שוב ושוב "אבל שם עשינו את זה ככה"?
האם אתם יודעים בוודאות שאצלכם הדברים דווקא עובדים אחרת - ואתם אלו שמבינים זאת?
- אם כן, אל תטרחו.
עדיף למנות עובד נאמן מתוך הארגון והוא יוודא ש"אתם בסדר" מאשר למנות אדם לתפקיד שאתם לא באמת רוצים שהוא ימלא. פשוט חבל.
בחרו את הקרבות שלכם
ארגון זקוק להצלחות על מנת לשמור על מוטיבציה גבוהה ומומנטום חיובי.
חלקן של ההצלחות יכול להיות סובייקטיבי (בעל ההצלחה וחבריו יעידו על גודל ההצלחה) ואחרות צריכות להיות אובייקטיביות (באמת משהו השתפר בצורה משמעותית). אל תזלזלו בהצלחות הסובייקטיביות - הן חשובות לארגונים.
כמובן שהצלחות אובייקטיביות הן חשובות לא פחות, אולי אפילו יותר. בכל זאת, כשאתם רוצים להצטרף לאימוץ של טכנולוגיה / שיטה חדשה שווה לבחון האם הארגון זקוק פה להצלחה אובייקטיבית או האם הצלחה סובייקטיבית מספיקה?
הניחו לצורך בהצלחה סובייקטיבית להתמלא ולחלוף - ושמרו כוחותיכם להצלחה האובייקטיבית הנדרשת הבאה.
אז זהו... זה לא תמיד עובד כל-כך. למתבונן מהצד לעתים הלמידה התכופה נראית שטחית ולא רצינית. ואז יש עוד למידה שטחית ולא-רצינית ועוד אחת - וחוזר חלילה. מה עם ללמוד ללמוד? בפוסט זה אני רוצה לדבר על הלמידה ועל הטעות הגדולה של התמקדות בחזות תוצאה ושיכחת הדרך.
דוגמה
נניח שאני רוצה להיכנס לתחום חדש: טניס נשים. מכיוון שאני גבר זה נשמע פשוט לא-מתאים, אבל ספורט הוא נושא שכולנו מבינים בו קצת. אפילו אם נדמה לנו ש"בכלל לא". חשבו מעט ושימו לב שאתם יכולים להעלות הרבה עובדות בנושא: הכדור הוא עגול, מרתון הוא 42~ ק"מ, ענפים מחולקים לרוב ע"פ גברים ונשים... .
נושאים טכנולוגים (במיוחד חדשים) הם הרבה פחות מוכרים ואינטואטיביים: למשל Big Data. אם הייתי מספר לכם שיש לי אפליקציה שולחנית עם המון נתונים (אולי איזה 10GB!!) ואני רוצה להיכנס לעולם ה Big Data - ייתכן וזה היה נשמע יותר הגיוני. "למה לא?" הייתם עונים "זה תחום חם היום." - "פשוט מגניב!".
עד כאן טוב ויפה. ובכן - כיצד עלי ללמוד טניס נשים?
"שלב ראשון - כדאי ללמוד מהטובים ביותר!" (טעות ראשונה). אני אצפה בכמה משחקניות הטניס הטובות ואתרשם מהסגנון. "שחקן טניס טוב נראה כמו שחקנים טובים אחרים" - אומר לעצמי (טעות שנייה).
טוב, לעבודה:
אני אתחיל מהגניחות - זה החלק שהכי קל לי לבצע. וואו - אני כבר מרגיש 50% שחקן טניס-נשים מקצועי! נשאר רק לסגור עוד כמה פרטים.
ע"פ סדר הפעולות שלהן - יש את הגשת הפתיחה. היא קצת קשה לי (הכדור נוחת לרוב בצד שלי של המגרש) אבל אני נחוש ולא אוותר. אחרי מספר ימים קרוב לוודאי שאוכל להגיש בצורה סבירה (כלומר לקלוע לצד השני של המגרש) ואז יש רק את הקטע של לרוץ (אני יודע!) ולחבוט - אלו כבר ממש האופטימיזציות האחרונות.
טוב נראה לי שאני כבר דיי מקצועי, אני יכול להציע פתרונות מבוססי טניס-נשים וקדימה לעבודה. אם יהיו בעיות - נפתור אותן בשטח.
קרוב לוודאי שזה נשמע מצחיק (השתדלתי), אבל התיאור אינו שונה כ"כ ממאמצי אימוץ שונים שנתקלתי בהם: SCRUM, Object-Oriented ו test-automation - ואלו הן רק כמה דוגמאות ("to name the few").
איך אפשר להשתפר
קודם כל אני חושב שקצת הומור עצמי לא מזיק (= כלומר מודעות עצמית שאינה ביקורתית מדי).
הדגשים העיקריים מניסיוני הם אלו:
התמקדו בתוצאות - והזהרו מהתמקדות ב"חזות המקצוען"
ב SCRUM צוותים ממהרים להציג לוחות Burn-down Charts ולעשות Stand up meeting.
אם אח"כ, בישיבת ה Retrospective, רק ה Scrum Master מדבר ומחלק ציונים לכל האחרים - כנראה שמשהו התפספס (סיפור אמיתי). אם יש לכם שני ספרינטים של Design ואז שני ספרינטים של "מימוש" ואולי עוד ספירנט "בדיקות ו Stabilization" - כנראה שמשהו התפספס (המשך של אותו הסיפור).
פעם ראיתי ראש צוות שלמד Object-Oriented באמצע הקריירה (הוא בא מ Kernel C). הוא יצר מחלקה "פונקציות", מחלקה "קבועים" ומחלקה "משתנים" (והמשיך לפתח פרוצדורלית, כמובן). "הבנתי את הסיפור" הוא הכריז. "נחמד, קצת עושה סדר - אבל אני לא מבין למה עשו מ OO כזה רעש..."
אנו רוצים "להראות" כמו המקצועניים ו"להרגיש" כמו המקצוענים - ומהר, אבל בעצם יותר חשוב שנראה שיפור מדיד (ע"פ מדדים אובייקטיבים) ולבסוף נגיע לתוצאות טובות יותר מאשר השיטה הישנה. האם לחלק את הפונקציה ל class נפרד משפר את הקוד? אם לא - חשוב לשפר סגנון או לזנוח את ה OO. עדיף Waterfall מוצלח (אם יש דבר כזה...) על SCRUM רע ועדיף תכנות פרוצדורלי מסודר על פני תכנות OO מגוחך.
קצת פחות מרשים, אבל יותר יעיל, זה להתחיל מהתחלה. בטניס ניתן לחבוט תקופה מול הקיר כדי להתרגל לחבוט בגובה (קצת מעל...) הרשת. בטכנולוגיה חדשה עדיף להתחיל בקטן ולהבין מה בעצם היא מציעה ולמה היא יותר טובה (אם בכלל).
אל תלמדו מהטובים ביותר
ללמוד "מהטובים ביותר", נשמע אינטואטיבית רעיון מוצלח.
כאן כדאי להכניס למשוואה את מודל דרייפוס (שאינו קשור לאלפרד דרייפוס - הקצין היהודי שהורשע על לא עוול בכפו). מודל דרייפוס מחלק את רמת המומחיות ל5 דרגות: חסר-ניסיון עד מקצוען. הוא מבחין בכך שחסר-ניסיון ילמד טוב ביותר על ידי הנחיות טכניות צעד-צעד (למשל tutorial) בעוד בעל ניסיון ילמד טוב יותר ע"י חקר הסיבתיות לעומק ובחינת האקסיומות. יתרה מכך הוא מספר על "קללת המומחיות" - מין קללה שרובצת על כל מי שעבר כברת דרך מקצועית ואינו יכול עוד להבין מדוע וכיצד קשה לחסרי-ניסיון בתחום להבין דברים מסוימים: מדוע הם הולכים לאיבוד אם מדברים לרגע על X או בוחנים לרגע את Y. זו קללה כמעט-בלתי ניתנת להסרה.
לכן, בתור מתחילים בתחום, עדיף לכם ללמוד ממישהו בעל ניסיון מסוים מאשר ישירות מה"מאסטר".
מודל זה יכול לעזור להסביר מדוע מרצים באוניברסיטה הם מורים גרועים למדי, אך הוא סותר כמה רגעים אפיים של סרטי קונג-פו מפורסמים. תחליטו אתם אם אתם מאמצים אותו או לא.
השיגו מישהו שכבר עשה זאת
מישהו שהיה שם ידע לומר לכם שגבר לא הולך לספורט נשים, עובדה שכנראה לא תתקלו בה גם את תקראו מספר ספרים - מכיוון שהיא ברורה מדי לדבר עליה ("קללת המומחיות"?)
אבל רגע, שנייה - עדיין אל תביאו אותו!
...
האם אתם מוכנים לשמוע שהמאמצים היפים שלכם הם "בכלל לא בכיוון" - ולנסות אחרת?
האם אתם מוכנים לשמוע שוב ושוב "אבל שם עשינו את זה ככה"?
האם אתם יודעים בוודאות שאצלכם הדברים דווקא עובדים אחרת - ואתם אלו שמבינים זאת?
- אם כן, אל תטרחו.
עדיף למנות עובד נאמן מתוך הארגון והוא יוודא ש"אתם בסדר" מאשר למנות אדם לתפקיד שאתם לא באמת רוצים שהוא ימלא. פשוט חבל.
בחרו את הקרבות שלכם
ארגון זקוק להצלחות על מנת לשמור על מוטיבציה גבוהה ומומנטום חיובי.
חלקן של ההצלחות יכול להיות סובייקטיבי (בעל ההצלחה וחבריו יעידו על גודל ההצלחה) ואחרות צריכות להיות אובייקטיביות (באמת משהו השתפר בצורה משמעותית). אל תזלזלו בהצלחות הסובייקטיביות - הן חשובות לארגונים.
כמובן שהצלחות אובייקטיביות הן חשובות לא פחות, אולי אפילו יותר. בכל זאת, כשאתם רוצים להצטרף לאימוץ של טכנולוגיה / שיטה חדשה שווה לבחון האם הארגון זקוק פה להצלחה אובייקטיבית או האם הצלחה סובייקטיבית מספיקה?
הניחו לצורך בהצלחה סובייקטיבית להתמלא ולחלוף - ושמרו כוחותיכם להצלחה האובייקטיבית הנדרשת הבאה.
ליאור,
השבמחקמעניין מאוד. אני רוצה להתייחס לשאלה שלך "האם יש waterfall מוצלח".
היו לי מנהלים שהוציאו לפועל waterfall בצורה מצוינת. בלי להתחייב על מספר, הם היו בין 10% ל20% מהמנהלים שנתקלתי בהם. זה נראה לי טבעי - יש קצת טובים, קצת גרועים והרבה בינוניים.
כל עוד scrum הוגבל ליחידי הסגולה שחיים, אוהבים ומתעניינים במתודולוגיות ניהול פיתוח, אחוז מנהלי הscrum הטובים היה יותר גבוה, שכן מראש האוכלוסיה עברה סלקציה. היום כשזה נחלת הכלל וכל ארגון שולח את עובדיו לסדנאות בנושא, אין מנוס מכך שאחוז מנהלי הscrum הטובים יתכנס לשיעור ארוך הטווח של המנהלים הטובים, בכל שיטה שהיא. זה בערך מה שניסיתי להגיד כאן: http://wp.me/p1Foa0-1a
היי איתמר,
השבמחקמעניין מה שכתבת - אני בהחלט מזדהה עם הנאמר. זהו מחיר הפופולאריות של השיטה, אני מניח.
ליאור
שלום!
השבמחקהעלת פה נקודה צדדית ומעניינת שהייתי שמח לשמוע את התגובה שלך.
אתה טוען שהמרצים באוניברסיטה בדרך כלל מורים גרועים. בתור סטודנט לא הייתי יכול להסכים איתך יותר. אבל האם יש אלטרנטיבה אחרת?
כרגע אני בשנה שלישית להנדסת תוכנה. התחום מאוד מעניין אותי אבל אני מוצא את עצמי לומד את הרוב המוחלט של המקצועות בעצמי.
מה שגורם לי להיות מאוד מתוסכל מזה שהתואר הוא רק חותמת גומי. זו ההרגשה הרווחת בכלל באוניברסיטה כיום כאשר בעידן הגוגל ברגע שיש משהו שאני צריך ללמוד אני יכול לעשות זאת בקלות ואם למדתי משהו מהאוניברסיטה זה איך ללמוד מגוגל.
מה דעתך בנושא זה? אם מישהו היה שואל אותי היום אם ללכת לאוניברסיטה או להתחיל לעבוד הייתי ממליץ לו להתחיל לעבוד.
הממ... גם אני הייתי ממליץ לו ללכת קודם לעבוד, אבל אחרי שנתיים להפסיק ולללכת ללמוד - הפסקה שדורשת הרבה מאוד כח רצון.
השבמחקהסיבה אגב היא שאת החומר התיאורטי באוניברסיטה ניתן להבין טוב בהרבה עם קצת נסיון בתוכנה. מי שמגיע לאוניברסיטה "טבולה רסה" - רוב הסיכויים שיספוג משמעותית פחות מהאפשר.
אני זוכר שבזמני בקורסי מדעי-המחשב היו הרבה ציוני 60 והרבה ציוני 80 - אך מעט ציונים באמצע. ההסבר סטטיסטי שגרתי (ציונים אמורים להתפלג נורמאלית) הוא שיש שתי אוכלוסיות. אני מנחש שאלו אוכלוסית "בעלי ידע מוקדם" (ממוצע 80) ואוכלוסית "טאבולה רסה" (ממוצע 60).
מצד שני ללמוד רק ממקום העבודה הוא גם לא פרקטיקה מבטיחה: מקום העבודה ישקיע בך בעיקר לטווח הקצר ויספק לך ידע שאתה זקוק לו לביצוע העבודה המיידית. שווה וכדאי להשקיע בעצמך גם לטווח הארוך ורוב האנשים לא ילמדו בצורה יעילה נושאים שהם לא זקוקים להם באותו הרגע / תיאוריה. האם תלמד לבד תאוריה של מבני נתונים? תאוריה של בסיסי נתונים? רשתות? מערכות מבוזרות? זהו ידע חשוב כשחושבים על הטווח הארוך.
לגבי המרצים - אני חושב שצד אחד של העניין הוא שהם בעלי מומחיות גבוהה בתחום מסוים והם כבר קוללו ב"קללת המומחיות" ואיבדו גישה למתחילים בתחום אבל לא פחות מזאת - הם חיים במערכת (אוניברסיטה) שלא מספקת תמריצים וחיזוקים חיוביים להשקעה בסטודנטים. כל שיטת ההערכה והקידום באוניברסיטאות היא מבוססת מחקר, ולימוד סטודנטים הוא לא-קשור במקרה הטוב או נטל במקרה הרע.
חלום שיש לי הוא לפרוש עוד כ 10-15 שנה מההייטק וללכת ללמד במוסד שיוכל להתמסר ללימוד מקצוע הנדסת התוכנה לסטודנטים וישים את המחקר במקום שני. מי ייתן ויהיו כאלו מקומות. כל כך חבל על אלפי הסטודנטים שמשקיעים המון אנרגיה במסגרת שלא מעריכה ולא משקיעה בהם מספיק.
אני אגמור בציטטה (לא מדוייקת) של ראש החוג למדעי המחשב באונ' ת"א בזמני: "לתואר ראשון יש עבורנו רק מטרה אחת - להכין את הסטודנטים לתואר שני ומשם לדוקטורט".
תודה רבה על התגובה המעמיקה ותודה אפילו יותר על המאמרים המעניינים
מחק