מJava ל Cpp (ובחזרה?)

מJava ל Cpp (ובחזרה?)

שלום!

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

באופן כללי, לא תכננתי לחפש עבודה ב Cpp, וההעדפה הברורה שלי הייתה למשהו יותר high level, ג'אווה/פיית'ון בכיוון של Big data. אבל אז התחלתי לחשוב שמה זה משנה בעצם, ומפתח טוב צריך להיות ורסטילי ולעבוד בהרבה שפות, והעיקר שיהיו לי אתגרים, ואולי בעצם אני אגלה שאני יותר טיפוס של low level..... (אני עדיין לא בטוחה שאני רק משכנעת את עצמי כדי להתחמק מראיונות עבודה).
יש לי קצת ניסיון פיתוח ב Cpp. אני יודעת שמבחינת יעילות מתכנת, היא יותר נמוכה מאשר בג'אווה.

אשמח כרגיל לשמוע לדעתכם החכמה:

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

תודה
 

vinney

Well-known member
כמה מחשבות

1. מהתיאור שלך יש סיכוי לא רע שדווקא לא משתמשים בSTL. במיוחד בקוד יותר ישן. אבל באופן כללי, ב++C לא צריך להכיר מליוני פריימוורקים כמו בJAVA, ופריימוורקים שכן נפוצים (כמו boost) נכנסים לתקנים היותר חדשים כחלק מהשפה.
&nbsp
2. זה לא טריויאלי, ולו כי יש לך הרבה הנחות יסוד שאת רגילה להן מJAVA ופתאום תגלי שהן לא מתקיימות בכלל ב++C. רוב האנשים שעברו מJAVA שנתקלתי בהם מתקשים באופן מיוחד בכל הקשור לניהול זכרון, באופן כללי ייצוג מידע, וניהול תהליכים. הרבה דברים בJAVA, כך נראה, מוסתרים מהמתכנת וב++C צריך להכיר ולממש אותם בעצמך.
&nbsp
3. בעמדת חסרת נסיון בטוח לא תהיי. אבל אם את לא רוצה לעזוב את JAVA - אל תעזבי. במילא התכוונת לחפש מקום אחר, לא?
 

zaske

New member
גם אתה מתבלבל בין js ל java?

עידן המליוני פריימוורקים ב java חלף מהעולם,
כמו ש boost כמדומני עשתה את דרכה לתוך השפה, ככה גם דברים אחרים עשו את דרכם לתוך java

הדוגמא הנפוצה ביותר שאני יכול לחשוב עליה היא חבילת ה concurrency של דאגלס לי, שהיוותה את ההשראה ל java.util.concurrent

דוגמא נוספת, גווין קינג ועוד כמה חבר'ה מהייברנט (לימים jboss לימים רד-האט ) ישבו עם חבר'ה מסאן/אורקאל ועוד חברות, והנה יש לך את התקן של jpa ל orm - זה שה reference implementation הוא פופטיץ ולא מר כהן, לא מעניין 80 אחוז מהמפתחים.
כנ"ל לגבי web services בין אם restful ובין אם soap ועוד ועוד, מה שקורה זה שבסופו של דבר java מבחינת ה jre כמכלול הלכה ותפחה, ודווקא היום יש מעבר למודל מודורלי יותר , קרי - בוא תגיד לנו מה אתה צריך (מה שנקרא project jigsaw - שיהיה בגרסא 9 בעזרת מפלצת הספגטי המעופפת).

אז כן, כנראה שהמצב בדונט נט, שלא לדבר ב cpp טוב יותר, אבל זה כבר לא הבלאגן של פעם. היום הבלאגן נמצא ב js לדעתי.
 

vinney

Well-known member
לא מדבר JAVA שותפת

בקושי מכיר את הסינטקס.
&nbsp
אבל כבר הזכרת איזה 2-3 פריימוורקים, כשאני התאמצתי לחשוב רק על boost....
 

zaske

New member
תחזור לציון, התחלת לכתוב עם שגיאות כתיב

