“A journey of a thousand miles begins with a single step.”
~ Lao Tzu
“Life is a journey, not a destination”, programming is also a journey, not an end product. As we begin this journey from a novice programmer towards more accomplished professional, we learn through our mistakes, practice and programming enlightenment.
This is an effort to make traversing of this journey in sweet small steps. I have tried to learn and share 97 Things Every Programmer Should Know into byte sizes.
I am making a promise to my self, to learn the pearls of wisdom discussed in the book each day until my 97th day. Hope you can add few hours for the “10,000-Hour Rule” and accompany in this programming pilgrimage.
Below are the 97 programming path to attain the nirvāṇa.
- Act with Prudence ~ Edward Garson
- Apply Functional Programming Principles ~ Edward Garson
- Ask, “What Would the User Do?” (You Are Not the User) ~ Giles Colborne
- Automate Your Coding Standard~ Filip van Laenen
- Beauty Is in Simplicity ~ Jørn Ølmheim
- Before You Refactor ~ Rajith Attapattu
- Beware the Share ~Udi Dahan
- The Boy Scout Rule ~Robert C. Martin (Uncle Bob)
- Check Your Code First Before Looking to Blame Others~Allan Kelly
- Choose Your Tools with Care ~ Giovanni Asproni
- Code in the Language of the Domain ~Dan North
- Code Is Design ~ Ryan Brush
- Code Layout Matters ~ Steve Freeman
- Code Reviews ~Mattias Karlsson
- Coding with Reason ~ Yechiel Kimchi
- A Comment on Comments ~ Cal Evans
- Comment Only What the Code Cannot Say ~ Kevlin Henney
- Continuous Learning ~ Clint Shank
- Convenience Is Not an -ility ~ Gregor Hohpe
- Deploy Early and Often ~ Steve Berczuk
- Distinguish Business Exceptions from Technical ~Dan Bergh Johnsson
- Do Lots of Deliberate Practice ~Jon Jagger
- Domain-Specific Languages ~ Michael Hunger
- Don’t Be Afraid to Break Things ~ Mike Lewis
- Don’t Be Cute with Your Test Data ~ Rod Begbie
- Don’t Ignore That Error! ~ Pete Goodliffe
- Don’t Just Learn the Language, Understand Its Culture ~Anders Norås
- Don’t Nail Your Program into the Upright Position ~Verity Stob
- Don’t Rely on “Magic Happens Here” ~ Alan Griffiths
- Don’t Repeat Yourself ~ Steve Smith
- Don’t Touch That Code! ~ Cal Evans
- Encapsulate Behavior, Not Just State ~ Einar Landre
- Floating-Point Numbers Aren’t Real ~Chuck Allison
- Fulfill Your Ambitions with Open Source ~ Richard Monson-Haefel
- The Golden Rule of API Design ~Michael Feathers
- The Guru Myth ~Ryan Brush
- Hard Work Does Not Pay Off ~Olve Maudal
- How to Use a Bug Tracker ~ Matt Doar
- Improve Code by Removing It ~Pete Goodliffe
- Install Me ~ Marcus Baker
- Interprocess Communication Affects Application Response Time ~Randy Stafford
- Keep the Build Clean ~Johannes Brodwall
- Know How to Use Command-Line Tools ~Carroll Robinson
- Know Well More Than Two Programming Languages ~Russel Winder
- Know Your IDE ~Heinz Kabutz
- Know Your Limits ~ Greg Colvin
- Know Your Next Commit ~Dan Bergh Johnsson
- Large, Interconnected Data Belongs to a Database ~Diomidis Spinellis
- Learn Foreign Languages ~Klaus Marquardt
- Learn to Estimate ~ Giovanni Asproni
- Learn to Say, “Hello, World” ~ Thomas Guest
- Let Your Project Speak for Itself ~ Daniel Lindner
- The Linker Is Not a Magical Program ~Walter Bright
- The Longevity of Interim Solutions ~Klaus Marquardt
- Make Interfaces Easy to Use Correctly and Hard to Use Incorrectly ~ Scott Meyers
- Make the Invisible More Visible ~Jon Jagger
- Message Passing Leads to Better Scalability in Parallel Systems ~Russel Winder
- A Message to the Future ~Linda Rising
- Missing Opportunities for Polymorphism ~ Kirk Pepperdine
- News of the Weird: Testers Are Your Friends ~Burk Hufnagel
- One Binary ~ Steve Freeman
- Only the Code Tells the Truth ~ Peter Sommerlad
- Own (and Refactor) the Build ~Steve Berczuk
- Pair Program and Feel the Flow ~Gudny Hauknes, Kari Røssland, and Ann Katrin Gagnat
- Prefer Domain-Specific Types to Primitive Types ~Einar Landre
- Prevent Errors ~Giles Colborne
- The Professional Programmer ~ Robert C. Martin (Uncle Bob)
- Put Everything Under Version Control ~Diomidis Spinellis
- Put the Mouse Down and Step Away from the Keyboard ~Burk Hufnagel
- Read Code ~Karianne Berg
- Read the Humanities ~Keith Braithwaite
- Reinvent the Wheel Often ~Jason P. Sage
- Resist the Temptation of the Singleton ~Sam Saariste
- The Road to Performance Is Littered with Dirty Code Bombs ~Kirk Pepperdine
- Simplicity Comes from Reduction ~Paul W. Homer
- The Single Responsibility Principle ~Robert C. Martin (Uncle Bob)
- Start from Yes ~Alex Miller
- Step Back and Automate, Automate, Automate ~Cay Horstmann
- Take Advantage of Code Analysis Tools ~Sarah Mount
- Test for Required Behavior, Not Incidental Behavior ~Kevlin Henney
- Test Precisely and Concretely ~Kevlin Henney
- Test While You Sleep (and over Weekends) ~Rajith Attapattu
- Testing Is the Engineering Rigor of Software Development ~ Neal Ford
- Thinking in States ~Niclas Nilsson
- Two Heads Are Often Better Than One ~Adrian Wible
- Two Wrongs Can Make a Right (and Are Difficult to Fix) ~Allan Kelly
- Ubuntu Coding for Your Friends ~Aslam Khan
- The Unix Tools Are Your Friends ~Diomidis Spinellis
- Use the Right Algorithm and Data Structure ~Jan Christiaan “JC” van Winkel
- Verbose Logging Will Disturb Your Sleep ~Johannes Brodwall
- WET Dilutes Performance Bottlenecks ~ Kirk Pepperdine
- When Programmers and Testers Collaborate ~Janet Gregory
- Write Code As If You Had to Support It for the Rest of Your Life ~Yuriy Zubarev
- Write Small Functions Using Examples ~Keith Braithwaite
- Write Tests for People ~ Gerard Meszaros
- You Gotta Care About the Code ~ Pete Goodliffe
- Your Customers Do Not Mean What They Say ~Nate Jackson
References:
- 97 things Every Programmer Should Know ~ Git Book
- 97 Things Every Programmer Should Know ~ Paperback