Exam Board Deletes C and PHP From CompSci A-Levels
VitaminB52 writes "A-level computer science students will no longer be taught C, C#, or PHP from next year following a decision to withdraw the languages by the largest UK exam board. Schools teaching the Assessment and Qualifications Alliance's (AQA) COMP1 syllabus have been asked to use one of its other approved languages — Java, Pascal/Delphi, Python 2.6, Python 3.1, Visual Basic 6, and VB.Net 2008. Pascal/Delphi is 'highly recommended' by the exam board because it is stable and was designed to teach programming and problem-solving."
But, so what?
If you understand programming, picking up any given language is straightforward.
If you don't understand programming, it doesn't really matter what languages you know.
It's official. Most of you are morons.
What a shame. C is an important foundation.
what is nailchipper?
to teach them hypothetical skills in watered down, obscure platforms so they can curse you for the rest of their lives when they start working in the industry.
i was taught fortran and pascal. i dont remember shit, and i dont think i gained much from them.
programming can be taught with any language. problem solving can be taught with any language. it is better to teach these using a language they WILL use when they actually get into industry, than with stuff they may rarely come up against.
uk was going down the drain for some years. i see this as another absurd jacobinism.
Read radical news here
Why are they accepting Visual Basic 6, but not C++, Ruby, or even LISP?
I'm not particularly fond of Java, but atleast hey have ONE alternative that is widely used in in the industry.
VB6 and delphi are dying languages as far as employment opportunities are concerned and Python isn't nearly as popular as PHP. I think VB.NET could get you a low-paying entry-level job though.
The common denominator of the allowed languages is that they do not allow low-level programming. C may not be the most common language in the industry, but it gives you a great foundation in understanding what actually happens inside all those object, libraries and frameworks.
This move is endumbening students ;)
Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
What's the big deal? One programming language is like the other, at least within the same paradigm. If you can program in Pascal, you can program in C. If you can't you learned a syntax and not "how to program". Basically, when I was a computer science student, we got one language taught for the concepts and the rest was just "swim or sink". That's the way it should be. I really have a problem with programmers who have problems switching from their preferred-language to another because it's unfamiliar. Well, no, it's not... It's the damned same thing with diverging syntax.
Basically, the premise of the Exam Board is quite right: the goal of programming is to have problem solving skills. Whatever language conveys that is completely uninteresting to me.
Oh, and just for the record: programming is just a small part of the computer science curriculum... or at least it should be.
There's a lot more that goes along with a language Sure, if you know how to code OO, use iterators, understand switch statements and other language-related elements you can change languages and write an algorithm or two But Do I know best practice for everything? If I'm a c# programmer. Do I know important differences between Ruby 1.7, 1.8. 1.9? Do I know what the best inversion of control framework is? Or what the best ORM to use is? Am I familiar with how to use it? If I'm a Ruby developer am I aware that in a .NET language if I add two strings together in c# "Hello" + "World" It constructs a new immutable string. But if I do String.Format("{0}{1}","Hello","World" it is much faster and uses less memory?
Will I know all the proper coding conventions, casing, tabbing, indenting styles.
There are hundreds if not thousands of useful pieces of language, compiler, and environment specific knowledge which is useful and can be pretty obvious if you do not have it.
I've been playing with c#, ruby, gcc. For around ten years commercially and I still need to invest significant re-education if I swap from say ruby to gcc or ruby to c# after a year..
There is a reason that people tend to stick with one or two primary languages.
The point of C as a teaching language is that hardware does not bound arrays, it does not protect memory, all data is just bits and can be arbitrarily converted to anything (even if it makes no sense to do so).
Basically, if you grok C then you are an effective programmer but if you can only program in a "safe" language then you likely don't understand how anything works and it all seems 'like magic' and there's already enough pseudo-science in the world.
(Of course, whether you should choose to keep using C after you understand the concepts is a different question)
Is this so surprising? There was a time when a University degree was supposed to be about learning concepts and theory, not specific skills. Skills were to be got as an apprentice at a company, companies used to train their new recruits. It seems that employers now just expect a University graduate to emerge with all the skills they need in their particular field and have to do no training. I can't help feeling extremely cynical when I hear companies complain about the quality of graduates when they've rescinded on their part of the bargain pretty completely.
I think the common interpretation of Computer Science is extremely misleading. It's not about programming stuff, that's more of an IT application of computers. Instead, it's about understanding the science behind computers, for example to understand the mathematical principals of computing, operational effeciency and move it on as a tool for scientific endevour.
To this end, the choice of programming language really doesn't matter - it's a tool that the subject uses either as a proof of concept or a learning point. C is fairly good for this as it exposes a lot of the inner workings of a computer, whilst being high enough level to be more or less consistent across platforms at a university level. However, that doesn't mean that knocking up a quick proof of concept in python or perl is less valid - or even visual basic if it helps understand the science behind the problem.
In other words, I see no real worry here. If they stopped putting mathematics in a CS course or made it in to a programming degree I'd be concerned. If it's about using various tools for the job then I'm all for it. Hell, I wrote a pascal compiler in pascal as part of my degree - it wasn't about the programming language, it was about understanding the fundamentals of compiler design and implementation.
Now there's one hoopy frood who really knows where his towel is!
Why not assembly language?
Build up from the very bottom. ARM assembly (disclaimer - I work for ARM) is ubiquitous and pretty close to an idealised assembler. Dev kits are available for cheap.
Then you build up through structured assembly, C-like languages (PASCAL?), and so on. Otherwise, it's like trying to build houses without understanding what bricks are.
That's the way I did it, except being as how I'm old and crusty the assembly language I started with was SC/MP, and we also had a load of BASIC thrown into the mix.
Sean Ellis
Follow OfQuack's antics on Twitter.
Part of being able to write good software is actually understanding how computers think. All these things like objects, and types and so on are all constructs for making things easier for people. They are how we think, not how the processor thinks. The problem is, if all you ever learn on is languages that hold your hand, you end up not being as good a programmer. I see types like that all the time come out of the university where I work, as Java is about the only thing they like to teach. They have little to no understanding of how a computer actually works and cannot deal with lower level languages.
Now I certainly wouldn't say C should be the only language you learn on, but it should be one of them. Learn how a computer works, and learn the power, and problems, that can be had from getting closer to the bare metal. Also then learn about higher level languages, and the advantages and disadvantages they provide. Basically, try and give students the understanding of how programming languages differ, and allow them to be able to appreciate that there are tradeoffs using different languages.
Having a program that gets too stuck in high level languages risks producing the myopic zealot type programmers that can only write in one language and write very bad code because they are used to having the language clean up after them.
Also, universities should endeavor to teach on what companies want. While a university degree is a theoretical degree, not practical training, that doesn't mean they have the right to be arrogant and refuse to try and offer theoretical training on real world tools. At the engineering department I work for, we try to do that. The software we use in classes is the software you'd use to do that sort of thing in the industry, when practical. That way you learn not only the electronics theory being taught, but you get practical experience with a tool.
Same shit for programming. Teach students on languages that companies want. Guess what? C++ (and even C) and C# and such are those languages. Pascal is not. I don't care if some old fossil of a professor loves Pascal. Suck it up, learn a new language. Your job is to keep up on shit. Any educator that themselves refuses to continually learn should be fired.
Teach students on a good cross section of languages that are currently useful. Show them the advantages and disadvantages of different kinds of languages and programming, give them a good theoretical foundation in how this all works. While you do that, do it using tools that they will actually be asked to use when they go and get a job.
The point of C as a teaching language is that hardware does not bound arrays, it does not protect memory, all data is just bits and can be arbitrarily converted to anything (even if it makes no sense to do so).
Basically, if you grok C then you are an effective programmer but if you can only program in a "safe" language then you likely don't understand how anything works and it all seems 'like magic' and there's already enough pseudo-science in the world.
There is a fallacy in there. A safe language just tells you when you are doing crap, so that you learn not to do it or so that it doesn't shoot you in the foot. It doesn't make your errors go away, it just makes them explicit.
If you are good at programming in Pascal, it is not a big problem to learn C.
What is more, people who learn with C often develop a control-freak attitude that hinders them in the adoption of such sensible things as e.g. garbage collectors.
We're actually about to switch back to teaching C in the first year (via long low-level projects for which it is well suited), as we've concluded the Java-first approach we've been using for at least ten years isn't working terribly well. It's nearly impossible for students to understand the advantages of object orientation when they haven't written complex code and haven't made the mistakes that lead to spaghetti code. So they use object orientation by rote-learning, which means they don't really understand when a lighter weight approach or a different language is appropriate and when it isn't. We'll still teach them Java and a range of other languages, but only when they've learned the reasons those languages help.
Having said that, I don't really care what they teach at A-level. A-level CS is pretty nearly worthless - any reasonable university CS department will prefer you didn't do it, and that you'd done more maths or science instead.
I'd say you are 99% right, but not quite. Pascal has a few abstractions that isolate you from the machine, like the set type for instance.
Yes, it has both high a low level abstractions. I meant that you can go as low level as in C. You indeed don't always have to though.
Also, AFAIK, standard Pascal does not have function pointers,
It does have them: http://www.moorecad.com/standardpascal/iso7185.html#6.6.3.4%20Procedural%20parameters
although I believe many versions, including Delphi, have implemented their non-standard extensions for this.
Delphi did introduce a lot of non-standard extensions to Pascal (and in fact, the way it implemented support for function pointers is different form the ANSI ISO way). Nowadays, Delphi-style Pascal is however one of the most popular variants around and sort of has evolved into a de facto standard.
I learned Pascal in the early 1980s, when the computer I had was an IBM PC with a 4.77 MHz CPU. I did a lot of programming in Turbo Pascal version 3, but I ended learning C because there were some operations I couldn't do with Turbo Pascal. After I learned C, I never felt the need to use Pascal anymore.
I also learned Pascal first, though it was in the 90's. I now also know both Pascal and C, but still prefer Pascal. Keep in mind that Delphi-style/Object Pascal is more than C. It's more like C with the addition of Java-style OOP.
Donate free food here
You want to frustrate our new students this early? :)
I hold that doctor and anatomy comparison and raise a language comparison. You want to teach kids a new language by telling them the grammar rules while not giving them any encouragement by giving them a way to communicate in it.
You start teaching programming by rote learning. Seriously. Yes, yes, it's all wrong and it teaches you so many horribly wrong ideas, but that's where you start. There is a reason why many schools in the past taught LOGO as a first language to school kids. Because that gives you immediate feedback while requiring very little knowledge of the language itself.
You have to understand, they know nothing at all about programming. That's already where many teachers fail to teach properly, especially if they are good programmers. The idea of procedural programming and that a program is executed step by step is already alien to them, something that probably you and me grasped immediately. VB, as condemnable as it may be, at least teaches this concept, and branches, loops and so on too. All that is HORRIBLY hard to grasp for many kids starting into programming. Especially if they don't have the mindset.
I know it might sound odd, but I noticed that there are people who instantly catch on, who immediately understand the way a procedural language works, and people who have an incredibly hard time wrapping their mind around it. We don't just all start on equal ground here. And for you and me, teaching ASM is probably the sensible way to start, simply because we do understand those concepts for some reason. Call it talent, call it whatever you like, but it's anything but the norm.
So starting with some high level language (JAVA would be great, IMO, simply because it prepares you for the C syntax. Yes, yes, a good programmer knows how to program, not his rotes, but these ARE NOT good programmers, they're beginners!) is quite sensible. Let them get used to the idea of procedural programming before you toss overhead at them.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
The exclusion of PHP is debatible (is not really different from a gazillon other interpreted languages out there), but the exclusion of C, is, IMHO, a gross mistake. C teaches basic low-level concepts that other languages, outside assembler perhaps, dont even touch - memory management being the principal. Nowadays every developer accustomed to Java seems to think garbage collection is the end of all memory handling issues...
Just for your future reference, while technically you can call what you did 'programming'.
By any acceptable definition of the word what you did was show how to use the Delphi gui, not teach programming, and that is a BIG distinction. You haven't taught anything but how to point and click.
Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager