Основано на посте Сергея Теплякова.Для новичка в .NETВыбор книги для новичка в C#/.NET зависит того, что понимается под понятием "новичок": это новичок в C#/.NET или новичок в программировании? Если у вас есть 3+ опыта в С++, Java или другом высокоуровневом языке программирования, то разумнее будет сразу перейти к списку книг для продвинутых .NET разработчиков.В противном случае подойдет практически любая обзорная книга о C# и платформе .NET, при этом классическим примером такой книги является книга Эндрю Троелсена: "Язык программирования C# 5.0 и платформа .NET 4.5", Эндрю Троелсен, 6-е издание, 2012В отличии от всех других книг, приведенных в этом списке, лишь эта книга не предполагает практически никакого опыта со стороны читателя. Поэтому в книге рассказывается о циклах, объявлении переменных и основах ООП. Также это единственная "универсальная" книга в списке, которая покрывает самые разные технологии платформы .NET: ASP.NET, WPF, WWF, WCF, ADO.NET, а также основы языка C#, отражение, процессы/потоки/домены, многопоточность и ввод-вывод. Для продвинутого .NET разработчикаЕще раз напомню, что под "продвинутым" в данном случае имеется ввиду скорее ваш собственный уровень зрелости, а не " продвинутое" знание C#/.NET. Так, если вы хорошо знаете С++, то чтение Троелсена будет пустой тратой времени, поскольку вы будете стараться понять, как же C#/.NET устроен внутри, чего книга Троелсена просто не даст.Так что если вы чувствуете в себе силы копнуть глубже, то лучше всего выбрать одну книгу из списка ниже. При этом выбор должен основываться на следующем критерии: если интересны внутренности платформы .NET/CLR + многопоточность, то это книга Джеффри Рихтера, если же больше интересен именно язык C# — то это книги Албахари или Барта де Смета (при этом у Албахари будет побольше описания базовой библиотеки классов). Если вы уже неплохо знаете C# и хочется ускоренного глубокого погружения, то нужно брать книгу Джона Скита или книги Билла Вагнера. “CLR via C#”, Джеффри Рихтер, 4-е издание, 2012С момента выхода языка C# и платформы .NET прошло без малого десять лет и за это время появилось немало отличных книг и статей, но при этом одна книга была и будет настоящей классикой в этой области. Я не знаю ни одной другой книги, которая бы пользовалась такой бы популярностью все эти годы, которую бы столько цитировали и советовали другим. Основное преимущество этой книги заключается в фирменном стиле Рихтера, невероятной глубине изложения и отличной подаче материала. Эта книга посвящена именно платформе .Net, ее фундаментальным основам и основным компонентам; в ней практически нет ничего о конкретном языке программирования, за исключением тех мест, когда автор рассказывает о том, как поступает компилятор в тех или иных случаях. Эта книга уже давно заслужила свое место на полке каждого профессионального .Net разработчика и в дополнительных рекомендациях, в общем-то, не нуждается. "Программирование на платформе .NET", Дон Бокс, Крис Селлз, 2002Что вы скажете о книге, в которой для знакомства с платформой .NET советуют книгу Рихтера для ознакомления с темой, поскольку в противном случае, ее, родимую, читать будет сложновато? Так вот, именно Дон Бокс, гуру технологии COM (который правда и сам на нее уже не может смотреть) и Крис Селлз (тоже славный малый) осмелились на это в своей книге. И совет этот, действительно полезен, поскольку авторы иногда залазят в такие дебри, что без бУтыля – никуда. Многие темы, такие как взаимодействие управляемого и неуправляемого кода или механизм кросс-доменного взаимодействия описан просто невероятно подробно. Конечно, некоторые темы уже устарели (ведь книга вышла в далеком 2002 году), но большинство из них будут актуальны на протяжении всего времени жизни платформы .NET. “C# 5.0 Unleashed” by Bart De Smet, 2nd Edition, 2012Представьте себе, что Рихтер таки нашел в себе силы и добавил в последнее издание не сотню новых страниц о многопоточности, а полностью переработал книгу и добавил туда сотню страниц по DLR (Dynamic Language Runtime), сотню страниц по лямбда-выражениям и деревьям выражений, еще сотню страниц с советами по работе в Visual Studio, полторы сотни страниц по LINQ-у, да еще и о контрактах не забыл. Добавьте сюда отличные картинки, которые иллюстрируют ход мыслей автора и помогают понять тот или иной аспект рассматриваемой темы; сотню сносок, в которых автор рассказывает, почему были приняты те или иные решения разработчиками языка или платформы, не забудьте о лирических отступления на разные теоретические аспекты программирования — и вы получите одну из лучших книг о языке C# и платформе .Net, которая когда-либо выходила в свет! И, кстати, в отличие от того же Троелсена, в этой книге вы не встретите никаких WPF-ов, WCF-ов или других ASP.NET-ов, все 1650 (!) страниц книги посвящены «всего лишь» языку C# и фундаментальным основам платформы .Net. Сочетание широты охвата и глубины изложения делает эту книгу одним из лучших источников информации для всех, кто хочет заняться изучением языком C# или пополнить свои знания в одной из тем. “C# 5.0 in a Nutshell” by Joseph Albahari, Ben Albahari, 5th Edition, 2012Это еще один фундаментальный труд, объемом немногим более тысячи страниц, посвященный исключительно языку программирования C# и платформе .NET. И хотя у нас принято считать книгу Рихтера настоящей классикой, а ко всем остальным относиться с пренебрежением, книга братьев Албахари действительно заслуживает внимание. В этой книге рассматриваются практически все ключевые темы, касающиеся языка C# и платформы .NET, начиная от таких распространенных тем, как многопоточность, сборка мусора, сборки, домены, LINQ, заканчивая менее распространенными темами, как контракты, сериализация, потоковый ввод/вывод и регулярные выражения. И хотя глубина изложения иногда может не дотягивать до некоторых других представителей, в ней отлично соблюден баланс между сложностью изложения и практичностью, так что этой книги в большинстве случаев достаточно для глубокого понимания соответствующей темы. “C# in Depth” by Jon Skeet, 3d Edition, 2013Если вы когда-либо осмелитесь задать вопрос на StackOverflow.com о том, чтобы почитать для повышения своих знаний о языке C#, то он будет закрыт примерно через 3,5 секунды, как дубликат одного из сотен (!) сообщений, при этом в большинстве из них в первом же ответе будут советовать книгу Джеффри Рихтера, если речь касается еще и CLR и платформы .NET, и книгу Джона Скита, если речь идет о языке C#. Конечно, немаловажную роль в этом играет статус Джона Скита на StackOverflow.com, но, тем не менее, правда в этом действительно есть. У Скита есть удивительная особенность рассказывать сложные вещи простыми словами; многие весьма непростые темы раскрыты очень подробно; автор рассказывает о том, как «думает компилятор» и, что немаловажно, о чем думали разработчики компилятора, принимая то или иное решение при реализации этой возможности. Благодаря своей структуре, книга “C# In Depth” позволяет увидеть эту целостную картину языка C# и структурировать новые или существующие знания. На протяжении всей книги автор рассказывает об эволюции языка C#, рассматривая по ходу изложения проблемы, присущие предыдущим версиям и способы их решения в последующих версиях. При этом автор дает понять, каким путем идет развитие языка C#, прогнозируя его новые возможности и будущие изменения. “Effective C# (Covers C# 4.0)”, “More Effective C#” by Bill Wagner, 2010, 2008Тема эффективности использования стала настолько популярной, что подобная литература появляется по большинству языков программирования и многим технологиям. Язык программирования C# не является исключением. Представителем серии «эффективного программирования» на языке C# являются две книги Била Вагнера. Первая книга вышла еще в 2004-м году и посвящена C# 1.0; в ней рассматриваются самые разные вопросы, начиная от различий между классами и структурами, заканчивая важностью строгой гарантии исключений и проблемами взаимодействия управляемого и неуправляемого кода. Вторая книга вышла незадолго до официального выхода C# 3.0 и уже отражает всю специфику этой версии языка и платформы. В книге рассматриваются особенности работы с обобщениями (generics), многопоточностью (в том числе и при работе с пользовательским интерфейсом), новые возможности языка C# 3.0 и отдельно рассматриваются вопросы, связанные с LINQ. В марте 2010 года вышло второе, переработанное издание первой книги, в которой отражены изменения C# 4.0, включая такие новшества как PLINQ и тип Dynamic (которому посвящена целая глава). Для экспертаНесмотря на всю глубину глубин книг Рихтера, Барта Де Смета или Джона Скита, есть еще более специфические и более подробные источники по конкретным темам. Так, например, ни одна из книг выше не заменит аннотированную спецификацию языка C# Андерса Хейлсберга с прекрасными комментариями ведущих экспертов нашей области. Да и какими бы полными не были разделы о параллельном и асинхронном программировании в книгах Рихтера и Албахари, ничто не сможет сравниться с книгой Джо Даффи. А если вам потребуется копнуть действительно глубоко, то вам пригодятся знания по языку IL, и о том, как IL преобразуется в машинный код, и в этом случае будут полезны книги Сергея Лидина и Саши Голштейна соответственно.“The C# Programming Language” by Anders Hejlsberg et al, 4th Edition, 2010Можно по-разному относится к спецификации языка программирования: для некоторых она является необходимым и достаточным источником информации о языке; для других она подобна словарю, в который можно изредка заглядывать, пополняя свои знания по какой-то конкретной теме; третьи вообще не знают о ее существовании. Но как бы лично мы не относились к подобному источнику информации, нужно признать, что в некоторых случаях подобная книга является просто незаменимой. А поскольку эта книга представляет собой не только спецификацию языка, но еще и аннотации известнейших представителей из нашей области, то мы получаем достойную книгу, о которой нужно как минимум знать каждому профессиональному разработчику. “Concurrent Programming on Windows” by Joe Duffy, 2008Самый подробный труд о многопоточном программировании под Windows. Здесь покрыты практически все темы: начиная от асинхронных моделей программирования в .NET (к сожалению не покрыта TAP – Task-based Asynchronous Programming) и асинхронным вводом-выводом, заканчивая моделями памяти и lock-free. Хотите сломать себе мозг об многопоточность? Книга Джо Даффи к вашим услугам! В качестве дополнения к книге Джо Даффи можно посоветовать "Design Patterns for Decomposition and Coordination on Multicore Architectures", в которой покрыты TPL, PLINQ и другие темы, появившиеся уже после выхода книги Даффи. “.NET 2.0 IL Assembler” by Serge Lidin, 2014Сколько раз вам приходилось декомпилировать код, чтобы понять, как работает та или иная возможность компилятора C#? Или сколько раз вы смотрели на сгенерированный IL код, чтобы понять, что происходит внутри вашего любимого кода? Обе эти задачи возникают не слишком часто, да и Рефлектор со своей задачей отлично справляется в большинстве случаев. Но, тем не менее, знание языка ассемблера виртуальной машины никогда лишним не бывает, к тому же некоторые возможности CLR доступны только через него. Ну, а если когда-нибудь у вас появится желание или необходимость пополнить свои знания «управляемого» ассемблера, то неплохо иметь под рукой (или хотя бы знать о его существовании) отличное руководство, качество которого признано многими специалистами. P.S. Сергей является автором языка IL “Pro .NET Performance: Optimize Your C# Applications” by Sasha Goldshtein, 2012Когда речь заходит о высокопроизводительных системах, то о C# и .NET Framework вспоминают в последнюю очередь. В этом есть разумное зерно, но что если вам все же нужно выжать все возможное из вашего "управляемого" приложения? В этом плане недостаточно спуститься с высокого уровня языка C# на уровень IL-кода, приходится копать глубже, на уровень машинного кода и внутренностей CLR. Именно для таких случаев нужна книга Саши Голшейна, известного блоггера и спикера. "Pro .NET Performance" – это уникальная на данный момент книга с описанием внутреннего устройства типов, обобщений, с описанием тонкостей сборки мусора (например, с описанием Card Table) и другими экспертными техниками. “Under the Hood of .NET Memory Management” by Chris Farrell, 2011Небольшая (~200 страниц) книга о сборке мусора от компании Red Gate. Это отличная книга, в которой процесс сборки мусора показан несколько более детально, чем в любом другом источнике. Здесь довольно подробно описываются сегменты, card table, типичные проблемы перерасхода и утечек памяти, и даже кратко рассматривается модель памяти Windows. Однозначно полезная книга, если решите узнать об управляемой памяти больше, чем описано у старины Рихтера. Книги по проектированиюНи одна из книг, представленных выше не даст нужных знаний об ООП, функциональном программировании, или о дизайне приложений. Если вам нужна книга по ООД, то нет ничего лучше книги Мейера "Объектно-ориентированное конструирование программных систем", о которой я говорю трижды в день десятку человек, но пока лишь двое решились за нее взятьсяJ.Тем не менее, есть ряд книг о дизайне в контексте платформы .NET, на которые стоит обратить внимание. Во-первых, это знаменитая FDG – Framework Design Guidelines Квалины и Абрамса, которая должна быть настольной книгой любого .NET разработчика (и просто незаменима при разработке собственных coding conventions). Во-вторых, это замечательная книга Роя Ошерова "The Art of Unit Testing", в которой отлично описаны техники и приемы юнит-тестирования и их влияние на дизайн приложений. В-третьих, это уникальная в своем роде книга Марка Симана об управлении зависимостями в .NET, ну и книга Томаса Петрисека "Real-World Functional Programming", которая показывает связь ООП и ФП техник с примерами на C# и F#. Ни одна из этих книг не заменит фундаментальных книг о дизайне, DDD или архитектуре приложений, но отлично подойдет в качестве дополнительного источника по этим темам. “Framework Design Guidelines” by Krzysztof Cwalina, Brad Abrams, 2nd Edition, 2008Разработка качественных систем является весьма сложной задачей, а разработка качественных библиотек (особенно фреймворков) является поистине вершиной мастерства архитекторов и разработчиков. Сложность здесь кроется в специфике принимаемых решений, ведь акцент серьезно смещается в сторону простоты и удобства использования, расширяемости и надежности. И хотя именно тема разработка библиотек является центральной, книга будет также невероятно полезна и простым разработчикам, ведь знание ключевых идиом языка является совершенно необходимым, когда команда смотрит хотя бы немного дальше своего носа, и заботится не только о написании кода, но и о его последующем сопровождении. Кроме того, книга очень часто выступает таким себе арбитром во многих спорах, касающихся идиом именования, обработке исключений, проектированию собственных классов или использованию других идиом языка C#; а поскольку такие дискуссии происходят с завидным постоянством, то подобный козырь лишним точно не будет. “Dependency Injection in .NET” by Mark Seemann, 2011Внедрение зависимостей (DI, Dependency Injection) – это уже чуть ли не де факто стандарт любого enterprise приложения. Но вот вопрос: помогает ли эта техника вместе с контейнерами создавать более простые в сопровождении и развитии системы? Не превратились ли контейнеры в очередной культ карго программирования? Поскольку любую технологию довольно легко использовать неправильно, то всегда полезно получить более фундаментальное представление о том, чем она является и чем она не является. Книга Марка Сиимана является довольно уникальным сборником советов, паттернов и примеров использования техники внедрения зависимостей. Поэтому не зависимо от того, являетесь ли вы сторонником или противником DI и IoC эта книга будет вам полезной. “The Art of Unit Testing with Examples in C#” by Roy Osherove, 2nd Edition, 2013Паттерны не ограничиваются классическими паттернами, описанными в книге банды четырех. Паттерны повсюду: есть архитектурные паттерны, есть паттерны проектирования, есть DI-паттерны, есть DDD паттерны, есть паттерны рефакторинга, есть даже паттерны поведения. Точно также существуют паттерны разработки юнит-тестов. Есть типовые подходы к организации тестового кода для решения тех или иных задач. Лучшим источником по этой теме является фундаментальный труд "xUnit Test Patterns: Refactoring Test Code", а книга Роя является отличной книгой по этой же тематике в контексте платформы .NET. “Real-World Functional Programming: With Examples in F# and C#” by Tomas Petricek and Jon Skeet, 2010Что лучше ООП или ФП? Опыт последних лет (мой и многих других специалистов) показывает, что эти парадигмы не являются соперниками, а прекрасно дополняют друг друга. ООП рулит в области стратегии, а ФП незаменимо в вопросах тактики; ООП со своей абстракцией определяет крупные строительные блоки, а ФП со своей чистотой прекрасно справляется с вопросами реализации. В этом плане книга Томаса Петрисека (с участием Джона "Stackoverflow" Скита) не слишком уникальна, но весьма полезна, поскольку дает представление о том, как думать в функциональном стиле и как это мышление влияет на дизайн и реализацию. Отличительной же особенностью этой книги являются примеры на языках C# и F#. Книги по технологиямЯ не хочу детально описывать книги по конкретным технологиям, таким как WCF, WPF, ASP.NET (+MVC), Entity Framework и других. Причин здесь несколько: во-первых, очень сложно найти книгу, которая будет значительно выделяться среди конкурентов; во-вторых, цена ошибки при выборе неудачной книги в этом случае не столь велика. Наверняка книга с хорошим рейтингом даст вам все необходимые знания по конкретной технологии и вряд ли сможет существенно повлиять на ваши фундаментальные знания.К тому же, книги по технологиям выходят настолько часто, что они устаревают буквально каждые полгода. Ниже представлен перечень книг по тройке технологий: WPF, WCF и ASP.NET MVC. Книги по другим технологиям готов обсудить в комментариях.
WCF: Programming WCF Services by Juval Lowy (rus), 3d Edition, 2010 WCF: Inside Windows Communication Foundation by Justin Smith, 2007 Книга хоть и старая, но будет полезна всем, кто решит заняться "расширением" WCF, путем написания собственных коммуникационных каналов и т.п. "продвинутыми" вещами. ASP.NET MVC: Pro ASP.NET MVC 4 by Adam Freeman (rus), 2013 |