ארוע Going Native 2012 ברדמונד, ההרצאה של Bjarne Stroustrup

4 בפברואר 2012

תגיות: , , ,
3 תגובות

למי שלא יודע, אז בחמישי שישי האחרונים, התרחש ברדמונד ארוע Going Native 2010. אני יודע שרבים מאלה שיקראו את הפוסט הזה, שקועים עמוק בעולם המנוהל, ובטח שואלים את עצמם למה זה בכלל צריך לעניין אותם. אז אני מתנצל שאני צריך לדכא אתכם, אבל ++C חזר לאופנה, ולא סתם ++C, אלא מדובר בגירסא 11 של התקן (או טו טו בביתא והאלפא חולק בבילד האחרון), שלא דומה בכלל למה שאתם זוכרים מבית הספר היסודי. מה שיותר גרוע, ++C חוזר לאופנה כל כך חזק, שהוא מעיף הצידה את העולם המנוהל הפשוט והחביב שכל כך התרגלנו אליו. כדאי לכולנו להתחיל ולחזור למקורות. כי כפי שזה נראה כרגע, כל העולם המנוהל שאנחנו מכירים נמצא על סף תהום. וכששואלים את הדוברים הרשמיים של מיקרוסופט על הנושא הזה, הם מבטיחים חזור והבטח, שאנחנו דווקא הולכים להתקדם בתחום המנוהל בקפיצות גדולות קדימה (וכנראה, גם עמוק עמוק למטה, שאנחנו צועקים בדרך תהווווווום!!).

מאיפה נובעת תיאורית הקונספירציה המופרכת והבלתי הגיונית בעליל הזו, אין לי מושג. אבל SilverLight על  Windows Phone 8 על ARM, לא רץ תחת NET. אלא כתוב ב Native. ה UI של Windows 8 לא כתוב ב WPF (שרץ על NET.), אלא משתמש במנוע WinRT, שהוא (בטח כבר ניחשתם) כתוב ב Native. בכנס Build האחרון, כמות ההרצאות על NET. היתה זניחה, לעומת כמות ההרצאות על תחום ה Native. תוסיפו לזה כמה התבטאויות אומללות של מנהל בכיר במיקרוסופט (שכבר לא נמצא שם יותר), וקיבלתם בסיס מעולה לתיאורית קונספירציה משובחת, שאפשר לעשות ממנה סרט מתח.

חשוב להדגיש בנקודה הזו, להגנתו האישית של כותב שורות אלה, שכמו כל תיאוריית קונספירציה טובה, אין לה שום קשר עם המציאות והיא מופרכת לחלוטין. למשל, אם כבר מזכירים את הנושא של חלוקת הנושאים של ההרצאות ב Build האחרון, כמות ההרצאות על Java Script היתה יותר גדולה מכמות ההרצאות על #C. מה שאומר שלפי אותו הגיון, העתיד הוא Java Script ותשכחו מ #C, ומה שיותר גרוע תשכחו מ VB.NET. כאן תיאורית הקונספירציה כבר פוגעת במשהו הרבה יותר משמעותי וחשוב מאשר הרס העולם המנוהל. כי למי שלא יודע, Java Script זה לא באמת שפת תכנות. תאור יותר מתאים לייצור הזה, זה גיהנום של תכנות ספגאטי, ולא צוחקים על דבר כזה. כמובן שיש גם לבעיה הזו פתרון פשוט, ניתן לכתוב את דפי ה HTML שלנו עם ++C, וזו סיבה עוד יותר טובה לחזור למקורות. אז לאחר ששוטטנו במחוזות המדע הדמיוני, בואו ונחזור לעולם האמיתי.

מיקרוסופט הזמינה לרדמונד, לכנס שהכותרת שלו היא Going Native, לדבר על גירסא 11 של התקן של ++C את: Bjarne Stroustrup מ AT&T Labs שהמציא את השפה הזו ושהספר שלו על ++C הוא התנך של כל מי שעוסק בתחום. את Hans Boehm מומחה לנושא ניהול הזכרון ואיסוף הזבל ונושא ה Threads. את Andrei Alexandrescu מ FaceBook, מי שכתב את C++ Coding Standards. את Chandler Carruth מ Google המוליך של פרויקט clang. את Andrew Sutton מאוניברסיטת A&M בטקסס. את Stephan T. Lavavej ממיקרוסופט (כינוי חיבה STL תנחשו למה). ואחרון חביב את Herb Sutter שכתב את כל הספרים החשובים על ++C, אבל יותר חשוב מזה, כתב את המאמר הידוע על The free lunch is over בתחום המקבילי. כל האנשים המכובדים האלה (חלקם ממתחרים של מיקרוסופט) הוזמנו להיכל הקדוש ברדמונד, לדבר ולדון במשך יומיים רצופים, לכל מי שהיה מוכן לשלם 120 דולר ולבוא לרדמונד. לכנס הזה נעשה PR בקהילה של ה ++C והוא התמלא לחלוטין במהירות הבזק.

