הערות נכתבות בשביל בני אדם.

// GetUser retrieves a user by ID from the database.
func GetUser(id string) (*User, error) {

ההערה הזו מועילה כשבן אדם קורא אותה. אבל כשמכונה קוראת אותה, היא לא מבינה דבר. היא לא יודעת אם “retrieves” זה Read או Search. היא לא יודעת איזו ישות היא “user”. היא לא יודעת אם הפונקציה הזו עוקבת אחרי תבנית Service או Repository.

כי ההערה היא סיפור.


כשיש 10,000 פונקציות

כשיש 10 פונקציות, אין בעיה. בן אדם יכול לקרוא הכול.

כשיש 10,000 פונקציות, זה שונה. כשאומרים “תראה לי את כל הפונקציות שקשורות לתשלום”, גם בן אדם לא מוצא וגם מכונה לא מוצאת. מוצאים רק את אלה שיש להן “payment” בשם. אם זה לא בשם, מפספסים.

כשסוכן AI מתקן קוד, אותו דבר. אם אומרים ל-Claude Code “תתקן את הטיפול בשגיאת PaymentFailed”, הסוכן קורא מחדש את כל הקוד. כל פעם. הוא מנתח 10,000 פונקציות מההתחלה, כל פעם. קוד שנקרא אתמול נקרא שוב היום. גם עם הערות, אותו דבר. כי ההערות הן סיפורים לבני אדם. כדי שמכונה תחלץ משמעות מסיפור, היא צריכה הסקה. זה יקר.


כשההערה היא אינדקס

// CreateOrder processes a new order creation.
//
// # Pattern: Service, Transactional
// # Entity: Order
// # Action: Create
// # Input: CreateOrderRequest {items:[]Item, userID:string}
//          pre: items>0 userID!=''
// # Output: *OrderResponse, error
//          errs: [StockInsufficient, PaymentFailed]
// # Deps: InventorySvc, PaymentGateway
func (s *OrderService) CreateOrder(req CreateOrderRequest) (*OrderResponse, error) {

ההערה הזו קריאה גם לבני אדם וגם למכונות.

“כל הפונקציות בתבנית Service” — חיפוש בשדה Pattern. מיידי. “כל הפונקציות שקשורות לישות Order” — חיפוש בשדה Entity. מיידי. “פונקציות שמייצרות PaymentFailed” — חיפוש בשדה errs. מיידי.

סריקה מלאה הופכת לחיפוש באינדקס. O(n) הופך ל-O(1).


בני אדם לא צריכים לכתוב

אין צורך שבן אדם ייצור את האינדקס הזה.

כשקוד משתנה, הזיהוי אוטומטי. מעקב אחר קבצים. הפונקציה שהשתנתה מבודדת באמצעות AST. מכני. גוף הפונקציה מועבר ל-LLM קטן. “קבע את התבנית, הישות והפעולה של הפונקציה הזו.” התוצאה מוכנסת בפורמט קבוע מראש. מכני.

בן אדם לא עושה כלום. מספיק לכתוב קוד. האינדקס מתעדכן אוטומטית.

בכל הצינור, ה-LLM מתערב בנקודה אחת בלבד — לשפוט את המשמעות של הפונקציה. כל השאר הוא קוד דטרמיניסטי לחלוטין.


מהסקה לכלל

כאן מתקדמים עוד צעד.

כש-LLM קטן מקצה שוב ושוב את אותו אינדקס לאותה תבנית — מזהים את החזרה. אם “Service suffix עם receiver method נותן Pattern:Service” חזר על עצמו 100 פעמים, מגבשים אותו לכלל. מכאן ואילך לא קוראים ל-LLM. הכלל מטפל.

קריאות ל-LLM הולכות ויורדות. כללים הולכים ועולים. העלות מתכנסת לאפס.

הערות עוברות מסיפור לאינדקס, אינדקס עובר מידני לאוטומטי, אוטומטי עובר מהסקה לכלל.


למה זה אפשרי: תבניות עיצוב כקודבוק

יש סיבה שזה עובד.

בתכנות כבר קיים אוצר מילים סמנטי מתוקנן. תבניות העיצוב.

Singleton, Factory, Observer, MVC, Service. מאז ש-GoF סידרו 23 תבניות ב-1994, תעשיית התוכנה הרחיבה ותיקננה את אוצר המילים הזה במשך 30 שנה.

23 תבניות GoF. Enterprise Application Patterns. Cloud Design Patterns. Go Concurrency Patterns. הכול כבר מסודר.

אוצר המילים הזה אינו עמום. Singleton זה Singleton. מפתחים לא מפרשים אותו אחרת. ההגדרה מוסכמת, תנאי המימוש ברורים, והפרות נתפסות בסקירת קוד.

מערכת אוצר המילים הזו הופכת לקודבוק של האינדקס. אין צורך ליצור חדש. הוא כבר קיים.

לשפה טבעית אין את זה. ל"גדול" יש הגדרה במילון, אבל כל אדם משתמש בה אחרת. בקוד, Service לא משמש אחרת אצל מפתחים שונים.


למה קוד הוא התחום הקל ביותר

צינור ההקשר של GEUL — הבהרה, אינדוקס, אימות, סינון, עקביות, חקירה — קשה ליישם על שפה טבעית. ליישם על קוד קל.

הבהרה: שפה טבעית עמומה. קוד — אם הקומפיילר העביר אותו — המשמעות שלו קבועה. אינדוקס: ישויות בשפה טבעית דורשות הקשר. ישויות בקוד כבר פורסו על ידי AST. אימות: תוקף של שפה טבעית לא ניתן להגדרה. תוקף של קוד נקבע על ידי הקומפיילר. סינון: רלוונטיות בשפה טבעית דורשת שיפוט של LLM. רלוונטיות בקוד ניתנת לקביעה מכנית דרך גרף הקריאות. עקביות: סתירות בשפה טבעית מתגלות רק דרך הסקה. סתירות בקוד נתפסות על ידי מערכת הטיפוסים והבדיקות. חקירה: ידע בשפה טבעית הוא שטוח. לקוד כבר יש מבנה היררכי: חבילה → קובץ → טיפוס → מתודה.

אותו צינור עובד בתחום הקוד בעלות נמוכה בהרבה. להוכיח קודם במקום הקל ביותר, ואז להרחיב למקום הקשה יותר. זו הנדסה.


סיכום

הערות נועדו במקור לבני אדם. עכשיו הן צריכות להיות גם למכונות. הערות שבני אדם יכולים לקרוא ומכונות יכולות לחפש. הערות שהן גם סיפור וגם אינדקס.

לקוד כבר יש משמעות, כבר יש מבנה, כבר יש אוצר מילים. מה שחסר הוא רק האינדקס. ההערה צריכה להפוך לאינדקס הזה.