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

הוראת הפשטה באופן מפורש

ה. קופלמן

Koppelman, H. (2001). Teaching abstraction explicitly. Proceedings of the 6th Annual SIGCSE Conference on Innovation and Technology in Computer Science Education, 191 (poster).

 

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

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

 

תקציר

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

 

דוגמה

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

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

 

הצעת פתרון שכיחה של סטודנטים – רמת הפשטה אחת

( Koppelman, 2001, p. 191 )

WHILE there are more words AND NOT word found containing string

.......

examine next word of the array

.......

WHILE there are more characters AND NOT string found

.......                                        

examine next characters of the word

......

 

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

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

 

סכמה של הצעת פתרון מומלצת – שתי רמות הפשטה

( Koppelman, 2001, p. 191 )

......

WHILE there are more words AND NOT WordFound

...... 

                WordFound := ContainsString(NextWord)

......

 

מתחילים אינם משתמשים בעקרון ההפשטה באופן טבעי

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

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

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

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

 

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