יום חמישי, 29 באוגוסט 2019

376 PySnooper

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

  • אנשים בעיקר מכירים אותי כמתכנת Python, עבדתי בכל מיני חברות שונות ותמיד הקפדתי לעבוד עם Python - להיכנס מאוד לעומק ולהכיר את השפה
  • פעיל בקהילת הקוד הפתוח - מארגן כנס (Meetup) שנקרא PyWeb-IL - מתעסק ב Python וב - Web ועוד כל מיני נושאים (נפגשים פעם בחודשיים בתל אביב).
    • הגרסא הגדולה של זה היא PyCon . . .
  •  מתכנת מאז שאני ילד, עברתי בתעשייה בכל מיני חברות - גם כפרילאנסר וגם בחברות גדולות יותר, כבר 10 שנים
    • בהתחלה הייתי עובד יותר מהבית (סטארטאפים וכל מיני כאלה)
    • לפני כ-4 שנים התחלתי לעבוד בחברה גדולה (סטארטאפ ישראלי שנקנה ע”י אחת החברות הגדולות - Google it אם ממש בא לכם לבדוק) - זו הייתה “החברה הגדולה הראשונה שלי”
    • סיימתי שם לפני כמה חודשים ומאז עשיתי כל מיני עבודות Freelance והדרכות - ועכשיו התחלתי לעבוד ב - BlueVine - חברת FinTech בתל אביב.

שתי מילים על BlueVine 
  • אז BlueVine עוסקת במתן הלוואות לעסקים באמריקה (ארה”ב) - עסקים קטנים מבקשים הלוואה וצריך מישהו שיעריך את הסיכון, סיכוי להחזר הלוואה ובהתאם - איזו ריבית אפשר להציע להם
  • ומי הלקוחות - בנקים או מלווים שונים?
    • יש כל מיני 3rd-parties שמציעים את ההלוואת בשם BlueVine
    • מה שהפתיע אותי (לעומת מה שחשבתי כשבאתי להתראיין, שזה בגדול שנותנים שירות לאיזשהו בנק) זה ש-BlueVine זה הבנק - עשו Debt Financing, יש “כמות עצומה של כסף” ונותנים את ההלוואות מהכסף של החברה (של המשקיעים). בגדול - אני עובד בבנק.
  • יש לא מעט חברות Fin-Tech בסגנון - מגייסות קרן אחת “אופרטיבית” וקרן נוספת שהיא, ובכן - “הקרן” (המשקיעה)
    • יש מודל דומה(?) ב - Lemonade למשל, זה מודל שהוא יחסית מקובל.

אז אנחנו מניחים שעל מנת לתת הלוואת בחוכמה צריך הרבה Data - וצריך לדעת איך לנתח אותו, אז בטח משתמשים ב  -Python גם שם.
שנייה לפני - האם זה באמת “הרבה דאטה”? יש הרבה מאוד עסקים קטנים אבל זה עדיין . . .
  • לא מכיר עד הסוף את החברה עדיין, לא יודע
  • מה שכן אני יודע - אנחנו מגייסים!
    • בפיתוח, QA, פרודקט, Data Science, ועוד
    • רוצים לעזור לרם להרוויח מענק חבר-מביא-חבר? תהיו חברים :-). אפשר לשלוח קו”ח ל-ram@rachum.com
    • החברה ממוקמת בתל אביב, בניין אלון 1 (על רחוב יגאל אלון)

ולסיפור העיקרי - לפני חודשיים-שלושה הוצאת כלי Open Source שהגיע להיות מספר 1 גם ב - GitHub Tending וגם ב - Hacker News - שזה משהו שלא קורה הרבה, חייבים להגיד: די נדיר שכלי מגיע להיות מספר 1 בשני המקומות, ובטח שאין הרבה ישראלים שלהם זה קרה.
בוא תעביר אותנו סביב הסיפור וסביב החוויה - מה זה הכלי הזה? איך היה לך כזה “פוקס”? :-)
  • “חצי מזה זה באמת מזל”  . . . ב-10 שנים שבהן אני מפתח (כמקצוע) עשיתי הרבה פעמים פרוייקטים בקוד פתוח (אפשר לראות אסופה של פרוייקטים שעשיתי בפרופיל שלי בגיטהאב) - ורובם לא הגיעו לשום מקום.
    • היה עוד אחד שהגיע למשהו מרשים - PythonTurtle - נדבר עליו אחר כך.

