• Steve Jones - SSC Editor (7/1/2015)


    ZZartin (7/1/2015)


    A math degree is not job training to be an accountant and a CS degree shouldn't be thought of as job training to be a programmer.

    We have accounting degrees.

    I agree with you, but that's not the point. The question is if you are looking to be a programmer, should you go to university.

    That's a reasonable question, but it might be instructive to pharse it a little differently: If you are looking to be a programmer, do you need education or do you need training?

    The answer isn't really simple, because it depends on what sort of programer do you want to be. It also depends what kind of education is available, and at what cost, and on what kind of training is available, and at what cost.

    If you want to be a programmer who does what he's told and nothing else and programs only in the languages that have grabbed a chunk of market for no other reason than outrageous hype (eg Basic, C++, APL, etc) or languages which survive mainly because there is an enormous legacy of code in them because they were in comon use before anything was understood about principles of programming language design (eg Cobol), then all you want is basic skill training. There are some universities which will provide such training and spend 4 years and a lot of your money for something that should take about 8 weeks and a lot less money. Such university courses could usefully be abolished to save their victims from wasting their money. So people whose idea of programming is this should not go to university for their training - but if they can afford it they should go to university and study something unrelated (music, French literature, Organic chemistry, Civil enginering, Literae Humaniores, or whatever they choose - it might even be CS or Maths) that they will enjoy studying because (provided they pick a decent University and course) they will enjoy it and it will improve their interpersonal skills.

    If you want to be a programmer who can pick up a new language (and a new programming paradigm) at the drop of a hat, and can design new languages without making all the classical mistakes and get them accepted (even if only with a very small market share) or to have serious influence on what the companies you work for decide to do (and maybe end up at VP or even chairman level) then you need a technical degree. It could be CS, or SwEng, or Maths, or Mathematical Logic but it must not be one of those courses that just trains you to write Java and a bit of C++ or C#.

    A CS course must cover concepts like type theory including Abstract Types, Existential Types, Universal Types, explicit and implicit type systems, and programming language semantics including Operational Semantics and Denotational Semantic, language paradigms (Procedural Languages, Logic Languages, Process-oriented Languages, Functional Languages, Relational Languages) and code structure concepts and their strengths and failings (Structured Programming, Object Oriented Programming, Spaghetti Programming [the world's most popular and common style :hehe:], cut logic, cut-free logic, parallel logic, Lazy Evaluation, Eager Evaluation, Exlicit Eagerness control, normalisation including normal forms and unnormalised tables, Codd's "laws"), and error management including detection, containment, recovery, and reporting). It must also inlude learning to write some decent code in a range of languages (something like C#, F#, Haskell, one of the MLs, Smalltalk, JavaScript, C++, Prolog, Parlog, CSP, CCS, SQL) but must not degenerate into coder training, and ideally also cover enough mathematical logic to handle the halting problem and the incompleteness theorem and computational complexity of algorithms, which of course will need a bit of recursive function theory and set theory and maybe enough topology/calculus to cover the underlying ideas of Scott-Strachey semantics. Of course (depending on the country) it may need additional courses in things like English writing.

    So I sort of agree with the editorial both because certain degrees are a waste of resource and shouldn't be taken and because some people go for the wrong degrees. But I also disagree with it in that I think a good degree can provide (a) a few years of fun and (b) a backround of knowledge and understanding that will improve a programmer's capability to do new and interesting things enormously.

    Tom