To me, Computer Science died with the out-of-hand dismissal of proper NFA theory as applied to grep by the implementers of Perl. While the original code that wound up in Perl’s grep came from an open-source implementation of a backtracking algorithm (which exhibits poor performance under some conditions), it’s clear there are a number of people who neither understand nor respect the underlying theory.
Computer Science to me is the injection of some mathematical formalism into the art of writing software. And I suspect part of the reason why that formalism died is because there is so much money in the field now: instead of teaching formal theory we teach Java programming. Instead of surveying various programming languages and teaching about Touring Machines students want to understand the business of startups or how to engage in “social good” the second semester they’re on campus. And the money that can be made represents an economic demand which attracts not only the brightest and best, but also the average and mediocre, ground through the mill and spat out the other end, feeding people into jobs in the same way that early 20th century colleges trained mechanics to work on the farm machinery and mechanical monsters of old.
Oddly enough, it looks like I’ve been given cart blanche to start looking to hire people to work on a mobile division which I would lead–which means I’m going to be contributing to the problem. I’ve even thought about seeing if I can talk folks into opening a small office within driving distance of USC, so I can take advantage of the iPhone development classes there to draw off talent.
Which means I intend to be part of the problem.
But the lack of formalism bothers me. It bothers me there is a lack of formalism in the art of creating a user interface framework: as far as I know no-one working on new frameworks (such as Android) have done any formal survey of other user interface frameworks. And at best, within user interface design, the only “formalism” is a grudging respect for the MVC design model–but without any good idea what MVC really is. And while there have been some grudging attempts to achieve some degree of formalism in terms of development and design models, as well as in software processes and management, most of these are “flavor of the week” than actually a formal representation of best practices.
It’s a shame, really, because some degree of formalism here would allow a more unified approach to user interface framework design, which would simplify the process of creating cross-framework and cross-platform software.