ועכשיו ל PySnooper - מה הוא נותן?
  • אני מאוד אוהב להשתמש ב - Debuggers. כשאתה מתכנת - בחצי מהזמן אתה בכלל מנסה להבין מה הקוד עושה לעומת מה שהוא אמור היה (לדעתך) לעשות - נראה שהוא אמור לעשות את “הדבר הנכון” אבל במקום זה יש Bug ואתה רוצה להבין מה קורה שם.
  • אני מתכנת מאז שאני ילד, ותמיד נראה לי הגיוני להשתמש ב - Debugger: אתה מוסיף Break Point באיזו שורה, והקוד עוצר שם - ואתה יכול לשאול מה קורה שם (מה הערך של המשתנים, להריץ פונקציה וכו’). זה כלי שאני רואה אותו כחלק אינטגלי מתכנות.
  • ואז התחלתי לעבוד בתעשייה - וראיתי שאנשים פשוט לא משתמשים ב - Debugger . . . זה מאוד הפתיע אותי - מתכנתים מקצועיים, שמקבלים הרבה כסף (!) ועובדים על דברים מאוד חשובים (!!), פשוט “תוקעים שורות Print” כשהם רוצים לדעת מה קורה, ואין להם את היכולת “לעשות Pause” בנקודה כלשהי, פשוט כאשר רוצים לדעת מה הערך של משתנה בנקודה מסויימת הם מוסיפים Print ולאחר מכן קוראים את הלוג.

אז הקושי שראית הוא שבמקום לפתוח Debugger פשוט מוסיפים פקודות Print . . . אבל Debuggers זה משהו שיש (קיים), אז למה זה קורה?
  • בוא נגיד שאתה עובד בבית על הפרויקט החמוד שלך - אתה כן פותח את ה - Debugger, יוצר קובץ, כותב קוד, Break-points וכו’ - אבל אתה בדר”כ לא בבית אלא בחברה, והקוד לא רץ על המכונה שלך אלא על איזשהו שרת חיצוני או ב - Docker או Vagrant או כל Setup מורכב אחר - ומסובך לחבר את ה - Debugger שלך לזה . . .
  • ה - Debugger הוא כלי אינטראקטיבי, שצריך “לתקשר עם הקוד” - מתי לעצור, מתי להמשיך, מתי אני רוצה משהו אחר - צריך לקנפג אותו, ורוב האנשים לא עושים את העבודה הזו.
  • אז אמרתי - “אוקיי, בוא נראה אם אני יכול לעשות משהו שהוא “חוראני+” - משהו באמצע שבין השיטה החוראנית לבין Debugger.
    • משהו שיותר “מפנק” מה - Prints ,אבל שלא צריך לקנפג - כי שיטת ה Prints מאוד מתסכלת: צריך להחליט איפה לשים את ה - Print בקוד ולהחליט מה אתה רוצה לראות מראש - ואז צריך לעשות Build (שלוקח זמן), ואחרי שאתה רואה את הפלט עדיין צריך לנחש ממנו מה קרה, ולפעמים להבין שאולי צריך לשים את ה - Print  במקום אחר או להראות משתנה אחר - Back & Forth נוראי (הנה אחד לא נוראי).
  • מה שעשיתי זה פרויקט בשם PySnooper - מוסיף Decorator לפונקציה, שורה בקוד שאומרת ל-Python “שים לב! בפונקציה הזו על כל שורה שרצה תכתוב ללוג שעכשיו השורה הזו רצה, המשתנה X=7 והמשתנה y=14” וכו’ - מעיין לוג אוטומטי של כל מה שקרה בפונקציה, קצת כמו לשים אוטומטית שורות Print בכל מקום.
    • ולגבי Decorator ב-Python למי שלא מכיר -  זו בעצם “פונקציה שעוטפת פונקציה”
      • האמת שאני לא חושב על זה ככה (אני גם מלמד Python, אז יש לי הרבה ניסיון בלהסביר לאנשים מה זה) - אני חושב על זה יותר כעל דרך “לשפצר” פונקציה: מעיין שורת הדרכה שאתה מוסיף ואומרת ל-Python “שים לב - תן לפונקציה הזו טיפול מיוחד, כמו שאני מבקש”.
    • ברמה הסמנטית זה בא “לעטר” את הפונקציה (“לעשות לה Decorate”, לא כזה); ברמה הטכנית זה ממש פונקציה שעוטפת פונקציה, ויכולה לקבל אותה כרפרנס ולהריץ אותו - וזה מה שמאפשר לעשות את כל הדברים האלה.

