רוצה להכנס לתחום התכנות

2ndToNone

New member
רוצה להכנס לתחום התכנות

אהלן,

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

הניסיון שלי בתחום שואף ל-0. יש לי כמה שאלות שאשמח אם תענו לי עליהן על מנת לבדוק אופציה להמשיך עם התחום:
1. מאיזו שפה כדאי להתחיל? האם יש איזו שפה שתגרום לי להבין בכלליות את התחום ואם הוא מתאים לי?
2. מה הידע הדרוש ללימודי תכנות? יש איזה בסיס מתמטי נדרש וכו'?
3. כיצד ניתן ללמוד בצורה עצמאית?
4. מה משך הזמן שיקח להתחיל מהיסוד ועד התמקצעות בשפות שונות?
5. האם יש אנשים שתכנות לא מתאים להם? ואם כן אשמח לפירוט.
6. מה הן השפות ה"פופולאריות" יותר כיום?

תודה מראש.
 
מתוך תגובות ושאלות שהיו בעבר בפורום הזה.

0. שום לימודים לא מבטיחים עבודה בתחום. מרבית המעסיקים מחפשים בוגרי תואר ("לימודי הנדסה" - בערך 4 שנים), או מספר שנות נסיון, קורס של מכללה לא אקדמית "לא נספר" בד"כ, אלא אם כן אתה יכול להציג תיק עבודות מרשים (שקול לנסיון, ומעסיקים שמוכנים להסתפק בתיק כזה, בד"כ לא יבקשו ממך תעודות ממכללה לא אקדמית).
1. אין שפה כזו. יש ויכוח מה השפה שכדאי להתחיל בה, ובד"כ זה תלוי מה הכוון שלך. כיום הייתי מתחיל ללמד javascript, פשוט כי סביבת הריצה שלה זמינה בכל מקום, והיא לא דורשת כלים מיוחדים.
2. נדרשת ידיעה בסיסית+ באנגלית (מרבית חומר העזר באנגלית). ידע במתמטיקה לא חיוני מעבר לרמה הבסיסית (4 פעולות החשבון), אלא אם כן בכוונתך לעבוד במימוש של אלגוריתמים (בלי זה אתה די תקוע, כך שמתמטיקה ברמה של 5 יחידות ומעלה בהחלט תעזור לך בהמשך).
3. פשוט להתחיל. בחר כוון "ברור" יותר, וננסה לכוון אותך למקורות המתאימים.
4. אני בערך 25 שנים בתחום, ועדיין לא התמקצעתי כמו שצריך
התחום דינמי, וכל הזמן צריך להמשיך ללמוד.
5. יש בהחלט. אלו שזה לא מעניין אותם.
6. נדמה לי שפייתון זכתה לתואר "השפה הנלמדת ביותר בארה"ב" בשנת הלימודים הקודמת (פופולארית אפילו יותר מספרדית). אישית אני ממש לא אוהב את השפה הזו (מזכירה לי את brainfuck).
&nbsp
 

2ndToNone

New member
תודה על התגובה

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

שיקנה לך ותק, ולא עבור הלימודים? נראה לי "משונה". ה"אחרי כמה שנים" זה כשתוכל להגיע לראיון עבודה, ולפתור "חידות" בסגנון "פתור את חידת 8 המלכות ללא שמוש ברקורסיה", או "נתח קובץ INI "קלאסי" שנתון לך כbyte stream". או בסגנון החידה שהעליתי לפה (מחפשים אצלנו עובד, לא מסתכלים על תעודות, אבל כן על יכולת תכנות). לפעמים לתפקידים ספציפיים "מוכנים" להסתפק באדם שיכול להתאים רק לאותו התפקיד.
http://www.tapuz.co.il/forums/viewmsg/156/180727293/
&nbsp
הסבר לחידת 8 המלכות (ויקיפדיה):
https://he.wikipedia.org/wiki/חידת_שמונה_המלכות
&nbsp
 

2ndToNone

New member
אני משלם על הכשרה שאמורה להוות בסיס לכניסה לתחום

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

Guy Yafe

New member
התשובה שלנו לא תשתנה

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

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

Guy Yafe

New member
אחדד את מה שרשמתי

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

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

Guy Yafe

New member
אז גם אתה לא תיקח בוגר קורס

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

Guy Yafe

New member
נתחיל מהשאלה החמישית

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

היתקליף

New member
מתכנת מקצועי לא צריך ידע במתמטיקה בכלל

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

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

היתקליף

New member
אם התפקיד שלו תכנות מקצועי

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

Guy Yafe

New member
אין דבר כזה "בלי להבין"

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

היתקליף

New member
אולי אצלך "אין דבר כזה"

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

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

Guy Yafe

New member
אתה מתאר code monkey ולא מתכנת מקצועי

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

Guy Yafe

New member
אתה רציני?

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

היתקליף

New member
אני מאד רציני

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