Know all men that I, Thomas Millard, with the Consent of Henry Wolcott of Windsor unto whose custody and care at whose charge I was brought over out of England into New England, doe bynd myself as an apprentise for eight yeeres to serve William Pynchon of Springfield, his heirs and assigns in all manner of lawful employmt unto the full ext of eight yeeres beginninge the 29 day of Sept 1640. And the said William doth condition to find the said Thomas meat drinke & clothing fitting such an apprentise & at the end of this tyme one new sute of apparell and forty shillings in mony: subscribed this 28 October 1640
קטע קשה לקריאה זה הוא חוזה שנחתם ב-1640, בין אחד Thomas Millard, המבקש להיות שולייתו של אחר William Pynchon, שיהיה אדונו למשך 8 השנים הבאות. בזמן זה יספק לו האדון אוכל, שתייה וביגוד, וילמד אותו את מקצועו. בסוף השנים האלה יישלח השולייה לדרכו, כשבאמתחתו 40 שילינג, בגד חדש, ומקצוע שיוכל לעסוק בו למחייתו.
מוסד השולייה, שאפשר למצוא רמזים לו גם בתרבויות קדומות כמצרים העתיקה ובבל, נהייה כלי משמעותי לבניית מקצוע בימי הביניים – באנגליה, כדוגמה, נמצא את המוסד הזה מוזכר החל מהמאה ה-12, וממש פורח במאה ה-14. באותם ימים, הלך האיש הצעיר, בן ה-14 או יותר, אל בעל המקצוע ושהה אצלו בין חמש לתשע שנים. בעל המקצוע דאג לו לכל, אבל מעל לכל דאג ללמד אותו את המקצוע. זו הייתה הדרך העיקרית שבהם לימדו באותה תקופה את המקצועות הנחוצים – מקצועות כמו נגרות, פחחות, ואף רפואה ועריכת דין. אנקדוטה מעניינת היא, שבסוף התקופה נשלח השולייה לדרכו, ובשלוש השנים הבאות נהייה ל-Journeyman – מטייל בעולם ומיישם את מלאכתו. יש מדינות אירופיות שמנהג כזה נהוג עד היום! ולפני שאתם צוחקים עליהם, תחשבו על הטיול אחרי צבא שלכם…
במקביל לפריחת מוסד השולייה, נולד לו עוד מוסד חדש – מוסד האוניברסיטה. האוניברסיטה הראשונה היא אוניברסיטת בולוניה, שנוסדה במאה ה-11 ולימדה מקצועות כמו רפואה ועריכת דין. אוניברסיטאות כמו אוניברסיטת בולוניה החלו להתפשט ברחבי אירופה – דוגמאות ידועות הן האוניברסיטה של פריז ואוניברסיטת אוקספורד. בסוף ימי הביניים מספר האוניברסיטאות נאמד בכ-60 והן קלטו אלפי סטודנטים כל שנה.
הייתה חלוקה ברורה בין האוניברסיטאות לגבי שיטות הלימוד והמקצועות הנלמדים – האוניברסיטאות הדרומיות, האיטלקיות, לימדו מקצועות שימושיים כמו עריכת דין ורפואה, בעוד האוניברסיטאות הצפוניות, כדוגמת אוניברסיטת פריז ואוקספורד, לימדו תאולוגיה ואמנות, במטרה להשאיר את הסטודנטים באקדמיה או להפנות אותם למשרות הוראה. באותה תקופה לימדו האוניברסיטאות את תורתם של היוונים הקדומים כדוגמת אריסטו. קידום המדע והידע לא היה חלק מתרבות ימי הביניים, ולכן לא משהו שהאוניברסיטאות ראו לנכון לעשותו.
מעניין לדעת שהמושג של ״חופש אקדמי״ – החופש של האוניברסיטה ללמד כרצונה ללא תלות במדינה, המלך, או הכנסייה – נטוע עמוק בימי הביניים. חופש אקדמי זה, התמורות שחלו בתרבות המערבית החל מהרנסנס, והמהפכה המדעית, הביאו את האוניברסיטאות לאיפה שהן היום – מוסדות המשלבים מחקר מדעי עם לימוד הדור הצעיר. זו הסיבה שמילון אוקספורד מגדיר את האוניברסיטה כ:
An institution of higher education offering tuition in mainly non-vocational subjects and typically having the power to confer degrees
ההדגשה מראה שהאוניברסיטאות של היום מחנכות למקצועות שבעיקרם אינו משלוח יד (לפי תרגום של מילון מורפיקס). אין זה אומר שהמקצועות ה-״שימושיים״ אינם נלמדים באוניברסיטה! כלל וכלל לא – עריכת דין, רפואה, ואף מחשבים נלמדים באוניברסיטה. אך הדואליות הזו, שראינו את תחילתה בהבדל בימי הביניים בין אוניברסיטאות דרומיות וצפוניות, קיימת גם היום ובאה לידי ביטוי בדרך שבה נלמדים מקצועות ההנדסה כמו מחשבים, אלקטרוניקה, וחשמל.
הדואליות בלימודי מחשבים באוניברסיטה
האוניברסיטה של היום חיה בקונפליקט מתמיד, בפיצול אישיות ממש, בין הצד ה-״דרומי״ שלה, שמעוניין ללמד מקצועות שימושיים כמו רפואה ומחשבים, לבין הצד ה-״צפוני״ שלה, שמעוניין לייצר מדענים ומורים האמונים על ברכיה של המדע והרוח. את הקונפליקט הזה אנחנו מזהים בכל המקצועות הנלמדים באוניברסיטה, החל מרפואה וכלה בכימיה, והוא בא לידי ביטוי חזק במיוחד במקצוע ההנדסה הצעיר ביותר – מחשבים.
הפקולטות ברוב האוניברסיטאות בארץ מלמדות תואר הנקרא ״מדעי המחשב״. מדע המחשב עוסק בעיקרו בתכנה מההיבט המדעי והמתמטי. מדע זה עוסק בהיבטים התאורטיים של המחשבים – דוגמת מבני נתונים, אלגוריתמים, ובעיות תאורטיות כמו סיבוכיות. מדע מרתק זה קרוב יותר למתמטיקה מאשר להנדסה, ולכן בשנה הראשונה וחלקים מהשנה השנייה והשלישית מתעסקים בעיקר ביסודות מתמטיים שאינן להם כלל קשר לתוכנה – מקצועות כמו אלגברה לינארית, חשבון אינפינטיסימלי, ותורת הקבוצות, כי ללא היסודות האלה לא ניתן להבין את התאוריה המתמטית של מדעי המשב.
אך אם מסתכלים על תכניתנים ועל המיומנויות שהם צריכים בעבודה היומיומית, לא נמצא זכר למיומנויות מתמטיות אלו. המיומנויות שתכניתנים צריכים אחרים לגמרי, וכמעט לא נלמדים באוניברסיטאות היום. המטרה של הפקולטות האלה היא לייצר מדענים של מדעי המחשב, ולא לייצר תכניתנים היכולים להשתלב בתעשייה.
פקולטות אלה גם מלמדות מקצוע הקרוי ״הנדסת תכנה״. לכאורה מקצוע זה הוא בדיוק מה שהתעשייה צריכה: לימוד פרקטי של מקצוע התכנה. אבל נביט קצת על הסילבוס של המקצוע הזה באוניברסיטה העברית (כדוגמה): ״תכנית הלימודים כוללת הכשרה מקיפה במתמטיקה, פיסיקה ומקצועות עיוניים מרכזיים במדעי המחשב…בשנים א' וב' נלמד את קורסי החובה במתמטיקה, פיסיקה, מדעי המחשב והנדסה״. גם כאן, השורשים המחקריים והמדעיים של האוניבסיטאות מביטות אלינו מבעד לקוריקולום שהוא לכאורה פרקטי ופרגמטי. מעבר מהיר על החומר למדעי המחשב והנדסת תכנה בכל האוניברסיטאות והמכללות יראה לנו את אותה התמונה – לימוד מדעי של מקצוע התכנה. שוב ושוב נתקל בקורסים כגון ״אינפי״, ״בדידה״, ״לינארית״, ו-״מבני נתונים״.
בתכניות אלו, כמו גם לתכניות של ״מדעי המחשב״ באוניברסיטאות אלה, יש גם הרבה קורסים מעשיים – קורסי תכנות, פרויקטים מעשיים שמתרגלים כתיבת תכנה, קורסים במתודולוגיות פיתוח כמו תכנות מונחה עצמים ותכנות פונקציונלי. קורסים אלה נלמדים בעיקר בשנה השנייה והשלישית, אחרי שהסטודנט עבר בהצלחה את המקצועות המתמטיים. קורסים אלה נלמדים הודות לצד השני, ה-״דרומי״ של האוניברסיטאות – הצד שמנסה ללמד מקצוע. אך לעתים יש תחושה שקורסים אלו מהווים מין מס שפתיים לצרכים של התעשייה.
יותר מכך – גם הקורסים המקצועיים המתקדמים לעתים עוסקים בנושאים שאינם לרוב רלוונטיים לתעשייה של היום. קורסים כגון ״תכנות לוגי״, ״תורת הקומפילציה״, ״ראייה ממוחשבת״, ו-״גרפיקה ממוחשבת״. וגם כשאלו רלוונטיים, עדיין תראה בהם נושאים שכבר שנים אינם במיינסטרים של התעשייה – ״Visual Basic״, ״applets", ״JSF״ ו-״EJB״. ומה עם נושאים מודרניים יותר, כמו source control, עבודה בצוות, TDD, או Agile Development? אם נושאים אלה יופיעו, הם יופיעו בשוליים של קורסים אחרים.
יוקרה ו-DNA
מדוע האוניברסיטאות אינן פשוט מלמדות את מקצוע התכנה? מדוע, גם כשהן לכאורה מלמדות ״הנדסת תכנה״ ולא ״מדעי המחשב״, חלק גדול מהקורסים הם קורסים שאינם רלוונטיים למקצוע התכנות של היום ולתעשיית התכנה של היום? אינני יודע, אבל יש לי תאוריה. התאוריה עוסקת ב-DNA וביוקרה.
ה-DNA של האוניברסיטאות הוא DNA מדעי. המחשבה שלהם היא מחשבה מדעית, וכל המחשבה שלהם נתונה למדע. לקחת גוף גדול כמו אוניברסיטה ולנווט אותו לכיוון פרגמטי יותר הוא קשה. קשה, אך לא בלתי אפשרי. וכשיש לחץ מגופים בתעשייה, מדוע זה לא קורה? כי היוקרה של האוניברסיטאות בארץ ובעולם נמדדת במושגים מדעיים – כמה מאמרים הם מפרסמים בשנה, כמה איכותיים מאמרים אלה, וכמה דוקטורים למדע נוצרים באוניברסיטאות אלה.
ויוקרה זו אינה רק מושג אבסטרקטי – יוקרה לצורך אגו. לא ולא – ככל שהיוקרה של האוניברסיטה גדלה, כך גדלות גם התרומות וה-grant-ים שאוניברסיטה זו תקבל – תרומות שהן חלק גדול מהתקציב של האוניברסיטאות כיום. ללא יוקרה זו, תקציב האוניברסיטאות יפחת. אוניברסיטאות, עם כל הכבוד לתעשייה, חייבות לשמור על הרמה המדעית של החניכים שלהם, ולכן ממלאים את המקצועות שלהם בחוגים תאורטיים שאין להם דבר וחצי דבר עם הצרכים של התעשייה.
(הערה אישית – לאוניברסיטאות היום מגיע מקום של כבוד בטיפוח מדעי המחשב. אם ברצונך להיות מדען, ולהמשיך למסלול אקדמי שבו אתה מפתח את מדע המחשבים, האוניברסיטה היא המקום בשבילך. יתרה מכך, החשיבות של המחקר המדעי בתחום התכנה היא גדולה מעין כמוהה ונועדה להבטיח התקדמות אמתית בתחום שהוא כה חשוב בעידן המודרני. בתחום המדעי, האוניברסיטאות רלוונטיות מתמיד!)
המכללות, למרבה הפלא, חוטאות בחטא היוקרה וה-DNA באותה מידה שהאוניברסיטאות חוטאות בהן. לכאורה, המכללות, כגופים פרגמטיים יותר, יכולות למלא את הוואקום שהאוניברסיטאות יצרו במקצוע. באתרים שלהם נראה כאילו הם אכן רוצים להיות יותר פרגמטיים, אך החומר הנלמד הוא פחות או יותר אותו חומר – דגש משמעותי על חומר מתמטי ותאורטי. חבל.
הצורך בקורסים מתמטיים ומדעיים
האם הקורסים המתמטיים והתאורטיים הנלמדים באוניברסיטה אינם חיוניים למקצוע פתוח התכנה? האם תכניתנית שלמדה שנה של מתמטיקה, למרות חוסר הרלוונטיות הישיר למקצוע שבחרה לעסוק בו, אינה יוצאת נשכרת כיוון שמוחה אומן בחשיבה מתמטית? האין חשיבה מתמטית בבסיסה של החשיבה הנדרשת ממנה? האין לימוד של נושאי תוכנה אבסטרקטיים כגון מבני נתונים ואלגוריתמי חיפוש מתקדמים, חיוניים למקצוע?
ואולי אם נלמד רק קורסים פרגמטיים המלמדים רק את הדברים שצריך התכניתן באופן ישיר, נייצר תכניתנים שכל הידע שלהם מתמצה בכלים שלמדו בקורסים אלה ואין להם יכולת לגמישות מקצועית – היכולת להתמודד עם בעיות חדשות שלא נתקלו בהם במהלך לימוד המקצוע. האם לתכניתנים אלה תהיה היכולת לראות את התמונה הרחבה ולא להתמקד בשורות הקוד הצרות שעומדות מול עיניהם?
אם נסתכל על עבודתה של תכניתנית ממוצעת – נניח תכניתנית front-end או back-end בפרויקט ניהול נתונים קלאסי – ונשאל את עצמנו: כמה פעמים תכניתנית זו תצטרך את אותם מבני נתונים ואלגוריתמים מורכבים? התשובה תהיה פשוטה – אף פעם. סיכוי סביר שגם תכניתניות בפרויקטים יותר מתקדמים ו-״מעניינים״ לא ייפגשו בהם לעולם. לגבי מבני נתונים פשוטים כמו תורים, stack וכו – בוודאי, אך אלה חשובים וצריכים להילמד גם בקורסים הפרגמטיים – לא בצורה אבסטרקטית, אלא בצורה מעשית, כזו שתאפשר לתכניתנים להבין מתי להשתמש במבנים אלה ומה המאפיינים שלהם.
והאם היכולת המתמטית לא תחסר לאותה תכניתנית בבואה לתכנת? כנראה שלא – אם נסתכל על חברת תכנה ממוצעת, בערך 30% מהמתכנתים אינם בעלי תואר אקדמי, ואין שום קשר בין יכולת מקצועית לבין קיומו של תואר. כלומר, אפשר ללמוד לפתח, ולהיות תכניתנית טובה, גם ללא תואר אקדמי. אותה יכולת הפשטה ויכולת הבנה של התמונה הרחבה – ניתן לפתח גם ללא לימוד של מקצועות מתמטיים כמו אלגברה לינארית או מתמטיקה בדידה.
אם כך, מדוע החברות הגדולות צובאות על דלתות האוניברסיטאות, בחיפושים אחר הבוגרים המצטיינים? מכיוון שהאוניברסיטה היא מקום מאתגר, שקשה ללמוד בו, בדיוק בגלל הקורסים המתמטיים שאינם רלוונטיים למקצוע. ולכן בוגר מצטיין של תואר במדעי המחשב הוא בוגר חכם, ואנשים חכמים – לרוב יהיו גם תכניתנים חכמים. והשאר? השאר יצטרכו לחפש עבודה כשבאמתחתם שפע של ידע שברובו אינו רלוונטי לתעשייה.
האלטרנטיבות
אם כך, נראה שלימוד של שלוש או ארבע שנים אוניברסיטאיות, והוצאה של מעל חמישים אלף שקלים (לעתים גם יותר ממאה אלף שקלים), לא בהכרח מצדיקות את הזמן וההוצאה. אך האם יש אלטרנטיבות ללימוד תכנה במוסד אקדמי? האם, אולי, כפי שראינו בתחילה, אני יכול למכור את עצמי כשוליה במשך שבע שנים לתכניתן מנוסה, שיספק לי מזון וביגוד, ובינתיים ללמוד את המקצוע?
חבל שלא. שיטת השוליה, שהייתה נהוגה בימי הביניים, הייתה מופלאה כי, בהגדרה, היא לימדה את השוליה בדיוק את מה שצריך ללמוד למקצוע. הלימוד נעשה שלא דרך הרצאות פרונטליות משעממות, אלא בעבודת כפיים, דרך הידיים, בתרגול ולימוד מעשי יומיומיים.
לשמחתי יש כיום יש אלטרנטיבות מודרניות לשיטת השוליה. אולי פחות… קיצוניות, אך כנראה לא פחות יעילות. האלטרנטיבה החשובה הראשונה היא פשוט לימוד עצמי.
לימוד עצמי
האינטרנט מלא בקורסים אונליין ללימוד עצמי. חלקם אף טובים, וטובים מאוד. ניתן בהחלט לעבור קורסים כאלה ולהגיע לרמה בסיסית המאפשרת ללומד אותן להתחיל למצוא עבודה בתחום. דוגמה לאדם שעבר מסלול כזה, ושהצליח בו, אפשר למצוא בפוסט הזה במגזין. תמצאו שם גם שמות של קורסים שהם באיכות טובה.
לימוד עצמי אינו קל – הוא דורש כוח רצון והתמדה. וזמן הלימוד הוא ארוך מאוד. לא כל אחד יכול לעמוד בזה. אך מי שיכול, ויש לו תשוקה גדולה למקצוע, יכול ללמוד אותו לבד. יש מספיק קורסים, פורומים, קבוצות פייסבוק, וסתם חברים שמבינים עניין, שמאפשרים לאדם ללמוד את רזי המקצוע לבד.
אך כמו כל דבר שאתה לומד לבד – יש הפסד מסוים. הפסד של מורה מנחה, שתכוון אותך במסלול הנכון, שתראה לך זווית אחרת ומעניינת להסתכל על החמר הנלמד, ושתתקן אותך לאו דווקא בפתרון הנכון שלך, אלא בסגנון של אותו הפתרון.
טירונות מחשבים (bootcamps)
בשנים האחרונות נוצר מוסד אחר, שמנסה למלא את הוואקום הזה שנוצר ע״י האוניברסיטאות, ומייצר תכניות של בין שלושה חדשים לשנה – תכניות המנסות ללמד את רזי המקצוע ללא המטען המתמטי והמדעי של האוניברסיטאות. תכניות אלה מאפשרות לאדם ללמוד תכנות ולהיות מוכן להתקבל לעבודה כתכניתן מתחיל. הן פורחות בארה״ב והסטטיסטיקות השונות ברחבי האינטרנט מראות שרוב הבוגרים שלהם מוצאים עבודה בתעשייה.
כמה ציטוטים מהמאמר של triplebytes:
Our data aside, it still just seems hard to believe that 3 months can compete with a 4-year university degree. The time scales just seem off […] It’s really incredible how quickly and how well the best bootcamp grads learn. It’s been a pleasure to work with them, and we’ll definitely keep working with bootcamp grads
ובנוסף:
I want to specifically draw attention to the performance of college grads on algorithm problems. They are not only better than bootcamp grads, they are a lot better. They are significantly better than the average programmer making it to our interview (most of whom have 2+ years of experience), and almost as good at the average engineers who we pass. This is interesting. It backs up the assertion that algorithm skills are not used on the job by most programmers, and atrophy over time
כלומר, כשזה מגיע לאלגוריתמיקה, בוגר מדעי המחשב יהיה טוב בצורה משמעותית מבוגר בוטקאמפ, אבל זה לא משנה בעבודה היומיומית – בעבודה היומיומית, בוגר בוטקאמפ יהיה טוב לא פחות מבוגר אוניברסיטה, למרות הפערים בזמן הלימוד.
למה?
מדוע בוגרי בוטקאמפ ואנשים שלמדו בלימוד עצמי, שווים לבוגר תואר במדעי המחשב? למרות שבוגרי בוטקאמפ לומדים כשלושה חודשים, ובוגרי תואר במדעי המחשב, שלוש שנים. כי בוגרי בוטקאמפ הם כמו אותן שוליות של ימי הביניים – הם לומדים את רזי המקצוע, את המקצוע ותו לא, ובוגרי האוניברסיטאות לומדים משהו אחר לגמרי, שרק משיק עם המקצוע – הם לומדים מדע, את מדע המחשבים.
וכן, בשלוש שנים, בוגר מדעי המחשב יילמד מספיק מחשבים כדי להסתדר במקצוע. גם מאוד עוזר שלאוניברסיטאות שבהן הוא למד יש יוקרה משמעותית, אבל בסופו של דבר יסיים אותו הבוגר, לאחר שלוש או ארבע שנים, את התואר עם פחות ידע מעשי מבוגר בוטקאמפ שלמד שלושה עד שישה חודשים.
סיכום
אז מה תעשה Thomas Millard מודרנית, הרוצה ללמוד תכנה? האם היא תלך לאוניברסיטה, ללמוד בדרך הסטנדרטית חומרים מרתקים, אך שרובם אינם רלוונטיים בתעשייה, בתקווה שהיא תבלוט בהישגיה ותקלט בחברת הייטק? או שמא היא תבחר באלטרנטיבות פרגמטיות וזולות בהרבה, של לימוד עצמי או bootcamp-ים?
מי יודע? זו כנראה החלטה של תומס מילרד ודומיהם, ולא שלי.
מתעניינים בלימודי פיתוח פרונט אנד? לחצו כאן לכל המידע
אהבתם את הפוסט? אולי תאהבו גם את עמוד הפייסבוק שלנו, אנחנו מעלים טיפים יומיים על נושאים שמרגשים אותנו.
מזדהה מאוד אם מה שכתבת גיל. כתוב יפה ומסוגנן… לייק