It has long lingered on my mind to reflect partially on my experience of the last 3 years, as the B.Sc. of Computer Science I have recently undertaken is soon coming to an end. Fortunately, this is not the end of my journey as a Computer Scientist, but there are specific things that I did not realize about Computer Science before I embarked on this endeavour, most important of which is this: Computer Science is 90% reading and understanding and 10% coding. I believe it to be the most important thing I have learned about the field itself in the last 3 years. Here is why. Dealing with complex problems is hard. Programming is all about solving complex problems, programmers live by optimizing our code the best we can, and try to find solutions to problems that we encounter while doing so. While it is no doubt nice to have a working code that does something cool, or a solution to a problem that meets the specification, I don’t think that is the mindset a programmer should have – that is, at this stage, to solve a problem is not about getting to a solution somehow.
Solving coding tasks requires time. This might be difficult to admit for some, as it has been for me. But understanding a problem requires patient reading and digesting the context, possible solutions and most importantly doubts one might have about their own solution. Needless to say, if you have solved a problem without asking questions about it, then it wasn’t a difficult (by proxy important) problem to be solve in the first place. Reading code is hard. It’s sometimes like reading an essay in a foreign language. Your head hurts, your eyes are getting sore, and after 6 hours of staring at the screen you conclude you don’t understand anything anymore. One of my favourite quotes about computing from Temple OS creator, Terry Davis, reflects this perfectly (it’s too long to include here, so this is the link to the GoodReads quote page). It would almost seem like this time has been wasted, since you might have not produced a line of code. Nevertheless, this is all there is to programming.
After 3 years, it appears to me that my views about Computer Science aligns with those of Donald Knuth and Edsger Dijkstra the most. I had first stumbled on Donald Knuth’s blog long ago, while exploring Jamie Zawinski’s blog and looking for top figures in CS to study. On his blog Knuth writes: What I do takes long hours of studying and uninterruptible concentration. I try to learn certain areas of computer science exhaustively; then I try to digest that knowledge into a form that is accessible to people who don’t have time for such study. There it is. Computing takes time. There’s no silver bullet yet, and we as programmers have to take our time to think about problems in depth. There have been many comments on the peculiar style of teaching and way of being of Edsgar Dijkstra, but I believe he has made some really good points about this too. What describes my experience over the last 3 years well is his quote: The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility[…]. I think this the approach to take, because so often computers help us verify and point out that we indeed really don’t know anything, we are just pretending we do.