The pragmatic Programmer

January 3, 2013

Important notes:

Pragmatic phylosophy:

  1. Care about your craft
  2. Do things well. No necessarly "A" work.
  3. Think! about your work.
  4. Ongoing and critical appraisal of every decision you make. Never run on autopilot.
    1. Take time but leads to writing code easier to maintain, better personal efficiency and less time in meetings.
  5. Awareness of work issues, lead to improvements in terms of productivity or nature of the problems.
  6. Continously refine skills you have (Kaizen) and add new tools to you toolset. Over the years, your experience and toolset will have blossomed amazingly.
  7. Pragmatic programer's credo:
  8. Think about the problem in a larger context to make intelligent compromises and infromed decisions
  9. Take responsibility for everything they do.
    1. Make a commitment to ensure something is done right. If  bad things happen outside your control, your are not accountable for it.
    2. Offer alternatives if you screw up, accept to have screw up and don't make lame excuses.
    3. Tip 3: Up to you to provide solution, not excuses even when the language,management, vendor or coworker is responsible.
    4. Before telling someone: it cannot be done. Listen to yourself and ask yourself: Is your excuse stupid ? How do you react when someone comes up with a lame excuse ?
    5. Explain what can be done (code to be thrown out ? refactored ? prototyping ? better testing ? more resources ?)
  10. Keep their project pristine
    1. Broken Window Theory. In a perfectly well maintained building, a single broken window (bad designs, poor code, wrong decisions) leads to damages beyond the owner's will to repair it. If repair is not possible show that you are on top of the situation by boarding it up (comment out offending code, provide dummy data)
    2. In team and project where code is pristine and beautiful, clearly written, elegant, you will take the extra step to keep it that way even if a deadline comes up. You don't want to be the first one to make a mess it.
    3. People find it easier to jump onboard of an ongoing success. "Stone Soup"
    4. Notice the changes. "frogs eggs"
    5. Tip 5: Be the catalyst for change, the catalist that brings the team together to eventually get everyone win.
    6. Do things by yourself without asking. Better to ask for fogginess than permissions.
  11. Tip 6: Remember the big picture
    1. Review your work
    2. Get a glimpse at what other are doing
  12. Tip 7: Make quality a requirement.
    1. Write software that's good enough. "Good enough" means meeting user requirements, easily maintainable for maintainers and for my own piece of mind (not cut corners basic engineering to meet a deadline).
    2. Most users prefer to use a software not perfect NOW than a perfect one tomorrow.
    3. Known when to stop. Let the code as is for a while, let it leave, then improve it if needed. (Painters know when to stop to avoid ruining the painting). Code will never be perfect.
  13. Accept change
  14. Invest in your knowledge
    1. An investment in knowledge always pays the best interests - Benjamin Franklin . However, knowledge is an expiring asset (especially in today's tech). How to get the best knowledge ROI ? Use the same strategy as smart investors.
    2. Learn on a daily basis - Investor invest reguararly
      1. Learn at least one new programming language a year
      2. Read a technical book each quarter
      3. Read non techie books - the human side is important
      4. Participate in local user groups
      5. Experiment with different envs
      6. Get wired to get experience from others.
    3. Learn mutiple technos: the more technos you are comfortable with, the better you can adjust to change - Diversify for long term success
    4. Learn some current technos (low-risk low reward) and some very experimental ones (high risk high reward) - Smart investors have conservative and high risk-reward investment.
    5. Learn a technos that will be in demand tomorrow - Buy low, sell high.
    6. Review your technical portfolio. Some technos you have are not relevant any more. Drop them. Rebalance your portfolio.
  15. Tip 8 : Invest reguararly in your knowledge portfolio.
    1. If you cannot find the information, ask someone. It will build your personal network and help find solution to unrelated problems as well as growing your portfolio.
  16. Tip 9: Be critical about what you hear. No hype or dogma helps.
  17. Communicate effectively
    1. A good idea is orphan without effective communication.
    2. If you want to influence, you must communicate well, very well.
    3. How ?
      1. Know what you want to say.
      2. Plan what you want to say.
      3. Then ask yourself "Does this get across whatever I am trying to say ?" Refine it until it does.
      4. Know your audience: You are communicating only if you are conveying information.
      5. WISDOM
        1. What do they want to learn ?
        2. What is their Interest in what you have to say ?
        3. How Sophisticated are they ?
        4. How much Details do they need ?
        5. Whom do you want to Own the information ?
        6. How can you Motivate them to listen to you ?
      6. Choose your moment: when people are relaxed is best
      7. Choose a commucation style: memo, informal chat, etc ..
      8. Make it look good: Your important idea deserve a good-looking vehicule. Latex ? Spell check!
      9. Be a listener: Listen to them. Listen to them to be listened to. Turn chat into dialog.
      10. It is both what you say and how you say it. Rob told you that!!!
      11. ==> The more effective you are at communicating, the more influential you are.

Pragmatic Approach:

Discussion, links, and tweets

I'm a developer at IO Stark.