סבתא בישלה תרגיל. את תבנית העיצוב תרגלה, ממשקים פונקציונלים תרגלה, למבדות תרגלה, מודולריות תרגלה, ורק למטרת התרגיל לא נשאר.
התרגיל של היחידה לדוגמה מוכן, ומתרגל תזמון, Facade, Decomposability, ממשקים פונקציונליים ולמבדות, והתלמידים אמורים לתזמן בו מבני נתונים שונים, לשפוך את הנתונים לקובץ CSV (comma separated values) שניתן לפתוח באקסל, ולהתרשם מהתוצאות. אממה, מסתבר שיש בו שתי בעיות עיקריות:
1) מבני הנתונים לא פותרים בתרגיל הזה בעיה קונקרטית מהעולם האמיתי שמנצלת את החוזקים שלהם, אלא "רק" משווים את החוזקים והחולשות כדי להיווכח שאלה לא סוגיות תיאורטיות אלא כאלו שמתבטאות בזמני ריצה אמיתיים.
2) מי שיביא את עצמו לכך, יוכל גם לחשוב רגע על התזמונים שחישב ולחשוב איך זה משקף את החוזקים והחולשות של מבני הנתונים, אבל זה לא הכרחי בשביל להכין את התרגיל.
3) הכנת התרגיל, כמו גם השימוש בתרגיל, הם... איך לומר... היו לי כמה הנאות צרופות בחיים וזו לא הייתה אחת מהן. זה לא היה רע במיוחד, אבל גם אין כאן שום דבר שמושך את תשומת הלב.
לגבי 1: ראשית, יש לחשוב על התרגיל בקונטקסט - זו לא הפעם האחרונה או הראשונה שהם משתמשים במבני הנתונים. כמובן שהם נלמדים לקראת הפרקים הבאים, דהיינו שם יהיה שימוש שלהם בהקשרים מציאותיים. בנוסף, תת הפרק שמציג את מבני הנתונים (טיפים מצביקה) יכיל תרגול שלהם עם בעיות קונקרטיות קטנות. לעזרתנו בא CodeBoard עם רכיב ה-EdX שלו שתומך LTI ויכול לתרגל בעיות קטנות כאלו ממש כחלק מעמוד היחידה לאחר הסרטון הרלוונטי לכל מבנה:
באשר לבעיות 2 ו-3, חשבתי להיעזר במעט גיימיפיקציה (gamification).
כשהוא לא עסוק בלשלוט בממלכתו באצילות, המלך אוהב לשעשע עצמו עם קצת עמל כפיים פשוט ומזקק (של אחרים). הוא מורה לתת קבוצה כלשהי מארבעת משרתיו האישיים (שאינה קטנה מ-2) לאסוף 10,000,000 אבנים קטנטנות, כשכל אחד מארגן אותן בדרך אחרת. בזמן שהדרכים בהכרח שונות, ואף ידועות למלך, אין הוא יודע איזה משרת משתמש באיזו שיטה. משסיימו (עניין של שניות) והם עומדים לפניו מיוזעים, מבקש הוא מהם לבצע משימות שונות:
1) לזרוק את הראשונה שאספו
2) לומר מי האבן האמצעית - זו שאספו מספר שווה של אבנים (עד כדי 1) לפניה ואחריה
3) לחפש אבן מסוימת
המלך עוצם את עינים כשהם מבצעים את הפעולות כדי לא לדעת מי עובד באיזו שיטה, אך מתזמן אותם, ומהתזמונים מנסה לנחש מי עבד באיזו שיטה. אם הוא צודק הוא מנצח, ואם הוא טועה - המשרתים מפסידים.
התלמידים יבנו אם כן את משחק הניחושים הנ"ל (ששמו "זהה את המבנה"). כשיסיימו יהיה בפניהם משחק ניחושים מושכל - הוא יציג להם מספר משרתים (2 עד 4) עם מבני הנתונים בהם הם משתמשים, ועל פי התזמונים יצטרכו לנחש באיזה מבנה השתמש כל משרת.
בפרט, הם יתבקשו לממש לכל אחד מארבעת מבני הנתונים (מערך רגיל, LinkedList, ArrayList, HashSet) את ה-Facade הבא (והיות ושלושה מהם מממשים את Collection אפשר לעשות זאת גם במספר דרכים אלגנטיות יותר מארבעה מימושים שונים):
אגב גישת "מהתרגיל אחורה" של הפוסט הקודם: רק לאחר מימוש התרגיל נהיה ברור שכדאי להקדים את הלימוד של enums מפרק 7 לפרק 2, שם ישולבו ב-Java Stream.
Коментарі