מאיפה בא השם
״באג״ באנגלית פירושו חרק. מהנדסים השתמשו במילה הזאת לתקלות במכונות עוד לפני שהיו מחשבים, כבר במאה ה־19. אבל יש סיפור מפורסם: ב־9 בספטמבר 1947, באוניברסיטת הרווארד בארצות הברית, צוות שעבד על מחשב ענק בשם מארק 2 מצא עש — פרפר לילה — תקוע באחד הממסרים של המכונה. הם הדביקו את העש ביומן העבודה וכתבו לידו, בהומור, שזה ״המקרה הראשון של באג אמיתי שנמצא״.
הסיפור מקושר לגרייס הופר, מתכנתת וקצינה בצי האמריקני, שהייתה חלק מהצוות ואהבה לספר אותו. היא לא המציאה את המילה, ויש ויכוח אם היא זו שמצאה את העש, אבל בזכותה הסיפור התפרסם. דף היומן עם העש שמור עד היום במוזיאון בוושינגטון.
שלושה סוגי באגים
הסוג הראשון הוא שגיאת תחביר — טעות ב״דקדוק״ של שפת התכנות: מירכאה חסרה, סוגריים שלא נסגרו, נקודתיים ששכחנו. המחשב לא מצליח אפילו להבין את הקוד ומסרב להריץ אותו. למשל, print("שלום) — חסרה מירכאה בסוף. החדשות הטובות: המחשב מוצא את הבאגים האלה בעצמו ומראה איפה הם.
הסוג השני הוא שגיאה בזמן ריצה: הקוד כתוב נכון, אבל משהו משתבש תוך כדי — למשל חלוקה באפס, או שימוש במשתנה שעוד לא נוצר. התוכנית מתחילה לרוץ ונעצרת באמצע. הסוג השלישי, והערמומי ביותר, הוא שגיאה לוגית: התוכנית רצה עד הסוף בלי שום הודעה, אבל עושה משהו אחר ממה שרצינו. למשל, כתבנו score = score - 1 במקום פלוס, והניקוד יורד כשאוספים מטבע. המחשב לא יגלה את זה לבד, כי מבחינתו הכול תקין.
קוראים את הודעת השגיאה
מתחילים רבים נבהלים מהודעות שגיאה אדומות, אבל הן בעצם רמזים שהמחשב משאיר לבלש. הודעה טיפוסית בפייתון אומרת באיזו שורה הייתה הבעיה ומה סוג הבעיה. SyntaxError פירושו שגיאת תחביר. NameError פירושו שהשתמשנו בשם שהמחשב לא מכיר — אולי טעות כתיב, כמו Print באות גדולה במקום print. ZeroDivisionError פירושו ניסיון לחלק באפס.
הכלל הראשון: קוראים את ההודעה עד הסוף, לאט. הכלל השני: הולכים לשורה שהיא מציינת — ולפעמים גם לשורה שלפניה, כי לפעמים הטעות האמיתית (למשל סוגריים שלא נסגרו) נמצאת קצת קודם. הכלל השלישי: מתקנים דבר אחד בכל פעם ומריצים שוב, כדי לדעת מה עזר.
ארגז הכלים של הבלש
יש כמה שיטות דיבאג שכל מתכנת משתמש בהן. הדפסות: מוסיפים print במקומות שונים כדי לראות מה הערך של משתנה בכל שלב, ומגלים איפה הוא ״מתקלקל״. מעקב: עוברים על הקוד בראש או על דף, שורה אחרי שורה. חלוקה: מכבים חצי מהקוד ובודקים אם הבאג עדיין שם — וכך מצמצמים את החיפוש. יש גם כלים מיוחדים שמריצים את התוכנית לאט, שורה אחרי שורה.
ויש שיטה מפורסמת עם שם מצחיק: ״דיבאג ברווז גומי״. מסבירים את הקוד, שורה אחרי שורה, לברווז גומי (או לחבר, או לכלב). הרבה פעמים, באמצע ההסבר, שומעים את עצמנו אומרים משהו כמו ״ופה אני מוסיף אחד… רגע, למה אני מוסיף פה?״ — ומוצאים את הבאג. והכי חשוב: סבלנות. כל באג שמצאתם מלמד אתכם משהו, ועם הזמן תזהו באגים מהר יותר.

