
How I Read Programming Books - ivoflipse
http://www.simplyahmazing.com/2013/01/how-i-read-programming-books.html
======
xentronium
<rant>

For reasons unknown to me, intro-level books for programming languages stopped
including exercises. K&R had exercises, SICP had exercises, Dragon Book had
exercises. Clojure in Action, Clojure programming, Joy of Clojure, Programming
Erlang — none of those have any. What happened? Are they trying to conserve
space?

</rant>

~~~
jordan0day
> Are they trying to conserve space?

While I haven't read the four you mention not having examples, in my
experience, "conserving space" is the _last_ thing most programming books do.

Reading this post, my first thought was "How do you read a programming book 3
times? They're _so long_?"

I actually feel like most programming-related books are _artificially padded_
with unneeded content, just for the sake of making them longer. Perhaps so
they'll seem more like they're worth their price?

In my opinion, _too-long_ technical books are a problem. If you've only got an
hour or two a day to read, it can take a week or two to get through a decent-
sized technical book. Add in xentronium's point about lack of exercises, and I
don't know how anyone is supposed to retain much knowledge from these books.

~~~
pivo
I understand that at least one publisher prefers thick books because that
makes the spine wider and therefore the book is more visible on the shelf in
the bookstore.

Maybe now that so many books are purchased online this isn't as much of a
concern.

------
kylemaxwell
The "typing code out" is important. A lot of us learned just this way in the
early 80s, because that was the only way we could get the source: buy a
magazine or a book that taught, say, game programming in BASIC, and then type
in code. The inevitable syntax errors made you spend time going back through
to figure out what you did wrong, not to mention the time you spent actually
looking at each line.

Downloading the code from a book's web site has nowhere near the same effect,
even if it "feels" more efficient.

~~~
natep
I try to do the same thing in lectures. Unless I'm late or the lecturer is a
particularly fast talker, I can usually process the information to the point
where I'm writing my current understanding in my own words. Much better for me
than taking dictation for an hour.

~~~
bornhuetter
> I can usually process the information to the point where I'm writing my
> current understanding in my own words.

Can you explain what you mean by this?

~~~
Swizec
He means he's taking notes.

Rather than painstaikingly writing down _everything_ the lecturer says. Which
would be stupid anyway, that's what audio recorders are for.

~~~
LaRakel
You can't skim over audio recordings

~~~
Posibyte
I ran through my audio recordings in 1.5x speed the week before finals when I
was studying. It's kinda like skimming.

------
ianstallings
I think I'm too ADD for this. Here's how I read programming books:

1\. Open Table of Contents and find topic I'm interested in. 2\. Open page of
topic. Read about it. Start coding along. 3\. Close book.

I feel like I can't really read them any other way. I haven't read one cover
to cover in years, and that was when I was doing tech editing for publishers
and I had to read the whole thing.

Am I alone? Do most of you read the whole thing like a novel?

~~~
DigitalJack
I pretty much do what you do, although it often leads to a rabbit trail of
backtracking to pick up prerequisite concepts.

~~~
pivo
I do the same, and it drives me crazy. This is one habit I've been trying
really hard to break in the last few years.

~~~
Dylanlacey
Interestingly, if you try to force yourself to read the book from cover to
cover, and you find it painful and dreary and you have to FORCE yourself to
read every single page, that's a pretty good simulation of what ADHD feels
like when doing an uninteresting task.

So, perhaps you could try checking out some of the advice for ADHD peeps and
seeing if some of the non-illegal strategies work for you.

------
alanctgardner2
I'm more or less the opposite of the author: I find a problem first, pick the
language that seems most suitable or I think I can code fastest in, and have
at it. Advantages:

\- Write interesting code right away, which helps me focus \- No need for a
monolithic resource like a book, just Google the specific problem to be solved
\- Solve a problem while learning

The biggest downside is that I don't tend to write idiomatic code: when you
hack away at your own projects, they all look like your style, regardless of
the source language. It took me several months to pick up good C practices at
my new job, and I'm still not proficient at Ruby, Python or Java, despite
having written plenty of code.

To try and combat this problem, I've started reading more advanced documents
and talks in languages where I think I've got an OK base understanding. These
tend to be more interesting, and better demonstrate the strengths of a given
language.

~~~
marcosdumay
If you never learned it, how do you know if a language is good for solving a
problem?

I often choose a random language for solving a small problem, so that I can
learn it. It's often not the best language for the problem, but it shows what
the language is good for.

For me a monolithic resource is great for getting started in a language, but
most books are too deep, so I normaly don't finish them.

