четверг, 14 апреля 2011 г.

Классические книги по C#/.NET

Однажды я задался целью собрать в одном месте наиболее влиятельные книги по программированию с точки зрения компьютерной общественности. Конечно же, выполнить эту задачу практически невозможно по нескольким простым причинам: во-первых, понятия у «компьютерной общественности» настолько широки и настолько сильно отличаются от индивида к индивиду, что говорить о каком-то списке, подходящем всем и каждому очень сложно. Кроме того, хотя и старался быть непредвзятым, в список все же попали книги, которые, прежде всего, произвели на меня лично сильное впечатление. Вторая проблема того списка заключалась в том, что понятие «книги по программированию» также слишком широко. Как правильно заметил старина Брукс в своем «человеко-месяце», количество направлений компьютерной науки сейчас столь огромно, что одному человеку достаточно глубоко охватить все, Бог ты мой, даже основные темы, связанные с программированием практически невозможно. Ну, и последним недостатком предыдущей статьи является достаточно поверхностный охват каждой из тем; многие жаловались на то, что в списке по той или иной теме не хватает слишком многих хороших книг.

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

1. Джеффри Рихтер. CLR via C#

Clr via C# С момента выхода языка C# и платформы .NET прошло без малого десять лет и за это время появилось немало отличных книг и статей, но при этом одна книга была и будет настоящей классикой в этой области. Я не знаю ни одной другой книги, которая бы пользовалась такой бы популярностью все эти годы, которую бы столько цитировали и советовали другим. Основное преимущество этой книги заключается в фирменном стиле Рихтера, невероятной глубине изложения и отличной подаче материала. Эта книга посвящена именно платформе .Net, ее фундаментальным основам и основным компонентам; в ней практически нет ничего о конкретном языке программирования, за исключением тех мест, когда автор рассказывает о том, как поступает компилятор в тех или иных случаях. Эта книга уже давно заслужила свое место на полке каждого профессионального .Net разработчика и в дополнительных рекомендациях, в общем-то, не нуждается.

Дополнительные ссылки: рецензия, amazon.com, ozon.ru

2. Bart de Smet C# 4.0 Unleashed

C# 4.0 Unleashed Представьте себе, что Рихтер таки нашел в себе силы и добавил в последнее издание не сотню новых страниц о многопоточности, а полностью переработал книгу и добавил туда сотню страниц по DLR (Dynamic Language Runtime), сотню страниц по лямбда-выражениям и деревьям выражений, еще сотню страниц с советами по работе в Visual Studio, полторы сотни страниц по LINQ-у, да еще и о контрактах не забыл. Добавьте сюда отличные картинки, которые иллюстрируют ход мыслей автора и помогают понять тот или иной аспект рассматриваемой темы; сотню сносок, в которых автор рассказывает, почему были приняты те или иные решения разработчиками языка или платформы, не забудьте о лирических отступления на разные теоретические аспекты программирования - и вы получите одну из лучших книг о языке C# и платформе .Net, которая когда-либо выходила в свет! И, кстати, в отличие от того же Троелсена, в этой книге вы не встретите никаких WPF-ов, WCF-ов или других ASP.NET-ов, все 1650 (!) страниц книги посвящены «всего лишь» языку C# и фундаментальным основам платформы .Net. Сочетание широты охвата и глубины изложения делает эту книгу одним из лучших источников информации для всех, кто хочет заняться изучением языком C# или пополнить свои знания в одной из тем.

Дополнительные ссылки: мнение, amazon.com

3. Jon Skeet, C# in Depth, 2nd edition

C# in depth Если вы когда-либо осмелитесь задать вопрос на StackOverflow.com о том, чтобы почитать для повышения своих знаний о языке C#, то он будет закрыт примерно через 3,5 секунды, как дубликат одного из сотен (!) сообщений, при этом в большинстве из них в первом же ответе будут советовать книгу Джеффри Рихтера, если речь касается еще и CLR и платформы .NET, и книгу Джона Скита, если речь идет о языке C#. Конечно, немаловажную роль в этом играет статус Джона Скита на StackOverflow.com, но, тем не менее, правда в этом действительно есть. У Скита есть удивительная особенность рассказывать сложные вещи простыми словами; многие весьма непростые темы раскрыты очень подробно; автор рассказывает о том, как «думает компилятор» и, что немаловажно, о чем думали разработчики компилятора, принимая то или иное решение при реализации этой возможности.

Благодаря своей структуре, книга “C# In Depth” позволяет увидеть эту целостную картину языка C# и структурировать новые или существующие знания. На протяжении всей книги автор рассказывает об эволюции языка C#, рассматривая по ходу изложения проблемы, присущие предыдущим версиям и способы их решения в последующих версиях. При этом автор дает понять, каким путем идет развитие языка C#, прогнозируя его новые возможности и будущие изменения.

Дополнительные ссылки: рецензия, amazon.com

4. Дон Бокс, Крис Селлз «Программирование на платформе .NET»

Essential CLR Что вы скажете о книге, в которой для знакомства с платформой .NET советуют книгу Рихтера для ознакомления с темой, поскольку в противном случае, ее, родимую, читать будет сложновато? Так вот, именно Дон Бокс, гуру технологии COM (который правда и сам на нее уже не может смотреть) и Крис Селлз (тоже славный малый) осмелились на это в своей книге. И совет этот, действительно полезен, поскольку авторы иногда залазят в такие дебри, что без бУтыля – никуда. Многие темы, такие как взаимодействие управляемого и неуправляемого кода или механизм кросс-доменного взаимодействия описан просто невероятно подробно. Конечно, некоторые темы уже устарели (ведь книга вышла в далеком 2002 году), но большинство из них будут актуальны на протяжении всего времени жизни платформы .NET.

Дополнительные ссылки: amazon.com, ozon.ru

5. Andrew Troelsen. Pro C# 2010 and .NET 4 Platform

Troelsen Как бы я лично не относился к творениям Троелсена, это не изменит того факта, что она является одной из самых популярных книг по языку C#. Большая часть приведенных ранее книг предназначена скорее для «продвинутых пользователей», нежели для новичков. И хотя все перечисленные ранее книги подойдут программисту, не знакомому с языком C# и платформой .NET, но хорошо знакомому с каким-либо другим языком или платформой, они плохо подойдут новичку в программировании. Так что, если речь идет об учебнике, в котором вместо алгоритма разрешения имени сборки будет доходчиво рассказываться о цикле for, объявлениях переменных и основах ООП, то книга Троелсена будет самым лучшим вариантом (хотя, я, конечно, утрирую, основные понятия платформы .NET описаны в этой книге хорошо). И, опять-таки, в отличие от приведенных ранее книг, Троелсен рассматривает очень большое количество тем, начиная, собственно, от языка C#, заканчивая рассмотрением таких технологий, как WCF, WPF, WWF, Windows Forms, ASP.NET, ADO.NET. Такой подход является минусом, если вы хотите глубоко разобраться в одной из этих технологий, но является несомненным плюсом, если вы хотите просто получить представление об одной из этих технологий.

Дополнительные ссылки: amazon.com, ozon.ru

6. Joseph Albahari, Ben Albahari, C# 4.0 in a Nutshell

C# 4.0 in a nutshell Это еще один фундаментальный труд, объемом немногим более тысячи страниц, посвященный исключительно языку программирования C# и платформе .NET. И хотя у нас принято считать книгу Рихтера настоящей классикой, а ко всем остальным относиться с пренебрежением, книга братьев Албахари действительно заслуживает внимание. В этой книге рассматриваются практически все ключевые темы, касающиеся языка C# и платформы .NET, начиная от таких распространенных тем, как многопоточность, сборка мусора, сборки, домены, LINQ, заканчивая менее распространенными темами, как контракты, сериализация, потоковый ввод/вывод и регулярные выражения. И хотя глубина изложения иногда может не дотягивать до некоторых других представителей, в ней отлично соблюден баланс между сложностью изложения и практичностью, так что этой книги в большинстве случаев достаточно для глубокого понимания соответствующей темы.

Дополнительные ссылки: amazon.com, ozon.ru

7. Anders Hejlsberg et al, The C# Programming Language, Fourth Edition

