четверг, 25 марта 2010 г.

О переводе блога Эрика Липперта

Думаю, многие профессиональные .net разработчики знают Эрика Липперта (Eric Lippert), как ведущего разработчика компилятора C# и как одного из самых известных блоггеров по этой тематике.

В своем блоге, который называется “Fabulous Adventures In Coding” Эрик публикует довольно много интересных постов, прежде всего о языке программирования C#, о его новых возможностях, о подводных камнях языка, описывает темные места и т.п., ну и много чего интересного по смежным (и не очень) темам.

Помимо блога на английском языке существует его “младший брат”, вариант блога на русском языке – “Невероятные приключения в коде”. В последние несколько месяцев на русском варианте блога было некоторое затишье и я решил помочь Антону Злыгостеву (a.k.a. Sinclair) в этом деле.

Итак, на сегодняшний день, уже выложены переводы четырех новых сообщений. Это “Простые имена не так уж просты. Часть 2.”, “Трое судей”, “О вреде замыканий на переменных цикла” и “Замыкания на переменных цикла. Часть 2”, помимо этого уже готов перевод еще четырех сообщений (они будут публиковаться по одному-два в день), ну а над остальными я интенсивно работаю:)

Всем желаю приятного чтения, замечания по содержимому сообщений отправляйте “сами знаете кому”, ну а вопросы (пожелания, конструктивные претензии) по переводу можно писать мне.

понедельник, 15 марта 2010 г.

Классические книги по программированию

Ежегодно выходит множество книг по программированию, начиная от описания определенных языков программирования, заканчивая восхвалением методологий, которые, якобы, должны изменить этот компьютерный мир к лучшему. Наиболее сложной задачей для читателя в этом случае является выбор из всего этого многообразия книги, на которую действительно будет не жалко потраченных усилий. На многих форумах довольно легко найти перечень рекомендуемых книг по С++, C#, ООП и чему угодно еще, которые люди относят к классике в своей области. Я же хочу собрать в одном месте книги, которые считаются классическими в различных областях компьютерной науки. При этом я не собираюсь основываться исключительно на собственном мнении (более того, я не готов основываться на мнении любого ОДНОГО человека), а воспользоваться для этих целей мнением компьютерного сообщества.

Хорошей практикой в подборе компьютерной литературы является рассмотрение «перекрестных ссылок» литературных источников. Например, если вы возьмете любую книгу, так или иначе связанную с объектно-ориентированным анализом и проектированием, то в перечне литературы вы несомненно найдете труды Бертрана Мейера, Гради Буча, упоминание книги Банды Четырех (GoF) и, наверняка, Рефакторинг Мартина Фаулера. Такую же картину вы можете наблюдать и пролистывая книги по С++, .Net, базам данных, управлению проектами или любой другой области. Кроме того, многие авторы в перечне литературы приводят не просто голый список, а список с небольшими комментариями, по которым легче судить, какая книга является однодневкой, а какая классической.
Теперь вернемся к самому перечню книг. Приведенный список, ни в коем случае не является окончательным, будет развиваться и дополняться, ведь главная его цель – собрать настоящую классику компьютерной литературы, но не абстрактную, а такую, которая бы помогла практикующему разработчику в заполнении брешей в той или иной области знаний.

Книги по С++

1. Бьерн Страуструп. Язык программирования С++. Специальное издание. Бином, Невский диалект, 2008

cpplanguage

Эта книга стоит первой не потому, что ее автор является по совместительству также и автором языка программирования С++, а потому что она содержит невероятную концентрацию мысли на одну строку текста. К этой книге стоит возвращаться снова и снова, и с высоты своего опыта вы будете находить все новые и новые сведения о программировании вообще и о С++ в частности.

Рецензия

2. Бьерн Страуструп. Дизайн и эволюция языка C++. ДМК Пресс, Питер, 2006

cppdesign

Язык С++ является таким, каким он есть со всеми его достоинствами и недостатками. Но прежде чем говорить о тех или иных архитектурных вопросах, стоит посмотреть на то, в каких условиях находились его авторы и почему они принимали те или иные решения. В этой книге рассказывается именно об этом: для чего были введены ссылки, какие силы двигали командой разработчиков языка при реализации первых шаблонов, почему библиотека ввода/вывода такая, какая она есть и так далее. Все эти сведения помогают несколько мягче относиться к недостаткам языка и с еще большим уважениям относиться к его достоинствам.

Рецензия

3. Скотт Мейерс. Эффективное использование С++

