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

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

איך יראה חיפוש עבודה בהייטק ב 2026?

27/05/2025

כמה מגמות שקורות כבר היום ודורשות תשומת לב:

  1. סוכני AI מתאימים את קורות החיים שלנו אישית לכל משרה ושולחים את קורות החיים בצירוף Cover Letter אישי למנהלי הגיוס.

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

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

  4. פרויקטי Take Home למועמדים מבוצעים על ידי AI או בצורת Vibe Coding מלא או עם הנחיה של המועמד. מאחר וממילא הפרויקטים האלה לא גדולים אין שום דרך להעריך את המועמד על בסיסם.

בנקודה הזאת אפשר לעצור ולשאול - "אולי זה בסדר?", אולי זה הגיוני לתת למועמד הזדמנות להראות את היכולות שלו תוך שימוש בכל ארגז הכלים המקצועי שהוא או היא מביאים לשולחן. אם אני מגייס למשרת פיתוח, וממילא בעבודה עצמה יהיה שימוש בכלי AI, אז למה לא לאפשר אותם בראיון? והתשובה כאן היא שהראיון הוא לא באמת סביבת "עבודה". אף אחד לא פותר שאלות LeetCode אחרי הקפה של הבוקר ביום עבודה רגיל, אנחנו משתמשים בהן בתור מייצג מתוך מחשבה שאנשים שיודעים לפתור שאלות כאלה יוכלו להתמודד גם עם האתגרים הגדולים יותר איתם צריך להתמודד בעבודה האמיתית. שימוש בכלי AI במסגרת קבלה לעבודה מרסק את הקשר הזה (וממילא רבים יטענו שהיה מקרי). היום כשאני מסתכל על פרויקט Take Home של מועמד אין לי דרך להסיק מהקוד הזה שום דבר לגבי התאמה או אי התאמה של המועמד. אותו דבר לגבי ראיון בזום או קריאה של קורות חיים.

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

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

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

  3. אם אפשר לתת "משימת ניסיון" על הפרויקט האמיתי זה יכול לעזור, כי שם אין בעיה שישתמשו ב AI.

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

טיפ LLM - ואם נריץ 100 פעמים?

26/05/2025

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

https://sean.heelan.io/2025/05/22/how-i-used-o3-to-find-cve-2025-37899-a-remote-zeroday-vulnerability-in-the-linux-kernels-smb-implementation/

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

  1. בהרצת השאילתה 100 פעמים עם פרומפט יחסית קצר, כלומר באזור ה 3,000 שורות קוד, o3 מצא את בעיית האבטחה ב 8 מתוך 100 ריצות. ב 66 מהריצות o3 חשב שאין שום בעיה בקוד ובעוד 28 ריצות o3 זיהה בעיות שלא באמת היו בעיות. (הערת המתרגם - שמתי לב שהמספרים לא מסתדרים אבל משאיר אותם כמו בפוסט המקורי).

  2. בהרצת השאילתה 100 פעמים עם פרומפט ארוך יותר, באזור ה 12 אלף שורות קוד, o3 מצא את בעיית האבטחה רק בריצה אחת מתוך 100, אבל באחת הריצות האחרות הוא מצא בעיית אבטחה אחרת שהחוקר לא הכיר.

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

פרידה ולקחים מ Spanish Panda

25/05/2025

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

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

המשך קריאה

מה שה Commit Message לא סיפר

24/05/2025

במהלך תיקון באג אצל לקוח הגענו לקובץ שנראה קשור ומיד עלו השאלות - מי שם את הקובץ הזה שם? למה? מה אנחנו מפספסים?

הצעד הבא במצבים כאלה הוא git log על הקובץ:

git log -- file

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

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

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

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

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

הבנה היא הקפיצה הבאה

23/05/2025

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

Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

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

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

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

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

https://app.emergent.sh

קוד הפעלה: VIBEWITHRUNWAY

הזמנה לוובינר: פיתוח בעזרת AI

22/05/2025
ai

הי חברים,

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

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

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

הוובינר יתקיים ביום חמישי הבא ה 29.5 בשעה 10 בבוקר.

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

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

https://www.facebook.com/events/9481501425305658/

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

תתחילו עם פונקציות

21/05/2025

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

תתחילו עם פונקציות.

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

num = int(input("select a number: "))
sum = 0
x = 1

while x < num:
    if num % x == 0:
        sum += x
    x += 1

if num == sum:
    print("Perfect number")
else:
    print("Not a perfect number")

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

num = int(input("select a number: "))

if num == sum(divisors(num))
    print("Perfect number")
else:
    print("Not a perfect number")

עכשיו יש לנו שתי בעיות חדשות:

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

ועוד כמה שאלות חדשות:

  1. אולי גם קלט צריך להיות פונקציה?
  2. מה לגבי ה if?
  3. וה print? למה אנחנו מדפיסים ולא "מחזירים" ערך? מה ההבדל בין שתי הפעולות?

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

חידת JavaScript - למה זה מחזיר מערך?

בקורס על JavaScript לימדתי אוביקטים ורציתי להראות שכשמנסים לגשת לשדה שלא קיים באוביקט מקבלים undefined. אז כתבתי בקונסול:

{a: 10}['b']

אבל מה שהודפס לא היה undefined אלא:

{a: 10}['b']
16:05:00.902 ['b']

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

המשך קריאה

חדש באתר - עוזר AI

18/05/2025
ai

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

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

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

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