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

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

זה לא הכלי

25/08/2020

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

אם את לא מצליחה לכתוב את הפרויקט ההוא ב Python זה לא בגלל שבחרת לעבוד דווקא עם PyCharm או ב VS Code.

אם הקוד שלך לא מתקמפל זה לא בגלל באג בקומפיילר.

אם אנשים לא קונים בחנות המקוונת שלכם זה לא בגלל שקוד החנות כתוב ב Django, ב Rails, ב Node.JS או בוורדפרס.

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


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

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

עוד יאק לגלח

24/08/2020

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

Any seemingly pointless activity which is actually necessary to solve a problem which solves a problem which, several levels of recursion later, solves the real problem you're working on.

במעבר ממק ללינוקס גילוח היאקים תוקף כמעט בכל צעד: צריך לקרוא מייל -> אוקיי אני רק אתקין את mu4e ואגדיר את האימקס שלי בתור Mail Client -> אה, צריך להתקין קודם את mbsync ולסנכרן את כל תיקיות ה imap - לא בעיה -> אבל רגע הסינכרון צריך לרוץ כל כמה דקות אז צריך להוסיף cron job ... ושלוש שעות אחר כך אני מגלה שלא הספקתי לקרוא אף מייל (ולא התחלנו לדבר על שליחה).

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

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

קריאה וכתיבה ל Kafka מתוך Shell Script

23/08/2020

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

המשך קריאה

מבוי סתום

22/08/2020

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

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

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

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

הצעה לפרויקט - יישום צ'ט ב React ו Redux

21/08/2020

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

(וכן אני יודע שאתם אוהבים מובאקס. הכל טוב גם אותו אני מלמד ויש פרויקטים גם עליו. תתפלאו אבל יש לא מעט אנשים שעדיין מעדיפים את Redux).

המשך קריאה

לכתוב או לא לכתוב הערות בקוד?

20/08/2020

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

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

  2. אין טעם לכתוב הערה כדי להסביר פיצ'רים של השפה.

  3. אין טעם לשים קטעי קוד ארוכים בהערה רק בשביל שאולי נצטרך אותם בעתיד (עדיף ללמוד להשתמש בגיט).

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

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

  6. אין טעם לכתוב הערה בשביל לספר סיפור רקע על הפיצ'ר או להסביר על מקרה קצה מסוים שהקוד מטפל בו (עדיף לכתוב הודעת קומיט טובה).

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

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

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

בלי חרטות

19/08/2020

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

זאת הסיבה שכולם מתחילים דואולינגו אבל אף אחד לא מתמיד מספיק בשביל ללמוד שפה חדשה.

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

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

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

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

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

שיר? ברור שיהיה מה לזמזם בפעם הבאה שאין לכם כח ללכת לחדר כושר:

שלום עולם Linux

18/08/2020

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

המשך קריאה

השוק מוצף אבל אין הרבה טובים

17/08/2020

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

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

כי הנה שתי אמיתות-

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

  2. מתכנתים טובים באים בהרבה מאוד גוונים.

הנה גישה אחת שעובדת הרבה יותר טוב:

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

או נסו את זה:

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

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

כמה טיפים לגבי פיצול Reducer ב Redux

16/08/2020

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

For any meaningful application, putting all your update logic into a single reducer function is quickly going to become unmaintainable.

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

אבל הניואנס במשפט שקל לפספס אותו הוא שיש יותר מדרך אחת לפצל Reducer. השיטה הפופולרית של combineReducers (שנקראת בתיעוד Slice Reducer) היא רק אחת מהן.

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

המשך קריאה