שגיאות מושגיות בלתי תלויות בשפת תכנות של מתכנתים מתחילים

ר. ד. פי

R.D. Pea (1986). Language-independent conceptual “bugs” in novice programming, Journal of Educational Computing Research, Vol. 2:1, 25-36.

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

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

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

אודות המאמר

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

 

רשימת מושגים

w אגוצנטריותEgocentrism        

w התכוונותIntentionality

w מקביליותParallelism

 

המחקר

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

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

טיפוסי שגיאות

Pea מבחין בין שלושה טיפוסי שגיאות שאינן תלויות בשפת תכנות: (1) מקביליות (parallelism) - ביצוע מקבילי ובסדר כלשהו, במקום ביצוע סדרתי של משפטי התכנית. (2) התכוונות (intentionality) - ייחוס כוונות למחשב ופרשנות משלו למה שהמתכנת כתב, לאו דווקא תואמת לכוונת המתכנת. (3) אגוצנטריות  (egocentrism) - ציפייה מהמחשב להבין ולהסיק כדוגמת בן אנוש, את כוונת המתכנת, ומעבר למה שכתוב מפורשות. הוא תולה את השגיאות בתפיסה מוטעית אותה הוא מכנה "סופרבאג" (superbug)  - ייחוס יכולות למחשב מעבר לאלו שיש לו במציאות.

מקביליות

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

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

לדוגמא, תלמידים שנשאלו מה הפלט של קטע התכנית הבא, ענו שהמילה Hello תוצג כפלט כאשר המשתנה Size יקבל את הערך 10.

if Size = 10 then

Write('Hello');

:

:

for Size = 1 to 10 do

write('Size');

 

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

 

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

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

Area = Height * Width;

read(Height);

read(Width);

write(Area);

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

התכוונות

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

אגוצנטריות

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

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

repeat

    read(X);

    X = X + X;

until X + X > 100;

write(Area);

 

מסקנות

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

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

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

חזרה לאתר