For the longest time I believed that programming was all about writing code. However over the past year, I’ve slowly changed that opinion. I now think that reading is just as important as writing. Computer science is a huge and continually expanding field and as a programmer you’ll probably only be dealing with a very small segment of the problems out there. More importantly there is a significant amount of cross fertilization between parts of our field. The only way to keep abreast of all the developments is to read and read voraciously.
Though our field is still one of the youngest in the world (probably only genetics and nanotechnology is younger), there has been an incredible amount of knowledge generated in the last 60 years or so. We’ve come a long way and solved an awful lot of complicated problems along the way. All the collective knowledge of our field is locked into three primary sources:
- Thousands of articles, books and other publications
- Billions (maybe trillions of lines) of powerful computer code.
- A growing number of blogs, wikis and other easily accessible electronic forms, most of which are free.
Of course it is humanly impossible to read all of it. Okay, maybe it is possible, but then you’d never get around to doing any programming. The good news is that reading even a very small fraction of the total mass of computer science literature out there will give you a far better idea of what’s been done and what’s going on.
No matter what part of computer science you’re in, there are bound to be a few classics that are required reading for everyone in that area. These might be in the form of books or research papers (especially if you’re into theoretical aspects). Though these might be somewhat more difficult than the daily problems you are used to solving, there are probably only a handful of them, so it’s not going to take forever to get through them. And it will probably be worth your time to go through them with some rigor. Reading the classics and founding works of your area will give you a fresh perspective of your work and offer a valuable insight into the minds of the early pioneers.
Now that you’ve started you might as well keep going and read something more modern. A lot of the things that were significant problems 60 years ago aren’t problems anymore and it might come in handy to know what the solutions are. There are modern books of course, but in this case the Internet might prove a better source. You can always start from Wikipedia to get a general idea and then work from there. Being in such a dynamic field, it’s important for us to keep abreast of current happenings and developments. Enter the blog. Sure, many blogs are of questionable quality and there’s a very high noise content. But that being said, there are still a number of authoritative voices and it shouldn’t be very hard for you to find ones pertinent to your interests.
Blogs are important not just as news sources, but also because often they link to or mention sources of information that would otherwise have passed under your radar. Blog comments are often a vibrant (and sometimes vitriolic) medium of discussion, and you might often be led to question your own assumptions on the topic.
Finally there is reading code. Reading other people’s code is not always an easy thing to do. After all it does represent someone else’s thought patterns which might be very different from our own. It’s even harder if the code is badly written. However reading code is important, both good and bad code. If you don’t know what bad code is, you won’t be able to tell when you’re writing it. Luckily with the rise of open source, there’s a profusion of code out there. Again the same warnings apply: there’s a lot of crap out there and you have to be a bit careful as to what exactly you’re looking at. However, just as with blogs, there should be some well known source you can safely trust.
Since I started actively reading a few months, I’ve seen that I’ve become better at recognizing certain classes of problems and thinking of innovative solutions. I’ve also come to know of very interesting parts of our field which I would never have known of in a class setting. I’m still rather deficient when it comes to reading code, but that will be something I will work on over the rest of the year.