Friday, January 25, 2008

The unemployable programmer

The blog of the IEEE Spectrum has a posting titled “Are Future US Programmers Being Taught to be Unemployable”.  This was a follow up on an article run in the Journal of Defense Software Engineering, on the state of computer science engineering. Now even though, in all times, all places, all fields, there are those who decry the state of education – how the standards of today are a shadow of those of yore, about how we’re cheapening, commercializing, debasing, dumbing-down, (put-your-adverbial-clause-of-choice-here) the education system – there is some merit to the points raised here. The authors talk about the necessity of how formal logic, formal systems, numerical analysis, algorithmic analysis form the basic toolkit of a CS engineer, and how modern teaching approaches fail to adequately impart these skills. Much of their ire is directed against Java as an instructional programming language. To that, I would add MATLAB (as dearly as I love it). To quote the blog, which in turn is a quote from another article (talk about recursive quoting):

 

Dewar says in the interview that, " 'A lot of it is, ‘Let’s make this [computer science and programming] all more fun.’ You know, ‘Math is not fun, let’s reduce math requirements. Algorithms are not fun, let’s get rid of them. Ewww – graphic libraries, they’re fun. Let’s have people mess with libraries. And [forget] all this business about ‘command line’ – we’ll have people use nice visual interfaces where they can point and click and do fancy graphic stuff and have fun.' "

 

While the original article is directed particularly towards undergrad schooling, this is something I would subscribe to at a larger level. I find the CS courses I take extremely light and fluffy, comparatively easy – intellectually, with little or no emphasis on theory – and mostly just “application level” programming – i.e. basically a propagation of “go use some libraries to do some fancy stuff, the math or algorithms of which you don’t need to really understand” philosophy. To get some really heavy duty lifting these days, I have to look outside the department – the first recourse is to the ECE or IND_ENG depts – and if I want to step it up some more, then the MATH department (which gets way too hard for a soft, effete, CS guy like me). For e.g. I took a machine learning course offered by the CSE dept – which was nothing more than a perusal of the “standard algorithms” available and some applications thereof. Now, I’m auditing (that’s all that I dare do) on a Statistical Learning course offered by the STATS dept, which is at a whole other level of math and analysis – hypothesis testing, estimation theory, linear operator theory, functional operator theory, etc.  And this is just an introductory/overview course – it promises to get more rigorous next quarter!

 

And I think, this is not an attribute of CS education in the US alone – but of CS education in general. The other and more established engineering disciplines IMO require a larger amount of rigour and  drilling, to be good at. One reason could be because they deal with the real, physical world, and have to develop a deep appreciation of the laws of physics that govern what they do. Unlike CS – a virtual world, where anything goes (as long as it conforms to basic logic).

 

On an aside, the article states “Seeing a complete Lisp interpreter written in Lisp is an intellectual revelation that all computer scientists should experience.” This, I agree with whole heartedly. Programming the Lisp meta-circular interpreter in CSE755 was the most joy I ever had with the OSU-CSE core curriculum (minus CSE725 – Theory of Computation).

No comments:

Calendar