I was inspired by Gichin Funakoshi's Twenty Principles, and decided that we software developers ought to have some too, and I couldn't think of a better place to put this than Stack Overflow community wiki.

  1. It is not about hardware or software, it is about people
  2. Technologies and tools come and go, patterns and algorithms stay the same
  3. All languages have a beginning and an end, but they also mate and have offspring
  4. Whatever you are doing now will sound archaic to your grandchildren, so remember to learn something new every day
  5. Cherish your testers, all code is guilty until proven innocent
  6. Nothing is impossible, so never give up
  7. Ask for help if you need it, give help if asked, and always be polite when doing either
  8. Content is King and UI is Queen, so make sure they both look good all the time
  9. Software, like Cooking and Music, is half Art and half Science; therefore, hire Chefs and Musicians
  10. The product isn't done until it seems like magic to your target audience
  11. The purpose of software is not to work, but to end work

I believe something like this is the best use of community wiki, I hope we can enshrine this list as something we all subscribe to.


Show me the money.


Any problem can be solved by adding another layer of abstraction (paraphrased; not mine, but I forget who said).


Complex things are made up of many simple things.


Computers help us solve problems that we would not have without them.


Nick Wesselman, a former student from Marquette university, writes:

I felt inspired this morning to share the lessons I've learned. All are important, but some are contradictory. It's finding the middle ground that's key.

  1. Software engineering is art.
  2. "It works" is never enough.
  3. "Good enough" is never enough.
  4. Be reasonable and realistic.
  5. Plan, plan, plan.
  6. Abstract, abstract, abstract.
  7. Reuse, reuse, reuse.
  8. Refactor, refactor, refactor.
  10. Always consider the WHOLE SYSTEM.
  11. Separate your concerns.
  12. Remember your patterns.
  13. THROW AWAY your prototype code.
  14. Use the tools at your disposal.
  15. Someone?s done it before.
  16. You can do it better.
  17. Be part of the software community and use it to your advantage.
  18. Never work in a bubble.
  19. If it can go wrong, it will.
  20. Your clients don't know what they really want until you've made a prototype they hate

"Simple is better than complex."

From the Zen of Python. Some more good ones there too, that's just my favorite. :)