הפשטה כמושג מרכזי בהוראת מדעי המחשב: סקר ספרות

האם אנו באמת מלמדים הפשטה?

פ. בוצ'י, ת.ג'. לונג, ב.ג'. ווייד

Bucci, P., Long, T. J., Weide, B. J. (2001). Do we really teach abstraction? Proceedings of the 31th SIGCSE Technical Symposium on CS Education, 26-30.  

 

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

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

 

תקציר

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

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

 

מבוא

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

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

 

הצגה מסורתית של רשימות

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

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

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

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

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

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

 

הצגה משופרת של רשימות

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

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

לדוגמה, רשימה נתונה:   <1,4,7,8> , <5,3,4> 

כתוצאה מהוספת האיבר 2 במקום הנוכחי תתקבל הרשימה:  <2,1,4,7,8> , <5,3,4>  .

 

התיאור הפורמלי המופשט נעשה בשפה   RESOLVE באמצעות מידול מתמטי של רשימה והפעולות המוגדרות עליה

( Bucci, et al., 2001, p. 28 )

 

concept List_Template (type Item)

type List is modeled by

(left: string of Item,

right: string of Item)

exemplar s

 

initialization ensures

|s.left| = 0 and |s.right| = 0

 

operation Insert (updates s: List,

clears x: Item)

ensures s.left = #s.left and

s.right = <#x> * #s.right

 

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

 

מחקר

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

 

חזרה לעמוד הראשי