Standout BAD HABITS Even Senior Programmers Have
Summary of the YouTube Video Transcript
Dave Farley, from Modern Software Engineering, discusses what truly constitutes a “bad programmer.” He argues that simply making mistakes doesn’t qualify someone as a bad programmer, as mistakes are a normal part of learning and human endeavor. He illustrates this with two personal anecdotes: one where he lost code due to a hard drive failure and another where a colleague accidentally dropped tables in a production database.
Farley contends that the key differentiator between good and bad programmers lies in how they cope with and learn from their mistakes. Good programmers develop habits that help them spot mistakes early, limit their impact, and avoid repeating them. This involves thoughtfulness, understanding of how things work, and the ability to make informed decisions about tradeoffs rather than blindly following rules or relying on tools.
He shares stories from colleagues to further illustrate his points. One example involves a system with a single method (“do it”) with over 230 parameters and another describing a car configuration system built on an archaic 80-character punch card format, forcing absurd constraints on configuration options. He also mentions a high-performance system bogged down by excessive logging, used as a substitute for debugging.
Ultimately, Farley argues that the “worst programmer” is someone who actively hides their incompetence. He recounts an experience with a consultant who was hired for code reviews but lacked basic programming skills and used a code analysis tool to generate superficial reviews, essentially defrauding the client. Farley concludes that programmers have a “duty of care” to do their best, which includes being able to learn from mistakes and not trying to conceal them.
Accuracy
The information provided in the transcript generally aligns with established knowledge and best practices in software engineering. Here’s a breakdown:
- Mistakes are normal: This is a widely accepted view. Error is inherent to the human experience, and coding involves complex problem solving.
- Learning from mistakes is crucial: This is a fundamental principle of continuous improvement and professional growth in any field, especially software engineering. Concepts like blameless postmortems are essential to that process.
- Importance of version control and backups: These are core practices in software development for preventing data loss and enabling recovery from errors.
- Working in small steps and with automated testing: These are key tenets of Agile methodologies and Continuous Delivery, enabling faster feedback loops and reducing the impact of errors.
- Understanding tradeoffs: Good software architecture and engineering involves making informed decisions about the advantages and disadvantages of different approaches.
- Excessive logging as a debugging substitute is bad practice: This is accurate. While logging is necessary, over-reliance on it often indicates a lack of understanding of debugging tools and techniques, as well as creating performance problems.
- Hiding incompetence is unethical: This point is self-explanatory and aligns with professional ethical standards.
Overall, the video’s advice and observations are consistent with industry best practices and promote a culture of learning and continuous improvement.
Resources
Here are five relevant resources to learn more about the subjects discussed in the video:
-
“The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win” by Gene Kim, Kevin Behr, and George Spafford: This fictional novel illustrates the principles of DevOps and highlights the importance of continuous improvement, collaboration, and learning from mistakes in a relatable and engaging way.
- Relevance: Reinforces the themes of learning from mistakes, understanding system-wide impacts, and improving processes.
-
“Continuous Delivery: Reliable Software Releases through Build, Test, and Automation” by Jez Humble and David Farley: This book, co-authored by the speaker, is a seminal work on Continuous Delivery, covering topics like version control, automated testing, and deployment pipelines, which are all crucial for minimizing errors and enabling fast recovery.
- Relevance: Provides in-depth guidance on the practices and tools that enable programmers to avoid and quickly recover from mistakes.
-
“Refactoring: Improving the Design of Existing Code” by Martin Fowler: Refactoring is essential for improving code quality, making it easier to understand, and reducing the likelihood of errors. This book provides a comprehensive guide to refactoring techniques.
- Relevance: Addresses the issues of code quality, design, and maintainability, which are all factors in preventing and mitigating errors.
-
“Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems” by David J. Agans: A practical guide with techniques that improve debugging skills.
- Relevance: Gives more insight on what speaker in the video suggested - using debugger instead of just relying on logging.
-
“Effective Java” by Joshua Bloch: For Java developers, this book provides a comprehensive guide to best practices, design patterns, and common pitfalls to avoid when programming in Java.
- Relevance: Helps Java programmers write more robust and maintainable code, reducing the likelihood of errors and improving their overall skill.