About:

Opinions on software development, and how we can do it better, from the author of The Pragmatic Programmer and a creator of the Manifesto for Agile Software Development.

Website:

Incoming Links:

Subscribe to RSS:
The article critiques traditional coding interviews that focus on memorization and algorithm writing, arguing they fail to assess essential skills like communication, context building, and teamwork. It suggests a flipped interview...
The author discusses the limitations of traditional job titles like Junior Developer and Senior Developer, arguing that they oversimplify individual skills and contributions. Instead, he suggests breaking down roles into specific ...
The post discusses recent turmoil in the Ruby community regarding the management of the RubyGems repository, highlighting concerns over supply-chain vulnerabilities and the informal access granted to maintainers. Ruby Central's re...
The author discusses whether beginners in programming should use AI tools or learn the fundamentals first. They argue that foundational skills, like arithmetic, are essential for developing intuition about more complex concepts. T...
The post emphasizes that the true measure of a software developer lies in their ability to deliver value simply and effectively, rather than focusing on the latest technologies or features. It argues that developers should priorit...
The post draws a parallel between Goethe's 'The Sorcerer's Apprentice' and modern coding practices involving AI. It highlights the dangers of developers relying on AI-generated code without understanding the underlying principles,...
The author reflects on their experience of ignoring their own advice about optimization while working with a new book distributor. They describe the challenges of reconciling complex financial statements related to book expenses, ...
The author discusses the importance of simplicity, agility, and agency in the world of software development. He emphasizes the need for developers to reclaim control over their daily lives by reducing complexity and stress. The ar...
The author discusses the process of importing royalty data from spreadsheets, and the challenges of error handling and flow control in the code. They consider three alternative designs for error handling and flow control, and ulti...
The author discusses the reasons for writing tests and the impact of not writing tests on the code. He shares his personal conclusions and suggests that one should test their assumptions and refactor their beliefs accordingly.
The text discusses the author's approach to importing sales information from various sources using module-based polymorphism in Ruby. The author prefers functions over object instance methods and modules over classes, experimentin...
The text discusses the differences between method chaining and function composition, highlighting the drawbacks of method chaining and the benefits of function composition. It also explains the use of method chains in different pr...
The text discusses the history of design patterns, starting with Christopher Alexander's book A Pattern Language and the subsequent adoption of patterns in software development. It criticizes the idea of patterns as reusable code ...
The text discusses the negative impact of premature design in programming, using examples to illustrate the point. The author emphasizes the importance of designing code only when necessary and not prematurely. The text also touch...
The text discusses the process of learning and the development of beliefs, warning against glorifying shared beliefs and advocating for skepticism. It emphasizes the importance of context and individual testing of beliefs.
The text discusses the problem of people seeing disagreements as zero-sum games and the importance of dialectical reasoning. It suggests an exercise to see things from both sides and practice understanding different perspectives. ...
The text discusses the fear of change in the software development industry and how to overcome it. It emphasizes the importance of automation, code hygiene, taking small steps, and prototyping to reduce fear and make changes less ...
The text discusses the short-sightedness of larger companies in laying off junior developers due to the increased productivity of senior developers with AI. It emphasizes the unique benefits of junior developers and suggests that ...
The author discusses the importance of delivering only necessary features in software development, rather than adding unnecessary ones. He emphasizes the need to focus on delivering value to the customer and building a trusting re...
The text discusses the author's approach to developing software, which involves working in small increments, using feedback to assess value, and delivering value incrementally. The author shares examples of how they apply these pr...
The text discusses the use of loop invariants to inform coding, and how they can be used to assert preconditions and postconditions. It also provides examples of how loop invariants can be used to prove the correctness of code, an...
The text discusses the concept of tacit knowledge and its importance in learning and decision-making. It includes stories of William Phillips and the Moniac, the Dreyfus brothers' report, and Michael Polyani's work. The author sha...
The text discusses the concept of invariants in software development, tracing its origins back to the sixties and its practical applications in modern coding. It explains the importance of maintaining invariants in object-oriented...
The text discusses the idea of capturing enough information about the state of something to accurately predict its future state, and how it applies to software development. It explains the failure of creating models and the reason...