Recently I was talking with one of my colleagues about computer science and the skills of those who have just taken their degree in Italy. We both agreed that the kind of knowledge you get attending the college is indeed more theoretical than practical ( and trust me, “informatic engineering” courses in Italy colleges are way much more theoretical than CS in the United States ) and most of the times this results in a lot of people with their mouths full of “big words” they don’t really understand.
I do not think this is just something related to our country, for instance I often read on web sites such as Stack Overflow answers like “hey dude, why implementing it yourself? Just use a database!“ or “there’s the whole STL library that can do this for you, why you should implement a RB-tree by yourself?” and so on, I’m sure you know what I’m talking about.
Of course studying the theory behind such things, data structures, algorithms and their complexities, etc is fundamental for a good engineer, but what about practice? What about reinventing the wheel, not because “you can do better than STL guys” but just because “I want to really understand why they did what they did and the way they did it.” ? And do not tell me that during your CS courses you’ve implemented everything, tried everything and came accross every problem you could find while developing because this is bullshit.
How can you really understand why a hash table needs to be rehashed if you never implemented one and tried to optimize it because you need it in a real world application?
How can you really understand SQL indexes (and use them properly!) if you don’t know what data cardinality is and how it affects binary trees ?
How can you really understand OS scheduling if you never tried to implement a minimal kernel yourself and saw the problematics behind it?
How can you really understand the difference between reserved and committed memory if you never implemented even the simplest memory allocator just for the fuck of it?
I firmly think there are two kinds of knowledge, the one you have because someone explained to you something and you understood it, and the one you get because you bang yourself against the same problems someone had decades ago and you find out the best solution for the problem, which of course it’s the same they found at their time … and trust me, this one is invaluable.
So nextime someone will ask you why you keep reinventing the wheel, you can give him two good reasons for it:
- Because I really want to understand how it works.
- Because no one will do better until someone will try to.
PS: And for fuck sake, people from Stack Overflow, stop answering red if I’m asking for blue, just say you do not know (or don’t say anything at all, this would be better), no one is gonna cry for that!