26 ביוני 2020

אוקיי, סיימתי תואר במדמ"ח - מה עכשיו ?

יצא לי לא אחת לדבר עם חבר או מכר שסיים את לימודי התואר שלו במדעי-המחשב והשאלה שלהם היתה דומה: מאיפה מתחילים ? לאיפה כדאי ללכת ? האם צריך להשלים עוד ידע או ישר למצוא עבודה ? איך מוצאים עבודה ללא ניסיון ?

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




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

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

במקרה הזה, הייתי ממליץ לכם לקחת כל משרה שתסכים לקבל אתכם ובלבד שתהיה משרת פיתוח ולא משרת QA או משהו דומה במסווה של משרת פיתוח. דרשו לוודא פרטים מדוייקים לגבי המשרה לפני שתחתמו.

לגבי כל השאר שלא מצליחים, עדיין, למצוא עבודה - מה עושים ? משפרים עמדות: לומדים מקורסים מקוונים, תורמים לקוד פתוח, בונים פרוייקטים אישיים וכו'

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

להלן אלה שאני מכיר: 


פיתוח בעולם ה-Web וה-Mobile


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

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

בלי לדעת את ההעדפות שלכם, אני אומר שכדאי לכם לכוון לתפקיד של Full Stack Developer. זוהי הדרישה הנפוצה כיום למפתח Web או אפליקציות Web.

מה זה אומר ? ובכן, תחום ה-WEB עם הזמן נחלק לשניים: FrontEnd ו-BackEnd. כאשר FrontEnd  מכסה בעיקר את כל התחום הויזואלי של הפיתוח שרץ על ה-Browser ו-BackEnd מכסה את כל התחום הלוגי של הפיתוח שרץ על השרת שמעבד את המידע.

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

למרות זאת, לפי הבנתי, עדיין הציפיה היא מכל מפתח להראות שליטה חזקה יותר בצד אחד מאשר הצד השני ובכל מקרה, אף אחד לא משלה את עצמו שמפתח Full Stack ישלוט יותר ממפתח FrontEnd או BackEnd שהתמחה שנים רק באזור שלו.

תחום ה-FrontEnd כולל בעיקר חבילות JavaScript כמו Angular ו-React (שלא אכנס כרגע למה זה אומר) וכמובן ידע בכל הקשור ל-HTML ו-CSS וספריות מוכנות לעבודה כמו BootStrap.

תחום ה-BackEnd בעיקרון יכול לכלול כל שפה עילית שיש לה חבילת Web, כמו Python, Java אבל העיקרית הנפוצה היא גם JavaScript יחד עם Node.JS שזה למעשה שרת שמקבל את הפקודות של JS במקום ה-Browser.

טבעי מאד שגם ידרשו מכם ידע בנושא DataBase. כאן תצטרכו להכיר שתי קבוצות שנקראות SQL ו-NoSQL כאשר לכל קבוצה יש מספר תוכנות שונות וכדאי להכיר לפחות את הגדולים והמבוקשים שם.

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

פיתוח חומרה


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

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

אין הרבה חברות מתאימות בארץ אך יש מספיק. הידועה מבין כולם היא כמובן אינטל אך גם Qualcomm, Broadcom, Western Digital, Nvidia ויש עוד כמה.

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

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

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


פיתוח אלגוריתמים


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

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


Data Science


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

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

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

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

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


פיתוח אפליקציות 


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

שפות מקובלות בתחום הן השפות העיליות: ג'אוה, C ++ , סי שארפ ועוד בהתאם למה שהחברה שתתקבלו בה תעבוד.

הערה קטנה לגבי Python- למרות היותה שפה פופולארית, נוחה וגמישה מאד, יש פחות נכונות (למרות שאפשר) לכתוב בשפה זו מוצרי Production שיוצאים ללקוח אלא בעיקר מוצרי בדיקות.

היוצא דופן העיקרי הוא תחום ה-Data Science שעובד בעיקר עם Python אך גם שם, בהרבה מקרים הפיתוח הוא לא עבור האפליקציה אלא עבור חבילות ה-DS.

הסיבה היא ש-Python היא שפה שלא מוכוונת Multi Threading (תעשו חיפוש על מה זה GIL), לא מכוונת יעילות ומבחינת Performance היא לא מתחרה בשפות עם קומפיילר.

אני אומר את זה בתור חובב גדול של השפה, בצער רב, אבל זו המציאות שכדאי להכיר.

מה שכן, ניתן לכתוב אפליקציות Web מעולות ב-Python וליהנות מהנוחות של השפה, אך בעיקר באזור ה-BackEnd ועם הרבה עזרה מ-JS בכל הקשור ל-FrontEnd.


פיתוח בדיקות / Validation


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

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

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


לסיכום

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

ממליץ לכם לחקור ולבדוק ולא להתרשל כדי לא למצוא את עצמכם תקועים באותו תפקיד שאתם לא מעוניינים בו מבלי יכולת להתקבל לתפקידים אחרים שמתאימים יותר עבורכם.

בהצלחה.

תגובה 1: