Привет!
Будущие студенты Veeam Academy часто спрашивают нас о книгах, которые были бы полезны при подготовке к поступлению на наш курс по программированию на С#. Обычно мы рекомендуем несколько источников, сопровождая их своими комментариями, почему именно они будут полезны.
Однако большинство книг по программированию – это 1К+ страниц, и для их прочтения «от корки до корки» понадобится не один месяц и, возможно, даже не один год! Поэтому все наши рекомендации для абитуриентов Академии Veeam служат лишь ориентиром, а не обязательным требованием.
Со временем мы обобщили свои комментарии по каждому из изданий и в итоге получили список, как нам кажется, хороших книг для профессионального роста C# программиста.
Представляем наш краткий обзор под катом.
Ниже обзор следующих книг:
Читать Рихтера – это как красить стены комнаты в белый цвет. Прочитал один раз – покрасил в один слой. При этом одного слоя обычно бывает мало – краска не всегда ложится ровно и получается не так ярко, как хотелось бы – так что лучше пройтись и закрепить еще одним слоем, а со временем подкрашивать уже отдельные места. В общем, чем больше слоев, тем белее комната!
Каждый раз, перечитывая Рихтера, открываешь для себя что-то новое. И дело не в том, что с регулярной периодичностью выходят обновленные издания этой книги (что, кстати, говорит о ее большой популярности). Даже читая одну и ту же версию, находишь интересные места благодаря глубине и широте, с которой подан материал.
Многие называют эту книгу «библией» и «азбукой» для программистов на C#. Однако стоит заметить, что в ней довольно мало внимания уделено конкретному языку программирования — упор сделан на платформу .Net и основные принципы ее работы.
Поэтому ее все же нельзя считать учебником по C# (в общепринятом для новичков смысле), но можно сказать, что это обязательная книга для любого профессионального .Net разработчика. Однако и в случае, когда вы еще только начинаете свой карьерный путь, Рихтер определенно поможет вам избежать множества ошибок и позволит писать программы более эффективно, так как вы будете глубже понимать платформу.
Итак, что внутри:
Порядка 1000 страниц увлекательного текста про внутреннее устройство общеязыковой исполняющей среды (CLR) Microsoft .NET Framework, написанного простым языком и в дружелюбной манере признанным экспертом в области программирования Джеффри Рихтером.
Главы разбиты на связанные между собой подтемы, однако читать их можно (и даже нужно) не последовательно. В каждой главе есть ссылки на другие главы, что делает удобным чтение по частям и позволит вам не засиживаться на темах, которые сейчас кажутся особенно сложными или неинтересными.
Также на страницах этой книги вы найдете ответы на большую часть вопросов, которые любят задавать на собеседованиях по C# и .Net.
Для специалистов с опытом программирования под платформу .Net эта книга в рекламе не нуждается. Для новичков очень рекомендуем не откладывать знакомство с ней в долгий ящик!
Если у вас уже есть за спиной общий университетский курс по базовым алгоритмам и нужно освежить в памяти основные моменты за короткие сроки, то эта книга одна из лучших.
Это не учебник, а скорее руководство по эффективной разработке алгоритмов на практике. Книгу отличает очень хорошее и доступное изложение, она изобилует ссылками на современную литературу и полезными примерами. Особенно поучительны разделы «Истории из жизни», где автор рассказывает, как находить подходящие решения для непростых задач, с которыми он сталкивался в своей карьере.
Книга состоит из двух частей. Первая часть позволит быстро вспомнить основные моменты из курса по алгоритмам (сложность, типы структур данных, сортировка, работа с графами, комбинаторный поиск, динамическое программирование и др.). Здесь же вы получите практические рекомендации по разработке алгоритмов.
Вторая часть представляет собой каталог структур и алгоритмических задач, который поможет вам найти решение для задачи, с которой вы столкнулись на работе. Приведено множество примеров и полезных ссылок, а также перечислены существующие программные реализации.
Многопоточность – одна из наиболее сложных тем, с которыми сталкивается современный разработчик вне зависимости от выбранного языка программирования. Особенно важна эта тема при написании высоконагруженных распределенных систем, поэтому в
Академии Veeam многопоточности уделяют особое внимание.
Для общего знакомства с этой темой хорошо подойдет сайт Джо Албахари, где структурированно изложен материал из соответствующих глав по многопоточности в среде CLR из его книги
C# in a Nutshell.
Здесь вы найдете примеры работы с потоками: запуск, завершение, прерывание, блокировки, синхронизация, контексты синхронизации и др. Также рассматриваются потоковые возможности .NET (пулы потоков, асинхронные методы), Parallel LINQ, структуры SpinLock/SpinWait и многое другое.
Если захочется копнуть поглубже, то рекомендуем книгу Джо Даффи, обзор которой представлен ниже.
Эта книга по основам T-SQL будет полезна как новичкам, так и опытным разрабочикам, давно знакомым с этим языком. Книгу отличает простота изложения. Помимо основных запросов SQL рассматриваются также табличные выражения, оконные функции и другие темы. Каждая глава сопровождается большим количеством примеров и упражнений для закрепления материала.
Автор не обходит стороной теорию, но не перегружает изложение теоремами и доказательствами.
Даже после многих лет работы с SQL вы непременно откроете для себя что-то новое, а также сможете освежить и упорядочить свои знания.
У этой книги множество отличных отзывов, и это неслучайно. Автор выбрал стиль, похожий на тот, что в свое время использовал основоположник языка С++ Бьерн Страуструп в своей работе «Дизайн и эволюция языка C++». В этой книге рассказывается об основных принципах создания и развития языка C#, показана его эволюция от версии к версии, приводятся объяснения, почему языку была предоставлена та или иная возможность. Все это в итоге формирует целостную картину восприятия языка C#. Книга также содержит советы и практический опыт автора.Тонкости языка раскрываются благодаря многочисленным примерам. Уделяется большое внимание теме LINQ.
Работа Дж. Скита совсем не похожа на книгу Рихтера, хотя здесь тоже подробно написано об особенностях внутренней реализации C#. Нам видится, что в паре с Рихтером эта книга станет отличным пособием для глубокого изучения C# и .NET Framework.
Одну из рецензий можно почитать
здесь.
При чтении труда Джо Даффи можно «закипеть», но усилия того стоят. Это одна из наиболее фундаментальных книг по многопоточности в Windows. Серьезная тема, приличный объем (более 1000 страниц) и глубокое погружение в низкоуровневые детали многопоточности могут оказаться не самым легким чтивом. Однако любой разработчик, который хочет писать эффективный, отказоустойчивый и масштабируемый код (как управляемый — managed, так и неуправляемый — native) для Windows, не должен проходить мимо.
Несмотря на то, что книга была издана десять лет назад, в ней раскрыты практически все темы, связанные с многопоточностью: базовые алгоритмы и примитивы синхронизации, асинхронные модели программирования в .NET, модели памяти, lock-free и многое другое.
Книга сочетает теорию и лучшие практики с множеством примеров использования Win32 и .Net API, а также содержит примеры алгоритмов и структур данных, которые вы сможете использовать в своем коде.
Помимо многопоточности, книга Дж. Даффи поможет более глубоко понять, как работает Windows, CLR и .NET Framework, причем ответит и на вопрос «почему».
Примечание: Здесь не затрагивается тема Task Parallel Library (TPL), поскольку TPL в то время еще не была выпущена. Для знакомства с TPL можно порекомендовать Стивена Клири.
Если вы еще не имеете большого опыта работы с паттернами проектирования, но хотели бы это исправить, а заодно закрепить свои знания в ООП, то эта книга может оказаться очень кстати. Она оформлена в довольно необычном (хотя традиционном для серии книг Head First) стиле – содержит огромное количество картинок, квестов и неформальных описаний, изобилует большим количеством примеров, при этом написана без воды и очень легко читается.
Одновременно с разбором наиболее популярных паттернов и соответствующих UML-диаграмм, здесь также по ходу повествования объясняются основные принципы ООП.
Пусть вас не смущает, что примеры кода представлены на Java. Все они достаточно просты, и даже начинающий разработчик без труда сможет в них разобраться. Это как раз тот случай, когда C# разработчикам бывает полезно заглянуть в книгу по Java.
В отличие от остальной литературы, вошедшей в наш обзор, эта книга изначально написана на русском языке и поэтому лишена недостатков, присущих большинству современных переводов с английского. Однако на этом ее достоинства не заканчиваются.
Книга написана C# разработчиком для C# разработчиков, что подразумевает наличие базовых знаний по ООП с вашей стороны. Автор делится опытом, рассматривая как классические, так и более подходящие для платформы .NET способы реализации каждого паттерна. При этом анализируются плюсы и минусы каждого способа.
На протяжении всей книги возможность применения рассмотренных паттернов демонстрируется на едином примере, что позволяет сформировать целостную картину мира паттернов.
Более подробно о книге можно прочитать здесь.
А как бы дополнили этот список Вы?
Будущие студенты Veeam Academy часто спрашивают нас о книгах, которые были бы полезны при подготовке к поступлению на наш курс по программированию на С#. Обычно мы рекомендуем несколько источников, сопровождая их своими комментариями, почему именно они будут полезны.
Однако большинство книг по программированию – это 1К+ страниц, и для их прочтения «от корки до корки» понадобится не один месяц и, возможно, даже не один год! Поэтому все наши рекомендации для абитуриентов Академии Veeam служат лишь ориентиром, а не обязательным требованием.
Со временем мы обобщили свои комментарии по каждому из изданий и в итоге получили список, как нам кажется, хороших книг для профессионального роста C# программиста.
Представляем наш краткий обзор под катом.
Ниже обзор следующих книг:
- Дж.Рихтер. CLR via C#
- Стивен С. Скиена. Алгоритмы. Руководство по разработке
- Joe Albahari. Threading in C#
- Ицик Бен-Ган. Microsoft SQL Server 2012. Основы T-SQL
- Дж. Скит. C# для профессионалов. Тонкости программирования
- Joe Duffy. Concurrent Programming on Windows
- Эрик Фримен и др. Head First. Паттерны проектирования
- Сергей Тепляков. Паттерны проектирования на платформе .NET
Дж.Рихтер. CLR via C#
Читать Рихтера – это как красить стены комнаты в белый цвет. Прочитал один раз – покрасил в один слой. При этом одного слоя обычно бывает мало – краска не всегда ложится ровно и получается не так ярко, как хотелось бы – так что лучше пройтись и закрепить еще одним слоем, а со временем подкрашивать уже отдельные места. В общем, чем больше слоев, тем белее комната!
Каждый раз, перечитывая Рихтера, открываешь для себя что-то новое. И дело не в том, что с регулярной периодичностью выходят обновленные издания этой книги (что, кстати, говорит о ее большой популярности). Даже читая одну и ту же версию, находишь интересные места благодаря глубине и широте, с которой подан материал.
Многие называют эту книгу «библией» и «азбукой» для программистов на C#. Однако стоит заметить, что в ней довольно мало внимания уделено конкретному языку программирования — упор сделан на платформу .Net и основные принципы ее работы.
Поэтому ее все же нельзя считать учебником по C# (в общепринятом для новичков смысле), но можно сказать, что это обязательная книга для любого профессионального .Net разработчика. Однако и в случае, когда вы еще только начинаете свой карьерный путь, Рихтер определенно поможет вам избежать множества ошибок и позволит писать программы более эффективно, так как вы будете глубже понимать платформу.
Итак, что внутри:
Порядка 1000 страниц увлекательного текста про внутреннее устройство общеязыковой исполняющей среды (CLR) Microsoft .NET Framework, написанного простым языком и в дружелюбной манере признанным экспертом в области программирования Джеффри Рихтером.
Главы разбиты на связанные между собой подтемы, однако читать их можно (и даже нужно) не последовательно. В каждой главе есть ссылки на другие главы, что делает удобным чтение по частям и позволит вам не засиживаться на темах, которые сейчас кажутся особенно сложными или неинтересными.
Также на страницах этой книги вы найдете ответы на большую часть вопросов, которые любят задавать на собеседованиях по C# и .Net.
Для специалистов с опытом программирования под платформу .Net эта книга в рекламе не нуждается. Для новичков очень рекомендуем не откладывать знакомство с ней в долгий ящик!
Стивен С. Скиена. Алгоритмы. Руководство по разработке
Если у вас уже есть за спиной общий университетский курс по базовым алгоритмам и нужно освежить в памяти основные моменты за короткие сроки, то эта книга одна из лучших.
Это не учебник, а скорее руководство по эффективной разработке алгоритмов на практике. Книгу отличает очень хорошее и доступное изложение, она изобилует ссылками на современную литературу и полезными примерами. Особенно поучительны разделы «Истории из жизни», где автор рассказывает, как находить подходящие решения для непростых задач, с которыми он сталкивался в своей карьере.
Книга состоит из двух частей. Первая часть позволит быстро вспомнить основные моменты из курса по алгоритмам (сложность, типы структур данных, сортировка, работа с графами, комбинаторный поиск, динамическое программирование и др.). Здесь же вы получите практические рекомендации по разработке алгоритмов.
Вторая часть представляет собой каталог структур и алгоритмических задач, который поможет вам найти решение для задачи, с которой вы столкнулись на работе. Приведено множество примеров и полезных ссылок, а также перечислены существующие программные реализации.
Joe Albahari. Threading in C#
Многопоточность – одна из наиболее сложных тем, с которыми сталкивается современный разработчик вне зависимости от выбранного языка программирования. Особенно важна эта тема при написании высоконагруженных распределенных систем, поэтому в
Академии Veeam многопоточности уделяют особое внимание.
Для общего знакомства с этой темой хорошо подойдет сайт Джо Албахари, где структурированно изложен материал из соответствующих глав по многопоточности в среде CLR из его книги
C# in a Nutshell.
Здесь вы найдете примеры работы с потоками: запуск, завершение, прерывание, блокировки, синхронизация, контексты синхронизации и др. Также рассматриваются потоковые возможности .NET (пулы потоков, асинхронные методы), Parallel LINQ, структуры SpinLock/SpinWait и многое другое.
Если захочется копнуть поглубже, то рекомендуем книгу Джо Даффи, обзор которой представлен ниже.
Ицик Бен-Ган. Microsoft SQL Server 2012. Основы T-SQL
Эта книга по основам T-SQL будет полезна как новичкам, так и опытным разрабочикам, давно знакомым с этим языком. Книгу отличает простота изложения. Помимо основных запросов SQL рассматриваются также табличные выражения, оконные функции и другие темы. Каждая глава сопровождается большим количеством примеров и упражнений для закрепления материала.
Автор не обходит стороной теорию, но не перегружает изложение теоремами и доказательствами.
Даже после многих лет работы с SQL вы непременно откроете для себя что-то новое, а также сможете освежить и упорядочить свои знания.
Дж. Скит. C# для профессионалов. Тонкости программирования.
У этой книги множество отличных отзывов, и это неслучайно. Автор выбрал стиль, похожий на тот, что в свое время использовал основоположник языка С++ Бьерн Страуструп в своей работе «Дизайн и эволюция языка C++». В этой книге рассказывается об основных принципах создания и развития языка C#, показана его эволюция от версии к версии, приводятся объяснения, почему языку была предоставлена та или иная возможность. Все это в итоге формирует целостную картину восприятия языка C#. Книга также содержит советы и практический опыт автора.Тонкости языка раскрываются благодаря многочисленным примерам. Уделяется большое внимание теме LINQ.
Работа Дж. Скита совсем не похожа на книгу Рихтера, хотя здесь тоже подробно написано об особенностях внутренней реализации C#. Нам видится, что в паре с Рихтером эта книга станет отличным пособием для глубокого изучения C# и .NET Framework.
Одну из рецензий можно почитать
здесь.
Joe Duffy. Concurrent Programming on Windows
При чтении труда Джо Даффи можно «закипеть», но усилия того стоят. Это одна из наиболее фундаментальных книг по многопоточности в Windows. Серьезная тема, приличный объем (более 1000 страниц) и глубокое погружение в низкоуровневые детали многопоточности могут оказаться не самым легким чтивом. Однако любой разработчик, который хочет писать эффективный, отказоустойчивый и масштабируемый код (как управляемый — managed, так и неуправляемый — native) для Windows, не должен проходить мимо.
Несмотря на то, что книга была издана десять лет назад, в ней раскрыты практически все темы, связанные с многопоточностью: базовые алгоритмы и примитивы синхронизации, асинхронные модели программирования в .NET, модели памяти, lock-free и многое другое.
Книга сочетает теорию и лучшие практики с множеством примеров использования Win32 и .Net API, а также содержит примеры алгоритмов и структур данных, которые вы сможете использовать в своем коде.
Помимо многопоточности, книга Дж. Даффи поможет более глубоко понять, как работает Windows, CLR и .NET Framework, причем ответит и на вопрос «почему».
Примечание: Здесь не затрагивается тема Task Parallel Library (TPL), поскольку TPL в то время еще не была выпущена. Для знакомства с TPL можно порекомендовать Стивена Клири.
Эрик Фримен и др. Head First. Паттерны проектирования
Если вы еще не имеете большого опыта работы с паттернами проектирования, но хотели бы это исправить, а заодно закрепить свои знания в ООП, то эта книга может оказаться очень кстати. Она оформлена в довольно необычном (хотя традиционном для серии книг Head First) стиле – содержит огромное количество картинок, квестов и неформальных описаний, изобилует большим количеством примеров, при этом написана без воды и очень легко читается.
Одновременно с разбором наиболее популярных паттернов и соответствующих UML-диаграмм, здесь также по ходу повествования объясняются основные принципы ООП.
Пусть вас не смущает, что примеры кода представлены на Java. Все они достаточно просты, и даже начинающий разработчик без труда сможет в них разобраться. Это как раз тот случай, когда C# разработчикам бывает полезно заглянуть в книгу по Java.
Сергей Тепляков. Паттерны проектирования на платформе .NET
В отличие от остальной литературы, вошедшей в наш обзор, эта книга изначально написана на русском языке и поэтому лишена недостатков, присущих большинству современных переводов с английского. Однако на этом ее достоинства не заканчиваются.
Книга написана C# разработчиком для C# разработчиков, что подразумевает наличие базовых знаний по ООП с вашей стороны. Автор делится опытом, рассматривая как классические, так и более подходящие для платформы .NET способы реализации каждого паттерна. При этом анализируются плюсы и минусы каждого способа.
На протяжении всей книги возможность применения рассмотренных паттернов демонстрируется на едином примере, что позволяет сформировать целостную картину мира паттернов.
Более подробно о книге можно прочитать здесь.
А как бы дополнили этот список Вы?