effectivecpp

3.1. Скотт Мейерс. Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ. 3-е издание. ДМК Пресс, 2006

Рецензия

moreeffectivecpp 3.2. Скотт Мейерс. Эффективное использование С++. 35 новых способов улучшить стиль программирования. Питер, 2006

Рецензия

effectivestl

3.3. Скотт Мейерс. Эффективное использование STL. Питер, 2002

Рецензия

Все три книги Скотта Мейерса относятся к категории «для продолжающих» и будут полезны людям уже знакомым с С++, но желающим поднять свои знания на следующий уровень. Книги уже давно стали классикой в своей области и являются родоначальниками серии «Effective programming», главным редактором которой является Скотт Мейерс.

4. Герб Саттер. Сложные задачи (Exceptional C++)

exceptionalcpp 4.1. Герб Саттер. Решение сложных задач на C++. Вильямс, 2008

Рецензия

exceptionalcppstyle 4.2. Герб Саттер. Новые сложные задачи на C++. Вильямс, 2005

Рецензия

Книги Герба Саттера по праву считаются лучшими в области «продвинутых» книг по языку С++. В них рассматриваются интересные задачи и не менее интересные решения, исследуются темные углы языка С++, включая тему безопасности исключений, которая является весьма сложной и наиболее любимой автором (не зря первые две книги автора названы “Exceptional C++” и “More Exceptional C++”). Главы этих книг доступны на сайте автора (http://gotw.ca), кроме того на сайте Герба можно найти множество статей серии Effective Concurrency, которые уже в ближайшее время выйдут в виде новой книги. 

5. Андрей Александреску. Современное проектирование на С++. Вильямс, 2004

moderncppdesign

В своей книге Александреску показывает, как можно реализовать основные шаблоны проектирования, описанные в книге «банды четырех», с помощью современного компилятора С++. Книга требует серьезной подготовки как в области шаблонов проектирования (design patterns), так и шаблонов С++ (C++ templates), поэтому я бы рекомендовал ее к прочтению после тщательного изучения книги «банды четырех» и книги Джосаттиса и Вандервурда по шаблонам С++.

Рецензия

6. Герб Саттер и Андрей Александреску. Стандарты программирования на С++. Вильямс, 2008

cppcodingstandarts

Книга представляет собой концентрацию опыта, накопленного авторами и компьютерным сообществом в области программирования на С++. Ее можно рассматривать как краткую версию «продвинутых» книг по языку программирования С++, ставших такими популярными в последнее время.

Рецензия

7. Дэвид Вандевурд, Николай М. Джосаттис. Шаблоны C++. Справочник разработчика. Вильямс, 2008

cpptemplates

Книга представляет собой наиболее полное руководство по шаблона С++, начиная от простых шаблонов функций и классов, заканчивая метапрограммированием и определением фундаментальных типов во время компиляции. Она прекрасно дополняет книгу Александреску «Современное проектирование», а точнее позволяет понять и реализовать самостоятельно все то, о чем пишет Андреи в своей книге.

Рецензия

Книги по Java

1. Bruce Eckel. Thinking in Java, 4th Edition. Prentice Hall Ptr, 2006

thinking_in_java

Книга Брюса Эккеля является, безусловно, лучшим учебником по языку программирования Java с введением в объектно-ориентированное программирование и шаблоны проектирования. Автор обладает отличным стилем изложения, приводит интересные примеры и не стесняется критики разработчиков языка. В 2009-м году вышла на русский язык под названием «Философия Java», отличительной особенностью русскоязычного варианта является отсутствие пяти глав: Strings, Container In Depth, Enumerated Types, Annotations и Graphic User Interface. Поэтому вопрос о том, какой вариант выбирать остается открытым.

2. Кей Хорстманн, Гари Корнелл. Java 2. Библиотека профессионала.

core_java_vol1 2.1. Кей Хорстманн, Гари Корнелл. Java 2. Библиотека профессионала. Том 1. Основы. 8-е издание. Вильямс, 2008
core_java_vol2 2.2. Кей Хорстманн, Гари Корнелл. Java 2. Библиотека профессионала.Том 2. Тонкости программирования. 8-е издание. Вильямс, 2008


Наиболее фундаментальный труд по языку Java.

3. Joshua Bloch. Effective Java, 2nd Edition. Prentice Hall, 2008

effective_java Книга Джошуа Блоха занимает то же положение на полке Java программиста, что и книги Скотта Мейерса и Герба Саттера на полке С++ программиста. Эта книга содержит множество приемов и идиом и будет полезна каждому, кто всерьез занимается этим замечательным языком.

4. Brian Goetz et al. Java Concurrency in Practice. Addison-Wesley Professional, 2006

java_concurrency

Хотя язык программирования Java значительно упрощает разработку многопоточных приложений, многопоточность все еще остается одной из наиболее сложных задач, с которыми сталкивается современный разработчик. Эта книга как раз и призвана помочь в решении подобных задач на языке Java.

Рецензия

Книги по .Net, C#

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

clr_via_csharp 1.1. Джеффри Рихтер. CLR via C#. Питер, Русская редакция, 2007

Рецензия

clr_via_csharp_third 1.2. Jeffrey Richter. CLR via C#. 3d Edition. Microsoft Press, 2010

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

2. Дон Бокс, Крис Селлз. Основы платформы .NET. Том 1. Общеязыковая исполняющая среда. Вильямс, 2003

essential_net

При своем небольшом объеме (всего 288 страниц) и почтенном возрасте (оригинал вышел в 2002 году) книга остается ценным экспонатом в библиотеке .Net программиста. Поскольку авторы описывают исключительно фундаментальные концепции платформы, причем делают это с невероятным талантом, совмещая доступность изложения и глубину, поэтому эта книга остается, и будет оставаться актуальной на протяжении всего времени жизни платформы .Net.

 
3. Krzysztof Cwalina, Brad Abrams. Framework Design Guidelines 2nd Edition. Addison-Wesley Professional, 2008

Framework_Design

Разработка качественных программных систем является весьма сложной задачей, а разработка качественных библиотек (особенно framework-ов) является поистине вершиной мастерства архитекторов и разработчиков. Сложность здесь кроется в специфике принимаемых решений, ведь акцент серьезно смещается в сторону простоты и удобства использования, расширяемости и надежности. Но хотя эта тема является центральной, книга будет также весьма полезна и простым разработчикам, ведь знание ключевых идиом языка является совершенно необходимым, когда команда смотрит хотя бы немного дальше своего носа, и заботится не только о написании кода, но и о его последующем сопровождении.

Рецензия

4. Bill Wagner. Effective C#

effective_csharp 4.1. Bill Wagner. Effective C# (Covers C# 4.0): 50 Specific Ways to Improve Your C#. 2nd Edition. Addison-Wesley Professional, 2010

more_effective_csharp 4.2. Bill Wagner. More Effective C#: 50 Specific Ways to Improve Your C#. Addison-Wesley Professional, 2008

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

Книги по ООП, шаблонам проектирования

1. Бертран Мейер. Объектно-ориентированное конструирование программных систем, 2-е издание. Русская редакция, 2005

meyer

Книга, которую многие по своей фундаментальности в области объектно-ориентированного программирования сравнивают с творением Дональда Кнута (причем совершенно без преувеличения) в области алгоритмов и структур данных. Эта книга является наиболее фундаментальным трудом по объектной парадигме, когда-либо выходивших на русском или на английском языках. Книга охватывает широкий круг вопросов, начиная от вопросов наследование, инкапсуляция, модульности, повторного использования, заканчивая автоматическим управлением памятью, шаблонами проектирования и проектированием по контракту (который только спустя два десятилетия начинает набирать обороты в mainstream языках и технологиях).

2. Гради Буч. Объектно-ориентированный анализ и проектирование, 3-е издание. Вильямс, 2008

booch

Еще одна классическая книга по объектно-ориентированному программированию, но в отличие от книги Бертрана Мейера имеет менее формальный и более описательный характер. В книге потрясающе описана проблема сложности ПО, описаны роли абстракции и иерархии, изложено сравнение наиболее популярные на сегодняшний день методологии разработки и многое другое.

Рецензия

3. Эрик Гамма, Ральф Джонсон, Ричард Хелм, Джон Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования. Питер, 2007

GoF

Это та самая, знаменитая книга «банды четырех», после выхода которой началось стремительное развитие идеи шаблонов проектирования в мире разработки ПО. После ее выхода идея шаблонов начала распространяться и развиваться, и сегодня идеи шаблонов применяется не только в контексте проектирования, а и практически в каждой области разработки программного обеспечения.

Рецензия

4. Мартин Фаулер. Рефакторинг. Улучшение существующего кода. Символ-Плюс, 2008

refactoring

Книга стала родоначальником столь популярного ныне принципа постепенного улучшения кода без изменения функциональности, что сделало ее уже давно классической. Помимо перечня рефакторингов в книге много говорится о качестве кода, о его влиянии на производительность программы и стоимость ее сопровождения; содержится множество примеров некачественного кода, что помогает понять, когда стоит применять рефакторинг, а когда нет.

Рецензия

Книги по управлению проектами

1. Фредерик Брукс. Мифический человеко-месяц или Как создаются программные системы, 2-е издание. Символ-Плюс, 2006

brooks Эта книга (как и многие другие в этом перечне) не нуждается в представлении. Такие понятия, как «мифический человеко-месяц», «смоляная яма», «серебряная пуля» и многие другие уже давно стали классическими, фрагменты из книги постоянно появляются на форумах, в статьях, их цитируют известные современные авторы. Первое издание книги вышло более трех десятилетий лет назад, но она продолжает будоражить умы все новых и новых читателей, и продолжает оставаться такой же актуальной, как и много лет назад.

Рецензия

2. Том ДеМарко и Тимоти Листер. Человеческий фактор. Успешные проекты и команды. 2-е издание. Символ-Плюс, 2009

peopleware

Книга «Человеческий фактор» является отличным доказательством того, что, несмотря на стремительное развитие технологий, человеческий фактор является одной из наиболее сложных проблем при построении программных систем. Фредерик Брукс (читая лекции своим студентам) выделил следующие фундаментальные концепции книги: 1) важность кристаллизации команд (team jelling) и понятие травли команд (teamicide); 2) важность рабочего пространства; 3) акцент на «качестве сотрудников»; 4) влияние (негативное) на переезд крупного программного проекта с одного места (географического) в другое. Этой книге уготована долгая жизнь по той же причине, «почему рассказы Гомера пережили тысячи лет: эти рассказы о людях, и они также верны сегодня, как и тысячу лет назад».