זה לא יוצר לוג ענק?
  • כן . . . זאת אומרת - תלוי כמה שורות יש בפונקציה: זה עובר רק על הפונקציה “שעיטרת”.
  • אתה רואה שורות לוג רק על הקוד שבפונקציה “שעיטרת” - אם הפונקציה הזו קראה לפונקציה אחרת, לא תראה שורות לוג עליה (אלא אם תשתמש ב Argument הידוע Depth = 2 …)

ואם הפונקציה שלי גדולה, ויש בה כמה לולאות . . .
  • אתה עלול לראות כמה אלפי שורות קוד ב - Log.

אוקיי - אז יש לך מלא לוגים. מה אתה עושה עם כל הטוב הזה?
  • אתה יכול לראות שורה-שורה איפה זה עבר
  • התהליך של להסתכל על קובץ לוג עם אלף שורות ולעשות בו חיפוש (מתי מילה מופיעה או מתי משתנה מופיע וכו’) הוא הרבה יותר פשוט לעומת התהליך Back & Forth של לשים Print - להריץ - לראות - לשים עוד Print - להריץ - לראות -  . . .
  • קצת כמו לצלם את הקוד ולהריץ ב - Slow motion כדי להבין מה היה שם, בלי Debugger.

צעד אחורה - יש Debugger וזה כלי נפלא, אבל אנשים לא משתמשים בו, לפעמים בגלל הקשיים הטכניים - אבל לפעמים מסיבה נוספת: בכוונה
  • חזרה לפודקאסט מספר 2 או 3 ! (תכל’ס 8, אבל 376 פרקים אז לך תספור…).
  • הרעיון - כשאתה מדבג את הקוד, אתה משקיע אנרגיה וזמן - שלא יחזור אליך. 
    • אולי הצלחת לפתור את הבעיה הנקודתית ולהבין מה ה - Bug שלך, אבל הקוד עדיין ישאר קשה להבנה (אם הוא לא היה קשה להבנה אולי לא הייתה נכנס לבעיה מלכתחילה), יכול להיות שיש באגים דומים שמתחבאים במקומות אחרים, ואז אולי מצאת אחד אבל יש עוד וכו’.
  • מצד שני, יש עוד גישה שאומרת - “בוא נעבוד יותר קשה” (Refactor או עוד טסטים לקוד וכו’), נבין בעצמנו “בלי העזרה של ה - Debugger”, מה התקלה - ונבין יחד עם זה כבר את כל “סט התקלות” - עבודה “יותר יסודית”, לפחות לפי הגישה הזו.
  • זאת אומרת - סיבה נוספת לא להשתמש ב - Debugger היא על מנת “לבנות יסודות נכונים”, כי ה-Debugger, עם כל זה שהוא מאוד נוח, הוא גם כלי ש”מפתה” אותנו לעשות “קיצורי דרך” או “טיפולים נקודתיים” - Bug עצמו במקום Refactor כולל) - תיקון נקודתי על תיקון נקודתי, Patch על Patch.
  • בגדול - עצם זה שאני צריך פה Debugger אומר שיש לי בעיה - לא הבנתי מה הקוד שלי עושה . . . כבר בעיה (ולא משנה כאן אם השלב הבא זה Debugger או להוסיף Print - שתיהן פעולות Debugging).
  • העניין הוא המתודה - אם אני לא מבין מה הקוד שלי עושה, צריך כלי שיעזור לי להבין - אולי אני צריך לשנות משהו בקוד שלי, כי לא ירחק היום בו אני שוב אתקל בבעיה כזו, ושוב אצטרך לפתוח Debugger או להוסיף Print בכל מקום.
