Sean O'Donnells Weblog
James Roberts seems to think so.
There are a lot of developers who will have a really hard time letting go of the idea that all inbound CS people should take a compiler class. Ask yourself though - how many people are doing that kind of work, and how many are creating what amounts to glorified reporting interfaces?"
I have found that my compiler design class is one of the few I have used the material from again and again and again over the course of my career. This class introduced a wide range of tools into my toolbox. Regular expressions, a better understanding of parsing , the ability to create special purpose mini languages , nothing has made me a better developer than my understanding of compilers.
James goes on to say
Think about Unit tests, for instance. A structural engineer building a bridge doesn't need tests - what he needs is a blueprint and the materials."
And now I think I have a better understanding of where James is coming from, although I still fundamentally disagree with him. I am a big subscriber to the concept of Code as Design. James seems to believe that development is like the construction phase of an engineering project , hence he is asking where our blueprints are. To me the construction phase is running my buildscript to assemble the finished program and then shipping it. This is not a big problem in software development.
I believe that coding is the design phase, the finished design is the source code , and this is then used to manufacture the product. As our manufacturing phase is so cheap , we test our design by actually building and using it (hitting compile & run). Cost alone rules out this possibility when building suspension bridges. The idea of creating 100 bridges and then demolishing them because you decide to redesign some of the architecture until you get it right is ridiculous. We are very lucky to have such cheap and flexible construction material in our profession. Architects and engineers try to approximate such a development method by using scale models, wind tunnels etc. Then when they have tested on cheap scale models they refine their design and repeat. The cheap cost of building software allows us to do this with the real thing. Anyway , read Jack W. Reeves articles for more on this perspective.
The funny thing is, I agree with Jame's fundamental assertion, that developing software is not Engineering, I would say it is much more of a craft.