Slashdot Mirror


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."

14 of 663 comments (clear)

  1. Dumbing Down by bhunachchicken · · Score: 5, Informative

    "The board "highly recommended" switching to Pascal/Delphi because it is stable and was designed to teach programming and problem solving. 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"."

    Okay, seriously - in London, where I work, I don't think any of these guys would be able to get a job once they had graduated. Job listings I have looked at demand the following skills:

    Java (with Spring, Hibernate, Multi-threading, low latency, Swing, Junit)
    C#
    C/C++ (financial organizations still turn to C for high volume number crunching)
    Unix / Linux (are they going to drop this next???)
    SQL (Oracle, Sybase, SQL Server)
    Subversion, Clearcase, CVS

    None of this stuff can be picked up quickly, so the earlier you start, the better. And, no offense, but I rarely - if ever - see a job listing requesting Pascal/Delphi.

    Is this a case of dumbing down or are students just becoming lazy(-er)..?

  2. Re:Maybe I'm missing something by DangerFace · · Score: 5, Insightful

    Maybe because resumes get sent to HR and management, not experienced programmers?

  3. Re:Maybe I'm missing something by delinear · · Score: 5, Insightful

    I guess it depends if we expect the exams to be about learning the foundations, or actually learning practical skills. If it's the former, the language isn't so important as they'll need to do a fair amount of learning on the job, if it's the latter then the language could be valuable experience prior to their first role. From personal experience, I'd rather universities taught the foundations and didn't try to instill a sense of practical knowledge, because most of the university graduates I interview who do have practical knowledge tend to have been taught bad or very outdated practice, and it's much harder to break them out of those practices and teach the right way than it is to teach someone who knows the underlying principles the right way from scratch. Until universities can keep up with the fast pace of "web languages", they should stick to ensuring students unerstand the theory above all.

  4. Re:So what? by Matthew+Dunn · · Score: 5, Insightful

    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.

  5. Re:Maybe I'm missing something by MrZilla · · Score: 5, Informative

    Maybe because resumes get sent to HR and management, not experienced programmers?

    Exactly. When a manager is looking to hire a person, knowing that "we create our software using C", he expects to see "Knowledge of the C language" on the resume he gets.

    Trying to argue that you extensive knowledge of Pascal, JAVA and Assembly for the given platform means you will be able to work efficiently anyways, since you'll very quickly pick up the C knowledge needed, probably won't get you hired, even if it is true.

    Of course, there might be the special case where an intimate knowledge of setjump or the structure of the stack during a function call might be needed, but I think those cases are somewhat rare.

    --
    mov ax, 4c00h
    int 21h
  6. Re:C is key by Mr.+Freeman · · Score: 5, Insightful

    I'm not a CS major, I'm a mechanical engineering major and I just wanted to learn how to program as a hobby. I found it a lot easier to learn C than anything else I tried.

    I'm not going to pretend to know how to program very well but I thought that because C didn't do very much for you that it gave a better foundation for learning other languages. I did learn a bit of python, but it was easier after learning C because you know what's going on "behind the scenes" so to speak.

    For example, I had this weird ass problem in python where, for some reason, it was treating an integer value as a string. In C you have to specify variable types when you declare them. Because I knew about different variable types I knew that I had to look up how to explicitly declare variables as certain types in python. In C, you have to learn things like variable types, casting, pointers, etc. just to make a program that does anything at all. Languages like python are taught such that you completely gloss over these subjects and just assume that the computer magically knows what you're trying to tell it to do. When you run into a problem you can't fix it because you don't know what's actually going on.

    I suggest that introductory programming classes use C rather than other things. The counter argument I generally get is "We want the students to make a program that actually does something so that they can write some programs after only a couple lectures". This loosely translates to "we want to entertain the students rather than teach them."

    Although perhaps there's a middle ground. For non-CS majors, teach a language like python. Python allows for quick programs that, while not amazingly efficient, don't really need to be. For example, formatting a file with a shitload of data from a strain gauge. This might have to be done a total of, say, two times and thus efficiency really isn't an issue. Furthermore, non-CS majors (like mechanical and electrical engineers) don't have to understand the very basics of programming, they don't have much relevance to their field.
    For CS majors, start off with languages like C because their job is to understand the very very basics.

    --
    -1 disagree is not a modifier for a reason. -1 troll, flaimbait, redundant, overrated are NOT acceptable substitutes.
  7. Re:Maybe I'm missing something by Anonymous Coward · · Score: 5, Insightful

    The C programming language can be hard if you don't have a solid understanding of computers. It's easier to learn after you've got an understanding of other areas. Pointers, for example, make a lot more sense when you know they represent memory addresses. Personally I think that if you're teaching programming, you should stick with a more abstract language. That way, you can concentrate just on programming: Loops, conditional executions, etc.. Things like preprocessors, compilers and linkers, which you will need to know about to some extent to code in C, are probably best left to a separate courses.

  8. Re:Then why not C? by seanellis · · Score: 5, Insightful

    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.

  9. Well that would be part of the reason to learn it by Sycraft-fu · · Score: 5, Insightful

    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.

  10. Re:C is a terrible learning language by Fzz · · Score: 5, Insightful
    Unfortunately our experience teaching undergrad CS students Java first is that they build a mental model of what's going on that is completely abstracted away from the concept of memory. They then struggle to understand performance issues, and when we try to get them to learn C later, they struggle because they not only need to learn C's idiosyncracies but also unlearn their mental model, which is a lot harder.

    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.

  11. Re:Then why not C? by robvangelder · · Score: 5, Interesting

    I agree and disagree.

    My first programming language was Motorola MC68000 on the Amiga 500. I must admit, programming languages are easy once you know what the code compiles into.

    However, object oriented programming was very, very alien to me. There are some programming topics that can't be taught by learning assembly alone.

  12. Plus, Delphi is an awesome teaching environment... by Motard · · Score: 5, Interesting

    I taught a class on Delphi to a group of mostly non-programmers. It was very successful. Consider...

    First project:

    1) Open Delphi
    2) Press Run

    You've just written, compiled, linked and executed your first Delphi program. We'll get into the details later.

    Second Project:

    1) Open Delphi
    2) Drop a button on the default form
    3) Drop a slider on the default form
    4) Double-click the OnChange event on the slider
    5) Type Button1.Left := Slider1.position * 10;
    6) Run

    Now I can show visually show you what this does and talk about components, objects, properties, events, syntax, variables, assignment statements, build cycles, etc. - all in ways that you can see.

    Plus, unlike Java or C#, I can show you procedural (non-OO) console app or service programming. And we can go all the way down to assembly language if you want.

    For Linux see Free Pascal and Lazarus.

  13. Re:Maybe I'm missing something by Jurily · · Score: 5, Insightful

    Everyone who agrees with parent, please read this article NOW.

    You don't learn C for the syntax, you learn it for the side effects.

  14. Re:Maybe I'm missing something by Bing+Tsher+E · · Score: 5, Insightful

    "C is Hard. Students shouldn't have to learn anything that is hard. Think of how it might affect their GPA!"