AI ותכנות - האם בעתיד לא יזדקקו למתכנתים?
הרבה שנים מדברים על כך שבעתיד לא יזדקקו למתכנתים, אני שומע את זה כבר כעשרים שנה (כן קשה להאמין אבל אני מתכנת כבר 40 שנה).
עד כה, לא רק שלא ירד הצורך במתכנתים, הוא רק עלה.
אבל לאחרונה החל להכנס לחיינו מושג חדש ה AI ושוב יש הטוענים שה AI יעלים מספר מקצועות. במאמר זה נדבר על מקצוע אחד - התכנות, מאחר שאני עוסק בתחום אספר גם כיצד אני משתמש ב AI לתוכנות שלי והאם הוא חסך לי צורך במתכנתים (התשובה הקצרה - לא).
נתחיל בזה שה AI הוא בעצם תוכנה בפני עצמה, כך שצריך מתכנתים כדי לכתוב אותה. כאשר היא תיהיה מפותחת מספיק היא תוכל להתפתח לבד, אבל המצב הזה עדיין רחוק, אבל עם קצב ההתפתחות של זה, אני מעריך שתוך עשר שנים נראה כבר מנועי AI שיכולים לפתח את עצמם ואז לכאורה הם ייתרו את הצורך במתכנתים. אבל כמו עם מרבית הטכנולוגיות בעולם, הם לא ייתרו לחלוטין, הם פשוט ישנו את המקצוע, מתכנת כבר לא יעסוק בעבודה הפשוטה של כתיבת קוד, אלא יעסוק יותר בארכיטקטורה. כבר היום ראיתי שנפתחים קורסים למתכנתים ללמוד ארכיטקטורת תוכנה וזה כיוון חיובי. אני לא מכיר את תכנית הלימודים בקורסים הללו, אבל על פניו אני מעריך שטוב יעשה מתכנת שילך אליהם, כך הוא ישמור על עתידו במקצוע כאשר מקצוע זה ישתנה.
כיצד אפשר להשתמש היום ב AI לתכנות?
כיום כאשר ברצוננו לגשת לכתיבת תוכנה, עלינו להגדיר מה אנחנו רוצים, את ההגדרה הזו אפשר להזין למנוע AI כלשהו ולקבל חלקי קוד שאותם ניתן לחבר לתוכנה שלמה. שימו לב: כלי ה AI של היום, עדיין לא כותבים לכם את כל התוכנה.
אז מה שצריך זה לדעת להגדיר נכון את מה אנחנו צריכים, זה מקביל להעסקת מתכנת מתחיל ולהגדיר לו את המשימות, כמו בהעסקת מתכנת\ת ככל שתגדירו לו\לה יותר טוב את העבודה, כך תקבלו תוצאה טובה יותר ומהירה יותר.
את חלקי הקוד האלו אנחנו צריכים לחבר יחד ולבדוק. אף פעם אל תסמכו על אף כלי AI שיכתוב לכם תוכנה שלמה ועובדת.
מדוע אי אפשר לסמוך על הכלים האלו?
צריך לזכור שכלים אלו בעצם למדו מקריאת מליוני שורות קוד שכתבו אלפי מתכנתים, חלק מאותם אלפי מתכנתים הם טובים, אבל חלקם גרועים שלא הייתם רוצים להעסיקם.
יש עוד סיבה שצריך לזכור, סביבות התכנות של היום משתנות בקצב מהיר מאד וקוד שהיה נכון ללפני שנה, לפעמים לא יעבוד היום. ניקח לדוגמה את אנגולר, סביבת תכנות ותיקה, אני התחלתי ללמוד אותה בסביבות שנת 2019, אז הייתה מקובלת גרסה 9 היום אני עובד כבר עם גרסה 19. כאשר גרסה 18 שנתה לגמרי את המבנה ודברים שהיו נכונים עד גרסה 17, החל מגרסה 18 או לא יעבדו או יעבדו אחרת לחלוטין. הם פשוט שינו את מבנה התוכנה.
דוגמה נוספת עם סיפור אמיתי שהיה לי: אפליקציית הקריאה של חברת הליקון ספרים עושה שימוש בשירות שנקרא FCM (או Firebase Cloud Messaging) כאשר התחלנו להשתמש בשירות הוא עוד נקרא Google Cloud Messaging זהו שירות שמאפשר לשלוח הודעות לאפליקציה. הוא מאפשר לשלוח הודעות גם לאפליקציות אנדרואיד, גם לאפליקציות ווב (אנגולר) וגם לשלוח הודעות לשירות של אפל (Apple Push Notification) מאחר שהוא עובד עם כל הפלטפורמות שצריך, התחלנו לעבוד איתו. כאשר התחלנו לעבוד איתו, היה לו API פשוט מאד, עם הזמן הוא התפתח. לאחר כשנה הוא שינה את שמו ל FCM ואז ה API השתנה, לא שינוי מהותי אבל השתנה. לפני מספר שנים גוגל שלחו הודעה שבעוד כחדשיים ה API הישן בו השתמשנו יפסיק לחלוטין לעבוד ולכן אנחנו חייבים לשדרג את התוכנה שלנו לשימוש ב API החדש, שמאפשר הרבה יותר דברים ולכן מסובך הרבה יותר.
כאן החלטתי להשתמש בכלי AI לכתיבת הקוד. באותה תקופה הכרתי שני כלים האחד Chat GPT והשני כלי של גוגל שאז נקרא Bard (היום נקרא Gemini), בחרתי בכלי של גוגל כי הנחתי שהוא יכיר את התוכנות של גוגל וביקשתי ממנו לכתוב לי קוד לשליחת הודעות ל FCM. התוצאה שקיבלתי הייתה משהו בלתי אפשרי שלא רק שלא עובד, לא ניתן היה לקמפל אותו (להפוך לתוכנה ברת ביצוע). פניתי אליו שוב ואמרתי שזה לא עובד, הוא כמו מתכנת מנומס כתב "סליחה טעיתי, הנה הקוד החדש" הקוד החדש כבר היה משהו שאפשר לעבוד איתו, אלא מה, הוא עבד עם ה API הישן. בקיצור היה חסר תועלת. כך בזבזתי בערך חצי יום בשיחה עם הכלי הזה והאמת אם זה היה מתכנת בשר ודם הייתי כועס עליו ומפטר אותו...
אחרי חצי יום שהתחלתי כבר לכעוס עליו (הוא כמובן לעולם לא מאבד את מצב הרוח שלו ועונה בנימוס תמיד) החלטתי ללכת לדרך הישנה והידועה, לחפש שאלות בכלי הנקרא Stack Overflow. כצפוי, אני לא היחיד שנתקל בבעיות מסוג זה וכך תוך כשעתיים הצלחתי לכתוב את הקוד מחדש כך שיעשה שימוש ב API החדש, מאז ועד היום זה עובד.
כיצד אני משתמש היום ב AI לתכנות?
לפני כשנתיים קיבלתי פרסום לכלי שפותח ע"י github שהיום זה בעצם מיקרוסופט (נכון אני לא ממש חובב של החברה הזו אבל כאן הם עשו עבודה ממש טובה) הכלי נקרא CoPilot ולפי הפרסום הוא יכול לכתוב עבורינו קוד. ראיתי את סרטוני הדוגמה שלהם, קראתי על כך לא מעט אבל הייתי ספקן, לא חשבתי שזה יכול באמת להיות יעיל.
לאחרונה הם פרסמו שעכשיו הכלי חינמי עד לגבול מסויים (מספר השלמות קוד - נדבר על כך בהמשך). החלטתי לתת לזה צ'אנס ואם זה אכן טוב, נשלם להם.
רק ללמוד כיצד לחבר את זה לכלי התכנות שלי לקח כמה שעות, אבל זו הייתה השקעה משתלמת. תוך מספר שעות סביבת התכנות שלי הייתה מחוברת לכלי הזה.
התחלתי לכתוב קוד באנגולר (שפת TypeScript) ואז ראיתי שהכלי הזה שעובד ברקע, בעצם עובד כמתכנת (מתחיל יש לומר) שכאילו יושב לידי ומדי פעם לוקח את המקלדת וכותב בעצמו המשך לקוד שהתחלתי לכתוב, זה מה שהתכוונתי השלמת קוד. אני מתחיל לכתוב פונקציה, נותן לו שנייה והוא כותב לי (בצבע אחר, חלש יותר) הצעת קוד להמשך. אני יכול לקבל אותה, או לדחותה לחלוטין. בערך ב 50% מהמקרים הוא כתב משהו סביר והגיוני שהשתמשתי בו. ב 20%ּ מהמקרים הוא כתב משהו כמעט נכון, שקיבלתי אותו וקצת שיניתי. בשלב כלשהו קיבלתי הודעה שזהו, הגעתי למגבלה ואני צריך לשלם. כאן שילמתי ללא היסוס, זה שווה וחוסך לא מעט זמן.
עם הזמן הכלי הזה לא רק שנתן לי קוד טוב, הוא גם למד את סגנון התכנות שלי והקוד שלו יותר ויותר דומה לסגנון התכנות שלי. כך שהיום אני משתמש בו לא מעט.
אבל האם הוא מושלם? ממש לא ורחוק מזה. כאן נתן דוגמה ממש מהימים האחרונים, כאמור אני מתכנת היום עם גרסה 19 של אנגולר. רציתי להשתמש במודול חינמי כלשהו שהשתמשתי בו בעבר בגרסה 13 של אנגולר. יבוא של הקוד שהשתמשתי בתוכנה אחרת, לא רק שלא עבד, קיבלתי המון הודעות שגיאה. שאלתי את ה CoPilot כיצד אפשר לתקן את השגיאות האלו? התשובות היו כל כך לא נכונות ששוב אם זה היה מתכנת בשר ודם היה חוטף צעקות.
החלטתי ללכת לכלי AI אחר, הפעם Gemini של גוגל ומדוע בחרתי בו? כי אנגולר היא סביבה שגוגל פתחו והנחתי שכלי של גוגל יכיר אותה. גם כאן התשובות של Gemini שאמנם היו ברמה גבוהה יותר מאלו של CoPilot היו לא נכונות לחלוטין. כאן החלטתי להשתמש בכלי אחר שנקרא Perplexity.ai שמתהדר בזה שהוא בעצם מנוע חיפוש חכם, הוא מבין את השאלה שנכתבת באנגלית פשוטה ובניגוד לגוגל שנותן קישורים לאתרים, הוא מסביר מה לעשות ונותן סימוכין מהיכן הוא מצא את זה. כאן קיבלתי שוב תשובה לא נכונה, המשכתי לשאול אותו ולהסביר לו מדוע התשובה שקיבלתי אינה נכונה, הוא נתן תשובה אחרת שהפעם הייתה נכונה ובעצם למדה אותי משהו חדש על אנגולר 19 שעדיין לא ידעתי.
בקיצור כלי ה AI היום משמשים אותי מאד לכתיבת תוכנה וכיום אני כמעט לא מחפש בגוגל, ישר פונה לכלי ה AI.
האם AI יוכל לכתוב לנו תוכנה שלמה?
זו שאלת השאלות, כי אם כן, לכאורה הוא יחליף מתכנתים ואם כן, מדוע שאעסיק מתכנת שצריך לשלם לו פנסיה והוא מתעייף מדי פעם ויש לו מצבי רוח...
אז התשובה לכך היא כן. אבל לא בדיוק.
מדוע לא בדיוק? כי מישהו יצטרך לנהל את הדיאלוג איתו, לכתוב לו את הדרישות או במונחים של AI של היום, לכתוב לו את הפרומפטים (Prompts) אז כפי שכתבתי בתחילת המאמר, מקצוע התוכנה ישתנה, אבל לא יעלם, הוא יהפוך להיות ארכיטקט של תוכנה ופחות יכתוב קוד. הוא יצטרך לדעת לקרוא קוד ולהבין אותו. אבל ככל הנראה לא יצטרך לכתוב קוד ממש בעצמו.
מתי זה יהיה? - קשה לומר, אבל אסתכן בהערכה שזה בין 5 ל 10 שנים.
מה כל זה אומר על עולם התוכנה ומה צריך ללמוד מתכנת צעיר?
זה אומר דבר פשוט מאד, מתכנת של היום לא צריך להתמקד בלימוד שפה אחת או סביבת תכנות אחת, אחרת בעוד מספר שנים ימצא עצמו מובטל ויצטרך לחזור ללמוד.
מה כן צריך ללמוד? צריך להבין את העקרונות של תכנות, הם לא השתנו כבר 60 שנה. עד היום אני משתמש בעקרונות שלמדתי לפני 40 שנה וגם אז זה כבר היה ישן. איזו שפה למדתי לפני 40 שנה? היו הרבה שפות, אחת מאלו ששרדו היא שפת C. אז האם ללמוד שפת C או שפה אחרת שתשרוד את ה 40 שנה הבאות?
שוב התשובה היא כן ולא. כיצד נדע איזו שפה תשרוד? יש לי כמה ניחושים אבל אני לא נביא. צריך להבין כיצד השפה עובדת ואז לא ממש חשוב איזו שפה כותבים.
כאן יש לי עוד סיפור מהשירות הצבאי שלי. הייתה לנו מערכת גדולה שכל התוכנה בה נכתבה בשפה שנקראה PL/M, עוד אחת מהשפות שלא שרדה וכיום אף אחד לא מתכנת בה. הגיע איש מילואים (מתכנת ותיק, אבל שלא הכיר את השפה הזו) נתנו לו משימה לתכנת פונקציה חדשה באותה מערכת. עלי הוטל להסביר לו מה לעשות. לפני שהתחלתי להסביר לו אמרתי "אבל אתה תצטרך לתכנת את זה ב PL/M האם אתה יודע את השפה?"
התשובה הייתה "לא, אני לא יודע, אבל השפה היא רק סמנטיקה, אני יודע לתכנת ואני בטוח שאסתדר."
יש לזכור שהיו לו רק שבועיים ללמוד את כל השפה, להבין קוד קיים (של עשרות אלפי שורות) ולכתוב קוד חדש בשפת PL/M. האם הוא הצליח? - כן, הצליח בענק. זה הוכיח לי שמה שהוא אמר שהשפה היא רק סמנטיקה ועקרונות התכנות הם אותם עקרונות בכל השפות בעולם.
כאן עולה השאלה, כיצד נדע שמשהו מסויים הוא בעצם עקרון תכנותי ולא ספציפי לאותה שפה בה אנחנו עובדים? הדרך לדעת את זה היא ללמוד מספר שפות.
אז עכשיו אם מתכנת מתחיל שואל: איזו שפה ללמוד? התשובה היא ללמוד לפחות שלוש שפות אבל שונות אחת מהשנייה, לדוגמה שפת C ושפת PHP או JavaScript. אם נלמד JavaScript ו TypeScript זה לא ממש יעזור כי שתי השפות ממש דומות.
איזה שפות לא ללמוד? האם יש בכלל תשובה לזה? אישית אני חושב שהתשובה היא Python ומדוע אני אומר את זה? הרי זו שפה מאד פופולרית ובעיקר בתחום ה AI אז מדוע אני אומר לא ללמוד אותה, לפחות לא כשפה ראשונה?
התשובה היא פשוטה, שפת פייטון עובדת שונה לגמרי מכל שפה אחרת ולמרות שהעקרונות דומים, יקח לנו הרבה יותר זמן להבין את הדמיון ובכך נבזבז זמן רב יותר בהגעה לאותה מטרה שהיא הבנת עקרונות התכנות.
על שפת פייטון ומדוע איני אוהב אותה אפשר לכתוב עוד מאמר שלם שאולי אכתוב בעתיד.
מקווה שנהניתם לקרוא את המאמר הזה. (לא השתמשתי בכלי AI לכתיבתו).
במאמרים הבאים אסביר כיצד אני משתמש בכלי AI למשימות כמו כתיבה (כולל כתיבת עלילה) ומשימות גרפיות (פשוטות יחסית, אני לא מעצב).