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

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

פיתרונות פשוטים, פיתרונות מסובכים וקיפאון

18/04/2022

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

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

כמה חודשים אחרי זה נתקלתי בהם שוב - נו, שאלתי, "איך הלך עם ההתאמה של create-react-app?", והתשובה היתה קצת מפתיעה. החלק הצפוי הוא שהם באמת ניסו את הרעיון שלי לעשות התאמה של cra לצרכים שלהם וויתרו על זה די מהר. העסק היה מסובך מדי ותמיד היו דברים חשובים יותר לעשות. ברור שזה אחלה פיתרון אם זה היה עובד, אבל הוא דורש יותר מדי עבודה.

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

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

אבל הם לא היו צריכים.

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

חמש תשובות יותר טובות מ"נראה אחלה"

17/04/2022

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

  1. מתי הספקת לעשות את כל הריפקטורינג הזה?

  2. בשביל מה היית צריכה לגעת במודול ההוא - הוא עבד מעולה קודם

  3. וואו איך הכל נטען כל כך מהר!

  4. למה לקח כל כך הרבה זמן לבנות כזה פיצ'ר פשוט? אנחנו לא צריכים את כל הבדיקות האלה בשביל זה יש QA

  5. התיעוד נראה מעולה

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

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

סיבות (ששמעתי במקרה) להיות עצמאי

16/04/2022

  • רק בתור עצמאי הצלחתי לעבוד במה שאני רוצה באמת

  • בתור שכיר במקצוע שלי הייתי מרוויח רבע

  • רציתי לבחור איזה פרויקטים אני לוקח ועל מה אני עובד

  • רציתי לבחור עם איזה אנשים אני עובד (ועם מי אני לא עובד)

  • נמאס לי שאני עושה את כל העבודה והבוס לוקח את כל הקרדיט

  • חיפשתי דרך לבלות יותר זמן עם הילדים

  • חיפשתי הכנסה נוספת

  • תמיד חלמתי להקים עסק שיצליח בגדול

  • כולם במשפחה שלי עצמאיים

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

שתי דרכים להגדיר תורים ב RabbitMQ

15/04/2022

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

המשך קריאה

אבל זה עבד לי בבוקר

14/04/2022

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

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

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

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

  2. שימרו לכל פרויקט סט בדיקות אוטומטיות ומכונה שיכולה להריץ בדיקות אלה.

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

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

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

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

לאט או עם באגים

13/04/2022

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

אבל המציאות לא עובדת ככה-

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

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

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

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

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

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

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

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

12/04/2022

בפוסט זה אדגים איך לכתוב אפליקציית Node.JS ו Express פשוטה, ששולפת מידע מבסיס נתונים באמצעות ספריית Knex.JS ומציגה אותו בתור טבלה ב HTML. חסרי הסבלנות ביניכם מוזמנים לדלג על ההסבר ולקפוץ ישר לקוד במאגר: https://github.com/ynonp/node-knex-ejs-demo

לכל השאר - בואו נראה איך זה עובד.

המשך קריאה

היום למדתי: הסימן נקודותיים סלאש בגיט

11/04/2022

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

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

דוגמאות? בטח-

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

$ git ls-files

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

$ git ls-files :/

ותקבלו את רשימת כל הקבצים שבמעקב.

או, נניח שאתם באותה תיקיה פנימית ובהפעלת סטטוס אתם מקבלים:

On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   ../agenda.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        ./
        ../react-list/

no changes added to commit (use "git add" and/or "git commit -a")

מה שאומר שגם התיקיה שאני נמצא בה אינה שמורה בגיט, גם הקובץ agenda.md שנמצא בתיקיה מעליי השתנה וגם התיקיה react-list שנמצאת בתיקיה מעליי אינה שמורה בגיט.

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

$ git add :/

ומוסיף לאינדקס את כל הקבצים שהשתנו בכל הפרויקט.

פוחדת מהפאדיחה ליפול

09/04/2022

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

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

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

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

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

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