Основные источники информации по Java

Подробный список обязательных к ознакомлению книг, сайтов, блогов и мероприятий

Платформа Java™ существует уже почти 14 лет, и одним из следствий такой длительной истории успешного и повсеместно используемого языка является накопление и распространение обширного массива библиотек, инструментов и идей — так что новичку, приступающему к изучению Java, нетрудно потеряться в этом море информации. В данной статье автор (который и сам внес значительный вклад в создание этого массива ресурсов) лавирует по безбрежным волнам и предлагает начинающим Java-разработчикам список ключевых ресурсов, к которым следует регулярно обращаться.

Тед Ньювард, Глава, Neward & Associates

Тед Ньювард - глава Neward & Associates, где он консультирует, руководит, обучает и внедряет Java, .NET, XML Services и другие платформы. Он проживает возле Сиэтла, штат Вашингтон.



24.03.2010

С момента представления в 1995 г. Java-платформы как единого целого мира, Java прошел радикальный эволюционный путь от концепции “апплеты повсюду”, которую исповедовали первые идеологи и приверженцы. Вместо этого мир Java развился до Swing, сконцентрировался вокруг сервлетов, направил движение к J2EE, споткнулся на EJB, нашел обходной путь через Spring и Hibernate, добавил возможности абстрактного программирования и стал более динамичным, а затем и более функциональным, и продолжает развиваться во множестве интересных направлений, в то время как я пишу эту статью.

Это многообразие может несколько озадачить Java-программиста, если он не рос и не развивался профессионально вместе с данным языком все эти годы.

Как лектор, консультант и преподаватель, я часто слышу от молодых программистов и более зрелых специалистов, которые только начинают работать с Java, просьбу посоветовать им ресурсы, которые помогли бы разобраться в этом обширном, сложном и кажущемся бесконечным мире. Несколько лет назад я попытался ответить на эти вопросы, публикуя Recommended Reading List, но недавно редактор по Java на developerWorks попросил меня подготовить более широкий список ресурсов, включив в него не только книги. Это хорошая идея, учитывая, что список книг разросся уже до такой степени, что потенциальный читатель может провести лет десять за их чтением и так и не освоить сколько-нибудь существенную часть их содержимого.

Для того чтобы избежать влияния личных предпочтений, я бросил клич по блогосфере, попросив дать рекомендации относительно Web-сайтов, конференций, книг, блогов, инструментов — всего, что может оказаться интересным и полезным для Java-разработчиков с точки зрения навигации в огромном море доступной информации.

Реакция была ошеломляющей (и я благодарен всем, кто ответил).

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

А теперь продолжим без дальнейших церемоний.

Web-сайты и Web-порталы разработчиков

Интернет, безусловно, изменил природу совместно используемых материалов и публикаций (и я не упустил из внимания то, что вы сейчас читаете эту статью в Интернете), поэтому разумно начать обзор важных Java-ресурсов с перечня ключевых Web-сайтов и порталов разработчиков, за обновлениями на которых необходимо следить любому Java-разработчику.

В большинстве случаев ценность Web-сайта и/или портала разработчиков заключается не только в ресурсах и статьях, которые там публикуются, но также в сообществе пользователей портала или сайта. Времена статичных Web-страниц и скачиваемых файлов быстро сменяются более “активными” моделями форумов, статей с обсуждением и интерактивных дискуссий с участием не только программистов, которые часто посещают данный сайт и составляют его сообщество, но также участников сообщества разработки продукта или технологии и владельцев портала. Точно так же, как разработчики должны совершенствоваться, чтобы не отстать от эволюции технологии, портал должен развиваться в соответствии с меняющимися потребностями сообщества. Открытые взаимоотношения с сообществом — важнейший фактор жизнеспособности портала.

