הבלוג של ינון פרק

טיפים קצרים וחדשות למתכנתים

מה זה אומר "יודע לתכנת"

05/02/2026

ראיתי את המשפט הזה באיזו פרסומת:

בעולם שבו Copilot, Cursor ו-Claude Code כותבים קוד טוב יותר מרוב האנשים, הכוח כבר לא אצל מי שיודע לתכנת אלא אצל מי שיודע איך לגרום ל-AI לפתח עבורו.

שלחתי אותו ל ChatGPT כדי שיסביר מה זה אומר וקיבלתי את סט המיומנויות הבא שלטענת ChatGPT משקף את המיומנויות הכי קריטיות למתכנתים:

  1. להבין מה הבעיה האמיתית (ולא מה שנכתב בטיקט)
  2. לפרק רעיון עמום ל-spec חד ובר־בדיקה
  3. לבחור פשרות נכונות: ביצועים מול פשטות, מהירות מול חוב טכני
  4. לזהות מתי הפתרון “נראה עובד” אבל מסוכן בקנה מידה (הוא התכוון לכתוב פה Scale, אני לא בטוח שהתרגום "קנה מידה" מדויק בהקשר הזה)
  5. ולחבר קוד למוצר, לביזנס, ולמשתמשים אמיתיים

אני חותם על כל מילה פה, רק שימו לב מה אין בה - אין בה MCP, אין Tools, אין Context Engineer, אין Prompt Enginnering, אין Agent Skills, אין בחירת מודלים ואפילו לא איך עובד מודל שפה גדול. מסתבר שבעולם ה"חדש" הדברים שאנחנו צריכים בשביל לשרוד הם אותם הדברים שהיינו צריכים בעולם הישן.

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

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

מימוש Add To Chat ב vim

04/02/2026

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

  1. לתת לסוכן שליטה מלאה, מתחילים במצב תכנון, מדברים על התוכנית ועוברים לממש. אני עובר על הקוד עם git status ו git diff אחרי שהכל מומש והבדיקות עברו.

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

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

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

  1. מתוך neovim פותחים split, בצד אחד מפעילים terminal ובצד השני הקוד.

  2. בתוך ה terminal מפעילים את קלוד קוד או קופיילוט או קודקס.

הממשק של הסוכן כבר כולל מנגנון לבחירת קבצים אם לוחצים @ מתוך הפרומפט אבל גם לקרסר וגם ל VS Code יש עוד כפתור בו אני משתמש המון שנקרא Add To Chat, כלומר מסמנים קוד בעורך לוחצים Add To Chat וזה מוסיף את קטע הקוד לשיחה עם הסוכן. מסתבר שבכלל לא מסובך לממש את זה ב neovim. זה הקוד שרשמתי בתוך init.vim:

lua << EOF

-- Define the function globally (or locally if you prefer)
function SendContextToTerminal()
    -- 1. Get the current buffer info and selection marks
    -- Note: When triggered via ":" command from visual mode, visual mode exits
    -- automatically, populating the '< and '> marks.
    local filepath = vim.fn.expand('%:.') -- Relative path to CWD
    local start_line = vim.fn.line("'<")
    local end_line = vim.fn.line("'>")

    -- Format: path/to/file:40-59
    local context_string = string.format("%s:%d-%d ", filepath, start_line, end_line)

    -- 2. Find the terminal split
    local term_chan = nil
    local term_win = nil

    -- Iterate over all open windows to find a terminal
    for _, win in ipairs(vim.api.nvim_list_wins()) do
        local buf = vim.api.nvim_win_get_buf(win)
        if vim.bo[buf].buftype == 'terminal' then
            term_chan = vim.bo[buf].channel
            term_win = win
            break
        end
    end

    if not term_chan then
        vim.notify("No terminal split found.", vim.log.levels.WARN)
        return
    end

    -- 3. Send text to the terminal
    vim.api.nvim_chan_send(term_chan, context_string)

    -- 4. Switch to terminal window and enter Insert mode
    vim.api.nvim_set_current_win(term_win)
    vim.cmd('startinsert')
end

-- Create a user command so you can type :SendContext
vim.api.nvim_create_user_command('SendContext', SendContextToTerminal, {})

-- Set a keybinding for Visual Mode
-- We use :<C-u> to clear the range usually inserted by visual mode, 
-- then call the lua function. The : command naturally exits visual mode, setting the marks.
vim.keymap.set("v", "<leader>ai", ":<C-u>lua SendContextToTerminal()<CR>", { silent = true, desc = "Send selection context to terminal" })

EOF

הפונקציה מחפשת את הקוד המסומן, מחפשת את ה terminal ושולחת את שם הקובץ ומספרי השורה לסוכן קידוד שרץ במסוף. הגדרתי גם קיצור מקלדת שקל לזכור leader ואז ai.

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

מחשבות על העתיד של לימודי התכנות

03/02/2026

