זו לא שפת התכנות, טמבל

21/04/2016

גיקטיים פרסמו השבוע רשימה של שפות התכנות הכי מבוקשות בתעשייה בארץ. קצת הופתעתי למצוא את Java ו Node.JS בראש.

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

אבל הבעיה היותר גדולה עם רשימות כאלו היא ההרגשה המוטעית לפיה אם רק תלמד את שפת התכנות הנכונה תהיה במצב טוב יותר למצוא עבודה. האמת היא שברוב המקרים זה לא נכון ולכן במיוחד אם אתם בתחילת הדרך המקצועית שלכם כדאי לקרוא הלאה על ההבדל בין ידע לטכניקה.

1. בתכנות המיומנות חשובה יותר מהידע

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

רוב השאלות הטכניות בראיונות עבודה לא מכוונות לגלות עד כמה המועמד מכיר בעל פה את כללי שפת התכנות אליה אנחנו מגייסים. אם תטעו בשם של פונקציה או בסדר הפרמטרים אף אחד לא יתרגש מזה. הדבר העוד יותר מפתיע שכמעט כל מי שתדברו אתו מהתעשיה יעדיף לגייס מתכנת Java תותח שמוכן ללמוד מאשר מתכנת Ruby בינוני למשרת מפתח Ruby.

ראיונות עבודה מקצועיים עוזרים לנו להבין מה רמת המיומנות המקצועית שלכם, כלומר באיזו מידה הקוד שתכתבו ישתלב טוב בקוד הקיים בארגון. הרבה פעמים קל יותר ללמד מתכנת Java מעולה לכתוב Ruby, מאשר ללמד מתכנת Ruby בינוני לכתוב קוד טוב יותר.

2. איך מזהים מיומנות? דרך תבניות

באתר jobhunt יש רשימה ארוכה של שאלות מראיונות עבודה. כמעט את כל השאלות שם יכולתם לפתור ביותר משפה אחת, וזה לא היה משנה את השאלה כלל.

שאלות על עצים ורשימות מקושרות חוזרות על עצמן שוב ושוב כמעט בכל ראיון מהרשימה שם, בפרט חיפוש בעץ בינארי ממוין, היפוך עץ בינארי וכן הלאה. מתכנתי Java צריכים לדעת לענות על שאלות כאלו בדיוק כמו מתכנתי Ruby ו perl.

סוג נוסף של שאלות הוא שאלות על בתים וחלוקה לביטים, היפוך ביטים במספר, זיהוי האם מערכת היא Big Endian או Little Endian ובכלל ההבנה של איך המחשב מייצג מספרים.

מצאתי המון שאלות על מחסנית ו Hash, ואיך משתמשים במבני נתונים אלו, למשל לצורך כתיבת פונקציה שמזהה תקינות סוגריים בביטוי (כשבינינו לא ברור למה אף אחד לא הציע שם ביטוי רגולרי)

או כמו שכתב באותה הרשימה אחד המראיינים שם:

בגדול – שואל על הרבה נושאים – אבל בשעה של ראיון שמתוכה 5 דקות הקדמה ומבוא, 20 דקות למימוש שאלת קוד ורעיון אלגוריתמאי – נשאר לכל היותר חצי שעה שבמהלכה מנסה לדלות כמה שיותר פרטים על ניסיונו וידיעתו של המרואיין. בזמן הזה צריך לראות שמועמד יודע מבני נתונים, סיבוכיות, OO, וכמובן JAVA. ואם מרואיין אם ניסיון – אז בכלל…לצלול לתוך פרוייקטים שעליו המרואיין עבד, לוודא שהוא מבין את הארכיטקטורה של המוצר עליו עבד

למי שמחוץ לתחום קשה להבין את האתגר של מתכנתים שעבדו שנים במקום מסוים למצוא עבודה חדשה. לכאורה אם כבר יש לך 5 שנים נסיון אתה אמור להשתלב טוב בכל מקום אם אתה יודע את שפת התכנות שבה כותבים שם.

אבל דווקא בתכנות קל מאוד להעביר שנה אחרי שנה בלי לצבור מיומנות אמיתית. אולי זה הלחץ היום יומי בחברות הפיתוח, או העדר הכוונה ומנטורינג מספקים, או העובדה שאף אחד לא באמת מבין על מה אתה עובד ורק רואים את התוצאה. בקיצור קחו מתכנת כזה ש-5 שנים לא משתמש נכון במבני נתונים או לא מבין לעומק איך דברים עובדים (אבל עדיין מצליח לבעוט בהם מספיק כדי שיעבדו) ושלחו אותו לראיונות. על זה כתב אותו המגייס:

ולא אחת מגיעים מרואיינים שפשוט חסרי ידע, וחבל. כי זה סה”כ לדאוג לכסות את הידע שצברתי במהלך העבודה/לימודים.

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