מלוח מחיק למנוע אילוצים - איך בנינו מערכת שעות אוטומטית, ולמה התחום עדיין תקוע
רכז מערכת שעות מחזיק בראש כ-400 אילוצים בו-זמנית ולא רואה איזה שניים מהם סותרים. זה סיפור על ההבדל בין בעיית סבלנות לבעיית סתירות - ועל הסיבה המבנית שבגללה בתי ספר עדיין בונים מערכות בטבלה ידנית.
לפני שבניתי תוכנה, הייתי מורה. ובאוגוסט, כמו כל בית ספר בישראל, ישבתי מול לוח מחיק וניסיתי לשבץ 60 מורים ל-24 כיתות בלי שאף שניים מהם יתנגשו.
לקח לי שלושה שבועות. ביום שהמערכת הייתה מוכנה, מורה אחת הודיעה שהיא לא יכולה ביום שלישי - ומתחיל סיבוב שני.
זה לא קרה כי לא הייתי מספיק טוב בזה. זה קרה כי בן אדם לא מסוגל להחזיק בראש 400 אילוצים בו-זמנית ולראות איזה שניים מהם סותרים. מחשב כן. וזה כל הסיפור.
כשהתחלתי לבנות את המנוע, הנחתי שהתחום כבר פתור - בתי ספר בונים מערכות שעות כבר עשרות שנים, אז בטח יש כלים מעולים. מה שמצאתי היה שונה, ובסוף הכתבה אסביר למה זה לא במקרה.
למה זו לא בעיה של סבלנות
זו הטעות שכולם עושים כשהם חושבים על מערכת שעות: מניחים שהקושי הוא בכמות העבודה. שאם רק תשקיעו עוד יום, עוד לוח, עוד צבע טוש - זה יסתדר.
זה לא נכון. הקושי האמיתי הוא קומבינטורי: כל שיבוץ אחד משפיע על כל שאר האפשרויות שנשארות פתוחות. כשמורה מלמדת שלוש כיתות, שלוש שכבות, ויש לה גם יום לימודים באוניברסיטה - כל החלטה לגביה סוגרת ופותחת עשרות אפשרויות אחרות בו-זמנית, בלי שרואים את זה על הלוח.
זו בדיוק הסיבה שבניית מערכת שעות ידנית תמיד מרגישה "כמעט גמורה" ואז נשברת בפרט קטן. האדם שבונה אותה לא רואה את הרשת המלאה של ההשלכות - הוא רואה שורה אחת בכל פעם.
שני סוגי כישלון, ורק אחד מהם באמת כישלון
בבנייה של המנוע גילינו הבחנה שהפתיעה אותנו: יש הבדל בין "אין פתרון עדיין" לבין "אין פתרון אפשרי".
- אין פתרון עדיין - האילוצים בסדר, פשוט לא מצאנו את הסידור הנכון. זה מה שקורה לרכז מערכת אנושי כל הזמן, וזה נפתר בעוד ניסיון.
- אין פתרון אפשרי - שני אילוצים סותרים זה את זה במפורש. לדוגמה: "אין אנגלית ברביעי שנייה בכל בית הספר" ביחד עם "המורה הזו מלמדת את הכיתה הזו בשני שעה ראשונה בלבד, ואין לה שעות פנויות אחרות" - אם שני הכללים האלה מתנגשים בכיתה אחת, שום סידור לא יפתור את זה. הבעיה לא בחיפוש, היא בהגדרה.
ההבדל הזה הוא-הוא מה שהפך אותנו מ"תוכנה שמסדרת" ל"כלי שאפשר לסמוך עליו". מנוע שמחזיר "שגיאה" כשאין פתרון הוא לא שימושי במיוחד - הוא רק חוזר על מה שהרכז כבר ידע: שזה לא עובד. מנוע שמסביר אילו שני כללים ספציפיים סותרים, ומה אפשר לשנות כדי לפתור את זה, הוא כלי אחר לגמרי.
ההשוואה: לוח מחיק מול מנוע אילוצים
| לוח מחיק / טבלה ידנית | מנוע אילוצים אוטומטי | |
|---|---|---|
| שיקול דעת פדגוגי | קיים — הרכז מכיר את המורים ואת הכיתות ⭐ | אין. המנוע לא יודע שמורה וכיתה לא מסתדרים |
| טיפול בחריג אנושי | מיידי. "תעשה לה טובה, היא בהיריון" ⭐ | דורש ניסוח מחדש כאילוץ פורמלי |
| שליטה בתוצאה | מלאה, שורה-שורה ⭐ | הפתרון מוחזר כמכלול; משנים אילוץ, לא תא |
| עקומת למידה | כמעט אפס — זו טבלה ⭐ | צריך ללמוד לחשוב באילוצים, וזו קפיצה מושגית |
| תלות בספק | אין. הקובץ אצלכם ⭐ | המערכת חיה אצל מישהו אחר |
| כשמשהו משתבש ב-1 בספטמבר | פותחים את הטבלה ומתקנים תא ⭐ | צריך להבין למה המנוע החזיר את מה שהחזיר |
| זמן בנייה ראשונית | שבועות, בסבבים חוזרים | דקות עד שעות ⭐ |
| טיפול בבקשת שינוי | בדיקה ידנית מול כל שאר השיבוץ | בדיקה מקדימה לפני שהשינוי נכנס ⭐ |
| זיהוי סתירה | מתגלה בדרך כלל אחרי שהמערכת "מוכנה", או בכלל לא | נבדקת מול כל 400 האילוצים בכל שינוי ⭐ |
| מה קורה כשאין פתרון | מגלים בטעות, כשמישהו מתלונן | מוסבר: אילו כללים סותרים ומה אפשר לשנות ⭐ |
שש השורות הראשונות הן החולשה האמיתית של המנוע, ולא כדאי להתחמק מהן. רכז מערכת מנוסה מחזיק ידע שאי אפשר לכתוב כאילוץ — מי צריך יום קצר אחרי טיפול, איזו מורה לא תשרוד שתי שכבות ברצף, ואיזה צמד כיתות עדיף להפריד. המנוע לא יודע כלום מזה, ולא יידע. ומעבר לזה: הבחירה בטבלה ידנית אינה בורות, היא ניהול סיכונים. ספק שנעלם באוגוסט משאיר בית ספר בלי מערכת שעות; קובץ אקסל לא נעלם.
לכן זה לא "מנוע במקום רכז" אלא "מנוע מתחת לרכז": הוא לוקח את החלק שאין בו החלטה — הבדיקה — ומשאיר את החלק שיש בו. השורה האחרונה היא ההבדל האמיתי, והוא לא מהירות אלא מתי מתגלה הבעיה: בשיטה הידנית מגלים סתירה כשמורה לא מגיעה לכיתה.
אז למה התחום עדיין נראה כמו שנות ה-90
עכשיו אפשר לחזור לשאלה שפתחתי בה. הרבה מהכלים הנפוצים עדיין מבוססים על הזנת נתונים ידנית לתוך טבלה, בלי שכבת "פתרון אילוצים" אמיתית מתחתיה. זה לא כי אף אחד לא חשב על זה. זו תוצאה של איך שהתחום הזה בנוי, ויש לזה שלוש סיבות מבניות - אף אחת מהן היא לא "חוסר יכולת טכנית":
1. עלות טעות גבוהה מדי בזמן הלא נכון. מערכת שעות נבנית באוגוסט, ונכנסת לשימוש ב-1 בספטמבר. אם משהו נשבר, זה קורה ביום הראשון של השנה, מול מאות תלמידים ועשרות מורים. זה לא סביבה שמזמינה ניסויים - כל בית ספר בוחר יציבות מוכחת על פני חדשנות לא מוכחת, וזו בחירה הגיונית.
2. עלות המעבר גבוהה מהתועלת הנראית לעין. רכז מערכת שכבר יודע להפעיל כלי מסוים, גם אם הוא מסורבל, לא ירוויח הרבה מלמידה מחדש של כלי אחר - במיוחד אם הבעיה שהכלי הישן לא פותר לא ברורה עד שמנסים לפתור אותה אחרת.
3. מחזורי רכש ארוכים. מוסדות חינוך לא מחליפים מערכות תוכנה כל שנה. החלטה כזו נעשית לעיתים רחוקות, ולוקח זמן עד שהיא בכלל עולה לדיון.
זה לא אומר שהגישה הישנה גרועה - היא בדיוק מה שהתחום דרש כשהיא נבנתה. זה אומר שיש פער אמיתי בין מה שאפשרי היום טכנית, לבין מה שבפועל נמצא בשימוש - ושהפער הזה לא ייסגר מעצמו, כי אין לחץ שוק מספיק חזק לזה. מי שמציע כלי חדש בתחום הזה חייב לענות על הזהירות הזאת, ולא להתייחס אליה כאל התנגדות שצריך לעקוף.
מה זה לא פותר, ובכוונה
בנינו את המנוע כדי לפתור בעיית סתירות, לא כדי להחליף שיקול דעת פדגוגי. הוא לא יודע שכדאי לתת מתמטיקה בשעה ראשונה, ולא יודע שמורה מסוימת וכיתה מסוימת לא מסתדרים. זה נשאר אצל בן אדם, במכוון - כי זה בדיוק סוג הידע שלא ניתן לכתוב כאילוץ פורמלי.
מה שהמנוע כן עושה זה לשחרר את הרכז מהחלק שבאמת אין בו החלטה - רק בדיקה. וזה החלק שלקח שלושה שבועות.
הפתרון, בסופו של דבר, לא היה "לשכנע" בתי ספר לקחת סיכון. הוא היה לבנות כלי שמוריד את הסיכון עצמו: כזה שמסביר בעברית פשוטה למה סתירה קיימת, לפני שהיא הופכת לבעיה בשטח. זה לא מבטל את הזהירות שמוצדקת בתחום הזה - זה עונה עליה.
שאלות נפוצות
צריך להבין אלגוריתמים כדי להשתמש בזה?
לא. הקלט הוא האילוצים עצמם, בעברית פשוטה - מי מלמד מה, אילו כללים חייבים להתקיים. המנוע עושה את החיפוש הקומבינטורי מאחורי הקלעים. אם המערכת לא מסתדרת, מקבלים הסבר בעברית, לא הודעת שגיאה טכנית.
מה קורה אם באמת יש סתירה בין שני כללים שהזנתי?
המנוע לא מחזיר "שגיאה" סתמית. הוא מצביע על שני הכללים הספציפיים שמתנגשים, כדי שתדעו בדיוק מה לשנות - במקום לגלות את זה בטעות אחרי שהמערכת כבר תלויה בחדר מורים.
המערכת מתחברת למנב"ס או למערכות אחרות של משרד החינוך?
לא כרגע. אין ייבוא אוטומטי וסנכרון - מזינים או מייבאים קובץ. זו בניית המערכת השנתית, לא ניהול שוטף של נוכחות או מילוי מקום.
אם זו בעיה ידועה, למה אף אחד לא פתר אותה קודם?
יש כלים שבאמת פותרים אילוצים, אבל הם בדרך כלל יקרים ומכוונים למוסדות גדולים. הפער הוא בעיקר בבתי ספר בגודל בינוני-קטן, שלא תמיד יש להם תקציב או הצדקה לכלי ארגוני מלא - ושם גם ההשקעה בפתרון קטנה יותר, כי השוק פחות מרוכז.
זה אומר שהרכזים הקיימים לא עושים עבודה טובה?
ההפך הגמור. רכז מערכת שמצליח לבנות מערכת עובדת בכלים ידניים עושה עבודה קשה בהרבה ממה שמנוע אוטומטי צריך לעשות - כי הוא עושה בראש את מה שהמנוע עושה בזיכרון. הבעיה היא בכלים, לא באנשים שמפעילים אותם.
המנוע שמתואר כאן הוא מערכת בקליק. הוא עדיין לא פתוח לכולם — מי שרוצה לנסות אותו על מערכת אמיתית מוזמן להצטרף לתוכנית הבודקים.