מתכנת טוב מול מתכנת סביר?

jackinbox

New member
מתכנת טוב מול מתכנת סביר?

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

השאלה שלי היא די כללית – מה לדעתכם הכישורים / ידע שמאפשרים למתכנת להצליח בתחום? בגדול, אני תוהה:
האם שליטה טובה בשפת תכנות אחת או יותר יספיקו? ואם כן, האם "קילומטרז'" מסויים של שורות קוד הוא מדד לשליטה בשפה? היכרות עם פונקציות/מודולים כאלו ואחרים?
האם הבנה עמוקה של המוצר והטכנולוגיה שעומדת מאחוריו היא העניין הקריטי?
או שדווקא כישורים "בסיסיים" יותר כמו חשיבה לוגית חדה נותנים יתרון מובהק על פני שליטה בצד הטכני שציינתי לעיל?
איפה המורכבות והאתגר בעבודה של התכנות – בכתיבת קוד במהירות? במציאת הקוד היעיל ביותר? הברור ביותר? בדיבוג של הקוד? בקריאת קוד של קולגות?
והכי חשוב (ושוב, מאוד סובייקטיבי) – מה לדעתכם מבדיל – בין אם תכונות או במיומנויות נרכשות – בין מתכנת טוב למתכנת סביר?

קצת התפזרתי, אבל אשמח לתשובות/כיוונים :)
תודה
 

choo

Active member
התשובות מאוד משתנות בין תחומים שונים ומשרות שונות

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

ipv6

Member
אני יכול לחשוב על כמה תכונות

1. ראיה מערכתית - היכולת להכנס בזמן כמה שיותר קצר למערכת כמה שיותר מורכבת ולהכיר אותה כמה שיותר טוב. יש רמה של לדעת ברמת ה-buzz words מה היא עושה ויש רמה של לדעת להראות את ה-flow-ים שלה בקוד וכמובן לדבג אותם.

2. יכולות Hands on - הכוונה היא לדעת להפעיל כלים שלא ראית, לפצ'פץ' אותם כדי שנקדותית יעשו משהו שאתה צריך ובכללי להכנס מהר לקוד שלאו דווקא ראית או מהווה את עיקר העיסוק היום-יומי שלך.
אפשר לשלב תחת הרובריקה הזאת גם יכולת להשתמש בספריות צד שלישי התממשקות ולקוד של אחרים ודיבוג דברים מורכבים.

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

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

S h a r k 1 8

New member
לדעתך, תוך כמה שנים של ניסיון אפשר להגיע לרמה הזאת?

זה נראה לי כמו לפחות 3 שנים.
&nbsp
 

hadooper

New member
לי זה נראה יותר כמו 5 שנים לפחות ברוב המקרים.

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

vinney

Well-known member
5-10 שנים

תלוי בבן אדם ותלוי בהיקף של הדברים האלה.
 

choo

Active member
אין "הרמה הזו" - אפשר להשתפר ללא גבולות ברורים

&nbsp
השיפור אינו ליניארי - אבל אין לו ממש "חסם עליון" חיצוני - אלא רק מתי אתה מתחיל להתעצל ללמוד להשתפר
 

h a j b i

New member
השאלה שלך מאוד כללית

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

jackinbox

New member
תודה רבה, נקודות מעניינות

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

יבגני34

New member
תכונות נוספות: פוליטיקאי טוב, כדי שתתקדם גם בעבודה

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

יבגני34

New member
למה הפוך? מישהו צריך לדעת מי עושה את העבודה

וכדאי שתהיה מתכנת חזק אבל שידעו שאתה קיים, ולא יקבלו אותך כמובן מאליו
 

Lhuna1

New member
זה לא השאלה שהוא שאל

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

hadooper

New member
מה שאתה מדבר יוצר הבדל של בערך עוד אלף או אלפיים לשכר הנטו.

 

יבגני34

New member
אתה מזלזל ב-2K נטו? מה עם בונוס, הכרה,

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

Lhuna1

New member
תאמין לי, מספיק שהמנהל הישיר שלך יודע

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

ipv6

Member
השאלה היא

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

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

hadooper

New member
מתכנת אכן לא חי לבד...

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