Presented, in no particular order, for your reading pleasure: my top 6 list of programming top 10 lists. To keep this entry concise, I've only quoted a brief summary of each item. If any of these sound interesting to you, I encourage you to click through and read the original author's thoughts in more detail.
Jerry Weinberg: The 10 Commandments of Egoless Programming
- Understand and accept that you will make mistakes.
- You are not your code.
- No matter how much "karate" you know, someone else will always know more.
- Don't rewrite code without consultation.
- Treat people who know less than you with respect, deference, and patience.
- The only constant in the world is change.
- The only true authority stems from knowledge, not from position.
- Fight for what you believe, but gracefully accept defeat.
- Don't be "the guy in the room."
- Critique code instead of people -- be kind to the coder, not to the code.
Dare Obasanjo: Top 10 Signs Your Software Project is Doomed
- Trying to do too much in the first version.
- Taking a major dependency on unproven technology.
- Competing with an existing internal project that is either a cash cow or has powerful backers.
- The team is understaffed.
- "Complex problems require complex solutions".
- Schedule Chicken
- Scope Creep
- Second System Syndrome
- No Entrance Strategy.
- Tackling a problem you don't know how to solve.
Omar Shahine: Top 10 Tips for Working at Microsoft (or Anywhere Else)
- Process is no substitute for thinking.
- Get out of your office.
- Use your product (the one your customers will).
- Fix things that are broken rather than complain about them being broken. Actions speak better than your complaining.
- Make hard problem look easy. Don't make easy problems look hard.
- Use the right communication tool for the job.
- Learn to make mistakes.
- Keep things simple.
- Add value all the time.
- Use their product.
Michael McDonough: The Top 10 Things They Never Taught Me in Design School
- Talent is one-third of the success equation.
- 95 percent of any creative profession is shit work.
- If everything is equally important, then nothing is very important.
- Don't over-think a problem.
- Start with what you know; then remove the unknowns.
- Don't forget your goal.
- When you throw your weight around, you usually fall off balance.
- The road to hell is paved with good intentions; or, no good deed goes unpunished.
- It all comes down to output.
- The rest of the world counts.
- Object orientation is much harder than you think.
- The difficult part of software development is communication.
- Learn to say no.
- If everything is equally important, then nothing is important.
- Don't over-think a problem.
- Dive really deep into something, but don't get hung up.
- Learn about the other parts of the software development machine.
- Your colleagues are your best teachers.
- It all comes down to working software.
- Some people are assholes.
Steve Yegge: 10 Great Books
- The Pragmatic Programmer: From Journeyman to Master
- Refactoring: Improving the Design of Existing Code
- Design Patterns
- Concurrent Programming in Java(TM): Design Principles and Pattern (2nd Edition)
- Mastering Regular Expressions, 2nd Edition
- The Algorithm Design Manual
- The C Programming Language, Second Edition
- The Little Schemer
You may wonder why I included a top 10 list from someone who is clearly a designer and not a programmer. I agree with Joey deVilla:
Software development is a kissing cousin of engineering (if not an engineering discipline itself), and blends creativity with math and science. That's why I find that a lot of advice to creative types is also applicable to software developers.
You may also want to contrast and compare my recommended reading list with Steve Yegge's. And yes, there is a reason Refactoring and Design Patterns aren't on my list, just as I'm sure there's a reason Code Complete is not on Steve's list.