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

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

האבא שעשה לי את היום

02/01/2019

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

בלי לעשות סצינה, בלי להגיד לילד ש"אתה רואה זה מסוכן אז אסור ללכת על הגדר",

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

סיכום שנה ותוכניות ל 2019

01/01/2019

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

  1. גלגלי עזר

  2. לא בשבילי

  3. יותר מהר מאופניים

  4. הודעות קומיט מוצלחות ומוצלחות פחות

  5. 8 שאלות שכדאי לברר לפני שמתחילים לעבוד כמתכנתי Front End

חוץ מפוסטים הספקתי להעלות לכאן גם 3 קורסים מלאים (פייתון מתקדם, גיט ו JavaScript ES6), והתחלתי להעביר וובינרים בממוצע פעם בשבוע, ויש לנו כבר 29 שעות של תוכן מוקלט מהוובינרים האלה על מגוון נושאים טכנולוגיים.

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

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

טיפ לפסיכומטרי

31/12/2018

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

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

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

״יש לכם פה סולמות עם 5 חווקים? אני צריך משהו גבוה״

״אני חייב סולם חדש נשבר לי החווק השלישי אתמול״

״המרחק בין חווקי הסולם לא יעלה על 30 סנטימטרים.״

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

טפסים דינמיים בריילס

30/12/2018

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

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

המשך קריאה

הדבר הנכון לעשות

29/12/2018

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

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

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

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

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

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

קוד שאי אפשר לבדוק

28/12/2018

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

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

וכדי להחליט על ההזזה עצמה כדאי לזכור את מטרת הבדיקות:

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

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

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

פטריות

27/12/2018

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

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

טיפ גיט: איך לשנות את פורמט הלוג של git

26/12/2018

הפורמט הרגיל של git log ארוך מדי ובפרויקטים גדולים לא מאוד נוח לקריאה. ניסיון לשנות את הפורמט עם אליאס לא ממש עובד. הגדרתי בפרויקט את ה alias הבא:

git config alias.log "log --oneline"

וגיט התעלם באלגנטיות.

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

$ git config log.abbrevCommit false
$ git config format.pretty oneline

פתרה את הבעיה ומציגה יומן שנראה כך:

$ git log

5982b5b (HEAD -> master, dev) created a readme file
4945c9c fixed jade template
7b1978d add debug message
943e263 initial commit

הדפסת הודעות לוג לקובץ יומן ב Express

25/12/2018

מורגן הוא מודול תיעוד הבקשות של אקספרס והוא נמצא בכל פרויקט אקספרס שתיצרו עם Express Generator. תוכלו לזהות אותו לפי השורה הבאה בקובץ app.js.

app.use(morgan('dev'));

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

המשך קריאה

תהנה מהדרך

23/12/2018

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

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

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

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