~~~
alanctgardner2
I find from reading blog posts, HN, etc. I have a pretty good idea of a
language's capabilities. Plus, if the idea is based on a particular API where
some languages are documented better or have a library already built, that
reduces development time a lot. That said, you're right that I do go outside
of my comfort zone intentionally when all things appear to be equal. Otherwise
I never would have gotten away from PHP for web apps.

------
marcoamorales
For anyone reading to acquire knowledge, or to learn new things, may I
recommend How To Read A Book by Charles Van Doren, Mortimer Adler.

~~~
martinced
So I actually need to read that book twice ?

I'm only half-joking here... It's a semi-serious question!

~~~
gshubert17
In developing the skills of reading, initially one may need to read stuff
twice. With skill and practice, one reading may accomplish several kinds of
goals at once.

------
BobWarfield
At this late stage in the game, learning a new language for me is a matter of
deciding on a project and building it while keeping some appropriate reference
at hand. If I read a book linearly at all it's to read just enough to get the
"Hello, World" going.

BTW, it doesn't take very long to become usefully productive in a language.
When I hire developers who've never worked with a language before I budget 6
weeks for them to start being productive and 6 months until they're truly
proficient.

Because of that, I place a higher premium on their raw talent and level of
interest in the platform and type of work we have than on the particular stack
they're already familiar with.

------
eliasmacpherson
This approach really depends on the brevity of the programming books you are
reading. I can't see someone leafing through CLRS, then again, then once more
shortly afterwards. Or other algorithm books like Algorithms in C, or e.g.
SICP or How To Design Programs. I read programming books at a glacial pace,
and sometimes I find it very tough going. So tough that I would not be in a
hurry to repeat the process, so I take notes. Also I find the desire to read
another different book much greater than the desire to retread the same
material.

------
mikevm
3 full reads of a book? That's highly inefficient, and it probably becomes
very boring (at least for me -- but that might be my ADHD).

~~~
kyrra
It depends on your learning style. If you know any trained psychologists, they
may have more to say on this, but I found a decent little article on it [1].
Reading a book 3 times and processing it differently each time probably is
engaging a number of different memorization tips.

[1] [http://psychcentral.com/blog/archives/2010/09/03/8-tips-
for-...](http://psychcentral.com/blog/archives/2010/09/03/8-tips-for-
improving-your-memory/)

~~~
mikevm
I'm not gonna argue that repeating something is going to aid memorization, but
in my experience, the best way to learn a programming language is to read a
book and then actually use it. If you forget things you can always look them
up, but re-reading the book 2 more times is useless.

------
alpb
That's very interesting. I usually read once, sometimes don't even write code
but I fully understand and ready to use the language. Maybe it's about the
programming expertise level you already have. Of course, when reading stuff
like Haskell, Scala you need to practice but when reading Python, Java... not
for me.

------
jaxytee
My programming II professor would always tell us to step away from the
keyboard/monitor, and physically write out a source file x times to help learn
a language. There is definitely something to this process that helps language
syntax piece itself together in the brain. Probably because it's similar to
the process we use to practice writing and reading our human languages.

------
hayksaakian
I strongly agree with the author.

The first read is like a novel. You want to know the plot, the main events,
and not much else.

The second read is as though you're going to write a report. Paying specific
attention to detail, noting unique and important bits.

The last read through is the nitty gritty. You have notes and the flow in
perspective. Now you're putting it to real use.

------
pcote
"Do the exercises" is only something you can do if you have the book. Learning
from blog tutorials don't usually have that benefit. You could still use this
person's approach but you'd have to substitute in something for step 3. I'd
say some kind of "mini-project" makes an acceptable substitute in most cases.

------
nicholassmith
This is pretty much how I use them as well, but I also intersperse personal
projects in between using what I've learnt and trying to acquire new
information as well. It's effective for me, I seem to retain more information
this way rather than going for one pass through a book.

------
sonabinu
The strategy that works for me is:

\- read the book and write down the key points (usually a full book will be
reduced to around 10 pages)

\- read the notes, and try to do the examples

\- rework the examples a second time, refer book and notes

------
scscsc
Nice that the author has read so many programming books so that creating an
algorithm for reading such books is cost-effective.

------
zxcdw
One thing I've learned: do the excercises. Just do them.

------
nerdfiles
Been reading in <http://antijingoist.github.com/AlphaSymbolic/>.

I'm not exactly sure what the best strategy is for applying AS to programming
languages since it has no "uppercase" glyphs.

