Besides some vague nostalgia, I am not really missing the days where I was writing code in text mode on a 640×350 14″ EGA screen, with no on-line help, no contextual documentation, no decent debugger. Being there at the time was cool, but it would be silly to not take advantage of all the modern tools we got to do our craft. One of these tools is code auto-completion, better known to Visual Studio users as “IntelliSense”.
“IntelliSense is considered by some to be the most important programming innovation since caffeine.”
The above quote is from a 1995 talk by Chales Petzold: “Does Visual Studio Rot the Mind?“. He addresses several points, but the one that caught my attention is the one about IntelliSense. His observation is that IntelliSense forces you into a “bottom-up” approach when writing code. You cannot conveniently start using a variable that has not been defined yet, and cannot call a function that has not been included (or has no prototype) without IntelliSense getting in the way. And that’s not only that it won’t help you, it will eventually get counter-productive by suggesting unrelated stuff that happen to have a similar naming.
After being taught at university that top-down was the right way of designing a program, after experiencing in the industry that bottom-up was the way of actually build stuff, I came to the conclusion that I usually should start somewhere in the middle, at an intermediate level where I can lay down ideas to prototype and research the right solution by using building blocks I would implement later. Auto-completion pushes me to go all the way down until I reach the turtles and start writing my code there. Of course, chances are then that I will build stuff that might not be useful, or might have been smaller, but I will still be tempted to use it anyway “because it’s there”, yada yada yada.
But I think something worse is happening because of it: systematic OOP.
So, calling out on OOP is the equivalent of Godwin’s law for programming arguments. I am not going to address all that has already being said on this site about OOP, about DOD, about the fact they are not in conflict, about what Alan Kay had in mind, and about the fact that C++ is <select * from adjective in merriam_webster>. I am just going to complain about using objects as containers to sort through functions.
I think most people agree with Herb Sutter when he says that monolithic classes are bad, especially because he explains it so well: