5 הרגלים של מתכנת מנוסה

[3 ביולי 2008] [8 תגובות]

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

1. כותבים קצת, בודקים הרבה

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

לבדוק הכל טוב טוב לפני שממשיכים

הרבה מתכנתים מתחילים נוטים לחשוב כי הדרך הנכונה לפתור בעיה גדולה היא כך:

א. פירוק הבעיה לתתי בעיות.
ב. פתירת הבעיות וכתיבת הקוד.
ג. בודק שהתוכנית שלו פועלת.

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

הדרך הנכונה לגשת אל בעיות היא:

א. פירוק הבעיה לתתי בעיות.
ב. בחירת תת-בעיה, פתירתה וכתיבת הקוד עבורה.
ג. בדיקה כי הקוד אכן פותר את תת-הבעיה.
ד. חזור לשלב ב' עד שהכל פועל כשורה.

2. מתכונן לקרב

ההרגל: מתכנת מנוסה שואף להבין את כל הבעיה ומתכנן את רוב הפיתרון לפני שכתב שורת קוד אחת.

סוף מעשה במחשבה תחילה

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

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

3. שותה קפה, הולך לישון, מדבר בטלפון וקורא עיתון

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

הפסקות, לא הרגל רע

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

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

4. מבין מי נגד מי

ההרגל: מתכנת מנוסה מתעניין ב-"איך" פקודות פועלות ולא רק ב-"מה" הן עושות

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

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

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

5. לומד

ההרגל: מתכנת מנוסה אוהב ללמוד שיטות חדשות

התשובה נמצאת מחוץ למקלדת

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

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

איך מפתחים הרגלים נכונים

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

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

הרי כולנו רוכשים הרגלים, אז למה שלא נרכוש את הטובים ?

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

8 תגובות

  1. zekar | 7/21/2009 4:17:01 PM

    מבצע הכל חוץ מ2, דבר שבאמת מוביל הרבה פעמים למחיקת קטעים גדולים..

    אבל מצד שני בדברים קטנים זה עוזר להבין מה הבעיה..

     

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

     

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

  2. סיפורים | 8/23/2009 10:38:24 PM

    אני יכולה לומר באופן איש ועם הרבה ניסיון שיש הרבה בכתבה!

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

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

    זה לא משנה איפה הוא למד, איפה הוא עובד או מה הוא עושה! מתכנת זה בנפש! זה קשור להרבה השקעה והתמדה, והרבה שערות לבנות (מכל הצרות שהקוד עושה )

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

    אז שאפו!

  3. יבגני | 12/23/2009 6:01:53 AM

    בהחלט עצות טובות!

    אני מבצע הכל חוץ מ-3.

    אני אנסה ליישם אותו ונראה איך זה ישפר אותי בתור מתכנת.

  4. ענבל | 7/4/2010 11:00:11 AM

    אמת אמת אמת!!!

    אני מתכנתת כבר הרבה שנים ויכולה להעיד שכל מילה בכתבה

    היא אמת. וממליצה בחום לכל אותם מתכנתים חדשים לקחת את העצות ברצינות ולממש אותם... שווה לכם :)

    שיהיה לכולנו תכנות פורה :)

  5. רשף | 2/10/2011 4:09:32 AM

    תרגום אפשרי ל-As they go:

    תוך כדי תנועה

    :) 

  6. תור | 9/1/2011 3:00:11 AM

    מסתייג מ-1

    לדעתי מתכנת מנוסה פועל כך

    א. פירוק הבעיה לתתי בעיות.
    ב. בחירת תת-בעיה, פתירתה וכתיבת בדיקה שתשקף את פתרון התת בעיה.
    ג. כתיבת קוד שמעביר את הבדיקה.
    ד. חזור לשלב ב' עד שהכל פועל כשורה - הכל ירוק :-).

     

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

  7. מתכנת | 9/20/2011 11:36:09 PM

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

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

  8. מתכנת מתחיל | 9/27/2011 9:15:23 AM
    3 פשוט כל כך נכון...גליתי בדרך הקשה...שעתיים ישבתי בנסיונות לפתור-אחרי זה עשיתי הפסקה של שעה בערך-חזרתי וראיתי את הבעיה! תוך חמש דקות!

הוסף תגובה