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

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

תתחילו עם המחיר

15/03/2019

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

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

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

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

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

כשה API לא מסתדר עם האינטואיציה

14/03/2019

אחת השאלות הראשונות של אנשים שעבדו עם React Hooks היתה קשורה לשילוב, או יותר נכון להתנגשות, בין React Hooks ל setInterval. בקצרה מסתבר שהקוד הבא לא עובד:

function Counter() {
  let [count, setCount] = useState(0);

  useEffect(() => {
    let id = setInterval(() => {
      setCount(count + 1);
    }, 1000);
    return () => clearInterval(id);
  }, []);

  return <h1>{count}</h1>;
}

ה Counter בפקד נעצר ב-1.

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

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

import React, { useState, useEffect, useRef } from 'react';

function Counter() {
  let [count, setCount] = useState(0);

  useInterval(() => {
    // Your custom logic here
    setCount(count + 1);
  }, 1000);

  return <h1>{count}</h1>;
}

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

כל מה שרציתם לדעת על Git Rebase ולא ידעתם את מי לשאול

13/03/2019

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

המשך קריאה

במורד מחילת הארנב

12/03/2019

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

וזה יכול להימשך שעות. אפילו ימים.

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

ההבדל בין להבין ללדעת

11/03/2019

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

https://www.youtube.com/watch?v=qs0b2t8SM88&t=647s

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

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

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

אנטי-תבניות שלמדתי בבית ספר

10/03/2019

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

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

המשך קריאה

בואו נלמד לתכנת כמו שהייתם לומדים לרכב על אופניים

09/03/2019

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

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

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

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

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

בוא נחכה עם זה

08/03/2019

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

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

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

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

התאמה אישית של פרויקט Bootstrap4

07/03/2019

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

המשך קריאה

ומה אם היו לך שנתיים?

06/03/2019

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

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

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

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