לימודי פיתוח תוכנה או בקצרה לימודי תכנות אני מגדיר כלימודים במסגרתם לומדים פיתוח תוכנה (תכנות) בעיקר במובן של קידוד בשפות התנהגות שהן סוג ספציפי ועיקרי של שפות מחשב. לימודי פיתוח תוכנה הם מעשיים בעיקרם ובהינתן הוראה טובה גם מתגמלים מאד.
רקע נדרש ללימודי פיתוח תוכנה
כלל לימודי פיתוח התוכנה דורשים ידע בסיסי ומעלה באנגלית (כלל שפות התכנות הן באנגלית וכלל הספרות המקצועית בתחום היא באנגלית).
לימודי תכנות מצריכים במקרים רבים רכישת ידע או לחלופין נכונות להרחיב ידע בלוגיקה פורמלית בכלל ובמתמטיקה אלמנטרית בפרט.
לימודי פיתוח תוכנה במסגרת תואר אקדמי
לימודי תכנות במסגרת תואר אקדמי הם באופן כללי חלק מלימודי מדעי המחשב אם כי ניתן ללמוד פיתוח תוכנה גם עם מבואות אלמנטריים בלבד למדעי המחשב, במסגרת לימודים מרחוק כמו דרך מכללה אינטרנטית שמאפשרת למידה שלבית ביותר, עם בחינות קצרות שניתן לקחת ללא הגבלה, צוות הוראה זמין 24/7 ובמחירים נמוכים בהרבה ממכללה לא-אינטרנטית ("לימודי תעודה").
לימודי יסודות התכנות
לימודי יסודות התכנות כוללים בדרך כלל למידת שפת מבנה אחת ושפת התנהגות אחת כולל מונחים מרכזיים בפיתוח תוכנה.
לפי דעתי, תחילה נכון ללמוד שפה אחת מכל סוג (מבנה והתנהגות) כאשר כל אחת מן השניים מתאימה לנושא מסוים (כגון פיתוח אתרי ווב או פיתוח רובוטיקה); לימודי תכנות אולי יכללו גם למידת של שפות נוספות כגון שפות עיצוב ואף שפות מחשב אחרות (תלוי בתחום התכנות הנלמד).
דוגמאות לתוכניות לימוד יסודיות כחלק מלימודי פיתוח תוכנה
דוגמאות לתוכניות לימוד יסודיות כחלק מלימודי פיתוח תוכנה יהיו למשל:
- שפות תפעול-התנהגות כגון שפת Bash (למערכות לינוקס)
- שפות מבנה (כגון HTML) ושפות התנהגות תואמות המשמשות במידה רבה לפיתוח אתרי ווב כגון שפת PHP או שפת JavaScript
- שפות מבנה (כגון XML) ושפות התנהגות תואמות המשמשות במידה רבה לפיתוח רובוטיקה כגון Java או Python
- שפות מבנה (כגון HTML) ושפות התנהגות תואמות המשמשות במידה רבה לתשאול בסיס נתונים כגון SQL או NOSQL
האם לימודי פיתוח תוכנה דורשים מתמטיקה?
השאלה האם לימודי פיתוח תוכנה דורשים מתמטיקה עולה בקרב מתעניינים בלימודי פיתוח תוכנה ואף סטודנטים חדשים מאד לתכנות שלא למדו המון מתמטיקה בעברם מסיבות שונות ומגוונות בעת שהיו בבתי ספר בתקופת ילדות והנעורים.
התשובה היא שבאופן כללי כן, אבל במקרים רבים רק מתמטיקה אלמנטרית ובכל מקרה זה תלוי מאד איך מגדירים "מתמטיקה" ואיזה סוג תוכנות אדם שואף לפתח.
באופן כללי, כל קוד מקור של תוכנה כולל סימנים לוגיים פורמליים ("סימנים מתמטיים") שונים ומהווה למעשה תערובת של אנגלית ומתמטקה אבל בתחומי תכנות שונים (כגון פיתוח אתרי ווב) כמעט אין חישוב כמותי רב כמו ב"תרגילי מתמטיקה" כך שתלוי אם המרצ\ים או חומרי הלימוד שבעזרתם נלמד התחום ידגימו פיתוח תוכנה עם מתמטיקה על-בסיסית או לא.
בלימודי תכנות יסודיים ובסיסיים (ואף מתקדמים בתחומים מסוימים) אין מתמטיקה על-בסיסית וממילא לא אמורה להיות כשמדובר בתלמידים חדשים ובפרט מציבור כללי, כלומר כולל אנשים שלא בהכרח "אוהבים מתמטיקה".
אני מניח שמי שילמד יסודות התכנות ייתקל קצת בבעיות הדורשות חשבון טיפוסי (ובפרט כפל\חילוק או מונחים כגון מנה\שארית\נוסחה) אך לא יצטרך לחשב כמותית מעבר לכך אם בכלל; כלומר, ארבע פעולות החשבון וסימנים שונים כגון סימן השוויון\אי שוויון, סימן קטן-מ או סימן גדול-מ וכדומה. ברוב המקרים תוכנת מחשבון (או התוכנה המפותחת עצמה) תעשה את החישוב עבורו או שחישובים רבים פשוט לא יידרשו תוכנת מחשבון כל שהיא.
אם אדם ילמד לפתח סקריפטיי אוטומציה פשוטים להתקנה וסידור חבילת תוכנה בגודל קובץ או עד עשרה קבצים נניח, או אם ילמד לפתח אפליקציות ווב מעל שכבת מערכת ההפעלה אז לדעתי לא סביר שיצטרך מתמטיקה מעבר למה שתיארתי אך אם בעת הלימוד יילמד פיתוח תוכנה שמבצעת חישוב סטטיסטי למערכות הפעלה, ניהול פיננסי ורובוטיקה כן תידרש מתמטיקה על-בסיסית; אם אדם רוצה לפתח מערכות הפעלה או אלגוריתמים מורכבים לרובוטים (להבדיל מעיבוד קל של אלגוריתמים קיימים או ממשקי משתמש לרובוטים) אז גם כן סביר לי להניח שתידרש מתמטיקה על-בסיסית.
הערות לפרק
- הרחבת ידע בלוגיקה פורמלית כנדרש לתכנות, באה לרוב עם לימודי התכנות עצמם
- למי שחסרים רקע ביסודות המתמטיקה אני ממליץ לקנות ספרי מבוא למתמטיקה המדגישים הבנה ולא תרגול (בעברית נפוצים ספריו של פרופסור רון אהרוני כגון "חשבון להורים" שלדעתי הוא נקודת התחלה טובה)
היכן אני ממליץ ללמוד פיתוח תוכנה
מניסיוני, כיום המגמה המתחזקת ביותר בלימודי תכנות היא לימודים במכללה אינטרנטית עם לימוד אינטראקטיבי; הסטודנט נרשם למכללה כזו (כגון teamtreehouse.com) בעבור סכום כסף קטן יחסית כגון 25 דולר אמריקני או 30 דולר אמריקני לחודש ובמסגרתה הוא מקבל גישה לכל קורסי הבסיס שהיא מציעה כשהם מסווגים לפי נושא; במסגרת השיטה, הסטודנט מתחיל מסלול הכולל מספר קורסים; כל קורס כולל מספר סרטונים באורך קצר מאד (לרוב בין 2 דקות ל-4 דקות) ולאחר כל שיעור או כמה שיעורים בודדים כאלה הוא משלים מבחן קצר מאד על הקורס; ניתן להיבחן שוב ושוב והלמידה שלבית, מתגמלת ואין לחץ.
מכללה מוחשית
מכללה מוחשית היא כל מכללת לימוד הדורשת מסטודנטיה להגיע ללמוד בכיתה במרכז הוראה מוחשי (הוראה א-וירטואלית); התלמדות במכללה מוחשית כרוכה אמנם ברווח כספי גדול יותר למכללה באם היא מצליחה להשיג מספיק סטודנטים (מחזור רחב יותר) אך גורמת לפוטנציאל בעיות רחב יותר ומכאן גם לסיכון כלכלי רחב יותר הן למכללה והן לסטודנטים שלה.
מאז שחרור האינטרנט לציבור הכללי מודל מכללה מוחשית הופך מיושן וכיום מכללות רבות סוגרות מרכזי הוראה מוחשיים ועוברות ללמד סטודנטים בצורה של מכללה אינטרנטית.
מכללה אינטרנטית
מכללה אינטרנטית היא מוסד לימודים המלמד סטודנטים דרך מחשב בחיבור לרשת האינטרנט ללא הגעה מוחשית לכיתת לימוד במרכז הוראה (ובכך למעשה נבדלת מכללה אינטרנטית ממכללה מוחשית).
שיטת הוראה במכללות אינטרנטיות
בדרך כלל הלימודים מתקיימים בשיטת Video-Quiz במסגרתה סטודנט נרשם ללימודים בעבור סכום כסף קטן יחסית כגון 25 דולר אמריקני ורישום זה מעניק לו גישה לכל קורסי הבסיס שהיא מציעה כשהם מסווגים לפי נושא; במסגרת השיטה, הסטודנט מתחיל מסלול הכולל מספר קורסים; כל קורס כולל מספר סרטוני וידאו באורך קצר מאד (לרוב בין 2 וחצי דקות ל-5 דקות) ולאחר כל שיעור או כמה שיעורים בודדים כאלה הוא משלים מבחן (Quiz) על הקורס ומכאן הביטוי Video-Quiz.
יתרונות ללמידה במכללה אינטרנטית
למכללה אינטרנטית יתרונות רבים על מכללה מוחשית הן לסטודנט והן לבעלים ולעובדיהם והן חוסכות זמן וכסף.
- כל ההוצאות על מוסד לימודים מוחשי יורדות
- מועסקים מעט מורים יחסית
- אין שחיקה פסיכולוגית מאינטראקציה עם יותר מדי תלמידים או תלמידים בעייתיים
- אין הטרדות מיניות למשל מצד מורים לתלמידות או מצד תלמידים לתלמידות
- יש תקשורת אינטראקטיבית עם צוות הוראה וסטודנטים אחרים תוך הקפדה יתרה על תקשורת לפי קוד התנהגות מכובד ותיעוד השיחות הקהילתיות.
- אין צורך להיתקע בפקקים ולחפש חנייה
- השיעורים מוקלטים ומפוצלים למקטעים בפרקי זמן קטנים מאד של דקה-2 לרוב עם מבחן קטן אחרי כל שיעור כך שרכישת חומר הלימוד נעשית בהדרגה גמורה
מכיוון שהשיעורים מוקלטים סטודנט יכול לחזור על החומר
- יש פחות הוצאות כגון שכירות, שכר לימוד גבוה, אנשי מזכירות ועוד כך שההוצאות נמוכות יותר לשני הצדדים ושביעות הרצון גבוהה יותר ככלל
היעדר תלמידים מרגיזים או מטרילים (אם כי הללו יכולים להופיע בפורומים אינטרנטיים של המכללה האמורה) צוות הוראה פחות שחוק
כמו כן, מכללות אינטרנטיות מאפשרות לסטודנט ללמוד בקצב שלו, כשהוא נחשף בסרטונים ומגיש מבחנים לפי הכמות האפשרית לזמן לימודים מוקצה וכשהן הסרטונים והן המבחנים הם קצרים מאד ומאפשרים לעבד את החומר הנלמד בנקל.
שפות תכנות שאני ממליץ ללמוד
לעתים עולה השאלה "מה הן שפות תכנות מומלצות ללמידה" או "אילו שפות תכנות מומלץ ללמוד".
מכיוון שעולם שפות מחשב הוא עולם רחב מאד ויש שפות רבות שניתן לתכנת איתן (לפתח תוכנה איתן) ושמיועדות למטרות שונות או לחלופין לסוגי תוכנות שונות, לפי דעתי ראוי לאדם ללמוד שפת תכנות שניתן לפתח עימה סוגי תוכנות שהוכיחו עצמם כבעלות יתרונות גדולים לכלכלה האנושית כגון סקריפטיי]] אוטומציה, תוכנות ווב או תוכנות רובוט.
- לכל מי שלומד פיתוח תוכנה אני ממליץ ללמוד יסודות שפת Bash מסיבות אלה:
-
- שפת Bash היא דרך נפלאה ומתגמלת ללמוד על נושא ממשק משתמש שורת פקודה שצריך להכיר בכלל תעשיות ההי-טק
- שפת Bash מהווה למידת יסודות התכנות בפועל ← כיום להמון מתכנתים מקצועיים ממילא יהיה צורך ללמוד לפחות את יסודות שפה זו מתי שהוא כי היא השפה העיקרית המשמשת לתפעול מערכות הפעלה בענן (עליהן יושבות תוכנות ענן) וכן להתקנה וקונפיגורציה של רבות מן התוכנות האלה
- אני יכול להמליץ גם ללמוד על שפת JavaScript אבל את זה הייתי ממליץ בעיקר למי שמעוניין לפתח אתרי ווב; אם מישהו מעוניין לפתח תוכנות רובוטים, תוכנות למכונות תעשייה, תוכנות לשלטים רחוקים, תוכנות לכלי רכב, תוכנות לשלדים חיצוניים (exoskeletons) וכדומה הייתי ממליץ ללמוד שפות שמתכנת העובד בתעשייה הרלוונטית המליץ ללמוד אותן (דוגמאות שאני מכיר הן Go, או C++ או Python ויש עוד רבות); להתחיל עם שפה אחת ואם לא מתחברים לתחביר שלה לעבור לאחרת וכן הלאה עד שמוצאים את דרך המלך, העיקר שזו תהיה שפה שימושית במובן שיוצרים איתה מוצרים יעילים ומוכרים היטב
- בכל מקרה, לפי דעתי שווה להכיר את יסודות שפת HTML (שאיננה שפת פיתוח תוכנה פרופר אבל משמשת בפיתוח תוכנה לצד שפות מחשב אחרות), לצד יסודות שפת Bash, לא משנה אילו תוכנות הולכים לפתח; הן Bash והן HTML הן שפות שבאופן כללי נחשבות לקלות יחסית ללמידה ומתגמלות מאד. בניגוד לשפת HTML שהיא שפת מבנה, שפת Bash נחשבת לשפת תפעול ולשפת פיתוח תוכנה.
לימודי פיתוח תוכנה למבוגרים
אני איש הוראה ופעיל לשוויון בידע לפני שאני מתכנת ולכן אני מלמד פיתוח תוכנה למבוגרים.
מבוגר לצורך עניין זה אגדיר כללית כבן 45 שנים ומעלה.
אני עושה זאת דרך שיטות הוראה ייחודיות שפיתחתי המבוססת על ניסיוני בהוראה בכלל ואהבתי להנגשת הוראה לכל אוכלסיה שהיא בפרט.
אני מודע היטב לקשיים הנערמים אצל מבוגרים רבים כגון:
- הורות
- הצטברות בעיות חיים (העולם הזה לא פשוט, בלשון המעטה)
- סרקזם מצד מורים הרגילים ללמוד "צעירים" ומצד תלמידים ומכרים שלא יודעים לפרגן
- הצורך לפצות על חוסרי ידע שנגרמו בעצמם מהוראה לא שוויונית במסגרות חינוך בעבר
- קשיי הסתגלות טכנולוגית אפשריים
בהתאם לכך אני מתאים את הלימוד לתחום הידידותי ביותר בפיתוח תוכנה ← תכנות ווב תוך שימוש בכלים המפשטים את ההוראה כמו מערכת ניהול תוכן ומתן "שיעורי בית" הדרגתיים ולרוב גם מותאמים לצורכי הסטודנט וקשייו.
אשמח לסייע לכם לעשות את הצעד לתוך עולם פיתוח התוכנה.
הסבה מקצועית לתכנות
המונח הסבה מקצועית לתכנות משמש לתאר שינוי מקצוע עיקרי לעיסוק מקצועי בתכנות.
מניסיוני, ככל שלמועמד יש רקע חזק יותר באנגלית ובאהבה לעבודה עם מחשב וחיסכון בזמן, כך גדל סיכויו להסבה מוצלחת.
קוד מקור של תוכנה הוא באופן כללי תערובת של אנגלית ולוגיקה פורמלית או במובן אחר, מתמטיקה אלמנטרית (המתמטיקה בקוד תוכנה היא בדרך כלל בדגש על לוגיקה ולא על חישוב כמותי כמו ב"תרגיל מתמטי").
הסבה מקצועית לתכנות מאד תתאים לבעלי מקצוע בתחומי טכנאות, חשמל, בלשנות וכן פילוסופיה (בדגש על לוגיקה) ומתמטיקה, אך כמובן שאין כל חובה לעסוק במקצועות אלה דווקא.
לימודי פיתוח תוכנה דורשים דיוק רב וקפדנות רבה אך אם ניגש אליהם אדם עם נכונות למידה גבוהה, ככלל אין שום בעיה שלא יצליח בהם; ההצלחה תלויה בעיקר באופן בו החומר נלמד וביכולת להשלים ידע רקע ככל שזה נדרש במהלך הלימוד (גם זה במקרים רבים תלוי ביכולות המורה ואיכות ההוראה).
במסגרת הלימוד יובטח ידע בסוגיות אלמנטריות בחשמל ומחשוב, בלוגיקה פורמלית (אופרטורים ואופרנדים), במונחים פרקטיים במחשוב ותוכנה ועוד; מונחי יסוד בתכנות כגון בקרת זרימה, משתנה, טיפוס מידע ועוד.
אני מציע לנסות הסבה לתחום תכנות שנתפש ככזה שהכי יעניין ללמוד עליו עוד ועוד ← תכנות אפליקציות ואתרי אינטרנט, תכנות רובוטים, תכנות משחקי מחשב ועוד.
אני מניח שמי שמתכוון לעבוד כשכיר יצטרך להכין מסמך קורות חיים מקצועיים (קח"מ) ייעודי לתחום זה שלדעתי אורכו לא אמור לעלות על דף אחד בו תתארו את עצמם כמתכנת Junior עם נכונות רבה ללמוד דברים חדשים; ניתן להתחיל את הלימודים (או לתחום אותם) בקורס במכללה טכנולוגית (ובעיקר אינטרנטית) המבטיחה סיוע במציאת עבודה בסוף הקורס. חברות הי-טק רבות מחפשות להכשיר אנשים שעברו הסבה אם כי השכר בשנה הראשונה אולי לא יעבור את הממוצע במשק ואף להיות פחות מכך (תלוי בתפקיד).