⬅ חזרה לאינדקס

מהרהר על ההתפתחות קרירה כמפתח תוכנה מבחינת Domain

🕒 פורסם בתאריך: 24/07/2021 15:34
אני סוגר בקרוב שנתיים בעבודה הנוכחית שלי כמפתח Linux embedded שגם נגע ביצירת backend עבור אחת המכונות שלנו(בשפה שהיא high level).



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



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



הנחה ראשונה - domain



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



יש הבדל בין מפתח C++ שכותב -Firmware עבור מכונה ספציפית לבין אחד שכותב את הקוד של דפדפן כמו Chrome שככל הנראה נותן מענה לבעיות שבהם נתקלים גם בדפדפן כמו Firefox. יש הבדל בין מפתח backend שכתב את ה-parser של Netflix לבין המפתח שהתמקד בחלק של הלוגיקה שאחראית לטפל בעומס הבקשות שאיתו מתמודד השירות וה-scale שרק הולך וגדל עם הזמן. לא רק שהמפתח השני מתמודד עם אתגר מעניין יותר(לדעתי) זה בעצם domain משל עצמו שרלוונטי לחברות web שרוצות לשרת מיליוני לקוחות בו זמנית.



הנחה שניה - לחברות הגדולות עדיף להיכנס כשאתה כבר senior



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



הנחה שלישית - עולם ה-web זז הרבה יותר מהר מעולם ה-embedded



אני בא מתחום של embedded (ומודע לזה שיש לי bias ) שלגמרי בסדר עם לעבוד עם C++11 ולא רואה סיבה לרדוף אחרי טכנולוגיות חדשות. בזמן שכשאני



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



חברות B2B ביחס ל חברות B2C



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



שאלות



1. האם בעצם חברות קטנות שמתמקדות במוצר embedded שאפשר להגדיר אותן כ-B2B הן מראש מקום פחות טוב ללמוד ולגדול בו כי יש יותר סיכוי שיהיו הרבה יותר שריפות לכבות, הרבה יותר לחץ להוציא גרסה והרבה יותר סיכוי שיהיה לקוח גדול שהגחמות שלו יהיו בראש סדר העדיפויות?



2. לדעתי מפתח טוב הוא מפתח שאכפת לו מ-clean code ו-best practice עד כמה לדעתכם זה באמת מוערך בתעשיה שלנו או שכל מה שמעניין זה כמה מהר אתה יכול "to deliver" והאיכות לא מעניינת?



3. האם עולם ה-web באמת יותר כאוטי ביחס ל-embedded או שזה נטו ה-bias שלי?



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



5. עד כמה לדעתכם משחק התפקיד של front או back כאשר מתרגמים לחשיבות לארגון וגוזרים ממנו שכר בעולם ה-web?



6. שאלה קצת פילוסופית , אבל לאן צריך לכוון מעבר לעבודה הראשונה בשביל לתרגם את הנסיון לחשיבות לארגון ושכר? האם הכיוון צריך לחפש להתמקד ב-domain?
🕒 פורסם בתאריך: 27/07/2021 12:32
1. ללמוד מה? יש חברות העוסקות בנישה שלהן ואין סיבה שתגיע שם לבעיות מסוימות, כי המוצר לא עוסק במשהו שקשור אליהן (לדוג: סקייל גבוהה). אם אתה רוצה ללמוד משהו ספציפי זה יהיה טוב להגיע למקום שמתעסק בבעיות האלה.



2. זה מוערך ע"י המפתחים האחרים שקוראים את הקוד שלך ומשתמשים בו (בתקווה).



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



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



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



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



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



6. מאוד כללי. אבל השאלה גם לאן מכוונים. ניהול? רמות גבוהות יותר של פיתוח?



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



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



- אני ג'וניור :)



- לא ממליץ ומייעץ, אשמח לעוד דעות
🕒 פורסם בתאריך: 02/08/2021 13:22
שאלות מעניינות, מקווה שהצלחתי לעזור מעט
🕒 פורסם בתאריך: 07/08/2021 22:59
מהניסיון שלי(אדם אקראי באינטרנט שאתה לא מכיר :-P) זה לא בהכרח נכון. חברות B2C רוצות הרבה פעמים להוציא פיצ'רים הרבה יותר מהר, גם אם הם לא מוכנים בשביל למשוך לקוחות שלא בהכרח ישתמשו במוצר לאורך זמן. דווקא החברות B2B שעבדתי בהן נטו למוצר בשל יותר ופחות כיבוי שריפות



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



אני מגיע גם מembedded כך שאל תיקח את המילה שלי(איש זר באינטרנט, בסופו של דבר), אבל לדעתי אתה צודק. לדוגמא אם אתה יודע c++11 כנראה שהשינוי המשמעותי בשפה שתצטרך להכיר יהיה ב c++20 שבטח יקח עוד 5-6 שנים שחברות יתחילו להשתמש בסטנדרט הזה. למרות זאת תמיד יש מה ללמוד בכל תחום, ודווקא בתחומי הEmbedded הרבה פעמים הידע שנדרש הוא הרבה יותר "עמוק" במובן של מרמת האיך מתנהג האסמבלי או הcache עד high level design של מערכת שלמה.



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



אין לי מושג, לא מגיע מהעולמות האלה.



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



אגב, מחפש עבודה, מתעניין במקרה גם במכוניות אוטונומיות, תן פרטים ואשלח הודעה.
🕒 פורסם בתאריך: 08/08/2021 21:17
תודה רבה לכל מי שהגיב, הרחבתם לי את הפרספקטיבה :)



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



הנחה ראשונה -domain



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



@הבורח מהמירוץ רק אציין שאני מאוד נהנה ללמוד פשוט לא רואה בלימוד שפה או framework חדש כמשהו מאוד מעניין. כן רואה בשפה ככלי ללימוד תפיסה(כמו OOP או GC), אבל ברגע שלמדת C++ אתה לא תלמד יותר OOP אם תלמד JAVA.



@yahud - אני לגמרי מסכים, "הכי טוב לבחור domain שהוא מספיק לא ספציפי"



@go nature - מאוד מתעניין בתחום מסיבות אישיות, אשלח הודעה פרטית.