Programming stuff

Останнім часом я все частіше і частіше чую від своїх колег про те, що мова C # рухається кудись не туди

Останнім часом я все частіше і частіше чую від своїх колег про те, що мова C # рухається кудись не туди. Нові можливості в ньому з'являються занадто швидко, ми тут, мовляв, попередні ще не освоїли, а браві хлопці з Редмонда встигли нові навидумують, та ще й парадигми нові до нього прикручують. Фіч в мові вже стільки, що їх ні в одну нормальну голову вже не впихнути; мало того, що їх багато, так з деякими ще й без пляшки (без специфікації) не розібратися. Та й взагалі, якийсь другий С ++ виходить, залишилося додати undefined behavior в десяток місць специфікації і ми отримаємо чудовисько, аналогічне дітищу Страуступа.

І хоча у всіх цих висловлюваннях деяка частка правди все-таки є, найчастіше такі питання виникають через відсутність в голові цілісної картини і розуміння того, чим є і чим не є мова C #, які в ньому існують можливості і як вони взаємодіють з іншими можливостями мови; які існують ідіоми і типові способи використання тих чи інших мовних конструкцій.

Завдяки своїй структурі, книга "C # In Depth" дозволяє побачити цю цілісну картину і структурувати нові або існуючі знання. Протягом всієї книги автор розповідає про еволюцію мови C # від першої версії, що з'явилася на світ у 2002-му році, до останньої на даний момент, 4-й версії, що з'явилася на світ вісьмома роками пізніше. Під час викладу розглядаються проблеми, властиві попереднім версіям мови і способи їх вирішення в наступних версіях. При цьому автор дає зрозуміти, яким шляхом іде розвиток мови C #, прогнозуючи при цьому майбутні зміни. Все це призводить до того, що різні фрагменти головоломки, під назвою мову програмування C # починають поступово складатися, дозволяючи побачити картину цілком.

Книга Скиту мені в чомусь нагадала «Дизайн і еволюцію мови С ++» Страуструпа. Звичайно, Джон Скит не є автором мови C #, більш того, він навіть не є одним з його розробників (*). Але оскільки він бере активну участь в «околокомпіляторной» життя, він не просто описує ту чи іншу можливість, а ще й розповідає, чому саме ця можливість була додана в мову, а інша ні, про що думали розробники компілятора, приймаючи те чи інше рішення і які переваги і недоліки отримає кінцевий розробник. Дуже часто може здатися, що деяка можливість мови реалізована не логічно або навіть неправильно, але розуміння причин, за якими вона була зроблена саме так, може змінити вашу думку до цієї можливості або мови в цілому. Так що не варто дивуватися такій кількості посилань на різні блоги і статті, серед яких частими гостями є Ерік Ліпперт, Барт де Смет, Кріс Брюм і інші; це робить виклад більш живим і не відірваним від реальності.

Іншими важливими особливостями книги є стиль і глибина викладу. Що стосується стилю, то в один момент часу Джон фокусується на одній можливості мови (one step at a time), що дозволяє читачеві легше зануритися в розглянуту тему і правильно її зрозуміти. В принципі, книгу не обов'язково читати від початку до кінця; виклад побудовано таким чином, що ви можете вибрати цікаву для вас тему або просто відкрити її на будь-якій сторінці і заглибитися в читання. Що стосується глибини викладу, то для різних тим вона відрізняється від «досить глибоко» до «про що думає компілятор і як він реалізує ту чи іншу можливість». Велика частина розглянутих тем відноситься саме до мови C #, а не до проблем завантаження зборок, роботі збирача сміття або многопоточности (**). Єдиним винятком з цього правила є передостання глава, в якій автор знайомить читача з Code Contracts: «Якби ця книга була присвячена англійської мови, то ця глава була б присвячена поезії». Джон серйозно розраховує на те, що контрактне програмування стане повсякденною практикою більшості розробників і що в найближчому майбутньому книга з мови C # або платформі .Net, в якій не буде опису контрактів, буде вважатися застарілою. І хоча в одному розділу про контракти Джону не вдалося копнути настільки ж глибоко, як він це зробив у більшості інших глав, сам факт такої пильної уваги до теми контрактного програмування з боку настільки відомого розробника не може не радувати.

Наостанок хочеться сказати, що "C # In Depth" є однією з кращих «просунутих» книг по мові C #, які коли-небудь виходили в світ (***). Так що якщо вам потрібно устаканить свої знання мови C # або розібратися глибше з тієї чи іншої можливістю, то книга Скиту - це відмінний спосіб це зробити.

----------------------

(*) Про Джона Скиті ходить безліч чуток , Включаючи думку, що він вже давно придумав все нові можливості мови C # і навіть написав про це книгу, яку через три роки відкриє Андерс Хейлсберг, щоб порівняти, чи правильно його команда реалізувала все нові можливості.

(**) Це тонкий натяк на те, що книга Скиту практично не перетинається з "CLR via C #", так що ця парочка конкурентами не є; вони швидше доповнюють один одного, а не замінюють.

(***) Якщо ви спробуєте задати таке запитання на stackoverflow.com, то його закриють через кілька хвилин із зазначенням двох десятків дублікатів, при цьому в дев'ятнадцяти з них будуть радити саме книгу Скиту, як кращу "advanced" книгу по мові C #.