The_Csharp_Programming_LanguageМожно по разному относится к спецификации языка программирования: для некоторых она является необходимым и достаточным источником информации о языке; для других она подобна словарю, в который можно изредка заглядывать, пополняя свои знания по какой-то конкретной теме; третьи вообще не знают о ее существовании. Но как бы лично мы не относились к подобному источнику информации, нужно признать, что в некоторых случаях подобная книга является просто незаменимой. А поскольку эта книга представляет собой не только спецификацию языка, но еще и аннотации известнейших представителей из нашей области, то мы получаем достойную книгу, о которой нужно как минимум знать каждому профессиональному разработчику.

Дополнительные ссылки: amazon.com

8. Krzysztof Cwalina, Brad Abrams. Framework Design Guidelines 2nd Edition

FrameworkDesignGuidelines2ndEditionLarge Разработка качественных систем является весьма сложной задачей, а разработка качественных библиотек (особенно фреймворков) является поистине вершиной мастерства архитекторов и разработчиков. Сложность здесь кроется в специфике принимаемых решений, ведь акцент серьезно смещается в сторону простоты и удобства использования, расширяемости и надежности. И хотя именно тема разработка библиотек является центральной, книга будет также невероятно полезна и простым разработчикам, ведь знание ключевых идиом языка является совершенно необходимым, когда команда смотрит хотя бы немного дальше своего носа, и заботится не только о написании кода, но и о его последующем сопровождении. Кроме того, книга очень часто выступает таким себе арбитром во многих спорах, касающихся идиом именования, обработке исключений, проектированию собственных классов или использованию других идиом языка C#; а поскольку такие дискуссии происходят с завидным постоянством, то подобный козырь лишним точно не будет.

Дополнительные ссылки: рецензия, amazon.com, ozon.ru

9. Bill Wagner. Effective C# (Covers C# 4.0): 50 Specific Ways to Improve Your C#. 2nd Edition, 2010

10. Bill Wagner. More Effective C#: 50 Specific Ways to Improve Your C#, 2008

Effective C# Тема эффективности использования стала настолько популярной, что подобная литература появляется по большинству языков программирования и многим технологиям. Язык программирования C# не является исключением. Представителем серии «эффективного программирования» на языке C# являются две книги Била Вагнера. Первая книга вышла еще в 2004-м году и посвящена C# 1.0; в ней рассматриваются самые разные вопросы, начиная от различий между классами и структурами, заканчивая важностью строгой гарантии исключений и проблемами взаимодействия управляемого и неуправляемого кода. Вторая книга вышла незадолго до официального выхода C# 3.0 и уже отражает всю специфику этой версии языка и платформы. В книге рассматриваются особенности работы с обобщениями (generics), многопоточностью (в том числе и при работе с пользовательским интерфейсом), новые возможности языка C# 3.0 и отдельно рассматриваются вопросы, связанные с LINQ. В марте 2010 года вышло второе, переработанное издание первой книги, в которой отражены изменения C# 4.0, включая такие новшества как PLINQ и тип Dynamic (которому посвящена целая глава).

Дополнительные ссылки: Effective C# at amazon.com, More Effective C# at amazon.com

11. Serge Lidin. Expert .NET 2.0 IL Assembler

Expert IL Assembler Сколько раз вам приходилось декомпилировать код, чтобы понять, как работает та или иная возможность компилятора C#? Или сколько раз вы смотрели на сгенерированный IL код, чтобы понять, что происходит внутри вашего любимого кода? Обе эти задачи возникают не слишком часто, да и Рефлектор со своей задачей отлично справляется в большинстве случаев. Но, тем не менее, знание языка ассемблера виртуальной машины никогда лишним не бывает, к тому же некоторые возможности CLR доступны только через него. Ну, а если когда-нибудь у вас появится желание или необходимость пополнить свои знания «управляемого» ассемблера, то неплохо иметь под рукой (или хотя бы знать о его существовании) отличное руководство, качество которого признано многими специалистами.

Дополнительные ссылки: amazon.com

12. Marcus Heege. Expert C++/CLI

