Ревью нескольких .Net-ориентированных книг от Manning
Это еще один пост с обзором книг, но в этот раз «с изюминкой» – будем обсуждать книги издательства Manning. По сравнению с Apress (см. предыдущий обзор), издательство Manning Publications печатают книги совсем другого уровня. У них, например, печатаются такие люди как Джон Скит или Айенде. Книги от Manning – это далеко не утилитарные произведения, что с одной стороны хорошо (технический уровень намного выше) а с другой стороны не очень (книги иногда сложно читать, и многие из них недоступны для новичков).
Заметьте, тут всего 4 книжки. Хочется больше, но как-то руки не доходят попросить у Manning несколько review-копий.
DSLs in BOO

Собственно сам язык Boo (некоторые почему-то пишут BOO) мне интересен только одной фичей – поддержкой метапрограммирования или, другими словами, возможностью расширять компилятор. Привлекательно это потому, что научиться конкретно метапрограммированию в Boo не так сложно, хотя и приходится отказаться от таких приятностей как синтаксис C#, Visual Studio (нужно использовать SharpDevelop) и соответственно IntelliSense. Как бы там ни было, популярный блоггер Айенде решил встать «впереди планеты всей» и написал книжку про то, как создавать доменно-специфичные языки (DSL-и) на этом питонообразном языке.
Если быть откровенным, то книжка у Айенде не получилась. Совсем. Главной причиной является то, что Айенде плохо пишет – у него явно нет навыков для написания больших монографий, и с первых страниц книги читатель может ощутить тот дискомфорт который автор испытывает, пытаясь передать мысль в когерентной форме. Теперь насчет собственно структуры контента. Во-первых, Айенде плохо продает идею DSLей – а ее, как мне кажется, нужно продавать. Например, показать пример BDD-фреймворка и сказать что это DSL – это как-то нечестно потому что я, например, могу привести контр-пример где мы используем, скажем, Cucumber (Ruby) чтобы написать то же самое, и для этого мне не нужен Boo. Возникает естественный вопрос: а что нам дает именно Boo, чем он лучше и полезнее?
Далее в книге идет описание самого языка, и интересно что на создание DSLей на этом языке выделено всего 2 главы из 13 – остальное это либо вводные части, либо примеры реализаций. Кстати насчет примеров – они все не просто короткие, они коротенькие и ультра-простые. Это я к тому, что в моей практике DSLи имеет смысл использовать тогда, когда за одной строчкой DSL скрывается 5-10 обычного C#. У Айенде же в примерах соотношение примерно 1:1. Зато количество инфраструктурных обсуждений в книге очень большое – тестирование, создание UI, да просто обсуждение того как сортировать скрипты – возникает вопрос о смещении ценностей. Ведь все-таки изначальная идея была продать Boo как язык для создания DSLей, а в результате она как бы вышла на второй план.
В заключение скажу что на книгу я возлагал много надежд, купив ее в форме early access для подготовки к небольшому семинару по метапрограммированию, но в результате разочаровался. Что ж, иногда и так бывает.





ASP.NET MVC 2 in Action

Иначе как «вынос мозга» эту книжку не обозвать. MVC in Action – это книга по Asp.Net MVC для тех кто уже похоже все знает но хочет проверить свои знания и заодно получить дозу зубодробильной информации от настоящих гуру в этом деле. Написало ее целых 5 авторов (все MVP), и они за словом в карман не лезут – тут у них и MvcContrib и Rhino.Mocks и другие прелести.
На самом деле – первая часть книги это еще цветочки – ее хоть как-то можно читать новичкам. А вот начиная со 2й части уже становится значительно сложнее, т.к. без хорошего багажа знаний современный паттернов и практик во всем написанном вполне реально утонуть. Тут, кстати, фигурирут такие вещи как DDD и такие технологии как Spark. (Это кстате в каком-то смысле минус т.к. большинство людей сейчас скорее интересует Razor.) В трерьей части книги появляются такие вещи как AutoMapper и NHibernate (опять же, все преподнесено на хорошем, презентабельном уровне). Ну и в последней главе, уже в разбивку, показаны разные многофункциональные прелести. В одной из глав, правда, приведен пример того, как написать autocomplete text-box, что немножко выбивает из ритма.
Если резюмировать – хорошая, компактная но полная актуальной информации «от станка» книжка. Подойдет для тех кто уже начал писать на MVC и теперь хочет сделать что-то серьезное. Рекоммендую!





