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

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

סימנים שעובדים

08/11/2018

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

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

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

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

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

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

ארבעה מרכיבים בלימוד טכנולוגיה חדשה

07/11/2018

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

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

השיטה שלי ללמוד טכנולוגיה חדשה מורכבת מ-4 מרכיבים. היא עובדת לכל טכנולוגיה וכוללת גם הערכות זמנים:

  1. לוקח ספר או קורס אונליין כדי לקבל סילבוס ראשוני.

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

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

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

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

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

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

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

https://elixirschool.com/

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

בתור פרויקט לקחתי את Advent Of Code 2017:

https://adventofcode.com/2017

ופתרתי את כל 24 המשימות משם בשפת Elixir.

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

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

https://www.tocode.co.il/blog/2018-02-elixir-tictactoe

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

https://github.com/ynonp/tocode_bot

עכשיו כל מה שנשאר זה להחליף את Elixir ב Go, Ruby, Python או כל שפה אחרת.

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

לנקות איפה שלא רואים

06/11/2018

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

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

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

הפנס ביד שלכם. לכו להאיר על הדברים הנכונים.

בזמן שישנתם

05/11/2018

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

הנה דוגמא קטנה מתחום פיתוח צד-לקוח. עד 2013 לא היתה דרך טובה לשנות את טקסט הודעת השגיאה ב HTML Input Element. זה אומר שאפשר היה לכתוב:

<input type='text' required="required" />

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

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

https://caniuse.com/#feat=constraint-validation

התמיכה קיימת בכל הדפדפנים המובילים כולל IE10. מתכנתי ווב שעדיין זוכרים איך לכתוב Client Side Validation לפני HTML5 מפסידים פיצ'ר שחוסך המון עבודה ועובד הרבה יותר טוב מכל מנגנון אחר שתנסו לבנות לבד.

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

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

מימוש תבנית העיצוב Observer בפייתון

04/11/2018

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

בואו נראה מתי זה טוב ואיך בונים את זה בפייתון.

המשך קריאה

שתי דרכים שגויות

03/11/2018

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

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

לא. שתי הגישות שגויות

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

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

בדיוק כשהתרגלנו להבדל בין Functions ל Classes ב React

02/11/2018

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

המשך קריאה