9 בינואר 2022

פיתוח וקריירה - קצת טיפים לאבודים בתחילת הדרך...

 בפוסט זה ננסה לעשות קצת סדר בנושא שפות תכנות וקריירה. 

נדבר על מה כדאי ללמוד - בשביל איזה מסלול ואנסה להיות עדכני ככל האפשר.

ספוילר - זה לא קצר.

עצות בשקל

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

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

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

ומעל לכל - לכל אחד דעה שונה וכולם נחרצים. חלק חושבים שכדאי להתחיל עם תואר - האחרים, בשום אופן. חלק חושבים שכדאי להתחיל עם פייתון - האחרים, מה פתאום, קודם C. חלק חושבים שלהתחיל להתנסות ב-Front End והאחרים - ב-Back End.

אז איך אפשר לדעת מה נכון לשוק ומה נכון עבורך ?

התשובה היא שאי אפשר.


לדעת איך ללמוד

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

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

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

מאיפה מתחילים ?

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

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

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

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

לא ללמוד פייתון (?)

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


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

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

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

לכן, הפילוסופיה שלי בנושא הזה היא מעט שונה.

פילוסופית ZEN

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

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

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

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

אחרי שתסיימו לפחות פרויקט אחד רציני (אבל עד הסוף..) אתם כבר תדעו.

זהירות, קוד ממכר

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

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


שפות ועצות


אז בואו נתחיל מהעצות שהבחור העלה בסרטון שהם סה"כ עצות טובות בכללי:

  • אל תבחר שפת תכנות *רק* בגלל שהיא פופולרית.
  • בחר מסלול קריירה קודם ואז בחר את שפת התכנות שדרושה לו.
  • בחר שפת תכנות לפי הביקוש בשוק (הוא ממליץ על upwork.com).
  • התחל ללמוד Front End קודם ואז עבור בהדרגה ל-Back End.
  • אין בשוק משרות Junior Developer לתחום ה-Backend (זה לא נכון אבל הן נדירות).
  • יש מעט משרות למפתח Django (זה נכון)

ההמלצות שלו לשפות תכנות לפי תפקידים:

- Data Science / Django Developer -> Python

- Frontend developer  -> HTML + CSS + JavaScript  + React

- Backend developer -> JavaScript + Node

- Application developer -> Swift + iOS / Kotlin + Android

- Gaming developer -> Unity + C# / C++


מי שרוצה מוזמן לאמת את ההמלצות שלו עם עוד מומחים מהתחום. 

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

לגבי Frontend, אני גם יחסית בעניינים ואני יכול לאשר שהשילוש HTML + CSS + JavaScript הוא חובה למפתח Frontend (לפעמים נקרא מפתח Web). מי שה-Tags משגעים אותו ולא בא לו לגעת ב-CSS, כדאי שימשיך הלאה. בקשר ל-React - זוהי אכן הספרייה המובילה והמבוקשת היום בשוק אבל כדאי לכם לבדוק גם את Angular ו-Vue ולהחליט. נכון שאם לא תבחרו ב-React תמצאו פחות משרות, אך ראו את מה שכתבתי למעלה.

לגבי Backend, אני לא הרבה שנים בתוך זה אבל אני עובד בזה. השוק בהחלט (גם בארץ) מושך חזק לכיוון Node. זה אומר שתצטרכו ללמוד JavaScript לפני. עם זאת גם משרות בתחום זה גם בשפות אחרות אם כי בביקוש נמוך בהרבה. בתחום של פייתון אני יכול להעיד שהצלחתי למצוא לי משרות שכללו Flask או Django. תחליטו לבד מה אתם בוחרים.

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

טיפים משלי

  • פייתון היא שפה נפלאה למתחילים לדעתי. (גם JavaScript / C sharp / Java סבבה) כי היא מאפשרת עבודה גמישה בלי ערימות של קוד מיותר ויש לה המון מודולים וחבילות שאפשר להרחיב איתם את הפרויקט שלכם בקלות.
  • אל תישאר על אותה שפה הרבה זמן (יותר משנה) ואל תתחיל שפה חדשה בלי שבחרת מסלול קריירה עם תכנית לעתיד.
  •  תמיד מומלץ לדעת יותר משפה אחת אבל בחר שפה אחת שתתמיד בה ותתמחה בה. 
  • אם החלטת ללמוד Data Science, בדוק קודם את הדרישות המתימטיות. אתה עלול להיות מופתע.

לסיום


ועכשיו לעצה האחרונה והחשובה מכולן:

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

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

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

לא חשוב באיזו שפה תבחרו - נתחיל בכך שלפתח בסביבת Windows זה ממש לא אותו הדבר לפתח בסביבת Linux.

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

נמשיך בכך שכמעט כל תוכנה משתמשת בסוג מסוים של Database, מלא תוכנות משתמשות בוירטואליזציה כמו Docker או Kubernetes , מלא גם עושות Deploy לענן של AWS או GCD או Azure ואתם תראו את כל הסלנגים האלה מופיעים בדרישות המשרה, אחד אחרי השני.

ישנם מקומות שאין QA אז גם רוצים שתהיו טובים ב-CI/CD וכמעט שכחתי שיש לא מעט מקומות שעובדים בשיטת Agile ורוצים שתכיר ותתנסה בשיטה זו.

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

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

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

במה כן כדאי להשקיע תמיד ?

בעקרונות פיתוח נכונים.

מבני-נתונים מתקדמים, אלגוריתמים, Clean-Code, עקרונות Design-Patterns, עקרונות SOLID, עקרונות System-Design-Architecture ישרתו אותך תמיד לא חשוב באיזו שפה תהיה ולהשקיע בהם וללמוד אותם זה כמו להשקיע במניות סיכון אפס.

זה תמיד משתלם - גם אם זה לא ישרת אותך בטווח הקצר.



2 תגובות:

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

    השבמחק
    תשובות
    1. כן. תוכל לשלוח לי מייל אל dev101blog ב-ג'ימל.

      מחק