C# in Depth
Несмотря на то, что у меня есть свои фавориты в плане книжек по C#, я счел своим долгом прочитать именно эту – ведь её автором является не кто-то там, а сам Джон «Чак Норрис» Скит. Для тех из вас кто живет на другой планете, мистер Скит является звездой портала StackOverflow и одним из ведущих экспертов по C# (а также по Java, на которой он пишет в Google, хотя подозреваю что его интерес к этому языку несколько меньше по весьма понятным причинам).
Итак, если коротко – то C# in Depth (я читал первую версию, сейчас есть вторая) – это просто конфетка. Для человека который хочет узнать что такое C# (например, если вы пришли к нему из мира Java или C++), эта книга – манна небесная. Написана она очень хорошо – в очередной раз подтверждает что мы британцы в принципе неплохо пишем :)
Книга, как вы догадались, является хрестоматией C# разработки, начиная от азов и кончая такими вещами как Linq. Читается она очень легко, без WTF-моментов. Скит пишет в очень неформальной манере, завлекая читателя в интересные тонкости языка. Я читал много книг по C#, но такой дозы позитива я до этого не находил нигде. Мне кажется, что эта книга формирует неплохой «двойной удар» с книжкой C# in a Nutshell (о книгах O’Reilly мы еще поговорим) – ведь первая объясняет что это за язык такой, а вторая описывает библиотеки классов.
Вообщем, впечатление осталось очень позитивное, поэтому C# in Depth получает твердую пятерку как за стиль так и за содержание.





