החומר המופיע בעמוד זה פורסם לראשונה בכתב העת "הבטים בהוראת מדעי המחשב" גליון יוני 2004, עמודים 30-38

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

תכנות מונחה עצמים עם תחילת המאה ה- 21

סקירת ספרות, חלק ראשון

עפרה ברנדס

האוניברסיטה העברית, ירושלים

brandes@cc.huji.ac.il

 

פתח דבר

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

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

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

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

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

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

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

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

 

מבוא

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

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

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

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

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

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

 

בחזית היישומית במדעי המחשב עומדת בשנים האחרונות פרדיגמת התכנות מונחה העצמים (Object Oriented Programming).

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

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

 

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

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

 

תכנות פרוצדורלי3

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

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

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

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

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

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

 

תכנות מונחה עצמים

השלב הבא בהפשטה היה, שבהנתן בעייה תכנותית המגדירה מערכת כלשהי, תפורק המערכת לישויות המשתתפות בתהליך. כל ישות שכזו, נקראה עצם (object), והיא איגדה בתוכה את התכונות (attributes) המאפיינות אותה וערכיהן, עם התהליכים האפשריים על ערכים אלו (methods). בצורת חלוקה זו של מערכת, יחידת החלוקה הבסיסית אינה תהליך, אלא אוסף תהליכים שמכיל העצם, עם ערכיו. עצמים מסוג מסוים הם מופעים (instances) של תבנית בסיסית המגדירה את מהותו האבסטרקטית של העצם. תבנית זו נקראת מחלקה (class). בין מחלקות קיימת היררכיה הנקראת ירושה (inheritance) והיא מאפשרת בניית מחלקות ספציפיות על סמך מחלקות קיימות ושימוש מתוחכם בסוגי טיפוסים שונים, הנקרא רב-צורניות (polymorphism).

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

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

 

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

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

 

איזו פרדיגמה תחילה?

הצגנו שתי פרדיגמות תכנותיות שונות.

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

האם יש עדיפות באיזו פרדיגמה להתחיל את הוראת מדעי המחשב?

האם יש הכרעה מקובלת ומוסכמת בדבר עדיפות זו?

האם התחלה בפרדיגמה כלשהי היא בעלת השפעה על לימוד הפרדיגמה האחרת? ואיזו השפעה?

והאם קביעת הפרדיגמה מושפעת ממטרת ההוראה, ולמטרות שונות יתאימו פרדיגמות שונות?

 

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

 

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

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

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

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

ברגין מגדיר את עיקר המהות בגישת התכנות הפרוצדורלי, באופן בו היא ניגשת לפתרון בעיות. עיצוב הפתרון נעשה בגישת ה-Top-Down Design. בהנתן בעייה יש לחלק אותה לתת-משימות (וחוזר חלילה), עד למצב בו לכל תת-משימה ניתן להציע פתרון. בהנתן הפתרונות החלקיים לכל תתי-המשימות, נפתרת ממילא בעיית המוצא.

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

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

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

 

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

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

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

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

 

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

 

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

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

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

 

מתוך מחקר נוסף15 הוא מדווח על קשיים שונים שיש בהוראת תמ"ע לתלמידים השולטים בגישה הפרוצדורלית:

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

במהלך זמן לימוד זה יכתבו התלמידים תוכניות "מכוערות" בהן יבוא לידי ביטוי ערבוב של הגישות השונות.

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

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

 

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

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

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

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

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

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

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

 

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

 

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

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

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

 

האם הגישה הזו מוחלטת?

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

 

מקורות

1.Computing Curricula 2001 Computer Science/ Final Report December 15, 2001  ACM Journal of Educational and Resources in Computing, Vol. 1, No. 3, Fall 2001  (240 p.)

2.Bergin, J.(2000).Why Procedural is the Wrong First Paradigm if OOP is the Goal. Presented at OOPSLA99 educator's symposium.

http://csis.pace.edu/~bergin/papers/Whynotproceduralfirst.html

3.Decker, R., Hirshfield, S. (1994). The Top 10 Reasons Why Object-Oriented  Programming Can't Be Taught in CS1. Selected papers of the 25th annual SIGCSE symposium on CSE, March 1994 SIGCSE Bulletin, Vol.26, No.1 , 51-55.

4.Gal-Ezer, J., Beeri, C., Harel, D., Yehudai, A.(1995). A high School Program in Computer Science. COMPUTER – Innovative  technology for computer professionals, October 1995, 73-80.

5.Gibbons, J.(1998) Structured Programming in Java, SIGPLAN Notices, Vol. 33, No.4.

6.Lattanzi, M., Henry, S.(1996) Teaching the Object-Oriented Paradigm and Software Reuse Computer Science Education, Vol.7, No.1, 99.

7.Stroustrup, B. (1994) The Design and Evolution of C++, Addison Wesley.

8.Wiedenbeck, S., Ramalingam, V., Sarasamma, S., Corritore, C.L. (1998).

9.A Comparison of the comprehension of object-oriented and procedural programs by novice programmers, Interacting with Computers 11 (1999) 255-282.

 

מקורות בעברית

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

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

12.   אתר הפיקוח על מדעי המחשב וטכנולוגיות מידע:    http://www.csit.org.il/main/menu.asp

 

הערות למאמר:

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

2. מיוצגת בשדה החינוך בעיקר על ידי Java, C++.

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

4. תכנות מונחה עצמים יקרא להלן כך, או תמ"ע, או OOP, לחילופין ובאופן חד ערכי.

5. "דעת יחיד" שמצאתי עד כה, היוצאת חוצץ נגד הוראת תכנות מונחה עצמים ב-C++ לתלמידים יודעי C, היא של ברגין, וארחיב על כך בהמשך.

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

7. גיבונס [5], כמייצג דעה של רבים אחרים.

8. בעבודה זו ייצג אותם ברגין [2].

9. מקור [3].

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

11. Niklaus Wirth ממציאה של שפת פסקל ושפות פרוצדורליות נוספות, טען ש-"אלגוריתם+נתונים = תוכנית".

12. דיעה זו באה לידי ביטוי גם בתכנית הקרויה CC2001.

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

14. מקור [7].

15. מקור [6].

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

17. HyperCard; HyperTalk

18. לקוח מתוך קורס המועבר באוניברסיטה הפתוחה באנגליה.

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

 

חזרה לתחילת העמוד

גליון יוני 2004

אתר הבטים

אתר המרכז הארצי