מאיפה בא הרעיון של להקים את הקורס הזה ומה מטרותיו: אני ביום יום שלי בצוות עובד עם כמה צוותים וגורמים שונים של החט"ל, כולם באים מרקע של מהנדסים/פיזיקאים/תכוניתנים שחורים. האוכלוסייה הזו, שאליה מיועד הקורס זו אוכלוסיה שלא למדה פיתוח קוד נכון בשום שלב. האנשים שהצוות שלי עובד איתם בתחילת הדרך לא היו עם גיט, היה להם קוד לא ברור ברמות והיה מאוד קשה לעבוד איתם. מאז, דחפנו אותם לעבוד על כתיבת קוד באופן נכון יותר, וזה ממש הקל על העבודה איתם. ההנחה בבניית הקורס היא שהמון אנשים בחט"ל הם כאלה; מהנדסים פיזיקאים ומתמטיקאים שאין להם ניסיון אקדמי אמיתי בכתיבת קוד נכון. אז המטרות העיקריות של הקורס הן: 1. למנוע קוד עברייני, מכוער, לא ברור, לא מדולרי ולא יעיל 2. ללמד עבודה נכונה בסביבת פיתוח קוד מרובה אנשים, שרינג נכון, ניהול גרסאות קצת לוגיסטיקה: מתי? כנראה בחצי השני של 2023, תאריך עוד לא סגור איפה? כנראה בחדר הקורסים של תל השומר (משמע שנצטרך להעביר אותו על רשת הארמי, שעלול להיות מאתגר), הבנתי שאולי תיהיה האופציה להעביר את זה בסביבה אזרחית בג'ון ברייס (באישור בסמ"ח), אני עובד על לברר את האופציה הזו, בנתיים סביר להניח שזה יהיה בתל השומר. משך? הקורס ימשך שבוע (5 ימים) אז מה הלאה: יבחרו מכאן 4 אנשים (5 ביחד איתי) שיהיו הסגל של הקורס ויקבלו עליו גמו"ש, התכנון הוא שעל כל אחד מהימים של הקורס אחראי להעביר ולהכין חומרים והרצאות אדם אחד בפגישה עברנו על המערכת שהכנתי והסברתי מה חשבתי שכדאי שנעשה בכל אחד מן הימים: מבוא לפייתון - כפי שאמרתי, הקורס מיועד לאנשים שכן מתכנתים ביום יום שלהם וכן יש להם רקע בתכנות בשפה מונחת עצמים כלשהיא (בין אם זה פייטון או ג'אווה או C++), מטרת השיעור הזה היא להכיר להם את הסטינקס כדי שיוכלו להבין את הדוגמאות אורך הקורס (שכמובן יהיו גם הן בפייתון) המעבדה בחלק הזה אמורה להיות תרגילים קלאסיים של קורס תכנות בתואר: "כתבו פונקציה שמקבלת ... " הוצע להפריד את המעבדה הזו לשני מעבדות שונות, אחת אחרי החלק הראשון של המבוא לפייתון ואחת אחרי החלק השני של המבוא. קלין קוד, תכנות מונחה עצמים - הכוונה היא ללמד עקרונות בסיסיים כמו שמות משתנים מובנים והגיוניים, מג'יק נאמברז, פונקציות קטנות שעושות דבר אחד, שאין להן סייד אפקטס, קומנטים. בתכנות מונחה עצמים הכוונה להסביר על פולימורפיזם, אנקפסולציה, על עקרונות SOLID. חשוב מאוד בחלק הזה להביא דוגמאות קוד אמיתיות, לא משהו מטומטם כמו class Vehicle ו class Car(Vehicle), ממש להראות שני דוגמאות קוד, אחת שעוקבת אחרי העקרונות ואחת שלא. דיבוג וטסטינג - להראות להם בתוך הפייצ'ארם איך מדבגים נכון, ברייקפוינטים וכו. יותר פוקוס בהרצאה הזו על טסטים - על הסוגים שלהם, איך כותבים אותם נכון וכמובן דוגמה על איך כותבים אותם בפייטון. מעבדה שקשורה להרצאה הזו אמורה להיות קטע קוד שמכיל באג - לדבג אותו ביחד ולהבין מה הבעיה ואז לכתוב טסטים שיבטיחו שבאג כזה לא יקרה שוב בעתיד. משאבים, אופטימיזציה , יעילות, פרופיילינג - דיבור בקצרה על CPU, RAM, GPU, להסביר איטואיטיבית את הרעיון של סדרי גודל זמן, O(n), אין צורך להכנס להגדרה. פרופיילינג - להראות להם ממש איך זה נראה בפייצ'ארם כלומר להריץ קטע קוד ולראות איזה מהפונקציות לוקחת הרבה זמן והיא הצוואר בקבוק בעצם. אופטימיזציה - להראות SIDE BY SIDE קטעי קוד שאחד יותר מהיר מהשני, באין אם מדובר בסדר גודל ובין אם מדובר בשורות קוד לא יעילות שאפשר להחליף אותן במשהו יותר טוב. ת'רדינג, מולטיפרוססינג - ההבדל ביניהם מבחינת ניצולת משאבים נכונה, ההבדל בין וירטואל ופיזיקל ת'רדס, ניהול זיכרון משותף (בקונספט) בין הת'רדים, דוגמת פייטון לאיך זה נראה. מעבדה - לתת דוגמאות קוד לאנשים שיוכלו להריץ ולנסות להאיץ - (לא נאמר בפגישה אבל חשבתי אולי כאן לתת קוד בייס מאוד גדול, להריץ אותו עם פרופיילר, לראות שיש פונקציה אחת ספציפית שלוקחת המון זמן וליעל אותה, נניח יש פונקציה עם sleep(0.5) סתם , פונקציה אחרת סתם עושה O(n^2) וכו. מבוא לבאש - מאוד בסיסי, ls cpy cm mv grep find, המטרה היא שיוכלו אחר כך להשתמש בידע הזה בשיעורים הבאים (כגון git). חבילות שימושיות, פיפ, ניהול גרסאות, מודולים ופקג'ים - אמנם חשוב אבל קשה לעשות שיעור כזה שיכיל עקרונות שהם לא רק לפייתון, הוצע לשלב אותו בתוך השיעורים הראשונים של מבוא לפייתון. גיט - החלק כנראה הכי חשוב בקורס, הסברים על הרעיון של גיט, יחולק לשניים: - על איך עובדים מול הrepo הלוקאלי, commit push pull, branch stash וכו - איך עובדים מול הrepo הremote, ואיך עובדים בקבוצה, merge, merge requests, issueים. סדר עבודה בקבוצה, ניהול CRים. המעבדה כאן תורכב משני חלקים - חלק ראשון יהיה CR קבוצתי - יוקרן על המסך קוד ואנשים יצטרכו לעשות CR ביחד עליו. חלק שני יהיה תרגיל מודרך של דחיפה לגיט, קונפליקטים ומרג'ים מכאן מגיעים הרבה נושאים שאני לא בטוח שצריכים להיכנס לקורס בכלל: - תקשורת בסיסית - סוקטים, קליינט סרבר בסיסי, דוגמאות קוד של העברת הודעות בין הסרבר לקליינט, דיבור בקצרה על איך זה עובד מאחורי הקלעים (IP PORT) מעבדה בנושא זה בשילוב הנושא של threads, לבנות סרבר פשוט מרובה קליינטים - סקיילינג - אז כתבנו קוד שעובד יפה על המחשב לוקאלית, עכשיו אנחנו צריכים לתת לעוד יוזרים לרוץ עליו, מה עושים? Scale up vs scale out - Databaseים - הסוגים השונים (טבלאי, object storage, גרפי וכו), למה משמש כל אחד, דוגמאות של שליפה והכנסה בסיסית דוקרים - לתת למתכנתים את היכולת לשתף בקוד שלהם אנשים שאין להם כוח להקים סביבה ולהוריד ספריות. נניח המעבדה פיתחה גוי שלה שהם עובדים איתו, כדי שאנחנו נריץ היינו צריכים להקים את כל הסביבה שלהם כולל גרסת פייטון וספריות נכונות. לגבי מבחן - נהוג שבקורסים האלה המבחן אמריקאי וכולם עוברים אותו, אז זה כנראה יהיה הנוהל גם בקורס הזה. מלך מי שהגיע עד לכאן :) יום טוב