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

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

שתי סיבות שבגללן קשה ללמוד בעולם האמיתי

26/08/2020

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

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

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

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

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

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

זה לא הכלי

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. לפני הראיון מבקשים לדבר עם מעסיקים קודמים כדי להבין איזה סוגי תשתיות בנית ולוודא שיש לך ניסיון מוכח בפרויקטים דומים לשלנו.

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