עם מקורותיה ב-NeXT, Big Nerd Ranch היא אחת מחברות פיתוח אפליקציות iOS הנחשבות יותר בעולם. בריטריט קידוד שנערך לאחרונה על ידי BNR, שרדתי שבעה ימים מהוראת התכנות האינטנסיבית ביותר בחיי, וחייתי כדי לכתוב על זה.
אחרי שהודיעה אפלסוויפט 2.0ב-WWDC ביוני האחרון, הבנתי שהוא רכש הרבה יותר תמיכה והתייצב פחות או יותר כשפה. הייתי צריך ללמוד את זה מהר אם אני רוצה ללמד עם זה iOS בספטמבר, אז נרשמתי לשבוע של לימוד iOS עם Swift ב-Big Nerd Ranch'sמיקום החוף המערבי במגרשי הכנסים Asilomar ב-Pacific Grove, קליפורניה.
בשבת שהגעתי, פגשתי את המדריך שלנו, סקוט ריצ'י, עובד לשעבר של NeXT ואפל ואשף Cocoa/Cocoa Touch שעושה גם הדרכה ארגונית לחברות כמו פייסבוק וגוגל. גיליתי שהוא יוצא דופן, אישי ומצחיק להפליא. הוא אפילו הביא את הגיטרה שלו, הוא אמר לנו, לזמני המעבדה שלנו בלילה אם אי פעם רק רצינו להירגע מכמות הקוד המטורפת שבסופו של דבר כתבנו. נקודות מגניבות עיקריות. לאחר שהסתובבתי עם הכיתה על החוף לזמן השבתה לפני השיעור, פניתי ללילה כדי לנוח קצת לקראת השבוע החינוכי האינטנסיבי ביותר בחיי. למרבה המזל, מקומות הלינה באסילומאר הם כפריים, אך נקיים, נוחים ושקטים יחסית.
מכיוון שכבר קראנו את שמונת הפרקים הראשונים של משימת קדם הקריאה העוסקים בסוגים בסיסיים ובקרת תוכניות, היומיים הראשונים הוקדשו להבנת ההיבטים המורכבים יותר של סוויפט: אופציונליים, מערכים, מילונים, סטים, פונקציות, סגירות, ספירות, מבנים ומחלקות, מאפיינים, אתחול, פרוטוקולים, הרחבות, כלליות וספירת אסמכתאות אוטומטית.
מיותר לציין שמחוץ להקשר של iOS מפורש, היומיים הראשונים כללו הרבה הדרכת שפה מופשטת למדי, אבל ככל שפות התכנות הולכות, סוויפט מביאה איתה כמה תכונות שמאפשרות קוד בטוח יותר, אמין יותר וניתן לשימוש חוזר. לדוגמה, לפעמים ייתכן שיהיה צורך להגדיר ערך ל"אפס" (בעצם, ללא ערך) כמו כאשר תווית מוצגת לראשונה על מסך אייפון. אופציות הן תכונה של Swift המאפשרת למתכנתים לדעת מתי ערך לא החזיר ערך. ב-Objective-C, לא הייתה דרך לתוכנית לזהות זאת, מכיוון שהודעות יכלו להחזיר אפס ולהמשיך לפעול.
Swift הופכת את הקוד לבטוח יותר בכך שהיא דורשת שלכל המשתנים יהיו ערכים בעת האתחול, ויכולה להנחות מתכנתים מתי חוסר ערך עשוי להוות בעיה במקום להסתיר אותו כבאג פוטנציאלי לתיקון בהמשך הדרך.
Swift הופכת את הקוד לבטוח יותר בכך שהיא דורשת שלכל המשתנים יהיו ערכים בעת האתחול, ויכולה להנחות מתכנתים מתי חוסר ערך עשוי להוות בעיה במקום להסתיר אותו כבאג פוטנציאלי לתיקון בהמשך הדרך. בנוסף, Objective-C לא אפשרה ירושה מרובה (כאשר מחלקה אחת יורשת ממספר מחלקות אחרות). בסוויפט, מחלקות וסוגים אחרים יכולים להתאים לפרוטוקולים מרובים (שיכולים בעצמם לרשת מפרוטוקולים אחרים ולהרחיב את הפונקציונליות שלהם).
מתכונת הכיתה כללה שסקוט העביר אותנו דרך קונספט עם כמה שקופיות, ואז נתן לנו קצת זמן לקוד את הדוגמאות בפרק. זה לא אומר לקרוא את הפרק, אלא פשוט להקליד את הקוד לדוגמה. עשיתי את הטעות כשניסיתי לקרוא את הפרקים תוך כדי קידוד ונקלעתי לפיגור די מהר. בהתאם לאורך הפרק, היו בערך 20-30 דקות לקוד את הדוגמאות. ככל שהתקדמנו, טווח הזמן הפך פחות ופחות מספיק ככל שהוצגו נושאים חדשים ללא קשר לשאלה אם כולם סיימו את הקידוד או לא.
עם זאת, כשסקוט נוכח לענות על כל שאלה, זו לא הייתה בעיה כמו שחשבתי בתחילה. המצגות שלו היו ברורות ותמציתיות, והוא הפך מושגים קשים לפעמים לקלים להבנה עם דוגמאות והמחשות נהדרות. לא ממש הרווחתי כל כך מהיום השני של ההוראה כי בסביבות 9 בבוקר באותו בוקר קיבלתי הודעה שליאפליקציה(שעבדתי עליה ב-3 השנים הקודמות) נכנסו לביקורת, אז זה היה בראש שלי כל היום. ואז, באותו אחר הצהריים, קיבלתי הודעה שזה אושר ל-App Store, כך שזה די שלט בחשיבה שלי לשארית הלילה במהלך המעבדה.
עם יומיים של סוויפט תחת החגורה, התחלנו את רכיב iOS של הקורס ביום שלישי, והוא רץ עד סוף הקורס ביום שישי. התחלנו בבניית אפליקציית חידון פשוטה מאפס, וב"מאפס" אני לא מתכוון לתבנית צפייה אחת ב-Xcode. מבחינה היסטורית, BNR מעדיף לבנות אפליקציות מהיסוד, החל מיצירת UIWindow בקובץ App Delegate. עבור שאינם מקודדים, זה אומר במקום להשתמש בתכונת "Storyboards" הנוחה של Xcode המאפשרת למשתמשים לשרשר קבצי XIB יחדיו בחלונית עריכה אחת. סקוט עשה עבודה מצוינת ללמד את הפרק הזה, ותוך דקות בניתי אפליקציית חידון משלי, מעצמות.
מאפליקציית חידון בנינו אפליקציית סרגל כרטיסיות מתקדמת יותר שהשתמשה בכיתה CGRect וב-UIPickerView ולאחר מכן עברנו לאפליקציית UITableView מעורבת יותר שכללה דף פרטים שאפשר לערוך את הפריטים יחד עם תמונה שצולמה מהמצלמה או מספריית התמונות . בהמשך השבוע השתמשנו ב- Storyboards כדי ליצור אפליקציית ColorPalette שהשתמשה במחלקה UISlider כדי לשנות ערכי RGB בבקר התצוגה.
סיקרנו גם טיפול באירועי מגע, מזהי מחוות, בקרי תפריטים ותצוגות אוסף. האחרון שבהם שימש ליצירת אפליקציית Photorama שהביאה נתונים מ-Flickr API כדי לאכלס תצוגת אוסף של תמונות. בלילה היינו ממשיכים בקידוד במעבדה ולפעמים לוקחים הפסקה כדי לתפוס את השקיעה על החוף.
עד סוף השבוע, נעשיתי די נוח לבנות אפליקציית חידון פשוטה מאפס, תוך שימוש בדפוסי עיצוב שנלמדו במהלך השבוע. יצרתי גם כמה קשרים מועילים עם תלמידים אחרים שהיו מרקע ודרגות שונות של ניסיון בבניית אפליקציות iOS. אני חושב שזה היה החלק הכי טוב של השבוע כולו; האווירה הסוחפת שמציעה Big Nerd Ranch למפתחי iOS מתחילים. דיונים מאולתרים, שאלות ותשובות של מדריכים וזמן משותף לדיון בשאיפות, בדאגות ובחלומות שלנו, כולם שימשו להפוך את שבעת הימים שלי באסילומאר לשבוע התכנות הטוב בחיי.
אני ממליץ בחום על Big Nerd Ranch לכל מי שבאמת רוצה ללמוד לעומק את מלאכת בניית האפליקציות ל-iOS.