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

ר. סמורסיי

R. SAMURçAY (1989). The concept of variable in programming: its meaning and use in problem-solving by novice programmers, In Studying the Novice Programmer, E., Soloway, J.C., Spohrer (ed.), Lawrence Erlbaum Associates, Publishers, New Jersey, 161-178.

התקציר המצורף נערך ע"י ד"ר ברוריה הברמן

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

הוצאת "מחשבה" – מרכז המורים הארצי למדעי המחשב, 2001. עמודים 8-12

אודות המאמר

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

 

רשימת מושגים

w איתחול – Initialzation

w בדיקה – Test

w העברה –       Transfer

w ידע תכנותי – Programming knowledge

w מונה – Counter

w מערכת ייצוג ועיבוד – RPS-Representation and Processing System

w משתנה חיצוני – External variable

w משתנה פנימי – Internal variable           

w עדכון – Update

w פתרון בעיות – Problem solving

w צובר – Accumulator

w תבניות – Plans

w תכונה יחסית נשמרת – Invariant inter-relations                                  

 

לימוד תכנות

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

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

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

הנחת היסוד היא שהידע התכנותי צריך להיתמך על ידי מערכת ייצוג ועיבוד (RPS- Representation and Processing System). הלומד אמור לבנות לעצמו תוך כדי התנסות, ייצוג מנטלי RPS של הידע התכנותי מאורגן במבנה הירארכי של תבניות (plans) המשמשות אותו לפתרון בעיות.

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

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

דגשים בהוראת מושג המשתנה

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

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

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

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

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

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

 

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

 

תיאור המחקר

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

אוכלוסית המחקר

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

המחקר נערך בתום 15 שעות לימוד, לאחר לימוד של: משתנים, פעולות על משתנים, ולולאות.

השיטה

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

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

א) משימות איתחול

השאלון כלל שלוש משימות איתחול. התלמידים היו צריכים לזהות את המשתנים ואת ערכם ההתחלתי. המשימות היו:

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

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

(3) משימה המשלבת פעולות איתחול ופעולות עדכון.

ב) משימות בקרה

השאלון כלל שתי משימות בקרה:

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

 (2) שימוש במשתנה בקרה – מונה "רגיל" (גדל ב-1). כדי לפתור בעיה זו, התלמיד יכול היה להשתמש במודל אנלוגי של  פתרון נתון לבעיה דומה.

ג) משימות עדכון

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

ממצאים

ניתוח עבודות התלמידים העלה את הממצאים הבאים:

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

תפיסה מוטעית לגבי איתחול מונים היא ש"אין צורך לאתחל מונה (counter) כי ברור שמניה מתחילה מ- 0".

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

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

קשיים הנובעים מהעברה מתחום המתמטיקה:

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

(2) התייחסות לסימן ההשמה: תלמידים נוטים להתייחס לסימן השמה כאל סימן השוויון (כיחס הלקוח מתחום המתמטיקה).

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

 

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

סיכום ומסקנות

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

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

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

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

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

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

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

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

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

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

 

חזרה לאתר