public business secrets

Post navigation

Are programming books overrated?

In the last few weeks, we had an internship of a student that just finished academic high school (“Gymnasium”) and is looking forward to take up studies in computer science. He wanted to get in touch with the practical aspects of the career he is about to choose. The programming courses in school merely covered the basics of a programming language (Java) and some UML.

We prepared the student for the internship by feeding him several books we thought were appropriate for his level of knowledge. The books were a beginner’s book about Java (Head First Java), an introduction to unit testing (Pragmatic Unit Testing) and a foundation on clean code programming (Refactoring). Our student read them thoroughly and could make references to the chapters during pair programming sessions.

Retrospective on the books

But one feedback we got from him was that the books alone were nearly useless for his case. If there wouldn’t have been tutorial style pair programming coding sessions and several short lectures , he couldn’t grasp the deeper meaning of the book chapters he read (he suffered from the “blank slate blockade” several times). This came a bit as a surprise for us, as the student was very clever and really into it. It wasn’t the student, it was the books.

But you can’t blame it on “Refactoring”, for example, as this book is an all-time classic filled with really important knowledge. It has to be the medium itself, books are not the ideal source to learn about programming and software development.

Books are part of the academics

There is an old question in our profession. It revolves around if we are more like engineers or artists, craftsmen or scientists. In the core of this question is a uncertainty about the right model of education. Artists and craftsmen prefer more practical training, with apprentice/master relations and personal knowledge transfer. For engineers and scientists, literature and more standardized lectures are better suited. Academic knowledge is transferred during debate, not during exercises.

The duality of our profession

Projecting the feedback of our student onto this question, there seems to be a duality in our profession: Both (or all four if you want) approaches are needed to form a whole. You can’t learn the theory and expect to excel on the job. But pratical experience alone will not suffice to keep up with the pace of our profession. Good books are like afterburners here, you’ll be hurled forward by every page.

Conclusion

If it’s really true that we need to learn our profession both ways at once, pair programming (in the tour guide or backseat driver style) is an essential part of our qualification. And our current university curriculum fails to deliver this part. Students nowadays can team up to program together on an assignment, but that’s not learning from a master (unless one in the team has distinctly more experience than everybody else and is able to transfer it). So I vote to bring more craftsmanship to the academic education, as the books alone won’t cut it.

Your opinion?

What’s your opinion on this topic? Drop us a line about your thoughts.

7 thoughts on “Are programming books overrated?”

Java isn’t a good first language to learn. Java is confusing for first timers. Basic and C are so much better.

A good book on algorithms is also a good place to start. Programming isn’t about languages, it’s about meeting users requirements and problem solving. Also consider the fact that programmers don’t always get to choose what language they can use.

Introductory programming is really easy to learn and teach, but it requires an instructor and a whiteboard. Explain all the basic concepts, allow people to ask questions, do everything on paper (check their work) and then have students go enter it into a computer.

I have the good fortune of being able to think in programming languages and remember where every line of code is in a program (2000-4000 lines of code). If something isn’t right, I know exactly where to go to fix it. But no matter where I am today, I started with very simple command line Basic programming and then Pascal – and those two languages really helped put me on the road to success as a software developer.

In my opinion it doesn’t matter which language you learn first. As with the natual languages there is no way to tell which is better. Each has its pros and cons. I think it is important that the second language should not be learned until you’ve hit the limits of the first.

As a beginner one needs to understand the basics: syntax, program structure, program flow. This things are best learnt by seeing what others do, by having things explained and by doing simple (but meaningful!!) tasks. I have experienced that only a live human can answer the questions as appropriate as one needs. There are many questions – no book can handle them all. Another reason why books do not work well for beginners is that we all learn best when it is fun – when we play with the toys. When basics are not taught, learning by reading is really tedious and boring.

I think that only after the basics are understood one can really grasp what he/she want to achieve and only then can start to gather the knowledge on how to reach the target. Before that point is reached, there is no “bigger picture” and no idea what has to be done(which leads to the “blank slate blockade”).

Look at the kids. They cannot read but they learn fast, probably faster than you do :p Later in the school they learn how to solve more elaborate problems and so on…

I think we have very much in common with engineers and crafters. We shape our software and construct it. What makes us academics is that to maintain and create increasingly complex and dynamic software we must continuously learn increasingly complex and dynamic stuff.

Very insightful post. The approach of having a middle school graduate intern _before_ his study is revolutionary (as far as i know) and I find it rather inspiring. The finding that books don’t work on a blank mind confirms what many have professed before. It deserves more thorough research.

Interesting post and I’m not sure where I stand on it. I personally find I get quite a lot of useful information
out of books that I can readily apply in practice.

However, if I think back then I don’t think that was the case when I started coding so I think it may be a skill I’ve picked up more recently as my skill level increased.

So I guess my position is that students of programming probably need the mix… they need hands-on training of some form to build a basic skill level, and they need to read and learn from books in order to continue their learning once they have passed their ‘apprenticeship’ stage.

Imho there is no substitute for first-hand experience on programming. I benefit a lot from programming books like the Pragmatic Programmer and Clean Code, but only because I read them after several years of freelancing I understanded their messages.

It doesn’t matter if the topic is art, hair styling, or programming, you cannot simply read a technical book for an applied craft and become an expert on the topic. You have to practice the application.

Reading through “Refactoring” and getting a lot out of it is possible only if you’ve had years of coding experience. A junior would get nothing out of it unless they coded through the examples. Therefore I don’t think the problem was the book, the medium, or the student, it was that the book was beyond his frame of reference.

It depends heavily on the book, not on the specific subject of programming. There are really lousy cooking books, where classes with a cook would be far better, and there are wonderful cooking books where you can learn just by yourself.

When I went through my list of programming books read, which tallies to around 25-30 books (if I am not mistaken, I don’t have it here now) it got reduced to just 9 books for my blog post 9 best programming books I have read. And I am pretty sure similar ratios (or bigger) would come for mathematics, cooking, origami, or whatever I have more than 2 or 3 books.