אז מה דעתך על הגישה הזו? (כן - עד עכשיו זו הייתה ההשאלה) - יצא לך להיתקל בה בעבר? 
  • שמעתי על אנשים שאמרו לי שמבחינה “אידיאולוגית” הם לא מוכנים להשתמש ב-Debugger כי זה “דבר רע”.
  • את הטיעון הזה כפי שהצגתם אותו אני לא מכיר - ולמען האמת אני לא מבין את ההיגיון שבו . . .
  • גם אם הקוד שלך מצויין - אתה מתישהו תגיע למצב שאתה לא מבין את מה שהוא עושה, ואתה חייב להיכנס לזה איכשהו.
  • אני לא יכול לדמיין . . . אני לפעמים משקיע באיכות של קוד ממש הרבה, ואני יודע שזה עניין סובייקטיבי ולכל אחד יש דעה שונה על מה זה “קוד יפה” - ואני לא יכול לדמיין במדע הבדיוני הכי מטורף איך יש קוד שאתה מסתכל עליו יודע בוודאות מה הוא עושה.
  • תמיד, כשאתה כותב קוד, אין לך ידיעה מוחלטת על מה שקורה שם, ותמיד יהיו דברים שיפתיעו אותך.

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

אז עבדת בחברה שבא היה קשה (טכנית) להשתמש ב-Debugger, ואז כתבת את הכלי הזה - ש”מצלם” את התוכנית ומייצר לוג מפורט של כל מה שהתוכנית עשתה (או לפחות מה הפונקציה המעניינת שלך עשתה), במקום להוסיף שורות Print כל הזמן . . . אגב - כמה זמן לקח עד שאנשי התשתיות באו ואמרו “הי! - אתה גומר לנו את ה - I/O של הדיסק!” או משהו בסגנון?
  • זה לא צורך כאלה כמויות… נגיד שזה מוציא קובץ עם אלף שורות לוג - לא כזה Big Deal. קשה לך (כבנאדם) לקרוא את זה, אבל תכל’ס זה לא כזה עניין.
  • זה - עבור ריצה יזומה. זה לא כלי ל - Production . . .
    • וזה עושה שכל - גם Debugger זה לא כלי ל - Production.

האם יש דרך פשוטה “לכבות את זה”? להשאיר את הקוד כפי שהוא ורק לכבות את האפשרות?
  • מישהו ביקש את זה, והוספנו איזשהו Environment variable שיכול לגרום לזה לא לעבוד, אבל תכל’ס - עדיף שפשוט לא תעשה לזה Check-in ל - Git מלכתחילה.

עובדתית - באותה חברה שבה עבדת זה אכן עזר לאנשים?
  • חשבתי על זה רק אחרי שיצאתי משם, וזה גם לא הגיע רק בהשראת החברה הזו
  • בהרבה מקומות וברוב החברות - רוב המתכנתים ב-Python לא עובדים עם Debugger. זו מעיין “מציאות עולם” מוזרה כזו.
  • זה לא שאין  - יש מלא Debuggers שונים.

כשעובדים ב - Python - זו שפה שמתשמשים בה בהמון Domains ועבור המון דברים שונים, ולפעמים אפשר להתשמש ב - Debugger ולפעמים לא.
  • למשל - אם אתה עובד עם Spark לדוגמא  -אתה יכול לכתוב ב - Python, אבל התוכנית שאתה כותב היא לא התוכנית שרצה . . . זה עושה איזשהו Meta-programming, כשאתה כותב את ה - DAG, שאחר כך רץ ומשתמש ב - Debugger שם. 
  • זה לא שאי אפשר להשתמש ב - Debugger טכנית, זה שהוא פשוט יעזור לך מעט מאוד. מה שמעניין זה ה - DAG ולא התוכנית שאתה כותב, ולזה אין Debugger.
  • זו נקודה שבה אני חושב ש Debugger של Python פחות יעזור.
  • מן הסתם גם לא תוכל להכניס לשם Prints . . . כן, כי השיטות אחרות, וגם אם תכניס זה לא יעזור לך כיוון שה-Print הוא בתוכנית שיוצרת את ה - DAG ולא ב - DAG עצמו.
  • אבל כן - יש שיטות אחרות, ויש הרבה דגים בים. So long and thanks for all the fish עוד יחזור.
  • זו דוגמא אחת שבה, ברמה הטכנית, כותבים ב - Python - אבל Debugger (לפחות סטנדרטי) לא יעזור.
  • נראה ש - Python זה משהו כל כך רחב היום, ואני (רן) לא מכיר את כל המקומות שבהם זה נמצא, אז קשה להכליל.

