Книги, которые должен прочитать Java программист: от новичка до профессионала
[Примечание переводчика: термины градации «профессионализма» оставлены англоязычные в связи с трудностью их адекватного перевода на русский и несовпадением с привычными Junior-Middle-Senior-Lead. Перевод достаточно вольный — если знаний языка хватает, то лучше читать оригинал, как и советует автор. Оба языка для меня не родные, так что про ошибки сообщайте в личку — исправим. Здесь и далее в квадратных скобках примечания переводчика]
Я заметил, что в последние месяцы я рекомендую одни и те же книги как новичкам, так и опытным разработчикам. Поэтому я решил составить список этих книг. Они составили мне неплохую компанию в процессе моего роста от новичка до сегодняшнего уровня (какой-бы он не был :) ) Составить список мне помогали друзья и коллеги. Особая благодарнасть Frank Appel, Rüdiger Herrmann, Benjamin Muskalla и Ralf Sternberg
Порядок книг в списке отражает мой персональный выбор. Меняйте его, как вам угодно :) Одна важная вещь — если вы покупаете книгу из этого списка, то всегда выбирайте англоязычный вариант. Даже если есть перевод на ваш родной язык, оригинальная версия почти всегда лучший выбор.
Beginner
Если вы только начали знакомство с Java, то для начала нужно познакомиться с синтаксисом языка. Существует большое количество книг для этого. Практически всегда содержание этих книг очень похоже, но вот стиль написания отличается кардинально.
Есть две книги, которые стоит порекомендовать. Head First Java нестандартная, но легкочитаемая. Как и вся серия, вы можете любить её или нет (я обожаю их). Java, A Beginner's Guide более традиционная книга, которая отлично объясняет Java. После того, как вы сполна ознакомились с синтаксисом и базовыми конструкциями, я рекомендую прочитать еще одну книгу перед тем, как переходить к следующему этапу (это справедливо и для других языков программирования). Test Driven Development (автор Kent Beck) описывает технику программирования, который мы используем в EclipseSource. ИМХО TDD должна входить в курс обучения каждого программиста.
Journeyman
Journeyman — программист, которые уже знает язык, сделал несколько небольших проектов, но которому еще предстоит развиться до профессионала. Конечно, я уверен, что вы не согласны с этим утверждением (я не был согласен, например). Но после пяти лет в этом статусе вы согласитесь :)
Простых знаний языка недостаточно — вам необходимо углублять их. Для этих целей практически любой профессионал Java порекомендует книгу Effective Java, автор Joshua Bloch. Другая книга — The Pragmatic Programmer — похожа на сборник заметок. Она подробна раскрывает те темы, с которыми вы столкнетесь как программист, поэтому ее также обязательно надо прочитать. Но знание языка не научит вас хорошо писать программы. С моей точки зрения одна из долгосрочных задач программиста — научиться правильно создавать архитектуру приложений. Для этих целей Design Patterns Book, написаная Бандой Четырех [нет, это не те, которые левые в КПК, а распространённое название группы авторов (Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес)] — хорошее начало.
Согласно книге TDD (автор Beck) золотое правило — это: красный, зеленый, рефактор. Martin Fowler объясняет последний пункт в своей книге Refactoring Book. После того, как все тесты прошли успешно и вы основательно переработали код, необходимо прочитать книгу Clean Code (Robert C. Martin) (минимум два раза). После первого раза я более чем уверен, что вы начнете думать про свой код по-другому [и вряд ли в лучшую сторону]. OSGi in Action смотриться странно в этом списке. Я добавил ее сюда, потому что я думаю, что модульность один из самых важных принципов дизайна приложений. Java-программисту просто необходимо знать OSGI. Помните, я упомянул, что вы не будете соглашаться со мной, что вы не станете Professional, пока не побудете в статусе Journeyman по крайней мере несколько лет? Я уверен, что после прочтения The Clean Coder я вас убедил. Robert C. Martin пишет про себя и свой путь развития от новичка до профессионала. Это действительно самое настоящее откровение!
Professional
Я использую слово «Professional», потому что в этом контексте его используют многие авторы. Но я не люблю использовать это слово для описания уровня программиста. «Professional» звучит так, как будто вы уже достигли вершины. Но это просто-напросто неправда. Программист никогда не может закончить свое обучение [впрочем, это справедливо для 83% профессий]. Книги, которые я поместил в эту категорию — просто более продвинутые. Они углубляются в детали или тренируют вас на роль лидера команды.
Совсем немного можно сделать в Java, не используя многопоточность. Пока вы в статусе Journeyman, скорее всего у вас в команде будет человек [ну-да, ну-да], который сможет вам помочь с этой темой. Но рано или поздно настанет момент, когда вам нужно будет научиться многопоточности самому. Brian Goetz проделал огромную работу в своей книге Java Concurrency in Practice. Быть профессионалом — значит брать ответственность. А так как вы программист — это еще значить нести ответственность за устаревший код. Micheal Feathers описал эту скучную тему немного веселее в книге Woking Effectively with Legacy Code. Также вы должны уметь брать ответственность за свою команду. Tom DeMarco и Timothy Lister постарались раскрыть эту тему в Peopleware, где описали, как работают эфективные команды и важные характеристики таких команд. Просто объяснить трудную тему — очень тяжелая задача. Немноге авторы способны на это. Martin Fowler проделал огромную работу в книге Patterns of Enterprise Application Architecture, где подробно описал процесс проектирования ПО.
Надеюсь, вам понравились (или понравятся, если вы еще не читали) эти книги. Если вы не согласны со списком, или можете порекомендовать другие интересные книги — отмечайтесь в комментариях [присоединяюсь к автору. Также в комментариях к оригинальной статье есть несколько интересных книг. Те книги из списка, что я уже прочитал — однозначно стоили этого. Ну и теперь есть неплохой список для продолжения]
Автор: StShadow