Рецензия

3. Эдвард Йордон. Путь камикадзе. 2-е издание. Лори, 2008

death_march

Еще одна классическая книга по управлению проектами, но в отличие от предыдущих книг, посвящена работе над безнадежными проектами (риск провала которых превышает 50%). В книге рассматривается широкий спектр проблем, начиная от политики и принципов ведения переговоров, заканчивая ролью человеческого фактора и важностью инструментальных средств.

Рецензия

Книги по WinAPI/WinSocks

1. Джеффри Рихтер, Кристоф Назарр. Windows via C/C++. 5-е издание. Питер, Русская Редакция, 2009

windows_via_c

Это классическая и однозначно самая лучшая книга по программированию в Microsoft Windows. Если вам нужно понять что такое объекты ядра, потоки, принципы синхронизации потоков, таймера, асинхронный ввод-вывод, архитектура памяти, структурная обработка исключений, DLL и все что с ними связано и многое другое, то эта книга именно то, что нужно.

Рецензия

2. Джеффри Рихтер, Джейсон Кларк. Программирование серверных приложений для Microsoft Windows 2000. Питер, Русская Редакция, 2001

programming_server_side

Прекрасное дополнение к предыдущей книги Джеффри Рихтера для разработчиков серверных приложений. Хотя эта книга и не является столь популярной, как предыдущая (в связи со своей более узкой направленностью), она также отличается глубиной изложения, которую весьма сложно найти в каком-либо другом источнике. Поэтому если вам интересна тема разработки серверных приложений – книга будет очень полезной.

