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

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

חדש באתר - סביבות פיתוח אונליין לקורסים

27/08/2020

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

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

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

ואז הגיע גיטפודיו.

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

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

  1. בקורס ריאקט תקבלו סביבת פיתוח בענן שכוללת את כל תיקיית הדוגמאות של הקורס. בשביל להריץ דוגמה תשתמשו ב webpack-dev-server בדיוק כמו שאני מראה בקורס וכל דוגמה מגיעה במבנה של פרויקט מלא עם קובץ הגדרות ה webpack.config.js שלה. זה בדיוק מה שתקבלו כשתעבדו על פרויקט בעולם האמיתי (וכמובן אפשר להוריד את כל הדוגמה אליכם למחשב).

  2. בקורס Node.JS תקבלו סביבת פיתוח בענן שכוללת את התקנת הגירסה של node איתה עבדתי בקורס יחד עם אפשרות קלה להתקין ולהוסיף עוד ספריות עם npm install, גם אם בבית יש לכם חסימה באינטרנט. תוכלו להריץ שרת מתוך סביבת הפיתוח של גיטפודיו ולהתחבר אליו מתוך הדפדפן, בלי קשר להגדרות הפיירוול על המחשב המקומי שלכם.

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

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

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

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

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

המשך קריאה