@StShadow read-only
Пользователь
3 декабря 2012 в 16:55

Разработка → Книги, которые должен прочитать Java программист: от новичка до профессионала перевод

Книги, которые должен прочитать Java программист: от новичка до профессионала


[Примечание переводчика: термины градации «профессионализма» оставлены англоязычные в связи с трудностью их адекватного перевода на русский и несовпадением с привычными Junior-Middle-Senior-Lead. Перевод достаточно вольный — если знаний языка хватает, то лучше читать оригинал, как и советует автор. Оба языка для меня не родные, так что про ошибки сообщайте в личку — исправим. Здесь и далее в квадратных скобках примечания переводчика]

Я заметил, что в последние месяцы я рекомендую одни и те же книги как новичкам, так и опытным разработчикам. Поэтому я решил составить список этих книг. Они составили мне неплохую компанию в процессе моего роста от новичка до сегодняшнего уровня (какой-бы он не был :) ) Составить список мне помогали друзья и коллеги. Особая благодарнасть Frank Appel, Rüdiger Herrmann, Benjamin Muskalla и Ralf Sternberg

Порядок книг в списке отражает мой персональный выбор. Меняйте его, как вам угодно :) Одна важная вещь — если вы покупаете книгу из этого списка, то всегда выбирайте англоязычный вариант. Даже если есть перевод на ваш родной язык, оригинальная версия почти всегда лучший выбор.

Beginner


Если вы только начали знакомство с Java, то для начала нужно познакомиться с синтаксисом языка. Существует большое количество книг для этого. Практически всегда содержание этих книг очень похоже, но вот стиль написания отличается кардинально.
Head First Java Java. A Beginner s Guide 5th Edition TDD

Есть две книги, которые стоит порекомендовать. Head First Java нестандартная, но легкочитаемая. Как и вся серия, вы можете любить её или нет (я обожаю их). Java, A Beginner's Guide более традиционная книга, которая отлично объясняет Java. После того, как вы сполна ознакомились с синтаксисом и базовыми конструкциями, я рекомендую прочитать еще одну книгу перед тем, как переходить к следующему этапу (это справедливо и для других языков программирования). Test Driven Development (автор Kent Beck) описывает технику программирования, который мы используем в EclipseSource. ИМХО TDD должна входить в курс обучения каждого программиста.

Journeyman


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

Effective Java Pragmatic Programmer Design Patterns


Простых знаний языка недостаточно — вам необходимо углублять их. Для этих целей практически любой профессионал Java порекомендует книгу Effective Java, автор Joshua Bloch. Другая книга — The Pragmatic Programmer — похожа на сборник заметок. Она подробна раскрывает те темы, с которыми вы столкнетесь как программист, поэтому ее также обязательно надо прочитать. Но знание языка не научит вас хорошо писать программы. С моей точки зрения одна из долгосрочных задач программиста — научиться правильно создавать архитектуру приложений. Для этих целей Design Patterns Book, написаная Бандой Четырех [нет, это не те, которые левые в КПК, а распространённое название группы авторов (Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес)] — хорошее начало.
Refactoring Clean Code OSGI in Action The Clean Coder

Согласно книге 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 Concurrency Working Eggectively with Legacy Code Productive Projects Teams Patterns of Enterprise Application Architecture

Совсем немного можно сделать в 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, где подробно описал процесс проектирования ПО.

