Friday, October 17, 2014

למה כל אחד צריך להבין במחשבים?

מבוא

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

לפני מספר שנים רץ ברשת קמפיין עם ססמא "כל אחד צריך לדעת לתכנת".  אני לא בטוח שאני מסכים ב100% עם האמירה הזאת, בסך הכל מהנדס תכנה זה מקצוע וכמו שלא כל אחד יודע איך לבנות מנוע - זה הגיוני שלא כל אחד ידע לכתוב מערכת תכנה.
מה שכן - אני מאמין שכל אחד צריך להיות להתמצא במידה זאת או אחרת בטכנולוגיות המקיפות אותנו, בפרט מערכות המחשוב, ואני ממש לא היחיד שמחזיק בדעה הזאת, להלן כמה ציטוטים מהעולם:
  1. ועכשיו ברצינות: אחד ושתיים ושלוש.
המהפכה התעשייתית גרמה לכך שהמכונות יעשו עבודה פיסית, מונוטונית, מסוכנת ו/או מזיקה. עבודה מהסוג שבני האדם לא יעילים בלבצע אותה או שביצוע של עבודה הזאת יכול לגרום להם לנזקים בריאותיים.
מהפכת המחשוב גרמה לכך שהמחשבים,שהם בסופו דבר סוג של מכונות, עושים עבודה שאנשים לא יעילים בה. עבודה מונוטונית הדורשת יכולות חישוב מספרית, וריכוז מתמיד. שזה אומר לדעתי שאנשים יוכלו להתרכז בדברים שהם טובים בהם - עבודות שדורשות יכולות ניתוח מחוץ לקופסא, עבודות שדורשות יצירתיות ואנושיות (אני מראש מצטער - אלה לא מושגים מוגדרים היטב אז שכל אחד יפרש אותם כמו שהוא רואה לנכון).
מהפכת התקשרות שבאה מיד עם מהפכת המחשוב - מנגישה לנו בצורה הכי זולה לאורך ההסטוריה (דמי מנוי לספקית אינטרנט + תשתית לכל היותר, או wifi-ים חינמיים אם אין כסף גם לזה) כמויות אדירות של מידע לרווחת האנושות כולה. ידע זה כוח, ואני מאמין שלעולם הפרט לא היה חזק יותר מאשר כיום (כמובן במידה והוא יודע לנצל את הידע שלו). מכיוון שכל הידע הזה מונגש במחיר זול יחסית (על גבול החינם) לציבור הרחב - יש לו פוטנציאל לטשטש במידה מסוימת פערי הזדמנויות בין השכבות השונות באוכלוסיה.

