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

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

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

דוגמאות לכלים שרוצים ללמוד ואתגר מומלץ:

  • אני מעוניין ללמוד unity => לממש משחק דמקה בunity בין שני שחקנים.
  • להכיר את יכולות למידת המכונה של GCP => לבנות מערכת על הענן של גוגל בעלת ממשק פשוט שמקבל סרט קצר, מוציא ממנו תמונות של כל האנשים השונים שמופיעים בסרט + כל הטקסטים בשפה האנגלית שנאמרים בסרט ולשלוח אותם במייל.
  • להכיר שפת Rust => לבנות תוכנה שפותרת סודוקו ולהבין איך מריצים אותה בcontainer.

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

  1. להתקין סביבת עבודה ולראות שתוכנה פשוטה של hello world רצה.
  2. להחליט מה הקלט והפלט של התוכנה + להכין כמה קלטים ופלטים תואמים (מומלץ לעבוד בגישה של TTD).
  3. ללמוד איך עובדת השפה, איך כותבים משתנים ואיך כותבים פונקציות בסיסיות בשפה.
  4. להגדיר את הלוגיקה של הפתרון ולאיזה פונקציות אתה זקוק (סוג של כתיבת פסבדו-קוד).
  5. לממש את הפתרון.
  6. להריץ את התוכנה בcontainer.

כמובן שאפשר לבחור במשימות שונות או סדר שונה למשימות בשביל לפתור את האתגר (שימו לב שגם אין תלות ברוב המשימות).

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

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