מדריך - איזה תואר ללמוד כדי להיות מהנדס תוכנה
האם למי שרוצה לעסוק בתוכנה כדאי ללמוד מדעי המחשב? ואולי הנדסת תוכנה? ומה ההבדל ביניהם בכלל?
ענף התוכנה הוא הענף הגדול ביותר בתעשיית ההייטק, ובגלל שהשכר בו גבוה, וקל יחסית למצוא בו עבודה גם כשאין ניסיון (בהשוואה לחומרה), פורחת סביבו תעשייה שלמה של קורסים ותארים, שמבטיחה הרים וגבעות. התעשיה הזו יוצרת את התחושה שאם רק תפרדו מכך וכך שקלים, ותלמדו קורס בזק בתכנות ב-.Net, תוכלו גם אתם לנסוע הביתה עם רכב ליסינג שעליו מוטבע לוגו של חברה. אבל הבטחות לחוד ומעשים לחוד - בשביל להכנס לענף התוכנה רצוי להוציא תואר, חשוב שזה יהיה תואר מסויים, ורצוי שהוא ירכש במוסד עם שם טוב. כדי שתדעו מי נגד מי, ובעיקר אילו טעויות לא לעשות, ריכזתי בשבילכם כמה עצות הנוגעות ללימודים במקצוע התוכנה.
מה כדאי ללמוד
ישנם שני תארים מרכזיים שמתאימים לענף התוכנה: תואר במדעי המחשב, או תואר בהנדסת תוכנה. הראשון נמשך 3 שנים בעוד השני נמשך 4. מבחינת מרביתן של חברות ההייטק, בוגרי שני התארים זהים זה לזה, ואם כך הדבר, בטח תשאלו, אז מהו ההבדל ביניהם?
מהנדסי תוכנה יכולים להירשם בפנקס המהנדסים, בעוד שבוגרי מדעי המחשב לא. יש חברות שהיותכם מהנדסים חשובה להן, אבל כאמור, ברוב המקרים זה חסר חשיבות. תארים נוספים שמתאימים לפיתוח תוכנה (אבל פחות) הם מתמטיקה, פיסיקה ותעשיה וניהול עם התמחות במערכות מידע (פיתוח מערכות מידע), אבל אלו לרוב מתאימים כשכבר יש לכם ניסיון קודם בפיתוח תוכנה.
מהן דרישות הסף בענף התוכנה
אם נדמה לכם שתנופפו בתעודת התואר, וחברות הייטק יפתחו בפניכם את שעריהן בנשימה עצורה, אז צר לי לאכזב אתכם אבל זה לא כזה פשוט. על מנת להכנס לענף התוכנה, נדרש ניסיון קודם, על פי רוב, וכן, ענף התוכנה מגיע עם דרישה לניסיון קודם גם כשאתם בוגרים. אלו היו דרישות הניסיון הממוצעות למשרה על פי שפת פיתוח, בסקר שעשיתי על מאגר המשרות של דיאלוג:
- משרות פיתוח בשפת C++ , מגיעות (בממוצע) עם דרישה לכ-3.7 שנות ניסיון.
- משרות פיתוח בשפת Java עם 4.2 שנות ניסיון (בממוצע).
- משרות פיתוח בשפת C# עם כ-3.9 שנות ניסיון (בממוצע).
העובדה שמצפים מכם לניסיון גם כשאתם בוגרים, העלתה לא פעם את הטירוניה המעגלית ש-"אם אין לכם ניסיון, לא תוכלו למצוא עבודה, ואם לא תוכלו למצוא עבודה, לא יהיה לכם ניסיון". הטענה הזו נכונה בקירוב (כי יש מקומות עבודה שמוכנים לתת לכם הזדמנות גם כשאין לכם ניסיון), לכן רצוי שתתחילו לצבור ניסיון כבר במהלך התואר, במסגרת משרת סטודנט, בה לא מצפים שיהיה לכם ניסיון קודם.
ואם העניין של האין-ניסיון מדיר שינה מעיניכם, אז הנה משהו שדיאלוג למדה במהלך המשבר שפקד את ענף ההייטק בשנת 2009, שעשוי להרגיע אתכם: במהלך המשבר היו שתי אוכלוסיות של מפתחי תוכנה, שהביקוש להן לא ירד גם בשיא המשבר: בוגרים מצטיינים חסרי ניסיון, ופליטי יחידות טכנולוגיות בצה"ל (8200 ואחרות). העובדה הזו נכונה, וזה אומר שמי שיסיים את התואר בממוצע גבוה, יוכל למצוא עבודה גם ללא ניסיון, ללא מאמץ גדול מדי, אפילו בעתות משבר.
כמה גבוה? חשבתי שלעולם לא תשאלו:
- טכניון – 82 ומעלה
- תל אביב, בן גוריון, העברית – 85 ומעלה
- חיפה, בר-אילן, המכללה הטכנולוגית תל-אביב יפו – מעט יותר גבוה מכך
- מכללות – 88 ומעלה
גם אם הוצאתם ממוצע נמוך יותר, זה לא אומר שלא תוכלו למצוא עבודה בתוכנה. זה אומר שכנראה יקח לכם יותר זמן, ואפשר שתאלצו להתפשר על השכר ועל סוג המשרה עצמה (QA ולא תוכנה, למשל). אז למרות שחשוב לצאת מהתואר עם ניסיון, אסור, מאידך, לתת לעבודה במהלך התואר לפגוע לכם בממוצע!
להתחיל לחפש עבודה כבר בסימסטר הראשון
לא מעט סטודנטים מנסים למצוא עבודה כבר בסימסטר הראשון ללימודים, אבל יש שתי סיבות לשמן מומלץ לא לחפש עבודה כבר בשנה הראשונה:
- הראשונה היא פרקטית - השנה הראשונה עוסקת במבואות ובמקצועות מתמטיים, וכמעט אין בה מקצועות של פיתוח תוכנה. זה הופך אתכם לפחות רלוונטיים לחברות תוכנה, כי עם כל הכבוד לאינפי או חדו"א, מה שאתם לומדים שם זה לא שפת C++.
- הסיבה השנייה גם היא פרקטית, בעצם (אני חושב ומקליד תוך כדי, איזה פטנט!) – השנה הראשונה היא שנה קשה יותר. היא קשה כי זו הפעם הראשונה שאתם מתמודדים עם לימודים באקדמיה, והיא קשה כי המקצועות הם מתמטיים יותר. רצוי לא להעמיס גם עבודה על השנה הזו, מה שיפגום בממוצע שלכם, וכן, הממוצע מ-א-ו-ד חשוב, כפי שציינתי למעלה (במידה והצלחתם לפספס את זה).
מה החברות בודקות בקורות החיים שלכם
אצל סטודנטים: הן תבדוקנה באיזה מוסד אתם לומדים (עדיפות לאוניברסיטאות), איזה תואר אתם לומדים (עדיפות למדעי המחשב או הנדסת תוכנה), ומהם הציונים שקיבלתם בקורסים הרלוונטיים למשרה לה אתם מועמדים. כמו כן, יבחנו את יתרת הלימודים שלכם, ואת כמות השעות שאתם מסוגלים לתת בשבוע.
אצל בוגרים: החברות תבדוקנה אם יש לכם ניסיון עבר, והאם הניסיון הזה רלוונטי למה שהחברה מפתחת. כמו כן, תינתן חשיבות גדולה מאוד לזהוּת המוסד בו למדתם (עדיפות לאוניברסיטאות), ולממוצע התואר איתו סיימתם. חשוב להצטייד בגיליון ציונים על מנת שהמהנדס/ת שמראיין/ת אתכם, ת/יוכל לבדוק את הציונים שהשגתם בקורסים רלוונטיים למשרה (למשל קורס JAVA), אבל גם בקורסים מתמטיים שעשויים להצביע על הגיון והבנה מבנית.
למישהו אכפת מפרוייקט הסיום שלי?
לפרוייקט הסיום שני יתרונות: הראשון, הוא ה"ניסיון" היחיד שלכם בפיתוח מוצר מתחילתו ועד סופו, והשני, הוא יכול לעזור לכם כשהממוצע של התואר נמוך [מיד אחזור לזה]. בגלל שזהו, לא פעם, ניסיון "הפיתוח" היחיד שאתם יכולים להציג, חשוב לכתוב אותו טוב בקורות החיים: ציינו במפורט [אך בקצרה] מה היתה מטרת הפרויקט [למשל: אפליקציה לניהול השאלת ספרים מהספרייה של המחלקה], ובאילו שפות פיתוח, סביבת עבודה וכלים אחרים השתמשתם לשם ביצועו. חשוב שתחזרו על הפרויקט לפני ראיון העבודה, מפני שתשאלו עליו במהלך הראיון, שאלות שינסו לברר לא רק איך פיתחתם אותו, אלא גם למה בחרתם לפתח אותו בעזרת השפות / הכלים שבחרתם, ולא בדרך אחרת.
לבסוף, ציינו את הציון שקיבלתם על הפרויקט. כשממוצע התואר נמוך, הבלטת הציון שקיבלתם על הפרויקט יכולה לפצות במעט על כך [אבל זה לא נכון תמיד], במיוחד כשקורות החיים שלכם מגיעים לידיים של מהנדס תוכנה והפרויקט שלכם מעורר את סקרנותו. כפי שאתם שמים לב, יש פה הרבה עניין של מזל, אבל המזל הוא עניין של מזל גם כן.
התואר יאפשר לי לפתח בכל שפה?
תואר במדעי המחשב או בהנדסת תוכנה, יאפשר לכם לעבוד במגוון סביבות פיתוח ובמגוון שפות:
השפות הכי נפוצות למהנדסי תוכנה הן Java, ו-C# , ומיד אחריהן מגיעה C++. ישנן שפות נוספות, נפוצות פחות, כגון C, ו-Assembler שבהן יש עדיפות דווקא ליוצאי תואר בחשמל ואלקטרוניקה, לצד שפות תסריט כגון PHP, SQL, JavaScript ואחרות, להן לא נצרך בהכרח תואר, והניסיון בהן חשוב פי כמה.
שפות תוכנה משמשות לפיתוח מוצרים מגוונים כגון, אפליקציות מובייל, אתרי אינטרנט, מערכות מידע (למשל שפת Cobol) ותוכנות דסקטופ, כמו גם מערכות Embedded קרובות לחומרה ופיתוח אלגוריתמים.
על פי רוב, התארים הנדרשים ל-Embedded הם לאו דווקא הנדסת תוכנה ומדעי המחשב (למרות שגם הם מתאימים), אלא דווקא הנדסת חשמל ואלקטרוניקה (או הנדסת מחשבים). מאחר שהפיתוח בסביבת Embedded קרוב מאוד לחומרה, ולכן יש עדיפות לתארי "חומרה".
לתחום פיתוח האלגוריתמים יש דרישה לתארים מתקדמים (תואר שני או דוקטורט) במתמטיקה, במדעי המחשב או בפיסיקה, ועל פי רוב, גם נדרשת תת-התמחות שנלמדת במסגרת התואר המתקדם (למשל, פיתוח אלגוריתמים לזיהוי תמונות). כל תת-התמחות כזו תעמיק את הידע התיאורטי שלכם, ובנוסף, תלמד אתכם להשתמש בכלים רלוונטים למימוש האלגורתמים או להרצתם (למשל השימוש ב-Matlab).
בקרב משרות אלו חברות מחפשות בוגרים עם ניסיון עבודה, אבל לא פעם, ניסיון אקדמי יכול להיחשב כמספק, בעיקר כשבמסגרת הניסיון האקדמי, עסקתם במחקר יישומי ורלוונטי למוצר שמפתחת חברת ההייטק.
הבנתי, חייבים תואר בשביל לעסוק בתוכנה
בגדול? כן אבל ישנם מקצועות בתוך ענף התוכנה, שלא דורשים תואר (בנתיים, יתכן שגם זה ישתנה בעתיד). ענף הפיתוח בסביבת אינטרנט ומובייל (למשל אפליקציות לאנדרואיד ואייפון) הוא דוגמא בולטת לכך. משרות בענף זה שמות דגש גדול יותר על ניסיון עבודה מאשר על תארים, אבל גם כשאין לכם ניסיון, זה לא הסוף - אתם יכולים לבנות אתרים מורכבים עצמאית, או לפתח אפליקציות לאנדרואיד ואייפון בזמנכם החופשי, להעלות אותן ל-Plag של גוגל, או ל-AppStore של אפל, ולהציגם כ"תיק עבודות".
בשל העובדה שמשרות בענף המובייל והאינטרנט הן גמישות יותר בהגדרתן, הן עשויות להתאים גם לסטודנטים, והבונוס: חלק מהחברות יתנו לכם לפתח בשפות שיאפשרו לכם, בסיום התואר, לעבור מפיתוח מובייל או אינטרנט, לפיתוח תוכנה (למשל Java4Android).