Uknown unknowns
ברוב ארגוני התוכנה יש את המושגים של מתכנת זוטר (או פשוט מתכנת) ומתכנת בכיר (נקרא לפעמים גם ארכיטקט, מהנדס ועוד).
הדרישה ממתכנת זוטר היא פשוטה למדי: תרגם מילים לקוד בצורה הכי טובה, הכי יעילה, הכי מהירה, הכי יציבה, הכי איכותית, הכי ניתנת לתחזוקה, הכי הכי הכי…
השאלה המעניינת היא מה הדרישה ממתכנת בכיר? האם מתכנת זוטר ששכלל את יכולת כתיבת הקוד שלו מעבר לרף מסוים הופך אוטומטית למתכנת בכיר?
כשאני מנסה לחשוב על הדרישה מהמתכנת הבכיר שמעתה נקרא לו ארכיטקט תוכנה, אני חושב שהיא מסתכנת ל”מציאת הפתרון הטכנולוגי הטוב ביותר לבעיה המוצגת בפניו”. הארכיטקט המושלם יוכל לתת את המענה הטוב ביותר לדרישות העומדות בפניו בעזרת הכלים הטובים ביותר ובשילוב עם כל מה שנדרש מהמתכנת הזוטר. בהתאם להגדרה הזאת, המעבר מתפקיד מתכנת זוטר לארכיטקט הוא לא עניין של זמן או שיפור יכולת קידוד, אלא גם למידה של סט יכולות ואוסף מידע חדש לגמרי. וכאן נכנס לסיפור משפט נהדר, גם אם קצת קלוקל תחבירית, של דונלד ראמספלד, מזכיר ההגנה של ארה”ב בזמן המלחמה בעיראק (לא ממש עזר לו בסופו של דבר…) :
“There are known knowns; there are things we know we know.
We also know there are known unknowns; that is to say we know there are some things we do not know.
But there are also unknown unknowns – the ones we don't know we don't know.”
אז איך זה קשור אלינו?
לדעתי, אחד הדברים החשובים ביותר כדי להיות ארכיטקט תוכנה טוב, זה למזער את כמות ה-unknown unknowns” שלך בעולם התוכנה. כלומר, לדעת לפחות מעט לגבי הרבה תחומים בנוסף לחובתו של כל מתכנת לדעת הרבה לגבי מעט תחומים (תחומי ההתמקצעות שלו).
בעוד שמתכנת זוטר יכול לעשות עבודה טובה גם ללא ידע רחב בכל התחומים, ארכיטקט בעל unknown unknowns רבים יגרום לרוב הפרויקטים לבזבוז עצום של משאבים (זמן, כוח אדם ועלות כספית) ולפעמים אפילו לחוסר יכולת להגיע לפתרון וכישלון של הפרויקט. יש פשוט יותר מדי מקומות לטעות בהם ולקבל החלטות שעולות כסף והרבה ממנו.
חשבתי לעשות רשימה מפורטת, למען האמת אפילו התחלתי לכתוב אותה עם נימוקים שונים למה ארכיטקט חייב להבין HTTP, איך פועל העולם של מכונות וירטואליות ולמה שפות דינאמיות זה רלוונטי ואז זה הרגיש קצת מוזר כי אפשר להסביר את זה או שטחי מדי או חופר מדי. לכן, הרשימה הכי כללית האפשרית היא בערך: פרוטוקולי ויכולות תקשורת, מה”ע, וירטואליזציה, פלטפורמות, שפות תוכנה, כלי פיתוח, סטנדרטים, פורמטים של מידע, מתודולוגיות פיתוח, ספריות סטנדרטיות, Open source-ים גדולים והתפתחויות טכנולוגיות בשוק.
נראה לי שזה מסכם למשפט אחד כמה אלפי שעות לימוד “מחוץ לשעות העבודה”, בהצלחה לכולנו…
נ.ב.
הפוסט בהשראת הפוסט בקישור

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