ועכשיו ברצינות -
כשאני עבדתי מאסיבית עם c++ באחרונה השתמשנו בספריה של ACE לצורך אבסטרקציה של multi threading וכל מיני אובייקטי סנכרון. למשל היה שם Guard שממש התלהבתי מאיך שהוא משתמש יפה ב scope של בלוק.

אז מה מקובל היום נניח , ברמה של ספריה (אם אני לא רוצה לעבוד ישר עם ה api של מערכת ההפעלה) בשביל multi-threding ב c++?

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

bismark1

New member
multithreading התווסף לשפה מאז C++11

אתה יכול לראות כאן דוגמא קצרה.

ובכלל - ++C עברה שינויים מאוד משמעותיים עם הסטנדרט החדש אבל היא נשארה יחסית ענייה בספריות שהיא מציעה out of the box.
 

vinney

Well-known member
כאמור, מה שתיארת כבר נכנס לתקן

לא השתמשתי בace אף פעם (אם כי זכור לי ששמעתי עליה), אבל בboost כן יצא לי להשתמש איפשהו.
&nbsp
לרוב, דברים קשורים לתהליכים היינו עושים על בסיס הספריות של הOS (תלוי מה היה, pthread, או איזו שטות של VxWorks שכבר לא זוכר מה היא...).
&nbsp
לגבי DB - אותו דבר, כשעבדתי עם DB של אורקל השתמשתי בpro*sql, כשהיה DB משובץ - sqlite. אבל אלה לא פריימוורקים, אלה מוצרים.
 

choo

Active member
מה שנכנס לתקן, ככל הידוע לי, הוא חלק מזערי מ-ACE או boost

&nbsp
רק בתור דוגמא פשוטה - אין בשפה active objects וה-futures שמגיעים איתם.
 

choo

Active member
עכשיו אני רואה שיש future בלי active object

&nbsp
ה-packaged_task נראה כמו active object לפעולה ספציפית, מבלי להבטיח התנהגות טורית, או להגביל את כמות החוטים (לפחות לפי התעוד שלו אין שום הבטחה על צורת המימוש שלו)
 

ipv6

Member
האם אצלכם מנצלים את כל ה-Feature-ים החדשים ב-C++0x?

rvalue refernces/move semantics, lambada exepression, std::bind/std::function?
נניח קוד חדש שנכתב, בהנחה שהקומפיילר שלכם תומך.
אני מקבל את הרושם שבדברים האלה לא ממהרים להשתמש והרבה מקומות שטוענים שהם כותבים ב-C++11/14 עושים איזה שימוש ב-auto ושמים =delete או override באיזה מקום וזהו..
 

choo

Active member
חשבתי שזה שאיני עובד ב-++C כיום ברור לפי "עתיקות הידע" ;)

 

hadooper

New member
האם פיתוח low level נהוג כיום גם בשפות אחרות? ובכלל,

מה רמת הביקוש כיום למפתחי low level? נניח, לעומת זה של מפתחי server side ב java?
 

choo

Active member
ביקוש נמוך יותר - אבל גם היצע מפתחים נמוך יותר

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

ipv6

Member
לא רק היחס של ההיצע לביקוש חשוב

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

choo

Active member
לא - לא תמיד זה עדיף. חשוב יותר לעסוק בתחום שמעניין אותך

&nbsp
וברמה האישית, סוג המערכות שנהוג לכתוב בשפות כמו C ו-++C, יותר מעניין אותי מסוג המערכות שנהוג לכתוב בשפות כמו פייתון, ג'אווה, #C....
&nbsp
לאדם שאין לו שום העדפה - מה שכתבת עשוי לשמש בתור כלל אצבע מתאים.
 

ipv6

Member
זאת אמירה אורתוגונלית

אני דיברתי על
"מה שחשוב הוא יחס הביקוש להיצע, ולא רק הביקוש."

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

choo

Active member
יש דרכים שונות להתנהלות עסקית (וניהול קריירה הוא עסקי)

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

ipv6

Member
סתם מתוך עניין

אילו תחומים אתה מגדיר בתור נישה צרה וריוויחית? בארץ כמובן.
 
למעלה