97 вещей, о которых должен знать каждый Java-программист [Кевлин Хенни] (pdf) читать онлайн
Книга в формате pdf! Изображения и текст могут не отображаться!
[Настройки текста] [Cбросить фильтры]
Trisha Geel
97 THINGS EVERY
JAVA PROGRAMMER
SHOULD KNOW:
{COLLECTIVE WISDOM
FROM ТНЕ EXPERTS}
/ Ке8лин Хенни
ТришаДжи/
97ВЕЩЕЙ,
О КОТОРЫХ ДОЛЖЕН
ЗНАТЬ КАЖ.QЫЙ
JAVA-ПPOrPAMMИCT
{СОВЕТЫ ЛУЧШИХ ЭКСПЕРТОВ}
• новые функции
• уязвимости
Jаvа-библиотеки
• объектно-ориентированные
принципы в коде
Москва 2023
УДКОО 4.43
ББК 32.973.26-018.1
Х38
97 Things Every Java Programmer Should Кnow
Kevlin Henney, Trisha Gee
© 2023 Eksmo PuЫishing Company
Authorized Russian translation ofthe English edition of97 Things Every Java Programmer
Should Кnow ISBN 9781491952696 © 2020 О'RеШу Media Inc.
This translation is puЫished and sold Ьу permission ofO'Reilly Media, Inc.,
which owns or controls all rights to publish and sel\ the same.
Х38
Хенни, Кевлин.
97 вещей, о которых должен знать каждый Jаvа-программист:
советы лучших экспертов / КеRЛИН Хенни, Триша Джи ; [пере
вод с английского М. А. Райтмана]. - Москва: Эксмо, 2023. 288 с. - (Мировой компьютерный бестселлер).
ISBN 978-5-04-169254-4
Что должен знать каждый Jаvа-проrраммист? Ответов на этот вопрос мо
жет быть очень много. Авторы этой книги собрали мнения нескольких десят
ков опытных разработчиков на Java, чтобы создать единое руководство для
тех, кто только начинает свой путь в программировании.
Внутри вы найдете подробные инструкции по основным темам, касаю
щимся работы с Java. И еще - советы от экспертов и их истории профессио
нального развития в разработке!
УДКОО4.43
ББК 32.973.26-018.1
ISBN 978-5-04-169254-4
© Paimwi М.А., перевод на русский JIЭWК, 2023
©Оформление.ООО •Иэдател.спю •Эксмо•, 2023
Содержание
Предисловие ....................................... 17
1.
Всё, что вам нужно, - это Java ...................... 21
Андерс Норас
2. Тестирование на одобрение ........................ 23
ЭмилиБач
3. Усильте Javadoc AsciiDoc'oм ........................ 25
Джеймс Эллиотт
4. Будьте внимательны к контейнерному
окружению ........................................ 27
Давид Делабассе
5. Поведение - это «легко»; состояние это сложно ........................................ 29
ЭдсонЯнага
6. Бенчмаркинг - это сложно, JMH поможет ........... 31
Майкл Хангер
7. Преимущества систематизации
и проверки архитектурного качества ................ 34
ДэниелБрайант
8. Разбивайте проблемы и задачи
на небольшие фрагменты .......................... 37
ЖаннаБоярски
9. Создавайте разнообразные команды .......... . ..... 39
ИкшельРуис
5
10. Сборки не обязательно должны быть
медленными и ненадежными
42
Дженн Стретер
11. «Но на моем компьютере это работает!» ... .. ....... 44
Бенджамин Мушка
12. Дело против fat JAR ................................ 47
Дэниел Брайант
13. Реставратор кода ............ . ............ . . . ..... 49
Авраам Марин-Перез
14. Параллелизм в JVM ..... . ........ . ................. 51
Марио Фуско
15. CountDownlatch - друг или враг? .................. 53
Алексей Сошин
16. Декларативное выражение вот путь к параллелизму ............................ 56
Рассел Уиндер
17. Поставляйте качественное ПО быстрее ............. 58
Бурк Хуфнагель
18. Не знаете, который час? .... .......... . ............ 60
Кристин Горман
19. Не скрывайте от себя все инструменты,
используя IDE ...................................... 63
Гейл Оллис
20. Не меняйте свои переменные ....................... 65
Стив Фримен
8
21. Научитесь использовать SQL-мышление
по максимуму
Дин Уэмплер
69
22. События между компонентами Java .. . .............. 71
А. Махди Абдель-Азиз
23. Циклы обратной связи ................... . ......... 74
ЛизКио
24. На всю катушку .................................... 76
Майкл Хангер
25. Следуйте скучным стандартам ...................... 78
АдамБиен
26. Частые релизы снижают риск ........... . .......... 80
КрисО'Делл
27. От головоломок к продуктам ....................... 82
ДжессикаКерр
28. «Разработчик полного цикла» это образ мышления
Мацей Валковяк
84
29. Сборщик мусора - ваш друг ....................... 86
Холли Камминс
30. Называйте вещи своими именами ................... 88
Питер Хилтон
31. Эй, Фред, не мог бы ты передать мне
HashMap? ............................. . ........... 90
Кирк Пеппердайн
7
32. Как избежать Null .................................. 92
Карлос Обрегон
33. Как вывести из строя JVM . ......................... 95
Томас Ронзон
34. Улучшение повторяемости и контролируемости
посредством непрерывной поставки ................ 97
Билли Корандо
35. В языковых войнах Java может за себя пост.оять .... 99
Дженнифер Райф
36. Встроенное мышление . .. . ....................... . 102
Патриция Аас
37. Взаимодействие с Kotlin ........................... 104
Себастьяна Поджи
38. Дело сделано, но... ...... .. . . ........... ... . ....... 106
Жанна Боярски
39. Сертификаты Java: пробирный
камень технологий
108
МалаГупта
40.Java - дитя 90-х ... . .............................. 110
Бен Эванс
41. Программирование на Java
в аспекте производительности JVM ................ 112
Моника Беквит
42. Java должна приносить радость .................... 115
Холли Камминс
8
43. Неуказываемые типы Java ......................... 117
Бен Эванс
44. JVM - мультипарадигмальная платформа.
Используйте это, чтобы повысить
свой уровень программирования . ..... . . ....... . .. 120
Рассел Уиндер
45.Держите руку на пульсе ........................... 122
ТришаДжи
46.Виды комментариев ...... ....... .............. .. .. 124
Николай Парлог
47. Знай flatMap свой ........... ...................... 127
Дэниел Инохоса
48.Знайте свои коллекции .. .......................... 130
Никхил Нанивадекар
49. Обратите внимание на Kotlin .................... . . . 132
МайкДанн
50. Изучайте идиомы Java и храните их в памяти ....... 136
Жанна Боярски
51. Учитесь создавать kata и создавайте kata,
чтобы учиться
138
Дональд Рааб
52. Научитесь любить ваш устаревший код ........ . .... 141
Уберто Барбини
53. Научитесь использовать новые функции Java ....... 143
Гейл С. Андерсон
1
54. Изучите свою IDE, чтобы уменьшить
когнитивную нагрузку
146
ТришаДжи
55. Давайте заключим контракт:
искусство разработки Java API .............. . ..... 148
МариоФуско
56. Делайте код простым и читабельным ............... 150
Эмили Цзян
57. Добавьте в вашу Java немного Groovy . . . . ...... . ... 153
КенКоузен
58. Минимизируйте конструкторы ..................... 156
СтивФримен
59. Назовите дату . . . . . . . . . . . . ... . ....... . ........ . .... 159
Кевлин Хенни
60. Необходимость технологий
промышленной прочности . . . . . . ... . . . . ... . . . . . . . .. 161
Пол У. Гомер
61. Создавайте только те части, которые изменяются,
и повторно используйте остальные ................ 163
Дженн Стретер
62. Проекты с открытым кодом это не волшебство
165
Дженн Стретер
63. Optional - монада, нарушающая закон,
но это хороший тип
Николай Парлог
10
167
64.Упаковка по функциям с модификатором
доступа по умолчанию
170
МаркоБилен
65. Продакшн - самое радостное место на земле . ..... 172
ДжошЛон2
66.Программируйте с GUT . ... .... ........... .. ....... 175
Кевлин Хенни
67. Ежедневно читайте OpenJDK .. .. .. ... ... .. . ....... 178
ХайнцМ. Кабуц
68. По-настоящему заглянуть «под капот» .............. 180
Рафаэль Беневидес
69. Возрождение Java ................................ 182
СандерМак
70. Заново откройте для себя JVM
с помощью Clojure
184
Джеймс Эллиотт
7 1. Преобразование логических значений
в перечисления
186
Питер Хилтон
72. Рефакторинг для ускорения чтения ..... ..... ..... . 188
БенджаминМушкала
73. Простые объекты значений .. .... ..... ..... .... . ... 191
Стив Фримен
74. Позаботьтесь о своих объявлениях модулей .. .... . . 194
Николай Парло2
,,
75. Заботьтесь о создаваемых зависимостях . . . . . . . . . . . 197
Брайан Вермеер
76. Принимайте разделение ответственности
всерьез . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Дэйв Фарли
77. Техническое интервьюирование - это навык,
который стоит развивать . . . . . . . . . . . . . . . . . . . . . . . . . 202
ТришаДжи
78. Разработка на основе тестирования . . . . . . . . . . . . . . 204
Дэйв Фарли
79. В вашем каталоге Ьin/ отличные инструменты . . . . . 207
РодХилтон
80. Вылезайте из песочницы Java . . . . . . . . . . . . . . . . . . . . . 209
Иэн Ф. Дарвин
81. Мысли о сопрограммах . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Доун иДэвид Гриффитс
82. Потоки - это инфраструктура,
относитесь к ним соответственно . . . . . . . . . . . . . . . . . . 214
Рассел Уиндер
83. Три черты по-настоящему отличных
разработчиков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Джанна Патчей
84. Компромиссы в архитектуре микросервисов . . . . . . . 218
Кенни Бустани
85. Не проверяйте свои исключения . . . . . . . . . . . . . . . . . . 220
Кевлин Хенни
12
86. Как высвободить потенциал
интеграционного тестирования
с использованием контейнеров .................... 223
Кевин Виттек
87. Необъяснимая эффективность фаззинга ........... 225
НэтПрайс
88. Используйте покрытие, чтобы улучшить
ваши модульные тесты
228
ЭмилиБач
89. Свободно применяйте нестандартные
идентификационные аннотации
Марк Ричардс
90. Тестируйте, чтобы разрабатывать более
качественное ПО быстрее
Марит ванДейк
91. Применение объектно-ориентированных
принципов в тестовом коде
230
233
235
ЭнджиДжонс
92. Как развивать карьеру, опираясь на силы
сообщества
Сэм Хепберн
93. Что такое программа JCP
и как в ней участвовать
Хизер Ванчура
238
240
94. Почему я не придаю никакого значения
сертификации ...... . ....... . ... . ................ 242
Колин Випурс
13
95. Пишите к документации комментарии
в одно предложение
244
Питер Хилтон
96. Пишите «читаемый код» ........................... 247
ДзйвФарли
97. Молодые, старые и мусор ......................... 250
Мария Ариас де Рейна
Об авторах ........................................ 252
Предметный указатель ............................. 282
В память о тех, кто с мудростью
и состраданием выпестовал нас
Предисловие
Ум - это не сосуд, который нужно наполнить, а факел, который нужно
зажечь.
Плутарх
Что должен знать каждый Jаvа-программист? Зависит от обстоятельств. От
того, зачем, кого и когда вы спрашиваете. Ответов по крайней мере столько
же, сколько точек зрения. В языке, платформе, экосистеме и сообществе, ко
торые влияют на программное обеспечение (ПО) и жизни многих людей и де
лали так из двадцатого века в двадцать первый, от одного ядра ко многим, от
мегабайт к гигабайтам, ответ зависит от большего количества факторов, чем
возможно охватить в одной книге единственным автором.
Вместо этого в данной книге мы опираемся на некоторые из этих многочис
ленных точек зрения, чтобы дать вам поперечный срез и представление о ти
пах мышления во вселенной Java. Это не все мнения, но 97 из них от 73 учас
тников. Процитируем предисловие «97 вещей, которые должен знать каждый
программист» (O'Reilly):
Когда так много нужно знать, так много нужно сделать и есть так мно
го способов сделать это, ни один человек или один источник не мо
жет утверждать, что его путь - «единственный истинный». Идеи не
совпадают, как модульные части, и никто к этому не стремится - по
жалуй, даже наоборот. Ценность каждого вклада проистекает из его
уникальности. Ценность коллекции заключается в том, как материалы
дополняют, подтверждают и даже противоречат друг другу. Здесь нет
всеобъемлющего повествования: вы должны прочувствовать идеи, по
размыслить над ними и связать воедино, примеряя их к своей ситуа
ции, знаниям и опыту.
Что должен знать каждый Jаvа-проrраммист? 97 тем, которые мы выбрали
в качестве ответа, охватывают язык, JVM, методы тестирования, JDK, сооб
щество, историю, гибкое мышление, ноу-хау реализации, профессионализм,
стиль, суть, парадигмы программирования, программистов как людей, архи
тектуру ПО, навыки за пределами программирования, инструментарий, ме
ханику GC, языки JVM, отличные от Java ... и многое другое.
17
Разрешения
В духе первой книги из серии «97 вещей ... » каждый интеллектуальный вклад
в данный том внесен на основе неоrраничивающей модели с открытым ис
ходным кодом. Каждый вклад автора лицензируется в соответствии с Creative
Commons Attribution 4.0 license (https://oreil.ly/zPsKК). Многие материалы
также впервые появились в публикации «97 вещей... » на странице Medium
(https://medium.com/97-things ).
Все это - топливо и огонь для ваших мыслей и кода.
Онлайн-обучение O'Reilly
Более сорока лет O'Reilly Media помогает компаниям добиваться успеха, пре
доставляя им технологии и бизнес-тренинги, сведения и наработки.
Наше уникальное сообщество экспертов и новаторов делится знаниями
и опытом с помощью книг, статей, конференций и нашей платформы онлайн
обучения O'Reilly. Последняя предоставляет вам доступ по запросу к практи
ческим подготовительным курсам, методам углубленного обучения, интерак
тивным средам программирования и обширной коллекции текстов и видео
от O'Reilly и более 200 других издателей. Чтобы узнать подробности, посетите
http://oreilly.com.
Как с нами связаться
Вы можете получить доступ к веб-странице этой книги, где найдете примеры,
обнаруженные неточности и прочую дополнительную информацию, по адре
су https:I/oreil. ly/97Tejpsk.
Чтобы прокомментировать или задать технические вопросы об этой книге,
напишите письмо на bookquestions@oreilly.com.
Для получения новостей и информации о наших книгах и курсах посетите
http://oreilly.com.
Присоединяйтесь к нам в Twitter http://twitter.com/oreillymedia, а также по
смотрите http://twitter. сот/97_ Things.
Смотрите нас на YouTube: http://youtube.com/oreillymedia.
18
6ла года р ноет и
Многие люди вложили свои знания и время, как прямо, так и косвенно,
в проект «97 вещей, которые должен знать каждый Jаvа-программист». Все
они заслуживают похвалы.
Мы хотели бы поблагодарить всех тех, кто потратил время и силы, чтобы
внести свой вклад в эту книгу. Мы также благодарны Брайану Гетцу за допол
нительные отзывы, комментарии и предложения.
Спасибо O'Reilly за поддержку, которую они оказали этому проекту, в том
числе Зан Маккуэйд и Корбину Коллинзу за их руководство и заботу об участ
никах и содержании, а также Рэйчел Румелиотис, Сьюзан Конант и Майку
Лукидесу за их вклад в проделанную работу.
Кроме того, Кевлин хотел бы поблагодарить свою жену Каролин за то, что она
понимает смысл его бреда, и своих сыновей Стефана и Янника за то, что они
понимают своих родителей.
Триша желала бы добавить благодарность своему мужу Исре (за то, что он
подсказал ей: пребывание в стрессе из-за того, что она делает слишком мало,
мешает ей делать вообще что-либо) и своим дочерям Эви и Эми за бескорыст
ную любовь и обнимашки.
Мы надеемся, что эта книга станет для вас информативной, поучительной
и вдохновляющей. Наслаждайтесь!
Всё, что вам нужно,
это Java*
Андерс Норас
Работая над первой крупной редакцией Visual Studio, команда Microsoft пред
ставила миру трех персонажей-разработчиков: Морта, Элвиса и Эйнштейна.
Морт, приспосабливающийся работник, быстро исправлял и придумывал
что-то по ходу дела. Элвис, прагматичный сотрудник, создавал решения на
века, обучаясь на рабочем месте. Эйнштейн, программист-параноик, как
одержимый разрабатывал наиболее эффективное решение и старался во
всем разобраться, прежде чем писать код.
Языки программирования (ЯП) разделены, как религиозные касты. Мы со
стороны Java смеялись над Мартами и хотели быть Эйнштейнами, кото
рые создают фреймворки, чтобы вынудить Элвисов писать свой код «пра
вильно».
Это происходило на заре эры фреймворков, и, если вы не владели новей
шим, лучшим объектно-реляционным мэппером и фреймворком с инвер
сией управления, вы не были настоящим Jаvа-программистом. Библиотеки
превратились в фреймворки с установленной архитектурой. И по мере того,
как они становились технологическими экосистемами, многие из нас забыли
о маленьком, но очень способном языке - Java.
Java - отличный ЯП, и в его библиотеке классов есть инструменты на все
случаи жизни. Нужно работать с файлами? j ava. nio тебя прикроет. Базы
данных? j ava. sql - вам сюда. Почти каждый дистрибутив Java даже осна
щен полноценным НТТР-сервером, однако вам придется перейти от модуля
с именем Java на com. sun .net .httpserver.
По мере того как наши приложения переходят к бессерверным архитектурам,
где единицами развертывания могут быть отдельные функции, преимущест
ва, которые мы получаем от фреймворков, уменьшаются. Это связано с тем,
* В оригинале All You Need Is Java - отсылка к All You Need Is Love, классическому хиту
Beatles 1967 года. - Прим. ред.
21
что мы, вероятно, будем тратить не так много времени на решение техничес
ких и инфраструктурных проблем, сосредоточив усилия по программирова
нию на бизнес-возможностях, которые реализуют наши приложения.
Как выразился Брюс Джойс, автор книг про образование и педагогику:
Нам приходится время от времени изобретать колесо, и не потому,
что нам нужно много колес, а потому, что нам нужно много изобрета
телей.
Многие задались целью создания универсальных фреймворков для бизнес
лоrики, чтобы максимально использовать их повторно. Большинство по
терпели неудачу, поскольку на самом деле нет никаких универсальных биз
нес-проблем. Чем один бизнес отличается от другого? Тем, что делает нечто
особенное уникальным, специфичным для него образом. Вот почему вы га
рантированно будете писать бизнес-логику практически для каждого проек
та. Возможно, у вас возникнет соблазн ввести механизм правил или что-то
подобное ради того, чтобы создать нечто универсальное и многоразовое.
Но в конечном счете настройка механизма правил - это программирование,
часто на языке, уступающем Java. Почему бы вместо этого не попробовать
просто написать на Java? Вы с удивлением обнаружите, что конечный резуль
тат легко читаем, а это, в свою очередь, упрощает поддержку кода даже для
тех программистов, которые на Java не работают.
Довольно часто можно заметить, что библиотека классов Java немного огра
ниченна, и в таких случаях требуется нечто, способное сделать чуть более
комфортной работу с датами, сетевое взаимодействие или что-то еще. Это
прекрасно. Задействуйте любую библиотеку. Разница в том, что теперь вы
будете применять ее, потому что возникла конкретная необходимость, а не
потому, что она входила в стек, который вы всегда использовали.
В следующий раз, когда вам в голову придет идея небольшой программы,
выведите свои знания о библиотеке классов Java из спящего режима, вместо
того чтобы лезть в дебри JHipster. Хипстеризм - это уже не комильфо; жить
простой жизнью - вот что актуально сейчас. Бьюсь об заклад, Морту нрави
лась простая жизнь.
Тестирование на одобрение
ЭмилиБач
Вы когда-нибудь писали тестовое утверждение (assertion) с фиктивным или
пустым ожиданием? Что-то вроде этого .. .
assertEquals("", functionCall())
... где functionCall() возвращает строку, и вы не уверены точно, какой она
должна быть, но поймете, что она верная, когда увидите ее? Когда вы за
пускаете тест в первый раз, конечно, он завершается неудачей, потому что
functionCall () возвращает непустую строку. (Возможно, вам потребуется не
сколько попыток, пока возвращаемое значение не будет выглядеть правиль
ным.) Затем вы вставляете это значение вместо пустой строки в assertEquals.
Теперь тест должен пройти. Есть результат! Все это я бы назвала тестирова
нием на одобрение.
Ключевой шаг здесь - это когда вы решаете, что выходные данные верны,
и используете их в качестве ожидаемого значения. Вы
Последние комментарии