טיפ גיט: מעיכת קומיטים
נתקעתם עם ענף שיש בו יותר מדי שינויים ואתם פשוט צריכים לקחת את כל הקוד משם בתור קומיט יחיד אליכם לעץ? ככה תוכלו להשתמש ב merge squash כדי לעשות בדיוק את זה.
טיפים קצרים וחדשות למתכנתים
נתקעתם עם ענף שיש בו יותר מדי שינויים ואתם פשוט צריכים לקחת את כל הקוד משם בתור קומיט יחיד אליכם לעץ? ככה תוכלו להשתמש ב merge squash כדי לעשות בדיוק את זה.
כשעוד היה מותר לימדתי קורס Front End באיזו חברת הייטק. שולחן המחשב של המדריך שם היה יחסית צפוף ובלי לשים לב באחד ההסברים של אחרי-ארוחת-צהריים הזזתי את היד לא טוב וכוס קפה שלמה נפלה לי מהשולחן על הלפטופ.
עכשיו המק שממש לא ראה את זה בא דווקא הגיב בנונשלנטיות מפתיעה. אחרי ניגוב קטן של המקשים הוא המשיך לעבוד, הריץ את כל התוכניות שכתבתי ואת השקפים ולא הראה שום סימן למעגלים החשמליים שנשרפים אצלו בבטן. אני, שידעתי עמוק בלב שעדיף לכבות מכשיר חשמלי שהתרטב ולתת לו להתייבש (אפילו לקחת למעבדה), לא העזתי לסיים את היום מוקדם רק בגלל כוס קפה, ובטח ובטח כשהמחשב עדיין מגיב. במעבדה למחרת כבר ידעו להגיד שהמחשב הוא טוטאל לוס, ושממש חבל שלא סגרתי אותו באותו רגע ובאתי אליהם מיד, כי אז עוד יכלו להציל אותו.
וכמו באותו קורס גם היום אני רואה מערכות תוכנה הרבה יותר מורכבות אפילו מהמקבוק שהרסתי, סופגות ברוגע כוס קפה וירטואלית (מה שמכונה "שים קצת מסקנטייפ רק שיעבוד בדמו") וממשיכות לתפקד - לפעמים עד הדמו, לפעמים גם הרבה אחרי. כל אותו הזמן אנחנו יודעים שעדיף היה לעצור ל Refactoring, אבל רק לעתים נדירות מוצאים את האומץ לעצור לפני שנהיה מאוחר מדי.
אנחנו יודעים שהרבה יותר קל ללמוד טכנולוגיה חדשה כשאנחנו עובדים על פרויקט אמיתי בטכנולוגיה זו. אבל אנחנו גם יודעים שברוב מקומות העבודה לא יתנו לכם להתחיל פרויקט בטכנולוגיה שאתם לא מכירים על חשבון שעות העבודה רק בשביל ללמוד אותה. אם בחברה שלכם עובדים היום ב Java ואתם רוצים לשכנע את הבוס לכתוב סרביס קטן ב Node.JS רק בשביל ללמוד Node זה הולך להיות שכנוע קשה.
מצד שני עם כל העבודה מהבית והסגרים ברוב מקומות העבודה יש לכם היום יותר חופש פעולה ממה שאי פעם היה. אם תצליחו לקום שעה קודם לתכנת בנוסף לעבודה המופלאה שאתם עושים ביום יום, תוכלו לכתוב בשעה הזו כל מה שאתם רוצים.
וכאן מתחיל הקסם- אם בשעה נוספת של עבודה למשך חודש אתם יכולים לבנות משהו שאנשים ישתמשו בו, אז החל מהחודש השני אתם כבר תהיו המתחזקים של פרויקט פנימי בחברה ותוכלו לקבל זמן עבודה אמיתי לשפר את הפרויקט שלכם. לאט לאט כשהפרויקט יגדל גם הבוס ירגיש יותר בנוח לתת לכם לבנות רכיבים נוספים בטכנולוגיה זו ובלי לשים לב אתם כבר בשליש משרה מתכנתי Node.JS.
שורת פתיחה טובה זה לפעמים כל מה שצריך בשביל לעשות שינוי גדול. כמו אצל סיימון וגרפינקל, רק בקוד:
אם אתם שולחים קורות חיים ולא מקבלים זימונים לראיונות יכול להיות שהסיבה היא שהמעסיקים הפוטנציאליים שמקבלים את קורות החיים לא מוצאים בהם את תשובות מספקות ל-3 שאלות פשוטות שמעניינות אותם:
האם אתם מסוגלים לבנות מוצר עובד בטכנולוגיה שרלוונטית להם?
האם הקוד שלכם יסבך לאחרים את החיים?
האם אתם הולכים להשקיע בעבודה לאורך זמן?
כל שאלה נפתחת להמון סימנים קטנים שאנחנו מחפשים בקורות חיים - לדוגמה אנשים שמחליפים עבודות לעתים תכופות או שגרים רחוק נתפסים בתור כאלה שלא יצליחו להשקיע במשרה לאורך זמן.
אנשים שאין להם ניסיון בטכנולוגיה הרלוונטית או בטכנולוגיות דומות, או שאנחנו לא רואים עקומת למידה ברשימת המשרות שלהם, נתפסים בתור כאלה שלא יצליחו לבנות מוצר עובד בטכנולוגיה הרלוונטית.
ואנשים שעושים טעויות מטופשות, לא מטפלים טוב במקרי קצה, משאירים קוד שיתמוטט כשיהיו יותר משתמשים, לא כותבים תיעוד כמו שצריך ולא בונים בדיקות אוטומטיות לקוד שלהם נתפסים בתור כאלה שהקוד שלהם הולך לסבך את האחרים.
רוצים לשפר את הסיכויים שלכם לקבל ראיון? לפני שאתם שולחים קורות חיים למשרה הבאה נסו להסתכל על המסמך מנקודת מבט של המגייס ובידקו איזה תשובות אתם מצליחים לתת לשלושת השאלות מקריאת מסמך קורות החיים שאתם רוצים לשלוח. אם התשובות לא מספיק טובות, עדכנו את המסמך עד שתהיו מרוצים.
מערכת האירועים של tk יכולה להיות קצת מבלבלת בעיקר בגלל סוגי האירועים המובנית והשימוש בטקסטים כדי לתאר אירועים (ובגלל שהתיעוד של tk לא הכי נוח לקריאה). אז לטובת אלה מכם שמסתבכים ובעקבות שאלה של תלמיד, הנה כמה דוגמאות קוד לעבודה עם לחיצות מקלדת בתוכנית tk.
הרבה מדברים בעידן הקורונה על הקסם בלמידה עצמית, על איך שלמידה מרחוק צריכה להיות יותר אסינכרונית, ובמיוחד בהקשר הבית ספרי על כמה זה נפלא כשתלמידים מסתדרים בקבוצות וחוקרים ומגלים יחד רעיונות חדשים. נדמה לפעמים שהאנשים האלה אף פעם לא היו תלמידים או שלא ראו תלמידים מקרוב.
למידה עצמית אסינכרונית היא הדרך היחידה להקנות מיומנות בצורה שמאפשרת התפתחות. ההתמודדות האישית של כל תלמיד עם החסמים והאתגרים האישיים שלו בקבוצה עם תלמידים אחרים שתומכים בו ומורה שמקדם אותם ונותן פידבק על העשיה היא תהליך אותו תלמידים יצטרכו להטמיע לקראת היום בו יהיו אנשים בוגרים שצריכים להסתדר בשוק העבודה. אבל אל תטעו - בשביל לתת לתלמידים כלים טובים ללמידה צריך להיות מוכנים גם לחיות עם הצד האפל של הלמידה העצמית והאסינכרונית. הנה כמה דברים שתלמידים יעשו כשניתן להם יותר אחריות על הלמידה שלהם:
פרויקטים רבים היום משתמשים בחבילות חיצוניות ובמיוחד בחבילות חיצוניות בקוד פתוח. בעבודה עם חבילות חיצוניות יש חשיבות לגירסאות ולמספרי הגירסה של אותן חבילות:
אם יש תיקון אבטחה או תיקון באג קריטי שלא שובר שום דבר אחר אנחנו רוצים לקבל אותו אלינו למערכת
אם יש שיפור שכולל שינוי ממשק או שינויים ששוברים קוד ישן, אנחנו עדיין רוצים לקבל אותו אלינו למערכת אבל בזהירות וכשיש לנו זמן.
מנגנוני ניהול החבילות בשפות השונות מתמודדים עם ההבדל בין שני סוגי השדרוגים באמצעות "נעילת" חבילות. אנחנו נועלים חבילה לגירסה ראשית מסוימת בעת ההתקנה, ואז כל פעם שנריץ פקודת עדכון נקבל רק עדכונים של גירסאות "קטנות", ובשביל לעדכן לגירסה ראשית חדשה יש להיכנס ידנית לקובץ התלויות ולשנות את הערכים בו.
מדי פעם (כן זה נדיר אני יודע) יהיו לנו כמה ימים בין פיצ'רים כדי לשדרג את כל התשתיות של הפרויקט. עבור הימים האלה ובעזרת כלים מיוחדים, תוכלו במכה אחת לשדרג את כל הספריות שיש להן גירסה ראשית חדשה, במכה אחת ולהכניס את עצמכם למערבולת של תיקונים והתאמות לעולם החדש. בואו נראה איך עושים את זה ב Ruby, Python ו Node.JS
שאלת פייתון קצרה שהגיעה אליי היתה "איך אני עוברת על כמה רשימות במקביל וכל פעם לוקחת איבר מרשימה אחרת?". לפני שארוץ לענות עם zip של פייתון בואו נלך לבנות לבד את הפיתרון כדי להבין את האתגרים.
בין הסיבות שאנשים מוצאים כדי ללמוד טכנולוגיה חדשה יש לנו:
כדי להתקבל לעבודה.
כי במקום העבודה התחילו פרויקט בטכנולוגיה זו.
כדי להשתלב בפרויקט בטכנולוגיה זו בעבודה.
כי יש ציור של חד-קרן בדף הבית.
כי כל החברים שלי מדברים על זה.
כי כולם ברדיט מדברים על זה.
כי אני חושב שזה יעזור לי להיות מתכנת טוב יותר.
שווה לשים לב שמוטיבציות שונות מעוררות רגשות שונים במהלך הלימוד ויכולות להשפיע על התוצאה. להרבה אנשים יהיה מאוד קל ללמוד טכנולוגיה חדשה אם מעבירים אותם לצוות שעובד בטכנולוגיה זו, ומאוד קשה ללמוד טכנולוגיה חדשה אם רק קראנו עליה ברדיט.
(וזה לא קשור לזמן פנוי. אנשים יכולים לשבת בבית חודשים ולחפש עבודה אבל יתחילו ללמוד ברצינות את הטכנולוגיה רק כשבאמת ייכנסו לעבודה על פרויקט ספציפי בטכנולוגיה זו).
אלה חדשות מעולות - כי זה אומר שיש לנו את היכולת ללמוד טכנולוגיות בצורה טובה ולעומק. עכשיו רק צריך לבנות את הסיפור שייתן לנו את המוטיבציה להתקדם לשם.
אחד הפרדוקסים המעניינים של לימודים קורה כשאני מנסה ללמוד חומר שהוא לא בליגה שלי. לדוגמה היתה לי תלמידה שבקושי הצליחה לכתוב תרגילי FizzBuzz פשוטים אבל סיפרה שלפני שהגיעה אליי היא היתה בקורס בו היא כתבה שרת ווב להעברת אימייל שכלל קוד Front End, קוד Back End והתממשקות עם SMTP.
איך אפשר לכתוב קוד כל כך מתוחכם בקורס אחד, ולא להצליח לכתוב דברים מאוד פשוטים בקורס אחר?
התשובה ברורה לכל מי שכתב קוד לפי מדריך. קוד הוא בסך הכל אוסף של תווים, ואין שום בעיה להסתכל בוידאו של מישהו שמסביר משהו, להעתיק אות אחרי אות את הקוד וקיבלת את התוכנית המתוחכמת שהראו בוידאו. הרבה פעמים אחרי צפיה והקלדה כאלה אנחנו אפילו בטוחים שהבנו הכל ושאנחנו מוכנים להמשיך לכתוב קוד מהנקודה בה הוידאו הפסיק. ואז כשדברים לא עובדים אנחנו בטוחים שפשוט צריך עוד קורס או שהמדריך לא היה מספיק טוב.
אם אתם צריכים אינדיקציה פשוטה לזה שאתם צופים בחומר שמתאים לרמה שלכם אפשר להסתכל על זמן הצפיה לעומת זמן הכתיבה והעיבוד שאחרי. בצפיה בחומר לימודי ברמה שלי, על כל שעה של וידאו יהיו לי בערך 8 שעות עבודה עצמית שאוכל לעשות איתו, לפעמים גם יותר. זה אומר שאם ראיתי וידאו של שעה על PyTest - אז עכשיו יש לי לפחות יום עבודה שלם לבלות עם הספריה ולכתוב טסטים לקוד שלי. הפרדוקס כאן הוא שככל שאני "מבין" יותר מהר את הוידאו ובעצם יש לי פחות שאלות עליו, ככה זה אומר שאני מסתכל על תוכן שהוא לא בליגה שלי ושאני בעצם מבין אותו הרבה פחות טוב ממה שאני חושב (ואנחנו כבר יודעים שבתכנות פערי הבנה מתגלים בסוף. אי אפשר לעבוד על המחשב).