האוניברסיטה העברית|בית הספר להנדסה ומדעי המחשב
“אני מתעד כל מני חרקים ורמשים אחרים שמגיעים אלינו הביתה או לגינה”, אומר פרופ’ פייטלסון. “לא יאמן עם איזה מגוון של מינים אנחנו חולקים את הבית”. הוא גר בבית הכרם, ירושלים.
בעידן הטכנולוגי של ימינו, אפשר רק לדמיין כמה שורות קוד מחשב כותבים מתכנתים מדי יום ברחבי העולם. אפשר לומר שללא שורות הקוד האלה כמעט שלא נוכל לתפקד. בלעדיהן, הכתבה שאתם קוראים כאן ועכשיו, לא היתה נכתבת בתוכנת מעבד תמלילים, לא היתה משוגרת לעורך באמצעות דוא”ל, לא היתה זוכה לתיקונים ב’עקוב אחרי שינויים’, ולא היתה מתפרסמת באתר ‘קול המדע’. העולם נשען כיום על קוד המחשב. וכל קוד מחשב תלוי באנשים שכותבים אותו. כאן עולה השאלה: איך מתכנתים ומפתחים ניגשים לכתיבת הקוד? האם הפעולה הזאת קלה עבורם? קשה? מהנה? מייסרת? מתסכלת? או מתגמלת? ואולי מעט מכל דבר? האם זה תלוי בכל אדם לגופו, ואולי בכל קוד לגופו?
על שאלות כאלה מנסה לענות פרופ’ דרור פייטלסון מבית הספר להנדסה ומדעי המחשב באוניברסיטה העברית בירושלים, שמחקריו מתמקדים בהשפעת הגורם האנושי על הנדסת תוכנה. “לדרך שבה אנשים חושבים ופועלים יש השפעה חזקה על התפתחות התוכנה, כך שחשוב להבין את ההיבטים הקוגנטיביים של הנדסת תוכנה”, אומר פרופ’פייטלסון. “אנשים אוהבים לכתוב קוד, אבל לא אוהבים לקרוא קוד. העניין הוא שכדי לכתוב קוד טוב אנשים חייבים לקרוא הרבה קוד. כתיבת קוד תמיד נעשית בהקשר לקוד קודם. מאוד נדיר שכותבי קוד מתחילים מדף ריק, בניגוד לסופרים ומשוררים. אצלם, לקחת טקסט קיים ולשנות אותו נחשב גניבה ספרותית, בכתיבת קוד זה הפוך – מאוד נדיר שאתה כותב משהו חדש לגמרי. האתגר הוא להיכנס לראש של מי שכתב כבר את הקוד, ולנסות להבין – ואז לשנות – את הקוד שהוא כתב”.
פרופ’ פייטלסון מנסה כבר שנים להבין איך עובד הראש של מתכנתים, ועושה זאת באמצעות סדרה של מחקרים. האחרון שבהם – “מדוע כה קשה להבין קוד מחשב?” – יצא לדרך בשנת 2018 בתמיכת הקרן הלאומית למדע ונמשך ארבע שנים.
במסגרת המחקר יצרו פרופ’ פייטלסון ועוזרי המחקר שלו דוגמיות קוד שמבודדות מבנים שונים של קוד מחשב, במטרה למדוד בקרב מתכנתים את מידת הקושי שלהם להבין אותם. למשל, האבחנה בין לולאת FOR ובין שאלת IF. “אפשר לכתוב שני קודים דומים, שיש להם את אותה הפונקציה והם ממלאים את אותה מטרה, אבל נבדלים בפקודות שלהם”.
המחקר של פרופ’ פייטלסון בדק איזה משני הקודים לוקח למתכנתים יותר זמן להבין. “התברר לנו שאת הגירסה עם לולאת ה-FOR לקח יותר זמן להבין, כנראה משום ש-FOR מחייב יותר עבודה קוגנטיבית וקשה יותר להבין אותו. אף מתכנת לא יפול מהכיסא אם תגיד לו ש-FOR יותר מורכב מ-IF, אבל לפי ממצאי המחקר, מידת הקושי להבין היא בערך פי שניים במקרה של FOR לעומת IF. כך ביססנו בדרך מדעית את מה שמתכנתים סברו בצורה אינטואיטיבית”. זאת היתה אבן בניין ראשונה במחקר, שנועדה להבין איזה קוד קל יותר להבין.
דוגמא נוספת היתה לבדוק האם יש הבדל בקריאת קוד בתלות בסדר שבו הקוד עובד. “לולאה היא קטע קוד שעושה את אותו הדבר עבור סדרה של אלמנטים, ובלולאת FOR ספציפית יש אינדקס שעובר על האלמנטים האלה, ויש להם סדר, והצורה הכי טבעית היא לעבור עליהם לפי הסדר. אבל יש מקרים שמכל מיני סיבות המפתח מעדיף לעבור עליהם בסדר ההפוך – להתחיל מהסוף ולסיים בהתחלה. שאלנו את עצמנו האם מהסוף להתחלה יותר קשה למתכנת להבין מאשר מההתחלה לסוף”. אפשר להמשיל את המקרה הזה לקורא עברית שמתבקש לקרוא משפט מהסוף להתחלה, או לבקש מילד לספור מ-17 עד 3, במקום מ-3 עד 17. “מבחינה אינטואיטיבית, לקרוא הפוך יותר קשה. וכך גם הוכח במחקר – מצאנו שקריאת קוד מהסוף להתחלה נמשכת 25% יותר זמן”.
המדענים בדקו לא רק את תוכן הקוד, אלא גם את ההקשר שבו הוא נקרא. “כשקוד מגיע אחרי קוד אחר דומה, קל יותר להבין אותו מאשר אם הוא ינתן לקורא בנפרד, לבד”, מסביר פרופ’ פייטלסון. הוא בדק זאת באמצעות מעקב עיניים. “כשאנשים קוראים קוד שמורכב מהרבה קטעים דומים, בחנו כמה זמן הם מסתכלים על כל אחד מהם, וראינו שלקריאת הקטעים הראשונים נדרש הרבה יותר זמן מאשר לאלה שבאים בהמשך – לקריאת כל קטע נוסף נדרש 40% פחות זמן”. כך, לדוגמה, נתן פרופ’ פייטלסון למשתתפים במחקר לקרוא קטע קוד של שמונה קטעים דומים אחד בזה אחר זה. “את הראשונים קראו לעומק ועל האחרונים כבר עברו ביעף, כי הם הבינו אותם הרבה יותר מהר”. המסקנה: קוד אינו עומד בפני עצמו. “כשרוצים לדעת אם קוד הוא קשה או קל, זו לא בהכרח השאלה החשובה. השאלה היא איזה קוד מגיע קודם”.
“ככל שחופרים יותר במחקר מוצאים יותר סיבוכים – לא פשוט רק למצוא את המשקלים, כל פעם מגלים עוד דברים שמשפיעים ומסבכים את הבעיה”, אומר פייטלסון. “המחקר הזה אמנם כבר בעיצומו, אבל אני יכול להמשיך אותו עוד שנים רבות”.