Надеюсь, вам понравились (или понравятся, если вы еще не читали) эти книги. Если вы не согласны со списком, или можете порекомендовать другие интересные книги — отмечайтесь в комментариях [присоединяюсь к автору. Также в комментариях к оригинальной статье есть несколько интересных книг. Те книги из списка, что я уже прочитал — однозначно стоили этого. Ну и теперь есть неплохой список для продолжения]
Перевод: Holger Staudacher
@StShadow
карма
0,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (76)

  • +17
    а как же всеми любимые Брюс Эккель «Философия Java» и двухтомник Хорстманна и Корнелла?
    • +2
      сам ожидал увидеть двухтомник в числе первых книг

      как-то незаслуженно обошли Хорстманна и Корнелла — замечательнейшие книги
      • 0
        Ну, автор не претендует на абсолютность своего списка. Хорстманн и Корнелл хороши, да.
        • 0
          я и не возбраняю выбор автора, это просто личные ожидания
      • 0
        они немного справочники напоминают. Они рассказывают про технологии в Java, нежели про то, как на ней правильно писать.
    • +4
      тоже ожидал ее(«Философия Java») здесь увидеть.
    • 0
      Пожалуй, относительно оригинального издания Эккеля соглашусь, а вот перевод на русский мне не понравился. :(
      • 0
        мало того, что перевод не ахти какой, так там еще многое пропущено
  • 0
    Видимо я совсем не тяну на прфессионала, если из 16 прочитал всего лишь 3… и лишь две полностью
    • 0
      Потому вот я и не перечислял подробно, что прочитал ;)
  • 0
    Печально, что " Woking Effectively with Legacy Code" попало у вас в раздел «Pro»
    • 0
      Это не у меня, это у Holger Staudacher.
      • 0
        Прошу прощения, не заметил, что перевод
  • –10
    Парни, скажите, а на что вообще реально на JAVA пишут? Ну к примеру у меня в мозгу укоренилось — C++, Delphi — это там десктоп приложения. А на JAVA что? И насколько перспективна эта область.

    Я сейчас сайты на php+javascript делаю, но хочется еще какую-то область освоить.
    • +19
      Вы спали последние 10 лет?
      Доброе утро :)
      • –3
        А на С# что сейчас пишут?
        • +3
          Многое пишут:
          — Ынтерпрайз
          — десктопные приложения
          — игры
          — мобильные приложения
          — web-разработка
      • +1
        Ну что так сразу спали. 10 лет назад меня программирование не интересовало =)
        Не лез просто в область программирования помимо web, а на программах и устройствах не написано же — сделано с помощью java)) да и не соприкасаешься как-то.
        • +2
          90% нынешней Java так иили иначе связаны с вебом.
    • +1
      За web-Java не скажу, а enterprise вполе себе жирный кусок.
      • +1
        вот про андроид ниже пишут это интересно. а для десктопа пока просто не могу придумать что бы хотел делать, в отличии от web
        • 0
          LibreOffice, IDE всякие.
    • +2
      Да хотя бы для Андроида.
      Доброе утро!
      • –6
        Не стоит смешивать далвик и яву. Кишки разные.
        • НЛО прилетело и опубликовало эту надпись здесь
          • –2
            Посмотрите для начала книги, ограничиваются ли они только языком или охватывают также работу jvm и компилятора.
            • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      На моей практике я делал на ней следующее:
      1. Международная система нецентрированной статистики игровых автоматов и автоматических рулеток.
      2. Система автоматизации банковского обслуживания.
      3. Биллинговая система мобильных операторов.
    • +3
      Java чуть ли не самый распространенный и самый высокооплчиваемый язык разработки.
    • +1
      web apps, desktop apps.
      • +2
        highload network apps?
    • +2
      Не знаю почему укоренилось мнение, что на плюсах десктоп пишут. High Load серваки очень даже на С++ пишут хорошо. Java живет себе неплохо в ынтырпрайзах. Бэкенды на ней тоже кстати пишут — те же одноклассники на Java написаны (правда с некой оговоркой). Не знаю, почему Java обошли как веб — есть люди которые вполне себе пишут довольно успешно на Java веб-приложения порядка более низкого, чем Ынтырпрайз. Просто начать девелопить на Java веб сложнее чем на пыхе/питоне/рубях.

      И на мой взгляд область эта (Java) перспективна на столько, на сколько удачно удастся в нее погрузиться. Если по «вершкам» пройтись — то мало что перспективно вообще.
      • 0
        На плюсах довольно много относительно низкоуровневых библиотек и фреймворков (boost, qt etc). И если брать последний — там много под десктоп. Хотя последнее время все чаще вижу, что используют PyQt, QtRuby etc.

        Если брать Java, то тут областей использования выше крыши:
        • мобильные телефоны/смартфоны (Android/Dalvik, JavaME),
        • embedded (та же OSGi пошла оттуда),
        • desktop (начиная от толстых клиентов к EE-приложениям, всяких IDE, Eclipse-based RIA),
        • нежно любимый многими за свою non-bloated xml конфигурацию enterprise (уже не только JavaEE стек, но и Spring там вполне живет),
        • тяжелые бэкенды (например, тот же Solr/Lucene),
        • Big Data (стэк слоников — hadoop/hdfs/hbase etc, cassandra),
        • NRT (всякие развлечения типа twitter storm),
        • data/computation grid (coherence, hazelcast etc),
        • куча распределенных фреймворков (hazelcast, zookeeper).


        Это навскидку, со своей колокольни. Java очень широко используется. И граблей чуть-чуть меньше, чем в C++, что может сказываться на скорости разработки. Благо по скорости с динамическими оптимизациями местами дотягивает до C (см., например, lucene; и да, хороший погроммист на Фортране может писать на Фортране на любом языке).
  • 0
    Да, дядюшку Боба не то чтобы два раза, его постоянно надо перечитывать :) После первого прочтения посмотрел на свои наработки (на тот момент) и реально ужаснулся. Совершенно по-другому начинаешь смотреть на свой (да и на чужой) код, обращаешь внимание на детали, которые, если неправильно к ним подойти, в последствии могут вылиться в серьезные проблемы.
  • +2
    Всем стоит прочитать «Java Puzzlers: Traps, Pitfalls, and Corner Cases» by Joshua Bloch and Neal Gafter. Начинающим полезно, чтобы понять, что не боги горшки обжигают, середнячкам — чтобы похвататься за голову и пожалеть, что не прочитали раньше, а старичкам — чтобы знали, в чью восковую фигурку тыкать острыми иголками.
  • +2
    Вместо книги по рефакторингу лучше бы инструментарий любимой IDE освоить. Вместо/вместе с Бандой четырех еще неплохо бы прочитать Head FIrst Design Patterns. Ну и МакКоннелла обязательно, пусть он и не завязан на Java. Хорстманна-Корнелла и Эккеля тоже само собой разумеется, как раньше и писали в комментах.
    • 0
      The Pragmatic Programmer хорошо раскрывают тему освоения инструментов на 146%, иначе хоть Eclipse, хоть IntelliJ IDEA — результатов не будет.
    • +1
      Вместо книги по рефакторингу лучше бы инструментарий любимой IDE освоить.
      Совершенно непонятное противопоставление.
      Человеку, решившему получить автомобильные права, тоже посоветуете не учить ПДД, а только лишь покататься с инструктором?

      Русский перевод «Refactoring», кстати говоря, довольно неплох. Чего нельзя сказать о нахваливаемой всеми вокруг «Философии Java».
      • 0
        Теория нужна, но конкретно книга Фаулера устарела. Там есть полезные советы касательно того, когда и где рефакторить, но в основном она содержит рецепты как рефакторить. Это было актуально в 2000-м, но теперь вместо этого есть меню Refactor в Intellij IDEA.

        Книги читаю в оригинале, про перевод сказать ничего не могу.
        • 0
          Рефакторингом пользуемся, он нужен и полезен, он не «устарел», а описание используемых рефакторингов — устарело. Интересный подход.

          Поддержка рефакторинга в IDE избавляет нас от рутины и ни от чего более. «Рецепты как рефакторить», кстати говоря, занимает меньшую часть книги, большая часть — главы «мотивировка» и «пример(ы)».

          Откуда новичёк узнает, когда и какой метод применить и какие они вообще бывают? «Методом научного тыка» по пунктам меню? Так даже в идее они реализованы не все. Для Java около тридцати шести пунктов меню, а, к примеру, для PHP — и вовсе около десятка самых ходовых. В книге же описано около семидесяти. Не говоря уже о том, что «метод тыка» не самый оптимальный по временным затратам.

          • 0
            Поддержка той или иной технологии в IDE влияет наши представления о том, какой путь «быстрый» и какой путь «медленный». Будем мы использовать «говорящие» имена членов класса или какие короче набирать. Будем ли мы заранее тщательно, вплоть до исчерпывающего перечня приватных методов с сигнатурами, продумывать архитектуру приложения или отложим по максимуму до той поры, пока станет яснее. Будем ли мы редактировать старый код для избегания дублей или будем по максимуму по принципам SOLID оттягивать конец — писать пре-и пост-обёртки для старого кода, руководствуясь принципом «не трогай лишний раз технику, и она тебя не подведёт».

            Без поддержки в IDE рефакторинг становится упражнениями для ума с негарантированным практическим выхлопом. С поддержкой в IDE применяются в основном те методы рефакторинга, которые поддерживаются в IDE (другие применяются в той мере, в которой облегчаются этими).

            Насчёт того, что метод тыка не самый оптимальный — зато им изучается именно тот рефакторинг, который, из-за поддержанности в IDE? принесёт наибольший эффект.
      • 0
        Не «не учить ПДД», а «не закглубляться в устройство автомобиля и больше надеяться на мастерские». Нередко уместно, нередко — нет.
        • 0
          Если продолжить говорить языком метафор, то знание алгоритма того либо иного рефакторинга можно сравнить с умением счёта «в уме», а IDE со встроенными инструментами для рефакторинга — с калькулятором.
          Использование калькулятора ускоряет расчёты, снижает количество ошибок. Но человек, не способный без вычислительной техники перемножить 5 на 10 — довольно неприглядное зрелище, согласитесь?

          Использовать инструмент и при этом не пытаться понять, как он должен работать, для меня странно.
          • 0
            Но человек, не способный без вычислительной техники перемножить 5 на 10 — довольно неприглядное зрелище, согласитесь?
            Смотря как часто этот человек сталкивается с арифметикой и сколько времени имеет на её освоение и какие способности к этому. За Пушкина, по слухам, всё считала его жена…

            В 80% случаев — соглашусь, да, не особо приглядное…
  • +1
    я не Java программист, но порекомендую книгу для начинающих и вообще «Горький вкус — JAVA» www.ozon.ru/context/detail/id/1425895/
    • 0
      2003 г., до-рефакторинговая эпоха в России… скорее всего устарело…
      • +1
        читается интересно, есть очень рациональные мысли
        начинающим позновательно.

        сам я РНР программист (бывший), но большинство книг про РНР (думаю 90% точно) я бы сегодня не посоветовал бы читать начинающему РНР программисту: учат говнокодить. Притом серьезно сносят мозг, переучивать тяжело и честно говоря не хочется.
  • 0
    БОльшая часть книг будет полезна программистам и на других языках.
    • 0
      согл… только что написал про РНР
  • 0
    Понимаю, что статья — перевод, но давайте теперь такую по C++!
    • +1
      Хотите знать сам язык — читайте классику, хотите знать всякие там паттерны, рефакторинги и архитектурные моменты — книги из данной статьи для этого тоже вполне пойдут.
    • 0
      и про РНР тоже требуется… см habrahabr.ru/post/153373/?reply_to=5541065#comment_5551355
  • 0
    Кроме выше добавленного я бы перенес Java Concurrency in Practice в середину, или я просто авторские понятия о градации уровня знаний вижу по-иному.
    • 0
      Если перенести JCiP в середину то сломается реальная картина нашего мира. Невероятное количество java программистов (вне зависимости от стажа) практически ничего не знают о многопоточности в java, либо какие-то базовые вещи, без которых даже в EE мире проблематично было бы существовать… ну например, что обычные коллекции не совсем хорошо работают при многопоточном доступе
      • 0
        какие-то базовые вещи, без которых даже в EE мире проблематично было бы существовать


        Да ну? В EE мире в общем достаточно знать, что «что обычные коллекции не совсем хорошо работают при многопоточном доступе» и поэтому от многопоточности надо держаться как можно дальше (в том объёме, в котором требуется, она встроена в ядро) — в частности, не делать ничего статического мутабельного и в первую очередь не делать реальных синглетонов (отдавать синглетонность на откуп контейнеру).
        • 0
          Сейчас для еешники «сделать синглтон» — это проставить классу аннотацию.
          • 0
            Вот-вот, многопоточность и тут не требуется. А то в инете есть куча материалов на тему «как написать настоящий и потокобезопасный синглетон на Java» с двойными-тройными блокировками и хелпер-классами…
  • +1
    osgi добавлен ради эклипса?
    • +1
      Автор Eclipse-guy, тоже показался OSGI притянутым за уши.
    • +1
      Ну дык, Java без IDE — извращение, а IDE у нас практически две с половиной: Eclipse, IDEA и наполовину NetBeans, стремящийся вобрать в себя все худшие черты MS Visual Studio и Embarcadero C++ Builder'а. Так что минимум на 40% OSGI притягивать стоит.
      • 0
        JDeveloper еще, но они вроде на OSGI переползают тоже.
  • +1
    Любому (не только Java) разработчику желательно поглядывать вокруг. Знать, например, что не Java`ой единой можно мозги разминать :) По-моему, как минимум следует попробовать динамический язык (JS, Ruby etc.) и функциональный (та же Scala, чтобы далеко от JVM не уходить).
    • 0
      Это уже даже не next level, это spin-off. Но в целом согласен. С этой же целью python подучиваю.
  • 0
    ну, и еще «Learning Python, 4th Edition » by Mark Lutz, конечно.
    • 0
      Сейчас ее читаю. Как по мне, если бы из нее вырезать две трети содержимого, отличная бы книга получилась.
      • 0
        Ха ха ха, точно.
  • +1
    хорошая книга
    Java Performance (http://www.amazon.com/Java-Performance-Charlie-Hunt/dp/0137142528)

    протым языком написано что и как работает
    единственное что смущает это копии экрана в книге
    думаю из-за этого книга «весит» 720 страниц
    но если картинки пропускать то нормально
  • +1
    Не нравится мне подход «Должен прочитать каждый». Сейчас такой большой выбор книг, что любую книгу из списка можно заменить аналогом. Раздражает когда кто-то, прочитавший одну из книг, перестает считать за людей тех, кто, соответственно, не читал эту книгу.

    Я не спорю: наверняка это замечательные книги, но сейчас уже не 1978 год, чтобы можно было сказать, что если ты не читал K&R, ты не знаешь Си. Более того: книжка C# design patterns с небольшими поправками отлично подойдет для Java.
  • +2
    И купите себе книгу по Perl! Поверьте мне.
    • +6
      Говорят что после появляется нездоровая привычка. Желание лизать шрамы ;-)
  • 0
    «The Pragmatic Programmer» пробовал читать в электричке. Неизменно навевает сон… Чего нельзя сказать о ХедФёрстовской книги по дизайн-паттернам…
  • 0
    А где рекомендация великого бессмертного и вечно актуального фундаментального труда «Code Complete»?
  • 0
    Судя по названиям, мне надо в первую очередь «Woking Effectively with Legacy Code», «Clean Code» и «Clean Coder»…
  • 0
    А как же «Язык программирования JAVA» от Арнольда и Гослинга?
  • 0
    Веду свой список: http://javawebinar.ru/books.html

    На эту обратите внимание "Cracking the Coding Interview": http://bookvoed.ru/book?id=2593572,
    часть VIII. Вопросы собеседования: http://storage.piter.com/upload/contents/978545901120/978545901120_X.pdf

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.