Рецензия

3. Энтони Джонс, Джим Оланд. Программирование в сетях Microsoft Windows. Питер, Русская Редакция, 2002

network

Наиболее полное руководство по разработке сетевых приложений с использованием WinAPI. Если вдруг понадобиться поработать с NetBIOS, именованными каналами, реализовать асинхронный ввод-вывод с помощью портов завершения, настроить качество обслуживания или воспользоваться простыми (Raw) сокетами, эта книга будет как нельзя кстати.

Книги по COM/ATL

1. Дон Бокс. Сущность технологии COM, Питер

essential_com

Если вы все же каким-то образом связаны с этой замечательной технологией, «с маршалингом, моникерами, распределенными потоками, агрегатами и миллионом других вещей, которые понимал только Дон Бокс, и даже Дон Бокс больше не может на это смотреть», то эта книга должна быть первой в вашем списке. А если серьезно, то это лучшая и единственная книга по технологии COM, которая поможет вам понять эту технологию.

Рецензия

2. Кристофер Таваре, Кирк Фертитта, Брент Ректор, Крис Селлз. ATL 8. Внутренняя структура и применение. 2-е издание. Вильямс, 2007

atl

Лучшая и единственная (ну, не совсем единственная, но остальные книги выходили не позднее 2000 года) книга по библиотеке ATL.

