הצעה לסקר:

Zack DA

New member
../images/Emo41.gif הצעה לסקר:

מה התכונה החשובה ביותר של מתכנת ?
 

Zack DA

New member
יש כאלה שטוענים כמוך.

יש הרבה מועמדים לתואר: שקדנות, היכולת ללמוד מכל דבר, התמדה, סבלנות...
 

neko

New member
בסופו של דבר, מי שממציא

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

ChipsMan

New member
מי אמר שמדברים על מתכנת פשוט? ../images/Emo3.gif

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

neko

New member
ודאי, אבל לפי ההגיון הזה,

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

eshedr

New member
מה הוא בעצם אלגוריתם?

אלגוריתם הוא בעצם איך הקוד עובד. לא? כאילו הדרך שבה הוא עושה את הדברים. אפשר לקבל בבקשה הסבר מלא ומפורט? תודה eshedr
 

ChipsMan

New member
אממ..

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

DNile

New member
ביצים גדולות.

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

Zack DA

New member
ברור שמתכנת זה שילוב.

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

DadleFish

New member
כל התכונות שהוזכרו פה בשרשור,

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

DNile

New member
לא עבודה שגרתית וחסרת גיוון?

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

DadleFish

New member
שים לב למה שאמרת,

"לפעמים". נכון, לפעמים. זה בדיוק מה שאמרתי. תגיד, אם נתנו לך משימה, לעבור על 5,000,000 שורות קוד, ולחפש Buffer overflows - האם בכזו משימה אתה נדרש ליכולת "ללמוד משהו חדש"? (אל תתחכם. תשווה את זה לכתיבת kernel driver בלי לדעת כלום בנושא). האם בכזו משימה אתה צריך יותר מדי יצירתיות? (תשווה את זה לביצוע design מהפכני או לפיתוח אלגוריתם מהיר במיוחד). בקיצור, יש המון סוגים של משימות וכל אחת דורשת דברים אחרים. אי אפשר לומר שמי שאינו שקדן הוא בהכרח תוכניתן גרוע, או שמי שלא לומד בעצמו יותר מדי טוב הוא בהכרח תוכניתן גרוע.
 

DNile

New member
יש שיאמרו שמשימה כזאת

איננה משימה של מתכנת, אלא משימה של איש QA. וגם אם כן, עדיין צריך ללמוד קודם כל מה זה Buffer overflow לפני שאתה עושה את זה. אתה עדיין צריך ללמוד באיזה מקומות טיפוסי למצוא Buffer overflows. ויש גם מקום ליצירתיות במשימה כזאת - לא מזמן עידן(אני חושב, אולי זה היה גלעד) הביא כאן קטע קוד של מיקרוסופט שהיה בו Integer overflow, שגרר buffer overflow. לכאורה הייתה בדיקה אם יש buffer overflow, אבל היה פגם בבדיקה, שיכלה להכשל במקרה של Integer overflow. והייתה בעיה זהה בתכלית גם בקוד ASN1 של מיקרוסופט(שגרר לאחריו כל מיני תקיפות, כמו כיבוי המחשב מרחוק, על ידי הקרסת lsass). ברור שיש המון סוגים של משימות, אבל אחד הדברים שמאפיינים מתכנת טוב זה היכולת לקפוץ בין משימות, ולעשות את העבודה הדרושה באותו הרגע. בין אם אתה כותב מערכת הפעלה, לומד לכתוב למערכות משובצות, כותב בדיקות למערכת כלשהי, עובר על קוד לא שלך כדי למצוא Buffer overflows, לעצב אלגוריתמים, לתכנן GUI נכון, וכו'. ברור שזה אוסף של תכונות, וברור שאפשר לפצות על העדר תכונה אחת עם תכונות אחרות, אבל בסופו של דבר, אם חסרים לך הרבה מהתכונות הללו, יהיה קשה מאוד להיות מתכנת. ולגבי ה"לפעמים" - הלפעמים הזה קורא לכל אחד. אני אתן לך דוגמה מהמקום עבודה הקודם שלי: סיימנו פיתוח של גרסא(עברנו לcode freeze), והסתבר שלא בדקנו את הקוד מספיק, ושאין מספיק אנשי QA לעשות את העבודה. אז מנהל הפיתוח החליט שהוא פשוט מקצה חצי מהצוות פיתוח לעזור בעבודת הQA. חלק מהעבודת QA הזאת הייתה מאוד משעממת ושגרתית, אבל היה צריך לעשות אותה.
 

DadleFish

New member
יפה,

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

DNile

New member
אני סתם נהנה להתווכח איתך.

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

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