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

מה עצם העניין הפרוצדורלי?

צעדים ראשונים בהוראת מדעי המחשב – בחירת פרדיגמה ושפה

הוכן ע"י אגוזה וסרמן ואביטל בוקובזה

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

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

 

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

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

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

1. פרדיגמה של תכנות פרוצדורלי –ממומשת על ידי שפות כמו פסקל, בייסיק, פורטרן, C ועוד;

2. פרדיגמת תכנות מונחה עצמים- ממומשת על ידי שפות כמו Java ,C#   ועוד;

המאמר ידון בשתי הסוגיות הבאות:

1. באיזו פרדיגמת תיכנות יש ללמד תלמידים כפרדיגמה ראשונה?

2. באיזו שפה יש לבחור מתוך הפרדיגמה?

 

1.         באיזו פרדיגמת תיכנות יש ללמד סטודנטים כפרדיגמה ראשונה?

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

Burton & Bruhn  (2003) מציגים  שלוש גישות מרכזיות  הרווחות בעולם בנושא זה:

1. הגישה הראשונה טוענת שהפרדיגמה שצריכה להילמד בהתחלה היא הפרוצדורלית (כמו  Java Script), וביסוס הפרדיגמה הפרוצדורלית בסביבה ויזואלית יכולה להיות בשפת Visual Basic. היתרון בלימוד בדרך זו הוא שהתלמידים נחשפים לראשונה במושגים הבסיסים בתכנות לפני שהם נחשפים לפרדיגמת ה -OOP שבה קיימים מושגים מופשטים יותר. 

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

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

 

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

 בכדי להסביר את הטענה הנ"ל Burton & Bruhn (2003) מעלים  מספר נקודות:

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

ב) OOP דורשת יכולת חשיבה מופשט, וכדי להגיע לרמה זו נדרש זמן רב של לימוד (כ- 3 שנים).

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

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

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

 

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

אנו מצטרפות, מניסיוננו, לדעתם של החוקרים (Burton & Bruhn, 2003,  2002, BeCker,Gibbons,1998) שהפרדיגמה הראשונה צריכה להיות תכנות פרוצדורלי ולאחר מכן תכנות מונחה עצמים, ולא לערבב ביניהם.

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

 

2.         באיזו שפה יש לבחור מתוך הפרדיגמה?

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

מטרות לימוד שפה ראשונה לסטודנט של מדעי המחשב  על-פי Becker (2002)

1. סביבה לימודית תומכת המעודדת תכנות מובנה;

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

3. הערות ברורות בקומפלציה של התוכנית;

4. השפה "צריכה" לכלול את הנושאים המרכזיים בתיכנות הבסיסי כמו: מצביעים, פרוצדורות, קבצים I/O , הגדרת טיפוסים, רקורסיה ועוד;

5. השפה "צריכה" להיות בעלת מבנה תחבירי פשוט;

6. השפה "צריכה" לעודד את הנושאים המרכזים שאנו רוצים ללמד;

 

שפת Pascal עונה על קרטריונים אלו כי:

1. את כל התחביר ב Pascal ניתן לכתוב ב 2 עמודים דבר המצביע על פשטות התחביר;

2. סטנדרט ה -  Pascal קבוע בכל מחשב ומחשב.

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

3. המשמעות של הטעויות ב – Pascal יותר משמעותית מאשר C .

 

Becker (2002) מציג את הגישות הרווחות השוללות את Pascal ואת הטענות שלו כנגד.

טענות נגד Pascal

טענות בעד Pascal

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

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

2.  תחביר השפה ב – Pascal שונה מ C, ++C או Java

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

3. Pascal נראית כמו הליכה לאחור

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

4.  הרבה מהשפות הפופלריות התחביר שלהם דומה ל –  ++C יותר מאשר Pascal

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

5. סטודנטים לא ילמדו C בשנה הראשונה

5. סטודנטים ילמדו בכל מקרה Java  ו – עם ניסיון בשני שפות אלו לא יהיה להם קשה ללמוד C

6. שפות רבות זה מבלבל

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

 

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

 

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

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

 

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

 

מקורות

Becker Katrin, “Back to Pascal: Retro but not backwards”, Department of Computer Science, University Drive NW Calgary, Alberta Canada T2N1N4 , 2002.

Bergin, Joseph, “Why Procedural is the Wrong First Paradigm if OOP is the Goal".

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

Gibbons Jeremy; “Structured programming in Java”, School of Computing and Mathematical Science, Selected Papers from the Java in the Computing Curriculum Conference, V. 33(4), april, 1998

Burton, P.J., Bruhn R.E., “Teaching Programming in the OOP Era”, Department of Information Science, The SIGCSE Bulletin, V. 35 (2), June 2003

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