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