ועכשיו ל”דרמה” של Hacker News ו - Github - כתבת את הכלי הזה, הלכת לישון והנה - “קופת מזומנים מחכה בבוקר”?
  • לא בדיוק.
  • חשבתי על הרעיון הזה, וחשבתי שזה יכול להיות אחלה פרויקט.
  • השקעתי מאוד ב - ReadMe - זה מאוד חשוב על מנת שפרויקט קוד פתוח יצליח, חשוב מאוד שה- ReadMe יהיה מאוד To the Point - מה זה הכלי הזה? מה הוא נותן? למה הוא משמש? 2-3 שורות ב - Quick-start, כי לאנשים אין כוח לקרוא Documentation (זה אותם אלה שהתעצלו לקנפג Debugger, כן?).
    • במיוחד אם מישהו הגיע לפרויקט שלך דרך Hacker News או Reddit, הוא בסך הכל כנראה בשירותים, גולל בטלפון שלו ומחפש משהו שיבדר אותו - אם אתה יכול  לתת את התוכן המהותי ב-20 שניות הראשונות אולי תוכל לתפוס את תשומת הלב שלו (לפני החתול הבא).
  • איך הגעתי למצב שזה כל כך פופלארי? חלק מזה זה מה שתארתי עכשיו - לתת את המידע ב - ReadMe כך שיהיה מאוד קולע לצורך של הלקוח . . .
  • עשית את זה אינטואיטיבית, או שעשית איזשהו A/B testing? . . . אינטואיטיבית -  אני כבר הרבה שנים עושה פרויקטים בקוד פתוח וגם קורא מתוסכל של פרויקטים שבהם אני קורא וקורא והם לא מגיעים לנקודה, מנסה להבין מה זה עושה ולא מבין - כך שזה כבר “נכנס לי חזק למח” שצריך להגיד בצורה מאוד ברורה מהי הנקודה שאני פותר עבור המשתמש.

אז ReadMe מפתה” - מה עוד?
  • בעידן ה - GitHub, ה - ReadMe זה הדבר הראשון שאתה רואה כשאתה נכנס לעמוד של הפרויקט  -זה ה - homepage של הפרויקט.
  • פירסמתי לזה לינק ב-Hacker News  וב-Reddit, וגם בחרתי Tagline שמסביר את הפרויקט - PySnooper - Never use print for debugging again
    • נגעת בנקודה שכואבת להרבה אנשים, עצב חשוף . . .
  • דרך אגב - למה Snooper?
    • כי זה “מרחרח” את הפונקציה, מרחרח מה היא עושה . . . נו, שמות טובים זה קשה.
  • אז פירסמתי ב-Hacker News  וב-Reddit ואולי בעוד כמה מקומות . . . כשאתה מפרסם ב-Hacker News ובשאר האגרגטורים האלה - מיד בכניסה אתה רואה את הלינק עם הכי הרבה נקודות, כך שזה מעיין משהו ויראלי, ואתה צריך שהרבה אנשים יעשו לזה up-vote מהר.
    • פה יש עצה למי שרוצה להצליח כמו שאני הצלחתי, להגיע למקום מאוד גבוה - זה מתגלגל כמו כדור שלג, רק צריך להתחיל את זה קצת: כן צריך לשלוח את זה לכמה חברים שיעשו Up-vote, וחשוב שזה יהיה בכמה דקות הראשונות.
    • אם אני מפרסם משהו ב-Hacker News ורוצה שזה יהיה פופולארי, אני “משריין” כמה חברים שיהיו “מוכנים ל - Up-vote”, ואז מפרסם.
      • קצת כמו Product Hunt וכו’ - צריך “להכין קהל מראש” . . . כמה באמת?
      • 2-3, נגיד ש-4 זה מספיק, כי אתה צריך רק כמה דקות ב - Front Page ואז (אם הלינק שלך מעניין) ילחצו עליו עוד אנשים.
      • זה טוב שאי אפשר לרמות את המערכת עם יותר מ 3-4 אנשים - כל ה”לרמות את המערכת” שאפשר לעשות בשיטה הזו זה רק לקבל כמה דקות של חשיפה, כדי לראות האם יש לך באמת תוכן שמעניין.
      • טיפ “מאחורי הקלעים” למי שרוצה לנסות את זה - אם אתם מבקשים מחברים שלכם להצביע עבור הלינק שלכם, זה חשוב לא לשלוח להם ישירות את הלינק ב-Hacker News, אלא שהם יכנסו בעצמם בעצמם לעמוד הראשי - יש detection ל - Voting Rings ו”הם” (Hacker News) רואים את זה
      • זו דרך “לעקוף” את החסימה שלהם, לפחות עד שיחשבו על דרך יותר טובה או על משהו חדש שאני לא עוקב אחריו.