Real-World Functional Programming
После того как я опубликовал отзывы по книге Expert F#, коллеги подсказали что неплохо было бы мне было посмотреть и на эту книгу, благо не всем хочется пролистывать дорогой (одна из самых дорогих книг) талмуд на тему F#. Также, стимулировали к прочтению этой книги две вещи – то что книжка покрывает не только F# но и C#, а также (drumroll please) то что и к этой книге приложил руку сам Джон Скит (хотя основной автор – Томаш Петричек). Сорри если кого-то этот мем начал раздражать – я не нарочно.
Итак, R-WFP – это книжка про «бытовое» функциональное программирование без высоко поднятого носа сообществ языка Haskell, Lisp или каких-то еще – это, в очередной раз, прагматика и лично мне это очень нравится. (Собственно термин ‘Real-World’ в названии как бы намекает…) Первое что пришло мне в голову – они украли у меня идею функциональной анимации! Я недавно на эту тему статью писал, она даже на CP приз выиграла. Впрочем, очень приятно что авторы пишут про знакомые мне идеи. Также приятно что не остались за бортом и другие языки программирования – такие как Lisp и Erlang. Понятное дело что мы тут про .Net говорим, но наше сообщество порой страдает узким мировозрением по отношению к другим платформам.
Книга, точно так же как и C# in Depth, делает плавную прогрессию от азов (например, от рассказов про то что такое кортежи или списки – это ведь нужно для понимания F#) и прогрессируя до таких вещей как применение функций высокого порядка. Вообще что меня поразило, так это широта задач, которые покрывает эта книга – тут и анимация, и создание DSLей (я правда и сам писал про DSLи на F#) и реактивное программирование. Правда тут есть один весьма существенный (с моей точки зрения) минус – поскольку книга была опубликована в декабре 2009, в книге не слова на тему Reactive Extensions. Обидно! Ведь не знаю как вам, а лично мне очень хотелось бы иметь описание тех новых структур и опереторов, которые там фигурируют, а также четкое руководство к использованию. Хоть я и сам, в принципе, понимаю что и как.
Скажу честно, книга мне понравилась – в ней нашлось предостаточно моментов (особенно по F#, где мои знания на «четыре с минусом») которые меня удивили и заставили пересмотреть то как я пишу код. Другое дело что у меня очень мало F# «в продашкн», но это уже чисто мои проблемы.






А обзора книг по C# будет? Чтобы знать на что ориентироваться начинающим.
Я одновременно читаю 3 (!) книги, чтобы хоть что-то понять.
Enoalife
27 Август 2010 в 14:40
В разделе C# in Depth есть всё что Вам нужно, автор явно говорит, что эта одна из лучших, зачем Вам знать про худшие?
Restuta
27 Август 2010 в 15:17
Берите C# in Depth и будет вам счастье. А потом читайте C# in a Nutshell плюс если ну ооочень интересуют всякие internals, читайте CLR via C#.
Dmitri
27 Август 2010 в 15:32
Спасибо, сейчас читаю на бумаге ASP.NET MVC от Дино Эспозито, потом возьмусь за электронную от Manning.
Artem
27 Август 2010 в 15:19
Когда МС на юзер-группах раздавали книжку Эспозито (это было про Asp.Net 2/WebForms), я тоже глянул. Показалось как-то гиперзаумно и не очень читабельно. Хотя это давно было.
Dmitri
27 Август 2010 в 15:31
У него их было две, для начинающих и продвинутая, полагаю, это была вторая. У меня она есть в русском переводе и в свое время неплохо помогла.
Эта строится по тому же принципу — много разбора внутренностей, практическим моментам уделено не так много внимания. Но мне нравится, помогает понять, как это все работает.
Artem
27 Август 2010 в 15:51
Да, это была продвинутая.
Dmitri
27 Август 2010 в 15:56
Кстати, C# in Depth Second Edition пока ещё не вышла. Я так понимаю, дата выхода запланирована на сентябрь 2010й год.
Enoalife
27 Август 2010 в 16:07
C# in Depth не для начинающих. Первый листинг просто убил: классы, свойста, списки с самого начала книги.
Enoalife
27 Август 2010 в 18:13
Ну… у Струструпа, если я правильно помню, где-то в самом начале книги написан алгоритм про подсчет всех пятниц 13го когда полнолуние.
Dmitri
27 Август 2010 в 19:23
Страуструп как раз строго не рекомендуется читать, как первой книгой по языку.
Шилдт оптимальный вариант, как для C++, так и C# – ОЧЕНЬ разжёванно написано, хотя, бывает, что некоторые вещи не особо понятны и бОлее лучшее объяснение лучше найти в других источниках.
Enoalife
28 Август 2010 в 1:12
Да, я плюсы изучал из таких больших коробочных изданий по Visual C++ 97 (вроде такая версия была), и только потом “догонялся” Струструпом.
Dmitri
28 Август 2010 в 9:18
Хотелось бы узнать, что вы думаете о книгах Pro C# 2010 Троелсена и Pro WPF in C# 2010 Мэтью Макдоналда, т.к. с них я начал изучение .NET?
Victor
27 Август 2010 в 19:16
Троэльсена не читал – обещали прислать и не прислали. Вроде как хорошая книга, много положительных отзывов. Следует просто понимать, что у авторов Apress в основном достаточно академичный стиль, и в этом плане периодически становится скучновато.
Pro WPF смотрел, но уже под впечатлением книги Applications = Code + Markup (Petzold), и это было давно. Сейчас особого соблазна читать книги по WPF не имеется, поэтому опять же от комментариев воздержусь.
Dmitri
27 Август 2010 в 19:22
>хотя основной автор – Томас Петричек – вы заметили насколько поляки любят ФП?
Насколько я знаю, он Томаш (Tomáš Petříček) и он чех :)
Как всегда спасибо за очередной чудесный книжный обзор.
morhetz
27 Август 2010 в 22:29
Опа! А вот это забавный ляп с моей стороны! Придется поправить обзор.
Dmitri
27 Август 2010 в 23:23
Книги замечательные
nastatiazjxm
28 Август 2010 в 2:54
Спасибо за серию интереснейших обзоров.
Alexander Tankeev
29 Август 2010 в 12:03
Дмитрий, посоветуйте пожалуйста пару хороших книг по написанию unit тестов.
Andrew
30 Август 2010 в 9:43
Ну мне кажется что ключевой книжкой является XUnit Test Patterns из Martin Fowler Signature Series. Это тяжелая, глубокая книга, которая покрывает все основные концепции (смеллы, тестовые дубли, и т.п.). Если же говорить о более «легких» книгах которые более приближены к .Net, то первое что приходит на ум – это The Art of Unit Testing.
Dmitri
30 Август 2010 в 10:17
Благодарю :)
Andrew
30 Август 2010 в 11:06
Дмитрий, а как вы книги получаете? Покупаете бумажный вариант(они как по мне – безумно дорогие) или электронный вид?
Алексей
2 Сентябрь 2010 в 15:47
Бумажный вариант. Дороговизна зависит от вашей зарплаты :) Правда часто книги получаю бесплатно от издательств.
Dmitri
2 Сентябрь 2010 в 16:02
Например вот http://www.ozon.ru/context/detail/id/5184008/
4500 за книгу – мне кажется перебор.
Алексей
2 Сентябрь 2010 в 16:05
Ой нет, я беру исключительно с amazon.co.uk
Dmitri
2 Сентябрь 2010 в 16:53
Кстати, посоветуйте пожалуйста материалы по созданию DSL на C#
Алексей
2 Сентябрь 2010 в 15:49
Ну C# сам по себе неидеальный язык для DSLей, хотя через методы расширения может что-то и получится. Я бы смотрел на F# или (Iron)Ruby, а также на системы вроде MPS (см. мой последний пост).
Dmitri
2 Сентябрь 2010 в 16:03
Как можно достучаться до функций f# в c#. В инете нашла только как создать тип объявленный в f#, если он объявлен в namespace. А если просто какую-нибудь хитрую функцию не из класса вызвать?
Вероника
4 Сентябрь 2010 в 16:59
Не очень понял вопрос. Что значит “функцию не из класса”?
Dmitri
4 Сентябрь 2010 в 20:50
Видимо, имелись ввиду глобальные функции модуля. В таком случае они вызываются просто ModuleName.Method(). Тут стоит заметить, что даже если у вас модуль явно не объявлен, он создается автоматически с именем файла.
Artem
4 Сентябрь 2010 в 21:12
Спасибо;)
Вероника
5 Сентябрь 2010 в 5:15