במאה ה-12 יצא לאור ספר לימוד חשוב שהוקדש ללמידה באמצעות קריאה. חיבר אותו הכומר הְיוּ ממנזר ויקטור הקדוש בפריז. הספר נקרא "דידאסקאליקון" ושימש כמה מאות שנים כספר לימוד בעשרות מכללות באירופה. הספר נפתח בהצהרה: "מכל הדברים שיש לשאוף אליהם, הראשון (במקור: "prima") הוא חוכמה". חוכמה יש ללמוד ואת החובה ללמוד הציג הכומר ה֧יוּ כיעד מוסרי אוניברסלי.
גם היום נוכל לטעון שחובת הלמידה היא חובה מוסרית אוניברסלית, בעיקר כשמדובר בלמידת לקחים. והנה, בתחום המתקדם ביותר והחדשני ביותר של תרבותנו, הלוא הוא תחום השימוש בכלים הדיגיטליים, בתוכנות המפליאות ובמכשירים המדהימים, לא נמצא ולו שמץ לנוהג כלשהו של למידה לצורך הבנה של תכונות הכלים ושל למידת לקחים. זה מתגלה בחינוך, בעשרות הפרויקטים עתירי התרועות לניצול חינוכי של "הטכנולוגיה הדיגיטלית", ומסתיים ביצרני התוכנות עצמם. אלו ואלו מסרבים ללמוד כדי להבין את מעשיהם, ואת הסירוב הזה כינה הכומר הְיוּ רשעות לב.
נניח לאותם עשרות פרויקטים של "חדשנות פדגוגית" שהונהגו במערכת החינוך בישראל זה עשרות שנים, שבאף אחד מהם לא נמצא סימן לבחינה ביקורתית של תוצאות של קודמיהם. נניח למכללות החינוך, שבהן המרצים מחייבים את התלמידים להתעלם ממחקרים בני יותר משנתיים. הפעם אתמקד באירוע מזעזע – התרסקות מטוס נוסעים (וכנראה בפעם השנייה) כתוצאה מפגם בתוכנה.
חברות התוכנה הרגילו אותנו לקבל תוכנות, אם בחינם ואם תמורת תשלום, ללא אחריות כלשהי על איכותן. הושפענו לכנות פגמי ייצור בתוכנה בשם "באגים", כאילו הם התעופפו ובאו מאי-שם וצנחו אל תוך המכשירים שלנו, ולא נוצרו בידי מי שתכנת אותם. חברות תוכנה מקדישות משאבים וכוח אדם לקיום טקס הנקרא "בקרת איכות", שאינו מספק לא בקרה ולא איכות.
לו היו יצרני התוכנות לומדים מדעי המחשב כראוי, הם היו יודעים שלא יכולים להיות קיימים אלגוריתם, שיטה או טכניקה לבדיקת פגמים בתוכנות. לו היו לומדים מעט לוגיקה, היו יודעים שבבדיקה נקודתית של תוכנות אפשר לגלות רק שגיאות שאנו נתקלים בהן במקרה. בדרך זו לעולם לא נדע אם התוכנה מכילה עוד פגמים שעדיין לא התגלו.
והנה התבשרנו שחברת "בואינג" עדכנה את התוכנה במטוסים המסוכנים שלה. האם בכל שבוע יעדכנו אותה, בדומה למערכת ההפעלה הפופולרית, מבלי שתהיה נקייה מפגמים? לו למדו המתכנתים מדעי המחשב כראוי, היו יודעים שיש הבדל עצום בין מחשבים (או תוכנות) ובין מכוניות. מכוניות אפשר לבדוק בנסיעות מבחן בודדות, בגלל האופי הרציף של חלקיהן. לתוכנות יש תכונות שונות לחלוטין.
אז מה אפשר לעשות? מסתבר שכבר כמה עשרות שנים הפתרון היה בידינו, אלא שמהנדסי התוכנה סירבו לקבלו בתירוצים שונים. אלן טיורינג, אחד ממניחי היסודות של מדעי החישובים, כתב מאמר בשנת 1950, והמאמר הפך פופולרי מאוד אך לא קראו אותו ביסודיות, או שפשוט התעלמו מהערות רבות שנכללות בו. במאמר הזה הוא טען במפורש שאם אנו רוצים להבין היטב מה זה מחשב, עלינו לחשוב עליו כפונקציה מתמטית. אבל אם אנו רוצים לדעת אם פונקציה מתמטית תמיד מספקת את הערכים הנכונים, אם אנו רוצים לבדוק אם הנוסחה מספקת את הסחורה היעודה, לא נוכל לבדוק אותה פה ושם, באמצעות חישובים בודדים, בייחוד אם אין הגבלה על ערכי המשתנים שלה והיא איננה רציפה. כלי הבדיקה היחידי והיעיל ביותר לגבי עצמים מתמטיים הוא הוכחה. אם רוצים לדעת שאין פגמים בנוסחה מתמטית, מוכיחים זאת. אם רוצים לדעת בוודאות שאין לתוכנה פגמים, מוכיחים שאין בה פגמים.
כבר לפני שנים רבות כתב אדזחר דייקסטרה, מגדולי מדעני החישובים במאה ה-20, כיצד הצעותיו לניהול אחראי של בנייה של תוכנה נתקלו ברתיעה, בזלזול ובחרדה. במאמר בסיסי שלו שנכתב בשנת 1989 (ראו: EWD1041) הוא ציין שכבר עשרים שנה קודם העדיפו העוסקים בבניית תוכנות שתחום עיסוקם יישאר כמות שהוא, וסירבו להשקיע בפיתוח גישה מדעית לפתרון איכות תוצרתם. הם העדיפו "אלכימיה" על פני "כימיה". הרי הם מקבלים שכר עבור בניית שדרוגים ועדכונים במשך זמן בלתי מוגבל, והם חששו – בצדק – שייפגעו מהפיכת העיסוק השלומיאלי שלהם בתוכנות לטכנולוגיה מבוססת מדע.
המאמר של דייקסטרה הנזכר לעיל מכיל פרטים מטרידים על ההתנגדות של מהנדסי תוכנה ושל מדעני חישובים לאפשר את פיתוח תחום התכנות לתחום המבוסס על חשיבה מדעית ועל לוגיקה מתקדמת. יחד עם זאת, ראוי לציין כי אחת הסיבות לדחיית ההצעה הזאת לשיפור האיכות של העיסוק בתוכנות, הייתה שבמקרים רבים משימת ההוכחה היא מעל ומעבר ליכולת האנושית – וכמובן במקרה זה איננו יכולים להיעזר במחשבים או בכל תוכנה שהיא. גם במתמטיקה הרגילה הוכחות פשוטות הן ההפתעה היוצאת מן הכלל. במאמרי "האם טיורינג טעה?" הצגתי את דבריו של מתמטיקאי גדול, שהתייחס לתוכנה פשוטה יחסית ואמר שהמתמטיקה הנוכחית איננה מסוגלת להתמודד עם עצמים כאלה. רבים ניסו להוכיח שהתוכנה הנזכרת במאמר ההוא תמיד מגיעה לערך 1, ולא הצליחו.
כמו בתיקון מערכות תעבורה ובהגנה מפני רעידות אדמה רבות עוצמה, גם בנושא התוכנה כנראה נצטרך לשלם דמים רבים עד שיתברר שכדאי להשקיע מאמצים בפיתוח מדעי החישוב כלוגיקה היישומית למערכות מורכבות. בינתיים צריך להתנהג בשום שכל ולא להאמין שאפשר לסמוך בעיניים עצומות על תוכנה אוטונומית ולקוות שיגיע היום ונדע לפתח את נושא התוכנה כראוי לתרבות מתקדמת.
20 תגובות
מדאיג ואפילו מפחיד.
לא התיאוטית הכללית. אני מחפש את המסקנה המעשית!
קשה לי להאמין שבין מפתחי המטוסים אין מדענים מהרמה הגבוהה ביותר בתחומים הנדרשים שהידע שלהם נופל מזה של כותב המאמר.
קל לי יותר להאמין, כפי שמרמזות הידיעות על חקירה פדרלית כנגד בואינג ורשויות התעופה בארה״ב, שעובדים בבואינג בעלי קשרים ניסו לקצר פינות בגלל התחרות עם אירבוס. מאות אנשים שילמו בחייהם בגלל עבריינים, נראה לי הגיוני לגמרי. לא קשור למדע כל שהוא או למדענים או לחוסר חשיבה מדעית. זו תוצאה של חשיבה עבריינית.
ישנם דברים הקשורים לתוכנה ששום מדענים ברמה הגבוהה ביותר לא יוכלו לבצע. למשל, שום רמה לא תעזור לחישוב שרשים של מספרים ראשוניים. בלתי ניתן לביצוע בתהליך חישובי. כך גם בדיקת שגיאות בתוכנה. היא בלתי אפשרית גם ללא חשיבה עבריינית.
החשיבה העבריינית היא להעמיד פנים כאילו משימת בקרת איכות של תוכנות ניתנת לביצוע בדרך שנוהגים לבצעה.
אם אני מבין אותך, אתה טוען שמאחר ואין אפשרות לפתור את כל הבעיות הקשורות במחשבי המטוס ב 100%, אז בכל טיסה מתקיים חשש לפיו אחד הפרמטרים הבלתי פתירים עד הסוף יפיל את המטוס?
1. זה לא חל רק על התוכנות במחשבים של מטוס. זה חל על כל התוכנות שלא טופלו נכון;
2. זה לא הכרחי, כי זה נובע מיחס פרימיטיבי אל התוכנות כאילו היו מכונות של עידן התעשייה.
3. לו העוסקים בייצור תוכנות היו מבינים את התכונות של כל התוכנות, היו דורשים מהמורים שלהם פתרון מקצועי ותקף לבעיית אמינות התוכנות;
ללא תיאוריה מבוססת היטב אין פתרונות מעשיים. ללא התגברות על המגבלות העקרוניות של התוכנות לא נוכל לסמוך על איכותן. וזאת מסקנה מעשית בפני עצמה.
החוק של התעופה האזרחית far 25.671 קובע מפורשות שהמטוס יוכל להמשיך בטיסה ובנחיתה בטוחה עם כל תקלה בודדת במערכות הבקרה וללא הסתמכות על כישורי טייס יוצאי דופן.
בואינג פישלה בגדול ורשות התעופה האמריקאית FAA פישלה בגדול, תקלה בודדת גרמה להתרסקות בשני המיקרים.
לא בטוח שעדכון התוכנה פותר את הבעיה.
היא הבעיה שנחשפת במאמר שלי. זה לא התוכנה אלא בני האדם המתיחסים אל תוכנות כאל דבר קדוש. במקביל נחשפת ההתנהגות העבריינית של יצרני התוכנה שאינם מבססים את איכות מוצריהם על שיטות אמינות ומרגילים אותנו לקבל אותם כמות-שהם מבלי שיטרחו לתקן את גישתם. לכן, גם עדכון התוכנה אינו יכול לפתור את הבעיה.
אמאל'ה
התכנון ההפעלה והמסקנות הם של בני האדם והם שקובעים את התוצאה
הוא הופיע באנגלית כשפירושו "יישום המדעים באומנויות השימושיות" וכך הוא מוצג ומיושם במוסדות הבכירים בעולם להוראה ולמחקר בטכנולוגיה. לכן מלמדים בהם את הסטודנטים מתמטיקה, פיסיקה ואלקטרוניקה.
ברחוב משתמשים במונח "טכנולוגיה" ככינוי מליצי לכלים. הפילוסופים (כמו ז'אק אלול ואחרים) ואנשי החינוך בחרו בדרך זו להשתמש במונח ובכך תרמו להתעלמות מן הגורם האנושי, המתכנן והמסיק מסקנות, שאכן קובע את התוצאה במידה רבה.
גשרים נופלים. כיפת ברזל מחטיאה. והרשימה אין סופית
להביא מנתחי מערכות טובים יותר. מתכנתים ברמה גבוהה יותר. בקרי איכות מנוסים יותר. וכן הלאה. אבל מכאן ועד לפילובופיה שקובעת שיש כאן בורות המרחק גדול.
מנתחי מערכות מוכשרים היטב בפיתוח מערכות מידע מנהליות (הנסמכות על בסיסי נתונים). הם לא יעזרו כל כך במניעת שגיאות מתוכנות המראה של מטוסים. מתכנתים צריכים ללמוד מתמטיקה מיוחדת ולדעת ליישם אותה כדי להפיק תוכנות חפות מפגמים. ובקרי האיכות צריכים להפסיק להתייחס אל תוכנות כאל מכוניות ולחדול מלהאמין שעל ידי נסיעות מבחן יוכלו להגן עלינו משגיאות של מתכנתים. נדרשת כאן קפיצת מדרגה שלא תושג על ידי "טובים יותר", "גבוהה יותר" או "מנוסים יותר". הלוגיקה של הכלים הדיגיטליים איננה פילוסופיה, גם אם איננה מוכרת לך.
לדעתך הכל מתחיל במתכנתים שהם מתמטיקאי צמרת
הדרך הבטוחה היחידה לפיתוח תוכנה ללא פגמים, היא בהכרה שכל תוכנה היא אובייקט מתמטי, ולא מערכת שניתנת לבדיקה על ידי נסיעות מבחן כמו מכונית.
אבל באותו יום מתו עשרות אלפי אנשים מרעב, עוני, מחלות, וכגומה בארצות מפגרות דוקא בגלל שאין להם טכנולוגיה (שלפעמים יש בה תקתות).
בארצות מפגרות מתים מרעב בגלל שאין להם מנהיגים יעילים ואמצעים למיגור הרעב – כמו מחרשות, קומביינים וממטרות. אין לזה קשר לטכנולוגיה הדיגיטלית. התקלות שיש בכלים הדיגיטליים אינם תקריות "לפעמים". יש כאן בעיה מהותית, שמוסתרת על-ידי מילים רחבות משמעות כמו "טכנולוגיה".
מה הדרך שאתה מציע?
אני מצטט ממה שכתבתי: "כדאי להשקיע מאמצים בפיתוח מדעי החישוב כלוגיקה היישומית למערכות מורכבות. בינתיים צריך להתנהג בשום שכל ולא להאמין שאפשר לסמוך בעיניים עצומות על תוכנה אוטונומית ולקוות שיגיע היום ונדע לפתח את נושא התוכנה כראוי לתרבות מתקדמת."
עלינו להכיר בעובדה עליה הצביע כבר טיורינג ב-1950, כי מחשבים ותוכנות הם פונקציות מתמטיות ובמתמטיקה חוקרים אובייקטים מתמטיים.
דייקסטרה, בקו הזה, הציע שכל מי שמגיש תוכנה חדשה שיצרף אליה הוכחות מתמטיות לנכונות של חלקיה. הוכחות ניתנות לבדיקה. תוכנות אינן ניתנות לבדיקה.
אם בונים תוכנות מורכבות מדי, צריך להשתמש בהן בזהירות רבה ולא לסמוך על נכונותן בעיניים עצומות.