משם זה כבר זרם אוטומטית?
  • כן - משם כבר הכל ויראלי - ובכמה שלבים.
  • ב-Hacker News זה ניהיה ויראלי, אנשים מצביעים ואז זה עולה ל  -Front Page - ועוד אנשים מצביעים.
  • לאט-לאט זה התחיל להגיע לעמוד של ה - GitHub Tending - שם יש רשימה של כל ה  -Repos וכמה כוכבים הם קיבלו היום וכו’
  • כשאתה על ה - GitHub Tending Page, אנשים רואים אותך - והם נכנסים, ועושים עוד Star על ה - Repo שלך . . . ויראלי.
  • ואז פתאום אנשים עושים על זה Twit וזה יוצא מהידיים שלך ודברים “פשוט קורים”. Self-Enforcing.

אז ב-Hacker News זה מאורע של יום אחד? אחרי יום זה נגמר?
  • כן - אחרי יום, מקסימום יומיים אם יש לך לינק מטורף.
  • ב  - GitHub Tending זה גם יכול לקחת שבוע, אולי יותר? 
    • גם סדר גודל של יומיים, אבל מתחיל ב - Delay: ה - Peak מגיע אחרי זה של ה-Hacker News.

קיבלת דברים מעניינים בעקבות זה? פנו אליך אנשים? מצאת Use-cases מעניינים חדשים?
  • יש כבר די הרבה Contributors, עכשיו יש משהו כמו 15 על הפרויקט (18 נכון לעכשיו) - חלקם כתבו רק שורה אחת (עם שגיאה…) וחלקם כאלה שתיקנו מלא באגים והוסיפו פיצ’רים.
    • אחד מהם - אלכס מדרום אפריקה - כתב מלא פיצ’רים והוסיף מלא bug-fixes; זה כבר הגיע למצב שאם מישהו מדווח על באג - אלכס עונה לו, ואני רק בודק אח”כ שהכל נעשה כמו שצריך . . . מאוד יפה לראות את זה.
  • וה - Contribution ממשיך? הפרויקט עוד חי, או שאתה מרגיש כמו כוכב ריאליטי?
    • זה האט . . . לפני כמה ימים עשיתי Push של קוד לפרויקט, אבל זה האט בהרבה - ואני שמח.
    • אנשים הציעו עוד ועוד פיצ’רים - ורציתי לעצור את זה בשלב מסויים
    • כל הפרויקט נוצר בשביל אנשים ש”אין להם כוח ל - Debugger” - ואם אני אוסיף עוד ועוד פיצ’רים, בסוף זה יהיה Debugger, ואז מה עשיתי כאן? ... רציתי להישאר Lite.
    • יש פיצ’רים שאמרתי עליהם ש”זה לא שווה את זה - זה אמור להיות צעצוע קטן ולא משהו מטורף”. אני שמח שזה עצר.
  • יש איזשהו סוג של road-map לפרויקט הזה, או שהוא קטן וישאר קטן ופשוט?
    • קטן וישאר קטן ואמור להיות צעצוע . . . זה מה שהוא צריך להיות.
  • גם אלכס חושב ככה?
    • שאלה מצויינת . . . אלכס לא חושב ככה.
    • קצת שכנעתי אותו, אבל הוא התפתה לעשות Fork משל עצמו לפרויקט ושם הוא הכניס את כל הפיצ’רים שהוא רצה לעשות ואני לא הסכמתי (כי אני חושב שה - Maintenance burden שלהם יותר גדול ממה שהם שווים). הוא עשה בכל זאת.
    • הייתה בינינו שיחה שבא אמרתי לו שאלו פיצ’רים ממש איזוטריים - צריך לחשוב כמו משתמש רגיל, שרובם לא משתמשים בכל הפיצ’רים הכי קטנים.
    • אני חושב שהוא קצת הבין, כי מאוחר יותר מישהו הציע עוד פיצ’ר איזוטרי - ואלכס ענה לו שזה איזוטרי (דברים שרואים משם וכו’ . . .), אז נראה שנגעתי בחיים של בנאדם slightly smiling face