Список Web-сайтов (с URL):

  • java.sun.com
    С этого сайта ведет свое начало JDK, и чаще всего именно отсюда Java-разработчики скачивают данный пакет и документацию. Кроме того, этот сайт — хороший источник информации обо всей Java-платформе, включая обширный раздел непосредственно по JVM (Hotspot), в котором с поразительной детализацией описано внутреннее устройство JVM.
  • java.net
    Сайт Java.NET — сборная солянка проектов с открытым кодом, документации, блогов, новостей, wiki и других ресурсов сообщества. Это мощный пласт информации по технологиям Java, может быть, даже несколько перегруженный ресурс. Тем не менее, просматривая списки проектов, можно найти настоящие сокровища — например, проект FEST-Swing, ставящий своей целью создание “гладкого интерфейса” для разработки Swing-приложений, чтобы упростить тестирование модулей.
  • InfoQ
    Данный сайт создан Флойдом Маринеску (Floyd Marinescu), основателем и главным редактором The ServerSide. InfoQ отличается от большинства приведенных в данной статье ресурсов тем, что он явным образом нейтрален к технологиям и публикует информацию не только о Java, но и о .NET и Ruby, а также предлагает отличный обзор гибких методологий. Сообщество комментирующих на InfoQ не такое обширное и разнообразное, как на TheServerSide, зато обсуждения обычно ведутся спокойно и не агрессивно.
  • TheServerSide
    TheServerSide часто называют “Slashdot мира Java” — именно на этом сайте тематика корпоративных Java-технологий была впервые поднята, горячо обсуждалась и активно развивалась. Здесь появились самые ранние идеи, касающиеся легких контейнеров (типичный пример — Spring), и многие из тех, кто сейчас считается “идейным лидером” сообщества Java, начинали на TheServerSide. Хотя в последнее время дискуссии на сайте порой принимают характер визгливой перебранки, TSS навсегда останется колыбелью, из которой вышло многое из того, что сейчас составляет экосистему Java, в которой мы живем. Поэтому данный сайт всегда будет источником информации, как минимум исторической.
  • DZone
    DZone начинался как ресурс для Java-разработчиков, но в последнее время начал давать ответвления и в другие технологические области, включая .NET, Ruby и др. В силу этого на сайте отчасти происходит “перекрестное опыление” идеями, и хотя Java-разработчик может сосредоточиться исключительно на Java-разделе, более разумно будет воспользоваться преимуществами взаимного обмена идеями.
  • IBM® developerWorks
    Если вы читаете эту статью, значит, вы уже нашли dW. В интересах полного раскрытия информации я должен сказать, что для данного сайта мной написаны и другие статьи, но независимо от этого я могу добросовестно заявить, что dW является отличным ресурсом статей и материалов по Java-программированию и JVM. В частности, обратите внимание на серию “Теория и практика Java, Брайана Гетца (Brian Goetz). Эта серия включает описание программы чистки памяти JVM в трех частях, с весьма доступным описанием ключевых концепций чистки памяти.
  • JavaWorld: После долгого перерыва JavaWorld вернул свою былую славу, обновив дизайн, предлагая технический контент высокого качества и удобную классификацию тем, позволяющую быстро найти статьи нужного типа. Не пропустите обширные архивы, которые включают статьи, датируемые временами основания сайта, часть из которых написана выдающимися деятелями сообщества Java.
  • Artima
    Основанная Биллом Веннерсом (Bill Venners) Artima превратилась со временем в огромное собрание статей, блогов и интервью, посвященных не только Java-разработке. Для этого сайта пишет ряд именитых участников Java-сообщества (в качестве классического примера прочтите статью Билла Джоя, в которой он поражается сложности языка Java после выхода Java 5 и приводит Enum<> для иллюстрации обоснованности своих опасений). Этот сайт определенно стоит посетить.