האם העתיד של לימודי תכנות יכול להיות זהה לעבר?

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

בקורס פייתון פה באתר השעור הראשון המעניין נקרא "תוכנית ראשונה בפייתון" והוא מתחיל עם הטקסט:

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

אני לא בטוח שזה עדיין רלוונטי. הנה נסיון אחר לכתוב את אותה ההקדמה:

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

ג'מיני יענה קוד שנראה כך:

username = input("הכנס את שמך: ")
print(f"ברוך הבא, {username}!")

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

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

שווה לנסות: פגישה שבועית לשיפור הפרומפטים

02/02/2026

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

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

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

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

מה צריך לעשות? קובעים פגישה שבועית בצוות, אפשר בזום. כל אחד מגיע לפגישה עם 2-3 פרומפטים שהוא כתב במהלך השבוע והתוצאות שהתקבלו (אפשר לשמור פרומפט בהודעת קומיט בגיט וככה קל להיזכר במלים המדויקות ובתוצאות). בפגישה עוברים על הפרומפטים, לומדים ממה שהצליח, מעלים רעיונות איך לשפר את מה שלא נתן תוצאות מספיק טובות ואפשר גם לנסות פרומפטים חלופיים ולראות מה מקבלים. פרומפטים טובים יותר יחסכו לכם הרבה יותר משעה בשבוע.

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

מתכנתים בעידן ה AI לעומת מפעילי AI דרך דוגמת קוד

01/02/2026

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

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

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

המשך קריאה

איך אתם מתקשרים עם ה AI

31/01/2026

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

  1. נותנים ל AI לעשות את העבודה - מפתחים קיבלו משימה, ביקשו מה AI שיפתור והמשיכו הלאה.

  2. מתחילים בבירור פרטים ואז מעבירים ל AI את המושכות.

  3. מתחילים לבד ונותנים ל AI לדבג ולתקן את הטעויות שהם עשו.

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

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

  6. שואלים את ה AI שאלות הבנה והולכים לכתוב לבד. כשנתקעים אפשר לחזור ל AI לעוד שאלות הבנה ועם הידע החדש פותרים בעיות.

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

ובאיזה קבוצה אתם?

מה זה אומר קוד ידידותי ל AI

30/01/2026

חבר שואל - "נתתי לקרסר לסדר דברים בפרויקט שלי והוא לא הצליח לעשות כלום. איך כולם מתלהבים מה AI הזה כשאצלי בקוד הוא כמעט חסר ערך?"

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

המשך קריאה

כזה ניסיתי: פיתוח אפליקציית קובץ בודד עם node 25

29/01/2026

גרסה 25 של node.js הוסיפה פיצ'ר כיפי לאנשים שכותבים כלי שורת פקודה שנקרא Single Executable Application. בקצרה הוא מאפשר להטמיע תוכנית node בתוך קובץ ההפעלה של node.js עצמו ואז להפיץ את הקובץ הזה בתור אפליקציית קובץ יחיד, כלומר לקוח מקבל קובץ הפעלה אחד שאיך שמפעילים אותו מבצע את הקוד בסקריפט שהוטמע.

בואו נראה איך זה עובד דרך 3 דוגמאות.

המשך קריאה

הטריק עם הערכות זמנים

28/01/2026

כשיש יותר מדי זמן אנחנו מבזבזים אותו. מפתח שיכול לבנות פיצ'ר בשבוע ומקבל חודשיים כדי לפתח את זה יעבוד יותר לאט (גם אם לא במודע) ויעשה עבודה מיותרת. מרצה שתכנן ללמד חומר של שעה ב-8 שעות ימצא את עצמו חוזר על אותן דוגמאות ובסוף משחרר את התלמידים שעתיים לפני הזמן.

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

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

גם קוד עושה סטוריטלינג

27/01/2026

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

  1. סוכן קידוד כותב קוד פונקציית צד שרת שמקבלת פרמטר שמורכב משתי מילים user_name. הוא ממשיך לכתוב את קוד צד הלקוח ובטעות שולח את הערך userName. הקוד לא עובד ואני מבקש מסוכן הקידוד לתקן (הכל באותה שיחה). "אני רואה שיש בעיה בשם המשתנה וקוד צד הלקוח שולח אותו בשם אחר ממה שהשרת מצפה לקבל. זה בטח כתוב שם מסיבה טובה אז אני אשלח את הערך גם עם השם הנכון וגם עם השם השגוי". התוצאה - קוד עובד ששולח מידע כפול לשרת.

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

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

name = payload[:name] || payload['name']

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

הבעיה היא שכל 3 הדוגמאות עשויות להיראות נכונות למי שלא מכיר את הטכנולוגיה, Best Practices או שפת התכנות הרלוונטית. קוד מספר סיפור וככל שהסיפור בנוי טוב יותר כך קל לנו יותר להרחיב ולתחזק את המערכת.