Finally I read book written by Andrew Hunt and Dave Thomas: The Pragmatic Programmer. It was published in 1999, but it is still valid. The main idea provided by this book is the way of thinking. In other words: how ‘The Pragmatic Programmer’ should behave and what actions he should take in various situations.
There are also tips which skills are useful for programmer (e.g. using perl/bash scripts, mastring command line and at least one text editor).
Some advices are not valid in any case. E.g. in my opinion tip to never leave broken functionality has exceptions. Especially when it is some minor bug. There are situations when it is better to first focus on most important features and the problematic one leave for the end. After all we will have a few minor bugs and working main functionality. Instead of solved some or even only one, hard minor bug (like css styling:)) and not implemented main functionalities.
The other well-known (or should be well-known) tips like use Source Control, learn new technologies, analyze mistakes from past projects are also mentioned and described.
Here you can find list of tips from the book in nutshell: http://pragprog.com/the-pragmatic-programmer/extracts/tips. It is kind of summary of the book content.
At the and of each chapter, there is a set of exercises. This one blew my mind:
A quick reality check. Which of these “impossible” things can happen?
- A month with fewer than 28 days.
- stat(“.” ,&sb) == -1 (that is, can’t access the current directory)
- In C++: a=2;b=3; if (a+b!=5) exit(l);
- A triangle with an interior angle sum != 180°
- A minute that doesn’t have 60 seconds
- In Java: (a + 1) <= a
Fortunately at the end of the book there are answers (I wouldn’t even start googling, due to 100% certainty that some of them just can not happen, like 1 or 5):
- September, 1752 had only 19 days. This was done
to synchronize calendars as part of the Gregorian
- The directory could have been removed by another
process, you might not have permission to read it,
&sb might be invalid—you get the picture.
- We sneakily didn’t specify the types of a and b.
Operator overloading might have defined +, =, or !
= to have unexpected behavior. Also, a and b may
be aliases for the same variable, so the second
assignment will overwrite the value stored in the first.
- In non-Euclidean geometry, the sum of the angles of
a triangle will not add up to 180°. Think of a triangle
mapped on the surface of a sphere.
- Leap minutes may have 61 or 62 seconds.
- Overflow may leave the result of a + 1 negative (this
can also happen in C and C++).
Summarizing: this book contains huge amount of tips, which can help you to become better programmer. You may already know some of them (or most of them). In that case you will recall why they are important. Even Scott Hanselman said on his blog (in post Six Essential Language Agnostic Programming Books), that he ‘like to read this book at least every six months or so’.
It is 352 pages book. Can be easily read within 2 weeks by 1 hour reading per day. In my opinion it is one of must-read for programmer.