I thinkg that the pragmatic programmer by Andrew Hunt and David Thomas is the most important book for programmers and I have some notes about it and I keep them always with me to remember the things I learned. So here they are:

My black book with my notes about the book

What makes a pragmatic programmer?

  • early adopter / fast adapter
  • inquisitive
  • critical thinker <- most important
  • realistic
  • jack of all trades
  • jack of all trades != master of none
  • T-shaped programmer

a pragmatic philosophy

the cat ate my source code

“The greatest of all weaknesses is the fear of appearing weak” - JB Bossuet

  • take responsibility
  • provide options, don’t make lame excuses

don’t live with broken windows

  • control your software entropy
  • entropy is the amount of disorder

it’s time to bring out the stones

  • people find it easier to join an ongoing success
  • if something could be better, change it
  • be a catalyst for change
  • projects slowly get totally out of hand
  • remember the big picture

good enough software

  • make quality a requirement issue
  • involve users in the trade-off
  • know when to stop

your knowledge portfolio

“An investment in knowledge always pays the best interest” - Benjamin Franklin

  • it’s similar to managing a financial portfolio

building your portfolio

  • invest regularly
  • diversify
  • manage risk
  • buy low, sell high
  • review and rebalance


  • learn one new language every year
  • read technical books
  • read nontechnical books too
  • read blog posts
  • take classes
  • participate in local user groups
  • stay current
  • get wired


  • A large part of our day is spent communicating, so we need to do it well.
  • know what you want to say
    • plan what you want to say
    • write an outline
    • ask yourself: “Does this get across whatever I’m trying to say?”
    • refine it until it does
  • know your audience
    • understand the needs, interests and capabilities of your audience
    • get to the same frequency of your audience
  • choose your moment
  • choose a style
  • make it look good
  • be a listener

a pragmatic approach

  • by keeping these fundamental principles in mind during development, you can write code that’s better, faster, and stronger. You can even make it look easy.

“Every piece of knowledge must have a single, unambiguous, authoritative representation within a system”

  • DRY - don’t repeat yourself
  • how does duplication arise?
    • imposed duplication
    • inadvertent duplication
    • impatient duplication
    • interdeveloper duplication
  • eliminate effects between unrelated things
  • benefits:
    • increase productivity
    • reduce risk
    • increase reversibility
      • every decision can be changed
  • coding
    • keep your code decoupled
    • avoid global data
    • avoid similar functions
    • must to be easy to test

domain languages

The limits of language are the limits of one’s world - Ludwig Wittgenstein

  • computer languages influence HOW you think about a problem
  • program close to the problem domain

the basic tools

shell games | use the power of shell commands

  • grep
  • awk
  • xargs

power editing

  • one editor
    • use it very well
    • use it for all editing things
  • editor features
    • configurable
    • extensible
    • programmable
  • increase your cursor movement
  • automate
  • vim vs emacs


  • fix the problem, not the blame
  • don’t panic
  • rubber ducking
  • “select” isn’t broken
  • don’t assume it, prove it

My black book with my notes about the book

I will recomend you to buy and read this awesome book. And I also leave here a thank you to Andrew Hunt and David Thomas.