Алгоритмы

1. Дональд Э. Кнут. Искусство программирования

knuth1

1.1. Дональд Э. Кнут. Искусство программирования. Том 1. Основные алгоритмы. 3-е издание. Вильямс, 2008

knuth2 1.2. Дональд Э. Кнут. Искусство программирования. Том 2. Получисленные алгоритмы. 3-е издание. Вильямс, 2005
knuth3 1.3. Дональд Э. Кнут. Искусство программирования. Том 3. Сортировка и поиск. 2-е издание. Вильямс, 2008

Одна из наиболее известных в мире книг по программированию, Фундаментальный Труд, которому автор посвятил всю свою жизнь. И хотя сегодня современный прикладной программист не каждый день сталкивается с проблемами, решение которых он мог бы найти на страницах этой книги, это ни сколько не умаляет ее достоинств. Несмотря на стремительное развитие языков, инструментов, библиотек, каждый хороший программист периодически возвращается к ключевым темам, без знания которых невозможно стать Настоящим Программистом.

2. Генри C. Уоррен, мл. Алгоритмические трюки для программистов. Вильямс, 2007

hackers_delight

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

Рецензия

Общие вопросы программирования

1. Эндрю Хант и Дэвид Томас. Программист-прагматик. Путь от подмастерья к мастеру. Лори, 2009

pragmatic

Это одна из тех книг, которые учит постоянно двигаться вперед в своем профессиональном плане, не зацикливаться на определенных языках или платформах, на методологиях и парадигмах программирования, на инструментах и идиомах. В книге рассматривается широкий ряд вопросов, здесь вам и проблемы «добычи» требований, и особенности написания спецификаций, и сложность оценки сроков, и важность тестирования, и закон Деметера, и выбор между сложностью разработки и сопровождения и многое другое. Книга представляет собой такой себе программистско-философский труд, который просто заставляет задуматься над многими (хотя может быть и очевидными для многих) вопросами разработки ПО.

Рецензия

2. Джон Бентли. Жемчужины программирования, 2-е издание. Питер, 2007

perls

Нельзя назвать эту книгу простой, поскольку темы, рассматриваемые в книге, таковыми не являются, но стиль изложения материала и перечень лирических отступлений существенно упрощает восприятие (книга больше напоминают рубрику «Занимательное программирование», и является одной из самых известных книг в своей области). Несмотря на это, темы, затронутые в книги, являются исключительно серьезными. Здесь и общие вопросы программирования, и алгоритмы, и структуры данных, и вопросы оптимизации и отладки, и умение делать предварительные оценки, и много чего еще. Только при чтении книги нужно следовать совету автора и не спешить, а тщательно продумывать и прорабатывать весь материал, вот тогда от книги будет максимальная отдача.

Рецензия

3. Стив Макконнел. Совершенный код. 2-е издание. Питер, 2007

code_complete

По статистике над одним проектом в среднем работает 10 поколений разработчиков, а это значит, что большая часть жизненного цикла ПО составляет его поддержка и сопровождение. Из чего можно сделать простой вывод, что за _чтением_ программы проводится гораздо больше временем, чем за ее _написанием_, а это, в свою очередь значит, что качество кода играет очень важную роль. В этом вопросе книга Стива Макконнелла (как и многие книги в этом списке) является лучшей в своей области. В книге рассматривается широкий спектр вопросов, так или иначе связанных с кодированием, начиная от правил именования переменных (которым выделены 52 (!) страницы), заканчивая рефакторингом и рекомендациям по оптимизации.

Рецензия

4. Джеффри Фриддл. Регулярные выражения. 3-е издание. Символ-Плюс, 2008

regex

Наиболее фундаментальный труд по теме регулярных выражений, который когда-либо выходил в свет (все же книга посвящена только этой теме и содержит 608 страниц). Книга содержит описание работы трех типов механизмов регулярных выражений, содержит примеры оптимизации и особенности применения в различных языках программирования и средах.

Базы данных

1. К. Дж. Дейт. Введение в системы баз данных. 8-е издание. Вильямс, 2006

introduction_to_database

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

2. Джеффри Ульман и др. Системы баз данных полный курс, Вильямс, 2004

data_base__complete_book

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