КулЛиб - Классная библиотека! Скачать книги бесплатно
Всего книг - 712679 томов
Объем библиотеки - 1401 Гб.
Всего авторов - 274525
Пользователей - 125067

Последние комментарии

Новое на форуме

Впечатления

Влад и мир про Шенгальц: Черные ножи (Альтернативная история)

Читать не интересно. Стиль написания - тягомотина и небывальщина. Как вы представляете 16 летнего пацана за 180, худого, болезненного, с больным сердцем, недоедающего, работающего по 12 часов в цеху по сборке танков, при этом имеющий силы вставать пораньше и заниматься спортом и тренировкой. Тут и здоровый человек сдохнет. Как всегда автор пишет о чём не имеет представление. Я лично общался с рабочим на заводе Свердлова, производившего

  подробнее ...

Рейтинг: 0 ( 0 за, 0 против).
Влад и мир про Владимиров: Ирландец 2 (Альтернативная история)

Написано хорошо. Но сама тема не моя. Становление мафиози! Не люблю ворьё. Вор на воре сидит и вором погоняет и о ворах книжки сочиняет! Любой вор всегда себя считает жертвой обстоятельств, мол не сам, а жизнь такая! А жизнь кругом такая, потому, что сам ты такой! С арифметикой у автора тоже всё печально, как и у ГГ. Простая задачка. Есть игроки, сдающие определённую сумму для участия в игре и получающие определённое количество фишек. Если в

  подробнее ...

Рейтинг: 0 ( 0 за, 0 против).
DXBCKT про Дамиров: Курсант: Назад в СССР (Детективная фантастика)

Месяца 3-4 назад прочел (а вернее прослушал в аудиоверсии) данную книгу - а руки (прокомментировать ее) все никак не доходили)) Ну а вот на выходных, появилось время - за сим, я наконец-таки сподобился это сделать))

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

В начале

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).
DXBCKT про Стариков: Геополитика: Как это делается (Политика и дипломатия)

Вообще-то если честно, то я даже не собирался брать эту книгу... Однако - отсутствие иного выбора и низкая цена (после 3 или 4-го захода в книжный) все таки "сделали свое черное дело" и книга была куплена))

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

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).
DXBCKT про Москаленко: Малой. Книга 3 (Боевая фантастика)

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

В общем герою (лишь формально вникающему в разные железки и нейросети)

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).

97 вещей, о которых должен знать каждый Java-программист [Кевлин Хенни] (pdf) читать онлайн

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

/ Keulin Неппеу
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.
Теперь тест должен пройти. Есть результат! Все это я бы назвала тестирова­
нием на одобрение.
Ключевой шаг здесь - это когда вы решаете, что выходные данные верны,
и используете их в качестве ожидаемого значения. Вы