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

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

שעה כל יום

21/07/2020

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

אבל שעה כל יום זה ממש אחלה. בשעה כל יום אפשר ללמוד Data Science או Web Development או אפילו גרמנית. שעה כל יום קונה לכם עולם ומלואו.

והאתגר? להמשיך להשקיע שעה ביום גם אחרי שההתלהבות יורדת, גם אחרי שכבר לא ממש מתחשק ללמוד Data Science או Web Development או מה שלא יהיה. גם אחרי שמצאתם עבודה אחרת (כי בכל זאת צריך לשלם את החשבונות) או שנכנסו 4 פרויקטים חדשים בדיוק באותו יום.

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

מה אתם מחליטים?

שימוש ב Render Props כדי להפוך קומפוננטה לגנרית יותר

20/07/2020

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

המשך קריאה

אבל אמרתי לך...

19/07/2020

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

נו, תודה.

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

עכשיו היית מצפה שאחרי כל זה אנשים היו להוטים ללמוד על ה Box Model. נו, תמשיכו לחלום.

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

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

לראות, לכתוב ולדבג

18/07/2020

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

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

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

ואז זה לא עובד.

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

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

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

הפיצול

17/07/2020

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

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

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

https://unoptimal.files.wordpress.com/2019/11/realgraph.png?w=1424

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

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

שאלת ראיונות עבודה: Docker Compose

16/07/2020

נתון קובץ docker-compose.yml הבא:

version: '3.8'

services:
  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: docker
      POSTGRES_DB: wordcount_dev
      POSTGRES_USER: docker
    volumes:
      - database_data:/var/lib/postgresql/data

  webapp:
    image: pydocker1-test:latest
    depends_on:
      - db
    ports:
      - 5000:5000

volumes:
  database_data:
    driver: local

מה עושה הפקודה depends_on? האם היא תוביל לתוצאה הרצויה במקרה הזה (בו האפליקציה תלויה בבסיס הנתונים ולא יכולה להתחיל לעבוד בלעדיו)? ואם לא, מה הייתם עושים במקום?

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

הזדמנויות

15/07/2020

הי כולם,

אז ביבי נתן לנו שנה של UBI. לא האמנתי שזה יבוא וגם לא ממש הייתי בעד (אבל נו ממתי ביבי שואל אותי מה לעשות). בכל מקרה בהינתן שזה קרה בואו נדבר על הזדמנויות, ובמיוחד למי שעכשיו בלי עבודה:

  1. אתם יכולים ללמוד כל נושא שבעולם מהמורים הטובים בעולם והרוב בחינם או כמעט בחינם. ויש לכם את כל היום כדי להשקיע בזה. שנה של ניסיון ב Machine Learning? קיבלת! שנה של ניסיון כמפתחת Front End? אין בעיה. ביבי משלם את החשבון.

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

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

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

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

איך ללמוד עם דדליינים?

14/07/2020

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

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

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

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

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

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

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

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

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

האם יש טעם ללמוד CSS לעומק?

13/07/2020

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

״האם יש טעם ללמוד לעומק CSS? אולי אף פעם לא אצטרך את זה״

״האם יש טעם ללמוד גם Webpack? אני מסתדר טוב עם react-create-app״

״האם יש טעם ללמוד על React Hooks? הולך לי טוב עם קלאסים״

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

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

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

פימסלר ודואולינגו

12/07/2020

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

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

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

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

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

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

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

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