Expert CCLIА теперь еще один вопрос. Сколько раз вы сталкивались со следующей задачей: вы разрабатываете «управляемое» приложение на языке C# (или VB.NET) и возникла задача воспользоваться повторно уже существующим кодом, написанным на языках C или С++, или получить доступ к WinAPI функции, аналогов которой нет в BCL? Никогда? Ну, тогда, вам повезло, и эта книга вам мало чем поможет. Если же такая задача возникала и/или вы хотите разобраться в теме взаимодействия управляемого и неуправляемого кода подробнее, вот тогда книга Маркуса окажется как нельзя кстати. Кроме того, в ней неплохо показаны и более «мирские» вопросы, такие как сборка мусора, сборки, метаданные, работа с неуправляемыми ресурсами и многое другое. Когда-то давным-давно Джеффри Рихтер планировал выпустить книгу “CLR via C++/CLI”, так вот, эту книгу можно рассматривать как ее замену, настолько глубоко и подробно описаны многие темы. Нет, я серьезно, книга настолько хороша, что ее спокойно можно поставить в один ряд с такими классиками жанра, как Бокс или Рихтер!

Дополнительные ссылки: amazon.com

Заключение

Оценка большинства компьютерных книг являются субъективной как минимум по нескольким причинам: любая оценка, сделанная одним человеком, является по своей природе субъективной; даже если я перелопачу весь интернет, я вполне могу пропустить ту книгу, которая понравилась именно вам, ведь вполне очевидно, что осилить такой список книг малореально, да и особой необходимости в этом я не вижу. Кроме того, в большинстве случаев книга «цепляет», когда ты действительно узнаешь что-то новое и интересное, а поскольку многие книги предназначены примерно для одной и той же целевой аудитории, очень мало шансов, что они одинаково понравятся одному и тому же человеку. Поэтому, отсутствие в этом списке вашей любимой книги никак не умаляет ее достоинства, просто она вполне могла не попасться мне на глаза на том же stackoverflow.com или в рекомендациях на amazon.com.

Кроме того, в этом списке нет никаких специализированных книг, например, по WCF, WPF, Windows Forms, ASP.NET и т.д. Это сделано осознанно, поскольку любая такая технология по определению интересна меньшему количеству людей, нежели фундаментальные знания, кроме того, некоторыми из них я просто не занимаюсь настолько плотно, чтобы составить актуальный и полезный список.

12 комментариев:

  1. Добавил бы в этот список книгу Трея Нэша по C#.

    ОтветитьУдалить
  2. @Manushak: картинки добавлю.

    @Gwynbleidd: а чем книга Нэша такая примечательная? На амазоне у нее 3 звезды и пять оценок (я про последнюю версию книги говорю), на Stackoverflow о ней тоже ничего интересного нет...

    Предлагаю пару пруфлинков в студию.

    ОтветитьУдалить
  3. Все супер, пару книг я сам не читал - так что уже взял себе для чтения :)
    Я так понял, что порядок книг у тебя немного изменился под недавним впечатлением о книге де Смета ;)

    ОтветитьУдалить
  4. Чак Норрис кидает взор:
    http://msmvps.com/blogs/jon_skeet/archive/2008/08/01/book-review-accelerated-c-2008-by-trey-nash.aspx

    ОтветитьУдалить
  5. @Gwynbleidd: Да, сильный довод. Пожалуй я познакомлюсь с этой книгой поближе и добавлю ее в этот список.

    Еще думаю сделать тоже самое с Essential C#, о которой неоднократно писал Эрик Липперт.

    ОтветитьУдалить
  6. ' в этом играет статус Джона Скита на StackOverflow.com'

    подправьте линк на StackOverflow, он ведет на ваш локальный ресурс (:

    ОтветитьУдалить
  7. Конечно, немаловажную роль в этом играет статус Джона Скита на StackOverflow.com

    Ссылка на StackOverflow.com - невалидна (:

    ОтветитьУдалить
  8. Здравствуйте, Сергей!
    Посоветуйте какую книгу выбрать для лучшего изучения C# после Троелсена? Рихтера или Барта, или может что-то другое. Желательно чтоб можно было её купить на русском языке :)

    ОтветитьУдалить
    Ответы
    1. Здравствуйте, Тарас.
      Если речь о русскоязычном издании, то тут есть два варианта: Рихтер или Албахари.
      При этом выбор должнен основываться на том, что вам нужно.
      Если хотите большего уклона в платформу .NET (сборки, домены, внутренности CLR) - то Рихтер.
      Если же уклон хочется сделать в C# и .NET Framework, то Албахари.

      Удалить
    2. Спасибо, остановлюсь пока на Албахари, для Рихтера пока рановато :)

      Удалить