3 דרכים שאני משתמש בChatGPT בכדי להיות מתכנת טוב יותר

Image by vectorjuice on Freepik

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

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

אני יודע ששום כלי לא יחליף אותי בעבודה, אבל מי שיחליף אותי יהיה מי שמשתמש באותו כלי

רן בר-זיק, פודקאסט עושים תוכנה

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

המשך קריאה "3 דרכים שאני משתמש בChatGPT בכדי להיות מתכנת טוב יותר"

איך ליצור מסגרת כשאין מסגרת

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

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

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

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

המשך קריאה "איך ליצור מסגרת כשאין מסגרת"

לקח לי שבוע לפתור באג

Image by rawpixel.com on Freepik

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

Expected Behavior

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

המשך קריאה "לקח לי שבוע לפתור באג"

איך LeetCode עזר לי בפיתוח פיצ'ר בעבודה

לאחרונה עשיתי סבב ראיונות, כחלק מההכנות לראיונות חרשתי את LeetCode עם בעיות של אלגוריתמים ומבני נתונים. מנטרה שאני רואה שחוזרת הרבה אומרת: "למה בודקים אותנו על שאלות מהתואר שלנו במדעי המחשב?", בטענה שזה לא בעיות שמשקפות Use cases אמיתיים. אז הנה סתם דוגמא למקרה אשר בו צורת המחשבה אשר יוצרות שאלות מסוג זה עוזרת בפתירת בעיות יומיומיות.

במקרה כאשר הייתי בשיא ההכנות, כאשר אני כבר שורק מבני נתונים ומדקלם רקורסיות, קיבלתי משימה בעבודה להוסיף שדה פילטר/חיפוש חדש לאזור של החיפוש המתקדם באפליקציה, המסודר בעזרת הGrid System של Bootstrap. ההוראות של המעצבת היו פשוטות: לכל היותר 4 פילטרים בשורה ולכל הפחות 2 פילטרים בשורה. זאת אומרת שלא יתכן מצב שיהיו לי כמה פילטרים בשורה ופילטר בודד בשורה בשל עצמו.

המשך קריאה "איך LeetCode עזר לי בפיתוח פיצ'ר בעבודה"

ניתוח פעולות אסינכרוניות בתוכניות JavaScript

Chart vector created by stories - www.freepik.com

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

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

לדוגמא, נסתכל על פקודות סינכרוניות. נבצע מספר פקודות console.log במקביל:

console.log('1')
console.log('2')
console.log('3')

נקבל כפלט לפי הסדר שהתוכנית רשומה '1','2' ו'3'. כלומר, כמצופה, שורה אחר שורה.

בעוד שכל תהליך שכזה נמצא בהרצה או עיבוד, שום דבר אחר לא יכול להתרחש – יתר העיבוד מושהה. זה מכיוון ש-JavaScript היא single threaded (נפרט על כך בהמשך). רק דבר אחד יכול להתרחש בכל פעם על ה-single main thread, וכל היתר חסום לביצוע או לעיבוד עד אשר אותה פעולה תושלם. גישה זו שונה מהרבה שפות פופלאריות אחרות, ולכן דיי קשה לכתוב קוד אסינכרוני בתוכניות JavaScript.

רשומה זו נכתבה בהשראה של הסמינר שביצעתי במהלך הלימודים בתואר על תוצאות המאמר "Static Analysis for Asynchronous JavaScript Programs" של Thodoris Sotiropoulos ו-Benjamin Livshits הנותנים גישה מעניינת לכיצד ניתן לבצע ניתוח סטטי של תוכנית JavaScript אסינכרונית. ניתוח זה מאפשר לזהות שגיאות פוטנציאליות ולהעריך ביצועים של תוכניות.

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

המשך קריאה "ניתוח פעולות אסינכרוניות בתוכניות JavaScript"