אז איך זה עובד ברמה הטכנית? אתה מעטר את הפונקציה (בחזרה לתורה) - ועכשיו הפונקציה רצה:
איך אתה יכול להדפיס את כל ההדפסות האלה?
  • התשובה היא  - רמאות . . .
  • כל ה - Debuggers ב-Python משתמשים בפונקציה של Python שנראית sys.set_trace, שהיא בעצם מה שעושה את כל הקסם מאחורי הקלעים
  • זו פונקציה שכשאתה קורא לה, אתה בעצם אומר - “מעכשיו, על כל שורה שרצה, דווחי לפונקציה שאני נותן לך עכשיו”
    • ואז על כל שורה שרצה, Python מדווחת - “עכשיו רצה שורה 7, הערך שחזר מהפונקציה הוא כך וכך” וכו’ - ואתה מחליט בלוגיקה שלך מה בדיוק זה עושה.
    • אם אתה כותב Debugger, הלוגיקה תיהיה משהו בסגנון “בוא נראה מה השורה שרצה, אם מישהו ביקש Break Point אז נעצור” וכו’.
    • אני לעומת זאת בודק מה השורה שרצה - ונראה האם היא בפונקציה שאני צריך להדפיס עליה דברים, ואם השתנה משהו מהפעם הקודמת נדפיס את זה.
  • אבל אתה צריך גם גישה ל - Source עצמו - וכיוון שזה Python אז יש לך . . .
    • נכון - בגלל שזה Python אז הכל מאוד גמיש ואתה יכול לבקש את ה  -source שלו ולקבל אותו ולהוציא את השורות קוד.
    • בגלל שזה Interpreter? כן . . . כיוון שזו שפה interpreted אז יש לך את הקוד - בשפות שהן מקומפלות את מקבל כל מיני Symbols וצריך איזשהו מיפוי בינם לבין ה - source, לעומת שפות שהן interpreted ואתה לא צריך את זה (Python, Ruby וכו’)
  • לאחרונה עשיתי פרויקט Open Source ב - Samsung Next, ויש שם איזשהו שרת שעובד עם Node.js.
    • באיזשהו שלב היו המון שגיאות ומלא באגים, ורצו שאבין מה העניין - ויש עמוד ב - SENTRY של השגיאה, אז הסתכלתי על ה - Local Variables.
    • אחד הדברים החזקים ב - SENTRY זה שכשאתה רואה דיווח על שגיאה, אתה רואה את ה - Stack trace השלם, ועל כל רמה ב - stack את רואה את ה - Local Variables - וזו דרך מאוד חזקה לראות מה קורה.
    • הפתיע אותי של - Node.js אין את זה . . . בגלל שזו שפה עם פחות Introspection, אתה לא יכול לקבל את כל הפירוט של הערכים המקומיים, וזה מקשה בטירוף על הבנת הבעיה.
    • אלו דברים שב- Python אני כבר לוקח כמובנים מאליהם, כי אני עובד עם זה כבר כל כך הרבה שנים, וזה קצת מטורף לחשוב על שפות שאין בהן את זה.

