MeCoder הכניסה לעולם התכנות


איך להתאמן בתכנות באינטרנט? - פרק ב'

weight-lifting in a gym

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

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

  1. תכנון הקוד הינו החלק החשוב ביותר, אשר יקצר משמעותית את שני השלבים הבאים, ככל שתתכנו יותר, תחשבו על כל המקרים ותגובות, תלמדו נושאים ופתרונות חדשים ורלוונטיים, כל זאת בטרם תכתבו מילת קוד אחת!... כך תחסכו לכם המון זמן בכתיבת הקוד ובתיקוני באגים. בעיניי זהו השלב המעניין ביותר, בו אתם סופגים עוד ועוד, מנסים לפרק את הלוגיקה של הקוד ולתכנן אותו בצורה הטובה ביותר כך שגם יעבוד בצורה אופטימלית, גם יהיה קל לשנות אותו ולהוסיף לו פיצ'רים נוספים, וגם שיהיה קל למישהו אחר לקרוא אותו ולהבין מה לעזאזל עשיתם?!?!
  2. השלב השני בו אתם כותבים את הקוד הוא תוצר של השלב הראשון, אתם פשוט מיישמים את מה שתכננתם – את הלוגיקות והמבנה בעזרת כלי העבודה שצברתם לאורך השנים והכלים החדשים שלמדתם בשלב הראשון. זהו שלב הנגינה, בו בהרבה מקרים הקוד פשוט נשפך החוצה מכם. אני אוהב לשמוע מוזיקה עם קצב גבוה בשלב זה, קצת כמו כשרצים, נכנס למוד מדיטטיבי בו המוח שלי ממוקד רק בכאן ועכשיו ויורה את הקוד כמו מיתרים עליהם אני פורט. טוב, אני קצת פלצן, אני יודע... אבל ככה זה מרגיש לי :-) וזה עובד לי.
  3. השלב האחרון הוא תיקון הקוד – או בשמו debugging. זהו, בלי שום ספק, השלב הפחות אהוב על מתכנתים, ואני מאוד עדין בבחירת המילים שלי. תבינו, כתיבת מספר שורות קוד בצורה מדויקת ונכונה שעונה על כל התרחישים האפשריים זה לא דבר מסובך. אבל ברגע שנוצרות הרבה תלויות בין חלקי קוד שונים, או ברגע שהלקוח מחליט לשנות דברים קטנים תוך כדי עבודה או... או... או.... יש הרבה "או"ים כאלה, אבל ה"או" האחרון הוא– או שפשוט עשינו טעות, אז בכל ה"או"ים הללו נוצר באג בתוכנה, באג אותו נצטרך לתקן. תהליך תיקון הבאג שונה במהות מכל שאר השלבים, הוא דורש הבנה של מה התרחש לא נכון, ניתוח של מה יכול להוביל לטעות, חיתוך הקוד ובדיקתו בנקודות שונות, הכל כדי להבין את הטעות ולתקן אותה. אני בטוח שאכתוב על כך מאמר בהמשך שירחיב על שיטות ל-debugging כמו גם על שיטות למניעת באגים, אבל לעת עתה זה יספיק.

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

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

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

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

אז יאללה, מאיפה מתחילים ומה עושים? כנסו ל- stackoverflow ותלחצו על sign up בסרגל הניווט שנמצא בראש הדף. אתם יכולים להירשם בקלות דרך פייסבוק או בקלות דרך הזנת שם, מייל וסיסמא. לא לדאוג, המייל שלכם לא חשוף למשתמשים אחרים. תסיימו את כל הליך ההרשמה ותגיעו לעמוד הבית, אשר הוא הפיד של כל השאלות הנשאלות. עכשיו אפשר להתחיל! טוב, כמעט... תעשו קודם את הסיור המודרך שלהם ותבינו איך שואלים שאלות ואיך מעלים תשובות. הקהילה שם לא סבלנית במיוחד לאנשים שלא כותבים לפי החוקים. אל דאגה, כשתרצו להעלות את התשובה הראשונה שלכם, המערכת תזכיר לכם את החוקים. סיימתם את הסיור? תלחצו על הכפתור see new questions או שפשוט תלחצו על כפתור הבית.

כל השאלות מתויגות לפי נושאים ושפות תכנות, כאשר רוב השאלות מתויגות לפי מספר נושאים. לדוגמא שאלה הנוגעת לקוד javascript שנועד לשנות עיצוב בדף html, סביר להניח שתכלול את התגים – css, html ו-javascript. אז בואו נלך למצוא שאלות קלות בנושא CSS. תלחצו על 'Tags' שבחלק העליון של הדף, כעת יופיעו המון תגים שונים וכן סרגל חיפוש. תרשמו בו 'CSS' ותבחרו את התג המתאים. כעת יופיעו כל השאלות עם תג CSS בסדר כרונולוגי מהחדש לישן. כנסו לשאלה ותנסו לעזור למתכנת בצרה.

בהצלחה!