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

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

הכרות עם עקרונות תכנותיים בסביבה מוסיקלית

ד"ר דלית לוי
המחלקה להוראת הטכנולוגיה והמדעים, טכניון

dality@tx.technion.ac.il

 
מבוא

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

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

 

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

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

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

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

מקור אחר, הוא מאמרו של קנוט (Knuth) [2] הבוחן את מיקומו של מקצוע מדעי-המחשב על הרצף המקובל שבין תחומי דעת "אמנותיים" לתחומי-דעת "מדעיים". קנוט טוען כי ניתן להתייחס למדעי-המחשב כאל אמנות, ולא רק כאל מדע. אם אכן תופסים את מדעי-המחשב כאמנות, ניתן להשוותו למקצועות אמנותיים אחרים, כמו למשל, למוסיקה, ואף למצוא קווי דמיון.

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

 

מקרה 1: הכרות עם מושג התכנית

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

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

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

   ·   ההוראה  sound

הוראה זו גורמת למחשב להשמיע צליל בתדירות מסוימת (גובה). למשל, ההוראה sound  440     משמיעה את הצליל  "לה".

   ·   ההוראה  nosound

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

   ·   ההוראה  delay

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

 

התכנית הפשוטה ביותר שאפשר לכתוב בעזרת שלוש הוראות אלה, היא הבאה:

program Simple_Music;

begin

   sound  (440);

   delay (50);

   nosound

end.

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

אפשר לרשום את התכנית גם כך[1]:

program Simple_Music;

begin

   sound  (440);  delay (50); nosound

end.

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

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

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

program Several_Notes;

begin

   sound  (440);  delay (50); nosound;

   sound  (480);  delay (50); nosound;

   sound  (520);  delay (50); nosound

end.

 

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

 

מכאן ואילך הדרכים פתוחות להמשך, ונציין כמה אפשרויות:

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

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

program Simple_Music;

const length=100;

begin

   sound  (440);

   delay (length);

   nosound

end.

 

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

 

3.            שימוש בהוראת חזרה.

אפשר לחזור על אותו צליל מספר פעמים, לחזור על קטע מוסיקלי (פזמון חוזר), או להשמיע סולם עולה / יורד:

 

program Loop_Song;

var base : integer;

begin

   for base:=1 to 5 do

   begin

          sound  (440*base);

          delay (500);

          nosound

   end

end.

 

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

 

חסרונות

   ·   לא כל האנשים אוהבים מוסיקה ויש גם אנשים עם בעיות שמיעה.

   ·   כאשר פועלים במעבדה 10-15 מחשבים ועל כל אחד מהם מושמעת מוסיקה אחרת, התוצאה הסופית יכולה להיות צורמת (כמו תזמורת שמתכוננת לקונצרט, בשלב כיוון הכלים).

 

מקרה 2: יישום העקרון של הבנייה ושימוש בשיטה של עידון הדרגתי

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

program Jonatan;

begin

   sound  (223);  delay (50); nosound; delay (50);

   sound  (264);  delay (50); nosound; delay (50);

   sound  (264);  delay (100); nosound; delay (50);

   sound  (239);  delay (50); nosound; delay (50);

   sound  (200);  delay (50); nosound; delay (50);

   sound  (200);  delay (100); nosound; delay (50);

   ...

   ...

end.

 

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

למד יונתן

    צליל 392 4     { סול באורך 4 יחידות זמן }

    צליל 330 4     { מי באורך 4 יחידות זמן }

    צליל 330 8     { מי באורך 8 יחידות זמן }

    צליל 349 4     { פה }

    צליל 294 4     { רה }

    צליל 294 8     { רה }

    צליל 262 4     { דו }

    צליל 294 4     { רה }

    צליל 330 4     { מי }

    צליל 349 4     { פה }

    צליל 392 4     { סול }

    צליל 392 4     { סול }

    צליל 392 8     { סול }

    ....

    ....

סוף

 

כאן מופיע רק חלקו הראשון של השיר (בערך רבע מהשיר). נקל לשער איך תראה התכנית כולה: ארוכה, לא מובנית, קשה לקריאה ולפענוח, וקשה לאתר בה טעויות.

 

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

למד פה2

   צליל 349 8

סוף

 

למד פה1

   צליל 349 4

סוף

 

למד סול2      

   צליל 392 8

סוף

 

למד סול1

   צליל 392 4

סוף

 

 

הפרוצדורה סול1 מנגנת סול באורך רבע, סול2 מנגנת סול באורך חצי (2 רבעים).

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

 

למד יונתן

     סול1  מי1  מי2

     פה1  רה1  רה2

     דו1  רה1  מי1  פה1 

     סול1  סול1  סול2

     ...

     ...

סוף

 

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

 

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

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

 

הנה, לדוגמה, התוצאה של דיון מוסיקלי כזה במבנה השיר "יונתן הקטן":

 

א

א'

ב

א'

 

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

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

 

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

 

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

 

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

 

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

 

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

 

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

178

דו נמוך

200

רה

223

מי

239

פה

264

סול

298

לה

331

סי

355

דו גבוה

 

דוגמאות של תכניות "יונתן"

דוגמה שלישית

דוגמה שנייה
דוגמה ראשונה

program Jonathan;

.......

procedure bar1 (tempo:integer);

begin

   sol (tempo*2);

   pause (tempo*2);

   me (tempo*2);

   pause (tempo*2);

   me (tempo*4);

   pause (tempo*4);

end;

procedure stanza1 (r:integer);

begin

   bar1 (r);

   bar2 (r);

   bar3 (r);

   bar4 (r);

   bar1 (r);

   bar2 (r);

   bar5 (r);

end;

begin

   stanza1 (50);

   stanza2 (50);

end.

 

program Jonathan;

.......

procedure tav (gova, orech : integer);

begin

  sound (gova);  delay (orech);

end;

procedure sh;

begin

  nosound;  delay (100);

end;

procedure firstline;

begin

  tav (sol,reva); sh;

  tav (me,reva); sh;

  tav (me,reva*2); sh;

  tav (fa,reva); sh;

  tav (re,reva); sh;

  tav (re,reva*2); sh;

end;

procedure bayit1;

begin

  firstline; secondline;

  firstline; thirdline;

end;

begin

  bayit1;

  nosound; delay (reva);

  bayit2;

end.

program Jonathan;

uses crt;

.......

procedure yonatan;

begin

   writeln ('yonatan');

   sol (2); me (2);

   pause (100);

   me (4);

end;

procedure hakatan;

begin

   writeln ('hakatan');

   fa (2); re (2);

   pause (100);

   re (4);

end;

.......

.......

begin

    yonatan;

    hakatan;

    raz_baboker_el_hagan;

end.

 

מקורות

[1]   Hofstadter D. R., (1980). Godel, Escher, Bach: an eternal golden braid, Vintage Books, New York.

[2]   Knuth, D. E. (1987). Computer Programming as an Art. In Ashenhurst, R.L., Graham, S. (eds.) ACM Turing Award Lectures, The First Twenty Years. ACM Press. pp. 33-46.

 

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

 

 

אתר הבטים

תוכן לפי נושאים

תוכן לפי גליונות

תוכן דצמבר 95

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

 



[1]  הערה:  כדי להפעיל את ההוראות המוסיקליות, יש להוסיף מיד לאחר כותרת התכנית    USES CRT;