Обратите внимание, что на большинстве указанных сайтов полный спектр возможностей доступен только зарегистрированным пользователям. На момент написания данной статьи все они предлагают бесплатный доступ и требуют только имя пользователя и пароль для однозначной идентификации пользователей, а также адрес e-mail для периодической рассылки новостей. Насколько мне известно, все эти сайты позволяют отказаться от новостной рассылки, хотя сам я этого не делал, поскольку время от времени нахожу в рассылках интересную и неизвестную мне до этого информацию и потому считаю их весьма полезными.

Блоги

Блоги предоставляют разработчикам простой способ постоянно быть в курсе новых веяний, концепций, идей, споров и других интеллектуальных дискуссий о технологиях. Кроме того, они позволяют узнать об идейных лидерах, которые имеют вес в той или иной технологической области. Особенно удобно то, что блоги можно читать локально и в офлайне, скачивая статьи и записи на компьютер с помощью клиентских программ. Фактически, блоги стали настолько распространенным явлением, что появились специальные устройства (например, Amazon Kindle) для легкого сбора информации, необходимой разработчику.

Главная задача — определить, какие именно из миллионов блогов следует читать. У каждого разработчика есть свои предпочтения относительно того, какие блоги стоят прочтения, а какие нет, но для начала можно ознакомиться со следующими источниками:

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

Пакеты и/или библиотеки

Отслеживание всех библиотек и пакетов в экосистеме Java — настолько сложная задача, что Java-разработчики часто игнорируют ее. В результате может оказаться, что разработчик вручную пишет то, что уже имеется в платформе (если он вообще останавливается, чтобы проверить и обнаружить это).

Ниже приведен список, который я называю “Лучшие десять Java-пакетов, о которых каждый Java-разработчик должен как минимум знать, а в идеале — уметь использовать”:

  • java.lang.reflect
    От пакета Reflection зависят столько библиотек и инструментов, что изучение его практически стало необходимостью (пусть даже только для того, чтобы понимать, когда его использование даст сбой из-за политик безопасности или других инфраструктурных несовместимостей). В тесной связи с Reflection находятся Java 5 Annotations и java.lang.annotation.
  • javax.script
    При том особом значении, которое приобрели в сообществе Java динамические языки, умение использовать языки сценариев изнутри Java-кода может позволить разработчикам развивать системы без необходимости прохождения затратных циклов “compile-link-run-test”.
  • javax.management и java.lang.management
    Этот комплекс инструментов управления, также известный как Java Management Extensions (JMX), является мощным средством мониторинга Java-приложений в процессе их работы. В силу этого разработчикам следует знать и уметь использовать JMX, чтобы создавать программное обеспечение, которое смогут использовать системные администраторы. Не забудьте ознакомиться с jconsole, которая поставляется с JDK — эта индикаторная панель состояния приложений является полезным инструментом и одновременно хорошим примером разработки. Особое внимание обратите на демо-скрипт, который компонует дополнительный модуль поддержки написания сценариев внутри jconsole, — это мощный инструмент в руках компетентного системного администратора.
  • java.util.concurrent.*
    Параллельная обработка — наиболее актуальная задача, над которой разработчики будут трудиться в ближайшее десятилетие, и основным оружием, которое Java-разработчики используют против ошибок параллельной обработки, будут классы данного пакета и его подпакетов (.atomic и .locks). Изучение того, как использовать данный пакет, станет таким же важным, если не более важным, как и умение написать класс.
  • java.util
    Всё сказанное выше верно и для классов из java.util. Их используют настолько часто, в особенности классы Collections, что, пожалуй, java.util.* следовало бы импортировать автоматически, как java.lang.
  • java.beans
    JavaBeans, несомненно, является одним из ключевых элементов, который используется во всей экосистеме Java под менее звучным названием POJO (plain old Java objects). Они по-прежнему базируются на коде JavaBeans, API и спецификациях, поэтому имеет смысл провести немного времени над изучением классов java.beans, чтобы писать более качественные POJO.
  • java.util.logging
    Диагностические и контрольные журналы регистрации быстро становятся мощными средствами отслеживания работы приложений, будь то для отладки программ или для мониторинга и управления. Мой совет: изучите этот пакет и его open-source аналог log4j).
  • java.security.*
    Механизмы политик, API инструментов безопасности и классы полномочий – ключевые элементы, делающие среду Java надежной платформой вычислений, но только если разработчики знают, как использовать их преимущества. Избегайте API шифрования — используйте их только если вы исчерпали все другие доступные средства. Программные интерфейсы шифрования нетрудно использовать, но разработка правильного, без серьезных ошибок шифртекста занимает очень много времени и требует многочисленных проверок другими экспертами по шифрованию. Прежде чем обращаться к API шифрования, попробуйте использовать другие механизмы, такие как SSL/TLS и классы GuardedObject/SignedObject/SecureObject.
  • javax.xml.parsers.*, javax.xml.bind и javax.xml.transform.*
    XML в значительной степени занимает мысли Java-разработчика, и умение интерпретировать его (как напрямую, так и через библиотеки объектов XML) и преобразовывать (используя XSLT) — это важный, а то и совершенно необходимый навык.
  • javax.sound.*
    Согласен, это не обязательное умение, но использование время от времени звуковых эффектов может оживить рутинный код. Кроме того, звуки могут служить в качестве сигналов и обратной связи от системы, если под рукой нет дисплея. Ну и наконец, есть что-то патологически забавное в том, что компьютер издает пронзительный вопль из вашего любимого фильма ужасов, чтобы дать пользователю понять, что с системой только что произошло что-то неправильное.

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