ובמעבר חד - צבים! רצינו עוד לדבר קצת על PythonTurtle - פרויקט מלפני 3-4 שנים . . .
  • לפני 10 שנים . . .אחד הפרויקטים הראשונים שלי, נא לא להתסכל בקוד slightly smiling face 
  • זו תוכנה לימודית, שעוזרת לילדים ללמוד לתכנת
  • בעצם - לקחתי את הקונספט הותיק של Logo משנות ה-80 (60, אבל לך תזכור) . . .
  • רגע, בוא נפתח את זה - למה הצב הוא משולש? אם קוראים לו צב, למה הוא חייב להיות משולש?!
    • אז זה אחד ההבדלים . . . אם בתוך Python עצמה מגיעה חבילה של Logo, אז הצב שם הוא משולש.
    • אני עשיתי את הגרסא שלי כ PythonTurtle - שזה כמו Logo אבל ל - Python - והצב הוא אשכרה ציור של צב!
    • מדהים איך למתכנתים יש חשיבה של מתכנת - הם חושבים טוב, הרי צב ומשולש זה אותו הדבר בעצם, ההבדל הוא רק גרפיקה על המסך אז מה ההבדל?! - שים את עצמך לרגע בראש של ילד - ילד לא חושב שצב ומשולש זה אותו דבר . . . חוסר היכולת של מתכנתים לשים את עצמם בראש של ילד משגע אותי.
    • כל זה - עד שהילד גדל ומגיע למילואים (ונורא מזה - לאתר המילואים) ומגלה שהצב בא עם משולש. אוי . . . כל זה היה בכלל הכנה לצו 8.
  • אוקיי - אז יש כבר משהו שבא Built-in ב- Python - מה אתה עשית?
    • עשיתי מעיין תוכנה ש”ארוזה יותר כ - Installer” . . . רגע, אולי לא כולם באמת מכירים את לוגו?
    • אז הקונספט של התוכנה הוא ללמד ילדים לתכנת - באמצעות צב שמופיע על המסך
    • לילדים יש Shell, ואפשר להגיד לצב למשל “התקדם 100” או “הסתובב 90” - והצב “הולך”, ומשאיר “שובל” (מעיין קו כזה..) - וזו דרך ללמד ילדים לתכנת בעקיפין.
      • “איך תעשה ריבוע?” - צריך ללכת בקו ישר ואז להסתובב 90 מעלות - ושוב, 4  פעמים - ויצרת ריבוע.
      • זו דרך ללמד אותם קונספט של לולאות ופונקציות ותנאים בצורה יותר גרפית ואינטואיטיבית - קונספט ישן ומוצלח שאני מיחזרתי, רק ב - Python.
    • מגיעה חבילה כזו עם Python עצמה, אבל היא מאוד בסיסית - ומאוד “בראש של מתכנת” ולא “בראש של ילד”.
    • אז עשיתי מעיין גרסא יותר “ידידותית למשתמש”, כזו שאפשר להתקין בקלות. זה היה לפני 10 שנים, כשהייתי מתכנת די מתחיל.
    • העלתי לאינטרנט בקוד פתוח, וזה מאוד התפרסם.
    • והשוס - לפני כמה שנים גיליתי שזה נכנס לתוכנית הלימודים של ערב הסעודית.
    • ומשם כ… רגע - מה?
    • בכל בתי הספר בערב הסעודית (לפחות אז) השתמשו ב - PythonTurtle כדי ללמד ילדים לתכנת.
      • “רם” נשמע כמו שם בערבית? אולי הודי? לא ברור.
    • איך בכלל הגעת לזה? יש Mailing list לפרויקט, שבו אנשים שואלים שאלות ואני עונה להם - ובמשך כמה שנים שמתי לב לכך שיש הרבה שמות ערביים.
      • באיזשהו שלב דיברתי קצת עם אנשים, ושאלתי איך זה שיש כל הרבה משתמשים ערביים בקבוצה - ואז הבנתי שהרבה מהאנשים שאני מדבר איתם הם מורים בערב הסעודית, שאמרו שמשתמשים בתוכנה בכל בתי הספר שם.
      • אף אחד ממשרד החינוך של ערב הסעודית לא שלח מייל, או הזמין לנאום בפני תלמידים. עדיין, בכל אופן. 
      • מטורף האינטרנט הזה.

היום בבתי ספר - לומדים Logo? יש צב?
  • יש הרבה דברים אחרים - Code Monkey ו - Scratch למשל - אבל יש Logo?
  • רן ישב עם הבת שלו לפני שנה לצייר - מאז שהייתי (רן) ילד מישהו בכלל השתמש בזה?
    • בערב הסעודית נראה שכן . . .
  • כשהייתי ילד (רם) ומשתמש ב-Logo, הייתי פותח את התוכנה עם הצב, והייתי משתמש גם כשאף אחד לא ידע להדריך אותי - סתם על המחשב של ההורים. ידעתי שזה קשור לתכנות אז כתבתי “תעשה לי משחק” ב- Shell - וזה לא עשה את זה. וזה מאוד תסכל אותי, המסך השחור הזה. 
  • מדהים כמה שזה היה מתסכל - וכמה זה כיף לפתור את החידה הזו בסוף.

אז הגענו לסוף - יש עוד משהו?
  • כן - אני מעביר הדרכות Python מדי פעם בחברות, מגיע ללמד Python למתחילים או למתקדמים - אם מישהו מעוניין להדרכה לצוות שלו - צרו קשר ב - ram@rachum.com
  • השפה עצמה - או גם פיתוח Web? גם וגם - הדרכות של 3-7 ימים, תלוי בכמה הלקוח רוצה להתעמק

חוץ מזה - Python הפכה למאוד חזקה סביב Data Science - זה גם משהו שאתה עושה?
  • לא . . . פחות חזק בזה. קצת שיחקנו עם זה, אבל לא מספיק טוב בכדי להדריך.

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