Academia in Real World Development
What I want to talk today is about something that he pointed out in the post:
What surprised me to no end was the total lack of any reference/debate about computer science research, papers etc. except perhaps pre/post conditions but only in the form of spec#, not in the form of CS research. Almost all the debates focused on tools and their direct techniques, not the computer science behind them. In general asking 'Why' wasn't answered with: "research has shown that..." but with replies which were pointing at techniques, tools and patterns, not the reasoning behind these tools, techniques and patterns.
I waited to respond to his post until I could formulate a coherent answer, and I think that this quote sums it up pretty well:
“Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter.”
The problem is that there is a big gap between the academia and real world development.
Finding a path in a graph? Design a compiler? Analyzing an image? Choosing a search algorithm? Selecting appropriate data structure for a task?
For each of those I would head for the academia, directly. Those are technical issues, and I want the academic proofs and experience there. I want the mathematical foundation for the solution.
Designing a maintainable system? Building a usable framework? Creating the domain model?
For those I am going to not going to go to the academia. I am going to go to the real world practitioner. They guys (and gals) that have been burned in the field and learned from their mistakes.
Building a highly scalable system? Designing for scalability?
For those I am going to head to the papers by Amazon, EBay, etc. The people who are actually dealing with this complexity and can share how things break down at a high enough scale.
You can take a look at Java's API issues if you want to see what happens if you listen too closely to the academia. Hell, just take a look at SQL Server 2005's paging feature, to see just how complex an academic solution can make life.
For most real world situations, I want real world experience, because 90% of software development is not science, it is an art, and I am not interested in discussion about the chemical composition of the pigments when I examine a masterpiece.