Конференции

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

Участие в конференциях имеет полезный побочный эффект (который при активной стимуляции может перерасти и в нечто большее), а именно создание собственной группы коллег и экспертов по разработке. Благодаря повсеместному распространению e-mail, списков рассылки (таких как GoogleGroups или Yahoo Groups), а также других легких инструментов коллективного взаимодействия, поддерживать отношения с людьми, встреченными на конференции, сейчас легко как никогда. Дружеские отношения, возникшие на ланче или вечернем приеме, могут продолжаться всю жизнь и принести большую пользу, особенно при оценке новых технологий.

Прислушайтесь к словам человека с 30-летним опытом посещения (в том числе и безбилетного), выступлений на конференциях и их организации (это не я, мой друг): “Новички посещают конференции ради докладов; ветераны приезжают ради вечеринок и людей. Вечеринки помогают вам знакомиться с новыми людьми, а люди помогают вам продвигаться на профессиональном поприще”.

Рекомендованные конференции:

  • No Fluff, Just Stuff
    Эту конференцию я особенно рекомендую, и не только из-за того, что сам регулярно там выступаю, а потому, что семь из "десятки лучших докладчиков JavaOne" (Top Ten JavaOne 2007) также выступают на NoFluffJustStuff или участвовали в ней раньше. Нигде больше Java-разработчик не найдет столь глубокого обсуждения технических вопросов по такой привлекательной цене или в таком удобном месте — фактически в вашем родном городе. Конференция проходит более 30 раз в год по всей Северной Америке (и в планах — проведение мероприятий в Европе и Азии), так что вполне возможно, что вы доедете до ближайшего места проведения NFJS на машине вместо того чтобы тратить тысячи долларов на дальнюю поездку и проживание в отелях. Также нет ничего удивительного в том, что часть книг, рекомендованных в данной статье, написана людьми, выступавшими на NoFluff: организаторы NFJS прилагают максимум усилий для того, чтобы найти и пригласить специалистов, которые являются “первоисточниками” по тем или иным темам Java и Agile Development.
  • JavaOne
    Это большое, объективное мероприятие, которое всегда проводится в Сан-Франциско (что может быть и преимуществом и недостатком — в зависимости от того, каков в вашей организации бюджет на командировки), но никакое другое событие на Земле не собирает вместе столько первых лиц в мире Java, как это делает JavaOne.
  • JAOO
    Чтобы не оставить наших европейских собратьев по Java за бортом, в Аархусе (Дания) ежегодно проходит конференция JAOO. Мероприятие проводится в течение почти двух десятилетий с неизменным успехом, привлекая ряд выдающихся авторов и докладчиков. Кроме того, JAOO обладает относительно редким преимуществом, являясь кросс-технологической конференцией. Это означает, что участник может утром посетить сессию Java, за ланчем пообщаться с разработчиками C++, днем ознакомиться с новинками Silverlight от Microsoft® (или с любой новой на тот момент технологией Microsoft), а вечером выпить пива с приверженцами Smalltalk. Если вы хотите расширить свой кругозор, JAOO или родственная ей конференция QCon, проводимая при участии представителей InfoQ, — отличное место для этого. В 2008 году JAOO впервые прошла также в Брисбене и Сиднее, и это, скорее всего, станет традицией.
  • Devoxx
    Ранее известная как JavaPolis, эта конференция в Антверпене (Бельгия) сейчас переживает феноменальный подъем. Отличная возможность познакомиться с европейскими коллегами (и попробовать прекрасное бельгийское пиво). Интересные докладчики, рассказывающие о новейших технологиях. В ходе Devoxx также проводится довольно большая выставка и имеется множество возможностей взаимодействия с братьями-разработчиками из разных стран.
  • Jazoon
    Эта относительно новая конференция была впервые проведена в Цюрихе (Швейцария) в 2007 г. В списках докладчиков Jazoon фигурируют такие люди, как Мартин Одерски (Martin Odersky, создатель Scala), Нил Гафтер (Neal Gafter) и Саймон Фиппс (Simon Phipps, Sun's Chief Open Source Officer), что говорит о весьма высоком уровне мероприятия. Jazoon фокусируется исключительно на тематике Java и проводится в самом центре Европы, так что европейским Java-разработчикам имеет смысл отметить это событие в своем календаре.

Есть и другие конференции, ориентированные на различные аудитории, но перечисленные выше мероприятия напрямую адресованы Java-разработчикам. Тем разработчикам, которые хотят расширить свои взгляды на мир, следует рассмотреть возможности участия в конференциях по “альтернативным” технологиям, например, в разнообразных мероприятиях по Perl, Python, Ruby или даже .NET, которые проходят по всему миру. Непредвзятое, открытое отношение к новым идеям подчас требует рассмотрения комплекса проблем, совершенно отличающихся от привычных.

Книги

Скромная, традиционная книга — один из самых лучших и наиболее доступный из всех ресурсов. Сокровищница технических знаний и опыта находится в ближайшем к вам книжном магазине (или, если вы живете в глубинке — на сайте Amazon) ... если только вы сможете пробраться сквозь мириады клонов “Java для чайников”.

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

После того как вы освоили элементарный уровень, попробуйте изучить следующие книги:

  • Effective Java (2nd Ed) by Joshua Bloch
    (в русском переводе — “Эффективное программирование”, Джошуа Блох) Первая книга, которая должна стоять на полке каждого без исключения Java-разработчика. Точка.
  • Java Concurrency in Practice by Brian Goetz
    Вторая книга, которая должна быть на полке каждого Java-разработчика, поскольку любой Java-разработчик работает в многопоточной среде, хочет он того или нет.
  • Better, Faster, Lighter Java by Justin Gehtland and Bruce Tate
    Эта тонкая книжка стала для многих Java-разработчиков “подготовительным наркотиком” в принятии и освоении сред, основанных на “легких контейнерах”, которые, начиная со Spring, заполняли пробелы, оставленные большинством массивных EJB серверов, таких как WebSphere или другое промежуточное ПО для обработки транзакций. Автор проделывает огромную работу, прослеживая весь цикл разработки, основанный на POJO, отмечая достоинства и недостатки данной идеи и демонстрируя, что принятие более “легкого” подхода к созданию корпоративных приложений и использование таких инструментов, как Spring и Hibernate, не означает снижения функциональности и возможностей разработанной системы.
  • Effective Enterprise Java by Ted Neward (me)
    Семьдесят пять способов гарантировать успешную работу Java-приложений корпоративного уровня (независимо от того, написаны они при помощи Spring, EJB, Web-служб или чего-то иного). Так же как Effective Java не предназначена для начинающего Java-программиста, Effective Enterprise Java не рассчитана на разработчика, который изучает элементарные основы “корпоративной среды Java”.
  • Release It! by Michael Nygard
    Любой, кто собирается писать программное обеспечение для “боевых” серверов, должен прочесть эту книгу. Это глубокий, проницательный обзор того, что может выйти из строя в процессе обработки, а также способов устранения потенциальных проблем, включая профилактику и восстановление.
  • По выбору между Inside the Java 2 Virtual Machine by Bill Venners и Component Development for the Java Platform by Stuart Halloway
    Как только Java-разработчик выучил язык, наступает время исследования платформы, лежащей в основе — самой Java Virtual Machine. Такие темы, как чистка памяти, ссылочные объекты, ClassLoaders, потоки и мониторы становятся новым рубежом для освоения. Любая из этих книг, или они обе, служит хорошим руководством по этим темам. Их самый большой недостаток — это время написания: Inside была опубликована во времена Java 1.2, Component-Based — немногим позже. К счастью, Java Virtual Machine осталась по большей части неизменной с тех пор, так что к тому моменту, когда читатель наткнется на что-то отличающееся от JDK 1.2, он будет уже достаточно подкован, чтобы оставить эту книгу и перейти к следующей теме.
  • Patterns of Enterprise Application Architecture by Martin Fowler и Enterprise Integration Patterns by Gregor Hohpe and Bobby Woolf
    Оба издания представляют собой книги шаблонов, относящиеся к определенным подходам и идеям в проектировании, поэтому они предполагают, что читатель уже знаком с оригинальным изданием “банды четырех” — книгой Design Patterns by Gamma, Helm, Johnson, and Vlissides. Книги шаблонов обычно помогают разработчикам создавать более мощные решения, предоставляя в их распоряжение базовые концептуальные блоки для “обтесывания” и встраивания в архитектуру. Однако шаблоны легко теряют эффективность, если их использование становится самоцелью.
  • Java Power Tools by John Smart
    Несколько людей порекомендовали эту книгу — введение в многообразие инструментов, доступных в экосистеме Java. На базе этой книги Смарт также предлагает тренинговый курс (Java Power Tools Bootcamp), но для большинства разработчиков бумажная версия будет самым простым способом получения этой информации.
  • The Pragmatic Programmer by Andy Hunt and Dave Thomas (в русском переводе — “Программист-прагматик”, Э.Хант, Д.Томас)
    Эта книга должна быть на столе каждого программиста независимо от того, какой язык или платформу он использует. Эта книга одного уровня с классическим трудом Фреда Брукса “Мифический человеко-месяц”, и цитировать ее программисты будут еще много десятилетий.
  • The Productive Programmer by Neal Ford (в русском переводе — “Продуктивный программист”, Нил Форд)
    Это недавнее издание выглядит таким же образцовым, как и “Программист-прагматик”, и содержит различные практические советы, приемы и техники, которые программисты могут использовать для улучшения собственной продуктивности в дополнение к тому, что предлагает им IDE.
  • The Pragmatic Starter Kit
    Этот комплект включает разделы Pragmatic Unit Testing (с JUnit), Pragmatic Project Automation и Pragmatic Source Control (с Subversion). Каждый раздел охватывает основы соответствующей темы в рамках доступного, сфокусированного обсуждения, которое сразу переходит непосредственно к сути проблематики, без излишних отвлекающих моментов. Раздел Project Automation, в частности, раскрывает особенности и характеристики правильного процесса сборки, и между делом подогревает интерес к книге Ant in Action.
  • Ant in Action (2nd Ed) by Erik Hatcher and Steve Loughran
    Ant — это главная утилита построения для платформы Java (см. следующий раздел с кратким описанием инструментов), и эта книга, несомненно, лучшее введение в сферу мощных возможностей, которые предлагает Ant. Наряду с изучением способов использования Ant книга Ant in Action демонстрирует тестирование компонентов, непрерывную интеграцию и методики развертывания и введения в производственную эксплуатацию — все это с точки зрения повседневной деятельности прагматичного Java-разработчика.

Инструменты

Точно так же, как строительство дома требует несколько большего, чем просто взять молоток и начать сколачивать доски, Java-разработка не заключается только в том, чтобы взять IDE и начать писать код. Конечно, хорошая среда IDE является неоценимым подспорьем в разработке Java-кода, но другие инструменты могут предложить аналогичную, если не большую помощь.

Перечень без какого-либо ранжирования...

  • IDE
    Естественно, обсуждение инструментов начинается с IDE. В целях сохранения независимости от каких-либо коммерческих интересов и Eclipse, и NetBeans остаются свободными для использования средами с открытым исходным кодом, предлагая, таким образом, хорошие возможности для начала разработки.
  • Тестирование компонентов
    Постоянным фаворитом здесь остается технология, с которой началась революция в сфере тестирования компонентов —JUnit. Однако есть и другие инструменты, пробившие себе дорогу и сейчас довольно популярные, например, TestNG и JUnitPerf.
  • Непрерывная интеграция
    Сервер непрерывной интеграции постоянно проверяет код на основе контроля поставщиков, компонует его, проводит тестирование компонентов и предоставляет разработчикам отчеты о любых ошибках компоновки, обычно по электронной почте. Доступны несколько свободно распространяемых версий такого инструментария, но наибольшее внимание привлек Hudson, сервер непрерывной интеграции с большим количеством дополнительных модулей и значительными возможностями расширения. Исходным инструментом для него является CruiseControl , что уже само по себе заслуживает уважения.
  • Статический анализ
    FindBugs— инструмент статического анализа с открытым исходным кодом, который работает поверх Java-кода, выполняет глубокий анализ по N-направлениям для выявления всех возможных ветвей кода и предоставляет отчеты и предупреждения обо всех типах ошибок на основе расширенного набора правил. FindBugs разработан Вильямом Пью (William Pugh) — тем самым Пью, который обнаружил ошибку в модели памяти Java. FindBugs наиболее известен тем, что может анализировать Java-код на предмет ошибок в реализации параллельной обработки — то, что любой программист оценит по достоинству.
  • Отслеживание сетевых пакетов
    WireShark (ранее известный под названием Ethereal) предоставляет программистам картину того, что передается по сети и возможность проконтролировать, что по проводам циркулирует только то, чему следует, а не конфиденциальная информация или пароли в текстовых файлах.
  • Виртуализация
    Инструмент виртуализации (более правильно называть его платформой), такой как VMWare, Xen, VirtualBox или VirtualPC, дает программистам возможность создавать среду, идентичную работающей на “боевом” сервере, без потери производительности среды хост-машины. Платформа виртуализации также предлагает удобный способ испытания “экспериментального” программного обеспечения, не подвергая риску рабочую машину. Большинство этих платформ либо являются проектами с открытым кодом, либо имеют свободно распространяемые версии.

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

Благодарности

Благодарю всех читателей моего блога (blogs.tedneward.com), которые нашли время порекомендовать ресурсы для включения в данную статью. Далеко не полный список принявших участие в ее подготовке включает Грега Островича, Райана Слобожана, Гамлета Д'Арси (который попросил называть его “еще одним межгалактическим изгнанником, который зарабатывает деньги в ИТ, чтобы купить запчасти для сверхускорителей, после чего он починит свой космический фрегат и отправится обратно на свою родную планету”), Пьера Марк-Ларок, Прашанта Рэйна, Марка Стока, Эрика Кервина, Мортена Андерсона, Алекс и Ивонн Миллер, Рахула Раджа, Брайана Слеттена и Нила Форда.

Перспективные тенденции

Конечно, Java-разработчики не получат никакой пользы, потратив все время на изучение имеющихся сейчас технологий, если к моменту завершения этого обучения технологии завтрашнего дня уже займут их место и внезапно сделают все полученные знания устаревшими. Присматриваться к тому, что сегодня только начинает обсуждаться как “новая волна”, также очень важно, даже если только для того, чтобы иметь наготове связный ответ, если вам случится оказаться в лифте с начальником, и он спросит: “Что там насчет всех этих функциональных языков, о которых я постоянно слышу? Следует ли нам обратить на них внимание?”

Упомянем лишь некоторые перспективные тенденции в мире Java (без какого-либо ранжирования):

  • Динамические языки
    Такие языки, как Groovy и JRuby, породили другие достойные внимания проекты, например, Clojure и Fan. Последние экспериментируют с идеей о том, что среда с менее строгим контролем типов может дать повышенную производительность и предлагает более широкие возможности. Однако это не призыв к отказу от языка Java — лучшие результаты обычно обеспечивает комбинированный подход.
  • Функциональные языки
    Направление, освещаемое Scala, — функциональные языки имеют очень выгодное качество, а именно изначально присущую им поддержку параллельной обработки, что достигается благодаря их общей тенденции поддерживать составимые функции и малому количеству совместно используемых состояний (хотя они действительно иногда имеют такой синтаксис, который разве что родная мать могла бы полюбить). К этой группе относится Jaskell (реализация Haskell-on-JVM) и Clojure, демонстрирующие примеры того, как выглядит программная транзакционная память в промышленной реализации.
  • Замыкания в Java
    Добавление поддержки замкнутых выражений (также называемых лямбда или анонимными методами) упростит некоторые разделы Java-программирования, которые сейчас активно обсуждаются для включения в Java 7. Принимая во внимание глубокое разделение, к которому эта дискуссия приводит Java-сообщество, Java-программистам надлежит провести хотя бы небольшое исследование и понять, о чем весь этот спор.
  • Машина Да Винчи
    Новая версия JVM, разработанная для лучшей поддержки других языков (таких как уже упомянутые динамические и функциональные языки), которая может войти или не войти в типовую версию JVM. Отслеживание ее развития помогает понять достоинства и недостатки использования динамических языков и языков сценариев на JVM.
  • Разработки пользовательского интерфейса
    Раздираемый между Flash/Flex, Silverlight и JavaFX Web-браузер стоит на пороге впечатляющего (и, возможно, ужасающего) преображения — и это без учета новых серверных Web-структур Java и сторонних разработок типа Google Web Toolkit (GWT). Пользовательский интерфейс всегда был, есть и будет откровенно привлекательным. Знание одной-двух библиотек, не говоря уже о таких библиотеках “развитых клиентов”, как Swing и SWT, будет огромным преимуществом при разработке более интерактивных решений, чем те, которые может предложить HTML.

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

Заключение

Дополнения к приведенному в данной статье списку приветствуются — это поможет составить улучшенный перечень наиболее важных ресурсов. Со временем содержание списка неизбежно изменится, поскольку экосистема продолжает расти и развиваться. Этому можно только порадоваться; если бы нам пришлось использовать ту же среду, которую нам предложили в 1995 году, мы давно перешли бы на что-нибудь другое.

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

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Технология Java
ArticleID=477454
ArticleTitle=Основные источники информации по Java
publish-date=03242010