JAVA או C# - שפת תכנות לעבודה ראשונה

CookieMan3

New member
JAVA או C# - שפת תכנות לעבודה ראשונה

היי,
אני בוגר תואר ראשון (אונ' תל אביב) בממוצע סבבה, וכרגע בתהליכי חיפוש עבודה ראשונה (אין ניסיון קודם).
כרגע יש לי 2 הצעות בפיתוח:
1. משרת WEB בC#, .NET.
2. משרה של פיתוח אפליקציות למובייל בJAVA (אנדרואיד).

בממוצע משוקלל, יש לי העדפה קלה להצעה הראשונה: בחברה של הC# התפקיד נשמע לי יותר מאתגר והמערכת יותר מורכבת בכמה סדרי גודל. האווירה בחברה קצת נראית יותר לטעמי, והיא קצת יותר נוחה לי מבחינת נסיעות.
הצעות השכר יחסית דומות.

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

תודה! :)
 

godknows1

New member
רק הערה קטנה- לדעתי פיתוח אנדרואיד הוא יותר נישתי בהרבה

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

CookieMan3

New member
CLOUD

יש מצב. הם הזכירו גם את הבאזוורד 'cloud' (אז אולי זה הופך את זה ליותר רלוונטי)

אבל בגדול השאלה שלי מכוונת למשרות JAVA באופן כללי מול C#
 
משרה סביב ה JVM עדיפה

בתור אחד שעשה את המעבר מפיתוח סביב מוצרי מיקרוסופט (דוט נט, ויז׳ואל סטודיו וכו׳) לפיתוח בפייתון ובשפות סביב ה JVM (כמו Java, Clojure) אני מציע לך להתעניין בעיקר במשרות שהן Java/JVM oriented.
כמות הפניות שקיבלתי בלינקדאין, למשל, היתה הרבה יותר גדולה מאז שעזבתי את דוט נט.
בדוק את הפרוייקטים האופן-סורסיים של החברות הגדולות, כמו גוגל, פייסבוק, ואמאזון - הן כותבות הרבה יותר קוד ב Java מאשר ב #C, אם בכלל.
&nbsp
לדעתי, בהקשר של ״שרידות״ בהייטק, משרת Java תיתן לך ערך גבוה יותר.
&nbsp
בהצלחה!
 
תלוי מה אתה מודד

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

יבגניי34

New member
אז כאמור כל המעבר ללינוקס + פייתון + ״הרגלים״ לקח 3 חודש.

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

2. כל המעבר היה על חשבון המעסיק, כי היו לי כבר מעל 6 שנות נסיון, כולל ניהולי. כלומר מישהו ממש נתן לי את ההזדמנות לעשות את המעבר על חשבונו. זה לא טריוויאלי ואם אני קורא נכון את השוק, אז זה יכול קרות רק אחרי 4-5 שנות נסיון.

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

יבגניי34

New member
כן, בוודאי. לא חושב שיש אי-הסכמה לגבי זה.

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

ברור שמשרה בעולמות ה-JVM תתן לי כושר הישרדות יותר גבוה אבל זה לא נכון לגבי פיתוח אפליקציות אנדרואיד ב-JAVA.
בפרט שהטא מתאר שמבחינת אווירה, מורכבות, ונסיעות ה-C# יותר טוב.
לדעתי לך על ה-C#.
&nbsp
 
אני לא המלצתי לו על משרת ה Java הספציפית הזאת

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

BravoMan

Active member
אני לא יכול לומר לך עד כמה השפה והסביבה הן שיקול משמעותי

ביחס לנסיעות, שכר, ושאר המאפיינים, אבל אני כן רוצה להסביר לך נקודה חשובה:
&nbsp
ההבדל בין משרד Web לבין משרד Mobile הוא הרבה יותר משפת תכנות.
אופי הפיתוח הוא מאוד שונה.
&nbsp
המשרה הראשונה נשמעת כמו משרת צד שרת.
(קשה לומר בלי תיאור משרה מדויק).
&nbsp
המשרה השנייה הרבה פחות ברורה:
אנשים לרוב לא מבינים, שפיתוח ל-Android הוא פיתוח תוכנה במובן המלא, שיכול להתפרס על פני מספר תחומים.
&nbsp
זה נכון, שיש הרבה חברות שמפתחות אפליקציות פשוטות שהן בסה"כ Client Side, ואולי אפשר היה אפילו להחליפן בדפדפן.
אני לא יודע אם זה מה שמציעים לך במשרה השנייה.
&nbsp
אבל יש גם אפליקציות שעושות הרבה יותר. מתקשרות עם חומרה ייעודית, עוסקות בהצפנה או דורשות אלגוריתמיקה, ועוד, ועוד.
&nbsp
Android הוא תחום, הוא לא נישה (לא יותר מאשר "צד שרת" הוא נישה).
צריך גם לזכור ש-Android כבר מזמן זה לא רק "טלפונים".
&nbsp
ואם כל זה נשמע לך כמו פרסומת, אז זה בגלל שהכותב עוסק בתחום מאז שיצא מכשיר ה-Android הראשון ב-2008