אז מה יצא לי בחיי היום יום מלהבין בתכנה ומחשבים?

  1. הכי פרקטי - רוב העבודות המוצעות היום כבר דורשות יכולת טכנולגיות לא מועטות. אני לא מדבר רק על הברור מעליו - עבודות בהיי-טק. אני מדבר על כל סוגי האנליסטים בתחומי הכלכלה, מזון, בריאות, אקלים, כבישים, תכנון עירוני, חקר ביצועים ועד. המחשבים - שיודעים לעבד כמויות עצומות של מידע הן כלי עזר בכל עבודה הקשורה לקבלת החלטות (עוזרים גם בשלב איסוף החומר, אגירה שלו והניתוח כמובן). תחומי הביולוגיה והרפואה כיום דורשים יכולת לנתח מידע בצורה יעילה  ולרוץ על כמויות גדולות של חומר - אם הוא מארגן ואם לא. הדרישה לתפעל מערכות מחשב ולחשוב אלגוריתמית רק תגדל בתחומים אלה ואחרים עם הזמן. גם בעתיד הנראה לעין המצב לא ישתנה, להלן מיצג א ומיצג ב.
  2. העצמה עצמית - תחשבו שיש ברשותכם כלי חזק ביותר - המחשב (לצורך העניין מכשיר סמארטפון, טאבלט, raspberry pi, arduino  או מכונת טיורינג מלגו גם נחשבים למחשב). מחשב שגם מחובר לאינטרנט מייצג את אחת המערכות המורכבות והמתוחכמות שהאנושות יצרה עד כה. דמיינו שאתם יכולים לרתם אתה לעבוד בשבילכם או לעזור לכם, גם במשימות יומיומית. מערכות כמו arduino ודומיו, מדפסות תלת מימדיות מטשטשות עוד יותר את הגבול בין העולם הוירטואלי לפיסי ומאפשרות לאדם בעל יצירתיות וכישורים לעשות דברים באמת מדהימים.
  3. פיתוח יכולת חשיבה - חשיבה אלגורתמית מאפשרת לכם לקחת בעיות מורכבות, לדעת לפרק אותן, למצוא פתרונות נכונים ויעילים לבעיות הקטנות ואח"כ לאחד אותן על מנת לקבל פתרון לבעיה המורכבת. יכולת חשיבה זאת היא בעצם הנכס הכי גדול של המתכנת, ולא הכרות עם שפת תכנות זאת או אחרות (השחלתי פה דעה אישית אבל תסלחו לי). צורת חשיבה זו חוזרת על עצמה במגוון עבודות שדורשות ניתוח מידע, תכנון מערכות וקבלת החלטות. אני מאמין שהתחום של מדעי המחשב - יכול להחשב כמדע בפני עצמו (או לכל הפחות תת מדע תחת מדעי המתמטיקה, אם נסכים לרגע שמתמטיקה זה מדע) כמו שיש ערך ללמוד מתמטיקה, ביולוגיה, פיסיקה וכימיה - חשוב ללמוד לא פחות מדעי המחשב ולהפנים את צורות החשיבה, הרעיונות החשובים והטכניקות שיש בו. סטיב ג'ובס טען פעם
    I think everybody in this country should learn how to program a computer because it teaches you how to think
    אפשר אולי לא לאהוב את אפל או אותו אישית, אבל בנקודה הזאת אני נוטה להסכים איתו.
  4. הצד הפילוסופי - כמו שכבר ציינתי בפוסט הקודם, לידע ולימודים יש ערך בפני עצמו. הבנה של העולם הסובב אותנו תורמת לפרט בכל היבטי החיים. כלומר אל תשאלו מי יצא לי מללמוד מדעי המחשב/תכנות/פיסיקה/כלכלה - כי התשובה היא שקודם כל יצא לך ללמוד משהו חדש, וכבר לזה יש ערך.

איך מתחילים?

לא - אני לא אלמד אותך מדעי המחשב או שפת תכנות זאת או אחרת. אבל יש מגוון אתרים שכן ישמחו לעשות זאת - והרבה יותר טוב ממני:
  1. http://www.codecademy.com/ - מאפשר לכם ללמוד מגוון שפות תכנות על סוגי פלטפורמות שונות.
  2. אם אתם רוצים ללמוד שפה ספציפית - פשוט חפשו בגוגל מדריכים או ספרים. אם אתם לא יודעים איזה שפה ללמוד אז אני אציע אחת - python. שפה חינמית, נמצאת בשימוש רחב ביותר בעולם, עוצמתית, רצה על כל הפלטפורמות הנפוצות ויכולה לרוץ על כמעט כל דבר. עם זאת ידידותית למשתמש וקלה ביותר ללימוד.  
  3. כמו שדייקסטרה (Edsger W. Dijkstra) אמר פעם
    Computer science is no more about computers than astronomy is about telescopes
    מה שאני רוצה להגיד זה שלמדעי המחשב יש חשיבות בפני עצמה. אני ממליץ ללמוד את התחומים היותר תאורטיים והיפים של מדעי המחשב: אלגוריתמים, תורת הגרפים, חישוביות, קריפטוגרפיה ועוד. למעשה לא מעט מהמרצים באוניברסיטה שלימדו מדעי המחשב הודו שהם לא כ"כ אוהבים לתכנת - זה לא מנע מהם להיות מומחים טובים בתחום מדעי המחשב ולהתמצא יפה בטכנולוגיה הסובבת אותנו. נסו את הקורסים המוצעים באתרים כמו קורסרה, edx, אודאסיטי ואחרים. למי שממש מתקשה עם אנגלית ומסרב ללמוד (זה בעיה בפני עצמה שאולי דורשת טיפול דחוף יותר) - יש את אתר הקורסים של הטכניון. החסרון הוא שזה רק וידאו (עם כל האהדה שלי לטכניון, רמת הוראה בוידאוים האלה פחות טובה מאתרים באנגלית, הרמה המקצועית אגב דווקא טובה יותר בדרך כלל), אין תרגולים, תרגילים מבחנים ובדיקת מטלות שזה אומר שהמסגרת הזאת פחות מתאימה ללימוד עצמי (אני חושב שתרגול הוא חלק חשוב ובלתי נפרד מתהליך הלימודי).  
