CodeMonkey, טוב למתכנתים צעירים?

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

הקישור ל-Codemonkey באתר "אופק יסודי"
הקישור ל-Codemonkey באתר "אופק יסודי"

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

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

חלק ממסך היישום, עם הקוף ועם קוד ראשוני שהמשתמש אמור לתקן
חלק ממסך היישום, עם הקוף ועם קוד ראשוני שהמשתמש אמור לתקן

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

1. מה באמת לומדים מזה?

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

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

2. "קל קצת יותר"? זה הכול?

הייתי שמח להעניק ל-30 השלבים הראשונים של CodeMonkey יותר קרדיט, אלמלא דבר אחד שתפס את תשומת לבי: הפקודה TurnTo; וזה עניין טכני-תיאורטי, אז ראו הוזהרתם.

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

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

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

3. שפת התכנות

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

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

Monkey.Step 10
2.times ->

הראשונה אמורה להיות ברורה למתכנת הטיפוסי: יש אובייקט בשם Monkey, יש לו מתודה בשם Step, והיא מקבלת את הפרמטר 10. אבל אם כך, מה לכל הרוחות אומרת השורה השנייה? איך ייתכן אובייקט בשם 2? איזה מין פרמטר זה "<-"? היישום CodeMonkey מלמד אותנו שזו פתיחה של לולאה שרצה פעמיים, אבל אין במבנה הזה שום היגיון. הוא שרירותי לגמרי. זו תופעת לוואי בלתי נמנעת, כנראה, של הבחירה ב-CoffeeScript, ועדיין חבל שבמקום להתעסק נטו בלוגיקה של התכנות, הילדים צריכים לשנן כל מיני מבנים משונים כאלה, שסביר להניח שלא ישרתו אותם בעתיד.

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

4. הנחיות

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

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

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

5. העיקר שלומדים

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

להרשמה
הודע לי על
14 Comments
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

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

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

לא צריך טריגונומטריה. ממבט חטוף ב- codemonkey (גם לי יש ילדים בגיל המתאים) הבננות ממוקמות על גריד כלשהו, כך שניתן להגיע אליהן עם מספר צעדים שלם בכוון אופקי פלוס מספר צעדים שלם בכוון האנכי. הערות נוספות למאמר: 1. סגנון הכתיבה times.2 (הסדר כמובן הפוך אבל נסה לכתוב את זה בהערות…) לקוח מ- ruby, שם הכל הוא אובייקט, כולל קבועים מספריים. times היא מתודה של ה integer type. https://ruby-doc.org/core-2.2.2/Integer.html#method-i-times 2. למיטב ידיעתי, פתרון במספר שורות מינימלי הוא לא תנאי מעבר אלא תנאי לקבלת 3 כוכבים (כמו ב angry birds) ולא בהכרח חוסם מעבר לשלב הבא. 3. נכון להיום המערכת פתוחה למיטב… לקרוא עוד »

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

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

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

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

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

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

בקיצר עוד דוגמה לכך שהם שכחו שצריך ללמד את הילד בדרך ולא רק לתת לו חידות…

מדליק !
אתה מכיר את scratch ? http://www.scratch.org.il/