Collective Wisdom from the Experts
Kevlin Henney, Trisha Gee

#Java
#JVM
#JMH
If you want to push your Java skills to the next level, this book provides expert advice from Java leaders and practitioners. You’ll be encouraged to look at problems in new ways, take broader responsibility for your work, stretch yourself by learning new techniques, and become as good at the entire craft of development as you possibly can.
Edited by Kevlin Henney and Trisha Gee, 97 Things Every Java Programmer Should Know reflects lifetimes of experience writing Java software and living with the process of software development. Great programmers share their collected wisdom to help you rethink Java practices, whether working with legacy code or incorporating changes since Java 8.
A few of the 97 things you should know:
Table of Contents
Chapter 1. All You Need Is Java
Chapter 2. Approval Testing
Chapter 3. Augment Javadoc with Ascii Doc
Chapter 4. Be Aware of Your Container Surroundings
Chapter 5. Behavior Is "Easy"; State Is Hard
Chapter 6. Benchmarking Is Hard-JMH Helps
Chapter 7. The Benefits of Codifying and Asserting Architectural Quality
Chapter 8. Break Problems and Tasks into Small Chunks
Chapter 9. Build Diverse Teams
Chapter 10. Builds Don't Have To Be Slow and Unreliable
Chapter 11. "But It Works on My Machine!"
Chapter 12. The Case Against Fat JARS
Chapter 13. The Code Restorer
Chapter 14. Concurrency on the JVM
Chapter 15. CountDownLatch-Friend or Foe?
Chapter 16. Declarative Expression Is the Path to Parallelism
Chapter 17. Deliver Better Software, Faster
Chapter 18. Do You Know What Time It Is?
Chapter 19. Don't hIDE Your Tools
Chapter 20. Don't Vary Your Variables
Chapter 21. Embrace SQL Thinking
Chapter 22. Events Between Java Components
Chapter 23. Feedback Loops
Chapter 24. Firing on All Engines
Chapter 25. Follow the Boring Standards
Chapter 26. Frequent Releases Reduce Risk
Chapter 27. From Puzzles to Products
Chapter 28. "Full-Stack Developer" Is a Mindset
Chapter 29. Garbage Collection Is Your Friend
Chapter 30. Get Better at Naming Things
Chapter 31. Hey Fred, Can You Pass Me the HashMap?
Chapter 32. How to Avoid Null
Chapter 33. How to Crash Your JVM
Chapter 34. Improving Repeatability and Auditability with Continuous Delivery
Chapter 35. In the Language Wars, Java Holds Its Own
Chapter 36. Inline Thinking
Chapter 37. Interop with Kotlin
Chapter 38. It's Done, But...
Chapter 39. Java Certifications: Touchstone in Technology
Chapter 40. Java Is a '90s Kid
Chapter 41. Java Programming from a JVM Performance Perspective
Chapter 42. Java Should Feel Fun
Chapter 43. Java's Unspeakable Types
Chapter 44. The JVM Is a Multiparadigm Platform: Use This to Improve Your Programming
Chapter 45. Keep Your Finger on the Pulse
Chapter 46. Kinds of Comments
Chapter 47. Know Thy flatMap
Chapter 48. Know Your Collections
Chapter 49. Kotlin Is a Thing
Chapter 50. Learn Java Idioms and Cache in Your Brain
Chapter 51. Learn to Kata and Kata to Learn
Chapter 52. Learn to Love Your Legacy Code
Chapter 53. Learn to Use New Java Features
Chapter 54. Learn Your IDE to Reduce Cognitive Load
Chapter 55. Let's Make a Contract: The Art of Designing a Java API
Chapter 56. Make Code Simple and Readable
Chapter 57. Make Your Java Groovier
Chapter 58. Minimal Constructors
Chapter 59. Name the Date
Chapter 60. The Necessity of Industrial-Strength Technologies
Chapter 61. Only Build the Parts That Change and Reuse the Rest
Chapter 62. Open Source Projects Aren't Magic
Chapter 63. Optional Is a Lawbreaking Monad but a Good Type
Chapter 64. Package-by-Feature with the Default Access Modifier
Chapter 65. Production Is the Happiest Place on Earth
Chapter 66. Program with GUTS
Chapter 67. Read OpenJDK Daily
Chapter 68. Really Looking Under the Hood
Chapter 69. The Rebirth of Java
Chapter 70. Rediscover the JVM Through Clojure
Chapter 71. Refactor Boolean Values to Enumerations
Chapter 72. Refactoring Toward Speed-Reading
Chapter 73. Simple Value Objects
Chapter 74. Take Care of Your Module Declarations
Chapter 75. Take Good Care of Your Dependencies
Chapter 76. Take "Separation of Concerns" Seriously
Chapter 77. Technical Interviewing Is a Skill Worth Developing
Chapter 78. Test-Driven Development
Chapter 79. There Are Great Tools in Your bin/ Directory
Chapter 80. Think Outside the Java Sandbox
Chapter 81. Thinking in Coroutines
Chapter 82. Threads Are Infrastructure; Treat Them as Such
Chapter 83. The Three Traits of Really, Really Good Developers
Chapter 84. Trade-Offs in a Microservices Architecture
Chapter 85. Uncheck Your Exceptions
Chapter 86. Unlocking the Hidden Potential of Integration Testing Using Containers
Chapter 87. The Unreasonable Effectiveness of Fuzz Testing
Chapter 88. Use Coverage to Improve Your Unit Tests
Chapter 89. Use Custom Identity Annotations Liberally
Chapter 90. Use Testing to Develop Better Software Faster
Chapter 91. Using Object-Oriented Principles in Test Code
Chapter 92. Using the Power of Community to Enhance Your Career
Chapter 93. What Is the JCP Program and How to Participate
Chapter 94. Why I Don't Hold Any Value in Certifications
Chapter 95. Write One-Sentence Documentation Comments
Chapter 96. Write "Readable Code"
Chapter 97. The Young, the Old, and the Garbage
Kevlin Henney is an independent consultant and trainer. His work focuses on patterns and architecture, programming techniques and languages, and development process and practice. He has been a columnist for various magazines and online publications, including The Register, Better Software, Java Report, CUJ, and C++ Report. Kevlin is co-author of two volumes in the Pattern-Oriented Software Architecture series: A Pattern Language for Distributed Computing and On Patterns and Pattern Languages. He also contributed to 97 Things Every Software Architect Should Know