ולא, אני לא עובד Google, אבל בהחלט אוהב את הפלטפורמה שהם יצרו ונהנה לפתח עליה.
&nbsp
בתחום השרתים ל-NET. יש תחרות מאוד חזקה הן מכיוון Java והם מכיוון טכנולוגיות אחרות.
&nbsp
שים לב שפיתוח ב-Java צד שרת שונה מפיתוח Java על Android.
למרות שהשפה עצמה זהה, היא גם יחסית מצומצמת, ורוב העבודה בשני המקרים היא עם Frameworks ו-API מערכתיים, ואלה מאוד שונים.
גם ה-Application Model ו-Work Flow שונים.
&nbsp
אם כל חוסר החיבה שיש לי כלפי MS אני חושב שמוגזם להגיד ש-NET. גוססת.
MS גם עושה עכשיו שינויים משמעותיים בה, אז אני חושב שבטוח לומר ששום דבר לא בטוח. הטכנולוגיה נמצאת בשינוי משמעותי.
&nbsp
ועוד קצת חפירה לסיום:
אני כן חושב שפקטור מאוד חשוב בבחירת עבודה ראשונה הוא האנשים שסביבך:
האם יהיו במקום מקצוענים שיכלו וירצו ללמד אותך.
האם יהיו נהלי עבודה מסודרים, ועבודה עם כלים מסודרים, הקפדה על כתיבת בדיקות, Code Review וכו'.
&nbsp
אני חושב שזה שיקול שצריך לקחת עדיפות ע"פ תחום או טכנולוגיה, כי הוא יחזק אותך מקצועית לא משנה לאיזה כיוון תרצה ללכת אחר כך.
 

user32

Well-known member
מנהל
לא מסכים לגבי ההבדל בין web למובייל

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

אופי פיתוח "שונה לגמרי" יהיה למשל: low level, דרייברים, קרנל, תקשורת (ברמת השכבות והתעבורה כמו פיתוחי פיירוולים וכו'), RT, אמבדד, ודומיינים אקזוטיים כמו פיתוח קומפיילרים ושפות פורמליות, אלגוריתמים מסוגים שונים כמו ML, תשתיות כמו: פיתוח שרתים (שרתים עצמם ולא קוד שרץ ב"צד שרת"), מנועים גרפיים וכו'.

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

BravoMan

Active member
אני נתקל בזה בכל פעם שאני משוחח עם אבטחת מידע אצלנו:

הם מספרים לי על מוצר ש-"יודע לסנן ברמת אפליקציה", וכשאני שואל "איך בדיוק?"
הם מתחילים להסביר לי על headers שונים ב-HTTP.
&nbsp
ואז אני מבין שמה שהם קוראים לו "אפליקציה", אני קורא לו "אתר".
ומה שאני קורא לו "אפליקציה" - תוכנה native שרצה על המכשיר, הם לא יודעים איך לאכול, כי אולי היא בכלל לא משתמשת בשכבת ה-http אלא פותחת tcp sockets עם איזה פרוטוקול קנייני, או שכן משתמשת ב-http אבל שולחת מינימום headers שצריך כדי לקבל תשובה, ולך תבדיל מי עומד מולך.
&nbsp
החלוקה שאתה עושה היא מאוד high level, בין אפליקטיבי לתשתיתי, ואני מקבל אותה, אבל כשיורדים יותר קרוב לתחלס, בכל זאת לא כל האפליקציות נוצרו שוות.
(ואם כן, אז יש כאלה ששוות יותר
>
)
&nbsp
יצא לי לפתח מספר אפליקציות ל-Android שמדברות עם התקני USB.
או מתקשרות דרך פרוטוקולים שונים ע"ג BT.
&nbsp
בשני המקרים, מצד אחד השתמשתי ב-API מערכתיים ברמה גבוהה (יחסית) והקוד היה ב-Java, מצד שני עדיין הייתי צריך להבין איך בונים את מהלך התקשורת, להתחשב במה יכול להשתבש, וגם ללמוד איך עובדת ומתנהגת החומרה שאני מתקשר איתה.
&nbsp
אני מתקשה לראות פרויקט Web שבו מתכנת יידרש לדבר כזה.
&nbsp
כאמור, לא כל אפליקציות במובייל נדרשות לדברים כאלה, אבל זה ההבדל שציינתי:
יש אפליקציות שהן רק Client Side של אפליקציית Web, ואז הכישורים חופפים לגמרי, ויש כאלה שלא.
 

user32

Well-known member
מנהל
אתן לך דוגמה

"אני מתקשה לראות פרויקט Web שבו מתכנת יידרש לדבר כזה."

יצא לי לכתוב כמה וכמה מוצרי web שמנטרים ציוד תקשורת ברשת וdevices מסוגים שונים. בערך 30% מהמוצר היה הcore שעשה דברים דומים למה שתיארת ושאר ה70% היה קוד סביב הקונסול, הרבה GUI, תהליכי משתמש וכו'. המתכנתים נגעו בכל המוצר מקצה לקצה כחלק מהאידיאולוגיה שלי (למי שמכיר אותי
).

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

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

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

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

user32

Well-known member
מנהל
כי הקוד שלו רץ על שרת?

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

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

יבגניי34

New member
כי ״שרת פתוח לרשת״ זה דבר שיכול לקבל כמות שרירותית של טרפיק

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

BravoMan

Active member
השורה האחרונה שלך מאוד מעניינת:

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