התכנית של הכנס כללה שמונה הרצאות ושני פנלים. לומר את האמת, שקלתי ברצינות לקפוץ לשם, כי כמה הזדמנויות בחיים יש לך להתחכך באצולת ה ++C. אבל מצד שני, טיסה הלוך חזור בשביל יומיים זה לא תענוג גדול. מה ששבר את הקש היה המחויבות שהכל ישודר ב Live. מאחר והפרש השעות הוא מינוס 10, מה שאומר ש 9:30 בבוקר שם זה 19:30 פה זה יצא ממש נוח. בקיצור, התחברתי לשידור החי, כאשר אני מנצל עד הסוף את היכולת של ה Smooth Streaming לעצור ו/או לחזור אחורה, כאשר את זמני ההפסקות ניצלתי כדי לחזור לזמן האמת.

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

אני לא מתבייש להודות, שהבנתי היטב רק קרוב ל 30 אחוז ממה שנאמר בכנס. השאר פשוט צף לי מעל הראש. גיליתי בכאב רב (שכמו שאני מניח יגלו רבים כמוני), שבזמן שישנתי, השפה רצה קדימה וברחה לי. C++11 זה עולם חדש, שמשנה את כל מה שלמדת קודם על תכנות ב ++C. מצאתי את עצמי עוצר יותר ויותר פעמים את השידור, רץ לחפש חומר באינטרנט, מסמן לי מאמרים וחומר לקריאה, וממשיך בשידור. ה Back Log של חומר קריאה שמחכה לי כרגע, מוערך בחישוב שמרני, בחודש וחצי של קריאה ולימוד. הבעיה מחריפה בגלל שאין עדיין ספרים על C++11, כך שמדובר באמת בחפירה קשה.

אני לא מוצא צורך להתנצל על זה שהיה שם 70 אחוז של חומר שדילג לי מעל הראש. 50 אחוז מהחומר הזה, היו דיונים ברמה אקדמית, על מה מתכננים לעשות בגירסא 12 של השפה, כדי לפתור בעיות שכבר יודעים עליהם בגירסא 11. ומאחר והרבה מהחומר של גירסא 11 היה לי חדש, זה היה בלתי אפשרי להבין על מה הם מדברים. שאר ה 20 אחוז, היו נושאים שקשורים לפוליטיקה של וועדות תקינה, רכילות, וויכוחים על דקויות, שטובים אולי לכתיבת מאמרים אקדמיים, אבל לא כל כך מעניינים את מי שהולך להשתמש בשפה.

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

אז להלן סיכום פרקטי של הכנס.

הכנס הוקדש ל Dennis Ritchie, שהלך לעולמו כמה שבועות אחרי סטיב ג'ובס. אני בדעה שדניס השפיע על החיים של כולנו הרבה יותר מסטיב, רק שכדי להבין את העומק של המשפט הזה, אתה צריך לדעת מה זה שפת C ומה זה Unix ומה שני הדברים הללו עשו לעולם המיחשוב. אני מניח שרוב קוראי הבלוג הזה יכולים להבין על מה אני מדבר (אם כי אולי לא להסכים איתי) אבל זה לא משהו ששאר העולם (הלא טכני) יכול להבין. אני חושב שזה סוג של סגירת מעגל, שכנס על ++C, שנערך ברדמונד, במעוז של מיקרוסופט, נפתח במתן כבוד למי שיצר את Unix (עם עוד כמה שותפים כמובן).

לאחר מכן עלה לבמה Bjarne Stroustrup ודיבר על הסגנון (החדש) של ++C. זו הרצאה שאני ממליץ לכל מי שמתכנת ולא משנה באיזו שפה, להקשיב לה, כי הנושא של Style והתובנות של Stroustrup בנושא הזה אינן ספציפיות ל ++C.

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

ההגדרה של Stroustrup ל ++C היא A Light-waight abstraction programming language. לטענתו, אין שפת תכנות אחת שמתאימה לכל הדברים לכל שימוש תהיה השפה המתאימה ביותר לו. מצד שני אי אפשר לעשות לכל דבר שפה, כי זה גם המון עבודה וגם פתח להסתבכות ברגע שאתה מנסה לחבר ביניהן ביישום אחד. דרך אגב, Portability יכולה להיות גם בעיה בין דורות שונים של חמרה מאותו יצרן ולא רק בין מערכות הפעלה.

איך להשתמש נכון בשפה, זה אולי החלק החשוב ביותר בשפה ולא ה Syntax. ולזה בדיוק מתכוון Stroustrup כאשר הוא מדבר על Style. תרשמו לכם משפט זהב Bad Code bred more bad code (נכון לכל שפה). יש חשיבות רבה למימשק (נכון לכל שפה). ויש חשיבות ליכולת לתת משמעות למספרים (יחידות עם Type).

יש קורולציה בין סיבוכיות ואורך הקוד למספר ה Bug – ים בתוכו (נכון לכל שפה). הקומפילר לא קורא User's Manuel, והאבחנה הזו נכונה גם לרוב המפתחים (נכון לכל שפה). אלגנטיות, קוד קצר וביצועים בדרך כלל הולכים ביחד (נכון לכל שפה). ה Bug – ים מסתתרים בקטעי קוד מורכבים, עם הרבה לולאות ותנאים (או להבדיל אלפי הבדלות, בקוד שקורא להמון פונקציות שאינן פונקציות ספריה).

ברגע שיש לך משאב שצריך לנהל את אורך החיים שלו, למשל Open ו Close של קובץ, מה שלא תעשה בקוד, ה Close לא יהיה מובטח. הבטחון יגיע עם השפה תתן לזה פתרון והקומפילר יוכל לוודא את זה. אורך חיים של מצביע או זכרון צריכים להיות מנוהלים ברמת השפה ולא ברמת שורת הקוד של המתכנת (ראה Using ב #C).

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

בערך בנקודת החצי של ההרצאה עובר Stroustrup לשחיטה מאסיבית של פרות קדושות. הוא מתחיל בזה שהוא מעלה את  השאלה מה יותר מהיר לשימוש ב Insert ו Delete, וקטור (המון Copy הלוך וחזור) או רשימה מקושרת (שבעצם לפי הספר נולדה למטרה הזו). מסתבר שהוקטור מנצח בגדול. בהמשך הוא עובר למבני נתונים, ומראה שקומפקטיות מנצחת תכנון OO אלגנטי. אחר כך הוא מסביר מדוע ההנחה ש Low Level Code שווה ביצועים היא שטות מוחלטת. ולסיום הוא מסביר למי שחושב שהתכונה הכי חשובה של ++C היא ירושה, שלא נכון לעשות ירושה בכוח, ושלא כל דבר ב ++C חיב לכלול הורשה, נהפוך הוא, רוב הדברים אינם דורשים הורשה. הדיון שלו בנושאים הללו ובאלה שבאים בהמשך, הוא קטע וידאו שחובה לכלול אותו בכל קורס תכנות (ושוב, התובנות נכונות לרוב השפות והמערכות ולא רק ל ++C). 

נקודה שרציתי להדגיש היא הדיון על "אל תמציא את הגלגל". דהינו, אם יש לזה פונקצית ספריה או אלמנט בשפה, אל תכתוב את זה מחדש בעצמך. את הספריה והקומפילר כתבו ובדקו ועשו אופטימיזציה הרבה יותר אנשים ממך (או במקרה היותר גרוע, מהצוות שלך). אני הייתי רוצה לקחת את זה צעד אחד הלאה. לטעמי, שווה לעבור על קוד ישן, ולהמיר קטעי קוד ארוכים, שעושים דברים שכיום נמצאים בשפה או בספריה, לקוד קצר יותר, שמשתמש בפונקציות ספריה סטנדרטיות או בתכונות חדשות של השפה. ולו רק בכדי להקטין את כמות ה Bug – ים שיש לך במערכת. ל C++11 יש סמנטיקה של Move במקום Copy. שוה רק בשביל זה לשנות את הקוד הקיים שלך, כי החסכון בביצועים ובהורדת רמת הסיכוי ל Bug במערכת הוא עצום.

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

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

3 תגובות

  1. אלעד כץ7 בפברואר 2012 ב 11:34

    תענוג לקרוא כתמיד גדי 🙂

    למתקשי הC++ – הייתי *מאוד* שמח לשמוע הרצאת מבוא למעבר מC# לC++ – אולי אתה מרים את הכפפה? הפיצות עלי

    הגב
  2. יזהר עזתי21 בפברואר 2012 ב 18:09

    מיקרוסופט כותבים במפורש באתר MSDN שהבחירה צריכה להיות  C++ , ראו בקישור הבא:

    Choosing Windows Development Technologies/Choosing the Right Language

    msdn.microsoft.com/…/ff795785.aspx

    הגב