אני מתכנת גרוע. לפעמים אני זקוק לקוד שיעשה דברים ואז אני צריך להיזכר במה ששכחתי מהפעם האחרונה שתיכנתתי. וחוזר חלילה.
זו הסיבה שמאד שמחתי כשגיליתי שיש מכונה שאפשר לבקש ממנה קוד והיא תכתוב אותו בשביל.
אבל, וזה אבל גדול, וזו הסיבה לפוסט הזה, המכונה הזו לא ממש טובה ולפעמים היא מעצבנת.
קודם כל, צריך לזכור את המהות של המכונות האלה. מודלים גדולים של שפה (LLM) עונים על השאלה "איך תיראה תשובה סבירה לשאלה שלי?". לא נכונה, לא אמיתית, לא קוד עובד. משהו שנראה סביר.
ברגע שמבינים את המגבלה הזו של המכונה, אפשר להתחיל להשתמש בה ולא להתעצבן. היו יותר מדי רגעים ששכחתי ואז התעצבנתי.
שיר גרנות פלד כתב נכון: אם אני צריך לאפיין את המשימות שצ׳טג׳יפיטי מתאים להן במשפט אחד אז הוא יהיה: ״משימות שיקח לי הרבה זמן לעשות, ומעט זמן לבדוק את התוצאה שלהן״.
למכונות האלה יש עוד מגבלות שעשויות קצת להפחית את ההתלהבות מהן.
המכונות לא קוראות מחשבות. כדי לקבל מהן קוד שיעשה את מה שאתם צריכים, צריך לאפיין להן בדיוק מה התוכנה תעשה. לא ברמה של שמות משתמשים אבל ברמה של איזה קלט או קלטים הקוד יקבל ובאיזה פורמט, מה העיבוד שצריך לעשות עליו ואיך ייראה הפלט.
המכונה לא תריץ את הקוד ותראה בעצמה את הבעיות שבו. המכונה לא תבדוק את עצמה. אם יש הודעות שגיאה, צריך לחזור, לתת לה את הקוד ואת הודעת השגיאה ואז אולי היא תיתן פתרון. אתמול המכונה נתנה לי קוד שנראה סביר אבל הוציא לי הודעת שגיאה בריצה. החזרתי למכונה את הודעת השגיאה והקוד והיא נתנה לי פתרון לא נכון. נאבקתי עם זה הרבה יותר מדי זמן. ואז גיגלתי בעצמי. המכונה כתבה לי קוד ששני החלקים שלו לא מתחברים. בחלק הראשון היא הפיקה מערך רב מימדי ובחלק השני היא כתבה לי קוד שיכול לעבוד רק עם מערכים חד מימדיים. לא היה לה שום מושג שזה מה שהיא עושה. ברגע שמצאתי את מקור הבעיה, ביקשתי ממנה "כתבי לי קוד שישווה בין שני מערכים רב מימדיים" והיא נתנה לי את הקוד. אני מזכיר "תשובה שנראית סבירה".
המכונה לא תמיד תפתור את הבעיה שהיא יצרה. היה לי קוד שהוציא פלט לא נכון. הרמתי ידיים אחרי חמישה סיבובים של "זו התוצאה, אבל אני ביקשתי תוצאה אחרת" שבהם המכונה ענתה "סליחה, הנה הקוד המתוקן", כולל חזרה על קוד שהיא כבר נתנה לי. בסוף ביקשתי ממנה "קחי את הפלט הזה והפכי אותו לפלט שנראה ככה" וזה עבד.
לסיכום. כדי ממש להיעזר ב ChatGPT כדי לתכנת, צריך לדעת לתכנת. אחרת אי אפשר לאפיין את הבעיה, לאפיין את הדרך לפתרון, לבדוק את התוצאה ולתכנת את מה שהמכונה לא מצליחה לתכנת בעצמה.