למה כל אחד צריך להבין במחשבים?
מבוא
אנחנו מוקפים במערכות תכנה, ולא נראה שבזמן הקרוב או הרחוק החדירה של המערכות הממוחשבות לחיי היום יום שלנו ולתשתיות הקריטיות שלנו הולכת להצטמצם. כנראה שההיפך הוא הנכון.
לפני מספר שנים רץ ברשת קמפיין עם ססמא "כל אחד צריך לדעת לתכנת". אני לא בטוח שאני מסכים ב100% עם האמירה הזאת, בסך הכל מהנדס תכנה זה מקצוע וכמו שלא כל אחד יודע איך לבנות מנוע - זה הגיוני שלא כל אחד ידע לכתוב מערכת תכנה.
מה שכן - אני מאמין שכל אחד צריך להיות להתמצא במידה זאת או אחרת בטכנולוגיות המקיפות אותנו, בפרט מערכות המחשוב, ואני ממש לא היחיד שמחזיק בדעה הזאת, להלן כמה ציטוטים מהעולם:
המהפכה התעשייתית גרמה לכך שהמכונות יעשו עבודה פיסית, מונוטונית, מסוכנת ו/או מזיקה. עבודה מהסוג שבני האדם לא יעילים בלבצע אותה או שביצוע של עבודה הזאת יכול לגרום להם לנזקים בריאותיים.
מהפכת המחשוב גרמה לכך שהמחשבים,שהם בסופו דבר סוג של מכונות, עושים עבודה שאנשים לא יעילים בה. עבודה מונוטונית הדורשת יכולות חישוב מספרית, וריכוז מתמיד. שזה אומר לדעתי שאנשים יוכלו להתרכז בדברים שהם טובים בהם - עבודות שדורשות יכולות ניתוח מחוץ לקופסא, עבודות שדורשות יצירתיות ואנושיות (אני מראש מצטער - אלה לא מושגים מוגדרים היטב אז שכל אחד יפרש אותם כמו שהוא רואה לנכון).
מהפכת התקשרות שבאה מיד עם מהפכת המחשוב - מנגישה לנו בצורה הכי זולה לאורך ההסטוריה (דמי מנוי לספקית אינטרנט + תשתית לכל היותר, או wifi-ים חינמיים אם אין כסף גם לזה) כמויות אדירות של מידע לרווחת האנושות כולה. ידע זה כוח, ואני מאמין שלעולם הפרט לא היה חזק יותר מאשר כיום (כמובן במידה והוא יודע לנצל את הידע שלו). מכיוון שכל הידע הזה מונגש במחיר זול יחסית (על גבול החינם) לציבור הרחב - יש לו פוטנציאל לטשטש במידה מסוימת פערי הזדמנויות בין השכבות השונות באוכלוסיה.
אז מה יצא לי בחיי היום יום מלהבין בתכנה ומחשבים?
- הכי פרקטי - רוב העבודות המוצעות היום כבר דורשות יכולת טכנולגיות לא מועטות. אני לא מדבר רק על הברור מעליו - עבודות בהיי-טק. אני מדבר על כל סוגי האנליסטים בתחומי הכלכלה, מזון, בריאות, אקלים, כבישים, תכנון עירוני, חקר ביצועים ועד. המחשבים - שיודעים לעבד כמויות עצומות של מידע הן כלי עזר בכל עבודה הקשורה לקבלת החלטות (עוזרים גם בשלב איסוף החומר, אגירה שלו והניתוח כמובן). תחומי הביולוגיה והרפואה כיום דורשים יכולת לנתח מידע בצורה יעילה ולרוץ על כמויות גדולות של חומר - אם הוא מארגן ואם לא. הדרישה לתפעל מערכות מחשב ולחשוב אלגוריתמית רק תגדל בתחומים אלה ואחרים עם הזמן. גם בעתיד הנראה לעין המצב לא ישתנה, להלן מיצג א ומיצג ב.
- העצמה עצמית - תחשבו שיש ברשותכם כלי חזק ביותר - המחשב (לצורך העניין מכשיר סמארטפון, טאבלט, raspberry pi, arduino או מכונת טיורינג מלגו גם נחשבים למחשב). מחשב שגם מחובר לאינטרנט מייצג את אחת המערכות המורכבות והמתוחכמות שהאנושות יצרה עד כה. דמיינו שאתם יכולים לרתם אתה לעבוד בשבילכם או לעזור לכם, גם במשימות יומיומית. מערכות כמו arduino ודומיו, מדפסות תלת מימדיות מטשטשות עוד יותר את הגבול בין העולם הוירטואלי לפיסי ומאפשרות לאדם בעל יצירתיות וכישורים לעשות דברים באמת מדהימים.
- פיתוח יכולת חשיבה - חשיבה אלגורתמית מאפשרת לכם לקחת בעיות מורכבות, לדעת לפרק אותן, למצוא פתרונות נכונים ויעילים לבעיות הקטנות ואח"כ לאחד אותן על מנת לקבל פתרון לבעיה המורכבת. יכולת חשיבה זאת היא בעצם הנכס הכי גדול של המתכנת, ולא הכרות עם שפת תכנות זאת או אחרות (השחלתי פה דעה אישית אבל תסלחו לי). צורת חשיבה זו חוזרת על עצמה במגוון עבודות שדורשות ניתוח מידע, תכנון מערכות וקבלת החלטות. אני מאמין שהתחום של מדעי המחשב - יכול להחשב כמדע בפני עצמו (או לכל הפחות תת מדע תחת מדעי המתמטיקה, אם נסכים לרגע שמתמטיקה זה מדע) כמו שיש ערך ללמוד מתמטיקה, ביולוגיה, פיסיקה וכימיה - חשוב ללמוד לא פחות מדעי המחשב ולהפנים את צורות החשיבה, הרעיונות החשובים והטכניקות שיש בו. סטיב ג'ובס טען פעם
I think everybody in this country should learn how to program a computer because it teaches you how to think
אפשר אולי לא לאהוב את אפל או אותו אישית, אבל בנקודה הזאת אני נוטה להסכים איתו. - הצד הפילוסופי - כמו שכבר ציינתי בפוסט הקודם, לידע ולימודים יש ערך בפני עצמו. הבנה של העולם הסובב אותנו תורמת לפרט בכל היבטי החיים. כלומר אל תשאלו מי יצא לי מללמוד מדעי המחשב/תכנות/פיסיקה/כלכלה - כי התשובה היא שקודם כל יצא לך ללמוד משהו חדש, וכבר לזה יש ערך.
איך מתחילים?
לא - אני לא אלמד אותך מדעי המחשב או שפת תכנות זאת או אחרת. אבל יש מגוון אתרים שכן ישמחו לעשות זאת - והרבה יותר טוב ממני:
- http://www.codecademy.com/ - מאפשר לכם ללמוד מגוון שפות תכנות על סוגי פלטפורמות שונות.
- אם אתם רוצים ללמוד שפה ספציפית - פשוט חפשו בגוגל מדריכים או ספרים. אם אתם לא יודעים איזה שפה ללמוד אז אני אציע אחת - python. שפה חינמית, נמצאת בשימוש רחב ביותר בעולם, עוצמתית, רצה על כל הפלטפורמות הנפוצות ויכולה לרוץ על כמעט כל דבר. עם זאת ידידותית למשתמש וקלה ביותר ללימוד.
-
Computer science is no more about computers than astronomy is about telescopes
מה שאני רוצה להגיד זה שלמדעי המחשב יש חשיבות בפני עצמה. אני ממליץ ללמוד את התחומים היותר תאורטיים והיפים של מדעי המחשב: אלגוריתמים, תורת הגרפים, חישוביות, קריפטוגרפיה ועוד. למעשה לא מעט מהמרצים באוניברסיטה שלימדו מדעי המחשב הודו שהם לא כ"כ אוהבים לתכנת - זה לא מנע מהם להיות מומחים טובים בתחום מדעי המחשב ולהתמצא יפה בטכנולוגיה הסובבת אותנו. נסו את הקורסים המוצעים באתרים כמו קורסרה, edx, אודאסיטי ואחרים. למי שממש מתקשה עם אנגלית ומסרב ללמוד (זה בעיה בפני עצמה שאולי דורשת טיפול דחוף יותר) - יש את אתר הקורסים של הטכניון. החסרון הוא שזה רק וידאו (עם כל האהדה שלי לטכניון, רמת הוראה בוידאוים האלה פחות טובה מאתרים באנגלית, הרמה המקצועית אגב דווקא טובה יותר בדרך כלל), אין תרגולים, תרגילים מבחנים ובדיקת מטלות שזה אומר שהמסגרת הזאת פחות מתאימה ללימוד עצמי (אני חושב שתרגול הוא חלק חשוב ובלתי נפרד מתהליך הלימודי).
בהצלחה.