36 comments

[ 3.7 ms ] story [ 93.7 ms ] thread
While I'm sorry to see C go, I can't see any possible reason why a high-school level computing course should allow eight different languages.
I believe it's not that each institution offers 8 languages, but that the exam board offers support and syllabi for 8 languages that the schools can choose from. They're chopping the languages that the fewest schools are choosing to teach.
I'm not from the UK, but I think this is silly. Consider their goal:

"The Computing A Level is not intended as a programming course but a course that covers the fundamentals of computing of which programming (and problem solving) form a key component."

I'd say that C is a key component of computer science; it is the closest thing to the hardware withholding assembly and machine code.

I think schools should teach C, Lisp, and Python. Paul Graham tells it well in his "The Roots of Lisp" essay (http://www.paulgraham.com/rootsoflisp.html), where he asserts that C and Lisp are the two clean programming constructs in which languages of the future will be based off (and this has held true in my opinion). Python falls in the middle of C and Lisp and thus is a useful comparison (and everyday-living) language.

In addition to C, some Lisp, and Python, I'd say that a strictly typed language would also be good. Some ML derivative would probably be good. At that point, you've at least touched the whole spectrum. (Well, outside of assembly, but as much as I love it, its usefulness is dropping every day...)
"Touched the whole spectrum"? Hardly. What about logic programming languages (eg. Prolog), stack-based programming (eg. Forth), concurrent programming (eg. Erlang)? And that's leaving out more esoteric ideas like FRP (Functional Reactive Programming), the funky type systems needed for efficient purely functional languages, and the less-well-known OO constructs (multimethods, metaobject protocols, etc).

No CS curriculum can ever both touch the whole spectrum of what there is to offer and be reasonable to mandate for all students. Inevitably, some students will want the minimum necessary for practical work and others will want to explore as many avenues as possible. The importance is in striking a good balance: exposing students to enough different paradigms to produce good computer scientists without requiring so much that they never get enough real experience with specific languages to be good programmers.

and the less-well-known OO constructs (multimethods, metaobject protocols, etc)

Using Common Lisp provides the option to do that, but there's still plenty from the realm of programming languages that would be left out. It might me a mistake to try to do too much at the high-school level though; C, Lisp and ML would allow access to a very broad range of programming concepts - far more than any three of the approved languages.

outside of assembly, but as much as I love it, its usefulness is dropping every day...

I don't think that it's an accident so many good programmers got started in BASIC then graduated to 6502 assembly. There's something powerful in that combination. We can go it one better with Python, followed by assembly on an emulated simple processor. Follow that with writing a simple compiler targeting the same processor. (In Python, perhaps.)

C is nice, but I've seen too many C programmers who really just think of the compiler as magic and have no idea what is happening there. To produce top-notch CS people, you should get as close to the machine as assembly.

My tuppenceworth Some high level language VB, C# or Java then the first half of Code by Charles Petzold then The elements of computing systems by Schocken and Nisan followed by the rest of Petzold's book
After actually taking the course (okay, a few years ago now). I would say Python was the most useful in that list and then Java.

There isn't enough time to learn C. We spent more time learning about cable types than actually programming.

"Python falls in the middle of C and Lisp and thus is a useful comparison (and everyday-living) language."

Its a shame Lua isn't more widely used / known that would be an even better fit. Because its far more of a middle ground between those 2 than Python in my opinion, it gives you very little that you can do a lot with - for instance compare the singular Lua table with the wide choice of data structures Python offers.

Theres a great paper by Robert Ierusalimschy that goes through the multi-paradigm / extensibility that Lua offers:

http://www.inf.puc-rio.br/~roberto/docs/ry09-03.pdf

(comment deleted)
I understand that the reason for AQA dropping C#, PHP and C from the AS Computing examination is one of demand

The institutions choosing the languages to teach to students are crazy if they think choosing Delphi, Python, or VB will provide them with better opportunities in the future than C, C# or PHP. And if practicality isn't concern #1, then why not pick a language that's really well-suited to a CS education, like LISP/Scheme?

(comment deleted)
This is just bizarre: "Teachers planning to use Java are warned that many universities are considering dropping it from their first year computer science programmes, "as has happened in the US"."

There certainly are some places where Java is on the outs, but this makes it sound like US universities have entirely moved away from Java, which is completely untrue.

True, most of my courses are in Java although some teachers let us do our group projects in C++ if we wanted to.
My alma mater just moved from C++ to Java in the last couple years. Not that I think it's a good decision, but yeah, that's hardly the case.
Carnegie Mellon Universities new undergrad curriculum has no mandatory Java courses. The students will be able to learn Java, but will not be forced to.

In case you were curious, the intro class will be python, and then later classes will be ML and a new language that is a typesafe C (currently in development at CMU). After that, they'll learn C.

Of course, CMU is just one school, but it definitely represents a departure (and the lack of any mandatory OO-focused languages (yeah yeah, Python HAS classes, but you don't HAVE to use them) is weird).

Stanford still uses Java for the intro classes (as well as a number of grad AI classes - info retrieval, NLP, general game playing, and probably others I'm not thinking of). I don't see it getting replaced here for a while...too much starter code that no one wants to rewrite.
Once more, the legacy of marketing!
They warn about Java, yet their two most popular languages are Delphi and Visual Basic? Are those taught in universities at all!?
Pascal/Delphi? Visual Basic 6? Those are still in the wild? As TEACHING languages? That is the definition of "please, think of the children".
Pascal was invented as a language with which to teach procedural programming. Using it for "real work" came later.
Pascal was one of the first languages I learned, only after learning Pascal did I really understand a lot of fundamental concepts. That said, I never used it to make anything half-useful. I used C, C++, PHP, Java.
"Most centres offer Pascal/Delphi and Visual Basic as the language of choice for their students. This selection is based on the experience of the teacher in that centre and their own comfort with that language."

I would argue that any teacher not comfortable enough with C to teach it at the high school level should not be teaching computer science fundamentals.

I would agree that this should be kept to university only (where hopefully it will be taught correctly). Schools need to concentrate on the basics (reading, writing, arithmetic, mathematics and traditional sciences). I'm from Scotland so we don't do A-levels (our equivalent is standards, highers and advanced highers) and although we did get C/C++ it was never covered very well. Its such a critical component of computer science that it has to be done right.
Although I don't actually take Comp-Sci myself, a few of my friends have in the past and still do; at all colleges near me all default to VB with absolutely no consideration to other languages to the point of running windows on brand new iMacs for better support.

VB is a horrible language to learn, but the UK system of learning computing is the worst I've ever seen anywhere; I took it as a GCSE and at the same time as getting through a fair amount of Google Code Jam, Getting a job building web apps I managed to fail the web design module - was my site valid? yes, did it follow the spec? yes. I failed because I didn't submit my write-up as a .doc; instead I used a valid open .rtf format.

I did a computing A level in the UK , and I had no idea languages other than pascal and visual basic were options. Good to see python on the list.

The computing a level is a massive mess, though. The extent of programming taught is practically an afterthought and the curriculum is polluted by massively outdated stuff - i had to learn a textbook definition of baud rate and how to do binary subtraction on paper. The whole thing is in need of an overhaul.

Is this a joke? VB may be "easy" but it's terribly verbose. VB 6 was end-of-lifed two years ago. Pascal was a good idea 30 years ago. And Delphi's designer was hired by MS to build a better language 14 years ago, which became C#.

Now, let's look at the languages with momentum. MS has bet the farm on .NET and C# is the primary vehicle. The Mono project is going strong. The most important web programming language (if brain damaged) is PHP. And the language underlying ALL OF COMPUTING AND THE INTERNET is C and C++.

Um.

The most important web programming language (if brain damaged) is PHP.

If we went with "the most important, even if brain damaged" then VB would've been the language of choice years ago. I'd rather go with, "whatever will produce the most savvy programmers." In this light, there are good reasons to pick Scheme. Before that, I would also opt for a simplified assembly language, with a simple compiler targeting that language. For the first intro course, Python isn't a bad choice. Look how many programmers in their 40's got started in BASIC, then graduated to 6502 Assembly.

When I was at school (in the UK) we learnt LOGO, BBC Basic, then Borland Turbo Pascal.
Comp-Sci A-Levels? I have no idea what this means, is this like first year of university?
A-Levels are taken by UK Students before University (typically aged 16-18), I guess the last 2 years of US High School.
(comment deleted)