בהצלחה.

Tuesday, October 14, 2014


postOne

מי אני בכלל?

 

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

מבחינת ההשכלה הפורמלית - יש לי תואר ראשון בהנדסת מחשבים ותואר שני במדעי המחשב.עכשיו, בזמני החופשי, אני עובד על רכישת תואר "מדעי כללי" (כימיה, ביולוגיה, כלכלה, פיסיקה, קיימות, חקלאות ועוד) ע"י לימוד עצמי. אני עושה את זה בשביל ההנאה והאתגר שבלמידה ונעזר בעיקר באתרים כמו coursera, edx, khanacademy ורבים אחרים וטובים.

את שאר הזמן אני מקדיש ל
*קריאת ספרות מקצועית (אולי גם יהיו פה פוסטים עם סקירות של ספרים)
*לימד ספרדית (אחרי שניסיתי ולא כ"כ הצלחתי ללמוד גרמנית)
*ספורט - טיפוס, ריצה, שחיה ועוד

את החופשות שלי אני בעיקר מבלה בטרקים בהרים. בשנים האחרונות טיילתי בהרים וביערות בצרפת (שני קורסי אלפיניזם באזור שמוני), קנדה, איטליה, סלובניה, גיאורגיה, בולגריה וכמובן גם המון טיולים בארץ. כנראה יהיו פה גם פוסטים על ארגון של טיול עצמאי לו-קוסט, טיפים למטיילים וכמובן המלצות למקומות. לא מעט אנשים נמנעים לטייל בחו"ל למרות הרצון בגלל המחיר הגבוה, אבל אם יודעים איפה לחסוך ואיך להתארגן בהחלט אפשרי לארגן לעצמך טיול בטבע במחיר סביר.

 

למה אני כותב בלוג?

 

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

 

על מה נדבר?

 

*    לייף סטייל - יש לי סגנון חיים די אקטיבי שמשלב עבודה, לא מעט לימודים, הרבה ספורט וטיולים. יש לי גם סוג של תפישת עולם הדוגלת בלימוד מתמיד ואני מאמין שללימודים עצמם (ולא כ"כ משנה מה לומדים) יש ערך בפני עצמו. התמודדות עם נושאים חדשים, פעילות ספורטיבית שלא רגילים אליה, טיול אתגרי - מוציאה אתכם קצת מהcomfort zone המנטאלי והפיזי הנח שלכם. גם בעבודה תמיד השתדלתי להתנסות במספר תחומים, זאת למרות, ואולי בשביל, תקופת הלימוד הראשונית האינטנסיבית והקשה המלווה שינוי תחום עיסוק ולימוד. אני מאמין שאדם שמתעניין במספר רב של תחומים הוא בעל יתרון בהרבה מקרים (כמובן שבמקרים מסוימים ואני לא מכליל) על מישהו שעשה במשך עשרות שנים את אותו הדבר (שוב, פלעמים המומחה המסוים שמכיר את התחום שלו עשרות שנים יכול לאכול בלי מלח כל אחד אחר ויש לי המון כבוד וערכה ל"מומחים כבדים" כאלה. אבל לפעמים פתרון לבעיה יכול להגיע מאזור מקורי, יצירתי ולא צפוי, מחוץ לאזור המוכר לאותו המומחה).
*    אני גיק של מחשבים וטכנולוגיה אז כנראה יהיו פוסטים הקשורים לתחום. אני אשתדל לכתוב אותם בצורה ברורה לקהל הרחב, תוך כמה שפחות אי דיוקים (ואם יהיו כאלה אשתל לציין). יתכן ויהיו פוסטים קצת יותר מעמיקים ואני אשדל לסמן אותם ככאלה. אני חושב שכל אחד צריך להיות "computers literate" ומכיוון שהתמזל מזלי ויש לי ידע בתחום, אני אשתדל להעביר אותו בצורה ברורה. אולי זה יעודד אנשים להמשיך וללמוד את הנושא.
*    טיולים - טיפים למקומות לטייל בהם, ארגון טיול עצמאי, ציוד, תמונות וכו'

Monday, October 13, 2014