a

choo

Active member
קודם כל, טוב שהתעוררת מספיק מוקדם - ראיתי הרבה אנשים מתחום המערכות המשובצות שמתקשים לעבור ראיונות טכניים בגלל ניוון מחשבתי ורכישת הרגלים מאוד מכווני "קמצנות משאבים" ;)

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

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

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

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

מן הסתם קיימים עוד תת-תחומים שאינני זוכר ו/או אינני מכיר.

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

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

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

River2020

New member
אני הייתי הולך לכיוון של high level, אני בטוח שזה יהיה לך עולם אחר ואת תהני מזה הרבה יותר. בתור מתכנת ווב זה נראה לי מזה כאב ראש low level ו-embedded בדיוק מהסיבות שציינת. אל תחשבי על עוד 5 שנים, עוד 20 שנים, תחשבי איך את נהנית מהחיים עכשיו, אל תלכי רחוק מדי
 

קלייטון.ש

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

user32

Well-known member
מנהל
תחושת הבטן שלי אומרת שתהני יותר מעולמות הhigh level והתכנות האפליקטיבי. השוני העיקרי הוא חשיבה ותכנון ברמת המשתמש האנושי, דגש על חווית משתמש, התנהגות המוצר וכו'. בכל מקרה, כיוון שזה תחום כה רחב, הייתי ממליץ לפחות לעשות נסיון.

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

Nuke1985

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

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

מצד אחד נראה שעולם ה-high-level הרבה יותר פורח היום ויש ביקוש גבוה מאוד ביחס ל-low level והרבה יותר משרות. מצד שני, יש גם הרבה יותר היצע של מועמדים.

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

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

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

rj222

New member
הרבה שנים עבדתי ב-low level ב-C, אסמבלי ו-matlab, אמבדד ובפיתוח ואפוטימיזציה של אלגוריתמים לעיבוד אותות.
העבודה הייתה בד"כ מעניינת. הבעיה הייתה שנסיון בתחום ובפלטפורמה אחת לא בהכרח היו יתרון בתחומים ובפלטפורמות אחרות.
אז לקחתי קורסים ל-high level כמו OOD/C++, embedded linux, Design Patterns.
גם פה לא באה הישועה התעסוקתית, אז למדתי Javascript, קצת Python, JQuery ו-Bootstrap הפכתי לעצמאי ומאז בא לציון גואל.
המהדרין יכולים ללמוד גם react ו-angular.
כבר כתבתי פה שלדעתי המגמה התעסוקתית היא לכיוון ה-high level:
דברים שעשו פעם בחומרה עושים ב-PFGA.
דברים שעשו ב-FPGA עושים ב-DSP.
דברים שעשו ב-DSP עושים ב-CPU ג'נרי.
דברים שעשו באמבדד עושים בדסקטופ/מובייל נייטיב.
ודברים שעשו בקוד נייטיב עושים בקוד וובי.
גיוון תעסוקתי הוא דבר טוב, לא צריך להיות מוגבל לתחום מסוים ואם לא בטוחים כדאי לנסות.
 

d70

Well-known member
הרבה שנים עבדתי ב-low level ב-C, אסמבלי ו-matlab, אמבדד ובפיתוח ואפוטימיזציה של אלגוריתמים לעיבוד אותות.
העבודה הייתה בד"כ מעניינת. הבעיה הייתה שנסיון בתחום ובפלטפורמה אחת לא בהכרח היו יתרון בתחומים ובפלטפורמות אחרות.
אז לקחתי קורסים ל-high level כמו OOD/C++, embedded linux, Design Patterns.
גם פה לא באה הישועה התעסוקתית, אז למדתי Javascript, קצת Python, JQuery ו-Bootstrap הפכתי לעצמאי ומאז בא לציון גואל.
המהדרין יכולים ללמוד גם react ו-angular.
כבר כתבתי פה שלדעתי המגמה התעסוקתית היא לכיוון ה-high level:
דברים שעשו פעם בחומרה עושים ב-PFGA.
דברים שעשו ב-FPGA עושים ב-DSP.
דברים שעשו ב-DSP עושים ב-CPU ג'נרי.
דברים שעשו באמבדד עושים בדסקטופ/מובייל נייטיב.
ודברים שעשו בקוד נייטיב עושים בקוד וובי.
גיוון תעסוקתי הוא דבר טוב, לא צריך להיות מוגבל לתחום מסוים ואם לא בטוחים כדאי לנסות.
אני מסכים לגבי הגיוון, ולזה שיש הרבה יותר היצע לתכנות high-level סטייל ווב,אפליקציות וכו'.
קצת לא הבנתי את הדוגמאות שהבאת :
DSP עושים ב CPU ג'נרי? דברים באמבדד עושים בדסקטופ?
 

user32

Well-known member
מנהל
אני רק אעיר על זה שמנסיוני בכתיבת UI למערכות אמבדד, כדאי לקחת בחשבון שזה מאוד שונה מכתיבת תוכנה קלאסית (תוכנות בענן וכו').
 

d70

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

אולי תנסי לקפוץ ליותר high level במסגרת התפקיד הנוכחי , למשל על ידי בנית כל מיני UI שרצים על ה PC ומדברים עם המעבדים היעודיים לצורך טסטים, טעינת תוכנה, הצגת סטוטסים של החומרה ( מתחים, זרמים, ערכי כניסות אנלוגיות ....) בצורה ויזואלית ....
אותם UI יכתבו כבר בשפות עיליות יותר מ C ( כמו C++ פיתון, גאווה, ממשק וובי ...)
[/QUOTE




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

haimgds

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