Обзор книги C# 5.0 in a Nutshell: The Definitive Reference

C# 5.0 in a Nutshell: The Definitive ReferenceКнига написана в 2012 году двумя авторами: Джозефом(Joseph) и Беном(Ben) Албахари(Albahari). Это уже пятое издание книги, посвящённой языку C# и его библиотеке. Разумеется, если книга выходит уже 5-м изданием, да ещё и от «Орейли», в её качестве можно не сомневаться. Тем не менее, полезно знать, что данная книга имеет массу положительных отзывов на всём просторе сети интернет, и если по какой-то причине вы не знаете авторов сего произведения(как я например), то весьма рекомендую с ними познакомится. Насколько я понял из отзывов и после самостоятельного прочтения книги, это одно из лучших руководств по языку C#.

Это моя вторая книга, посвящённая этому языку. Первой была «Essenital C# 5.0», которая тоже была посвящена 5-й версии языка. Тем лучше, будет легче сравнивать. Прежде чем перейти к сравнению, предлагаю рассмотреть несколько особенностей подачи материала, присущей именно этой книге. Первое, что хочется отметить — в книги очень мало «воды», что делает её язык несколько сухим. Здесь вы не найдёте шуток и прибауток, на вас просто выльют тонну материала. При этом габариты книги выбраны тоже довольно интересно — это высокие и узкие страницы. Не могу сказать, что это хорошо, или плохо,— просто необычно. Применяя техники, описанные выше, книга предлагает читателю массу материала на квадратный сантиметр текста, пусть и не очень лёгкого к прочтению.

Да её не очень легко читать от корки до корки, потому что материала действительно очень много и если просто подряд читать, вникая во всё, что написано, очень быстро голова может пойти кругом. Но не поймите меня превратно, я не хочу причислить эту особенность в недостатки книги — нет, это её достоинство. Книга действительно поражает обилием материала и является превосходным справочником, которые полезно всегда иметь под рукой. Как показывает практика, лучшие книги не всегда являются самым лёгким средством освоения материала(привет Страуструп), но если уж вы сдюжили прочесть и понять тот материал, то степень ваших знаний, скорее всего, будет выше, чем у того, кто читает книги попроще(не говоря уже о тех, кто их вовсе не читает).

Так, к примеру, вышеупомянутая «Essential C# 5.0» написана более простым языком и читать её гораздо легче, но она не представляет даже близко того количества материала, который вы можете найти в настоящей книге. «Essential C# 5.0» является книгой именно по языку C# и не выходит за эти рамки, тогда как настоящая книга, кроме описания непосредственно средств языка, вмещает в себя путеводитель по библиотеке C#. Правда не всё, что есть в «Essential C# 5.0», есть в «C# 5.0 in a Nutshell» — некоторые моменты раскрыты в первой книге более подробно, я подозреваю, что это благодаря участию Эрика Липперта. Я не могу перечислить все эти моменты, т.к. не фиксировал их, но при чтении я их замечал. Их не много, но они есть. Поэтому, если спросить меня, стал бы я читать «Essential C# 5.0» перед «C# 5.0 in a Nutshell», зная то, что я знаю теперь, то мой ответ является утвердительным. Да, стал бы. И не только потому, что «Essential C# 5.0» содержит некоторый уникальный материал,— нет, на мой взгляд, это несущественно. Другое более существенно — для новичка «Essential C# 5.0» будет лучшим вариантом, т.к. позволяет проникнуться новым языком, без вала подробностей. Таким образом, я отношу «C# 5.0 in a Nutshell» к книге для тех, кто C# уже знает, но хочет узнать его лучше.

Ну да хватит уже сравнивать, всё-таки обзор у нас посвящён  «C# 5.0 in a Nutshell», а не «Essential C# 5.0». Для лучшего понимания, что может предложить настоящая книга, предлагаю перечислить список тем, которые она затрагивает, помимо основ языка. В книге хорошо и подробно расписана работа с датами и форматированным вводом/выводом. Помимо довольно неплохой главы по LINQ, есть ещё целая глава посвящённая LINQ to XML. Вообще, в книге не мало внимания уделяется всевозможным методам работы с XML в C#(включая XSLT и XPath). Также в книге упоминается Entity Framework и LINQ to SQL, но вскользь, что понятно, — по EF книги пишут.

Другой большой темой является ввод/вывод, которому также посвящена отдельная глава, где расписываются различные варианты работы с файловой системой и не только. Сюда же можно отнести и главу посвящённую сетевому взаимодействию — тоже хорошо и весьма качественно написана(как и вся книга, собственно), Приятно порадовало, что в некоторых моментах упоминается WinRT(новое API от MS, которое используется в приложениях для магазина, Windows 8+), т.е. делаются оговорки, что в WinRT такое-то API отсутствует, поэтому надо использовать другое. Я, честно говоря, не ожидал от этой книги «знания» WinRT, тем приятнее было встретить тут упоминание о нём. Но, конечно, эта книга не является книгой по WinRT поэтому полноценного описания всех функций и всей разницы вы тут не найдёте.

Также в книге несколько глав посвящено не непосредственно языку и библиотеке, а той среде в которой происходит исполнение: сборка мусора, assemblies, application domain. Эти вещи необходимо знать и понимать, если есть желание разрабатывать какие-то сложные приложения на платформе .NET. Не могу сказать, что всё тут расписано подробно и вопросов не останется, — нет, скорее стоит считать, что «около-средные» вопросы тут раскрыты достаточно поверхностно, но этого достаточно для начального уровня пониманию. Другими словами, описание среды исполнения(CLR и около него) не является сильной стороной книги, но она об этом и не заявляет.

Немало внимания в книге уделено проблеме утилизации многопроцессорных систем. Так, здесь вы найдёте как новомодные await, async, так и более низкоуровневые вещи, а также PLINQ, конкурентные коллекции и т.п.. На мой взгляд, данная тема раскрыта на 5+, даже непонятно что тут можно было бы ещё добавить.

Кроме того, тут вы можете найти довольно интересную главу по сериализации, которая расписывает несколько вариантов реализации этого функционала в C#, а также: главу по регулярным выражениям, главу по безопасности, включающую как криптографию, так и аутентификацию/авторизацию, а ещё главу, в которой, кроме всего прочего интересного, упоминаются code contracts — тоже довольно занятная штука.

Что хочется сказать в целом: книга большая(1000+ страниц), интересная и весьма полезная для программиста любого уровня. Но, я бы не советовал с неё начинать изучать язык C# — может не пойти, тем более, если у вас за плечами нет другого C-подобного языка. Большим достоинством книги является легкость использование её как справочника. Вообще, она видимо так и задумывалась — справочником(на что нам непрозрачно намекает «The Definitive Reference» в названии). Моя оценка этой книге — жирная 5-ка. Она из разряда «к прочтению обязательна».

P.S. в конце ноября 2015 года должно выйти 6-е издание. Поэтому если вы ещё не читали книгу, то лучше читайте сразу его. Я не читал 6-е издание, но уверен, что оно будет не хуже.