Обзор книги Essenital C# 5.0

обожкаДанный труд написан Марком Михаэлисом(Mark Michaelis) в соавторстве с Эриком Липпертом(Eric Lippert) и издан в конце 2012 года.

Мне давно было интересно посмотреть на C#, так как слышал про него достаточно, а вот использовать не доводилось. Я привык изучать языки по книгам и первое, что я сделал, это стал изучать существующие на рынке книги. Так как имена авторов всевозможных учебников по C# мне ничего не говорил я зацепился за Essential C# 5.0 в силу того, что на обложке красовалось имя Эрика Липперта, которое знакомо даже мне, человеку далёкому от C#. Таким вот нехитрым образом я и выбрал себе книгу для изучения C#.

Книга построена довольно интересным образом: в начале каждой главы у нас в наличии так называемая интеллектуальная карта(mind map), которая содержит суть предстоящей главы. Это позволяет сразу оценить о чем в главе будет идти речь и, так же, удобно при последующем обращении к материалу. Еще одним навигационным плюсом является наличие индекса по темам присущим определенным версиям языка. Таким образом, можно легко найти, какие части языка в какой версии были представлены. Книга разбита на главы классическим образом, постепенно знакомя читателя с языком. Каждая глава представляет какую-то часть языка и является, в некотором смысле, самодостаточной. Хотя и без знания содержания предыдущих глав может быть тяжело понять некоторые моменты. 

Что касается целевой аудитории книги: авторы утверждают, что целевой аудиторией являются как матёрые программисты на C#, так и новички, в глаза программирование не видевшие. Не могу подтвердить, что эта книга пойдёт совсем начинающим, т.к. надеть шкуру незнайки довольно сложно, но с уверенностью могу сказать, что тем кто уже имел опыт программирования освоение материала книги не доставит хлопот. Книга написана довольно живим и лёгким языком с массой примеров, при этом не утопая в трясине из деталей. Мне сложно сказать, насколько эта книга раскрывает тот или иной функционал, т.к. я сам новичок в C#, но лично у меня не оставалось вопросов “А как это работает?” после прочтения той или иной главы.

Книга состоит из линейного повествования о языке C# с периодическими вставками для новичков(begginer topic) и для продвинутых(advanced topic). Вставки для новичков объясняют основы основ программирование, тогда как вставки для продвинутых объясняют ту или иную функциональность более подробно: как это сделано?, зачем?, почему?. Как мне кажется, участие Эрика Липперта и заключалось в написании этих вставок. Так же текст содержит вставки содержащие отличия C# от других языков программирования(Java, C++, VB), когда описывается некий функционал присутствующий в других языках, и реализованный в C# особым образом. Это очень удобно так как акцентирует внимание на различиях в схожем функционале. Например, порядок вычисления под-выражений в C# детерминирован, а в C++ – нет. Это действительно очень важное различие, которое необходимо помнить всем кто пришёл с C++, чтобы писать более лаконичный и эффективный код на C#.

Еще одним типом вставок в повествование являются советы(guidance) по использованию языка. К примеру использовать или не использовать var, как именовать методы и тому подобное. На мой взгляд, это довольно важная часть книги, особенно для новичков. Но стоит помнить, что все эти руководства это не более чем рекомендации и слепо следовать  им не стоит, тем более, что не со всеми ними можно согласиться.

Книга покрывает довольно широкий круг тем касательно языка C#, но не заостряет внимания на самой платформе .NET. Да, есть глава посвящённая CLI, но она довольно мала и скомкана. Тоже можно сказать и про сборщик мусора(GC). Но книга, собственно, и не заявлена, как путеводитель по CLR/CLI, поэтому и рассматривать её стоит только как учебник по C# и ничего больше. В целом, каждая глава довольно хорошо раскрывает описываемую в ней функциональность. Но есть и некоторые огрехи. Например, довольно хорошо расписаны async/await и параллельные вычисления основанные на задачах(task based prallelism) , но, в то же время, довольно слабо написаны последние главы про многозадачность, CLI, и взаимодействие с “родной” средой. Они выглядят скомканными и малоинформативными. Такое впечатление, что автор устал писать к концу книги. А может просто не хотел перегружать читателя лишними, на его взгляд, деталями.

Подытожив, хотелось бы сказать, что книга мне понравилась и я безусловно посоветовал бы её любому человеку, который хочет изучать C#. Книга подходит как учебник для непосредственного изучения, так и как справочник для последующего обращения.