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

663 comments

  1. Maybe I'm missing something by Tim+C · · Score: 4, Insightful

    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.

    1. Re:Maybe I'm missing something by Anonymous Coward · · Score: 3, Insightful

      If picking up any given language is straightforward, then why does everyone list the languages they know on their resume?

    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:Maybe I'm missing something by Trepidity · · Score: 2, Insightful

      Partly because it's straightforward in principle, but takes some time in practice. There are at least two levels of language knowledge: having some idea of how to write things in the language, and knowing the languages's quirks, best practices, pitfalls, and, generally, pragmatics. The first is the stuff that anyone with a strong CS background should be able to pick up. But the latter requires just a lot of experience. If you take a complex language like C++, how does one learn which of the (many) features interact subtly with each other, and where the (many) pitfalls lie? More or less, through experience. If someone on your C++ team is a smart person with a strong CS background but has programmed C++ for less than 6 months, you should suspect they haven't yet picked up all the pragmatics, no matter how smart they are. That's just how things work.

    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:Maybe I'm missing something by AliasMarlowe · · Score: 2, Insightful

      If you understand programming, picking up any given language is straightforward.

      Indeed. But it probably helps if you start by learning a fairly well-structured language. Preferably a couple of quite different languages. My first two were Fortran-66 and APL/360, which are almost as different as you can get (and which also reveal my age). The next few languages were PL/I, Focal, C, Basic, and LaTeX, and these have been followed by numerous others.

      Adding Pascal/Delphi to the list is a good idea, but dropping C and PHP while retaining VB and VB.net is beyond any sane comprehension.

      --
      Those who can make you believe absurdities can make you commit atrocities. - Voltaire
    7. Re:Maybe I'm missing something by teh+kurisu · · Score: 4, Insightful

      I find that knowing the language syntax is only half the battle. Learning how to use the libraries properly (standard or not) takes much, much longer.

      My education in programming has largely been in Java since late high school and all the way through university, with deviations along the way into VB, C, PHP and PROLOG. Recently at work, I've had to pick up C++ in order to do some Symbian development.

      Picking up what I needed to know of C++ was the easiest part. Learning how to use the Symbian C++ libraries, on the other hand, has been a monumental task, and one that has largely been ditched in favour of Qt for Symbian, which is much, much easier to get to grips with.

      In theory I can now put 'knows C++' on my CV. I don't really. I've hardly used the standard libraries. I'm pretty confident I could write a Qt-based C++ app without too much trouble, either on the desktop or on Symbian. But I wouldn't have the first clue where to start if I was asked to write a Windows app, without a decent bit of learning and training. And I would avoid native Symbian like the plague.

      I'm no expert in CV writing (I'm still in my first proper job after leaving uni), but I think that listing the things that you have done, and then mentioning the languages and environments that they were done in, is better than simply listing the languages that you know.

    8. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      And if you can't program C by the end of your studies (what's that supposed to mean, end of studies?), it's your own damn fault. Nobody will hire anybody on the expectation that they'll quickly learn what they need to know. If you want a job which requires C programming, you better know C, and not just the reserved words: idioms and APIs too. None of that is relevant when you're introduced to programming. The concepts transcend languages. What you do with the gained understanding is your own responsibility.

    9. Re:Maybe I'm missing something by AlecC · · Score: 2, Insightful

      I would agree with this based on my experience learning Java. With many years C++ experience, learning the Java syntax was half a day with a book, and being able to write reasonably good code wehich did what I expected was about two days. But, reckoning by hindsight, it was about eighteen months before I was a good Java programmer with all the language idioms at my fingertips and a good knowledge of all the pitfalls. And that is with a clean, well designed, language. With a hybrid, lower level, and sprawling language like C++, I reckon that it will take even longer to reach that level. I doubt that more than a few percent of C++ programmers are really masters of all aspects of the language. I have to say that, while I call myself a good C++ programmer, I approach writing templates, other than the most trivial, with fear and trembling. And templated overloaded operators need even more care.

      Which, to return to the subject, means that if you are teaching "vocationally", the sooner you get students started on their target language the better. Whereas if you are teaching theoretically, you want the cleanest and simplest example of each class of language. Java and Python fill both needs, Pascal/Delphi is clean but has little industry use. VB is the odd one out: widely used, but not particularly clean and simple.

      --
      Consciousness is an illusion caused by an excess of self consciousness.
    10. Re:Maybe I'm missing something by Verunks · · Score: 1

      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.

      this is true but every language has its way to do stuff and experience is important, for example most of these languages don't allow the use of pointers so they probably won't even know about them

      also it's good that they choose python but why pascal or visual basic? it's not like those students will use them when they get out in the real world, imho it's better to stick with a useful set of languages instead of switching later "since they are all the same"

    11. Re:Maybe I'm missing something by mangu · · Score: 1, Insightful

      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.

      Only it's not true. A programmer who doesn't know C is either very lazy or, given the relative abundance of each language suffers from some weird form of autism.

      There's no denying it, C is the basis of everything in computing. Anyone who has studied or done any professional work in computing has had contact with the C language at some time. A programmer who never had at least the curiosity to learn C, if only to understand some function he downloaded from the web, will never, ever, be a competent programmer.

    12. Re:Maybe I'm missing something by Anonymous Coward · · Score: 3, Insightful

      Right. I've been a professional developer for 15 years now (as in, it's paid all my bills for all that time). Last time I touched C was back in school.

      There's a freakin' forest of languages out there, and C is not some holy grail that sucks all into its gravity well.

      If I should ever actually need it, I'll pick it up. Just as with any other language I've learned through the years.

    13. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      ell, there are those who know the language, and those who knows how the language works. I've disassembled c, c++, java, to see what construct did what. static java inner classes: how do they get their values? nested classes, why passed parameters have to be final? I know, because I've seem how they're used. This is what I mean what I say that I know Java. Everything less is I use java to some proficiency.

    14. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      Ouch! Accidentally moderated this Redundant when I was going for Insightful. Please fix!

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

    16. Re:Maybe I'm missing something by SharpFang · · Score: 2, Funny

      If you know Java, pointers in C will be black magic to you.

      --
      45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
    17. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      One of the first software companies I worked for after graduation required a C test (the programmers in the company wrote) before you ever interviewed with the programming department. While talking with one of the original programmers, he told me after they first came up with it they thought it might have been to hard because ever applicant was failing it. He also told me all of the code used in the questions was pulled right from the source code.

      So while I agree that foundation is the most important, there are plenty of companies out there that still use C in there base product. IMHO, I think most graduates will be in for a shock upon graduating and the school is doing them a disservice by dropping C.

    18. Re:Maybe I'm missing something by icebraining · · Score: 1

      I've disassembled c, c++, java,

      Z
      Why, if there are OSS implementations of those compilers/VMs/libraries?

    19. Re:Maybe I'm missing something by Chrisq · · Score: 4, Interesting

      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.

      Only it's not true. A programmer who doesn't know C is either very lazy or, given the relative abundance of each language suffers from some weird form of autism.

      There's no denying it, C is the basis of everything in computing. Anyone who has studied or done any professional work in computing has had contact with the C language at some time. A programmer who never had at least the curiosity to learn C, if only to understand some function he downloaded from the web, will never, ever, be a competent programmer.

      Is that still true? A decade or so ago it would have been, but we have some bright young programmers who have only seen Pascal (from early training), Java, Python, and C#. Many examples now are in one of these languages or pseudocode.

    20. Re:Maybe I'm missing something by Sockatume · · Score: 1

      This isn't at university level, it's high school.

      --
      No kidding!!! What do you say at this point?
    21. Re:Maybe I'm missing something by TheRaven64 · · Score: 1

      I can't speak for the grandparent, but I've disassembled C, C++, Objective-C and Smalltalk code to check that the compiler was really doing what it was meant to be doing. The availability of the source is irrelevant - in all cases it was my own code that I was disassembling. It's also useful when debugging performance issues to check that the compiler isn't pessimising the code. I found a few interesting cases with Microsoft's C++ compiler. In one case, it was inserting SSE intrinsics as function calls, rather than expanding them to a single instruction. In another, someone didn't understand why rewriting their recursive algorithm in an iterative form made it slower (CS101 says recursion is slow!). It turned out, looking at the assembly, that the recursive one was using the hardware stack for everything, while the iterative version was spending a lot of time doing address computations to achieve something similar to a hardware stack. Due to different stack pointer values, the recursive version had the working set stored in the hidden registers that are aliased with the top few stack slots, while the iterative version had a cache load/store for everything.

      --
      I am TheRaven on Soylent News
    22. Re:Maybe I'm missing something by TheRaven64 · · Score: 1

      Note that we're talking about A-Level here. I don't think you'll find a single computer science course anywhere in the UK that makes A-Level CompSci a requirement. You'll find a lot that require maths, but at A-Level the course is regarded as a joke. Very few schools have anyone even remotely qualified to teach computer science to an equivalent standard to more established subjects and the course reflects this.

      --
      I am TheRaven on Soylent News
    23. Re:Maybe I'm missing something by TheRaven64 · · Score: 1

      Not if you really know Java (which, it seems, many people who claim to understand Java don't). Java has references, which are basically pointers but without the ability to cast them to integers or do any arithmetic on them. A lot of C code uses pointers in exactly the same way, treating them as references. You will find explicit memory management hard.

      --
      I am TheRaven on Soylent News
    24. Re:Maybe I'm missing something by GPSguy · · Score: 4, Interesting

      Retaining VB and VB.net suggest a hefty Microsoft contribution. At least to me.

      I've been watching the dilution of programming skills in our CompSci department over the last several years. The question I've been asking is, "Who's going to write the next OS, or even the next decent compiler, if we stop teaching languages that get us closer to the hardware?" From our administration, the answer's been a bit quiet, but seems to be either, "who cares?", or "why?"

      In an OS class I taught recently, 3 of 5 students had not been exposed to any assembly language over the course of 4 years of CompSci, two had not met a full C programming class, either in high school or college. Most had experience in java. All had taken .net classes. None had any class requirement to be familiar with Linux or Unix. In the comments at the end of the class, several were very unhappy that all my class examples required a command line and didn't show them a flashy GUI to look at registers or other output.

      On the positive side, although the senior professor in OS liked what I'd done, and was nonplussed by the evaluations, the department head has said I wasn't likely to teach again, because I tended to focus on technologies that weren't relevant to our students, like web programming and SAAS. Upon reminding her I'd been assigned an OS class, she said I could have integrated more web programming into the content instead of, say, the lectures on HPC, threading, and message-passing, which is what I do a lot of these days, and an area I feel is underrepresented. That I "wasted" two lectures, and still covered all the (approved) syllabus material, and that the kids all did manage to pass with decent grades, wasn't as important as the fact that I'd not focused on what she (and the students) thought was important. (Strange, when did my syllabus become a topic for debate with the class?)

      And while I'm ranting, there's an awful lot of real science still written in Fortran, but it's not taught much anymore. I'm thinking of reviving a free-university class in fortran to support scientific newbies who need to learn it for their course-work and graduate degrees.

      --
      Never ascribe to malice that which can adequately be explained by tenure.
    25. Re:Maybe I'm missing something by gbjbaanb · · Score: 1

      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

      Yes, schools should always teach the foundations, not only because that's the thing you need to do to actually teach people how things work, but also because you always end up using different languages on the job. Learn one, become unskilled quite quickly. (*unless you learn C/C++, then there's always a role for you :)

    26. Re:Maybe I'm missing something by heathen_01 · · Score: 1, Insightful

      No so, everything is Java is a pointer. Its just that the C syntax is difficult.

    27. Re:Maybe I'm missing something by SkunkPussy · · Score: 1

      true though its familiarity with the libraries that makes you a productive programmer and that's what listing the language implies

      --
      SURELY NOT!!!!!
    28. Re:Maybe I'm missing something by Vintermann · · Score: 1

      "C" is a more common standalone token than "Java". Try googling "Java language" vs. "C language".

      --
      xkcd is not in the sudoers file. This incident will be reported.
    29. Re:Maybe I'm missing something by SharpFang · · Score: 1

      a very basic question - name the macro:

      #define MACRO(x,y) ((x)&=~(1L(y)))

      It's a very common idiom in embedded C.
      I wonder how many of them could do it...

      --
      45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
    30. Re:Maybe I'm missing something by Vintermann · · Score: 1

      Explicit memory management is hard.

      --
      xkcd is not in the sudoers file. This incident will be reported.
    31. Re:Maybe I'm missing something by xaxa · · Score: 2, Informative

      And importantly, it's not required that students applying to do computer science courses at university should take this A-level. In fact, many universities will recommend doing extra maths (if possible) instead.

      The best universities even advise against it -- for instance, Trinity College Cambridge say it's acceptable only as a fourth subject (most people do three or four A-levels).

    32. Re:Maybe I'm missing something by Hungus · · Score: 1

      GCSEs are more like High School, A and S levels are more like first/ 2nd year of college respectively.

      Not that I would know, holding 6 GCSEs 1 O level 1 A/S level 4 A levels and 2 S levels or anything.

      Quiz: Since I hold both an O Level and several GCSEs when was I in school.

      --
      Bad Panda! No Bamboo for you! In matters of importance ACs will not be responded to. Want to say something critical,OK
    33. Re:Maybe I'm missing something by wisnoskij · · Score: 0, Troll

      I am taking computer science in university right now.
      We do eventually take courses to learn a little C++, but I do not think we are ever taught any C.
      C is historic, and not something I think anyone should want to ever use (why use an abacus when you have a calculator).

      --
      Troll is not a replacement for I disagree.
    34. Re:Maybe I'm missing something by Ephemeriis · · Score: 1

      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 been ages since I took a programming class... And the only coding I do these days is simple little utility scripts...

      But, looking over the languages they're being asked to use... They're all relatively high-level languages with a lot of goodies built in. Languages that have their own garbage collection, or object model, or whatever...

      C is a fairly basic language. I remember writing my own garbage collection routines - not just as a programming exercise for the class, but because they weren't a part of the language. I remember finding out exactly what happens when you do stupid things with pointers - because the language didn't prevent you from making those mistakes.

      I'm not saying it's a bad thing to use a language with those features built-in... Even folks writing code in C will make use of libraries rather than writing up a new garbage collection routine from scratch every time... And I'm sure it makes a lot of business sense to use a higher-level language that makes your coders more efficient...

      But, from an educational standpoint, you really want your students to be able to make those mistakes. Nothing teaches you that stoves are hot as well as burning your hand.

      --
      "Work is the curse of the drinking classes." -Oscar Wilde
    35. Re:Maybe I'm missing something by Jurily · · Score: 4, Insightful

      but we have some bright young programmers who have only seen Pascal (from early training), Java, Python, and C#

      Are they bright in terms of Get Shit Done(tm) or in terms of Understand The Cost Of Your Code? While C may no longer be the lowest common denominator between languages, frameworks, etc., it's still basically structured assembly, thus ideal for learning the hardware model, and all its implications on higher level software. Interpreted/JIT languages provide a useful abstraction over the hardware, but it's by no means perfect. And when the abstraction breaks, you won't know while your simple little script takes too long. StringBuilder is the idiomatic example, I believe.

      As with all software development magic bullets, it only works as advertised if you already know what you'd do without it.

    36. Re:Maybe I'm missing something by bsDaemon · · Score: 1

      My first instinct is to go with a one-liner xor "butterfly swap", but I'm not sure... then again, I mostly live in Perl and similar languages these days.

    37. Re:Maybe I'm missing something by TheRaven64 · · Score: 1

      I think you are missing some characters in the macro. Did Slashdot eat some HTML characters?

      --
      I am TheRaven on Soylent News
    38. Re:Maybe I'm missing something by LarrySDonald · · Score: 4, Interesting

      Teaching foundations is obviously the most important thing, and yes, you can do that well in many languages. BUT while you learn the foundations, you get the bonus of getting comfortable in one or more languages as you write in them. Which one(s) should you use this bonus on? Pascal? Not thinking that's wise. For the record, my school used modula2/3 and ML for functional until later when everything went to C/C++. I would have much rather gotten further comfort in C/C++ and Lisp to start with, seeing as they're actually somewhat used and the basics don't change anyway.

    39. Re:Maybe I'm missing something by Opportunist · · Score: 1

      Pointers will be black magic to you, no matter what language you start in. Actually not black magic, but completely useless crap.

      Ever looked at a textbook teaching you pointers? Usually you sit there as a new student and go "why the heck should I scratch that itch on my back with my left foot and first touch my nose?" Because that's how pointers are taught! We only show our students how it's done, but we don't give them a good reason why to do it!

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    40. Re:Maybe I'm missing something by Bootarn · · Score: 3, Interesting

      It's interesting how different it can be. The first language we were tought in CS was Moscow ML (Similar to Standard ML, or SML). After that we actually learned MIPS assembly, followed by C. We didn't learn Java until the very end. This gave us a fairly decent grasp of the inner workings of a computer, and I'll forever thank them for it. In our first year, we were asked to construct a MIPS compatible architecture in a simulator (logisim). That was extremely fun, and it really opened my eyes to what a computer really is.

    41. Re:Maybe I'm missing something by JAlexoi · · Score: 1

      Actually, Pascal is just horrible to teach about memory management. The other languages have a managed memory model.
      It took me 2 years to undo the horrible damage that Pascal did to my understanding how computer memory works(though I was only 14).

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

    43. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      that was exactly the kind of insight I was talking about - those who deems this kind of knowledge as useless, are doomed to never truly learn the language they're working on.

      about java: use jade http://java.decompiler.free.fr/ and you'll see what I'm talking about.

      it's useful in the same way that implementing a balanced hash map is: you'll never need to do that, but doing that means that you'll have never any trouble in understanding the inner working and quirks of any implementation.

    44. Re:Maybe I'm missing something by Curunir_wolf · · Score: 0

      I am taking computer science in university right now. We do eventually take courses to learn a little C++, but I do not think we are ever taught any C. C is historic, and not something I think anyone should want to ever use (why use an abacus when you have a calculator).

      If they are teaching you C++, they'd better teach C, or you're not going to be able to write a program that will do anything.

      --
      "Somebody has to do something. It's just incredibly pathetic it has to be us."
      --- Jerry Garcia
    45. Re:Maybe I'm missing something by Opportunist · · Score: 0, Flamebait

      So lie?

      It's not like they expect you to tell the truth anyway. If you're confident that your other experience gives you enough to handle the assignment, just lie in your application.

      Of course, this can backfire if they REALLY do need the special knowledge. I remember we were looking for someone with an "extensive background in IA32 Assembler". The average applicant had years of programming background and maybe toyed with some ASM for Arm or PIC in his spare time. Unfortunately, we didn't need people who know how to program and "have seen an assembler (of a different CPU) once or twice", but people who sleep with the Intel CPU whitepaper under their pillow (preferably bundled with a copy of the undocumented features of the Windows executable loader).

      In short, it can be really frustrating if you're one of the few "rare cases"...

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    46. Re:Maybe I'm missing something by xaxa · · Score: 1

      Retaining VB and VB.net suggest a hefty Microsoft contribution. At least to me.

      ...from the schools (age 16-18 places), not really from the exam boards. The exam boards is responding to demand (or here, a lack of it) for marking work done in certain languages. They have regular meetings with teachers to discuss all aspects of the course, and no doubt if a significant number of schools are asking for another language to be supported they will start accepting that.

    47. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      If thats what you believe then you'll struggle to get a good grade. People like you are the reason why computing science is becoming a code monkey degree.

    48. Re:Maybe I'm missing something by luis_a_espinal · · Score: 1, Insightful

      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.

      Only it's not true. A programmer who doesn't know C is either very lazy or, given the relative abundance of each language suffers from some weird form of autism.

      There's no denying it, C is the basis of everything in computing. Anyone who has studied or done any professional work in computing has had contact with the C language at some time. A programmer who never had at least the curiosity to learn C, if only to understand some function he downloaded from the web, will never, ever, be a competent programmer.

      Is that still true? A decade or so ago it would have been, but we have some bright young programmers who have only seen Pascal (from early training), Java, Python, and C#.

      The operative word is some. These programmers you mentioned would have be bright ones almost regardless of the programming languages they have been exposed to. And that goes to say more about their aptitude and their instructor's aptitude than anything else.

      But just because some exhibit great programming skills w/o having been exposed (at least cursorily) to C, that does not mean that extends to the rest. Purely anecdotal, so take it with a grain of salt, but I've found that, in general, programming proficiency is proportionally related to one's exposure to natively compiled programming languages where explicit resource allocation/de-allocation is required (Pascal-like languages, Ada, C/C++ come to mind.)

      Many examples now are in one of these languages or pseudocode.

      Many examples of what? Memory-managed application-level problems? Yes. There is a whole class of problems that you cannot illustrate with such languages/pseudocode. Application-level programming is just a subset of programming as a whole.

    49. Re:Maybe I'm missing something by takev · · Score: 0

      - If you ever want to write plugin for most applications (c++ plugins are funny and scary).
      - work on most operating system kernels (only a few are in c++).
      - if you need to know exactly how the language constructs its data structures and functions (c++ is to complex and implementation differs wildly).

      You could of course program in C++ with only the C subset, but that is the same thing. And I often need to fall back on the C subset when I work with shared memory (putting instances of classes in shared memory is scary, I now use structs with methods), atomic operations and other weird things. But I also don't shy away of writing little pieces of assembly for special instructions that the compiler did not export.

      And there are still quite a few people in the world that use an abacus instead of a calculator. In fact the user interface of an abacus is much faster for certain operations like adding a list of prices at a shop. But it is a lost art in most of the world.

    50. Re:Maybe I'm missing something by Anonymous Coward · · Score: 2, Interesting

      My first job out after getting my master's degree was at a Canadian / US semiconductor company (whose products you might be using right now). I was entirely self-taught in VHDL, and knew no Verilog at all - which is what they were using. My prospective manager - a brilliant engineer in his own right - knew exactly how much that mattered, and told me I'd pick up Verilog in a month or less. He was entirely correct.

      I consider myself lucky. Every time I read a resume, I see a similar litany of "language skills", everyone except me seems to make a big deal out of knowing the last fad in .NET programming. In my experience, what matters a lot more is domain knowledge, respect for your coworkers/users and good understanding of algorithms.

    51. Re:Maybe I'm missing something by Sir_Lewk · · Score: 1

      C is historic, and not something I think anyone should want to ever use (why use an abacus when you have a calculator).

      I do not think we are ever taught any C.

      Yeah, it shows.

      --
      "linux is just DOS with a UNIX like syntax" -- Galactic Dominator (944134)
    52. Re:Maybe I'm missing something by Civil_Disobedient · · Score: 1

      And like black magic, the propensity for having your spell blow up in your face is usually too great to trouble yourself with it in the first place.

    53. Re:Maybe I'm missing something by smooth+wombat · · Score: 1

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

      Every time I hear the words "side effects", I am reminded of some medicine that was advertised several years ago where one of the possible effects of taking the medication was an oily discharge.

      Is this one of the side effects of learning C you're talking about? Please say no.

      --
      We will bankrupt ourselves in the vain search for absolute security. -- Dwight D. Eisenhower
    54. Re:Maybe I'm missing something by terjeber · · Score: 1
      dropping C and PHP while retaining VB and VB.net is beyond any sane comprehension

      I tend to agree, they should drop C, PHP (and anyone developing in PHP should be arrested and locked up for ages) and VB all. Another funny thing was that they dropped C# while keeping Java. C# and Java are so close they are almost exactly the same language. C# is basically just a Java accent, and it has actually fixed some of Javas problems.

    55. Re:Maybe I'm missing something by biryokumaru · · Score: 1

      ... why use an abacus when you have a calculator?

      It's a little more like "why learn algebra when you can use a TI-9x?"

      If you need to write code that isn't just a little bit insane, you need to understand low level stuff.

      --
      When you're afraid to download music illegally in your own home, then the terrorists have won!
    56. Re:Maybe I'm missing something by atamido · · Score: 1

      Adding Pascal/Delphi to the list is a good idea, but dropping C and PHP while retaining VB and VB.net is beyond any sane comprehension.

      That was basically my thought, although from reading other comments it appears that "A-level classes" are the simplest of the high school classes.

      Still, VB6 has been deprecated for so long that extended support ended years ago. And PHP, while being C-like for structure, is ridiculously easy to develop for due to it's loose type system and output. And why bother teaching VB.NET instead of C# if you're starting at the bottom anyway?

    57. Re:Maybe I'm missing something by AllyGreen · · Score: 1

      Wow thats depressing. I just graduated last year and the area which I felt was most lacking was low level programming skills. For my OS class, it was all theory, no practical. So I'm now reading a book on the linux kernel to try and understand it a little more. Our compilers class was a joke! Write a compiler based on c#! What! How does that make any sense?! I'm currently working in a company that writes web apps, which is fine, but I could learn this stuff any time.

    58. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      Well, considering the fact that C is still the most widely-used language, it hardly makes sense to give it the axe in favor of fluff languages like Pascal or Visual BASIC. No one who knows more than one language uses Pascal for anything, and Visual BASIC's fortunes are tied to Microsoft's. If their office suite ever loses ground, Visual BASIC will be dead. Already many of the design software packages I use are scripted with TCL.

      How's this for some Hope & Change? http://www.ocregister.com/opinion/data-248115-financial-bill.html

      Hooray for meta-spying!!! The IRS will want to know why you purchased that greased-up Yoda Doll last month when you already had 5 of them from the year before.

    59. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      You do realize that pascal is as low level as c ... right ?

    60. Re:Maybe I'm missing something by Sockatume · · Score: 1

      I guess it must differ for different fields. I studied an undergrad masters in science and we'd burned through the entire SCE syllabus within about six months. Biology, the first 8 weeks. If you didn't get out of high school material until the third year of your degree, you were cosmically ripped off in any case.

      --
      No kidding!!! What do you say at this point?
    61. Re:Maybe I'm missing something by Sockatume · · Score: 4, Informative

      Yeah, just to get this down for our transatlantic friends, high school is mandatory until 16. Then we can begin studying S, A/S, and A-levels*, and the grades we get for those are requisites for university entry. A BSc in Biochemistry might require AABB including mathematics and at least one science, for example.

      *(Intermediates, Highers, and Advanced Highers in Scotland)

      --
      No kidding!!! What do you say at this point?
    62. Re:Maybe I'm missing something by Jurily · · Score: 4, Funny

      Yes, and you'll growa beard.

    63. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      C is the basis of everything in computing

      Except FORTRAN programs. And lisp. Or Haskel.

      C is the basis for almost every procedural language, not everything.

    64. Re:Maybe I'm missing something by guysmilee · · Score: 1

      Insightful ? This dude is just wrong bloody wrong!

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

    66. Re:Maybe I'm missing something by techhead79 · · Score: 2, Funny

      So...you're a COBOL programmer....you know they kinda exist in their own little world right?

    67. Re:Maybe I'm missing something by SharpFang · · Score: 1

      Yes, it ate the two left angle braces. "<<" Interestingly, it displayed them in the preview just fine.

      --
      45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
    68. Re:Maybe I'm missing something by Hylandr · · Score: 1

      Serious,

      All those novels / movies based on the premise that technology advances to the stage where we no longer know how to create or fix things starts with forgetting about C.

      Read that article for a very brief and informative lecture on why C is critical to the progress of technology.

      - Dan.

      --
      ~ People that think they are better than anyone else for any reason are the cause of all the strife in the world.
    69. Re:Maybe I'm missing something by commodore64_love · · Score: 1

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

      Yes HR people are amazingly stupid. Recent conversation:
      - "Sorry we're looking for an Altera guy, and you only used Xilinx."
      - "True but targeting a different device is as simple as changing a menu setting. Xilinx or Altera... there's no real difference. Both use the same VHDL or Verilog code."
      - "No. Goodbye."

      I can just imagine similar conversations for programmers:
      "Sorry we're looking for a C++ guy, and you only used Java. Goodbye."

      --
      "I disapprove of what you say, but I will defend to the death your right to say it." - historian Evelyn Beatrice Hall
    70. Re:Maybe I'm missing something by Amanieu · · Score: 1

      Is this even valid C syntax? (1L(y))

    71. Re:Maybe I'm missing something by marcosdumay · · Score: 3, Informative

      Not so. Pascal is way simpler than C on things like string handling and allocation sizes, and that is because of abstraction.

    72. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      --

      Troll is not a replacement for I disagree.

      You learnt that in the University of Troll'onto?

      The difference between a real programmer that knows C and University pancakes is mainly that while the programmer will identify the problem and find a solution(say a linked list), the pancake will use a pre-cooked recipe(std::list) and hope that the problem he doesn't understand goes away.

      It may work, but when it doesn't, there is nothing the pancake can do.

      There is nothing wrong in using C++ or Java instead of C, but C is the very base of all widely used languages both in spirit and materially.

    73. Re:Maybe I'm missing something by DrPizza · · Score: 1

      Nonsense. C++ has different syntax, semantics, idioms, and libraries to C. I'm a long-time C++ programmer who's recently had to undertake a project that unfortunately requires me to write C89, and it has been quite a struggle to adjust to the new (to me) language. No more mixed declarations and code, barely any type-checking, no more constructors and destructors (let alone methods or inheritance), no more collections classes, no more exceptions, no more lambdas--it requires a totally different approach to software development that is completely unfamiliar to me, and completely inappropriate to C++.

    74. Re:Maybe I'm missing something by Jurily · · Score: 1

      But just because some exhibit great programming skills w/o having been exposed (at least cursorily) to C, that does not mean that extends to the rest.

      On a related note, some people think the real value of early exposure to C is that it weeds out the chaff.

      TL;DR:

      But beyond the prima-facie importance of pointers and recursion, their real value is that building big systems requires the kind of mental flexibility you get from learning about them, and the mental aptitude you need to avoid being weeded out of the courses in which they are taught. Pointers and recursion require a certain ability to reason, to think in abstractions, and, most importantly, to view a problem at several levels of abstraction simultaneously. And thus, the ability to understand pointers and recursion is directly correlated with the ability to be a great programmer.

      Nothing about an all-Java CS degree really weeds out the students who lack the mental agility to deal with these concepts.

    75. Re:Maybe I'm missing something by nomadic · · Score: 2, Insightful

      C is historic, and not something I think anyone should want to ever use (why use an abacus when you have a calculator).

      So you're advocating they completely cease work on the Linux kernel? Or port the entire codebase over to another language? Isn't that a lot of work?

    76. Re:Maybe I'm missing something by MBGMorden · · Score: 1

      For the most part, yeah. Only difference I see is that if you being in a functional language vs object oriented then that mindset (rather than specific langauges) can be an adjustment, but even that's not TOO bad.

      Given that IMHO it's easier to go from OO to functional than the other way around, the options at Python and Java are sane choice IMHO. No clue why they'd still tout Pascal though. IMHO, as a beginner language Java makes a ton of sense.

      --
      "People who think they know everything are very annoying to those of us who do."-Mark Twain
    77. Re:Maybe I'm missing something by Bakkster · · Score: 1

      C is historic, and not something I think anyone should want to ever use (why use an abacus when you have a calculator).

      On many microcontrollers, all you have access to is C. Sure, you might be faster with a calculator than otherwise, but what happens when you don't learn to use anything else and only have access to a slide rule?

      That said, what language are you learning that uses pointers? Direct memory access is vital to a thorough CS education.

      --
      Write your representatives! Repeal the 2nd Law of Thermodynamics!
    78. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      Thats true. Its far better to spend several years learning method, then several more learning practice instead of doing both at the same time. The advantages of that arrangement are clear as mud.

    79. Re:Maybe I'm missing something by i_ate_god · · Score: 2, Insightful

      If picking up any given language is straightforward, then why does everyone list the languages they know on their resume?

      Because it also can demonstrate knowledge of libraries. I picked up the Java syntax in one day. Then I had to sift through pages and pages of documentation for the standard SDK, and various other APIs and SDKs and whatnot. Just because you understand a syntax, doesn't mean you're efficient in programming that language. I know the syntax of Python, but I don't know it's quirks, so I'm not very good in Python.

      --
      I'm god, but it's a bit of a drag really...
    80. Re:Maybe I'm missing something by DrgnDancer · · Score: 3, Insightful

      As people have been trying (with varying degrees of clarity) to explain, the value of knowing C is not knowing C. It's in understanding how C relates to the theoretical underlying concepts of Computer Science. C is, in it's pure form, a VERY low level language, that can easily be used to demonstrate underlying Computer Science concepts. Start stacking layers of libraries on top, and C is no more or less abstract than any other language (well still a little more really). If you deliberately avoid using the high level libraries though, you can use C to teach about memory addressing (pointers), networking (without high level libraries, C can be used to work directly with sockets), operating systems (whee, semaphores!), all kinds of stuff. It's really close to the metal, and with it's fancier features stripped out it's metaphors nearly precisely overlap with the metaphors of the machine beneath it.

      Learning C for programmers is a lot like learning Physics for Electrical Engineers. Sure, most of the time they can rely on established formulas to do their jobs. Most of the time an understanding of the underlying principles of electricity is almost an afterthought. Sometimes though, they find they have a need to know the why as well as the how; then they're glad they had to take Physics in school.

      Pascal can also serve this purpose, but C has sort of a dual benefit. If you learn the underlying basics with Pascal, you learned theory. If you learn the underlying basics with C, you learned theory, plus a language that you may get a chance to use sometime. C is less common that it used to be in real world programming, but it's still infinitely more common than Pascal, and its basic syntax survives in C++, C#, Objective C, etc.

      --
      I don't need a million points of light, just two points of multi-mode fiber and a 10 Gig-E router.
    81. Re:Maybe I'm missing something by dwiget001 · · Score: 1

      Yeap, with C, you are pretty much in charge of the whole show.

      The only things I can say are, I do not envy you, but you will come out the other end a better programmer, overall.

    82. Re:Maybe I'm missing something by Bearhouse · · Score: 1

      Because:
      1. Given the choice, any sane (project/team) manager would rather hire someone who is highly-experienced in their required environment, (not just a language, but the toolsets that go with it, and
      2. Nobody's going to believe a resumé which says 'I really, really know the fundamentals of programming languages'.

      I've seen plenty of allegedly super-smart guys turn out crap code.

    83. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      Lets go shopping!

    84. Re:Maybe I'm missing something by wisnoskij · · Score: 1

      I never said that the university did not teach low level concepts or did I advocate not knowing how programming works on a low lvl.

      But knowing C as a language is not needed for this, just last year I took a course were we wrote a simple C like language compiler.

      I do not know how to program in C, but I do know how to program in processor language, assembly.

      C is important, but I do not think it needs to be taught.

      --
      Troll is not a replacement for I disagree.
    85. Re:Maybe I'm missing something by Eowaennor · · Score: 1
    86. Re:Maybe I'm missing something by Anonymous+Codger · · Score: 1

      It depends on what you mean by "understand programming." If I were hiring Java developers and someone walked in with a strong C++ resume and no Java experience, I'd hire him (that was my situation when I took my current job - it took me 3 days to learn Java well enough to be productive). But if I were hiring C or C++ programmers and someone walked in with no C or C++ but a strong Java resume, I'd send him on his way. Why? Because they have no experience in managing memory, which is the biggest challenge in the C/C++ world. Similarly, I wouldn't hire a strong C programmer with no object programming experience to do Java or C++, because it takes time to learn to think in an OOD manner.

      If you want to know one language that will prepare you for a quick transition to (almost) any other language, I'd recommend C++. Between memory management, OOD, and outright obnoxiousness, it prepares you for just about anything other languages can throw at you.

      --
      No sig? Sigh...
    87. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      No, if you ONLY know Java, pointers in C will be black magic. But that's true for VB, C#, Python, etc. Actually, I think that an experienced programmer in any of those languages would be able to understand pointers when they've been explained properly. In my experience, pointers are "black magic" because people who understand them want them to be black magic (i.e., there's a smugness factor in there).

    88. Re:Maybe I'm missing something by wisnoskij · · Score: 1

      No, but not every language has to be taught in every school.
      University cannot completely prepare you for every single job that exists, you might still have to learn on your own if you want a specific job.

      --
      Troll is not a replacement for I disagree.
    89. Re:Maybe I'm missing something by wisnoskij · · Score: 1

      And it is possible to think of situation that you might have to use Perl or pascal or basic, it does not mean that universities need to teach every single language.

      "That said, what language are you learning that uses pointers? Direct memory access is vital to a thorough CS education."
      Assembly, C++, and MIPS (a binary processor language), and we create a simple C like language compiler.

      --
      Troll is not a replacement for I disagree.
    90. Re:Maybe I'm missing something by Dragonslicer · · Score: 3, Insightful

      There's no denying it, C is the basis of everything in computing.

      That's funny, when I was getting my computer science degree, we learned that assembly and/or machine code is the basis of all programming. If you ask a computer science professor, they'll probably tell you that mathematics is the basis of everything in computing. If you ask a computer engineering professor, they might tell you that transistors or logic gates are the basis of everything in computing. If you ask an electrical engineering professor, they might tell you that circuits are the basis of everything in computing (or they might tell you that they don't care and to go away). If you ask a physics professor, they could come up with almost anything to tell you is the basis of everything in computing.

      Personally, I think it's just turtles all the way down.

    91. Re:Maybe I'm missing something by DarthVain · · Score: 2, Insightful

      In many cases Managers don't really get it either, and many times they are the ones doing the hiring.

      People make fun of the "Required X years of Y programming language" yet Y hasn't been around for X years yet. However it is sadly true, at least in a relative way.

      I find myself not bothering to even apply for some jobs because of all the silly requirements they ask for. I graduated Computer Science back in 2000, so the languages I learned in University were stuff like Pascal, Cobol, C, VB, Assembly, etc... All the "newer" languages I either have no experience of very little. I have dabbled in Java and a few others, but its not like its a big part of my current job (which is more DBA focused).

      So either you are coming from school with the newer languages, and thus lack the experience needed, or you do it as part of your current job, in which case unless you are unhappy, or not getting paid as much, why bother. I guess if you had a job and lost it quite recently it might work, but that's about it. The other thing is considering what some of these jobs pay. I look at the requirements, and I am thinking, IF I had those requirements what the hell would I work for you at 60k, when I could easily make more elsewhere (or even doing other things with less qualifications). The other thing I hate is when they require experience in software that costs thousands of dollars to obtain, and is not commonly taught anywhere. The only way to get the software or the training is on the job, which basically makes it impossible to break into. That is to say I basically need to be doing that job right now in order to even apply for it.

      Trying to explain to HR or some managers that you have a background in programing, and that picking up a new language isn't that big a deal just doesn't fly. You are not considered, and you do not get an interview. I know one of my university friends that currently still works in the business successfully, used to just lie on his application and figure it out once he got the job (Perl, and Python he did that way). Anyway, that's all that these HR and managers are promoting, is to lie so you can get the job, not exactly the best way to go about it.

      Anyway I have just recently been looking at re-evaluating my position and looking at new opportunities and these are some of the frustrations I have felt.

    92. Re:Maybe I'm missing something by Dragonslicer · · Score: 1

      I guess it depends if we expect the exams to be about learning the foundations, or actually learning practical skills.

      If VB6 is still on the list, I sure hope it isn't about teaching a solid foundation.

    93. Re:Maybe I'm missing something by HaZardman27 · · Score: 3, Interesting

      Obviously in today's abstract and web based software industry, an understanding of computers isn't as necessary to program as it used to be on a day-to-day basis, however every programmer should still be required to know these things. A mechanic that only knows how to change your oil and rotate your tires wouldn't be a very useful mechanic; the same logic should apply to developers.

      --
      Apparently wizard is not a legitimate career path, so I chose programmer instead.
    94. Re:Maybe I'm missing something by CapnStank · · Score: 1

      C is historic, and not something I think anyone should want to ever use (why use an abacus when you have a calculator).

      That made me chuckle a little bit because I'm also a student (Software Engineering) and right after learning some fundamentals of C++ they started ramming Assembly down our throats. By the time I got to a third year project programming a microprocessor in Assembly I'd punch a baby to be able to code in C.

      Now I understand what you're TRYING to say but the reality is that unless you can get a grasp of a low level language before they push you into Java/C++ then you'll never have a "complete" understanding of the architecture you're coding for.

    95. Re:Maybe I'm missing something by TheRaven64 · · Score: 1

      In that case, it's a macro for clearing a flag in a bitfield (assuming the shift operator is between the 1L and the (y). The shift gives a 1 at the index specified by y in a long. The ~ then inverts this, so that you have a 1 in every position except the index given by y. The &= then uses this as a mask, keeping the values everywhere except the index and, as 0&{anything} = 0, setting that to 0.

      I'm not a Java programmer though, so I don't get any points for knowing it.

      --
      I am TheRaven on Soylent News
    96. Re:Maybe I'm missing something by DrgnDancer · · Score: 1

      I've often wondered about the value of looking for someone with expertise in "x" specific technology. Especially when "x" is a really uncommon skill, but even when it's not to some extent. I mean, maybe if you live in a tech Mecca like Silicon Valley or something you can make it work, but as a general use case I wonder about it.

      I encountered this recently. I'm currently a government contractor, a senior system analyst with a government lab. I work primarily with Unix systems, and mostly with higher end Unix systems (high performance clusters, massively SMP systems, etc). I've done a fair amount of work with Windows as well, nearly everyone has, but I admit my "specialty" is high performance Unix systems.

      Recently my company posted an opening for a junior level management position running a team of SA's. It was for a different division, and this particular project was mostly Windows (AD stuff mostly, seemed pretty straight forward and technically boring, but I was thinking to get "Manager" on my resume so eventually I could get a management level job in HPC systems). I sent the hiring manager a copy of my resume and talked to him pretty extensively. In the end he told me that while my technical background was excellent, and I had some management experience (I was an officer in the Army National Guard) he really needed a "Windows Guy" to hit the ground running.

      I have no reason to think he was blowing smoke up my ass and just telling me this to get rid of me, so I'll take his statement at face value. He could have had me, pretty clearly knowledgeable and capable of learning what he needed (which after all was technically quite a bit simpler than what I do now), quickly. He could have made a few calls to my management to find out that I'm good at what I do (my manager knew I was looking into this and encouraged me to try for a management role). He could have had me now, or pretty close to it. No complicated hiring process, relocation, month's notice to the new hire's old company, transfer of security clearance, etc. Will the time he saves by getting a "Windows Guy" (who will still have to spend time learning the specifics of their setup and architecture) really be worth the time he could have saved by cutting a month off of his hiring and setup time?

      Your situation is similar. Unless you live in an area where you know you can quickly get someone "who sleep[s] with the Intel CPU whitepaper under their pillow", might you not be better to hire someone who has a lot of development experience and maybe some time on an ARM ASM? It's easy enough to tell someone once you hire them, "Hey, your working life is now Intel ASM. Period. You have a month to become a subject matter expert." Even if it takes them 2 months, how long did it take to find your "premade expert"?

      Now if you happen to have offices three blocks down from Intel's main headquarters, and know you can have an expert in a matter of days, my question is probably less valid. Most of the time when I see this sort of thing though, that's not the case.

      --
      I don't need a million points of light, just two points of multi-mode fiber and a 10 Gig-E router.
    97. Re:Maybe I'm missing something by SharpFang · · Score: 1

      then please tell me, how, in Java, to point to 0x11E00164 and read the state of the system cooling fan at bit 1 and heater/dehumidifier at bit 0...

      (No, I didn't pull it out of my ass. This is taken from the actual ref sheet on the wall behind me. 0x11E00000 = memmapped IO space, +0x160 = CPLD registers, +0x4 - 230V GPIO lines.)

      --
      45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
    98. Re:Maybe I'm missing something by quietwalker · · Score: 1

      Is that still true? A decade or so ago it would have been, but we have some bright young programmers who have only seen Pascal (from early training), Java, Python, and C#. Many examples now are in one of these languages or pseudocode.

      You're correct - there are programmers who've only seen Java, and it's obvious from looking at their coding style and program structure. I'm not saying that in a complimentary way. Java is the new Basic - If it is your first language, it appears to make you a 'bad' programmer.

      I'm still finding people who have no concept of memory usage or code complexity (though less lately).

      I'm finding people who use exceptions to pass information, instead of return values (especially after they put the class behind 6 layers of unnecessary abstraction)

      I'm finding people who were never taught to check their arguments or perform sanity checking of any type, including checking return values from other methods ('Oh, then it should throw an exception!').

      I'm still finding people who don't understand that a design pattern is just a shorthand used to communicate ideas about program design. Sitting through a peer review where you're told "I can't approve this unless you make it clear which design pattern you're using here, and name the class after the pattern" is somewhat infuriating.

      I'm not saying these people are not bright. It's just that they don't know any better. Sun did a great job packaging Java as a product with end-to-end ownership from training and certs to support and evangelical positions. They made it much easier to write working code.

      Unfortunately, it's that much easier to write bad code that nonetheless, is working code.

    99. Re:Maybe I'm missing something by AvitarX · · Score: 1

      I think GP was talking about the order of teaching, not that C was un-needed.

      I think it is fair to say the basics can be taught in a language that handles some of those things, then when the basics are understood, move into the teaching of preprocessors, compilers and linkers in a separate course. One that could be taught using C and gets more involved in things with memory.

      I know the first programming course taught at the local university does not teach anything beyond those basics in C anyway. I think it would make more sense to teach things like macros when they have more use than a craps game (the final project).

      --
      Wow, sent an e-mail as suggested when clicking on "use classic" banner, and got a fast response that addressed my msg
    100. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      I started with C, then C++... It's nothing hard.

    101. Re:Maybe I'm missing something by K.+S.+Kyosuke · · Score: 1

      But just because some exhibit great programming skills w/o having been exposed (at least cursorily) to C, that does not mean that extends to the rest.

      On a related note, some people think the real value of early exposure to C is that it weeds out the chaff.

      TL;DR:

      Well, others would argue that Scheme is an even better language for this purpose.

      --
      Ezekiel 23:20
    102. Re:Maybe I'm missing something by kirillian · · Score: 1

      Agreed. The funny part is that it's a little frustrating to see all of our past classmates who couldn't tell pointers or variables from the teacher's red pen to save their lives, but got pushed through school (probably so the school doesn't look bad) getting all the comfortable jobs where they can drone on every day, doing the same things they did in school while we're stuck just trying to get by on our crap compensation, slaving away on our projects...why? Oh, cuz we care a little bit about what we do. /rant Sometimes, these things do make me wonder...

    103. Re:Maybe I'm missing something by shadowrat · · Score: 1

      i work with many good programmers who can't work in C. C# and .NET is all they know. If you start in a managed language like C# or Java, the syntax of C is familiar, but they don't seem to get stuff like pointers to pointers, stack vs heap allocation, array initialization, dynamic memory allocation, freeing memory, segmentation, pointer arithmetic, global variables, the linker, why header files exist, compiler macros, etc.

      They are not incompetent. They are bright, productive programmers who generally are producing good code. Now, i have a reputation of being the guy who can pick up any tech and run with it. It's likely because i'm the guy who had the curiosity to learn C way back when. I don't feel, however, that someone needs to know C to be a good programmer. I was a good programmer when all i knew was Apple BASIC.

    104. Re:Maybe I'm missing something by zeroshade · · Score: 1

      why use an abacus when you have a calculator

      What do you do when your battery dies?

    105. Re:Maybe I'm missing something by K.+S.+Kyosuke · · Score: 1

      "no more lambdas"

      Huh, when did they add lambdas to C++? I must have missed something.

      --
      Ezekiel 23:20
    106. Re:Maybe I'm missing something by Anonymous Coward · · Score: 1, Interesting

      list the keywords, and then the projects.

      Nobody wants to read a wall of text to find out if you have recent enough skills to be worth a 60 minute phone conversation.

      After deciding that you are worth a phone conversation, the projects give us something to talk about to see what kind of person you are.

      But that's just my company, ymmv.

    107. Re:Maybe I'm missing something by Aurisor · · Score: 2, Interesting

      If you're not in possession of a solid understanding of computers, or at least in the market, programming is probably not the profession for you.

    108. Re:Maybe I'm missing something by Defenestrar · · Score: 1

      But you may avoid learning C because of the syntax. For example, I'm an engineer working in a small research lab. I needed some software written to control and monitor stuff I built in the lab and I definitely didn't have time to mess with the C syntax and it wasn't even worth asking management if I could cut a PO for one of those hire a coder for my project sites online (what about security, how do we really know how much time they put in, that's not the way we write contracts, we'll need legal to look over it, etc...?). Delphi was easy to get started with after a few tutorials and my 15 year old familiarity with AppleSoft Basic (on the //e). Easy stuff went in first and within 3 weeks of time (spread over 2 months) I had a working real time graphical output, hardware communication, feedback control, data collecting, exactly-the-way-I-want it piece of software. I tried to pick up theory as I went, so I also made the thing multi-threaded (it didn't need it, but that's good programming form which all modern programmers do right?). I'd love to pick up more skill and theory and I probably will over the years when I get some free time, but the syntax of C would have gotten in the way of both with my constraints and I didn't see much that C could do that Delphi didn't. Delphi was a great language for quickly picking up and developing something, but I could tell that it's well went very deep too.

    109. Re:Maybe I'm missing something by Coryoth · · Score: 1

      If you know Java, pointers in C will be black magic to you.

      Not really. I think some people want to believe that so they can feel smug, but it simply isn't true. Take me as an example. I did some programming in BASIC when I was very young, and eventually dabbled in a little bit of C, but never got as far as pointers -- but I didn't have much need for programming, so I didn't bother to learn. Then for my Master's thesis I finally needed to do some programming, so I learned a language properly; sadly that language was Maple (which was appropriate for the software I needed to write, but not useful as a way of getting back to programming). From there I ended up needing more programming as I moved through various jobs. I learned perl, then picked up Delphi, then a little VB, then python; after than I had to give myself a crash course in Java, after which I learned Eiffel and Ada for my own interest as well as dabbling in a variety of other languages (including lisp, ML, and Scala). After that I finally ended up with a job where I needed to go back to C. So, were pointers black magic to me, having never learned them and with that sorry mix of languages as my background? Not in the least. It was all very obvious and straightforward and never presented any difficulties because I had a solid enough grasp of how programming languages in general worked. There's nothing fancy about "being close to the metal", it's just a different level of abstraction.

    110. Re:Maybe I'm missing something by icebraining · · Score: 1

      But that's not really "learning how the language works", it's just finding some quirks in Microsoft's C++ compiler.

      If you had the source for MS CPP Compiler, you could even step through its code while it compiled your code.

    111. Re:Maybe I'm missing something by maxwell+demon · · Score: 1

      Pointers, for example, make a lot more sense when you know they represent memory addresses.

      It's both an advantage and a disadvantage to know that pointers represent memory addresses. It's an advantage because it gives you a simple model to think in. It's a disadvantage because it tempts you to use that model even where it doesn't apply (e.g. freely using typecasts on pointers and expecting it to work because it points to the same memory address, while the optimizer legally assumes it doesn't). Note that there are other metaphors you can use for pointers, which may be more helpful for the beginner (e.g. page/chapter/equation numbers; you wouldn't expect to get something meaningful if you use a page number as equation number).

      Personally I think that if you're teaching programming, you should stick with a more abstract language.

      I think you should be taught both a very abstract language and assembly. The very abstract language forces you to think about programming problems without caring about the concrete implementation on the computer (thus avoiding the trap of being caught in low-level thinking), and assembly forces you to consider the way computers work at a very low level (thus avoiding the trap of being caught in high-level thinking). And then you should learn C (or C++). Not so much because C is hard, but because learning those other languages already taught you those lessons you are too likely to mis-learn in C. And because it's on one hand high-level enough to recognize certain structures you learned in the high-level language, but also low-level enough that you can easily understand how it translates into the low-level assembly stuff, thus bridging the two levels.

      --
      The Tao of math: The numbers you can count are not the real numbers.
    112. Re:Maybe I'm missing something by DrPizza · · Score: 1

      They're a confirmed feature in C++0x. g++ and VC2010 both support 'em. Take a look at section 5.1.2 in the current draft spec:
      http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf

    113. Re:Maybe I'm missing something by jd2112 · · Score: 1

      IT Director: I want someone with 5+ years Windows Server experience including Windows 2008.

      Ad posted by HR: Position requires 5 years Windows 2008 experience.

      --
      Any insufficiently advanced magic is indistinguishable from technology.
    114. Re:Maybe I'm missing something by OrangeTide · · Score: 1

      Pascal is essentially the same as C, except less geared for writing kernels and more general purpose. But it roughly has the same capabilities of C and fits into a similar role as C.

      Although it is my opinion it is no more difficult to teach C than it is to teach Pascal. And with C comes the advantage of a large amount of software, many textbooks, huge community of experienced developers, and numerous entry-level C programming jobs available (especially compared to the number of entry level Pascal programming jobs).

      Delphi(aka Object Pascal) is another matter, and is a cleaner way to teach OOP than C++, although perhaps less powerful. And there are still quite a few jobs for Delphi, a couple companies still actively update and sell compilers for it too. I'd still recommend C over Delphi for career reasons, but I think a good Delphi student could transition to C, C++, C#, Java or Objective-C pretty easily.

      --
      “Common sense is not so common.” — Voltaire
    115. Re:Maybe I'm missing something by EvilTwinSkippy · · Score: 1

      Well, if you don't understand memory addressing... how do you understand programming to start with? It's so simple "I want a block of memory" is malloc(). I'm done with a block of memory is free(). A pointer points to a block of memory that was malloc()'ed.

      I was 16 years old, reading a xerox copy of K&R's "The C Programming Language", and my only prior experience was BASIC. (Where the looping construct was "GOTO")

      The problem is, kids aren't learning programming languages because they are fun. They are learning them in class, and under the gun. It takes years of playing with these concepts before they make sense. And we don't have the kinds of curriculum that stress "this is a multi-year discipline in which what you learn in year 1 forms the basis for year 2." Instead, we reward kids one correct answer at a time, and never mind that the 9 questions they got right were useless, and the one question they got wrong betrays a complete misunderstanding of the subject, it's an "A".

      --
      "Learning is not compulsory... neither is survival."
      --Dr.W.Edwards Deming
    116. Re:Maybe I'm missing something by Low+Ranked+Craig · · Score: 1

      You're missing something. A BIG something. It's funny, I was just having this conversation last night with a couple of engineers. Knowledge of how things ACTUALLY work is important. How does the system actually store a string, and how does this impact my application? Understanding how things work at the level of the processor are fundamental and very helpful in writing good software.

      The problem with Java and .Net, etc, is that they abstract all this away, but without understanding you can still write bad code. It's a bit like the GOTO argument. GOTO in and of itself isn't bad IF USED PROPERLY. The problem is that goto allows bad programmers to write really shitty code. I've no problem using the occasional goto to handle an exception when my only alternative is yet another nested control structure when I'm already 5 levels deep, but a bad programmer won't think out their code and will use goto to move all over the place. Bad. Likewise a programmer that doesn't understand string storage well. An understanding of how C stores strings for example is helpful in providing context to why StringBuilder is better in terms of performance than String for a lot of things, but not all.

      Computer Science is NOT, in the beginning, about programming. It is about the SCIENCE of COMPUTERS, in case that wasn't obvious. Jumping straight into Java while bypassing C, or assembly, or whatever, IMO bypasses learning the fundamentals which provide a deeper understanding of what is actually going on.

      I wouldn't hire a developer that couldn't describe how C stores strings, and how malloc functions even for a VB.NET project.

      --
      I still cannot find the droids I am looking for...
    117. Re:Maybe I'm missing something by Impy+the+Impiuos+Imp · · Score: 1

      > Obviously in today's abstract and web based software industry

      "And that is where they fail," as Morhpeus might say.

      There's a little old thing called embedded programming that was overjoyed to start including C not 5 years ago or so, to say nothing of C++. Quoth a manager of one such project, me: "How much RAM do you have?" Manager: "Oh, we have tons. 32k."

      Not everything is a big honkin' processor with a Java VM on it already. In fact, most processors are not such creatures.

      --
      (-1: Post disagrees with my already-settled worldview) is not a valid mod option.
    118. Re:Maybe I'm missing something by catmistake · · Score: 1

      But, so what?

      Computer Science IS NOT programming. If you understand computer science, picking up any given language is straightforward.

      If you don't understand computer science, it doesn't really matter what languages you know.

      There. Fixed that for you.

      It bugs me to no end that schools believe computer programming is computer science. It is not. A programmer does not a computer scientist make. While we're at it, a programmer does not an engineer make. It is an insult to engineers when a programmer refers to themselves as a "software engineer." (Just what do they think they are engineering? Math? Logic? Electrons and magnetic fields? If you can't build a bridge, or design an engine, or create something from something that has mass and form and substance, you are not an engineer).

    119. Re:Maybe I'm missing something by Bakkster · · Score: 1

      Agreed. My complaint is with programs that replace the languages with direct hardware control with a language like JAVA. Between Assembly, C++, and MIPS you have the fundamentals well covered.

      In other words, if you learn those languages you can probably program anything. Not necessarily the case with Visual Basic, JAVA, and Perl for example (even though they are useful to know).

      --
      Write your representatives! Repeal the 2nd Law of Thermodynamics!
    120. Re:Maybe I'm missing something by EvilTwinSkippy · · Score: 1

      No actually, I would argue that it's better to simply start with the basic concepts of C and then get more complicated. Sorta-teaching kids a half dozen languages is meaningless, if our stated goal is to turn out competent IT people.

      It's not exactly like C::Java as Integral Calculus::Algebra

      Java is a complex monster all it's own, and half the complexity is because it tries to get cute with pass by references, garbage collection, and all manner of things that would only take a week of class time to teach a sufficiently curious individual.

      With C, most of the complexity is in dealing with the limitations of the computer itself. It can only do one thing at a time. Memory is finite. If you allocated it, you have to free it.

      (When you start getting into object systems, my argument is to ditch compiled options and layer on a scripting language like Python or TclOO that can better handle the Kama-Sutra like transformations abstract objects need to perform.)

      --
      "Learning is not compulsory... neither is survival."
      --Dr.W.Edwards Deming
    121. Re:Maybe I'm missing something by cHiphead · · Score: 1

      I think you mean the side effect of 'uncontrollable gas with an oily discharge.'

      Gotta reference the whole thing, it really makes the side effect fantastic.

      --

      This is my sig. There are many like it, but this one is mine.
    122. Re:Maybe I'm missing something by mzs · · Score: 1

      Too bad it has no C pre-processor, checks the bounds of arrays, the standard runtime is about 4 times as big, and it is such a PITA to add a smattering of assembly. (All of those points have non-standard ways of dealing with them, just like casting.) C is a lot like a quirky assembler with a pretty lousy macro system, I love it. So it may be as low level as C in the same way that C++ is but adds just a smidge more in practice (like the stack unwinding and RTTI stuff in C++).

      I used to love TP, then I started using not DOS and the only viable tool for reusing my years of TP code was p2c (thank you thank you thank you). On Mac with MPW that pascal was completely different than TP in how it did things like casts, and without a real pre-processor, oh god man was it annoying! It quickly dawned on my younger mind then that if I did not want to get trapped like that again I would start using C/C++. Little did I realize that the compatibility of C++ was lacking roughly to an order of magnitude more than with C. So this young moron had to learn the hard way twice. I won't make the same mistake again, C for life baby!

      Oh wait I fell for that Java tripe, I guess I just never learn do I.

    123. Re:Maybe I'm missing something by HaZardman27 · · Score: 1

      What I meant was, without a lot of computer knowledge you can still land a job as a programmer these days; believe me, I work with several such individuals.

      --
      Apparently wizard is not a legitimate career path, so I chose programmer instead.
    124. Re:Maybe I'm missing something by luis_a_espinal · · Score: 1

      Joel Spolsky actually argues for both to be used as a weed-out mechanism (and I could not agree more on that!)

    125. Re:Maybe I'm missing something by subanark · · Score: 1

      C# and Java are so close they are almost exactly the same language. C# is basically just a Java accent, and it has actually fixed some of Javas problems.

      Yes, c# fixes some of Java's problems, but at the same time introduces its own. There are many features in c# that only apply on whatever current version of Windows is out there right now, making the language less portable. I am not a fan of many of the shortcut features (e.g. overloading the explicit casting operator, bit set like enums), which leads to more of "That's cute, but WFT does is it doing".

      Java does have its own problems (e.g. why is generics implemented with smoke and mirrors), and is quite bureaucracy encumbered (version 7 has been around the corner for quite a while now), but it is still my language of choice.

      P.S. Including VB.NET, but not C#... WTF

    126. Re:Maybe I'm missing something by maxwell+demon · · Score: 1

      "no more lambdas"

      Huh, when did they add lambdas to C++? I must have missed something.

      Well, strictly speaking, they will add them in 2011 (this is when they will finally approve the new version of the C++ standard, which contains lambdas).

      However, an implementation of lambdas using existing language facilities was already available in C++ for quite some time through boost.

      --
      The Tao of math: The numbers you can count are not the real numbers.
    127. Re:Maybe I'm missing something by joggle · · Score: 1

      I wouldn't use multi-threading without a specific reason to do so. It is extremely useful in many situations, but it also adds a whole new universe of potential bugs to your program that you don't need to worry about in a single-threaded application (such as race conditions and deadlocks).

    128. Re:Maybe I'm missing something by joggle · · Score: 1

      You can still stumble onto much of this information without learning it in a class. If you have an application that is making many mallocs the performance hit can show up on a log generated by valgrind (for example).

      The article makes several good points. In addition, in C++ you can use placement operator new to make fewer uses of malloc. Of course, you would only use it if you really needed to.

      In Linux you can also use your own malloc rather than the standard one (using a command like: LD_PRELOAD=mymalloc.so myapp). For one of the high-performance apps I've written I use jemalloc (the same malloc used by Firefox).

    129. Re:Maybe I'm missing something by aztracker1 · · Score: 1

      I've done a lot of reading on C and C++, so I understand many of the concepts. However, there's only been a handful of times I've felt the need to dig into C, and both of those times were to expose some underlying structure or API into a higher level language. Honestly, my languages of choice are C# and JavaScript. C# does really well at consuming and using C based libraries, and with Mono runs cross platform, and even complex use cases are supported. With run-times like node.js (and even MongoDB) taking hold, I am honestly feeling a need to get back into C/C++, if only to be able to do more with node under the covers. I think the key is to have enough of an understanding of underlying concepts in C so that you aren't afraid to dig in when you need to, over knowing the ins and outs of system APIs, and newer constructs. If you understand program flow, and how memory addressing works (reference/pointers), the I agree with some of the ancestor posts, that it's easy enough to pick up any language. Of course going from an OO paradigm to a Functional one does take some getting used to. Then again, I've always had a morbid curiosity of wanting to try to understand everything. I started out doing terminal macros, and simple scripts for applications I've used (BBS mods etc), and in doing design for early web development I learned JavaScript... pretty much took off from there, and programming pays better than design work, not to mention having an inherent skill with programming logic.

      --
      Michael J. Ryan - tracker1.info
    130. Re:Maybe I'm missing something by maxwell+demon · · Score: 1

      What do you do when your battery dies?

      I can't remember having ever a battery dying on my calculator. I've got a calculator bought more than 20 years ago, and it still has the original battery, and it still works perfectly.

      Having said that, the answer to your question is simple: Insert another battery.

      --
      The Tao of math: The numbers you can count are not the real numbers.
    131. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      Every time I hear the words "side effects", I am reminded of some medicine that was advertised several years ago where one of the possible effects of taking the medication was an oily discharge.

      I think the appropriate phrase for Olestra was "anal oil leakage".

    132. Re:Maybe I'm missing something by howlatthemoon · · Score: 1

      As someone who has evaluated a lot of resumes, I thought it was common practice for programmers to just list every coding/scripting language regardless of exposure to it.

    133. Re:Maybe I'm missing something by mzs · · Score: 1

      Your college experience was similar to mine. We started with Scheme, then learned PPC assembly while creating MIPS like architecture. Then we learned C together with C++, and only then were we exposed to Java. In systems classes we used a simulator where the imaginary machine was very like a SPARC and logic courses were in Prolog when they were not mathematical proofs but exercises. Theory courses were largely in algol like pseudocode.

    134. Re:Maybe I'm missing something by Spewns · · Score: 1

      No more mixed declarations and code

      A definite plus.

    135. Re:Maybe I'm missing something by mzs · · Score: 1

      Mod this up.

    136. Re:Maybe I'm missing something by idontgno · · Score: 1

      There's no denying it, Perl is the basis of everything in computing. Anyone who has studied or done any professional work in computing has had contact with the Perl language at some time. A programmer who never had at least the curiosity to learn Perl, if only to understand some function he downloaded from the web, will never, ever, be a competent programmer.

      FTFY.

      Whether the first "F" in "FTFY" actually stands for "Fixed" is left as an exercise to the reader.

      --
      Welcome to the Panopticon. Used to be a prison, now it's your home.
    137. Re:Maybe I'm missing something by Rysc · · Score: 1

      "And that is where they fail," as Morhpeus might say.

      I believe that was Yoda: "And that is why you fail." - Episode 5.

      --
      I want my Cowboyneal
    138. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      Pascal is low-level enough that you can teach someone about data structures (although not object-based ones) and algorithms with it and they will get the same education than if you'd used C. It has pointers, for instance. In fact there are so many good CS books that use Pascal that I think it raises a red flag when someone confesses to not being familiar with it.

      I am similarly wary of people who don't know any functional programming. It means that they don't give a crap about CS at large. It's fine, there's a lot of work on the bottom tier. But why should somebody stay there? Because a long time ago someone told them that C was all there was and they believed it?

      C is not the holy grail. Knowing everything is the holy grail. The important things are language agnostic.

    139. Re:Maybe I'm missing something by OldSoldier · · Score: 1

      Can someone British explain to me (an American) what an "A-level" is? Since the tests include Visual Basic and Pascal I'm assuming it's some sort of high school level exam and is used as an entrance into college? If so, I agree to remove C from this under the expectation that C will be taught at the college.

      If instead A-Levels are exams required to graduate from college, then this seems to be a silly move.

    140. Re:Maybe I'm missing something by TheRaven64 · · Score: 1

      If you think stepping through the compiler is going to teach you anything, you've obviously never worked on a compiler...

      --
      I am TheRaven on Soylent News
    141. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      Personally, I think it's just turtles all the way down.

      I get it! LOGO is the basis of everything in computing...

    142. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      Talking about functional programming on a site like Slashdot or TDWTF, where people come to avoid doing work, is like throwing pearls before swine.

      Little wonder they knock degree programs; most of them didn't have the patience to undergo one.

    143. Re:Maybe I'm missing something by DrPizza · · Score: 1

      Not in the least bit. C89's restriction (gone in C99) encourages you to leave uninitialized variables lying all over the place (since you can't always initialize everything correctly at the top of the function), which invites bugs, and, worse, encourages developers to reuse a single variable for multiple purposes, due to the inconvenience of having to go back to the top of the function and the fact that some things like loop indices are necessarily scoped inappropriately. This re-use hurts code clarity a great deal.

      Mixed declarations and code are the only thing that make sense.

    144. Re:Maybe I'm missing something by omglolbah · · Score: 1

      If you start out with something which is a horrible mess to learn then most students will start out negative about the class in general. This has been my experience when teaching.

      Having someone with little or no programming experience start out with plain C is silly.
      Personally I feel C# using Visual Studio Express is a good way to start out. You dont get bogged down by a myriad of (important but still) details before you can have a result.
      If you are just starting out on programming an IDE that will tell you when you screw up and WHERE is very important. Getting it visually marked is even better. It helps with the
      learning process.

      Personally I hated my classes in C not because of the language... but because of the horrible tools we were forced to use. Being told using a frontend for the compiler would be cheating, and that using an "IDE" other than windows notepad was banned... yeah.... fuck it ;)

    145. Re:Maybe I'm missing something by dgatwood · · Score: 1

      I'd usually agree for important variables that get used throughout a function, but there's nothing more pointless than having to put loop iterators that only get used in two lines of code up at the top of the function. It just makes things so much harder to read than:

      for (int i=3; i<maxval; i++) {...}

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    146. Re:Maybe I'm missing something by omglolbah · · Score: 1

      We went in this order at my college... *sigh*

      Visual Basic 6.0
      Assembly for PIC16
      C
      Labview
      C#

      This was a technical college though and not a computer science deal

    147. Re:Maybe I'm missing something by cb88 · · Score: 0

      You've got that right.... I already know more about my car than most of the Acura mechanics (which way is the AC belt tensioner threaded for instance) do and i a computer engineering major! The problem with abstracting code is that it leads to writing extremely inefficent code because the coders know little to nothing about the computer hardware.

    148. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      which is why i thought C was taught to give the framework needed to take on board other languages. starting with Visual Basic 6 is not going to equip for the future.

    149. Re:Maybe I'm missing something by mzs · · Score: 1

      Indeed, the less-than, this is the BITCLR macro.

    150. Re:Maybe I'm missing something by Anonymuous+Coward · · Score: 1

      (e.g. freely using typecasts on pointers and expecting it to work because it points to the same memory address, while the optimizer legally assumes it doesn't).

      care to elaborate?

      I think you got that backwards.

      In C, the optimizer must assume that any two random pointers (no matter what their types are) may point to the same memory address -- and restrain itself from being too smart. (Their are some exceptions, like the results from malloc()).

    151. Re:Maybe I'm missing something by sarkeizen · · Score: 1

      Well I don't know why people put "shopping lists" of "skills" on a resume. When I hire I tear those off or just ignore them. What I do look for is actual work experience in a particular programming language. HR doesn't really look at them because they don't really know what they mean.

      While I would agree that for a lot of straightforward work you should expect an intermediate developer to be able to pick it up. Especially for patching existing code since you can often borrow from the surrounding code.

      That said, writing or designing a complicated application requires some deeper knowledge. For example, I'm sure if I were to throw a rock out my window I'd hit someone who knows how to write code in PHP. However not everyone - as evidenced by code I see - can recite the casting rules it uses (and this is true for a lot of weakly typed languages). So knowing that you need to test using === when the function can return a mixed datatype (such as in strpos() )

      Likewise when you have to do multiple inserts using SQL. Not every engine actually has syntax to handle this and when inserting hundreds of records it can be extremely time consuming. But knowing that you can use an "insert into table select '','... union select '','... ... select '','..." approach to send as much data as the interface can hold has more than once change a program that was nearly unmanageable into one that is reasonably efficient.

    152. Re:Maybe I'm missing something by jschottm · · Score: 1

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

      Do you put the fact you took Honors English in 11th grade on your resume? A-Levels - "This is normally done as a direct continuation of the secondary education process and hence most students study for the qualification from age 16 to 18."

      Did you read TFA? "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." This isn't gutting a college level course, this is changing classes you might take to see if you'd like to be a CS major in a year or two. C is not a good language to be teaching most 16-18 year olds those fundamentals both from their development standpoint and the difficulty finding good teachers proficient in it. Personally, I'd say Python is the best from their list, because it combines conciseness and ease of use with real world practicality.

    153. Re:Maybe I'm missing something by Khashishi · · Score: 1

      That sounds like an argument FOR learning C. How are you supposed to write efficient code if you don't understand what the computer is doing?

    154. Re:Maybe I'm missing something by BitZtream · · Score: 4, Insightful

      Nor would anyone call him a mechanic, they'd call him a JiffyLube employee.

      A lack of understanding of how computers work makes you a person who writes code, not a programmer.

      My 88 year old father can write code to do some minor things, that doesn't make him a programmer, that makes him a guy who speaks a minor amount of VB but in general has no clue what he's saying.

      My guess would be you're a guy who writes code, not a programmer.

      --
      Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
    155. Re:Maybe I'm missing something by Altus · · Score: 1

      you didn't have to write a lisp meta-circular evaluator for compilers? I thought this stuff was pretty much the same course work just about anywhere.

      --

      "In America, first you get the sugar, then you get the power, then you get the women..." -H. Simpson

    156. Re:Maybe I'm missing something by BitZtream · · Score: 1

      Here again, if you 'just' know one of those languages, you aren't a programmer.

      If you can't write code in C, you aren't a programmer.

      You can think you are all day long, you can tell people you are, but thats roughly like me saying I'm an accountant because I took an economics class in 6th grade. Sure, I can say it, but its such a retarded statement that I'd be laughed out of the room if I said it in front of an actual accountant.

      --
      Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
    157. Re:Maybe I'm missing something by HaZardman27 · · Score: 1

      No, I'm a programmer; I was referring to the fact that there are individuals working as programmers who only touch abstract Java code, and have little knowledge of how computers work.

      --
      Apparently wizard is not a legitimate career path, so I chose programmer instead.
    158. Re:Maybe I'm missing something by BitZtream · · Score: 1

      thus ideal for learning the hardware model,

      Its only good for learning ONE type of hardware model.

      C more or less sucks ass on Harvard architecture CPUs, ( http://en.wikipedia.org/wiki/Harvard_architecture ) that is ones that have separate IO and memory addressing. Yes it can be made to work, but it was designed for von Neumann ( http://en.wikipedia.org/wiki/Von_Neumann_architecture ). Using it elsewhere generally costs you a good bit of performance unless you actually understand the hardware you're working on and what not to do in the typical C style.

      --
      Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
    159. Re:Maybe I'm missing something by dannys42 · · Score: 1

      For the most part I agree with you. Different languages do have different conceptual models, so learning more languages is generally a good thing.

      However, I think it's a mistake for schools to be abandoning C. One of the big things about all these new languages people are focusing on (Java, Python, etc.) is that they try specifically to do away with some of the main difficulties people have with C. I'm talking about things like pointers and structures/unions.

      Say what you want about how dangerous they can be. But I do think it's a very fundamental thing people have to understand, especially when doing any sort of systems level programming. It's also quite handy (though not strictly required) in protocol and file format design.

      I'm not saying everyone has to code everything in C. But I do think it's a basic foundation for someone getting a CompSci/CompEng degree. Even can be assembly is useful, just so you're not afraid of it. And once in a while (particularly when writing for microcontrollers or DSPs) it helps to understand what's going on there. It can be useful to understand how many instructions your line of code is translating to so you can count instruction-cycles.

      Another basic I think is understanding how to write a parser (eg. using lex&yacc or whatever). I think far too many people are afraid of these things these days, and you end up with an "XML solves every problem" mentality.

    160. Re:Maybe I'm missing something by mzs · · Score: 1

      For extra credit, what manipulation is this for?

      #define MASK(b) ((1 << (32 - b)) - (1 << (24 - b)))

      #if CPU_FAMILY == PPC

      #define INSERT(t,s,b) \
              t = (t & (~MASK(b))) | (((s * 0x01010101) >> b) & MASK(b))
      #define INSERT0(t, s) \
              t = (t & 0x00ffffff) | ((s * 0x01010101) & 0xff000000)

      #else

      #define INSERT(t,s,b) \
              t |= ((s * 0x01010101) >> b) & MASK(b)
      #define INSERT0(t, s) \
              t |= (s * 0x01010101) & 0xff000000

      #endif

      Hint the PPC case has nothing to do with endianess, all to do with performance and disassembled code from the compiler. Here is what you need to know about posting code on slashdot:

      $ cat > foo
      ...
      ^D
      $ sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g' foo
      ...
      $

      <code>
      ...
      </code>

    161. Re:Maybe I'm missing something by mzs · · Score: 1

      Sad books those students use. I used the TP books that came with TP4 or so. Pointer was called reference (been a long time, could be wrong) and they came-up when describing a linked list, where they made perfect sense. It was one of those aha moments for me when I was starting-out.

    162. Re:Maybe I'm missing something by Bing+Tsher+E · · Score: 1

      Personally, and speaking as somebody who did a lot of Assembly Language before I learned a bit of C, I feel that with a little clarification, the 'C mindset' can be made easier. 'Pointers' are just memory access methods. I'm used to addressing hard memory locations in most of my coding. C gives you that facility while not making you do all your functioning in bare registers.

      I am the sort, though, who thinks that nobody should code in anything except maybe BASIC until they're exposed to some Assembly Language. Learn what you're actually moving electrons around in. Quit with the abstraction. Until a little later, anyways.

    163. Re:Maybe I'm missing something by maxwell+demon · · Score: 1

      A managed memory model does the opposite to teaching you memory management.
      What damage did Pascal do to your understanding of memory? I can't imagine any.

      --
      The Tao of math: The numbers you can count are not the real numbers.
    164. Re:Maybe I'm missing something by Darinbob · · Score: 1

      Why are there any specific computer languages on a computer science test of this sort? Putting a language there turns the test into more of a trade oriented one (can you do the job) rather than an academic one (do you know the principles). That's sort of like having a physics exam quiz you on how well you can use an oscilloscope. It doesn't sound like what I would consider an A-level from what I understand that to mean.

      You can ask the student to use any applicable language if there's a programming test of sorts (though that still is too trade-school oriented), or use a generic language briefly described if the question is about algorithms, etc.

      More evidence that computer science is being dumbed down and considered the equivalent of programming?

    165. Re:Maybe I'm missing something by maxwell+demon · · Score: 1
      --
      The Tao of math: The numbers you can count are not the real numbers.
    166. Re:Maybe I'm missing something by skelterjohn · · Score: 1

      I would argue that a guy who writes code is a programmer. That is, someone who programs. Perhaps the term you're looking for is computer scientist?

    167. Re:Maybe I'm missing something by FoolishOwl · · Score: 1

      Pointers, for example, make a lot more sense when you know they represent memory addresses.

      That's a perfectly adequate explanation of the concept.

    168. Re:Maybe I'm missing something by patSPLAT · · Score: 1

      A programming language is more than just syntax and semantics. The standard library and other community projects create a platform. Leveraging this platform is essential to productive development. Learning syntax/sematics takes an hour or two. Learning the rest is a long career.

    169. Re:Maybe I'm missing something by Darinbob · · Score: 1

      I was a teaching assistant for a class that used C once. The students had all used C++ previously in several prerequisite courses. Week 8 of the 10 week course one team of students asked for an extension, because they said "we're still learning C".

      Learning new languages on the fly is a part of a normal job with computers. When the fashions change you can't just fire everyone and hire new people straight out of whatever college was risky enough to teach the new one. Instead you adapt. My first job in an entry level computer support position (in the 80s) used several different languages. My current job has me occasionally debugging in an assembler language I had never seen before, and which certainly wasn't on my resume.

      Rather than the bosses saying "ok, let's pay some expensive contractor to debug this weird program because he knows the language", they typically just get the existing team to do it. That means cracking open some manuals, searching the web, etc. You won't keep a job long if you say "sorry boss, my job description doesn't mention that technology."

    170. Re:Maybe I'm missing something by Darinbob · · Score: 1

      Except this article was about A-levels, roughly the British equivalent of US Advanced Placement tests. These are expected to be top students.

    171. Re:Maybe I'm missing something by Darinbob · · Score: 1

      Maybe the goal is not to turn out IT people, as that's just a tiny fraction of computer jobs. Instead the goal should be to turn out computer scientists.

      C is just a syntax. I never learned C from professors, I learned in during one session of class while bored (compared it side by side with Pascal), then wrote my assignment in it since I had a choice, and that was that.

      The first programming class, the extremely junior first time class in university, should rarely be just about one single language and nothing else. It should teach the basics of actual programming as well! Ie, what are procedures, functions, variables, loops, recursion, etc. The language itself is just some fiddly details. Then once that first class is done, the students should never need to be "taught" a computer language using an entire course again. Maybe some classes will give a quick day or two on an overview, and some more days on new and different concepts, but not a full course. The students should be able to pick this up on their own by reading the books and manuals.

      In other words, the programming language side belongs to the lab side of the classes, not the lectures and theory. Similarly, when I learned physics, we had separate lab classes for it, for less credit than a normal course. We didn't learn to use lab equipment in the lectures or text books. Programming languages should be similar - something you learn on the side as part of a practical application of course material.

      Of course, some people just want to learn the current trendy language and get a job fast. That's what trade schools are for.

    172. Re:Maybe I'm missing something by Darinbob · · Score: 1

      And then this leads to trends like assuming you can fix your code if you just get more memory, a faster CPU, a faster network, more cores, or all of the above.

    173. Re:Maybe I'm missing something by cb88 · · Score: 0

      Yes I hear it all the time from the IT guys ... just a little while ago a couple were complaining about how the servers they were using are slower than the workstations (big freaking deal it is a school afterall no high workload...) I guess an Acura mechanic voted me down X.x... note that I did qualify my comment with *most* each one that I talked to acutally told me to turn the AV tensioner belt the *wrong* way and talked to guys at different locations even! Also for computer enginnering java is the language used to teach objects.... I find this rather odd as java is more limited that C++ object wize (no multiple inheritance and a few other things... though that may not be entirely bad)

    174. Re:Maybe I'm missing something by Darinbob · · Score: 1

      C and C++ are necessary to know in many places, because they're the most appropriate and common tools for many applications. Java may be nice, but it won't fit into many devices or compile to bare metal without much RAM. C# maybe nice, but good luck getting it to run portably outside of Windows. Ada certainly is much nicer than C, but good luck convincing the rest of your team to use it.

      Yes, C is very bare bones, but it has enough abstractions to allow you to use it at a high level. Some programmers misuse it of course, but that's not the fault of the language. C and C++ are essentially the most adaptable common languages around, able to write high level abstract code or fiddle with hardware bit. You can write an entire system with them with only tiny snippets of assembler, including boot loader, operating system, compiler, applications, etc, and still have it be reasonably portable. What other commonly used languages can do that?

    175. Re:Maybe I'm missing something by ChatHuant · · Score: 1

      That sounds like an argument FOR learning C. How are you supposed to write efficient code if you don't understand what the computer is doing?

      The real issue, at least for me, is that people don't seem to be concerned about efficiency anymore. The premium is now on fast and cheap development, and if it's wasteful, so what? Computers are cheap, let's just throw more CPU or more storage at the problem and be done. See for an egregious example the pervasiveness of XML, which must be one of the most horrible efficiency sinks ever invented.

    176. Re:Maybe I'm missing something by Darinbob · · Score: 1

      Of course, you can use C++ as a "better C than C". You can use it as C with better type checking, and it will be extremely similar to C89 except for a few details. Or use it as C with static classes, ignoring all the extra bits and you've got a nice simple language that is easy to organize. I like exceptions myself, but that's a noticeable performance hit, and STL tends towards bloat, so most embedded C++ avoids those anyway.

    177. Re:Maybe I'm missing something by IICV · · Score: 1

      Personally, I think it's just turtles all the way down.

      Sooo... Logo, then?

    178. Re:Maybe I'm missing something by orient · · Score: 1

      I agree. On the other hand, what can one do in C and cannot do in Pascal?

      --
      Laudele lor desigur m-ar mahni peste masura.
    179. Re:Maybe I'm missing something by Anonymuous+Coward · · Score: 1
      You're of course right.

      The trauma control functions of my brain were trying to blot out any remembrance of the strict aliasing rules ;-)

    180. Re:Maybe I'm missing something by orient · · Score: 1

      If you learn the underlying basics with Pascal, you learned theory. If you learn the underlying basics with C, you learned theory, plus a language that you may get a chance to use sometime.

      Actually, I never got a chance to use C. All the projects I worked on as a (paid) programmer were either Pascal/Delphi, or C++ Builder (Delphi's VCL with C++ syntax).

      --
      Laudele lor desigur m-ar mahni peste masura.
    181. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      I suppose you are joking, right?

      Anyway, C lets you create code without barriers, so lets you make mistakes, I mean bugs.
      It is a great experience to create a bug in C, look at your code and find nothing wrong with it, then look again and spot where the glitch comes from.

      What I mean is once you code a bit in C, you learn to not trust yourself, be careful, proofread, etc ...
      Later it turns out to be an asset for you.

      Learning to code using foolproof languages like Java is ok, but does not teach you as much.

    182. Re:Maybe I'm missing something by IICV · · Score: 1

      Retaining VB and VB.net suggest a hefty Microsoft contribution. At least to me. ...
      "Who's going to write the next OS, or even the next decent compiler, if we stop teaching languages that get us closer to the hardware?" From our administration, the answer's been a bit quiet, but seems to be either, "who cares?", or "why?" ...
      In an OS class I taught recently, 3 of 5 students had not been exposed to any assembly language over the course of 4 years of CompSci ... None had any class requirement to be familiar with Linux or Unix ... In the comments at the end of the class, several were very unhappy that all my class examples required a command line and didn't show them a flashy GUI to look at registers or other output. ... because I tended to focus on technologies that weren't relevant to our students, like web programming and SAAS ... she said I could have integrated more web programming into the content ...

      Honestly, the only conclusion I can draw from this is that you teach at a school with a shitty Computer Science degree. In the course of my degree (University of California, starting in 2004) I had to learn to use the Linux command line (we were given our choice of Vim or Emacs), write a compiler from a tiny c-like language to a stack-based Forth-like virtual machine in Haskell, configure a Cisco router over a serial port using Kermit and sit through (and be tested on) lectures about the principle issues you encounter when trying to run an operating system on multiple processors, and parse out some MIPS binaries by hand to figure out what the program did.

      Just because your school sucks doesn't mean that you can't get a good CS education anywhere.

    183. Re:Maybe I'm missing something by Richy_T · · Score: 1

      Very much this. There's a lot of stuff you can do with smart design in single threads and you can avoid a bunch of overhead too. Which is not to dis multi-threading at all.

    184. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      "C is Hard. Students who aren't bright enough to handle it should just stay away from the industry."

      There fixed it for you.

    185. Re:Maybe I'm missing something by farmanb · · Score: 1

      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.

      That's a nice idea, in theory, but the reality is more often than not you end up with lazy students who are too heavily dependent on behind the scenes garbage collection and tend to write leaky/inefficient code as a result. Teaching the difficult concepts early on, reinforcing those concepts throughout the curriculum and actually holding the students responsible for that kind of material is what creates well disciplined, knowledgeable programmers employers actually want to hire. As tough as it can be to be thrown directly into C/C++ style environments, many places specifically seek out and hire from the (increasingly fewer) institutions which still teach C/C++ as a primary language. If you teach the students good memory management skills with a language like C/C++, which actually forces you to be responsible for your allocations, the simple scripting/interpreted/garbage collecting languages are an absolute breeze to pick up later. At least that's my opinion. Could be I'm just a little biased having been raised on C/C++ in college.

    186. Re:Maybe I'm missing something by uncqual · · Score: 1
      Having RTFA (okay, not wanting to be banned from /., I only S(kimmed)TFA), it quotes a chap named Simon Humphreys ("the British Computing Society's coordinator of computing at school" - whatever that means) as:

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

      Not being sufficiently familiar with A Levels, I'll take this as fact.

      It seems that C, having at least some notion of pointers, would be valuable in helping tie together the lower levels to the higher levels. True, assembly might be better, but it's used so little now that it's rarely of much specific later use (as contrasted to so much FOSS being in C that one is likely to run into C eventually). For example, if one knows C, one might be able to better grok why the Linux kernel isn't being rewritten in VB.Net 2008.

      But, I suppose there is only so much time to teach stuff between text messages.

      --
      Why is there an "insightful" mod and why isn't it "-1"? If I wanted insight, I wouldn't be reading /.
    187. Re:Maybe I'm missing something by Opportunist · · Score: 1

      Unfortunately pointers are usually introduced long, long before fledgeling programmers would get to the point where they could understand the idea of linked lists.

      I agree, we should postpone it 'til users start to hit the brick wall with arrays that they have to resize somehow or when they find out that some things should be organized in binary trees, and when they then start to ask for a way to do that without resorting to library functions.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    188. Re:Maybe I'm missing something by cas2000 · · Score: 1

      if you're taught visual basic, you will not understand programming.

    189. Re:Maybe I'm missing something by Opportunist · · Score: 1

      Trust me, I'm aware of that. But you know how the beancounters work. They will not hire someone until the shit has hit the fan a long time ago and they finally realized it's cheaper to scrape the shit off the walls than adding more perfume to the room.

      And then that someone MUST already know how to scrape shit because there is no time to teach him. And we're not even touching the "why should WE train the guy, buy a trained guy!" part.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    190. Re:Maybe I'm missing something by sorak · · Score: 1

      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.

      But why learn VB 6, when you can be learning something useful?

    191. Re:Maybe I'm missing something by jafac · · Score: 1

      While this is generally true;

      There are many many aspects of programming, and you can't tell me that someone who misses out on one of these classes (a typical cs track example) (and likely, in this particular order):

      asm/hardware systems

      shell scripting

      c

      j2se

      SQL/databases

      css/html/javascript/xml/php

      j2ee

      . . . + any advanced track of any of the above

      These languages are going to each showcase core cs concepts.
      ASM will introduce architecture, data representation, encoding - very basic and very important concepts.

      Shell Scripting will introduce systems admin/management and automation concepts, as well as basic networking, authentication, etc. which, if a student hasn't mastered these by the time they're a CS major, well, there's a serious problem with their academic plan anyway. But I digress.

      C would teach, I guess, algorithms, compiled language (IDE, development workflow, source control, team projects) concepts.

      J2SE would teach object oriented concepts, virtual machines, and data structures. (VITAL, and I think maybe you could replace C with this; in my formal education we did.)

      SQL/Databases teach concepts that none of the other languages really touch. I've worked on way too many legacy codebases where developers obviously had zero background in SQL. I believe this is fundamental to any professional-level programming skillset. Period. It belongs in any degree program where a computer programming is a skill on the list of outcomes. SQL is not the end-all-be-all of data storage, of course. (KR/OWL is). But it's universal enough by now.

      css/html/javascript/xml/php - pick your witch's brew of web technologies. If you're going to know the back end, you should have at least familiarity with the front end.

      J2EE, because Larry said so. (kidding. For teaching design, architecture, etc.)

      - - -
      So. . . "understanding programming" is not as simple as it sounds. And "picking up any particular language" based on that, I think, is a bit on the ignorant side. The "world" of the scripter, is a very different world than the world of the enterprise web application programmer, which is a very different world than that of the relational database guru. Having a good basic understanding of programming does not make "picking up" developing J2EE backends even CLOSE to straightforward. Same goes for transitioning into the role of say, writing drivers for embedded hardware devices.

      I've met very few "genius" programmers who can just jump from one to the other, and that's after 10-15 years of working various types of projects.

      --

      These are my friends, See how they glisten. See this one shine, how he smiles in the light.
    192. Re:Maybe I'm missing something by snaz555 · · Score: 1

      No, I'm a programmer; I was referring to the fact that there are individuals working as programmers who only touch abstract Java code, and have little knowledge of how computers work.

      This is really not such a bad thing. While the class in the story is a very elementary introduction to programming (for which all the various interpreted, easy to learn and use languages are great), the real problem domain for CS is, or should be, computing in itself. It should be about making computers easy to use for non-CS people so they can write programs in python, excel, Java, Pascal, or whatever their preference of the day is to implement business systems for their problem domains. No matter what the paradigm of the day is, there will need to be systems implemented to do these things: web servers, database servers, compilers, kernels, runtimes, etc don't just magically appear out of nowhere. And even though these paradigms shift around computers essentially work pretty much like they did 35 years ago, and the system software building blocks are the same. A queue is a queue, a scheduler a scheduler, atomic transactions are still atomic, etc. While some minor things change, the problem domain is the same: implementing programmable, efficient, reliable, useable systems. What's mainly changed is the problem domains of the user. But a computer is still a computer, and someone who did kernel work in 1985 could easily pick up Linux or a web server like Apache today. You still need C and assembler, still need to understand how the machine works, need to understand things like pipeline hazards, cache locality, bus arbitration, etc.

      That said though, I'd be skeptical about anyone enrolling in a CS program without knowing how to program in e.g. python or Java. In fact, I'd assume they do and they're actually motivated by a desire to implement and understand runtime tools like this for themselves. But it's a good starting point to study algorithms, or at least the abstract part of them. An efficient implementation then clearly requires some degree of machine knowledge and tools that can leverage benefits while avoiding pitfalls. (It's a typical prototype to production step for this domain.)

    193. Re:Maybe I'm missing something by Bill+Dog · · Score: 1

      I certainly wouldn't hire, to do C++, a person who's only used Java. As someone else said, it's just not just learning the syntax of a language, but also its idioms. I.e. conventional (e.g. readable and maintainable by those within that language's development community) and proper (e.g. robust) usage. C++ has considerations and complexities a Java-only person has never fathomed.

      --
      Attention zealots and haters: 00100 00100
    194. Re:Maybe I'm missing something by snaz555 · · Score: 1

      I am the sort, though, who thinks that nobody should code in anything except maybe BASIC until they're exposed to some Assembly Language. Learn what you're actually moving electrons around in. Quit with the abstraction. Until a little later, anyways.

      I would tend to agree with this. Start with some easy to use language (I think python is a very good learning tool since it can teach concepts basic can't - like data structure, functional programming, threading, and networking) just to get started with a broad 30k ft view of what computers behave like for the end user. Then start with the lowest level - the machine itself. Doesn't terribly matter which one - any von neumann architecture conveniently available. I think ARM is good personally because it's easy to program but exposes the details. Easier than Sparc or MIPS to get started with, while more transparent and less 'magic' than x86. Then switch to C as a portable assembler and learn things like inline assembler and factoring for portability. Give students projects to port say code from x86 or MIPS to ARM; let them go research the source machine and figure out how to get it to run on a different machine, refactoring as needed without losing the ability to build for the original architecture. While this may seem like a trivial skill I think it's important to teach students to conceptually distinguish portable system software from machine dependent parts. Understanding the value of code reuse is a driving factor for many higher level concepts, like OO factoring and switching from C to C++ (sans rtti or exceptions) - because of its better code reuse. As part of this students could look at things like the Sun vnode layer as an example of OO factoring in C, and imagine how much cleaner it would read in C++. Then the education keeps building like this until it meets up with the higher level interpreters where it started. (And which are consistently used throughout the education to explore new concepts, like network protocols, transactions/atomicity, or RPC mechanisms.) I think the real issue ends up being how much someone can be taught in four or five short years. It's not much time.

    195. Re:Maybe I'm missing something by snaz555 · · Score: 1

      I agree. On the other hand, what can one do in C and cannot do in Pascal?

      You might as well ask "what can one do in assembler and cannot do in Pascal?" C is for creating cross-platform system software. Its main benefit is its cross-platform-ness while providing virtually all the capability of assembler. Pascal that has been extended for system software (e.g. Turbo Pascal) is non-portable while a fairly poor substitute for assembler. Even TP would be difficult to use for something like an interrupt handler or thread scheduler. As a result, a lot of TP code contained large amounts of inline-assembler and was rarely factored for portability. Other platforms, like MacOS and the UCSD p-System, that relied on Pascal for programming were largely implemented in assembler.

    196. Re:Maybe I'm missing something by snaz555 · · Score: 1

      I should add that Pascal code tends to be factored along the line of 'things that can be done in Pascal vs things that need or should be done in assembler' rather than C's 'things that are portable vs things that are architecture and platform dependent'. This is really what makes Pascal a dead end. There is a huge, huge body of great Pascal code out there from the 80s - virtually all of it abandoned today. C code from the same era however has generally continued to evolve into what's in use today. Reusability is the real reason it's used while Pascal isn't.

    197. Re:Maybe I'm missing something by yukk · · Score: 1

      "C is Hard. Students who aren't bright enough to handle it should just stay away from the industry."

      There fixed it for you.

      Nah, we need VB programmers too so that we can concentrate on the interesting stuff.

      --
      The trouble with the rat race is that even if you win, you're still a rat." Lily Tomlin
    198. Re:Maybe I'm missing something by pipedwho · · Score: 1

      No.

      The purpose of schooling (ignoring all the 'crush the free thinkers' conspiracy theories) isn't about making things unnecessarily hard so only one or two nerds can succeed. It's about teaching the students fundamental principles in a way that can be further applied to learn more advanced principles.

      Your implication is that, for example, turning up to a maths class and learning trigonometry without already having a good base in algebra is a valid approach. True, you might learn something. But, it isn't in the best interests of the majority of the students, both GPAwise, or from an educational standpoint.

    199. Re:Maybe I'm missing something by lennier · · Score: 1

      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.

      And you learn Haskell to avoid the side effects...

      --
      You are not a brain: http://books.google.com/books?id=2oV61CeDx-YC
    200. Re:Maybe I'm missing something by GPSguy · · Score: 1

      And, well, that may be the case. However, if you look, there's been an ebb and flow to the quality of CompSci around the US over the last several years. I still do what I can to keep quality up. However, we do have folks who're more interested in making sure the kids are Microsoft compliant than in determining if they understand the Science part of Computer Science.

      --
      Never ascribe to malice that which can adequately be explained by tenure.
    201. Re:Maybe I'm missing something by GPSguy · · Score: 1

      C is where I'd like 'em to show proficiency at first. They can learn other languages later.

      --
      Never ascribe to malice that which can adequately be explained by tenure.
    202. Re:Maybe I'm missing something by GPSguy · · Score: 1

      Maybe it's because there are few enough dinosaurs like me around who learned assembly and are still teaching. I've learned to let the kids learn in C, but I do tend to think the bedrock resides with assembly and machine code. Or, at least, if you really want to know what's happening.

      --
      Never ascribe to malice that which can adequately be explained by tenure.
    203. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      i didn't get pointers no matter how much i tried, until i got into university and went through a one semester course in 8086 assembly ... then pointers made sense...

    204. Re:Maybe I'm missing something by Xyrus · · Score: 1

      If you understand programming, you can write a program that works. If you understand HOW programming works, you can explain WHY your program works.

      The high level languages should be taught AFTER the programmer has an understanding of what the hell the computer is actually doing and how it operates. C is great in that regard, because it's terse enough that you can get down to the metal but high level enough to allow introduction to basic data structures. After that basic mastery, moving on to higher level languages can introduce the more abstract concepts.

      I like having people who can both program AND understand what their program is doing.

      --
      ~X~
    205. Re:Maybe I'm missing something by lennier · · Score: 1

      There's no denying it, C is the basis of everything in computing.

      If you consider 'everything in computing' to have begun on 1 January 1970, sure.

      But strange as it is to contemplate now, there was life before Unix.

      Now, if you said 'is the basis of every buffer overrun 0-day security flaw in computing...' then I'd have to agree.

      --
      You are not a brain: http://books.google.com/books?id=2oV61CeDx-YC
    206. Re:Maybe I'm missing something by InfoJunkie777 · · Score: 1

      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.

      What he said.

      --
      Don't explain computers to laymen. Simpler to explain sex to a virgin. -- Robert A. Heinlein
    207. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      As a current university student, I fully agree with you and mourn the day when Java replaced C/C++ as the first language taught to students pursuing a Computer Science degree (in the US at least). When I took the Computer Science AP class/exam, C++ was the required language. The very next year, the language was changed to Java. I consider myself lucky to have not been a year later (I skipped 4th grade so had I proceeded along the normal track, I would have started with Java and probably would not have become the programmer I am today). I can see almost no reason for anything involving web programming and SaaS in an OS class and would honestly give a poor review to a teacher who bothered to spend more than a passing moment on either topic. I also firmly believe that your ability to get stuff done should only be moderately affected by, not entirely governed by, the type of interface you use (some tasks lend themselves to GUIs, some to CLIs, but both should be viable options and if it causes you such pain to use a CLI, then you are in the wrong field (or should be, seems the whiners are making ground, but even Microsoft's IDE is merely a GUI interface to a set of command line tools, something which is apparently lost on your students). I also was offered an internship based around those very topics you 'wasted' time on, so your department head is full of sh*t that those topics aren't worth the lecture time. Your department head needs to be replaced because her ideas and experience aren't relevant and the students would be better served with a real education rather than a piece of paper saying they can hack it in a world that they are not going to be prepared for even after they graduate.

    208. Re:Maybe I'm missing something by Ambiguous+Puzuma · · Score: 1

      Pascal, which is "highly recommended" by the exam board according to the summary, has the notion of pointers too. Pointers were used extensively on the Advanced Placement Computer Science exam when it was given in Pascal.

    209. Re:Maybe I'm missing something by cowdung · · Score: 1

      "a VERY low level language, that can easily be used to demonstrate underlying Computer Science concepts"

      Memory addressing, networking and operating systems are not the underlying concepts of computer science!

      Computer Science is about algorithms, theory of computation, computer language theory, etc.. Not some particular Von Neumann abstraction that we used 40 years ago to represent computation!

      A much better language to teach the "underlying concepts of Computer Science" would be Scheme, OCaml, or Haskell. Or even Ruby, Erlang or Smalltalk.

      "Low level" programming in C is not that relevant these days and not very high tech.

      The Java virtual machine is much more high tech.

    210. Re:Maybe I'm missing something by Chrisq · · Score: 1

      I am not sure what you mean here, but I think you are talking about asynchronous IO, test, waits, etc. If so, you are right in that C does not give you much help, but C with a thread library is just about as easy as any other language. We are talking about something that is fundamentally quite difficult to do efficiently anyway.

    211. Re:Maybe I'm missing something by Jesus_666 · · Score: 1

      Remember that you at most have one year's worth of time to teach all of this, spread out over about five years. Not everyone studies to become a programmer and depending on how the BSc/MSc or the local equivalent work they may or may not be required to take an arbitrary number of classes which may or may not deal with programming.

      In short, you can't assume that a student will spend more than (or even as much as) one course each semester on general-purpose programming, depending on the university's focus and on what the student aims for.

      You may think it's a waste to limit teaching people the backgrounds of programming to, say, two basic programming courses and Theoretical Computer Science 1. But we have to solve more problems than just "how can I implement this in the fastest way possible" and getting people to the point where they can, for example, design a semi-automated residence specially tailored to the needs and deficiencies of old people requires a ton of courses that may not involve a single line of code, yet are still genuine computer science (like usability and AI courses). A chip designer likewise wouldn't care about the specifics of C++ string handling just like a general-purpose coder doesn't care about bus arbitration in VHDL.

      Your plan is nice for universities specializing in cranking out good general-purpose coders. However, other universities specialize in things like robotics, IC design or usability and have completely different requirements as to what their computer scientists need to be able to do.

      --
      USE HOT GRITS WITH STATUE OF NATALIE PORTMAN (NAKED AND PETRIFIED)
    212. Re:Maybe I'm missing something by Jesus_666 · · Score: 1

      Then once that first class is done, the students should never need to be "taught" a computer language using an entire course again. Maybe some classes will give a quick day or two on an overview, and some more days on new and different concepts, but not a full course. The students should be able to pick this up on their own by reading the books and manuals.

      That may or may not work. I remember one course which touched on CUDA as a side topic. One of the assignments actually included an exercise that required us to learn CUDA on our own and efficiently implement a certain algorithm in it. Within one week while also doing assignments for other courses and the rest of that assignment. I think about two people managed to get all points on that exercise; most turned in code that wouldn't actually run.

      If you want to use a programming language in your course you need to touch on all the things people need to know in order to do your assignments. Even if you just write a little introductory script and upload it to the course's CMS. Don't just tell them: "The developer has some documentation somewhere and the language can be used in conjunction with C. That's all you need to know; now write me a multithreaded, maximally-efficient implementation of XYZ."

      Yes, you need to learn quickly in the real world but universities should focus more on making sure you actually learn things instead of emulating the real world as closely as possible.


      Concerning how real-world emulation can go wrong, here's a story I like to tell:
      We have a mandatory two-semester software project at my university. The time I went through it, the lecturer wanted to emulate a real-world project as much as possible so he played a clueless customer who makes up inane requirements.

      Okay so far, however he also teased us with the prospect (nay, the promise) of the best candidate implementation actually being used in the read world. You see, he wanted a website he was responsible for redone. Yeah, cheap labor but hey, designing something that actually gets used is kinda exciting for a pre-Bachelor student.

      And then he went on to make Java with JSP or an equivalent framework a hard requirement. For the reimplementation of a website currently served from a few text files and some shell scripts. No negotiation, he wouldn't budge on that one.

      Needless to say, after spending the first semester just wrangling with Tomcat and various gigantic frameworks all groups finally turned in horribly bloated web apps that required a fairly beefy computer in order to do what any LAMP installation would have done with 300 lines of PHP/Python/Perl on a Pentium II. He opted not to use any of our designs.

      The mindboggling thing is that instead of letting us choose which technologies to use and encouraging us to teach those technologies to those in the group who didn't yet know them - giving us both experience in real-world web development and some practice in student-to-student teaching - he settled on Java because it was supposed to be easier. After all, we already had a full semester of writing Hello World in Java! Also, driving home just how much contempt we should have for real-world customers was more important than giving us the chance to do something meaningful when said chance was in fact the very thing used to motivate us.

      He did succeed in giving everyone involved a thorough contempt for anything that combines Java and any markup language in any way.

      --
      USE HOT GRITS WITH STATUE OF NATALIE PORTMAN (NAKED AND PETRIFIED)
    213. Re:Maybe I'm missing something by moggie_xev · · Score: 1
      You realise that A levels are for 16-18 year olds and while I feel it sad that they are removing C form the list of languages.....

      I learned C for my A levels 25 years ago... and it was well worth it.

    214. Re:Maybe I'm missing something by professionalfurryele · · Score: 1

      I gotta say for me the problem here isn't the languages that were removed, it's the languages that are still there!

      I mean VB.Net 2008! This is a very complicated language totally unsuitable for teaching. It's like starting a course on physics with a class on algebraic topology. C, C# etc are all equally unsuitable as a first language. If you are trying to teach something lower level like C for the sake of it then do assembly, but they shouldn't be a first introduction to programming. They should just mandate Pascal and be done with it. There are plenty of free, high quality packages available for it so it's cheap for the schools and colleges. If you are even vaguely competant as an educator you can pick it up quickly and it's designed specifically to teach students to program.

    215. Re:Maybe I'm missing something by commodore64_love · · Score: 1

      Would you hire someone to do C++ if they only have a C background?
      Would you hire someone to do C# if they only have a C++ background?

      --
      "I disapprove of what you say, but I will defend to the death your right to say it." - historian Evelyn Beatrice Hall
    216. Re:Maybe I'm missing something by GarryFre · · Score: 1

      So in a world gone web whacky where all practically every programming job requires web skills, they stop teaching web related skills except java? How stupid I say. There is far more to PHP than just syntax. There are a whole slew of web concepts to learn. Without those skills you don't get a job!!!

      --
      www.Migrainesoft.com - Computer giving you a headache? We can fix that!
    217. Re:Maybe I'm missing something by Bill+Dog · · Score: 1

      1) Not a chance. C++ went from being mere "C with classes" a looong time ago. If you program C++ like one does in C, you're doing it wrong. (And wasting the extra power and type-safety -- you may as well just give your source files a .c extension.) C++ has all kinds of gotchas where the compiler is secretly writing code for you and making choices in selecting which classes and functions to use.

      As a side note of possible interest, I would be hesitant even to do the converse: Hiring someone to do C++ who has a C++ background without any C background to speak of. For example C++ has references and string objects and container classes, but sometimes it's just simpler or needed to interface with something else to be able and be comfortable/solid with managing your own raw array and pointer arithmetic.

      2) This is currently something like the transition I'm trying (trying not as in struggling to learn, but struggling to get hired!) to make. Learning C# was actually fairly painless after mastering C++. Coming from modern C++, C#'s things like generics and lambda functions are not shocking at all, and memory management is much simpler (altho non-memory resource mgmt. is still manual, and a little bit harder due to only limited available determinism).

      But the class library is huge, and there's a bunch of co-technologies in .NET that you have to know to be able to produce anything beyond a console app that reads/writes from/to stdin/out. So no, with only a C++ background one would not know WinForms or WPF for desktop GUI apps, or ASPX for web apps, or ASMX or WCF or .NET Remoting for web services and connecting tiers, or ADO.NET or .NET's ORM's for working with databases, etc.

      I.e. even in the cases where you're going from a harder to a simpler language, you're not productive in the real world until you can make GUI's, access db's, parse XML, talk to other machines, etc. Which C, C++, and C# (LINQ excepting) don't have built-in to the language such that it's only about learning the language to get hired.

      --
      Attention zealots and haters: 00100 00100
    218. Re:Maybe I'm missing something by n7kv · · Score: 1

      Thanks for the link. Very well put.

    219. Re:Maybe I'm missing something by Anonymous Coward · · Score: 0

      I think there is something to be said about American schooling when I'm almost graduated from college and I can't understand how the school system over there works. Even after reading the above post.

    220. Re:Maybe I'm missing something by d4nowar · · Score: 1

      This is sad to hear. As a student, if I went to an OS class and started hearing lectures on web programming I'd drop the class and ask for my money back. Also, your department head doesn't seem to know what she is doing. With the way her department seems to be set up now, I'd be surprised if graduates got jobs anywhere outside of the web app market.

    221. Re:Maybe I'm missing something by shutdown+-p+now · · Score: 1

      I'm not sure about which Pascal we're talking about here, because the original Wirth's Pascal is horrible (see section 2.1) at string handling. ISO Pascal "fixed" it in a very half-assed way. Turbo/Borland Pascal finally fixed that problem (in an entirely non-standard way), only to introduce another one, known as "255 characters is enough for everybody" (length of string was encoded as a single byte).

      Other than that, GP is absolutely correct in that Pascal is just as low-level as C. For example, it also has pointers, including dangling ones. About the only other feature I can think of where Pascal is one step above is variant ("case") records - they're typesafe, unlike C unions; though, ironically, Turbo Pascal allowed them to be non-typesafe.

    222. Re:Maybe I'm missing something by shutdown+-p+now · · Score: 1

      make GUI's, access db's, parse XML, talk to other machines, etc. Which C, C++, and C# (LINQ excepting) don't have built-in to the language

      LINQ in C# cannot do any of the things that you've listed, either. After all, it's just syntactic sugar for method calls, with no inherent semantical meaning - and the latter is defined entirely by the libraries. In fact, this can be rather creatively abused.

    223. Re:Maybe I'm missing something by shutdown+-p+now · · Score: 1

      Yes, c# fixes some of Java's problems, but at the same time introduces its own. There are many features in c# that only apply on whatever current version of Windows is out there right now, making the language less portable.

      Can you give some examples?

      (keeping in mind that we're, presumably talking about C# - that is, the language - and not .NET class libraries)

    224. Re:Maybe I'm missing something by shutdown+-p+now · · Score: 1

      No so, everything is Java is a pointer. Its just that the C syntax is difficult.

      Please highlight the pointer in the following Java code:

      int x;

    225. Re:Maybe I'm missing something by subanark · · Score: 1

      Can you give some examples?

      (keeping in mind that we're, presumably talking about C# - that is, the language - and not .NET class libraries)

      At what point is the language and the libraries separate? You can make a language like c# that has a completely different library, but it won't make portability any much easier. Clearly, System.Type is part of c# since typeof is an operator in c# that results in System.Type (same goes with many of the types in the base System namespace).

      From my understanding DllAttribute is treated in a special way by the compiler (as a pinvoke), the term Dll is special to Windows. Lets not even get started with ComVisibleAttribute.

      From Java's standpoint, there are 3 languages... J2ME, J2SE and J2EE. However, in the J2SE case (which is what is usually taught); the core library (everything in the standard download) API are designed to be as cross platform as possible. You can find examples of things that may not work out well for a given OS (swing menu bars in mac OS), but nearly all the API methods make sense on most desktop/terminal platforms. A good example of some of the cross platform efforts that Java has is the File class. You will notice that there is a setExecutable() method, which doesn't exist in Windows. There is also a listRoots() method which isn't necessary in Unix since unix OSs only have a single root. The .NET FileAttributes enumeration on the other hand is very Window oriented, which may have unix equivalents, but many of those attributes are not as easily obtained.

      Teaching c# is fine as long as you don't use any GUI operations, which is more limiting than Java is.

    226. Re:Maybe I'm missing something by shutdown+-p+now · · Score: 1

      At what point is the language and the libraries separate? You can make a language like c# that has a completely different library, but it won't make portability any much easier. Clearly, System.Type is part of c# since typeof is an operator in c# that results in System.Type (same goes with many of the types in the base System namespace).

      There are definitely certain types in the base class library which are treated specially by the compiler, or at least which it has to know of. System.Type is one, but also e.g. Enum, ValueType, Array, Attribute, String, IEnumerable, IDisposable, and some predefined attributes such as InAttribute and OutAttribute.

      However, this does not extend to the entire class library. In C++, for example, this difference is even explicitly delineated in the spec by introducing the concept of "free-standing" implementation, which only has enough of the full standard library to support all language constructs, and no more. In C#, this is implicit in C# language spec - only the types which are referenced in it can be considered a part of the language.

      From my understanding DllAttribute is treated in a special way by the compiler (as a pinvoke), the term Dll is special to Windows. Lets not even get started with ComVisibleAttribute.

      Both of these attributes are not treated in a special way by the compiler. They are treated in a special way by the CLR. For compiler, it's just an attribute.

      Well, okay, ComVisibleAttribute is treated somewhat specially starting C# 4.0 with respect to named indexers.

      As a side note, COM itself is not platform-specific. It's just an object model with a well-defined binary ABI. Indeed, Mozilla's XPCOM is conformant to that ABI, and, consequently, on Mono on Linux (and other non-Windows platforms), all the COM machinery works and can be used in largely the same way.

      From Java's standpoint, there are 3 languages... J2ME, J2SE and J2EE.

      The language is the same in all cases (and the language-supporting part of the libraries - Class etc - is also the same).

      Speaking of .NET class library, though - yeah, it's definitely very much Windows-centric, no argument there. My favorite gem:

      public enum PlatformID
      {
          Win32S,
          Win32Windows,
          Win32NT,
          WinCE,
          Unix,
          Xbox,
          MacOSX
      }

      Of those, MacOSX only appeared in .NET 4, and Xbox only appeared in XNA - in .NET 1.x, you only had the 4 "Win..." entries, and Unix.

    227. Re:Maybe I'm missing something by marcosdumay · · Score: 1

      Well, ok, I was talking about Turbo Pascal. I never even used the original one. It has pointers, but you can allocate them without thinking too much about the size.

    228. Re:Maybe I'm missing something by shutdown+-p+now · · Score: 1

      It has pointers, but you can allocate them without thinking too much about the size.

      If you mean New/Dispose (which, BTW, come from Wirth's Pascal), then it's true that they figure out how much to allocate from the type of pointer variable you supply to them - but, at the same time, they always allocate a single new instance, so you can't use them for dynamic arrays. Indeed, Wirth's Pascal didn't have any facility to implement dynamic arrays at all. In any case, it's trivial to write a C macro that's effectively identical to Pascal's New, e.g.:

      #define new(p) (p) = malloc(sizeof(*(p)));
       
      int* x;
      double* y;
       
      new(x);
      new(y);

      In Turbo Pascal, you'd use GetMem/FreeMem for that, but those are directly equivalent to C malloc/free - you supply the size, in bytes, and you get a memory block of that size.

    229. Re:Maybe I'm missing something by drew_eckhardt · · Score: 1

      While languages are easy, transitioning from language controlled resource management (as in languages with garbage collected language memory management) to programmer controlled (as in languages with garbage collected memory management that do nothing with other resources like file descriptors) is harder.

      I've seen situations where "java programmer" graduates meet the real world with file descriptor leaks that bring down "enterprise" systems resulting in customer outages with pagers going off, and would much rather have ones used to dealing with their own resource management.

      In an ideal world the language people would have used reference counting, but we don't live in an ideal world.

    230. Re:Maybe I'm missing something by mehemiah · · Score: 1

      in other words, if you learned C++ you learned C plus some extra syntax and a different style of programming and different libraries.

    231. Re:Maybe I'm missing something by mehemiah · · Score: 1

      this is indeed, an important distinction, many here dont know what A level means as we aren't from the UK.

    232. Re:Maybe I'm missing something by qux410 · · Score: 1

      the department head has said I wasn't likely to teach again, because I tended to focus on technologies that weren't relevant to our students, like web programming and SAAS.

      The department head is a fucking moron. I'm sorry, but it had to be said. I graduated in December with a degree in IT, but despite my formal qualifications, I consider myself very much a self-taught programmer. Since the age of 13, my fascination with programming has become a border line obsession, especially when it comes to kernels or compilers. I have a wide range of skills and languages under my belt, including (naturally) asm and C. Since graduation, I haven't been able to land a single friggin interview here in lil' ol New Zealand. Meanwhile, guys who did the same degree as me and who have no fucking idea as to how the underlying machine works are all landing jobs as 'programmers'. Apart from the first wee gem, I'm sorry if I sound arrogant; I'm just incredibly frustrated with the whole situation. WTF is going on? *sigh*

    233. Re:Maybe I'm missing something by flabordec · · Score: 1

      "Brain surgery is hard. Medicine students should dive directly into brain surgery without even knowing the difference between the heart and the stomach. Think of how not knowing brain surgery will affect their flu patients!"

      --
      "I see undead people" Warcraft III - Necromancer
    234. Re:Maybe I'm missing something by StillNeedMoreCoffee · · Score: 1

      Not many can do all those things, but boot loaders and compilers and operating systems are a very small niche and only a select few in a few companies acually do work in those areas. In schools they play with all those things but 90% + of the real jobs out there are writting application code for business or software that business will use. Not a complier or driver in sight. A company with a hundred programmers might have one or two that actually do low level stuff.

      So my contention is even though C is turing complete, for most work it is more work that it is worth. But I have seen menu driven systems written in Cobol and transaction systems written in APL used commercially, not to mention all those Lotus Notes and Excel applications.

      For me I know C, C++, Java, C#, Perl, APL, Fortran, and a smattering of other languages. I use what seems appropriate and for the application work I do, C ain't. C++ is on the edge because of all the extra administrative stuff and having to use bounds checker etc to protect your ass.

    235. Re:Maybe I'm missing something by Darinbob · · Score: 1

      The devices that use those things are not a small niche though. Every one uses that style of programing underneath. And the vast majority of computing devices stay near the operating system level with a single application. 90+% of real computers out there are not PCs and are not on the web.

      C found it's niche because there's a huge need for it, and huge enough that you can't really call it a niche. Anything underneath the "app" is the system, including the OS, network, runtime libraries, garbage collection, etc. And there are few languages that fit the role of being a systems language (though even Smalltalk has managed it).

      C also fits the niche for where programs must be relatively small. This is most programs out there. Embedded systems for instance. Also it fits into the niche where you need fast and tight code (though it's not the only language there).

      Of course, C++ fits into most of those niches as well, since it lets you program just like it were normal C as well with only enough advanced features as you need.

      Of course, maybe you're right in that if there are 100 programmers in a company (presumably some generic business oriented thing) then only 2 do low level stuff. But at the same time consider that there may be 1000 at the company that don't program and only 100 merely doing programming. It's perspective. If low level and systems programming is pointless because most programmers don't do it, then maybe programing is useless because most humans don't do it.

    236. Re:Maybe I'm missing something by StillNeedMoreCoffee · · Score: 1

      "Of course, maybe you're right in that if there are 100 programmers in a company (presumably some generic business oriented thing) then only 2 do low level stuff. But at the same time consider that there may be 1000 at the company that don't program and only 100 merely doing programming. It's perspective. If low level and systems programming is pointless because most programmers don't do it, then maybe programing is useless because most humans don't do it."

      A specious argument. Rightly so much underlying code for compilers and operating systems is written in C. More and more though they are written in more transportable languages giving the business instantly mulitple delivery platforms. But my point was that the vast majority of the ongoing work for programmers is not in C but in higher level application friendly languages. That is not to say that there aren't more lines of code on a particular box that were written in C, like OS and drivers etc. but that code is write once by a small group and fielded all over. Most of the programming and work for programmers is the business applications work that keeps the wheels of commerce running.

      So it does matter that the number of programmers around doing C vs other languages is pertinent. The larger the disparety between those numbers, the more C would be considered Niche.

      Now I grant you that if you look at the elite programmers, the ones doing the hard low level glory work writing OS's, languages and software packages you are looking at the best of the best, but then that is a niche isn't it? I do not make a judgement as the the importance of the code done with C, or the skill needed but still it is a small market. There still is a great demand for C programmers because a lot of code was written in C and needs to be maintained, and a number of shops are C shops because all their code is in C but that is just inertia, and the cost of converting all that code to something else , more modern or better. Cobol programmers for that matter are highly sought after for the same reasons.

      With modern optimizing compilers a lot of the hand optimizatons that programmers so assiduously do is wasted effort. What is it the figure, Fortran today benchmarks 10 or 20 times faster than the best C or C++ code for some mathematical benchmarks because it can optimize a lot because of its language design.

      For tiny embedded systems you can't beat it currently, but the compilers just have to catch up and some devices not run Java natively. So things are going in many directions at once.

  2. C is key by nailchipper · · Score: 4, Insightful

    What a shame. C is an important foundation.

    --


    what is nailchipper?
    1. Re:C is key by 16Chapel · · Score: 4, Insightful

      Quite. And VB is a horrible abomination.

      In all seriousness, if you learn a C-based language it gives you a huge headstart towards learning the other C-based languages, and there are far more of those out there than Basic-type languages.

    2. Re:C is key by Threni · · Score: 2, Funny

      Look on the bright side - people can now learn VB6 instead...

    3. Re:C is key by Anonymous Coward · · Score: 0

      other C-based languages, and there are far more of those out there than Basic-type languages.

      ORLY?

    4. Re:C is key by hattig · · Score: 1

      The Computing A Level isn't designed to teach you specific languages, it is designed to give a broad spread of (pre-degree level) computer science knowledge, part of which is programming. It is the programming concepts that matter most, and they can be learned with Java, Pascal or Python quite well. I did Pascal when I did my A Levels um, 16 years ago.

      Getting rid of PHP is good, in my opinion.

      Anyway, most UK Computer Science degrees say they would rather no A Level Computing because they have to spend time un-teaching bad habits. Looking at the VB6 option, I can see why.

    5. 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.
    6. Re:C is key by 16Chapel · · Score: 1

      Hmmm.... perhaps I should have qualified that, by 'out there' I meant 'in current use'.

      Unless you're really telling us that, e.g. "Atari 2600 Basic Programming" is alive and well.

    7. Re:C is key by Trepidity · · Score: 1

      Indeed: debugging subtle bugs in the C preprocessor gives one an important insight into computer science and software engineering.

    8. Re:C is key by ChrisMP1 · · Score: 1

      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.

      That's because the teacher is lazy. Yes, you can teach Python without actually teaching. I agree that C is the place to start. Doctors start with anatomy; programmers should start with C. However, Python is great for some things. You can get into some pretty advanced object-oriented topics, and even things like metaprogramming quite cleanly, and the language stays out of your way so you can focus on the concepts.

      Even the way it works with objects doesn't have to be treated like a black box. It's really quite simple. I don't know about your 'integer as string' problem; I've never seen that, and would probably have to know exactly what's going on. Python's data model is really nice, and a great way to teach things like object proxying. Again, the language gets the hell out of your way so you can program.

      --
      <sig>&nbsp;</sig>
    9. Re:C is key by samson13 · · Score: 1

      I'm not sure that I'd want to learn C as my first language. Such a general and powerful language can get in the way of the lesson being taught.

      I'm a fan of swapping between whatever language suits the lessons being taught. It helps the lesson by getting rid of the hoops you need to jump through to make it work. As a side effect it removes the fear of using a different language that some people have.

      I think pascal is a good general purpose teaching language. Java maybe but I think the OO + structures libraries would hide the lessons that should be taught. Don't know python. VB could be used as an example of what not to do.

      In high school we used Pascal as the teaching language. The move to C for a robotics competition we entered was trivial because by that stage we had enough background to cope with the typing and pointers that C doesn't baby you with.

      A uni course I did used C++ and java for OO. I struggled a little because the languages weren't pure OO and a lecturer who didn't understand OO lead to the languages being misused. I think it would have been easier to get the point if we had one of the extremely theoretical OO languages.

    10. Re:C is key by TheRaven64 · · Score: 2, Funny

      Using the C preprocessor teaches you one very important thing:

      Think very carefully before releasing an ugly, badly designed, piece of crap, because in 40 years time it may still be part of an ISO standard and entire generation of programmers will hate you.

      --
      I am TheRaven on Soylent News
    11. Re:C is key by Opportunist · · Score: 1

      Doesn't it have "job security" written all over?

      For you, of course. Not the guy studying.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    12. Re:C is key by Anonymous Coward · · Score: 0

      This loosely translates to "we want to entertain the students rather than teach them."

      It's very easy to underestimate how important "being entertained" is to learning.

    13. Re:C is key by marcosdumay · · Score: 1

      Well, I'm a big fan of entretaining the students. Motivated people learn way faster than bored ones, and starting with a simpler language doesn't mean you can't use a more complex one later. That's why I think Pascal is ideal for a introdutory course for CS students.

      That said, I'm yet to met those great programmers that don't know C that a previous poster was talking about. I know even promissing ones, but no great one.

    14. Re:C is key by Anonymous Coward · · Score: 0

      Disclaimer: I am a high school computer science teacher who uses Python in his classroom.

      I assume the OP is referring to the fact that raw_input() reads all values as strings. Thus, reading something like this:

      n = raw_input("Enter the number of widgets: ")

      would return a string instead of an integer. So if the user enters 5, Python reads it as "5" instead. A proper call would include typecasting, such as:

      n = int(raw_input("Enter number of widgets: "))

      You probably know this already, but OP might have had a teacher that did not adequately explain dynamic data typing and typecasting in Python. In this case, the fault lies clearly with the teacher, and not the language.

    15. Re:C is key by Dorkmaster+Flek · · Score: 1

      I'm a big fan of Python (we use it for 99% of the internal code we write in my company), and I'm even fooling around with learning some game programming using it. I think it's an incredibly awesome language, and honestly a really good one to teach people programming basics if they've never programmed before...mostly. You hit the nail on the head with the dynamic typing. It can be really useful, but you need to keep track of what types your variables currently are, and that can confuse a lot of newbies. Still my favourite language to work in, by far, though.

      --
      I like to think of online DRM as something akin to a college -- you pay for lessons until you learn something.
    16. Re:C is key by geminidomino · · Score: 1

      This loosely translates to "we want to entertain the students rather than teach them."

      It's very easy to underestimate how important "being entertained" is to learning.

      Amen... Even the most fascinating subjects (A.I. in my case) can be rendered all but unlearnable when studying them is like putting a triple-thick milkshake in the freezer for a week, then trying to drink it with a broken straw.

    17. Re:C is key by geminidomino · · Score: 1

      Two generations now. :)

    18. Re:C is key by mzs · · Score: 1

      Too bad m4 never caught on, sigh. It ticked me off when C++ programmers started using the .cpp extension, that was what I was using in my suffix rules to run the C preprocessor in my Makefiles. When you have to do that or put things in different files and #include them with two levels of redirection to get the behavior that you need, you know who to thank for such a good prepossessing system!

    19. Re:C is key by Luke+has+no+name · · Score: 1

      I didn't think much of the title. "Oh, sure, C++ is just as good and allows you to learn OO and use strings!" Then I see they have VB but NOT C++.

      Ugh.

      Python is becoming a popular language as kind of a compliance with Chapter 7.6.5 of the ACM CS2001 [url=http://www.acm.org/education/education/education/curric_vols/cc2001.pdf]Curricula recommendations[/url].

      My university's collegiate CS path currently goes Python -> Java -> C++ and lower.

    20. Re:C is key by thoughtsatthemoment · · Score: 1

      Indeed: debugging subtle bugs in the C preprocessor gives one an important insight into how to make an overly complicated compiler

      FTFY.

    21. Re:C is key by shutdown+-p+now · · Score: 1

      Quite. And VB is a horrible abomination.

      VB6 was. VB.NET and further editions are fine - semantically, it's pretty much the same as C#, with minor variations, and more verbose syntax with less punctuation and more keywords - especially if you force Option Strict On, disabling most implicit casts.

    22. Re:C is key by Mr.+Freeman · · Score: 1

      You know what, I think that's exactly what was going on.

      The teacher I had was a complete moron and didn't even understand the code I was trying to show her that had this problem. I eventually was able to fix it because of my knowledge of C.

      I'll admit I think that class gave me a negative view of python. Perhaps I'll go reconsider my opinion.

      --
      -1 disagree is not a modifier for a reason. -1 troll, flaimbait, redundant, overrated are NOT acceptable substitutes.
  3. So what? by jawtheshark · · Score: 2, 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.

    --
    Ahhh...the great dumpster continuum. Many a free computer will be found there. -- sowth (748135)
    1. Re:So what? by Anzya · · Score: 2, Insightful

      That might be the case but your chances of getting hired is greater if you have C on you resume than pascal.
      If they wanted a language that is simple to learn they could have chosen python instead. It's just as easy as pascal but has the benefit that it is actually used in the industry.

      --
      "This message was brought to you by Sarcasm and Troll Feeders United (or STFU, for you un-hip people)."
    2. Re:So what? by Antiocheian · · Score: 2, Insightful

      If you can program in Pascal, you can program in C

      But if you can program in C you are wasting your time with Pascal.

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

    4. Re:So what? by burni2 · · Score: 1

      But if you can program in Pascal you will fairly easy learn FORTRAN which is still used to date mostly in HPC.

    5. Re:So what? by Anonymous Coward · · Score: 0

      If they wanted a language that is simple to learn they could have chosen python instead.

      Are you sure you're posting to the right story?

      From the summary:

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

    6. Re:So what? by Rockoon · · Score: 1, Interesting

      But if you can program in C you are wasting your time with Pascal.

      Explain that to the programmers that went from Pascal to C, said "WTF THIS SUCKS", and moved back to Pascal and then on to Delphi when it hit the shelves.

      --
      "His name was James Damore."
    7. Re:So what? by Anonymous Coward · · Score: 0

      Disagree. Please talk to people who come from C background and try to program in C++. Complete mess!
      There is a great paradigm shift between procedural and object oriented languages. I think the Universities should concentrate on the concepts of object oriented programming than go back to the old days when procedural was the norm

    8. Re:So what? by Antiocheian · · Score: 2, Interesting

      But if you can program in C you are wasting your time with Pascal.

      Explain that to the programmers

      Linux, Windows, (Open)Office, Firefox, Nethack, Doom, etc, etc, etc.

    9. Re:So what? by Anonymous Coward · · Score: 2, Informative

      We're talking about A Levels here, two years of education between 16 and 18. To get hired into a serious position as a programmer a Computer Science degree is usually required.

      Disclaimer: I learnt Pascal during my Computing A Level and it didn't do me any harm!

    10. Re:So what? by somersault · · Score: 1

      Pascal would be much better compared to C++ than C.. I'd take Pascal over C unless the concern was raw speed.

      --
      which is totally what she said
    11. Re:So what? by Anonymous Coward · · Score: 0

      Eh. While it's true that learning concepts will get you far, any time you change languages with different conceptual constructs than those which you're used to, there's going to be problems. What rather upsets me about taking C off of the list is that now it's all just strictly higher level languages. C can be good to teach you a lot of underlying things that the others handle for you. And I really don't care what anyone says--those things that C (and more so ASM) taught me *do* make me a better coder with higher level languages. I started with a couple dialogs of VB, using VB6 last just before .NET came out. Then I briefly switched to C++ before deciding to take some time coding several algorithms in ASM and then C. When I felt a grasp on that, I returned to C++, relearned all of the OOP, and that's where I've chosen to stay for my hobby programming purposes (coding mostly nothing but little tools that I use throughout my own personal computers for several tasks, or just fun little programs). I'm biased, but I think I can code cleanly in C or C++, knowing what to take advantage of in each. Of course, I also have a side job as an independent consultant coding in a VBA-like language, which I still highly value my ASM, C, and C++ experience for--as simple as VBA is, there's things I understand that make it nothing but utterly painful for me to watch those I work for attempt to figure out what their doing with even the simplest of VBA code, and some of these people have had a number of computer programming courses in college, learning BASIC.

    12. Re:So what? by Anonymous Coward · · Score: 0

      I'd take Pascal over C unless the concern was raw speed.

      I'd take C over Pascal unless I was paid by the character count in my source code.

      When you produce a lot of code, less keystrokes per feature means you can create more code for the same effort, which means you get paid more. It's faster to type "{" rather than "begin", in the end of the day it adds up to a significant saving.

      That's the reason I prefer to code in Python now, and that's also why I don't like Python version 3, they made everything more complicated to write.

    13. Re:So what? by TheRaven64 · · Score: 1

      Half of those projects are C++, which is a very different language to C, although it shares a (very) small common subset. Aside from that, you've established that lots more people use C than Pascal, but not that many people who know both C and Pascal choose C. I'm not a fan of the verbosity of Pascal, but some of its constructs are nice and the standard calling convention is much more sane. Given the choice, I'd take PL/M over either of them. If your 'low-level' language doesn't let you use all of the power of your target system's MMU, it's not a low-level language it's a PDP-11 simulator.

      --
      I am TheRaven on Soylent News
    14. Re:So what? by TheRaven64 · · Score: 1

      And anyone who thinks that C++ is an object oriented language should not be giving advice. If you want OOP, you want a language like Smalltalk, Ruby, or even Java. C++ is a procedural language with support for encapsulation and generic programming. It fails the Ingalls test and doesn't come close to being object oriented.

      --
      I am TheRaven on Soylent News
    15. Re:So what? by Anonymous Coward · · Score: 0

      No. C is pointer based, Pascal isn't. This is a non-trivial difference; pointers is a concept that many people have a lot of trouble with.

      Apart from that, other concepts that people have problems with are folds, continuations, objects, and actually reaping the benefits of dynamic typing (or of static typing, really).

      I've programmed for close to three decades, and know 20+ programming languages; picking up a new programming language generally isn't hard, but getting to do it well is more work than I used to think - I've written some atrocious code in my day and thought it was fine.

    16. Re:So what? by Halo1 · · Score: 1

      I don't know about you, but I always spend way more time on debugging than on typing code. If your programming speed is largely limited by how fast you can type in the code: respect!

      --
      Donate free food here
    17. Re:So what? by somersault · · Score: 1

      Actual programming time will probably be insignificant compared to UI/algorithm planning and design, and as Halo1 says, debugging time. Delphi pretty much writes out begin/end for you using code completion anyway. There are a couple of places where I find it annoying, but overall it's decent. I'd say C looks neater, but I've never had a problem typing out begin/end either.

      Besides, I get paid at a fixed rate, not by how much code I produce. I've spent a lot of time this year playing around with ideas to improve our in house web apps.

      --
      which is totally what she said
    18. Re:So what? by terjeber · · Score: 1

      One programming language is like the other, at least within the same paradigm

      This is quite true and quite important. This is why C, PHP, Fortran, COBOL, PHP, Basic of any kind etc, should be off the curriculum. They encourage bad habits, or at least do not encourage good ones.

      In my NSHO, the best two languages to use today would be Java and C# if you want to teach directly relevant languages. Ruby and Python if you want to teach great habits. With Java and C# you could even include a framework like Spring making the student able to do really interesting things while both learning DI and other good things and teaching the fun stuff.

    19. Re:So what? by terjeber · · Score: 1

      Did he say that C++ was an object oriented language?

    20. Re:So what? by multipartmixed · · Score: 2, Insightful

      > 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

      REALLY?

      JavaScript engines -- with the exception of the one shipping with IE prior to version 9 -- have been cheating on this for performance reasons for a decade. It's a very important performance optimization, because of the html += "" idiom that is so prevalent on the web.

      A similar idiom to String.Format exists in javaScript as well: string = [ "Hello", "World" ].join();

      I think the lesson here is one of:
      a) .NET languages suck, or
      b) Premature optimization is the root of all evil

      Maybe both :p

      --

      Do daemons dream of electric sleep()?
    21. Re:So what? by jedidiah · · Score: 1

      > What's the big deal? One programming language is like the other, at least within the same paradigm.

      No not really.

      Not all programming languages are equal. Some are much better at achieving the same objective. Some subject to a lot of extra nonsense and needlessly restrict what you can do while others don't expose certain features or ideas at all or do it poorly. Some languages tend to teach you bad habits you just have to unlearn later on.

      --
      A Pirate and a Puritan look the same on a balance sheet.
    22. Re:So what? by jgrahn · · Score: 1

      And anyone who thinks that C++ is an object oriented language should not be giving advice. If you want OOP, you want a language like Smalltalk, Ruby, or even Java. C++ is a procedural language with support for encapsulation and generic programming. It fails the Ingalls test and doesn't come close to being object oriented.

      I had never heard of the Ingalls test, so I googled it. All references were in Powerpoint presentations which I was unable to read, but I understand it was defined by ... the inventor of Smalltalk.

      So inventor of $FOO says $BAR doesn't have the desireable property $baz, if $baz is narrowly defined by the inventor of $FOO. How surprising.

    23. Re:So what? by DrPizza · · Score: 1

      There's more than one way to skin the OOP cat. Message-passing, like Smalltalk, is not the only way.

      Simula, the first OO language, that predates Smalltalk, and predates the term OO, uses a model that's very similar the one used in Java/C++/.NET. To say that C++ is not "object-oriented" is absurd.

    24. Re:So what? by TheRaven64 · · Score: 1

      Simula does not predate the term OO. It was coined by Alan Kay in the early '60s to describe his style of programming. Smalltalk was created, borrowing some concepts from Simula, to embody this style of programming. Java has a Smalltalk-style object model. C++ has a Simula-style model (among other things). Aside from some superficial syntactic similarities, they are entirely different languages.

      --
      I am TheRaven on Soylent News
    25. Re:So what? by jisatsusha · · Score: 1

      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?

      I'd hope you didn't believe that at all. I can't really speak in terms of memory usage, but in terms of CPU time, using String.Format() as you described is actually takes around 50 times as long as simply using the + operator.

    26. Re:So what? by DrPizza · · Score: 1

      Java may have a single-rooted hierarchy, but its OO model (static typed, v-table lookups) is _not_ the same as Smalltalk's (dynamic typed, message name lookups (though I think with optional use of selectors? Certainly in Obj-C, so I assume also in Smalltalk). Java's style of OO is the same as C++ and Simula.

    27. Re:So what? by geminidomino · · Score: 1

      Half of those projects are C++, which is a very different language to C, although it shares a (very) small common subset.

      That's really overstating it. Granted, the misconception that C is a proper subset of C++ is common, but even if you consider the divergence between the two in C99, you've gone off the deep end by saying it's only a "(very) small...subset"

    28. Re:So what? by TheThiefMaster · · Score: 1

      Joining two strings into a result is a bad example, because you'll end up with one new string either way.
      A better example is:
      "One" + "Two" +"Three"
      would normally construct a temporary string containing "OneTwo", then construct another string containing "OneTwoThree". This is because it is two "+" operations, so it's done as two steps.
      Ignoring whether or not that's actually true in C# (especially in an optimised build), I can't verify it now.

      The alternative is:
      String.Format("{0}{1}{2}", "One", "Two", "Three")
      which is one operation, with three strings.

    29. Re:So what? by TheRaven64 · · Score: 1

      The type system is completely different in the two languages, that's a big difference. Pointer cases in C are just hints to the type checker, while they can be pointer arithmetic expressions in C++, that's a huge difference. C globals (including functions) are exported to the linker directly (with a simple prefix on some platforms), while C++ globals are all mangled before they go to the linker - this is a subtle difference but makes a significant difference to the language semantics.

      Syntactically, C99 is very close to a subset of C++. Semantically, they are very different languages.

      --
      I am TheRaven on Soylent News
    30. Re:So what? by mzs · · Score: 1

      That's why I try to use python when I can. All that time I would have spent typing braces or withs, compiling, linking, and debugging, I spend commenting and writing tests.

    31. Re:So what? by Matthew+Dunn · · Score: 1

      Yes, your example with three strings is better. Thank you, Thief. Using the StringBuilder class is better again if you need to dynamically build large strings of course.. But this discussion over String.Format proves my point...There's a very large amount of 'best practice' that goes along with any language. The longer you've been using a language, the more of these you're aware of. Teaching mainstream languages would make it a bit smoother to enter employment, no doubt.

    32. Re:So what? by Anzya · · Score: 1

      They also said that Pascal/Delphi was highly recommended. I believe that it's mostly because of "historical" reasons. I wouldn't use runes as a precursor to teach the use of the latin alphabet. ;)

      --
      "This message was brought to you by Sarcasm and Troll Feeders United (or STFU, for you un-hip people)."
    33. Re:So what? by shutdown+-p+now · · Score: 1

      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

      You're plain wrong. String.Format will create a new string instance just as well, and it will do it slower because it has to parse the format string first.

      If you don't want to spam instances, and want a resizable buffer, that's what StringBuilder is for (and ditto for Java).

    34. Re:So what? by shutdown+-p+now · · Score: 1

      You forgot, c) GP doesn't have any clue what he's talking about.

      In .NET, if you have a predefined number of strings that you want to join efficiently, you'd use String.Concat() if there's no delimiters between, or String.Join() if there are. If you need to build a string from a number of components not known in advance (e.g. while looping over a collection), you'd use StringBuilder.

      Also, C# at least will actually treat something like (a + b + ... + z) as syntactic sugar for String.Concat(a, b, ..., z). I.e. you won't have a new string being created for every application of operator+. It doesn't transform += to StringBuilder, though, mostly because the as-if rule is not applicable here (it has to preserve observable string identity).

  4. Ah, Memories. by daitengu · · Score: 3, Funny

    This warms my heart, the first language I learned was TurboPascal just so I could program Door Games for my BBS. I still run a BBS I still haven't written any door games.

    1. Re:Ah, Memories. by Civil_Disobedient · · Score: 1

      Aaah, door games. The MafiaWars/Farmville of the early 90s.

    2. Re:Ah, Memories. by Anonymous+Struct · · Score: 1

      That's because BRE, TradeWars 2002, and LoD already exist. What's left to write?

    3. Re:Ah, Memories. by mzs · · Score: 1

      So true, though mom never played Drugwars.

    4. Re:Ah, Memories. by soppsa · · Score: 1

      Usurper of course!

  5. Insider information by Anonymous Coward · · Score: 0

    I'm doing this course currently (finishing it in a few months) and was "taught" Pascal and Delphi. There were numerous problems with Borland (the company who produce the Delphi IDE) removing the free download links for an older version of the software, leaving pupils without access and unable to complete coursework during school holidays, etc.
    I personally did my coursework in Python (with GTK) but I really can't see how some of my classmates would be able to get their head around box-packing or object oriented programming, for that matter - they seem to find the concept of functions and passing variables challenging enough.
    I understand why they've removed C really, though it saddens me and I'm glad that they've removed C#. PHP surprises me though perhaps the kids find writing an interface in HTML too challenging?

    1. Re:Insider information by somersault · · Score: 2, Informative

      PHP surprises me though perhaps the kids find writing an interface in HTML too challenging?

      I think you've got that the wrong way round. To use PHP effectively to build a web app, I think you'd need a good basic understanding of HTML to start with. Of course it's been years since I used PHP, and at Uni we just used to generate raw HTML rather than using any fancy formatting libraries.. which is often what I still do, when I started programming I was living in an offline world and I'm still used to thinking I have to write everything from the ground up rather than searching for libraries to do what I want.. I suppose I learn more about how things work that way, but it's not very efficient.

      --
      which is totally what she said
  6. Oh yea. Teach them non mainstream stuff by unity100 · · Score: 4, Insightful

    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.

    1. Re:Oh yea. Teach them non mainstream stuff by giuseppemag · · Score: 0

      I don't really think VB.Net, Java or Python can be dubbed as "watered down, obscure platforms". On a side note, trying to teach abstract reasoning without declarative (logic/functional) programming sounds a tad contradictory...

      --
      My book: Friendly F#, fun with game development and XNA; my game: Galaxy Wars by VSTeam; my gamedev language: Casanova.
    2. Re:Oh yea. Teach them non mainstream stuff by patch0 · · Score: 1

      In my A-Level in electronics we had to learn to program in machine code. Rather than teach us a real instruction set they made one up so as not to 'give unfair advantage to a student who might know an existing instruction set'... what crap. How many 17 year olds you know are gonna be overly familiar with a particular instruction set?

    3. Re:Oh yea. Teach them non mainstream stuff by Rockoon · · Score: 2, Interesting

      When I was 17, that would have been me.

      By that time, 6502 and 8086.

      --
      "His name was James Damore."
    4. Re:Oh yea. Teach them non mainstream stuff by RegularFry · · Score: 4, Insightful

      Alternatively, if the first thing they learn is that they *will* have to learn new languages, and that they can't rely on a single skill-set to carry them through their career, that's got to be a good thing.

      --
      Reality is the ultimate Rorschach.
    5. Re:Oh yea. Teach them non mainstream stuff by Rockoon · · Score: 1

      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.

      You sound as if you believe that they will be using C and PHP in the industry.

      While both C and PHP have strong roles in the industry, they have become narrow use languages. The overlap with other languages favors those other languages in nearly every case. For example, I don't look for a C programmer when I need database work done, even though C is certainly more than capable.

      --
      "His name was James Damore."
    6. Re:Oh yea. Teach them non mainstream stuff by Anonymous Coward · · Score: 1, Insightful

      Computer Scientist != Code Monkey

      Sounds like you are the latter.

    7. Re:Oh yea. Teach them non mainstream stuff by Anonymous Coward · · Score: 0

      Me too. My A-level project was an IDE for 6502 assembly language written in 6502 assembly. And I'd also written the firmware for an electronic gadget some of the other kids at school developed using some obscure Intel embedded processor whose number I forget. And I'd written a floating point emulation library and a ray tracer using it in ARM assembly language. And I was fairly familiar with the 8086. That's four instruction sets.

    8. Re:Oh yea. Teach them non mainstream stuff by unity100 · · Score: 1

      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.

      You sound as if you believe that they will be using C and PHP in the industry.

      While both C and PHP have strong roles in the industry, they have become narrow use languages. The overlap with other languages favors those other languages in nearly every case. For example, I don't look for a C programmer when I need database work done, even though C is certainly more than capable.

      i am currently coding in php with numerous projects waiting the completion of this one, and i dont see it being any kind of 'narrow use' language. it is as narrow as the web.

    9. Re:Oh yea. Teach them non mainstream stuff by unity100 · · Score: 2, Insightful

      yea. and we need bazillions of computer 'scientists' in the industry, as can be seen from the hirings ............. not.

    10. Re:Oh yea. Teach them non mainstream stuff by MattBecker82 · · Score: 1

      In my A-Level in electronics we had to learn to program in machine code. Rather than teach us a real instruction set they made one up so as not to 'give unfair advantage to a student who might know an existing instruction set'... what crap.

      Crap indeed. Why should knowledge gained off the course constitute an unfair advantage? Imagine applying that principle in other subjects.

      I took A-level Music. Does the fact that I'd studied piano for ten years mean I had an unfair advantage? As part of the course we studied Mahler's first symphony. Does the fact that I already knew this symphony mean I had an unfair advantage? The performance directions in the score for this symphony are in German. Does the fact that I speak German mean I had an unfair advantage? If yes, then wouldn't it only be fair to translate the performance directions into an imaginary pseudo-language?

      The exam should test your knowledge of the field, not your ability to learn the field as taught in this particular curriculum!

    11. Re:Oh yea. Teach them non mainstream stuff by oh_my_080980980 · · Score: 1

      "teach these using a languag WILL use when they actually get into industry, than with stuff they may rarely come up against. "

      Really? And what language will people be using in 4-6 years?

      That's the point. The language is not important. It's not a language course, it's a programming course. You are teaching programming concepts not the details of a language. Take a freakin' language course to learn the language.

      FYI COBOL is still widely used in the financial sector...maybe they should teach COBOL.

      Jackass!

    12. Re:Oh yea. Teach them non mainstream stuff by Rockoon · · Score: 1

      it is as narrow as the web.

      If ($purpose == "web development") {echo "maybe use php";} else {echo "php is the wrong language";}

      Thats the fucking definition of narrow use. Spare us your myopic web developer view of the industry.

      --
      "His name was James Damore."
    13. Re:Oh yea. Teach them non mainstream stuff by unity100 · · Score: 1

      yea it is.

      and you should spare us your talking bullshit without things you dont know enough about.

      after all, 10 do something 20 goto 10 can define basic in that respect.

      what you are doing is pricky ignorant elitism. ironic that ibm doesnt think like you do.

      http://www.ibm.com/developerworks/opensource/library/os-php-7oohabits/

    14. Re:Oh yea. Teach them non mainstream stuff by hlee · · Score: 1

      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.

      I disagree as it depends on what you're teaching. Concepts like recursion and algorithms are best taught with functional languages. E.g. quicksort is a lot shorter and easier to understand in Haskell than in C - see http://www.haskell.org/haskellwiki/Introduction.

      We generally agree that you need to pick the right language for a given task - the task of teaching various computer science concepts is no different. Also, a good curriculum should impart students with the ability to pick the right language for a given task too.

      If you're interested in pursuing a computer science degree at university, you might be better off without a background in a imperative/procedural language. Many students who knew C/Pascal seemed to have a tougher time grasping functional languages than those who didn't know anything at all.

    15. Re:Oh yea. Teach them non mainstream stuff by david_thornley · · Score: 1

      If you didn't gain much from learning Fortran and Pascal, and it wasn't because you'd already learned languages with the same concepts....I'd really rather not work on the same project as you.

      However, you do have a point: those languages are too similar to the popular ones to be really worthwhile. Take somebody who knows Java, say. Fortran and Pascal won't have that much to teach him. Scheme or Common Lisp, on the other hand, or Haskell, or much of C++, are worthwhile learning, because they'll teach different concepts.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    16. Re:Oh yea. Teach them non mainstream stuff by Rockoon · · Score: 1

      Gee, IBM offers up some "best practices" for PHP and you start drooling about how great PHP is and start declaring "elitist" when it is, in fact, you who are being elitist?

      Its fine for specifically a Web Development 101 class and so forth. Nobody is saying its a shit language. Its just not generally useful, only specifically useful. You take specific courses in school to learn specific domains. You don't take general courses to learn specific domains.

      And I quote, "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."

      PHP is a horrible language for this course.

      --
      "His name was James Damore."
    17. Re:Oh yea. Teach them non mainstream stuff by unity100 · · Score: 1

      no fool.

      you have portrayed a picture painting php as a very simple language, as if being simple was something bad.

      therefore i cited the ibm example, which shows how complex constructs can be used to perform various duties in an object setting.

      the blandness/complexness of a language can be understood from the simplest building block and on. with simple building blocks, extremely complicated logical constructs can be created. i could take the simple if construct you belittled and create an immensely complex set of logical constructs and routines over it. there are php apps that span 30,000 lines and perform immensely complex set of tasks, and sold from $20-30 k price range. yet you dont know shit about these.

      i called you an elitist, i overdid it. sorry. you are very probably young, and you are a wannabee yet. when you work enough in industry, complete projects, you will eventually learn many of the stuff above and many more that i cant spare time to talk about here.

    18. Re:Oh yea. Teach them non mainstream stuff by Rockoon · · Score: 1

      i could take the simple if construct you belittled

      Thats very telling. PHP is so niche that when someone posts PHP statements, its considered to be belittling PHP by default.

      The intention clearly was not meant to belittle PHP, but simply to stress its niche nature. Its a fucking niche language. Get fucking over it. Plenty of people use niche languages to good effect. Knowing that the language is niche does not take away from its usefulness within the niche. Being embarrassed by the niche nature of PHP is very telling about your own confidence in your own abilities.

      --
      "His name was James Damore."
  7. Serious applications are still written in Delphi by ZP-Blight · · Score: 0, Troll

    We've been using Delphi to develop our project (see sig) for years and we find it very intuitive and friendly to design user-interface based Win32 applications. I personally feel that Pascal's syntax is much clearer than most languages and yet flexible and powerful enough to develop major projects, making it ideal for teaching client-side programming to newcomers.

    The only sad thing about Delphi (which I hope will be rectified) is:
    1. No 64bit compiler.
    2. No mobile platform support (except maybe .NET for WinCE devices, but those are dying out due to iPhone/BB/Android and even WinMo7 which is turning into an even more simplified iPhoneish design).

    --
    Zoom Player Lead Dev.
  8. Visual Basic? by tagno25 · · Score: 4, Insightful

    Why are they accepting Visual Basic 6, but not C++, Ruby, or even LISP?

    1. Re:Visual Basic? by Anonymous Coward · · Score: 0

      Anyone promoting Visual Basic should be shot. What a horrible language. We're forced to use that crap at work and spend our time translating help and support answers from C#.

      We wouldn't be stuck with BASIC anymore if it hadn't been Microsoft's first product. They've been forcing that junk down our throats for 35 years.

    2. Re:Visual Basic? by V!NCENT · · Score: 1

      Look at it from this way: The industry is full of crap programmers.

      Awesome programmers will teach themselve C and/or C++, while crappy programmers won't realy teach themselves VB that well...

      If programmers with a brain can learn C on their own (they probably already know the most of CS before they even attend) why not teach stupid people (ending up doind MS shit anyway) how to at least do it right.

      You do not want self-taught crap languages being performed by idiots. You want that idiots use the crap languages in such a way that it doesn't suck extremely.

      Right?

      --
      Here be signatures
    3. Re:Visual Basic? by Anonymous Coward · · Score: 0

      Funny. Before complaining that the VB was "garbage" because it was interpreted. Now most of the "Top languages" are interpreted or terrible slow, but are treated like the best thing in the universe. Before a language crude, slow, poorly developed as JavaScript would be ignored, but now is treated as the best thing in the universe.

      Fashions are a plague.

    4. Re:Visual Basic? by TheRaven64 · · Score: 1

      Because it's a school-level course. If you are a moderately competent programmer, you can easily earn double a teacher's salary in industry. This means that the only people teaching the course will be ones that really love teaching, or ones that are not really qualified. The former is in quite short supply, and many of those have been driven away by ludicrous curriculum and bureaucratic requirements by the last two decades of governments. A bad teacher can teach something like VB and not do a huge amount of damage. Can you imagine someone who barely understands the concept of functions trying to teach Lisp?

      --
      I am TheRaven on Soylent News
    5. Re:Visual Basic? by Anonymous Coward · · Score: 0

      Why are they accepting Visual Basic 6

      Prerequisite to be eligible for MSDNAA? Who knows.

    6. Re:Visual Basic? by atamido · · Score: 1

      Funny. Before complaining that the VB was "garbage" because it was interpreted. Now most of the "Top languages" are interpreted or terrible slow, but are treated like the best thing in the universe. Before a language crude, slow, poorly developed as JavaScript would be ignored, but now is treated as the best thing in the universe.

      Fashions are a plague.

      I think it has more to do with VB being a poorly designed language for a poorly designed system. The two decades from its inception have given the world a lot of time to figure out what are good ideas and what are bad ideas. (I'm not going to try and defend JavaScript though.)

    7. Re:Visual Basic? by Anonymous Coward · · Score: 0

      Because they like to water down the courses so more people take them and get good results.

      I did an NVQ in ICT when I was at sixth form in 2006 and they course they advertised was C and stuff like that, it turned out to be two years of a how to achieve nothing in microsoft office and a lot of pointless printing.

    8. Re:Visual Basic? by jonwil · · Score: 1

      These days many of the "top languages" such as Java, C#, VB.NET and Python have decent compilers (either JIT compilers that compile modules as they are loaded/executed or static compilers that compile the code straight to machine code).

    9. Re:Visual Basic? by Sycraft-fu · · Score: 1

      And why the hell 6 of all things? I'm sure their IT department must love them because let me tell you, Visual Studio 6 is not so happy on modern computers (we still get calls for it occasionally for research).

      I mean if you want Visual Basic, ok fine, I can see arguments for that, but use VB.NET. It is current ans supported by MS, and it is something that could be useful in getting a job.

      I just don't see why you'd want a BASIC syntax, managed language and choose a 10+ year old version.

    10. Re:Visual Basic? by Anonymous Coward · · Score: 0

      You want students to be fully informed about what they may have to work with. I guess they went for broke and included the language most likely to drive them to drinking.

    11. Re:Visual Basic? by jonwil · · Score: 1

      If they really want VB, they should be allowing VB.NET and not "classic VB".
      "classic VB" is a long dead product, its not even SOLD by Microsoft anymore. They are no longer producing any fixes to the compiler or runtimes and Microsoft has plans to drop support for the VB6 runtimes and VB apps from future versions of the OS altogether (why they havent already done it I dont know)

      Both VB.NET and Delphi have the RAD and "hide all the complex stuff away in the runtime libraries" stuff that VB6 had and should be just as easy for someone who has not programmed before as VB6 is.

      Plus, with VB.NET and Delphi, you dont learn anywhere near as many of the "bad habits" that you have to later unlearn.

      My guess is the reason they are keeping VB6 on the list is that a lot of schools have big investment in teaching VB6 (coursework etc) and that switching to one of the other languages (such as VB.NET or Delphi) would cost too much (new software, teacher re-training, new coursework etc).

    12. Re:Visual Basic? by Anonymous Coward · · Score: 0

      Elementary my dear Watson: Visual Basic 6 is a great way to learn how NOT to code...

    13. Re:Visual Basic? by Zaiff+Urgulbunger · · Score: 1

      I can only think that somewhere in the decision-making process were *industry* bodies who still need a steady flow of VB6 programmers to maintain existing code. I can't see any other reason to choose VB6!

    14. Re:Visual Basic? by BRSQUIRRL · · Score: 1

      Thankfully, they aren't. They are accepting VB.NET, which has about as much in common with VB6 as Java has with JavaScript.

    15. Re:Visual Basic? by tagno25 · · Score: 1

      Thankfully, they aren't. They are accepting VB.NET, which has about as much in common with VB6 as Java has with JavaScript.

      They are accepting Visual Basic 6, the the article (and accompanying pdf) clearly states that.

    16. Re:Visual Basic? by shutdown+-p+now · · Score: 1

      Why are they accepting Visual Basic 6, but not C++, Ruby, or even LISP?

      What's scary is that VB6 isn't even officially supported as a developer tool, and hasn't been for ages. The IDE is not even guaranteed to run on anything from Vista on (i.e. if it breaks, don't complain to MS).

      (VB runtime is still supported on Vista/7, though.)

      If they're so keen on VB (why??), they could at least use a newer version - which, coincidentally, is much better at promoting good practices, too.

  9. University... by unts · · Score: 2, Insightful

    This is why we can't really use sixth-form qualifications in this area as an indicator of a candidate's ability to program - we have to assume they know nothing, and look to Maths & Science qualifications for indication of their skills.

    I learnt Pascal and VB6 back when I was at sixth form. Then I went to uni, was taught C and thought to myself "why didn't they teach us this!? I know NOTHING".

    1. Re:University... by Anonymous Coward · · Score: 0

      The programming goggles! They do NOTHING!

  10. Real world experience by Anonymous Coward · · Score: 0

    I did Pascal for A-level may moons ago. Pascal teaches you to expect suckage, and you will not be disappointed in your later programming career.

  11. Yes, and no by Mathinker · · Score: 2, Insightful

    When I took the introductory course to computer programming in college, we actually were exposed to other programming paradigms than the standard industry ones. It included Prolog and SNOBOL, for example. Even though I would agree that neither of those languages has any practical application in industry today, I still think that it was an important part of my education to see these kinds of extremes (no, that doesn't mean I think that the brainfuck language should be taught to high school students --- anyway, because of its name, that would be impossible in the US).

    1. Re:Yes, and no by icebraining · · Score: 1

      I've also taken Prolog classes, but I've always feel the exercises has being shoehorned as a logic problem. We seem to use Prolog more as a functional language than theorem resolving language.

    2. Re:Yes, and no by Opportunist · · Score: 1

      Sadly true. The way Prolog is taught is not unlike the way pointers are taught. You get to solve problems that make you shake your head and ponder "why use this horribly stupid approach when there's a much more straightforward one?", because the problem does not show just why you should solve it that way.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    3. Re:Yes, and no by poopdeville · · Score: 1

      There isn't much difference between a logic language and a functional language. The only "real" difference is the evaluation model: logical languages use unification, and functional languages use some kind of beta reduction. Well, unification is what you get if you take a function in extension form (that is, as a set of ordered pairs) and apply beta reduction to this syntactic form.

      Functions are proofs. Proofs in a "constructive" logic.

      --
      After all, I am strangely colored.
    4. Re:Yes, and no by mzs · · Score: 1

      I was really lucky, one of the most fun exercises we had was we made mastermind solvers. Then we pitted all against each other with the time and wc commands. I still remember saying when first being taught Prolog by the TA, "This is just like make," and he replied, "like make on steroids." It certainly is a neat language and valuable to being exposed to think in that way, just like the exposure to Lisp is as well.

  12. Teaching logic, structures and algorithms I hope? by roman_mir · · Score: 3, Interesting

    I hope these courses are all about teaching the way to construct programming logic, to think about algorithms, to apply data structures correctly because that can be done in any language (depending on the paradigm that they choose to teach of-course, and it looks they are going with the most common, imperative one, of-course the choice of languages also shows that they are not going into declarative stuff.)

    Any one of these language can be used to teach normal structured programming with normal process flows, data structures. Object oriented stuff should not be taught until the students have basic understanding of the principles of programming.

    But it is too bad they are not including at least some Assembly and C. Actually they should do an overview of different languages and explain that there are different ways to program, they should explain the differences between paradigms, approaches, languages, they should explain computer organization as in how a machine sees the code, how does the code interact with the memory, processor, peripherals. I think it is important at least to know OF these things, if not actually completely knowing how to use them.

    I think before you teach anyone actual programming logic, structures, you explain how a machine executes the commands, so computer organization (state machines, memory, processors) + Assembly, even if only for a few hours this should be done first.

  13. 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)..?

    1. Re:Dumbing Down by Anonymous Coward · · Score: 3, Funny

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

      Maybe this can shed some light on the matter?

      Something is dumbed down and I don't think it is the students.

    2. Re:Dumbing Down by ducomputergeek · · Score: 1

      We work with a local university with internships. It's amazing when we get third year students and the first thing we have to teach them is source control management with SVN followed by a crash course in SQL. (Specifically PostgreSQL). Now we generally bring in interns and start them off in the Java group their Junior year as they've had 4 semesters of Java at the point. Even then it seems like they spend the first two months really learning Java. If things work out well, we're moving them over to the web development group where they learn Perl (our API & backend is Perl) or PHP and Javascript (Front end stuff). Over the Summer. By the time they take their 4th year database classes, things are pretty much a breeze. Generally they know SQL better than their instructors and have already mastered everything they teach in the "web programming" course.
       

      --
      "The problem with socialism is eventually you run out of other people's money" - Thatcher.
    3. Re:Dumbing Down by jareth-0205 · · Score: 4, Insightful

      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.

    4. Re:Dumbing Down by jareth-0205 · · Score: 1

      Job listings I have looked at demand the following skills:

      Yeah... but not for a graduate. Or no sane advert that is willing to consider a graduate would ask for most of those. And *especially* if the level we're talking about is A-level and therefore pre-University (18). I think they should use the language most suited for teaching programming concepts, not the one most common on job adverts.

    5. Re:Dumbing Down by Anonymous Coward · · Score: 0

      A-levels are exams at the end of high school, not university...

    6. Re:Dumbing Down by Anonymous Coward · · Score: 2, Insightful

      Er, we're talking about A level Computer Science. No-one is going to get a programming job in London after "graduating" from that unless they already know how to program.

      Anyway, Computer Science is not a vocational subject. The importance is to use a language which allows you to focus on the bits you *want* to teach, rather than getting embroiled in a bunch of irrelevant pointer arithmetic or boilerplate class hierarchy bullshit.

      There are then a bunch of companies who will employ you and train you how to program *in a team* on the basis that you're a smart computer scientist. And it's the *in a team* bit that requires Java or whatever.

      But jobs that require knowledge of a specific source-control system are best avoided. Those kinds of jobs are looking for idiots who will barely pass muster, and they'll be dead-ends.

    7. Re:Dumbing Down by beh · · Score: 2, Insightful

      Sorry, but I'm going to disagree with you on your assessment:

      Yes, you are right that most job posts now demand the skills you mention.

      Yes, you are right that there is probably no Pascal/Delphi job post.

      Like you, I don't agree with their offered choices.

      But - you are forgetting a few things here:

      a) There are no Delphi job posts in part because there is no real supply of delphi developers - C/C++, C#, Java, SQL developers are a dime a dozen by comparison. Companies won't start large scale Delphi developments, if they feel it will be difficult to scale up teams for it due to the lack of candidates.

      b) It doesn't matter whether they're offering Java, C, OR Pascal, because they are teaching programming, not development. And that's my main problem with it - teaching some kid programming (as in the syntax of a language and very basic development skills) is no real help for them in the long term. A good developer can pick up new languages reasonably quickly - as long as the concepts behind the languages are well understood - after that, picking up a new language is primarily about the syntax and the libraries - still a potentially steep learning curve, but less so, than some kid who can program a very simple app in Pascal but has no clue about what else is involved - has no understanding of development patterns, of typing concepts, the differences between functional, OO, plain old structured programming languages, stack based systems (like machine code), ... Also, without an idea of those concepts, you may very quickly end up with a virtually unmaintainable piece of code - not there isn't enough of that out there already.

      c) Starting them off on a 'teaching' language like Pascal has the big advantage that it's something they can get the hang of programming on first - and if they feel that's their thing and then go on to start on a development career, they will learn a language actually used out there at the same time when they get taught about other aspects of development that would be way too much for an A-level course.

      Personally, the first languages I learnt were Basic (on a ZX Spectrum at home), and Logo (yes, the turtle graphics thing) at school (in ~85/86). I don't really want to picture the kind of code I would have written had I learnt C BEFORE learning about some more development constructs.

      I would compare it a bit to learning 10-finger typing - if you have been using a computer before, you probably learnt to type reasonably quickly using your index fingers and the thumbs for the space bar. If you then start being taught proper 10-finger typing, you start of being at the top of the class in terms of speed in the beginning - but are more likely nearer the bottom of the course at the end of the training because you're still mainly falling back to your index fingers most of the time. Personally, it took me several years after a typing course at school before I could type 'blindly' using 10 fingers. It took me that long to 'unlearn' the 2-finger typing methods. By choosing a 'throw-away' language you're not really going to use in your later career, you provide the opportunity for a clean break into a new language once you begin understanding things like time complexity, memory management/requirements, algorithms, etc.

      So, when it comes to teaching a programming language at school - I will gladly support teaching a 'teaching language' as opposed to a 'real world' language.

    8. Re:Dumbing Down by francium+de+neobie · · Score: 1

      Yes. That argument makes sense, until you find out the interns don't really understand the theory as well.

      "WTF is Unicode? Why can't I just use char?"
      "Right. Unicode is an encoding scheme, and it encodes more than 256 symbols."
      "But C strings are made of chars!"

      And that, came from an MPhill of Computer Science. He could have asked me when in doubt, or he could have asked Google. But he ended up writing seriously broken code, couldn't work out why all the CJK text is screwed up for a whole week, and then complained to me that the toolkit is buggy. Pretty soon, he was fired. Theory and application goes hand in hand in computer science. It's a mental framework for you to understand what already exists and also for you to create what doesn't yet exist more effectively. If you can't work out how things work or why things don't work from your theory, you're just as good as having no theory.

    9. Re:Dumbing Down by GPSguy · · Score: 1

      When I hire a graduate student or undergrad worker, I have them do a couple of things for assessment...
      1. Write a relatively simple program in the language of their choice for our *nix boxes. Yes, it's got to run.
      2. Demonstrate their virtuosity with SQL in PostgreSQL and PostGIS.
      3. Show their web programming skills in perl/php/ajax, and javascript on a real application.
      4. Prove they can maneuver around a linux system from a command line.

      By this time, I've already hired them, and unless they do something like piss in the boss's potted plants, I'll likely keep them, but it tells me how much I can expect, and what sort of remedial work I have to do with them.

      1. Yes, I'm now installing Mono to support the kids who only know .net framework. It's gotten that bad.
      2. There's a lot of remedial SQL training going on. Lots of kids are "learning database" using Access as their sole tool. That's just wrong.
      3. A bright spot. Seems everyone knows how to do some web programming now.
      4. Command line? Linux? Those are evil...

      Sorry, I spend a lot of money supporting students with work, and a lot of time and money teaching them things in a practical environment, that they should have at least been exposed to in some class, somewhere.

      --
      Never ascribe to malice that which can adequately be explained by tenure.
    10. Re:Dumbing Down by TheRaven64 · · Score: 2, Insightful

      There are two issues here. One is universities not teaching things. The other is students not learning them. I agree that a computer science course shouldn't be teaching things like source control or the details of a specific programming language, but that doesn't mean that the students shouldn't be learning them. If you're doing a degree in a particular field then you should be interested in it, and you should be motivated to learn more outside of the course. Universities aren't schools. They aren't meant to teach, they're meant to provide opportunities for learning. When I was an undergraduate, some of these came from my course, others came from the computer society.

      The course gave me a solid theoretical foundation, the computer society gave me some practical experiences. I learned how to admin a network of Linux machines, practiced programming in C and C++, learned how to use PHP (thankfully, I don't need to do that anymore) and a variety of other things via the computer society and other non-course-related projects.

      --
      I am TheRaven on Soylent News
    11. Re:Dumbing Down by oh_my_080980980 · · Score: 1

      Jesus Christ, most people can't get a job when they graduate because they don't have experience!

      You don't have practical experience when you graduate from college unless you do alot of internships. College teaches fundamentals. You want to learn Java...you want to be a programmer...pick up a fucking book and learn. Supplement your college courses.

      Seriously, are you this dim!

    12. Re:Dumbing Down by Alan+Shutko · · Score: 1

      The article is talking about programming classes in the UK equivalent of high school, so it's unlikely that these guys would be trying to get a job based on those skills once they'd graduated. It seems to be about the same as the AP classes in the US. These are introductory classes, intended to lead into college work. They're intended to teach you the fundamentals, not make you job-ready your freshman year. When I was in college, our first semester was Scheme, although I ended up using ASM, C, C++, Java, Awk, Lisp and some other languages along the line before I graduated.

      The reason they're dropping the other languages is that there wasn't enough demand for the exams, which means that the various schools weren't teaching them.

    13. Re:Dumbing Down by Lou57 · · Score: 1
      Two key points from the article ...

      1. "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."
      This course is an entry level course to programming concepts. It isn't meant as an entry level course to Computer Science. And as others have already stated, I wouldn't want to learn VB or Pascal if my main focus was to simply change afterwards to C_ _ or to Java. Perhaps this is a programming course for all those other people, like accountants.

      2. 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".
      This just reaffirms that languages like Java (and I will assume C, C++ or C#) are still taught at the higher levels. If you are going to be a computer science graduate, learning Delphi or Python should not be a major concern.

      The real bottom line is that the article is discussing one entry level class, not an entire Computer Science degree program.

      --
      Lou
    14. Re:Dumbing Down by mdielmann · · Score: 1

      I took CS almost 20 years ago - allow me a moment to recover from the shock of how long it's been - and the language they started with was Pascal. The reasons were valid then, and valid now. Strong typing, rigid syntax, and little if any implicit type conversions. You always need to know what you're doing, and why. Then, in the future, when you use something as loosely typed as VBScript, or with rather arcane syntax like C (I remember people having trouble remembering the difference between i and *i) you have the what and why already nailed down, and are ready to deal with the how.

      --
      Sure I'm paranoid, but am I paranoid enough?
    15. Re:Dumbing Down by Cederic · · Score: 1

      Yes, you are right that there is probably no Pascal/Delphi job post.

      Scarily there are. I got an email from an agent a couple of weeks back suggesting I step back 11 years in my career and apply for one in Leicester.

      I chose against that option...

    16. Re:Dumbing Down by Anonymous Coward · · Score: 0

      I presume you do realize that this article is about HIGH SCHOOL education?

  14. Functional programming by Anonymous Coward · · Score: 0

    Around here they teach functional programming in the introductory course at many schools. Functional programming makes you think a bit differently from the start, and since most students with prior programming experience don't have experience with functional programming, everybody gets to learn something new.

  15. That's a travesty by jlebrech · · Score: 2, Insightful

    They should have dropped VB and PHP, maybe also drop delphi and introduce Ruby.

    1. Re:That's a travesty by ducomputergeek · · Score: 1

      VB I agree with as we see it replaced with HTML/JS/Scripting Language of Choice for most form apps. Ruby, I still fail to see the allure. We had developers swearing it was the NEXT BIG THING and wanting to use it for everything a couple years ago. We stuck with Java, Perl and PHP and I don't even hear Ruby brought up much in development meetings anymore. Our interns had no problems finding jobs after graduating. Those that took internships & jobs at the two "Ruby Shops" in town had problems after graduating.. (In fact those Ruby Shops are now defunct and out of business). I don't think it's a problem with Ruby per sue, but those shops were always "look at this cool new shiny project we're doing" and always seemed to run into problems when it came time to scale into production.

      --
      "The problem with socialism is eventually you run out of other people's money" - Thatcher.
    2. Re:That's a travesty by 16K+Ram+Pack · · Score: 1

      Agreed. VB is a very bad choice. I can see why PHP isn't in there - it's basically a hack. Delphi/Pascal used to make sense because of strong typing, but if you're going to do that, go with C# which is in use.

    3. Re:That's a travesty by Cederic · · Score: 1

      Ruby rocks. It's fantastic. I really really like it as a language.

      I wouldn't recommend it for business use though. But then, I'm a "constrain those cowboys" Java fan..

  16. Atleast they still allow Java by mwvdlee · · Score: 3, Insightful

    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?
    1. Re:Atleast they still allow Java by Halo1 · · Score: 1

      On the one hand, Java uses pretty much the same object model as Pascal/Delphi (single inheritance, interfaces). On the other hand, unlike in Java you can program at the same low level in Pascal/Delphi as in C if you want to (yes, Pascal/Delphi has pointers, and you can also do pointer arithmetic if you want to). So I'd disagree with your claim that none of the allowed languages allow low-level programming.

      --
      Donate free food here
    2. Re:Atleast they still allow Java by Rockoon · · Score: 3, Insightful

      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.

      You are just another guy that thinks pointers are special (that's C's only low level feature.) Don't kid yourself.

      The last thing you need to know about is pointers if you want to understand the stuff you listed. What you need to concern yourself with is the algorithms and data structures employed, to that end references are as good as pointers.

      I am telling you this as an assembly language programmer, so don't for a second think that I am brushing off pointers as not useful. I just know that they do NOT offer insight into the things you listed.

      --
      "His name was James Damore."
    3. Re:Atleast they still allow Java by davetucker · · Score: 1

      C may not be the most common language in the industry

      It most likely is.

    4. Re:Atleast they still allow Java by LizardKing · · Score: 0, Troll

      references are as good as pointers

      Really? Show me the following implemented using Java references:

      void
      swap(int *l, int *r)
      {
      int tmp = *r;
      *r = *l;
      *l = tmp;
      }

    5. Re:Atleast they still allow Java by Rockoon · · Score: 2, Informative
      Why the restriction to Java? I don't know Java and suspect that if there is a problem doing it, its through artificial restrictions imposed by purism ("procedures shouldn't modify their parameters").


      C#:

      void swap(out int x, out int y)
      {
      int temp = x;
      x = y;
      y = temp;
      }

      And then there is VB.NET:

      sub swap(byref x As integer, byref y As integer)
      dim tmp As integer = x
      x = y
      y = tmp
      end sub

      If freaking visual basic can do it, what the hell do you think is special about C in this regard? Nice job cherry picking Java tho.

      --
      "His name was James Damore."
    6. Re:Atleast they still allow Java by Anonymous Coward · · Score: 0

      How about the ability to drop back into asm in c? Asm in Java is just a framework.

      I have always liked the saying: Java works on all operating systems, anal sex works on all genders.

    7. Re:Atleast they still allow Java by mwvdlee · · Score: 1

      What exactly IS a reference anyway, smartypants?

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    8. Re:Atleast they still allow Java by mwvdlee · · Score: 1

      ...or perhaps it IS the most common language :)

      I've only got my own frame of reference, which are the administrative and financial industries. In those industries, C is far less common.
      I guess if you do game development, there is very little else besides C.

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    9. Re:Atleast they still allow Java by Anonymous Coward · · Score: 0

      Nitpicking: Actually, in C#, your parameters should be ref, not out, as out parameters are assumed to be uninitialized until first assignment.

    10. Re:Atleast they still allow Java by TheThiefMaster · · Score: 1

      references are as good as pointers

      Really? Show me the following implemented using Java references:

      void
      swap(int *l, int *r)
      {
          int tmp = *r;
          *r = *l;
          *l = tmp;
      }

      I can show it using C++ references, if you'd like:

      void swap(int &l, int &r)
      {
          int tmp = r;
          r = l;
          l = tmp;
      }

      and you call it like this: swap(a,b)
      instead of like this: swap(&a,&b)

    11. Re:Atleast they still allow Java by LizardKing · · Score: 1

      Why the restriction to Java?

      Because Java is the only approved language for the A-level curriculum that I was aware of having references. I hadn't realised that VB.NET supported them in a more C++ like manner, but then there are far greater problems with any form of VB as a pedagogical programming language.

    12. Re:Atleast they still allow Java by Cederic · · Score: 1

      That depends very strongly on what you're developing.

      Take World of Warcraft. There's a massive game development community building game features and UI capabilities using a scripting language. The game UI itself is built using the same language.

      Sure, the underlying game engine, the pretty graphics and probably the network code are written in optimised compiled code, but a lot of games use higher level languages for a lot of the game. AI, UI.. pretty much anything that isn't graphics and network really.

      Game development suffers the same skillset and productivity issues everybody else suffers. So it adopts the same solutions: high level high productivity low maintenance cost languages.

      Of course, real games programmers still program using a solder iron.

    13. Re:Atleast they still allow Java by Rockoon · · Score: 1

      ah well, perhaps. Not really all that up with the language. Just enough to get my feet wet.

      --
      "His name was James Damore."
    14. Re:Atleast they still allow Java by Rockoon · · Score: 1

      It looks to me like another one you missed is Delphi.

      Lets not forget that VB6 had references (fuck! thats on their list too!), oh, and QuickBasic before it.

      So what this all comes down to is that you are ignorant. You decided that none of those languages support a swap() procedure, without knowing jack shit about them.

      But hey.. at least you've got your Java gripe (assuming its true.. is it, Mr Ignorant?)

      --
      "His name was James Damore."
    15. Re:Atleast they still allow Java by Rockoon · · Score: 1

      ..not something that you perform math on.

      --
      "His name was James Damore."
    16. Re:Atleast they still allow Java by shutdown+-p+now · · Score: 1

      TIOBE doesn't measure how much the language is used. It only measures how much the language is talked about.

  17. The Purple Book by ebonum · · Score: 1

    Everyone's first book for computer science should be The Purple Book. If you can't handle this book, go do something easier. You'll be happier in the log run.

    http://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs

  18. Re:Serious applications are still written in Delph by mwvdlee · · Score: 1

    I've used Borland C++ Builder for many years, which shares the whole RAD thing (VCL) with Delphi.
    One thing I LOVE about this is that it is very easy to quickly put together a working GUI.
    One thing I HATE about this is that is it very convoluted and dirty to put together a good GUI.

    --
    Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
  19. Delphi = Betamax by freddled · · Score: 1

    Delphi suffers the curse of being so 'beautifully engineered' that its fans assumed that it would carry all before it and can't understand why it didn't. Remember Betamax? Remember the DeLorean? Jo Public doesn't care about the nth percentile of engineering perfection, Jo cares about getting the job done. I've been a Delphi lead for over 10 years and I can't get a job so I'm learning C# instead. Personally I think C# is inferior in some respects but it wins out because it is designed to solve the real-life everyday problem of getting code out of the door.

  20. Then why not C? by mangu · · Score: 4, Informative

    If you understand programming, picking up any given language is straightforward.

    How can you understand programming if you don't understand how it works under the hood?

    Teaching assembly (which CPU?) wouldn't be practical but C is the next best thing. I agree with you that any programmer should be able to pick up a new language without too much effort, but unless you know how the internal structures of the programs work you will never be able to write good code, at best your code will be painfully slow, at worst it will be outright dangerous.

    If only one language is taught, then it should be C for anyone who expects to be a professional programmer, knowing C they can easily pick up any other procedural language. A programmer who doesn't know C is like a doctor who doesn't know anatomy.

    1. Re:Then why not C? by Halo1 · · Score: 2, Insightful

      If only one language is taught, then it should be C for anyone who expects to be a professional programmer, knowing C they can easily pick up any other procedural language. A programmer who doesn't know C is like a doctor who doesn't know anatomy.

      I think you could say the same about Delphi-style Pascal. You can go as low level as in C there (and believe me, many people do, which is a pain if you develop a cross-platform Delphi-compatible compiler), and as a bonus you also learn an object model that's pretty much identical to Java's.

      --
      Donate free food here
    2. Re:Then why not C? by confused+one · · Score: 4, Informative

      First of all, I believe they're talking about a U.S. high school level course. Second, having learned on BASIC and Pascal myself, I can assure you that you can learn fundamentals and internal operations using those languages.

    3. Re:Then why not C? by Kensai7 · · Score: 1

      A programmer who doesn't know C is like a doctor who doesn't know anatomy.

      Exactly. But if they want to teach high-level concepts for A-Level they should stick to an academic language, purpose-built to investigate new ideas... solething like Scala.

      --
      "Sum Ergo Cogito"
    4. Re:Then why not C? by Anonymous Coward · · Score: 0

      Hey, I'm in computer science, and I've learned ASM, microinstructions and how to build/design CPU's from scratch. Don't diss the asm.

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

    6. Re:Then why not C? by Anonymous Coward · · Score: 0

      Teaching assembly (which CPU?)

      Easy question. Atmel AVR. That's the base of the Arduino system. There's an excellent free IDE which can be used with assembly and C. You don't even need the hardware if you're content with the emulator.

      The problem with teaching people C as their first language is that they'll want to keep writing programs in C. Dropping to C should be an imposition, like dropping to assembly is an imposition to most programmers nowadays. If you give them an impractical language like Pascal at first, they'll see that they need to learn other languages to do actual work. At that point, C is just another tool, not their home language, so they're more likely to recognize its shortcomings.

    7. Re:Then why not C? by Anonymous Coward · · Score: 0

      First of all, I believe they're talking about a U.S. high school level course.

      Reading comprehension isn't a strong suit of yours, eh? How many times have you heard of American schools using A-levels, O-levels, etc? Or better yet, how many times have you heard of U.S. High Schools teaching to the qualifications of the UK exam boards?

    8. Re:Then why not C? by mangu · · Score: 2, Interesting

      I think you could say the same about Delphi-style Pascal. You can go as low level as in C there

      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.

      Also, AFAIK, standard Pascal does not have function pointers, although I believe many versions, including Delphi, have implemented their non-standard extensions for this. Without function pointers it's very hard to do scientific programming, try writing a generic procedure to integrate a function, for instance.

      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.

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

    10. Re:Then why not C? by alex67500 · · Score: 1

      I agree with you. C gives a lot of insight under the hood. You can also start looking at an executables' structure, explain about memory usage and zones, and learn from your mistakes. gdb makes it easy to debug (no, printf is not a debugger).

      And hey!, you really can't call yourself a programmer if you never hit your keyboard on receiving a SIGSEGV =D

    11. Re:Then why not C? by jmpeax · · Score: 1

      U.S. high school level

      He said the course was of a level equivalent to that of a US high school, not that it was actually a US high school course.

    12. Re:Then why not C? by Anonymous Coward · · Score: 0

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

      Huh? What are you talking about?

    13. Re:Then why not C? by Halo1 · · Score: 3, Insightful

      I think you could say the same about Delphi-style Pascal. You can go as low level as in C there

      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
    14. Re:Then why not C? by capo_dei_capi · · Score: 0

      Computer science courses at that level primarily ought to teach about classic data structures and algorithms, not about the housekeeping (management of registers, stack, etc.) involved in assembly language and to some much lesser extent in C.
      So yeah, I think their decision makes sense.

    15. Re:Then why not C? by Anonymous Coward · · Score: 0

      I disagree - learning from assembly is like learning to make bricks in order to build a house

      Some people are bettter suited to making the perfect brick and some people the perfect house.... just like we have brick makers, bricklayers, archeticts and interior designers

      as IT and computers grow and grow we'll end up with more and more specialists for fields as each field grows

      If we follow your logic - Compsci students should really go futher down the tree and be desiging chips or transistors or futher ... in which case you'd be studing chemisty / physics / whatever field it is

      VB6 and VB.Net shouldn't be in A Level stuff (it's horribly simple) - but assembly is totally at the other end..... nice plug for your company though

    16. Re:Then why not C? by LordNimon · · Score: 1

      There's nothing impractical about teaching assembly language. Shame on you for even suggesting it!

      --
      And the men who hold high places must be the ones who start
      To mold a new reality... closer to the heart
    17. Re:Then why not C? by mikael · · Score: 1

      A-levels are final year high school courses, not college courses.

      Back in the 1980's, BASIC and PASCAL were the preferred choices for high schools. The priority was to teach students about algorithms, conditional statements, loops and recursion and arithmetic instructions. There was some time allocated to teaching students about hardware (CPU, memory, monitors, keyboards and printers), as well as CPU's, assembly language (data transfer and conditional instructions), registers, status bits and interrupts). But more time was spent on teaching students about modern technology - circuit boards, embedded system, washing machine controllers, ATM's and electronic cash registers.

      There is only so much you are going to be able to cram into a single high school course. It's not going to be a full-time first year university course covering hardware engineering, software engineering, computing theory and AI. Secondly, it has to reflect the full range of courses available now at college.

      --
      Vintage computer adverts: http://www.vintageadbrowser.com/computers-and-software-ads
    18. Re:Then why not C? by Opportunist · · Score: 3, Insightful

      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.
    19. Re:Then why not C? by sick_soul · · Score: 1

      "A programmer who doesn't know C is like a doctor who doesn't know anatomy".

      I will remember this; this is a very insightful comment.
      Too bad I have no mod points, as I mostly do not bother to login anymore.

    20. Re:Then why not C? by JAlexoi · · Score: 1

      Low level languages are bad for demonstrating the logic of a program. It's just too complicated.

    21. Re:Then why not C? by Anonymous Coward · · Score: 0

      Why start with assembly? They should start by doing the logic-gate design of the CPU so that they know how the instructions will be processed, which instructions are likely to be fast, etc. Doing assembly without knowing how the processor works is like trying to use bricks without knowing what morter is.

    22. Re:Then why not C? by Sir_Lewk · · Score: 1

      Teaching assembly (which CPU?) wouldn't be practical but C is the next best thing.

      Doesn't nearly every CS program have a handful of classes where they teach you exactly that? My school's program offers a series of "system architecture" classes that feature, somewhat heavily, MIPS assembly. MIPS is a pretty obvious choice when picking an architecture for an academic setting. The rest of my classes are largely language agnostic, most students chose to do assignments in C.

      --
      "linux is just DOS with a UNIX like syntax" -- Galactic Dominator (944134)
    23. Re:Then why not C? by terjeber · · Score: 1

      unless you know how the internal structures of the programs work you will never be able to write good code, at best your code will be painfully slow, at worst it will be outright dangerous

      Actually, you are exactly wrong. It is quite the opposite. The vast majority of software developers develop LOB applications for vertical markets. This is good. These developers should never use C and teaching them C is not only not needed, it is directly counter to what would be sensible. These guys should learn Java, perhaps C# (which is just Java with a twist), Python or similar.

      Learning like this will teach them good practices. It will teach them to (hopefully) apply sensible patterns like DDD to their problem solving, and it will teach them how to focus on the problem domain, not the underlying architecture or the specifics of the platform. It will yield useful code by the tons, not as with C, by the gram.

      Taking them through C would be utterly counter productive. Hardly anything that they'd learn would be applicable in practice, and most of the habits they would add would be utterly counter productive simply because C lends it self to the wrong paradigms. Non-OO, procedural programming is anachronistic at best, and that is what C would teach them. In most cases. I know, I know, you can do OO and DDD in any language. Problem is that you don't. You can't do Inversion of Control in practice unless you have Spring or a similar framework. That means Java. C#. Ruby. Python.

      I did embedded software for quite a while. It taught me how to develop really, really tight code in C. Every bit of memory was precious. Every CPU cycle was gold. The number of people in the world requiring this today is so small that teaching it at any school makes no sense.

    24. Re:Then why not C? by Anonymous Coward · · Score: 1, Funny

      But object oriented programming *is* alien!

    25. Re:Then why not C? by Anonymous Coward · · Score: 0

      The object oriented paradigm works very well in assemlber, the biggest problem is that most programmers and programming teachers don't have a clue about what the compilers has to do to compile object oriented code and can't teach it in a good way.

    26. Re:Then why not C? by Anonymous Coward · · Score: 0

      Let's get back to the true basics. The abacus is fine for the Chinese, but for other nationalities the Monroe calculator is king. Then there's mainframe assembler, and that new-fangled language COBOL.
      Well that was 40 years ago for me. I'm still programming. C is still a bit unnatural (or is that sharp), but I do enjoy some perl or PHP. But guess what? I still use that danged COBOL, even on a PC.
      It just goes to show, that if you've got the right mindset (madness), then you can lend your hand to any language.

    27. Re:Then why not C? by Anonymous Coward · · Score: 0

      BS!
      I don't know C or C++, have been in software for over 20 years and make a nice 6-fig salary. Assembly should be REQUIRED because it teaches how the computer works. It does not matter which CPU, that is trivial. Knowing about memory, registers, instruction sets, binary, hex... all are important. I've worked with people who never took assembly and with people who did. The ones who know about the CPU seem to code better routines. I am sure there are exceptions, but I believe this to be a decent assertion. Additionally, knowing how the computer works can make a HUGE difference when you need to move to a new platform which has very limited resources -- say a PDA, smart phone, or embedded systems.

    28. Re:Then why not C? by bigstrat2003 · · Score: 1

      How can you understand programming if you don't understand how it works under the hood?

      That's like suggesting that a good song cannot be written without understanding music theory (which is quite untrue). Knowing the fundamentals is useful, but not at all required.

      ...unless you know how the internal structures of the programs work you will never be able to write good code, at best your code will be painfully slow, at worst it will be outright dangerous.

      Simply untrue. Unless you're doing something completely fucked up, your code can be just fine without understanding the underpinnings. Understanding how to use a tool is what's important, not understanding how it works. You can teach someone how to properly use the various tools a language gives them without ever giving them a hint as to how they work at a low level.

      --
      "16MB (fuck off, MiB fascists)" - The Mighty Buzzard
    29. Re:Then why not C? by Mathinker · · Score: 1

      > Teaching assembly (which CPU?) wouldn't be practical

      It's trivial to set up a VM which can run a synthetic assembly language which is rich enough to teach about introductory CPU architecture concepts like number representation, registers, addressing, and branching. Never heard that Knuth gave examples in his Art of Computer Programming series in such a language (called MIX)?

    30. Re:Then why not C? by elrous0 · · Score: 1

      That's not fair. Not all aliens are evil.

      --
      SJW: Someone who has run out of real oppression, and has to fake it.
    31. Re:Then why not C? by jedidiah · · Score: 1

      > I disagree - learning from assembly is like learning to make bricks in order to build a house

      Real engineers are taught how to deal with the nuts and bolts of a construction project. So the concept of subjecting your engineers to surveying, drafting or laying concrete isn't exactly particularly new. Computing is in no way special in this regard. If anything it suffers from a lack of maturity that will lead to practicioners seeing more of what's behind the curtain than other disciplines.

      And yes I would expect a good architect to know what makes a good brick.

      --
      A Pirate and a Puritan look the same on a balance sheet.
    32. Re:Then why not C? by lordmetroid · · Score: 1

      In the Computer Architecture course(Which is a low level course) that is taught in Uppsala University in Sweden. You go through various hardware components and the history behind them, how they function down to the nitty gritty, how transistors works, etc. Then you are taught common transistor circuitry design as adders and whatnot, following thereafter you build simple programs out of transistor circuits in a simulator. After that you go through how CPU circuits works, registers and so on and you write some simple programs in microassmbly to understand how to create assembler instruction set and then a program in assembler.

      I do not think you can create a comprehensive understanding of computing by using any high level language, even such ones that are as low level as C or even assembler. You are abstracting away a big chunk of what is really happening by using a language to teach the hardware. Because in the end there is a black box compiler or assembler in between your text file and the metal. it doesn't matter what the black box is. All the code you write will behave different because the Java virtual machine, the PHP interpreter or the C compiler do not behave in the same way.

    33. Re:Then why not C? by Anonymous Coward · · Score: 0

      This is a high-school survey course... jesus christ, get a fucking clue.

    34. Re:Then why not C? by elrous0 · · Score: 1

      Why not assembly language?

      Modern programming courses don't teach machine code and assembly in detail For the same reason that you don't start off a class for modern car mechanics by teaching them metallurgy and machining techniques--because it's an abstraction that they will likely never need. Most introductory texts still teach *some* binary and assembly (showing a few examples and explaining what binary code/assembly are and do) just to give students an idea of the underlying mechanics, but teaching a full course on these would be a waste of time better spent on more useful languages (and, much more importantly, on concepts and general programming methodologies).

      Besides, CS students already have a high enough dropout and suicide rate as it is.

      --
      SJW: Someone who has run out of real oppression, and has to fake it.
    35. Re:Then why not C? by armanox · · Score: 1

      Well, that's how we did it in college.

      --
      I'm starting to think GNU is the problem with "GNU/Linux" these days.
    36. Re:Then why not C? by elrous0 · · Score: 2, Informative

      I heard once that the A-levels are the Brit equivalent of the U.S. high school AP course levels. And your point is well taken. I learned BASIC in my AP course study in high school back when home computers were still a bit of a novelty. And, even in today's object-oriented world, I was able to adapt that knowledge much easier to modern languages than most of my peers who had never studied any computer language before.

      --
      SJW: Someone who has run out of real oppression, and has to fake it.
    37. Re:Then why not C? by Robyrt · · Score: 1

      If I had to start with assembly I would have left the programming field entirely after that first high school course. Fortunately, they started me on something more approachable (C++, although Python would have been even better) where you can have a working program within an hour of sitting down at the keyboard for the first time.

    38. Re:Then why not C? by Slezzzter · · Score: 1

      I agree. I learned C++ in an intro programming course, but I didn't feel like I understood programming until I learned assembly in a microprocessor course. We were taught on the 8051, 68000, and 8080. Ever since, I have had a far better understanding of how high level languages ultimately work on the metal.

    39. Re:Then why not C? by Hurricane78 · · Score: 1

      I second that for Pascal. But not for BASIC. Ever.
      I wrote a lot of software that did directly access hardware with Pascal. Graphics and sound cards, a bit of embedded assembler, other systems programming, a little OS, to learn how things work. It’s actually nicer than doing it in C.

      BUT: That was over 10 years ago. And nowadays, I think it’s just silly, to still write for loops manually, instead of using map, fold, filter, etc. I also think still doing pointer work and memory management manually is just as silly. You’re a programmer! Abstract it out into a proper library and be done with it! Oh, your C can’t do that? Well, then maybe it’s time to say hello to the 21st century. Every modern language already has a standard memory management. And every good modern language still offers you do define it all manually, in case you need it.

      C++:
      template <typename T>
      void qsort (T *result, T *list, int n)
      {
              if (n == 0) return;
              T *smallerList, *largerList;
              smallerList = new T[n];
              largerList = new T[n];
              T pivot = list[0];
              int numSmaller=0, numLarger=0;
              for (int i = 1; i < n; i++)
                      if (list[i] < pivot)
                              smallerList[numSmaller++] = list[i];
                      else
                              largerList[numLarger++] = list[i];

              qsort(smallerList,smallerList,numSmaller);
              qsort(largerList,largerList,numLarger);

              int pos = 0;
              for ( int i = 0; i < numSmaller; i++)
                      result[pos++] = smallerList[i];

              result[pos++] = pivot;

              for ( int i = 0; i < numLarger; i++)
                      result[pos++] = largerList[i];

              delete [] smallerList;
              delete [] largerList;
      };

      Haskell:
      qsort [] = []
      qsort (x:xs) = qsort less ++ [x] ++ qsort more
              where less = filter (=x) xs

      --
      Any sufficiently advanced intelligence is indistinguishable from stupidity.
    40. Re:Then why not C? by Alex+Belits · · Score: 1

      That's like suggesting that a good song cannot be written without understanding music theory (which is quite untrue). Knowing the fundamentals is useful, but not at all required.

      That's because stupidly written song is still an acceptable form of a song -- you can't be wrong in art.

      Software (or any form of engineering) does not work that way -- if you are wrong, you are wrong and your product is broken, no matter how beautiful and clever you (or anyone) think it is.

      --
      Contrary to the popular belief, there indeed is no God.
    41. Re:Then why not C? by Hurricane78 · · Score: 1

      The very bottom? Pah.

      Real men write straight machine code...
      for the chip they designed themselves...
      based on philosophy they invented in years of work...
      that works perfectly in the physics of their self-built universe...
      that they hacked together in Perl. ;)

      --
      Any sufficiently advanced intelligence is indistinguishable from stupidity.
    42. Re:Then why not C? by Anonymous Coward · · Score: 0

      having learned on BASIC and Pascal myself, I can assure you that you can learn fundamentals and internal operations using those languages.

      not intended to be offensive, but - how do we know you're any good at programming, and not proof that learning on BASIC and Pascal is a bad idea? You could be proof of either proposition (without further evidence putting you in one of the two categories)

    43. Re:Then why not C? by poopdeville · · Score: 1

      This is a poor analogy.

      There are three ways in which software can go wrong:

      1) Segfaults (or otherwise "crashes")
      2) Blows up in time or space (poor algorithm choice, or just plain old necessity. Some problems really do require slow/big algorithms)
      3) Doesn't meet spec.

      Guess what: any software that doesn't do any of these is right. You don't have to know C to write software that doesn't do these.

      --
      After all, I am strangely colored.
    44. Re:Then why not C? by Anonymous Coward · · Score: 0

      No they aren't. They're talking about a UK high-school course (A-Levels are for 16-18 year-old students, and are pre-university exams).

    45. Re:Then why not C? by drinkypoo · · Score: 1

      Assembly language is essential to understanding how computers work. It simply shouldn't be first-year, because nobody should be aggressively optimizing code in their first year — it's the last thing you do to your program :p In fact, I would perhaps make it third-year. People getting a two-year degree can probably live without it. We keep hearing how nobody will use asm in the future and then you end up needing it to actually use hardware to its fullest, or to operate efficiently on very simple hardware, like PICs or AVRs.

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    46. Re:Then why not C? by Alex+Belits · · Score: 1

      This is a poor analogy.

      How so?

      1) Segfaults (or otherwise "crashes")
      2) Blows up in time or space (poor algorithm choice, or just plain old necessity. Some problems really do require slow/big algorithms)
      3) Doesn't meet spec.

      Actually there is only ONE such way -- does not meet spec. The rest you have mentioned are in a subset of it.

      Guess what: any software that doesn't do any of these is right. You don't have to know C to write software that doesn't do these.

      Only if you are writing toy projects at school -- because those things run in vacuum, without interfaces with other software or hardware.

      --
      Contrary to the popular belief, there indeed is no God.
    47. Re:Then why not C? by Anonymous Coward · · Score: 0

      How can you understand programming if you don't understand how it works under the hood?

      Teaching assembly (which CPU?) wouldn't be practical but C is the next best thing.

      I was in undergrad in the early 2000s, and we still learned Assembly (Intel 80X86 architecture). There's nothing impractical about it.

    48. Re:Then why not C? by Veretax · · Score: 1

      If its a high school level course, I would think the equipment to run, simulate, and use them is just to low level to be a first language for most people.

    49. Re:Then why not C? by K.+S.+Kyosuke · · Score: 1

      Real men write straight machine code... for the chip they designed themselves... based on philosophy they invented in years of work... that works perfectly in the physics of their self-built universe... that they hacked together in Perl. ;)

      With the exception of the Perl part, you have just described Chuck Moore. :-)

      --
      Ezekiel 23:20
    50. Re:Then why not C? by RadioElectric · · Score: 1

      I took a Computing A-level a few years ago. I remember us learning MS Access, Visual Basic and a bit of Assembly Language. I wrote my project in PHP but I had to teach myself how to do that. It seems like it's very much down to what the teacher is familiar with and, surprise surprise, most high-school computing teachers are not shit-hot up-to-the-minute programmers. My teacher was, to her credit, pretty fantastic at teaching. She'd been involved with developing Fortran compilers in the 60s etc. She knew her stuff. I can imagine many other schools would not have such talented teachers, especially nowadays when it seems you can get a Computer Science degree whilst remaining a pretty crappy programmer.

      I'm in neuroscience research now, I write analysis programs in Matlab and do a bit of Delphi programming to interface with the equipment that we use. I think the A-level that I took was a pretty good set-up for that sort of work.

    51. Re:Then why not C? by Anonymous Coward · · Score: 0

      First of all, I believe they're talking about a U.S. high school level course. Second, having learned on BASIC and Pascal myself, I can assure you that you can learn fundamentals and internal operations using those languages.

      You obviously have very poor reading comprehension. They are talking about UK high school, not US high school. Two very different institutions. US high school is far less rigorous.

    52. Re:Then why not C? by maxwell+demon · · Score: 1

      OK, you're writing wasteful C++ code, and then translating it into elegant Haskell which is probably just as wasteful (OK, one specific waste probably goes away, because I guess Haskell doesn't copy around the elements the same way your C++ code does). Now it's easy to make the C++ code less wasteful, how do you do it with Haskell? Or are Haskell compilers smart enough to optimize those inefficiencies away themselves (including the one which isn't in your C++ code, namely using separate iterations for getting the larger and smaller elements)?

      And note that I'm not talking about the algorithmic inefficiency of taking the first element as pivot (which makes the algorithm quadratic if used on an already-sorted or almost sorted array). Although that's also an interesting point: In C++ it's easy to switch to median-of-three pivoting. How would you do it in Haskell (and how efficient would it be)?

      Also, a common optimization is to switch to insertion sort for small (sub-)arrays. Again, this is easy to do in C++, but how would you do it in Haskell?

      I suspect that any realistic quicksort code in Haskell would not be much simpler than in C++ (note also that your C++ code is not only more inefficient, but also more complex than it has to be; you better don't show that code to any potential employer :-)).

      --
      The Tao of math: The numbers you can count are not the real numbers.
    53. Re:Then why not C? by maxwell+demon · · Score: 1

      4) Doesn't meet user needs. Actually, that's the only real way a software can go wrong (the user doesn't need crashes or blow-ups, and he doesn't really care whether it was the spec which was wrong, or its implementation).

      --
      The Tao of math: The numbers you can count are not the real numbers.
    54. Re:Then why not C? by IICV · · Score: 1

      Also, AFAIK, standard Pascal does not have function pointers, although I believe many versions, including Delphi, have implemented their non-standard extensions for this.

      Honestly, by the time you get to the point where you can see the need for and want to pass function pointers you're probably capable of learning a language that supports that feature on your own.

    55. Re:Then why not C? by Anonymous Coward · · Score: 0

      > A programmer who doesn't know C is like a doctor who doesn't know anatomy.

      A modern UK high school student or beginning college CS student needs C like their intestines need an extra appendix.

      You'll get all the low level stuff when you take the mandatory architecture class, which includes an assembly language. You get the higher level stuff elsewhere. C currently occupies the rarely-needed niche of a higher level assembler. Any CS grad should be able to pick up C (or any other language) if they have to... it's just that in real life, they usually don't have to.

    56. Re:Then why not C? by confused+one · · Score: 1

      I second that for Pascal. But not for BASIC. Ever. I wrote a lot of software that did directly access hardware with Pascal. Graphics and sound cards, a bit of embedded assembler, other systems programming, a little OS, to learn how things work. It's actually nicer than doing it in C. BUT: That was over 10 years ago.

      I started with BASIC. 30 years ago. Direct access to the hardware was often required then on BASIC machines. A lot of coding included significant chunks of pre-compiled inline machine code. But, I guess things are different now...

    57. Re:Then why not C? by Ossifer · · Score: 1

      Why C? Being hardware-close is not such a great thing. Do like I did: take a course in "Foundations of CS" and learn about levels of machine abstraction, right down to the microcode... Makes you appreciate the abstraction that a good language's compiler handles for you. But after that, why concentrate on something closer to the middle of the stack? We got computers for that...

      I actually feel the set of "accepted" modern languages don't go far enough. Try making use of multiple cores in a Java app. It can be done, of course, but thread support is very raw. I'd like the compiler (and VM) to handle a chosen threading model, inter-thread communication/locking, prioritization, etc.

      And now back to a little pointer arithmetic in my memory management module...

    58. Re:Then why not C? by jafac · · Score: 1

      I had the same issue. My first language was z-80 assembler on the TRS-80. I was comfortable with that, even in the tedium. (1980. . . ).
      Sure, I understood that this was what underlies what I'm compiling and what's being interpreted and executed. But rarely did I ever connect the two on a concrete level. Never had to.

      And the jump to OOP was similarly very difficult. I went through probably 4 or 5 different approaches before it started making sense. .. (when it was taught as part of a Data Structures class, and the paradigm for an object was a "Data Type" - that's when if finally started to make sense). I still only sometimes use any OOP in my job. Just not where my primary skillset lies.

      The worst thing for me - was looking at other people's C++ and Java code, and not understanding the ugly truth that; they didn't understand OOP either. A lot of people actually program in a very procedural way, and don't really use objects the way they're supposed to. And I was trying to "grok" OOP, looking at this stuff, and of course it wasn't making any sense to me. Then some of these people, when I asked them to explain OOP to me - gave really crappy explanations. Because they didn't understand it. And I didn't realize that they didn't understand it. But at least I wasn't trying to explain it to other people.

      Of course, then, once I think I finally started figuring it out, my problem became that I tend to over-abstract and over-encapsulate the crap out of everything. And in languages that started out procedural, and they added OOP features to them, like Perl and PHP? I try to avoid using OOP at all, if I can.

      --

      These are my friends, See how they glisten. See this one shine, how he smiles in the light.
    59. Re:Then why not C? by Anonymous Coward · · Score: 0

      My highschool actually did this. The first computer science class was digital electronics.

    60. Re:Then why not C? by Anonymous Coward · · Score: 0

      I remember in the '70s when I started it was with the SC/MP also.
      A small project in the 'Electronics Australia' magazine.
      12 toggle switches for addressing, 8 for data.
      A push button for store and an run/program selector.
      Made the program on paper, convert to hex, enter on the toggle switches, press store.
      Repeat after changing the address switches.
      Those were the days.
      Then onto Z80 with a microprocessor kit, followed by trs80, then a color computer ( 6809, very nice ).
      Using OS9 on the CoCo was interesting. Got the floppy drives by then.
      Brother got a commodore64, but i wasnt interested in that.
      Then the Amiga, and finally the PC.
      First job was programming in pascal ( turbo pascal by borland )
      Right through to Delphi.
      There was also fortran, code from the 'scientists' and this was translated into C by hand, no f2c back then.
      Moving on in time... it has mostly been C and assembler for various micros.
      And now, it is ARM processors, it is embedded linux and Qt. It is touch screens for UI.
      It is C for the other control boxes, mostly legacy PIC based, but slowly moving to ARM7.

      Back when I started, we were taught about mainframes and system engineering.
      Programming was taught using the 'miniwaft' system ( card decks with chads you push out with a paper clip )
      Just dont drop the card deck or they would have to be sorted manually :)
      There were no PC's, and microprocessors had only just started appearing.
      At college there were a couple of dev kits, and an old ASR33 teletype.
      Ahh.. punched paper tape.

    61. Re:Then why not C? by lennier · · Score: 1

      And that's how come Jeff Goldblum was able to crash the mothership with a PowerBook.

      --
      You are not a brain: http://books.google.com/books?id=2oV61CeDx-YC
    62. Re:Then why not C? by Anonymous Coward · · Score: 0

      This is about UK education, A-Levels are a second level of education in a subject after GCSE in the subject.
      Someone should not even be taking the A-Level until they have passed the GCSE, where they should grasp basic understanding.

    63. Re:Then why not C? by Meski · · Score: 1

      If they don't have the mindset they're wasting their time. The numbers of people in the basic c course I was in that hated everything about programming staggered me.

    64. Re:Then why not C? by Opportunist · · Score: 1

      There are schools now that require some sort of "basic programming course" as part of the studies, even if you'll never touch a compiler again after you finish your education. As much as I question the usefulness of teaching people with zero will to program how to do it, these things get more and more common now.

      Not to mention that we need more programmers than we will get "good" programmers. And, bluntly, for some languages these days you don't really need a programmer anymore. You need someone who isn't a complete computer illiterate.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    65. Re:Then why not C? by shutdown+-p+now · · Score: 1

      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.

      Pascal sets are a bad example of abstraction, because they are a leaky one. Specifically, there is no requirement on the implementation to support any particular number of members in a set - which was done that way because sets are normally implemented via bitflags. So having 40 members in a set might compile fine on a 64-bit Pascal compiler, but not on a 32-bit one. In practice, this means that sets are effectively unportable.

    66. Re:Then why not C? by poopdeville · · Score: 1

      Ah, a "Systems" programmer. The kind of programmer who missed out on 5,000 years of mathematics before the invention of C, and 40 years of languages converging to the mathematical method since the invention of C.

      --
      After all, I am strangely colored.
    67. Re:Then why not C? by poopdeville · · Score: 1

      How so?

      That's not how engineering works. Engineers are always looking for new ways to do things more productively and cheaply. You seem to think that matters of style are analogous to engineering "best practices". But engineering best practices are very simple: design something cheaper to build and maintain than the next guy, and prove that it works.

      Actually there is only ONE such way -- does not meet spec. The rest you have mentioned are in a subset of it.

      Which does not contradict what I said. You are not as clever as you think.

      --
      After all, I am strangely colored.
    68. Re:Then why not C? by Alex+Belits · · Score: 1

      "Modern" languages developed into various directions, however "mathematical method" is not how I would describe that.

      --
      Contrary to the popular belief, there indeed is no God.
    69. Re:Then why not C? by Alex+Belits · · Score: 1

      That's not how engineering works. Engineers are always looking for new ways to do things more productively and cheaply.

      I have yet to see an engineer who is looking for a way to do engineering cheaply.

      You seem to think that matters of style are analogous to engineering "best practices".

      Software development IS ENGINEERING, not production. When people approach it as production or maintenance they get the same kind of result they get when they approach any other kind of engineering as if it was production -- they get a system in a a permanent state of being repaired. What is neither usable nor cheap.

      --
      Contrary to the popular belief, there indeed is no God.
  21. The lowest common denominator by mrsam · · Score: 0, Flamebait

    Gee, what do these have in common: "Java, Pascal/Delphi, Python 2.6, Python 3.1, Visual Basic 6, and VB.Net 2008".

    That's right, managed code. Or a comparable facsimile thereof.

    That's right, boys and girls. Forget about wasting time learning such useless concepts as proper memory management, or such useless fundamental concepts as the heap, the stack, etc... Just slap together a bunch of code, and it'll run just fine. No sweat. Dumb things down, so that everyone can now be a soooper hacker!

    If I was living in UK right now, I'll be celebrating right now. It's clear as day this will result in the schools will now start churning out masses of wide-eyed ignoramuses who will go forth and start churning out volumes of code which they won't really understand themselves. Perpetual job security for me, AFAIK.

    1. Re:The lowest common denominator by Halo1 · · Score: 2, Informative

      You don't seem to be familiar with Pascal/Delphi. It has manual memory management, differentiates between the stack and the heap, has pointers, etc.

      --
      Donate free food here
    2. Re:The lowest common denominator by DrXym · · Score: 1

      Memory management is still important in languages like Java, C#. Concepts such as soft / weak references exist in these languages precisely because its quite possible to allocate more memory than is physically available. So teaching in a high level garbage collected language doesn't mean such concepts do not need to be taught.

  22. C is a terrible learning language by anti-NAT · · Score: 2, Insightful

    No array bounding, no memory protection, casts all over the place without any errors, subtleties like '==' vs '='. C is a language for people who already know how to program (well), not those who're learning.

    I like C a lot, however I'd hate to have learned to program in it. Fortunately I'd learned and had a strong foundation in Pascal first.

    --
    The Internet's nature is peer to peer - 20050301_cs_profs.pdf
    1. Re:C is a terrible learning language by Anonymous Coward · · Score: 4, Insightful

      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)

    2. RE: C is a terrible learning language by Anonymous Coward · · Score: 0

      Agreed. We had a horrid time in college (UK) - the first year we were taught C++ (which about 3 of the 25 managed to get a grasp of). The second year the college forced us to instead do VB6, and we can all guess what effect that had...
      It would be much better for students (and future prospects for any UK programmers) if they chucked VB6 also. Perhaps for some .net language.

    3. Re: C is a terrible learning language by freeshoes · · Score: 1

      Agreed. We had a horrid time in college (UK) - the first year we were taught C++ (which about 3 of the 25 managed to get a grasp of). The second year the college forced us to instead do VB6, and we can all guess what effect that had... It would be much better for students (and future prospects for any UK programmers) if they chucked VB6 also. Perhaps for some .net language.

      Err no, the fact that only 3 out of 25 could get to grips with C++ tells us that the class what made up of lower than average students. And .Net should be avoided, from what I can see Stanford is one of the top CS Unis and in their first year of CS they teach, Java, C (some Assembly), C++, Scheme Python. Those are the langugues that you should know.

    4. Re:C is a terrible learning language by rmstar · · Score: 3, Insightful

      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.

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

    6. Re:C is a terrible learning language by stimpleton · · Score: 1

      Within the current framework of thinking of todays young people, then, yes, your post is valid. C is not hip and requires thinking.

      Just as we have this so called cotton wool wrapping around kids, I think young programmers need to learn to skin knees(array over flow), work for their pocket money (memory allocation and management and factor in any fence post errors), and think beyond the menu screen for Modern Warfare 2 ( theories of algorithm efficiency). Writing your own horrible sort algorithm is more educational than calling array_sort() that "puts it in order".

      --

      In post Patriot Act America, the library books scan you.
    7. Re: C is a terrible learning language by amw · · Score: 1

      Err no, the fact that only 3 out of 25 could get to grips with C++ tells us that the class what made up of lower than average students.

      It tells me that the class is not made up of people with previous programming experience, but rather people who needed to be taught programing concepts first, not a specific programming language.

      And .Net should be avoided, from what I can see Stanford is one of the top CS Unis and in their first year of CS they teach, Java, C (some Assembly), C++, Scheme Python. Those are the langugues that you should know.

      Just to clarify, are you stating "Don't learn this, because I think they teach different things in a University in another country"? I quite honestly do not understand the point that you're making.

      My A level course taught Pascal. My degree covered Modula-2, Mathematica, Miranda, Prolog, 68000 assembler, and a few more I can't remember offhand. I don't think not having been taught any of these at A level caused me any problems.

    8. Re:C is a terrible learning language by TheDarkMaster · · Score: 1

      I disagree. First that with C you can make an operating system. That for Pascal is just a dream.

      And second, is EXACTLY what goes missing for today's developers, the notion that any memory allocation have a cost, which can not be lazy in controlling errors, you need to control things that can gone wrong. In few words, you need to know what you are doing, and not simply throws this to the language management. Developers are getting lazy because of these "facilities" like GC.

      --
      Religion: The greatest weapon of mass destruction of all time
    9. Re:C is a terrible learning language by happy_place · · Score: 1

      Um. What's the difference between "=" vs ==" in C and Pascal's use of ":=" and "="? They both seem to serve the same purpose, and there's nothing confusing about that, is there?

      --
      http://www.beanleafpress.com
    10. Re: C is a terrible learning language by freeshoes · · Score: 1

      Err no, the fact that only 3 out of 25 could get to grips with C++ tells us that the class what made up of lower than average students.

      It tells me that the class is not made up of people with previous programming experience, but rather people who needed to be taught programing concepts first, not a specific programming language.

      C++ will thin the herd a bit, get rid of people who haven't the apptitude. Thats if the institution wants to produce the best. If you want some mediocre Java/.NET drones then go with the soft approach.

      And .Net should be avoided, from what I can see Stanford is one of the top CS Unis and in their first year of CS they teach, Java, C (some Assembly), C++, Scheme Python. Those are the langugues that you should know.

      Just to clarify, are you stating "Don't learn this, because I think they teach different things in a University in another country"? I quite honestly do not understand the point that you're making.

      Stanford is the gold standard for CS education, therefore what they teach should be emulated as it produces the calibre of students who came up with Google etc.

      My A level course taught Pascal. My degree covered Modula-2, Mathematica, Miranda, Prolog, 68000 assembler, and a few more I can't remember offhand. I don't think not having been taught any of these at A level caused me any problems.

    11. Re:C is a terrible learning language by Anonymous Coward · · Score: 0

      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.

      Totally agree that starting off teaching C/C++ sucks. The language is just horrible to work in. Having said that, C/C++ *is* the first language I learned, and it was self-taught on-the-job. I got the job because I was smart and could solve problems. Translating that into a computer language wasn't all that difficult. And once I had learned the first language (I had previously dabbled in BASIC and Pascal), learning a new language, as previously stated, is pretty trivial.

      Now I look at how our current C++ programmers do it, and they're using things like boost to help make writing their code not be horrible. Hate C/C++ - not going back. Having to worry about memory allocation, where bit X is and how I can move it to memory location Y - forget it. That's what the computers are for. Me, I tell the computer what I want it to do, not *how* to do it.

      Good bye, C/C++, and good riddance.

    12. Re: C is a terrible learning language by amw · · Score: 1

      Before I start, please learn how to quote posts properly. It makes dismissing your points so much easier.

      C++ will thin the herd a bit, get rid of people who haven't the apptitude. Thats if the institution wants to produce the best. If you want some mediocre Java/.NET drones then go with the soft approach.

      A Levels aren't about 'institutions producing the best'. They are about learning a subject to a reasonable level, before potentially going on to study it at university. Furthermore, programming is only a part of the qualification.

      Stanford is the gold standard for CS education, therefore what they teach should be emulated as it produces the calibre of students who came up with Google etc.

      They are also a University. A Levels are not taught at University. This isn't about trying to weed people out, it's about trying to bring them into a subject. If the post as quoted does represent your true attitude - rather than just being a clumsy attempt at a troll with Dilbertian comparisons thrown in - then elitist attitudes such as yours don't help.

    13. Re:C is a terrible learning language by Halo1 · · Score: 1

      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.

      While I agree with your other comments, in my experience (as a Pascal compiler developer) many Pascal programmers are just as control-freaky and hostile towards garbage collection and other things they perceive as "useless overhead that only helps stupid programmers". I don't agree with that point of view, but it is quite pervasive.

      --
      Donate free food here
    14. Re:C is a terrible learning language by Halo1 · · Score: 1

      I disagree. First that with C you can make an operating system. That for Pascal is just a dream.

      Not really. Seriously, with Delphi-style Pascal you can program at an equally low level as with C (including inline assembler code).

      --
      Donate free food here
    15. Re:C is a terrible learning language by marga · · Score: 2, Interesting

      I work as an Assistant Teacher in my local CS University in Argentina (actually it's Informatics Engineering, but it's almost equivalent to CS).

      For a while we've been doing a experiment of teaching Python in the first semester and C in the second semester. Even though learning C is still tough, I think this order works quite well. In the first semester the students get to learn the basics of programming, without having to learn the quirks of memory managing and the like, while in the second semester they can focus more on that, having a solid base of programming knowledge. Java/C# are taught after that, in the third semester, when focusing on OOP, design patterns and the like.

      I think that this makes an overall better experience for the students that approach programming for the first time. With students that have learned programming at their high-schools we usually spend the whole semester getting them to forget whatever stupidity they were taught.

      --
      Margarita Manterola.
    16. Re: C is a terrible learning language by freeshoes · · Score: 1

      Before I start, please learn how to quote posts properly. It makes dismissing your points so much easier.

      C++ will thin the herd a bit, get rid of people who haven't the apptitude. Thats if the institution wants to produce the best. If you want some mediocre Java/.NET drones then go with the soft approach.

      A Levels aren't about 'institutions producing the best'. They are about learning a subject to a reasonable level, before potentially going on to study it at university. Furthermore, programming is only a part of the qualification.

      Stanford is the gold standard for CS education, therefore what they teach should be emulated as it produces the calibre of students who came up with Google etc.

      They are also a University. A Levels are not taught at University. This isn't about trying to weed people out, it's about trying to bring them into a subject. If the post as quoted does represent your true attitude - rather than just being a clumsy attempt at a troll with Dilbertian comparisons thrown in - then elitist attitudes such as yours don't help.

      If I was about to commit to a 4 year course, I would at least want a taste of the meat of the subject, not some Programming for Dummies version. This is why the industry is littered with morons who haven't heard or read Knuth, and think OO is the only way to code.

    17. Re: C is a terrible learning language by amw · · Score: 1

      If I was about to commit to a 4 year course, I would at least want a taste of the meat of the subject, not some Programming for Dummies version.

      By the time you've done two years of an A-level, you'll have picked up a lot more than 'Programming for Dummies'. I saw a lot of people on my course go from no programming ability to would-make-a-good-developer during those two years. Plus, by the time they finished they also knew whether they wanted to take it further - and, if they had the ability to do so.

      Going back to the original poster, their issue was that the language chosen for them to learn initially was a complex one. Because of that experience, people who had the intelligence and enthusiasm for computing - but, lacking the experience of how alien computer languages can appear - may have been put off entirely, and the industry a worse place for it. People learn at different rates, and assuming that everyone should start on possibly the most complex mainstream language in existence smacks of elitism.

    18. Re:C is a terrible learning language by Tom · · Score: 1

      All the stuff you mention is why I think C is excellent to learn programming in. Not on its own, but if anything teaches you about mistakes and their consequences, it is the unforgiving C.

      When I was assistent back in university, I crashed pretty much every C program the students brought in with input errors. Yes, they hated me. Then they learnt about input validation. I'm pretty sure none of those students are responsible for the horrible input validation exploits we find around to this day.

      --
      Assorted stuff I do sometimes: Lemuria.org
    19. Re:C is a terrible learning language by Sycraft-fu · · Score: 1

      To me, that makes a lot of sense. I mean it seems whenever anyone starts teaching programming, no matter what the language, it always starts out the with really, really basic shit like "Hello World." Ok, fine, good idea, however that is the perfect time to use a lower level language. You don't want to run around and try to write a really complex GUI program in C with nothing but a text editor unless you are really good. But writing basic programs in C isn't all that much harder than many higher level languages except that there are gotchas that people really need to learn and understand anyhow.

      So, start out on something low level like C. Then as your programs grow too complex, step up to a higher level language. Heck I think that might make a great OO introduction. Give students a simple problem, but that takes a fair bit of repetition or the like in C. Then introduce them to the same problem, solved much more elegantly by an OO language. Show them the way it makes solving many kinds of problems easier.

      I'd look at it kinda similar to math: Teach someone the long way of doing something, then show them how to simplify it and use it to build something more complex. Like division. Teach people how it works, how to do long division by hand so they understand what division is. Then simplify it using a calculator, so you can use it in more complex math quickly.

      Of course I'm just a very firm believer that all programmers need to understand how computers work, and that they ONLY work that one way, like it or not. So much bad, and in particular slow, code comes from people who think that whatever high level way of programming they like is the "best". They don't understand that on a basic level, computers don't deal with that. Now in many cases it doesn't matter, it is far more important to have code that is easy to read and maintain. But the programmer needs to understand that when it comes time to optimize and speed matters, that the processors thinks in a certain way and you have to deal with that to get the most speed out of it.

    20. Re:C is a terrible learning language by Hurricane78 · · Score: 1

      C is a language for people who already know how to program (well),

      That’s not enough. They also have to be masochists, book-keeping on memory management, pointers, and re-inventing the wheel (e.g. of the loop) over, and over, and over, and over, and over, and over again, pounding and pounding soft subtle spots into your sanity. ;)

      --
      Any sufficiently advanced intelligence is indistinguishable from stupidity.
    21. Re: C is a terrible learning language by freeshoes · · Score: 1

      If I was about to commit to a 4 year course, I would at least want a taste of the meat of the subject, not some Programming for Dummies version.

      By the time you've done two years of an A-level, you'll have picked up a lot more than 'Programming for Dummies'. I saw a lot of people on my course go from no programming ability to would-make-a-good-developer during those two years. Plus, by the time they finished they also knew whether they wanted to take it further - and, if they had the ability to do so.

      Going back to the original poster, their issue was that the language chosen for them to learn initially was a complex one. Because of that experience, people who had the intelligence and enthusiasm for computing - but, lacking the experience of how alien computer languages can appear - may have been put off entirely, and the industry a worse place for it. People learn at different rates, and assuming that everyone should start on possibly the most complex mainstream language in existence smacks of elitism.

      I dont understand why people think C++ is a complex language it simply supports many paradigms. It can be simple if you stick to certain areas.

    22. Re:C is a terrible learning language by Anonymous Coward · · Score: 0

      Yes because they probably quit programming.

    23. Re:C is a terrible learning language by TheDarkMaster · · Score: 1

      A pascal operating system? OMG!! Run for the mountains!! AHHHH!!!

      --
      Religion: The greatest weapon of mass destruction of all time
    24. Re:C is a terrible learning language by GoatCheez · · Score: 1

      No array bounding, no memory protection, casts all over the place without any errors, subtleties like '==' vs '='. C is a language for people who already know how to program (well), not those who're learning.

      I like C a lot, however I'd hate to have learned to program in it. Fortunately I'd learned and had a strong foundation in Pascal first.

      Did you somehow forget that Pascal also differentiates between an comparison and assignment? '=' vs ':='

      C is a language that is closely tied to machine language. If you know assembly, you should be able to figure out how your code would compile. That's the whole point. It forces you to write good, clean code. It doesn't let you get away with things and does EXACTLY what you tell it to do. This is precisely what you want taught to someone who is new to programming.

    25. Re:C is a terrible learning language by Anonymous Coward · · Score: 0

      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.

      I work with people that only know Java. They think they are gifted but they are drudges. They really lack deep understanding of programming and do things that are computationally very inefficient in terms of system resources. They have no clue what re-entrant code is or recursion. They would of been eaither much better programmers or weeded out if they had learnt assembly language or C first ( or even "traditional" Pascal.

    26. Re:C is a terrible learning language by Anonymous Coward · · Score: 0

      Having a separate equality and assignment operator is not a subtlety, it's a feature of all procedural languages, AFAIK. Maybe Visual Basic shields you from such "subtleties," but I'm not going to waste my time on it to find out. Even a purely functional language like Haskell, which does not have traditional assignment, uses = and == to mean different things.

      Don't get hung up on syntax. If you're any good you'll have used a good number of languages with very different syntax (and paradigms) before people being paying you to code.

    27. Re:C is a terrible learning language by Anonymous Coward · · Score: 0

      Having done the A level in computing before going to university I found that it gave me a good head start in my CS degree over others who had no experience of programming.

      We did VB5 at A-Level and I found the basic skills, understanding of simple programming structures, transferred to C, when we learned more in depth.

    28. Re:C is a terrible learning language by anti-NAT · · Score: 1

      Um. What's the difference between "=" vs ==" in C and Pascal's use of ":=" and "="? They both seem to serve the same purpose, and there's nothing confusing about that, is there?

      C will accept '=' in comparison statements e.g. if (i = 0) is completely valid. It will assign the variable i the value of 0, and follow the 'false path', as in C, 1 = true, everything else equals false. The problem is that most of the time, that's the complete opposite of what people want. Pascal won't let you do that, because it doesn't let assignments occur within comparison statements.

      --
      The Internet's nature is peer to peer - 20050301_cs_profs.pdf
    29. Re:C is a terrible learning language by Tom · · Score: 1

      If you can't get input validation right, then it is better you quit programming. Seriously. Even if your programming language is more forgiving and I can hand it 1000 null characters when it asks for an integer, you still want to do input validation, or something else may break further down the chain (database, other connected systems, transfer stacks, etc.)

      --
      Assorted stuff I do sometimes: Lemuria.org
  23. void free(void* ptr) by Anonymous Coward · · Score: 0

    Now that C is gone, I guess they think it will 'free' more for other languages. Too bad when they learn it doesn't 'return' anything!

    Thanks! I'll be here all night.

  24. Try Scheme, or Haskell by surelars · · Score: 2, Informative

    If you really want a language "designed to teach programming and problem-solving", try Scheme or Haskell. Those are truly stable languages that will help students learn sound computer science principles, basic data structures, and programming principles.

    Once that's in place, learning a "real-world" programming language is straightforward. No programmer should master only a single language.

    And, yeah - C wouldn't be my choice for a first programming language either.

  25. A UK Teacher writes by autismuk · · Score: 1

    Anyone who is surprised at this has no idea how poor the standard of the average A-Level candidate is in the UK. Some - the better ones - can just about cope with the "paint the screen form and attach events" model in VB 6. Not the VB.Net Object version, that's just way beyond the ability of most ; Java likewise - beyond "Hello World". Most teachers can't do program either beyond the trivial level, so their pupils don't have much chance of learning it.

    1. Re:A UK Teacher writes by 16K+Ram+Pack · · Score: 1

      Most teachers can't do program either beyond the trivial level, so their pupils don't have much chance of learning it.

      I hope you are not an English teacher ;)

  26. No more C? by RenHoek · · Score: 2

    People no longer learning C programming?

    More work for me! :)

  27. A-Level, not Degree by mccalli · · Score: 3, Informative

    For those who don't know, these are 16-18 year olds typically and they would normally be using these exams as a stepping stone to University. They wouldn't be computer science specialists at this point.

    At this level, I agree with the decision. You're looking for aptitude and interest at this stage, not machine specifics. Pascal is a good language for expressing and solving problems and was enough to get my attention when I was doing A Levels twenty years back - in Turbo Pascal.

    Cheers,
    Ian

    1. Re:A-Level, not Degree by Anonymous Coward · · Score: 0

      There's also an argument to be made that this is a computer science course anyway, and shouldn't treat producing programmers as its primary goal. I recognise that that's not practical, but I can dream!

    2. Re:A-Level, not Degree by Anonymous Coward · · Score: 0

      More to the point this is a stepping stone to a software engineering course, where they will use java, and only java. Anyone planning to do compsci at university will be studying maths and science.

  28. Remember this is only A-level by Nick+Fel · · Score: 4, Informative

    For those outside the UK, that's the two optional years for 16-18 year olds at the end of secondary school. They're not churning out qualified programmers, they're churning out people who have a basic idea of what programming is and might want to pursue it at university. When I did the AQA Computing A-Level we were taught QBASIC and VBA. It didn't stunt my career too much.

    1. Re:Remember this is only A-level by LizardKing · · Score: 1

      For those outside the UK, that's the two optional years for 16-18 year olds at the end of secondary school.

      They're optional sure, but only if you don't want to go onto university (and most people studying at A-level do). The problem with this curriculum is that an A-level Computer Science course offers no benefit for those intending to study Computer Science at university. According to friends in academia, many courses spend more time teaching the basics to those with A-level computer science qualifications than those without them, as too many misconceptions are learned from shit programming languages like VB.

    2. Re:Remember this is only A-level by Nick+Fel · · Score: 1

      I'm not sure about that, I've supervised first year Java practicals and I seemed to have more problems with those who, for example, just didn't get what control structures were for. This is in the first few weeks obviously - after that the computing A-level is pretty irrelevant. That was my experience as a CS student myself as well - it was a nice boost for a few weeks, but after that we'd covered the A-level syllabus in its entirety. The real benefit for me was finding out what computer science as a subject entailed and having something to inspire a formative interest in programming.

    3. Re:Remember this is only A-level by 16K+Ram+Pack · · Score: 1

      That's the problem. No-one is saying that you can take programmers with A-level CompSci and get them to do hardcore coding, but VB6 is just bad. VB6 was always about building WYSIWIG form-based applications and not much else. It's a scrappy form of UI OO and if you haven't moved onto .net by now (or one of the more recent FOSS languages) then you shouldn't be teaching programming.

  29. get this into your bloody eu heads by perryizgr8 · · Score: 1, Insightful

    if you can't write c, you are not a programmer.

    --
    Wealth is the gift that keeps on giving.
    1. Re:get this into your bloody eu heads by confused+one · · Score: 1

      It's difficult for some kids to get their start with C -- it's difficult to wrap their head around. Pointers really mess with some students... You can start with something else and then transition them to C like languages once they have the basics down, and still end up with competent programmers.

    2. Re:get this into your bloody eu heads by mr_da3m0n · · Score: 0

      It's difficult for some kids to get their start with C -- it's difficult to wrap their head around. Pointers really mess with some students... You can start with something else and then transition them to C like languages once they have the basics down, and still end up with competent programmers.

      If I had mod points I would mod this up.

      I am not a professional programmer by any means, I am what my job title pompously describes as a Network Architect or a Network Analyst. However the deeper I got into advanced network design and unix, I realized programming was a skill i'd need, so I began learning a few years ago, and it has indeed served me well and proved to be very useful in my daily job, if not only to get a deeper understanding on how things work.

      I started with Java, because I work with Java Application Servers, and turns out you can't really do that without knowing at the very least some Java. I knew some PHP at that point, and some scripting languages, but that did not really count. So I spent a few months intensively teaching myself Java. About four years later, I now grok Java fairly well. Once that was done (well, to a sufficient level at the very least), I moved on to C, which has helped me understand Unix even more thouroughly than I already did. In fact, it helped me understand how computers work at a basic level, which is something I find extremely useful overall.

      The point is, transitioning to C is not impossible nor made any harder by knowing a higher level language. In fact, if anything, it is made a bit easier because you only end up uncovering the inner-working of your high level language.

      Let's face it, C is hard. Really, really hard.. It's not that hard to get the syntax, it's merely a bit complex to learn the concepts (pointers are difficult to wrap your head around at first with no prior experience) but it still remains extremely difficult to program C properly. It's unchecked, arrays must have a definite size from the ground up, there are no bounds being checked and it's really easy to overlook something and end up with a segfault or worse, a security liability when you program walks right off the buffer and begins clobbering the stack with user provided data. It's not impossible, it's just hard. To this day whenever declaring a char array in C, I still don't know how big to make it instinctively, and I always spend an obscene amount on implementation details -- making sure no bounds are overrun, ensuring allocated memory is released, etc, all the while trying to keep it portable. I always end up with this uneasy feeling in my stomach that while the logic of what I was trying to accomplish is complete, the implementation of these tiny details are probably deeply flawed somehow and I shouldn't trust my code.

      I'm not saying, don't program in C or don't bother learning it. I'm saying it's not necessarily the best way to start learning. I'm all for learning the basic concepts using a high level, dynamically typed language like Python, which makes programming fun again. Or Java, which makes you understand Object Oriented programming really well and is strict enough for you to beging dipping your toes in concept like explicit casting, strong typing, etc. Let's keep in mind that CompSci A, as stated multiple times in the comments so far, which is not university level. Starting by learning abstract programming concept and the moving on to C later on makes perfect sense to me.

      As I stated earlier, it does make you understand a lot more about your high level language of choice. Now in Java, when I pass an object as an argument to a method, I automatically see a reference being passed around, and I think pointers and memory addresses. Makes it a lot easier to properly understand what the fuck you are doing, and I'm grateful for it. But if I had learned C first, I'm fairly certain I would have given up at some point, or carried over some freak micromanagement fetish, which, knowing myself, I'm sure I would have developped.

  30. What are you actually teaching? by Anonymous Coward · · Score: 0

    If you're teaching algorithms and problem solving, then I guess that a 'teaching language' is ok.

    If you're teaching professional programmers, you should be teaching languages that are actually used: C, Java, C++, etc. Most computer programs don't involve a lot of deep thinking or sophisticated algorithms. According to the bureau of labor statistics the skill that is most valued is the ability to integrate systems.

    The ironic thing is that whenever I have seen sophisticated algorithms in action the program involved was written in C. People worry about the efficiency of device drivers and kernel stuff but almost never worry about the efficiency of their Python code.

    The problem solving taught using Pascal has little relevance to the kind of problem where you have to spend a lot of time tweaking an algorithm for more efficiency.

  31. It could be worse... by gnalre · · Score: 1

    The open university are going to move there beginning programming course from javascript to scratch(http://en.wikipedia.org/wiki/Scratch_%28programming_language%29)

    --
    Choose your allies carefully, it is highly unlikely you will be held accountable for the actions of your enemies
  32. Computer Science != Programming by mattsday · · Score: 4, Insightful

    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!
    1. Re:Computer Science != Programming by Anonymous Coward · · Score: 0

      Your definition of Computer Science is very problamatic. People go to College to get jobs. Most majors should have a large focus on practicle job skills. Its ok to have some theory included but not at the expense of job skills. Most of that theory should be shifted into a masters or doctorate programs.

  33. A-level == first year of study? by gnalle · · Score: 2, Informative

    I think that the article describes which language that students learn during their first year of study. They can learn C afterwards.

    1. Re:A-level == first year of study? by nighty5 · · Score: 1

      Mod this up.

    2. Re:A-level == first year of study? by Anonymous Coward · · Score: 0

      A-level is high-school mate. This has nothing to do with what Uni's teach - mainly because each one decides something different :s

    3. Re:A-level == first year of study? by Raemond · · Score: 1

      A-levels are the courses students take at ages 16-18 *before* going to university, and stand for "Advanced Levels". Done in all parts of the UK except for Scotland, who have different qualifications called "Highers" which are somewhat equivalent.

    4. Re:A-level == first year of study? by RadioElectric · · Score: 1

      A-levels are for 16-18 year olds, BEFORE university-level study. Anybody who'd be using a Computing A-Level in their job would likely just be maintaining an Access database at a small company or other relatively simple stuff.

  34. My learning curve... by Anonymous Coward · · Score: 0

    GW BASIC: This got me the basics of how to program. I was simply thrilled to see computer obeying my BASIC instructions over and over again, thus creating some beautiful and meaningful commands
    C: I hated moving to this language. The curly braces looked ugly and #includes made no sense at all. The only reason I continued was because I learned that this is one useful language to program Computer Games
    C++: C++ sucked. Big time. Long Time. Now I am in love with this language.

    Bottom line: Have a simple language to get used to the programming world. Then you can move to any other language (based on your personal preference or market driven)

  35. Re:Serious applications are still written in Delph by Rockoon · · Score: 1

    Hmm, anything that can compile to .NET's MSIL should support 64-bit. I suspect the problem isn't a lack of a 64-bit compiler, that its instead a lack of a 64-bit standard library.

    Maybe someone more in tune with the issue can chime in.

    --
    "His name was James Damore."
  36. Re:Serious applications are still written in Delph by Qubit · · Score: 1

    We've been using Delphi to develop our project [but]
    1. No 64bit compiler.
    2. No mobile platform support (except maybe .NET for WinCE devices, but those are dying out due to iPhone/BB/Android and even WinMo7 which is turning into an even more simplified iPhoneish design).

    According to Wikipedia, Free Pascal seems to have 64 support on Linux, OSX, and Windows.

    As for mobile platforms, Free Pascal appears to be able to target the iPhone, but Jobs squashed any chance for fun there, eh? WinCE is supported (no idea on WinMo), and with Linux support you should be able to target Maemo/Meego devices with very little extra effort.

    Android, WebOS, and Symbian? No idea there... but probably too much pain to be worth it to write something.

    I guess a bigger question would be why one would want to target the mobile platforms with Pascal/Delphi at all. I did a little Pascal programming back in the day and didn't really see too much to love when compared to other environments.

    But in the end, I guess it doesn't really matter, especially if general-purpose Linux-based OSes like Meego actually take off on mobile phones. Then all you have to do is target a Linux-based stack, add a couple of different front-ends for your application (one mouse/keyboard based, one touch-based), and you're off to the races.

    --

    coding is life /* the rest is */
  37. Computer Science, not Computer Programming by amw · · Score: 1

    Firstly, the A level is in Computer Science, not Computer Programming. The students aren't there to learn how to program for later commercial use, they are there to learn how computers work and are used. Programming is just one part of the course, and one of a number of areas of assessment.

    Secondly, a lot of people - many of whom, I assume, are experienced programmers - seem to be focussing specifically on which would be the best language to learn for themselves, rather than putting themselves in the position of a 16-year-old who had never programmed before. On my course[1], we were taught Turbo Pascal[2]; however, I remember Logo also being studied. Not because we would ever use Logo in anything other than an academic environment, but because most of the students were programming novices and needed to learn concepts, not code.

    Show these people C, they would have run a mile: for complete novices, the syntax can seem very intimidating. Show them Pascal, they might actually realise that programming isn't as scary as they thought and consider learning C at a later date.

    [1] Between 1991 and 1993.
    [2] How well it was taught, I don't know; those of us who already understood programming were allowed to skip those lessons.

    1. Re:Computer Science, not Computer Programming by LizardKing · · Score: 2, Interesting

      Firstly, the A level is in Computer Science, not Computer Programming.

      A-level Computer Science is supposed to be a grounding in computing theory and programming - there is no such thing as a Computer Programming A-level.

    2. Re:Computer Science, not Computer Programming by amw · · Score: 1

      Firstly, the A level is in Computer Science, not Computer Programming.

      A-level Computer Science is supposed to be a grounding in computing theory and programming - there is no such thing as a Computer Programming A-level.

      That was the point I was making, yes. People are treating this story as if it relates to a (non-existent) A-level in Computer Programming, not one in computer science itself, albeit one with the more generic title of 'A-level Computing'.

  38. That's awesome. by Anonymous Coward · · Score: 0

    When I was in University, we learned Sather-K for object oriented programming, then Gofer for functional programming, then Smalltalk for a practical robotics class. I had done an internship before which required COBOL and RPG/400. When I then started my first real job (still at University), C knowledge was a requirement. It took me about week to learn C. I also already knew so many idioms from the other languages that I could bring experience to the table that other people (who had learned C far earlier than me, but only C) just didn't have. The experience with the other languages has been an incredible help over the years. I think knowledge of a specific language is much less important than knowledge of expressions and idioms.

    Learning as many languages as you can is a very good idea to help you grow as a programmer. University can help here by requiring languages that aren't usable in the "real world".

  39. Who are you going to hire? by OutOfMyTree · · Score: 1

    LOL! Some wonderful comments here. Your concern for the employers hiring programmers of below average intelligence on the basis of their school qualifications alone is admirable, but there are few organisations in the UK doing that.

    Or maybe people are not noticing that this is a school qualification in a country where there is a stated aim of 50% of young people going on to university? So, OK, it is more like 40% in practice. But do employers really employ school-leavers as programmers expecting them to be ready for work without further training? Not unless the kids have substantial extra experience.

    Also, this is about a school-level academic qualification with the assessment set nationally -- but there are other similarly national qualifications for the age group that are designed to be vocational, more closely adapted to the needs of work. This one is not what a schoolkid would take if they wanted to go straight into a job.

  40. Hmmmm by jimmetry · · Score: 1

    This is a triumph. C will never die, but the more they keep grubby young hands away, the more C programmers will be worth.

  41. Re:A-level first year of study? by Grundlefleck · · Score: 2, Informative

    GP is almost right. A-Level is lower, or lesser, than the first level of study at university. It is the culminating level for high school students. Unless other posters here expect high school graduates (at approx. age 18) to enter the university graduate market (without those 3-4 years of university learning), then none of them have grasped this.

    --
    I accept I know nothing. Insulting my ignorance is wasted on me.
  42. I did this course a few years ago... by Anonymous Coward · · Score: 1, Informative

    And the only programming that was covered was exclusively in QBasic, my coursework was all completed using Microsoft Access. This course is not a gateway into software development rather a more involved version of the ICT A-Level course which is also run by the exam board.

    n.b. I'm now working as a software developer using C# so maybe I'm just full of it..

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

  44. Gawd! C has all those pointy things by Anonymous Coward · · Score: 0

    And no one likes those pointy things.

  45. Everyone should learn a C-based language by Anonymous Coward · · Score: 0

    To put this simple, WTF. I'm 16 and about to finish High School after which I will go to a university and start a Computer Science degree. Now this is in Australia but nevertheless I am not a derp, I already know a little bit of C, pretty much fluent in PHP and can get by in Python. Dropping a C based course off of a Computer Science course is absolutely ridiculous. C based languages teach you how a computer works, ASCII, binary, hex, bit arithmetic, memory management. It may be true that these languages aren't used much for simple problem solving nowadays as interpreted languages seem to have hit off. However for powerful, fast and efficient programs you can't go past the power of C and C++. I would much rather learn C# over Java as well, and me being a Linux fag that's quite a statement. From experience I can certainly agree that C isn't the easiest language to learn however personally I find Java harder to program with. Also learning a C-based language gives you the power of ingenuity whereas if you learn Java and then find a job that wants you to build a new type of system you'll say, "Well where's my library?" Even if you don't learn a C based language until your 2nd or 3rd year they are still a part of computing and are very useful. In short, don't cut C based languages from a comp. sci course.

  46. No C? Gee, value for me! by PolygamousRanchKid+ · · Score: 1

    C will be the COBOL of the future. Companies will always have those legacy C applications, just like they still have COBOL ones. And there will be a lack of good, experienced C programmers. In the future, I might consider coming out of retirement . . . if enough cash was offered. The PolygamousRanchDad, an RF antenna expert, did this.

    As to the mantra, "A good programmer can learn any language," I think that it is easier to "Move Up" with languages, than "Move Down." By that I mean, it is easier to go from C to Java, than from Java to C.

    You get spoiled and lazy with languages that do all the thinking for you. When you move to a language where the memory management isn't all done for you, the austerity is tough and rough. It's like moving from a luxury mansion to a trailer park.

    --
    Schroedinger's Brexit: The UK is both in and out of the EU at the same time!
  47. Java in, C# out? by omni123 · · Score: 1

    I don't understand why C# is off the list and Java is on. They are essentially the same in terms of ease/understanding and fundamentals.

    This seems more like a political thing than an educational one.

    1. Re:Java in, C# out? by Shados · · Score: 1

      Even more weird is why C# is out but VB.NET is in. Replace the curly braces by End {Something} and they're basically the same for 99% of purposes.

    2. Re:Java in, C# out? by 16K+Ram+Pack · · Score: 1

      probably the teachers used to know VB and switched.

      I doubt they're using any OO in this, which is ridiculous.

    3. Re:Java in, C# out? by shutdown+-p+now · · Score: 1

      I don't understand why C# is off the list and Java is on. They are essentially the same in terms of ease/understanding

      While I do generally prefer C#, I'd have to disagree here - C# is more complex, simply by virtue of having more concepts. One example is the separation into properties/methods/events, where Java just has methods. It's more convenient in practice (Name vs getName() etc), but it also requires additional explanations. And events - a solid capturing of the observer pattern, but I find even moderately experienced C# programmers not understanding the difference between events and delegates, for example (hey, both have operator+= defined!).

      Oh, while we're at it - delegates. Again, a very handy concept pragmatically, much less verbose than implementing interfaces explicitly, as you have to do in Java. But, consequently in Java, interfaces are all you need to explain to cover callbacks!

      Or the fact that Java methods are always virtual and always overriding. This is bad because it can easily lead to brittle base class OOD problem in real code, but when teaching, it's not something that is particularly relevant, and Java simplified model is much easier to follow - in C#, you have to explain "virtual" and "override" and "new", and how overriding differs from shadowing, and how a class can end up having several methods with the same name, and even several virtual slots, and so on.

      I think that, purely for OOP/OOD study, Java is a near-perfect language. Its concepts are almost strictly limited to just the things that are actually covered by academic OOD, so you can focus on that without being distracted by other things. And, later on, all the things learned there are directly applicable to other languages that build on and extend that basic OOP model, such as C# or Delphi.

  48. Why Delphi? by DrXym · · Score: 1
    This decision doesn't make much sense.

    I fully understand why C might be considered undesirable as a teaching language but their rationale for what languages to recommend makes little sense. Pascal/Delphi are recommended because they were "stable and was designed to teach programming and problem solving". Pascal may have been designed to teach programming but it's also been hacked six ways from sunday because it's 40 years old. There are dozens of variants of the language some with object oriented extensions (object pascal), some without. Which one are they referring to? How is pascal (in one of its guises) better for teaching than Python for example?

    As for Delphi, it is a niche commercial product, one which has grown increasingly irrelevant with each passing year. What Delphi are they even talking about? The version that compiles native code or Delphi.NET? If the latter, how is it more "stable" than any other .NET platform? Why would they recommend a commercial programming language which runs on one operating system and costs a lot of money?

    Other odd things. What is VB6 doing there? I can't think of any reason that VB "classic" should be used to teach anything. Not now, not 10 years ago. I'll give VB.NET a pass since it's basically a dialect of .NET so not especially better or worse than any other standard .NET language and you could write .NET with Mono. But why ditch C# and not VB.NET (or Delphi.NET)?

    It just seems so horribly inconsistent. People setting the syllabus should be recommending, a modern, clean, free, cross-platform language. That means something like Python, Ruby, or Java.

    1. Re:Why Delphi? by amw · · Score: 1

      What is VB6 doing there?

      As a developer, the amount of paperwork I have to do is minimal, and I expect to be able to do it during my working day, as part of the work I do. If I am not finished by the end of the day, I put it down and pick it up the next morning. If I need to learn a new language, that becomes part of my daily work and I actively use it in new projects to assist with that learning.

      A teacher, on the other hand, is routinely expected to stay late in the school doing out-of-hours INSETs, and to take work home with them for marking and assessment, planning future lessons and producing any additional resources that may be needed. I would imagine that a fair number of them simply don't have the time to keep up-to-date learning new languages, and as a result a lobby group somewhere has insisted that older languages - whose runtime is still supported even on Windows 7 - be allowed. This is possibly also the rationale behind Pascal / Delphi being on the list.

      (Don't bother mentioning 'long holidays' until you've lived the life of a teacher: just because you don't see the work happening in front of you, doesn't mean it isn't happening.)

    2. Re:Why Delphi? by DrXym · · Score: 1
      A teacher, on the other hand, is routinely expected to stay late in the school doing out-of-hours INSETs, and to take work home with them for marking and assessment, planning future lessons and producing any additional resources that may be needed. I would imagine that a fair number of them simply don't have the time to keep up-to-date learning new languages, and as a result a lobby group somewhere has insisted that older languages - whose runtime is still supported even on Windows 7 - be allowed. This is possibly also the rationale behind Pascal / Delphi being on the list.

      I don't see why computer science teachers of all people should expect to use some 40 year old language in perpetuity when more modern languages are far more suitable and practical for teaching programming. I say "modern" although the likes of Java, Python, and even .NET have been knocking around for a very long time now.

      I also think that schools of all institutions would appreciate the advantages of using a cross platform and free language as opposed to a commercial one. Software licences alone must be an administrative and budgetary headache.

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

  50. It's before college, not college itself by Aceticon · · Score: 2, Insightful

    What they're talking about is A-level exams. These are taken by high-school graduates before college.

    It's not that Comp Sci students will graduate without having learned those languages, it's that candidates for Comp Sci higher education will not be expected to know them.

    As unfair as it seems to some old hands in IT, nowadays the industry rarelly hires people without college degrees for Programmer positions, so this does not mean we'll be swamped by a wave of "semi-literate" programmers.

  51. VB.NET but not C# by cjb110 · · Score: 1

    That's just illogical, if you allow on base .NET language you should allow both. The syntax is the biggest difference and arguably given C# closeness to Java and C++ it would the more logical choice for a school taught language.

    --
    ----- I refuse to have an argument with an unarmed person
  52. Re:Serious applications are still written in Delph by TheRaven64 · · Score: 1
    I was going to mention Free Pascal. Object Pascal[1] was the first language used on my degree and Free Pascal was good enough to implement all of the coursework. That was a decade ago, and I imagine that it's even better now.

    [1] Note: Delphi is not a language. Delphi is an IDE, Object Pascal is the language that it supports.

    --
    I am TheRaven on Soylent News
  53. I wonder if Delphi means "Delphi" by smchris · · Score: 1

    I know the University of South Africa was interested in FreePascal because it's a lovingly updated clone of TurboPascal -- and free. One of their profs wrote a cyber-cafe program in Lazarus to try it out compared to the Delphi IDE. And, as others have noted, this is for the first year curriculum.

  54. pascal garbage by Anonymous Coward · · Score: 0

    I learned in Pascal. Talk about an annoying miserable language. The whole idea of abstraction is to make programming easier than just coding in assembly. Not sure Pascal met that goal. Yes, I learned some on it. Mainly patience and perservance. I know there are some fans out there, or it'd probably be gone already. I expect that they are primarily academics who never had to earn a living actually coding useful things in it.

    1. Re:pascal garbage by Anonymous Coward · · Score: 0

      yes yes, perseverance for the spelling nazis. You love Pascal, don't you?

  55. How can't they teach C by Murdoch5 · · Score: 1

    C if the starting of all modern programming languages, beyond that it's the language you learn to help you learn others such as C++, VB etc...

    Python is a decent language but you may as well teach the C Python API, that way the students get to learn C and python and OO concepts.

    1. Re:How can't they teach C by russotto · · Score: 1

      C if the starting of all modern programming languages, beyond that it's the language you learn to help you learn others such as C++, VB etc...

      Ever heard of two languages called ALGOL and Lisp?

      (Probably not. *sigh*. Excuse me, I've got some kids to chase off my lawn.)

    2. Re:How can't they teach C by Murdoch5 · · Score: 1

      Lisp and Algol are decent but they have no where near the reach C has and had in programming. I'm not saying they also aren't good languages to try and teach students but if your going to teach Lisp and Algol why not teach Cobol and B? The point is for anyone being taught programming now a days, throw away that crap called Object Oriented and give them "The C Book" by K and R. Once they know C then you can start teaching them OO.

  56. I dont understand the choice. by drolli · · Score: 1

    should this reflect the availability of people who can evaluate the exam? In that case Pascal should have been removed and C should have been kept.

    Or should it reflect the useful languages for CS students? in that case C# and C should have been kept.

    Or should it be the languages the students are proficient in (to give them a good start)? then PHP should have been kept, and Pascal definitely removed.

    1. Re:I dont understand the choice. by xaxa · · Score: 1

      It (presumably) reflects what teachers are choosing to teach, from the nine options that were available.

  57. PHP can be a great learning language by dejanc · · Score: 1

    I'm sorry that they dropped PHP. PHP can be great for learning OO programming. It quickly offers excellent real-world examples of programming: a typical example would be making a blog application. In that example, students can learn how to think in terms of objects (a blog entry is an object, each comment is an object, etc.), they can even construct a simple ORM (which will essentially teach them to use stuff like Hibernate with Java).

    Also, PHP has those neat features, like implementing Iterator, creating ArrayObjects, etc. which can all teach students how to work with linked lists, how to reuse code, etc.

    I started learning OO programming with C++, and I was infinitely bored by console apps with cats and dogs inheriting properties from animal class.

    Finally, even students can now afford a couple of bucks a month hosting with PHP, and show off their work to the world.

    1. Re:PHP can be a great learning language by HappyHead · · Score: 1

      People should not be encouraging "learning" OO programming in PHP - doing so creates some VERY bad habits.

      One such bad habit is best exemplified by a job I was hired for a few years ago, to fix a company's internal data tracking application/internal website, which was built entirely in PHP (with an MS Access97 database that was being migrated over to MySQL one table at a time with an SQL bridge "merging" the two ... I didn't design it, I was hired to fix it.)

      The first thing I noticed was that the site was super slow. A simple database query was taking 10 minutes to load a table with 100 items in it - they said the old programmer blamed the MS Access database, but I wasn't so sure. When I looked at the code, I realized to my horror that the person who wrote it was obsessed with OO programming, to the point that _everything_ was encapsulated in an object, right down to every table cell and row of the output, which were all containing data transfered from objects that contained the individual row/column items from the query. I re-wrote the code in a completely non-OO version, and the page took exactly 5 seconds to come up. Moving the table over to the MySQL database later on only shortened that to 4 seconds - not a major improvement. Then I spent six months, one page/report/whatever at a time, re-coding their entire system and removing all traces of OO, so that it would actually run in an acceptable manner. After I was done, the only remaining OO code was the database access routines, which handled accessing the merged set of databases, and the site ran much better.

      PHP and pure OO coding are not a good combination, for one big reason: PHP is for web applications, which start up, produce a single page, finish, and release their memory completely, destroying any data structures you've created. That means that data structures which are efficient for long-term (read: more than a few seconds) storage of data and ease of access to it may not be good in a web application, because the initialization cost of those structures is higher than the savings they'll give you for the 0.1 seconds of (optimal) anticipated runtime. A bit of OO is okay for it to make coding things easier, but when you're _learning_ OO, you want to get as fully into it as possible, and PHP is a bad language to do that in. Java, Python, C++, and even (shudder) C# are all far better for that purpose.

    2. Re:PHP can be a great learning language by 16K+Ram+Pack · · Score: 1

      PHP is a popular, nasty hack. It's main redeeming feature is that as you say, you can host everywhere for a couple of bucks a month.

      Pragmatically, I use it for those reasons. But I'd rather kids were taught using good languages that teach the concepts well and they can always go and hack later. Best of all would be something like Python/Django or Ruby on Rails.

    3. Re:PHP can be a great learning language by Mybrid · · Score: 1

      LOL.

      OO, the politically correct version of "G[O]T[O]".

      So much OO code, so much spaghetti.

      Compound classic OO programming with Javascript's bizarre notion of "objects" and we've come full circle.

      Back in the 1980s and 1990s when the efficacy of OO was still being debated as to all claims of improved productivity, the only thing that got proved by studies was that in fact, rewriting something from scratch improves code. You can take an OO design and rewrite it in procedural code and come up with less lines, and less bugs. You can take a procedural design and rewrite it in OO code and come up with less lines and less bugs.

      OO is not provably superior in productivity to procedural code except in people's dreams. As my advisor pointed out in grad school, computer languages and methodologies are akin to religion. Once people glom onto them you can't shake them loose.

      A good programmer will be good in procedural or OO, and likewise a bad programmer will still be bad. It is only the hubris of academics that methodology fads, like Design Patterns, can make code more robust or pick your metric. They never prove it.

      I'm involved in an OO redesign now where they are using a concept fad called a "blackboard". LOL. Which is nothing more than a finite state machine design where all long running state is passed around on the "blackboard". After years and years of "encapsulation", they have, in fact come to realize that having a bezillion object copies of what is in fact is GLOBAL data, (No, not global data, YES global data!), they are going to now have data un-encapsulated so they can serialize state of long running transactions. Every object copies everything off the blackboard and the updates it when they are done and updates the blackboard. Copies, copies everywhere. But because objects are not, in fact, using the data on the blackboard, serialization is problematic because processes with object copies of GLOBAL data are in unknown states of running at any given time. Blindly using encapsulation is an Achilles heel of many an OO design.

      Your comment about over "object" achievement reminded me of this. Encapsulation is not always the right design if in fact the application doesn't merit it. But people get taught blindly, as with religion, that encapsulation is always good for all things big and small and you can never get enough of it.

  58. Re:Teaching logic, structures and algorithms I hop by xaxa · · Score: 1

    If you really want to know exactly what these courses teach (or rather, examine), you can find out on the website (click specification (PDF), or the sample exams).

    I think they do do most of the things you say. They simply don't want to mark work written in C or PHP any more, since not many people are using these languages at school.

    Remember most people doing this course will be age 16-18. Also, there are other exam boards who may (or may not) offer equivalent courses using other languages.

  59. FTW UK Exam Board?! by eagee · · Score: 1

    Really? You're choosing VB6 over C#? I mean... really?

  60. approved languages by viralMeme · · Score: 1

    Visual Basic 6, and VB.Net ..

    HAAAAAA !!!!

  61. Re:Well that would be part of the reason to learn by JAlexoi · · Score: 1

    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.

    That is where I just have to say something.
    Computer programs are expressions of our logic. Telling people first how bare metal works is useless without the logic. First the basic logic should come. Then memory management(unfortunately we are stuck with that and MM is mandatory). Then lower level languages.
    Pascal is a teaching language, it was designed to teach. But it fails miserably when coming to memory management. Even Java with it's VM teaches more about memory management than Pascal. (In my personal experience) So for the first step: Pascal(the bare basics), Python, Java
    Memory management should be tought using only and only C. Nothing displays it better(ASM would be overkill).
    And from then all other languages.

  62. Programmer's Resumes by psbrogna · · Score: 1

    I think whether a candidate "knows" a particular language shouldn't be considered a significant factor when considering them for a position. Sure it's one factor but just as, if not more important is whether the candidate has any experience in a specific domain (ie. writing video drivers, specific types of web applications, database middle-ware, etc), their ability to function as a member of a team (especially communication skills specifically with technical AND non-technical workers), their documentation, architectural & project management skills, and their ability to adhere to existing coding standards. "Languages: C, Visual Basic, PHP" is just noise on a resume in my opinion. I prefer to see specific projects identified on a resume which outline project details, challenges and what role the individual played.

    1. Re:Programmer's Resumes by Anonymous Coward · · Score: 0

      "Languages: C, Visual Basic, PHP" is just noise on a resume in my opinion.

      Sure, but imagine seeing this: "Languages: Python, PHP, Ruby." That's not quite noise, because there's no language with pointers on the list. Assuming it's a complete list of what the programmer knows, it indicates there's going to be some huge gaps in what the programmer has experience with, and probably even some serious gaps in what they understand about programmer. Now, that doesn't mean the person can't do whatever job you might have in mind (your can still hire him to work on your website, maybe), but it probably does mean that person can't do all jobs. I guess I kind of expect someone with a CS degree to be able to handle anything or at least be able to learn how to handle anything.

      Thank Satan they left Pascal on the list, and it damn well better be required.

  63. Chiming in as Anonymous Coward by Anonymous Coward · · Score: 0

    I'm an old mainframe programmer. I didn't chime up when they took COBOL out of cirriculums, even though it is a relevant language many companies still use (even in 2010). COBOL isn't hard to learn or master, and a lot of the offshore programmers have no problems with COBOL, either learning it or implementing it. The problem is JCL. IF it's taught, it's only as a side note.

    90% of the abends I deal with are from poor JCL.

    If COBOL was still taught in an educational institution, by qualified teachers, programmers would have tight JCL skills.

    C is a very powerful language. It's still relevant 30 years after being created for a reason.

    Anyone who says "picking up any given language in computers is straightforward" is inexperienced, especially when work puts you to just that task. /I hates RPG.

  64. Re:Well that would be part of the reason to learn by Reemi · · Score: 1

    > Part of being able to write good software is actually understanding how computers think.

    Time for a Dijkstra quote: The question of whether Machines Can Think... is about as relevant as the question of whether Submarines Can Swim.

  65. Re:Well that would be part of the reason to learn by oh_my_080980980 · · Score: 1

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

    The same can be said of the fucking student. Get off your fucking ass and read a book, take a language details course.

    Seriously, do you really think you are going to know all you need to when you graduate from college? Do you really think you stop learning? Do you really think your employer will not expect you to learn on your own the latest and greatest technology???

    Moron

  66. What's wrong with it? by luis_a_espinal · · Score: 2, Interesting

    People setting the syllabus should be recommending, a modern, clean, free, cross-platform language. That means something like Python, Ruby, or Java.

    First, how do you teach system-level concepts with those languages. I would grant you that you can learn the basics of programing, Python and Ruby would be fine (not Java since you can't express things procedurally if a problem requires so.)

    But you can't divorce the basics of programing from the fundamentals such as programming on non-memory-managed systems without having to face (and learn to deal with) portability issues. This has been one of the greatest fallacies of all, to think you can efficiently cultivate programmers with an exclusive or almost exclusive usage of extremely high-level languages.

    Second, what's wrong with Delphi, as a teaching programming language. It has many (if not all) the strengths of Pascal-like languages (Turbo-Pascal in particular) while at the same time introduces new programming concepts that did not exist when Pascal and Pascal-dialects were conceived (properties come to mind.)

    Yes, Pascal has been hacked away into multiple dialects, but all capture innate qualities. OO and advanced pointer manipulation is usually very similar from one another. So for the purposes of teaching programming, any one modern Pascal dialect will suffice.

    Delphi has been an industrial language (however, niche it might be), and Anders Hejlsberg, the chief architect of Delphi, is also the lead architect of C#. C# (the 3rd-4th most widely used programming language in industry) has a lot more immediate roots in Delphi than on any other C-syntax-like languages.

    When we consider these facts in addition to Delphi's qualities as a modern programming language, I would say these are more than enough reasons to use it as one of the modern non-gc-babysitted tools for learning structured programming in both procedural and object oriented paradigms.

    1. Re:What's wrong with it? by DrXym · · Score: 1
      First, how do you teach system-level concepts with those languages. I would grant you that you can learn the basics of programing, Python and Ruby would be fine (not Java since you can't express things procedurally if a problem requires so.)

      And pascal & Delphi are hardly better. Most operating systems in recent memory have C interfaces so if your intent is teach system level concepts, why not do so through C or C++? Even as far as pascal is concerned, there are so many damned variants of it that just saying "pascal" is meaningless.

      Second, what's wrong with Delphi, as a teaching programming language. It has many (if not all) the strengths of Pascal-like languages (Turbo-Pascal in particular) while at the same time introduces new programming concepts that did not exist when Pascal and Pascal-dialects were conceived (properties come to mind.)

      I thought that would be obvious. It's proprietary, expensive, runs on a single platform and is effectively an evolutionary dead end. Python would be a far more suitable language if the aim is to teach on, or .NET provided that Mono was an option, or Java, or Ruby.

      Delphi has been an industrial language (however, niche it might be), and Anders Hejlsberg, the chief architect of Delphi, is also the lead architect of C#. C# (the 3rd-4th most widely used programming language in industry) has a lot more immediate roots in Delphi than on any other C-syntax-like languages.

      I'm aware of that, but in that case, why is this list recommending a legacy, dead-end language and not C#?

  67. This exam board is crap... by DavidR1991 · · Score: 1

    ...and not because of what it has done. It is just generally a sucky exam board for technical stuff and science. AQA's main areas are English and the arts. It is not good at maths and science which why the majority of secondary schools only have AQA exams for English etc.

    The ones that are worth their weight are the ones that don't teach any specific language (WJEC is one like this - the one I did, in fact. The written exam is a joke but the coursework is very well constructed). They let you implement a project of your choice in any language. You have to document it at all, explain the rationale behind it, evaluate and demonstrate it etc. Much much closer to a 'real world' project than a "HERE IS LANGUAGE X LET'S LEARN IT BECAUSE IT'S THE ONLY THING YOU'RE ALLOWED TO DO"

  68. Re:No C? Gee, value for me! by mr_da3m0n · · Score: 1

    C will be the COBOL of the future. Companies will always have those legacy C applications, just like they still have COBOL ones. And there will be a lack of good, experienced C programmers.

    That's not entirely true, system stuff is still being done in C (or sometimes C++). Since everything runs on that, I doubt it will go the way of the dodo, or COBOL anytime soon. As for a lack of good, experienced low level programmers, we already have that today. Java programmers that land at my workplace hardly understand what happens behind the scenes. Most school curriculums today hardly seem to focus in teaching you how computers work inside and out, they seem to focus more on teaching you the language du jour and some basic problem solving skills that are specific to that language in order to manufacture employable programmers. This seems to lead to a lot of cargo cult programming, especially in Java. "Everything must have an interface. I have no clue why, I was just taught to do it".

    What I think will happen is rather, there will be two kind of programmers. Low level programmers and high level programmers. System programmers and Application programmers. Just like we currently make a rather strong distinction between a web application developper and someone who writes C on embedded systems. The two have a very vaguely defined common knowledge area, but the skill sets required by either are completely different.

    As to the mantra, "A good programmer can learn any language," I think that it is easier to "Move Up" with languages, than "Move Down." By that I mean, it is easier to go from C to Java, than from Java to C.

    You get spoiled and lazy with languages that do all the thinking for you. When you move to a language where the memory management isn't all done for you, the austerity is tough and rough. It's like moving from a luxury mansion to a trailer park.

    I have done just that, and I disagree. Of course there is a huge culture shock at first, but then you can focus on learning the implementation details, because at that point you are already supposed to understand the abstract programming concepts. Flow control, assignement, types, for loops, problem solving logic, etc etc. All you're uncovering are basically the inner workings of what you already knew. Learning something out of need is normally done bottom up. Learning something out of sheer curiosity and interest seems to be done by moving down.

    For instance, when I first got into computers, I began to learn how to use them. Then I dug down. "Mm, I wonder how such and such works? What makes it thick?". It's like having an adventure where you discover how shit works.

    Then again, that's merely how I seem to approach things, doesn't mean it works for everyone, but it has certainly served me well so far.

  69. Anonymous Coward by Anonymous Coward · · Score: 1, Informative

    At least in the UK there is some choice. I am a high school CS teacher in Texas, and in the US, the Advanced Placement exam (taken for college credit) is language specific to Java. I am not sure how closely correlated the AP exam is with the A-level, but it is more or less the standard CS course in Texas and in many other parts of the country. If you do not teach Java, the students will not pass the exam. I know some teachers that start their classes in Scheme or VB (or Scratch or Alice for that matter) to introduce concepts/algorithms and then teach Java syntax for solving the same kinds of problems. These teachers are taking 2 years to teach CS, but I don't have that luxury so we start and finish in Java. For the vast majority (90-95%) of these students, this is the first time they have written code.

    I would have to agree, and my students who return from university to visit say the same, that it is easier (wiser?) to go from C to Java than the reverse.

  70. sigh by Anonymous Coward · · Score: 0

    And the dumbing down of Comp. Sci. education continues...

  71. Not really gone by bsDaemon · · Score: 1

    Anyone with a first-year computer science background should be able to tell you deleting doesn't mean its gone, just hiding. Of course, these students will probably now not learn the difference.

  72. Veiled attempt to direct industry? by LSU_ADT_Geek · · Score: 1

    Everyone has already chimed in about the merits of learning foundational programming languages like C and C++, but I wonder if the defense of "this is what the industry is" should be the main reason for getting rid of languages. I liken this to forcing US students to learn COBOL because larger companies and universities don't want to get rid of their mainframes. Though it is the responsibility of higher education to prepare individuals for the work force, it seems this move will only stagnant the talent pool and make it harder to advance to new paradigms later.

  73. Listen to me, and listen well by WinstonWolfIT · · Score: 1

    As cat-herder of multiple million-line+ systems, and speaking to the teachers reading this, teach your students one and only one thing: The Miller principle. Simplify every problem down to a complexity of maximum 7 items. At that point, the language is completely immaterial. Developer-savants like to write code that only they can understand. They crash and burn on systems of the sort I manage. The good ones write code that can be visually verified, and they're the ones who get promoted, and subsequently retire rich. Take this one to the bank and smoke it.

  74. You GOT to be kidding me! by Hurricane78 · · Score: 1

    Visual Basic stays in? Seriously?
    If you throw out one crime against humanity (PHP), you have to throw out the others too! I mean compared to VB, PHP nearly is bearable.

    And then Object Pascal (Delphi)? When there are things like Haskell, Erlang, etc out there?
    I had to work on a 3-month project using Delphi two years ago. And unless they completely changed the language, that thing is just as much of an outdated error-prone mess as Fortran, Cobol and C. Elegance: Not to be found for another 1000 miles.

    This is another mark that shows the irrelevance of those exams. They are like a blind person judging the paintings of others.

    --
    Any sufficiently advanced intelligence is indistinguishable from stupidity.
  75. O-level is simpler than A-level by Mathinker · · Score: 1

    Wikipedia is your friend.

  76. There are 10 types of programming languages by Tei · · Score: 1

    01: Languages to write web and desktop applications. Bussines level stuff. Bussines logic.
    10: Languages to write web server, desktoops, bussines, logic, and everything else that the other can't.

    Visual Basic, Basic .NET and all the Pascal variants (pun no intended) are to build the 01 type, but C is needed for the 01 type.

    --

    -Woof woof woof!

  77. Bad, bad move by Lisandro · · Score: 3, Insightful

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

  78. Re:Well that would be part of the reason to learn by Sycraft-fu · · Score: 1

    The pedantry of geeks never ceases to amaze me. If you don't like my choice of terms, well too bad, I happen to believe "think" is a good way of putting it. You have to deal with the fact that at a fundamental level computers have a given way they process data. They have a set of rules for how they deal with things, a way they go about doing what it is that they do. this is something you have to come to terms with if you want to really understand them and be able to write really efficient code. No matter how you structure things, no matter how things make sense to you, there is only one way that computers deal with it. While the idea of data having an inherent, immutable, type might be a nice idea, computers don't have that at a basic level. It's all just streams of binary data and you can process it however you wish.

    A nice way to sum that up, is that they think in a certain fashion. If you don't like that term, well too bad.

  79. Re:Well that would be part of the reason to learn by Sycraft-fu · · Score: 1

    Man you got a case of the whinies in this thread. What, you mad that someone who has a degree got a job making more than you?

    For reference, I'm not a college student, I'm an IT professional that works at a university. As such I work in supporting teaching and research, and supporting the teaching side is more of what I do. I find that the undergraduate students are quite willing to learn. Maybe some freshmen not so much but they get weeded out before they are admitted to the major. However I also find that some supposed educators seem to believe that they should be exempt from learning. They learned how to do things 30 years ago and don't think they should bother to update their knowledge. I find that to be exceedingly hypocritical, that on the one hand they can be demanding that students learn new things while on the other refusing to learn themselves.

    It's not a matter to trying to teach kids everything they need to know, it is a matter of being efficient and modern in teaching. You need to teach using something, why should that not be what is currently used in industry? I mean I suppose we could teach students semiconductor design all by hand and have them try to sketch their Photomask by hand on a transparency and so on. Or, we could (and do) have them use Cadence since that is actually the tool that they'd be using in the real world, and gives them designs you can actually send to a fab to have made. Seems to me the smart thing is to teach them the theoretical knowledge AND give them experience in a useful tool at the same time.

  80. Re:Well that would be part of the reason to learn by Ksevio · · Score: 1

    Pascal/Delphi is very much still used by companies. Perhaps you've heard of Skype? It's not like the old Pascal of the 80s anymore.

  81. "Computer Science" is not a trade by degeneratemonkey · · Score: 1

    I am confounded by all of these responses which argue the merits of teaching with one language or another. After going through college and grad school, I am convinced that students are taught CS completely ass-backwards. AP should be focusing on introductory computation theory and basic algorithms. There is no need to write a single line of code so early in one's studies. That's not to say that it'd be bad for a student who's motivated and able, to pick up a language on his or her own time; as an academic field though, "Computer Science" is not "Computer Programming."

    1. Re:"Computer Science" is not a trade by russotto · · Score: 1

      There is no need to write a single line of code so early in one's studies.

      Algorithms without a language is like calculus without algebra; it just doesn't work. You can introduce some form of pseudocode, but IMO that's just a waste of time.

    2. Re:"Computer Science" is not a trade by swordgeek · · Score: 2, Interesting

      Agree completely. However, the industry is demanding CompSci degrees for work as a tradesman (programmer), and the Universities work towards that goal.

      Eventually we may learn to put programming into a two or three year diploma at a college/trade school, and use comp sci degrees for development of the field. This model works in most other fields, but the problem is that computing is so young that until about 20 years ago, 'mere programming' _was_ developing the field.

      --

      "People who do stupid things with hazardous materials often die." -- Jim Davidson on alt.folklore.urban
  82. Re:Well that would be part of the reason to learn by jgrahn · · Score: 1

    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.

    I don't care what companies want. Companies are stupid. But I *do* care if those languages are relevant, interesting, are used by lots real people and have free implementations. Pascal fails all those tests. Wasn't that the crippled little 1970s language which lacked modularity and variable-sized arrays? ObjectPascal (or whatever it's called) can be used for real programming (I knew a guy ten years ago who did), but fails most of those criteria.

    The "designed to teach programming and problem-solving" phrasing the board used almost certainly refers to Wirth's original Pascal. I bet Borland didn't design Delphi as a teaching tool.

  83. Re:Dumbing Down ("as has happened in the US") by An+dochasac · · Score: 1
    And there lies the problem, U.S. universities are turning themselves into trade schools in order to satisfy the short-term profit motives required to support the education bubble. Combine this with the narrowly focused (and innovation killing) "teach to the exam" methodology of European schools and eventually a computer science degree will be a certification program narrowly focused on commercial products which were popular four years ago.
    • .Net
    • VB6
    • Java
    • Windows XP
    • ??? Version 1.0001 (tsk tsk, you have 1.0000, 4 more years for you, pay up!)

    The fact that U.K. schools are reimporting this stupidity will maintain the unnovation balance of power. Yes it's challenging to write a "commercial technology" neutral exam, but we should be striving for that so that graduates with training in version (n-1) won't be completely lost. Meanwhile I look forward to the day when I'm up against graduates with a PhD in cloud computing or whatever the technology buzzword du jour is.

  84. See signature. by RingDev · · Score: 4, Funny

    As it was said before: "never take software advice from a bug tracking system salesman" -AV

    --
    "Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
  85. Great plan! by KiwiCanuck · · Score: 1

    Have people who have most likely never coded in their life develop the curriculum. Genius!

  86. There is no Obsuficated Pascal Contest by seawall · · Score: 1

    Pascal is relatively straightforward; at least until you hit something it wasn't designed to do. C, C++, Perl and (heaven help me) APL programmers have been known to take it as point of pride their code is "so clever nobody but me and the interpreter/compiler understand it"). Which one would you rather grade?

    1. Re:There is no Obsuficated Pascal Contest by gmack · · Score: 1

      I'll grade the C and give it the easiest F ever. C doesn't have to be unreadable and if whoever comes after you can't read the code you aren't doing it right.

  87. Programmers are not compilers by Anonymous Coward · · Score: 0

    The differences between the languages is something that should not matter in teaching programming. It seems like they are trying to teach people to be compilers (Pascal, C, C#, PHP) instead of teaching programming.

    Solving the Tower of Hanoi in Scheme:

    (define (move N from to spare)
        (if (= N 0)
                (display "")
                (begin
                    (move (- N 1) from spare to)
                    (display "move from ")(display from)(display " to ")(display to)(display "\n")
                    (move (- N 1) spare to from))))

    Solving the Tower of Hanoi in C#:

    static void move(int n, char from, char to, char spare)
    {
            if (n > 0)
            {
                    move(n - 1, from, spare, to);
                    Console.Write(" move disk " + n + " from " + from + " to " + to + "\n");
                    move(n - 1, spare, to, from);
            }
    }

    Solving the Tower of Hanoi in Pascal:

    PROCEDURE move(N, Tfrom, Tto, Tspare : integer);
        BEGIN
            if N > 0 THEN
            BEGIN
                move(N-1, Tfrom, Tspare, Tto);
                writeln('move ', Tfrom:1, ' --> ', Tto:1);
                move(N-1, Tspare, Tto, Tfrom);
            END
        END;

    Most of the times the bits and bytes are not part of the problem. And when they are then they need to be analysed as part of the problem like any other requirement. Also, not understanding the LOGIC of the recursion can have far more impact in performance than not understanding that virtual memory is mapped to segments (which is just an engeniering issue).

    --
    PAC

  88. Re:Serious applications are still written in Delph by Megane · · Score: 1

    More specifically, Object Pascal is what Borland fucked up, compared to what Apple originally came up with. What Borland produced was a bastard child of Object Pascal, basically implementing C++ with a Pascal syntax, such as most objects being stored as non-relocatable structs (records) on the stack, rather than being exclusively refrerences to relocatable pointers. Back in the day, I was already doing "real" Object Pascal on the Mac, and I was banging my head into the desk over what Borland did.

    However, I do understand that they were working with the 8086 and its horrible segment memory architecture, and they had nothing like the memory manager from MacOS. No large (>64k) memory blocks, no automatically relocatable handles, and the 640k limit.

    --
    #naabhaprzrag, #sverubfr-000, #agi-fcbafberq, negvpyr[pynff*=' negvpyr-ary-'] { qvfcynl: abar !vzcbegnag; }
  89. Yes, of course it's still true. by wonkavader · · Score: 4, Interesting

    If you're a good programmer, programming languages are easy. If you're curious about a language, you can learn the basics of it in a few hours and be adequate in the language in a weekend.

    (Now, being good in the language requires more than that -- it requires a project or two, some refactoring and some time, but that's beyond what the poster said.)

    Even mediocre programmers can pick up the basics of any language quickly. The focus on just a core of languages, and often, just ONE language, which we often hear from job candidates and young posters on slashdot are a reflection of the many graduates coming out of CS departments these days who exhibit a distinct lack of talent. There are still some great programmers coming out of our CS programs, but there are many, many more drones than came out of such programs 20 years ago.

    Somewhere along the line, a CS degree became a way of ensuring yourself a job in much the same way a degree in accounting did, and CS began to get people who didn't really give a shit. "I'll pay the money, go to the classes, get the degree, and get a job. Then I'll be safe and happy until I die."

    Talented programmers pick up languages when needed, and they do it quickly. Programmers have curiosity about computing. Missing either of those means a bad programmer. Not knowing the basics of such a simple language as C equals a bad programmer.

    If you're bothered by that analysis, surf a little, write a few programs, read a few to see how things are done, and the point will be moot. Unless you're a bad programmer, in which case you'll find C very difficult, take weeks to get anywhere in the language, decide you need to take a class in C to learn it, never be able to figure out why your simplest C stuff won't run at all.

    And ya know what? The same goes for FORTRAN!

    1. Re:Yes, of course it's still true. by ClosedSource · · Score: 1

      "Somewhere along the line, a CS degree became a way of ensuring yourself a job in much the same way a degree in accounting did, and CS began to get people who didn't really give a shit. "I'll pay the money, go to the classes, get the degree, and get a job. Then I'll be safe and happy until I die."

      That was never entirely true and it certainly isn't true now. Besides today programming languages aren't that big a factor in hiring. You need to have experience in the 10 frameworks, libraries, or technologies that a company has selected out of the hundreds available. You could try learning about those items, but it won't help - because the other companies have selected a different subset.

      I'm glad I started my career before integration and "glue" code replaced real programming.

    2. Re:Yes, of course it's still true. by maxwell+demon · · Score: 1

      If you're a good programmer, programming languages are easy. If you're curious about a language, you can learn the basics of it in a few hours and be adequate in the language in a weekend.

      That depends. If the programming language is of the same style as those you already know, then yes. However, I doubt that e.g. a C programmer, no matter how excellent, would grasp a pure functional language in a weekend if he never learned about functional programming before. And no, the syntax wouldn't be the problem (indeed, functional languages tend to have relatively simple syntax).

      --
      The Tao of math: The numbers you can count are not the real numbers.
    3. Re:Yes, of course it's still true. by david_thornley · · Score: 1

      No, you can't learn a language that fast, unless you already know all the principles behind it. You can learn to do some things in C++ over a weekend, but you're not learning either object-oriented or generic programming nearly that fast. One of the advantages of a formal education is that you'll get exposed to a lot of language principles, but they may well not cover all of the widely used one.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    4. Re:Yes, of course it's still true. by pjt33 · · Score: 1

      Even mediocre programmers can pick up the basics of any language quickly. The focus on just a core of languages, and often, just ONE language, which we often hear from job candidates and young posters on slashdot are a reflection of the many graduates coming out of CS departments these days who exhibit a distinct lack of talent.

      I think you're being too absolutist. Mediocrity may be part of the reason, but it's also the case that to properly learn a language takes time and some (non-mediocre) people like to do things properly.

      I live in a city where most people are bilingual, but neither of the two local languages is my native language. I've made a conscious decision to learn only one of them, because I'd rather try to speak one very well than both badly.

      The same thing applies to programming languages. You can learn the syntax of a language in something between 5 minutes (LISP) and three days, but to learn all the corner cases of Java (including things like really understanding classloaders, generics, phantom references, and the synchronisation guarantees of the memory model) or C++ takes much longer.

      In short: monolinguism can be the result of mediocrity, but it can also be the result of a conscious aim to know one language in as much depth as possible rather than lots of languages at a basic level.

  90. Re:Serious applications are still written in Delph by Megane · · Score: 1

    Hmm... a quick check of Wiki, and it appears that things did change when Delphi came out, not surprising since it post-dated the 386. And now I remember what horrified me so much about the original Turbo Pascal dialect. It was that the "object" datatype was basically a "record" with method procedures attached, and you had to declare a separate pointer type for each one. Ugg-lee.

    --
    #naabhaprzrag, #sverubfr-000, #agi-fcbafberq, negvpyr[pynff*=' negvpyr-ary-'] { qvfcynl: abar !vzcbegnag; }
  91. First! Lisp! Rant! by Mybrid · · Score: 1

    First! to post the requisite LISP rant! /rant on

    Functional programming is the "nails on chalkboard", freshman weed 'um out language.

    You think you want to earn big money programming computers, then think again sucker! You are going to get so lost in sets of parenthesis you'll forget who your Mamma is. LOL.

    Some hoittie toittie schools, where professors have very high opinions of themselves, very low opinion of students, who shall remain nameless, like UC Berkeley and MIT, require LISP as a first-year language so as to kill all pleasure one might think one derives from programming and switch to something more pleasurable, like theoretical physics.

    Lost is sets of parenthesis is the single best way to kill off all motivation to learn computer science. You can also make people scream. Which actually is kinda cool.

    At least the UK is earnest enough not to torture their students with LISP. /rant off

  92. No wonder. by Anonymous Coward · · Score: 0

    No wonder the brits are such crap programmers. Pascal!?! That is the most worthless language ever invented. And nobody with half a brain uses Delphi anymore.

  93. It's like Hogwarts by SteveFoerster · · Score: 1

    In other words, "normal" high school ends when students do their O.W.L.s, but before they attend university they do N.E.W.T.s. The muggle equivalent to the latter are A-levels.

    --
    Space game using normal deck of cards: http://BattleCards.org
  94. The downside: C makes people think naively by Anonymous Coward · · Score: 0

    I learned Lisp first, abruptly, as I stumbled across CS from a liberal arts background. I had some rough common sense knowledge of computers and engineering (family exposure) but did not know how to write C programs at all. My passion became understanding how one could implement Lisp (compiler, runtime system, garbage collection) on top of what I knew was a very primitive machine model. As this was university, I switched majors and immediately got submerged in machine architecture, assembly, data structures, and C/C++ as well as more advanced Lisp, all in the first 12 months.

    The end result is that I notice the many naive ways in which traditional C "bare metal" programmers assume that higher level languages are implemented. They make bad "optimization" decisions in projects they influence, because they have no idea how a compiler works or how different a good runtime system may be from the naive macro-assembler model they understand. I've found these are often the same people who advise C programmers to "always compile in non-optimized debugging mode" because they cannot comprehend their program's behavior when there isn't a trivial mapping of line/statement to machine instructions in the step debugger.

    So while you argue that someone needs to understand macro assembly, I argue that someone needs to understand high level language implementation concepts if they really want to have intuition for program costs. But the reality is probably really: people need to be taught program costs and a rough bit of complexity theory. Then, let their own tastes tell them how far to dive into the implementation guts. You could spend your days pondering garbage collectors; or whole-program analysis and type systems; or operating system level concepts like ABIs, virtual memory, and system calls; or machine code and macro-assembly organization; or digital design for CPU cores; or even just cache memory and memory hierarchies! Nobody has time to be truly expert in all of these, but they all are critical to "really understanding program cost".

    1. Re:The downside: C makes people think naively by jinx_ · · Score: 1

      "I've found these are often the same people who advise C programmers to 'always compile in non-optimized debugging mode' because they cannot comprehend their program's behavior when there isn't a trivial mapping of line/statement to machine instructions in the step debugger."

      usually people advise that because it makes it easier for them to track down shitty bugs that inevitably work their way in due to decisions that were previously made (be that design, time management, or other) and often out of their control.

      C isn't your friend. it won't hold your hand. if someone wants their debugging symbols let them have them. once the code is mature and stable then you crank on -O and remove -g

      --
      jinkusu
  95. In other news... by PetiePooo · · Score: 1

    "Local university miserably fails to prepare its students for the working world. More at 11."

    Sad is it is, professors are usually so detached from real life that they think they can steer industry by molding the minds of the students they teach. In reality, the industry either just chews them up and spits them out, or spends extra time remolding them into useful employees.

    My advice:
    1. Go to college and have a good time
    2. Get good grades; that GPA is really the only thing of use that may come out of your time there
    3. Teach yourself a select few useful industry skills between parties (or find a good internship)
    4. Emphasize those useful skills on your resume

    (and the obligatory)
    5. ...
    6. Profit!

  96. sheer malice? by Anonymous Coward · · Score: 0

    Gross incompetence maybe? Or it could be just sheer malice. C and C++ and (Java or Python or Ruby or Lisp or Perl or Pascal) need to be on the list. The M$ languages are useful in that if someone puts them on their resume, you can safely toss their application in the circular file because they won't be retrainable. It will take too long for them to unlearn the bad habits, if they ever can, to become productive in time.

  97. scheming by dyfet · · Score: 1

    There has always been a scheme to truly learning computer science, and it is spoken of with a lisp...

  98. Took a course... by Anonymous Coward · · Score: 0

    The first assignment was to write a program to search a dictionary for words that were still words after the first two letters were removed (eg. rewind -> wind).

    We had to write this program in ML, Haskel, LISP, C, Java, Pascal and some other language, I can't remember which, at the time I had only C++ and Python experience, so they were all new to me (C wasn't that different, but I couldn't cout or anything like that).

    The course was in CSci, I was an EE, I was one of the first to actually finish the assignment and thought it was pretty easy while many of the CScis thought it was hard. That is the difference between learning a language and learning programming.

  99. The weren't trying to make programmers ... by Rambo+Tribble · · Score: 1

    ... the were trying to generate a fairly abstract level of understanding regarding the programming process. Given that, I'm not sure they kept some of what they did, but getting bogged down with memory management in C is not how you develop a top-down view of the programming sector of IT.

  100. I Beg to Differ by Zygamorph · · Score: 1

    I'll deny it it just to show it can be done.

    There are tens of millions of lines of code in a variety languages that help run the world that were written and are maintained by hard working programmers who have never used C. There is also a lot of code that is written in C. It depends on where and what you are talking about.

    The reality of the situation is that in industry there are a large number of camps. Some have huge repositories of code that is probably older than the OP that is mission critical and is still chugging along very well thank you very much. There are other places where the latest and greatest objected oriented, web based language invented at a University is the vogue. You have everything in between.

    Saying one particular language is that basis of computing displays a very limited knowledge of the wide breadth and depth of computing both in industry and academia.

    Now back to the original topic. What language(s) to use to teach beginning computing.

    There are two basic methods. One is to teach the nitty gritty machine level first and then move up to higher and higher levels of abstraction. I.E. Bits, Nibbles, Bytes et al. The second is to start at a higher level of abstraction, teach the higher level concepts, such as iterative loops, without getting bogged down with the minutiae of what's under the hood. With the second method you can get more specific if you need to.

    I would argue that most people will get bored with method 1 and have no real need for it. Method two does require selecting the level of abstraction you want to start at, you tailor the selection to the group you are trying to teach. People who argue C are simply picking a lower level of abstraction than people who argue for Java, either can be "right" or "wrong" depending on the people in the class and the objectives of the class.

    I also think that a good grounding in computational theory and the study of algorithms is a good idea. If you know why a bubble sort on a 1 million entry list is a bad idea then it doesn't really matter what language you decide to not implement it in :-)

  101. Non-majors by pavon · · Score: 1

    I would argue that non-CS majors should be taught a language that is most relevant to their field.
    Engineers: Matlab.
    Statistician: R
    Visual Design: Javascript
    Literature: Inform or TADS.
    Philosophers: Lisp

  102. This is good news by shish · · Score: 1

    A-levels are high school, where very few kids know what they want to do as a career, probably one or two of them out of a year group of 300 would be able to explain what a programming language is -- currently nobody teaches C anyway since it'd only scare 99% of them, and the 1% who could handle it are already teaching themselves, so the removal of C is no real loss. On the other hand, the addition of python finally means that there's a viable alternative to VBA which is what everyone I know is currently teaching.

    I only hope that the teaching materials aimed at this age / education range (ie, children who struggle to operate a word processor, let alone an IDE) become available soon -- hell, if someone can tell me where to submit things to, I'll look at the current VB / pascal materials and come up with a python equivalent myself :)

    --
    I mod down anyone who says "I will be modded down for this", regardless of the rest of their comment
  103. Re:First! Lisp! Rant! by Anonymous Coward · · Score: 0

    Too bad the only LISP interpreters for Windows that don't crash completely randomly due to memory leaks are all the non-free ones that cost upwards of $800 or much, much more.

    SBCL, CLISP, ECL, GCL... their Windows ports are all, even to this day, extremely buggy, or have significant features cut from their native Unix/Linux versions.

  104. Library bindings by Corson · · Score: 1

    The only reason why languages (or implementations thereof) matter is the availability of library bindings. If your favorite programming environment does not come with bindings for the libraries you might need on your development platform then you are at a serious disadvantage. In the M$ world C++ and .Net are supposedly the universal solution for every programmer. I think Delphi for .Net was Borland's way to awknowledge this fact and the switch to Oxygene/Delphi Prism (Object Pascal-like language for .Net) is probably "the better approach". Too bad it creates managed code instead of native code. Anyway, I guess C++/Java programmers have no idea how powerful Delphi is simply because they have been educated differently (=conditioned) and because Visual Studio Express is available for free to hobbyists. It's about time university curricula were given a face lift.

  105. no, there is a bigger picture by Anonymous Coward · · Score: 0

    I forgot my login... I teach CS.

    Part of the problem is how industry demands have skewed education and the demands of the students; college is viewed as a job factory more and more and less as an education.

    Programming is a hugely important part of CS; conceptually, it is small - practically its almost all that matters. Programming is a skill, an art form that one develops over time; which hardly fits into the conventional college education system that well. It is far better off being a apprenticeship model like other professional trades like plumbers, metalworkers, and many traditional fields. The CS level understanding can be minimal if not skipped because conventions will get some of those benefits in there a bit. This would help industry as well. Perhaps this could fit better into an engineering major except that computer engineering means something else already.

    CS itself; traditionally, is a math major. The theory is a tiny niche these days. Sure it could change a bit to fit with the times since the major discoveries were done 40 years ago; and to keep the major going it has already significantly changed/warped. It can be kept around and kept more "pure" and to its roots if we break out the programmer demands from it causing it to warp into a poor hybrid of two divergent requirements of it. It is already hard to get a CS degree in 4 years and even then you are missing out on a whole lot if you don't self educate a whole bunch outside of school.... Employers (HR morons) often do not feel happy with the results and this will get worse as more specialization ocurrs in this field and students have no clue about the massive frameworks and languages being used by the employer; not to mention the complex massive development and code management tools being used out there (which do not seem to be getting any easier.)

    CS started as a niche in the math and electrical areas - now its undergoing severe specialization. A CS person isn't chosen over somebody with a Networking certification + experience and no degree simply because networking has grown so complex (needlessly so) that it has become its own field and all the CS major courses on networking do not output somebody as capable as the lousy certified person who hasn't a clue what is really going on (nor do they really need to know for most of those jobs; or how to really program for that matter...)

    There could be long discussions on each of the things I bring up; I'msure there are examples in other areas as they developed over time and the downside of their education models etc. As well as the cultural errors at play undermining progress on properly addressing these issues. (for example the overvaluation of college degrees in areas where a "master" tradesman is better... not to say classes and theory learning are not part of that learning model.)

    -----

    Then we have the huge massive issue of corporate thinking against the workers. The holy grail of efficiency = kill off skilled labor. Ever since Henry Ford started the popular war against skilled labor we've seen 1 profession after another be watered down and simplified to the extremes to where its almost getting so we could engineer some smart chimps to do the work. These changes get into every field possible and are rewarding for the management and shareholders because that is the system we've allowed to develop and grow. I'm probably wasting my time here because most of you do not see it because it doesn't directly impact you. Well, back when manufacturing was dying in the USA I didn't care then because it wasn't me-- but I started seeing it coming shortly afterwards that it would start to come for us as well someday and there won't be enough middle class around to stand up for us when the time comes. (think of that old line about nazi germany; classic case of "its not my problem, why should I bother?")

    Programming and the "lower" areas of CS will be simplified to the point where nearly minimum wage workers with no skills can develop software; and then just

  106. We are talking high school level here. by Anonymous Coward · · Score: 0

    These are courses akin to universal literature, history or sociology, intended mostly to give you a taster about a certain field of expertise.

    YOu will pick up all those valuable skills later in university or by means of training paid by your employer (when you get your first jobs they will look for people that understand general concepts, not for accomplished programmers with specifc technologies).

  107. Good by JustNiz · · Score: 1

    More job security for us C/C++ programmers !

  108. You don't delete C, you insensitive clod! by merc · · Score: 1

    You free(3) the heap space associated with C and let the garbage collector do the rest!

    --
    It's true no man is an island, but if you take a bunch of dead guys and tie 'em together, they make a good raft.
  109. PHP - seriously? by itsdapead · · Score: 1

    I use and like PHP - but that's because of its utility and choice of libraries, its still horribly inelegant (especially when all those useful libraries are pre-OOP/namespace, although at least it now has half-decent database abstraction). I wouldn't recommend it as a first language.

    Also, writing PHP-style web apps is a bit of a specialised programming model.

    I'd pick Java for high-level OOP stuff, supplemented by C and/or assembler for low-level understanding. Java may be on the way out, but only slowly and switching from Java to C# is hardly a huge paradigm shift...

    Its possible that Python might be really good - I'll let you know as soon as I manage to get past the page in the manual where it describes significant whitespace without disolving into peals of disbelieving laughter...

    --
    In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
    1. Re:PHP - seriously? by HappyHead · · Score: 1

      As a person who has taught programming classes before, I can not emphasize how much the idea of a language where my students would be required to write neat, human-readable code in order to have it actually run fills me with joy. After marking 60 assignments in a single sitting, being able to look at the code my students make, and actually read it without having to scroll to the side, or edit it myself (hitting enter and tab a lot) would be really neat.

      Sadly, that's not the language that I have to teach, since you can't embed it in a web page and expect it to run on more than a few fringe users' browsers, so I'm stuck teaching JavaScript, which somehow always ends up being either "never hit enter" and all on one line, or else "hit enter and add whitespace completely at random"...

    2. Re:PHP - seriously? by itsdapead · · Score: 1

      I'm stuck teaching JavaScript, which somehow always ends up being either "never hit enter" and all on one line, or else "hit enter and add whitespace completely at random"...

      Which any modern, language-aware text editor will re-format into something half-decent for you at the touch of a button because the structure information is included in the code. Of course, if you'd rather spend time helping students find the stray hard tab in their Python code, or rescue it after they'd inadvertantly re-formatted it...

      In other news, having a 12-inch spike in the middle of all steering wheels would encourage safer driving.

      --
      In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
  110. What the fuck? by GNUALMAFUERTE · · Score: 1

    No C#, ok, makes sense. No PHP?, well, I see your point. No C? That is ridiculous! most languages today are based on C's syntax!

    And, specially stupid: Allowing visualbasic but forbidding C? Anyone that has learned to code in VB should be banned from programming! And this guys are allowing it, but not allowing C?

    That's just crazy. You know what I think? They deleted PHP because of the vast amount of free code out there, and forums, etc. And they deleted C because they are lazy, and it takes teachers more time to review C code than it does to review some other braindead shit like VB or Delphi.

    --
    WTF am I doing replying to an AC at 5 A.M on a Friday night?
  111. You won't understand it. by SanityInAnarchy · · Score: 1

    If you've only ever used a single language, you don't "understand programming" enough to instantly pick up any language.

    If you've worked in at least a few, particularly a few from different areas -- asm, C, Java, Python, Lisp, Erlang, and Haskell would be my current list -- then you'll be able to pick up other languages, like JavaScript, C#, Ruby, etc.

    But if you've only ever worked in Java, C will be hard, because you'll not only be learning a new syntax, you'll also be learning the concept of pointers, pointer arithmetic, and manual memory management. The reverse is also true -- if you've only ever worked in C, picking up Java will be hard, because you've probably never done any object-oriented programming. The same is true going higher-level -- if you've only ever worked in Java, it'll be hard to adjust to actual object-oriented programming in Ruby and JavaScript, as opposed to the class- and type-oriented programming of Java. Then again, if you've only worked in JavaScript, it'll be hard (and annoying!) to go to a language like Java, where types and interfaces matter.

    These may not be as hard as learning to program in the first place -- though your first functional language will certainly feel that way. I certainly don't use all the languages I know, or list on my resume. But knowing a variety of languages is important to being able to grok any one language completely, let alone being able to pick up new languages in a snap.

    --
    Don't thank God, thank a doctor!
  112. What about Assembly Language? by Oxford_Comma_Lover · · Score: 1

    Okay, I could understand not needing C if you needed assembly, since it at least makes sure you can figure out what's going on. But when ALL of the languages you're teaching are high-level, it's not a computer science degree, it's just a programming degree. Because science is about understanding how stuff works, and the higher level it is, the less you understand. (Like how you start out with "Everything is made up of atoms." It's kind of true, and maybe it's science in fourth grade. But it's not really true, and when you have a college degree in the science, you should know better.)

    --
    -- IANAL, this isn't legal advice, and definitely isn't legal advice for you. Also, Squee!
    1. Re:What about Assembly Language? by Darinbob · · Score: 1

      And you're not necessarily going to be that good at assembler if you don't know how the hardware works. You won't necessarily be good at C if you don't understand how assembler works. You also won't be very good at most languages if you don't understand how algorithms and data structures work. You won't be very good at algorithms if you don't understand computability and mathematics. You won't be very good at data structures if you don't understand time and space tradeoffs.

      I had a CS professor who confided that she didn't feel like a "real" computer scientist because she didn't know how to "build a VAX", even though she was an expert in theory. I thought that a bit funny at the time, but it does point out that computer science covers a huge amount of territory, from pure abstract mathematics all the way down to quantum mechanics.

  113. Re:Door Games by Phrogman · · Score: 1

    Ah I miss BBSing immensely. I ran several different ones in different locations at various times. Each one was a joy to create and to see users visit.
    Door games were of course one of the major attractions. I still have my licenses for my last used BBS software (Roboboard), and my most popular door games (Trade Wars, LoRD, etc). I would have to say that BBSes are what originally got me into being interested in computers and computing. I didn't start programming much until after that though.

    --
    "The first time I got drunk, I got married. The second time I bought a chimpanzee, after that I stayed sober" Arian Seid
  114. I remember learning Pascal in college... by Anonymous Coward · · Score: 0

    ... back in the early 1990's. Can't say that it really taught me any more than learning in any other language.

    If we're just teaching "problem solving skills", then why not choose some super easy language like Phrogram (http://phrogram.com/)? That way, students don't have to be weighed down by all of that hard "thinking" stuff that we don't ever do in the real world .

  115. Sounds okay to me by jjn1056 · · Score: 1

    Hey, I'm a Perl programmer but I have little issue with the language choice, particularly pascal and python, as both were designed with teaching in mind. Java I'm so so on, personally I think its a bad idea but I'm sure Sun/Oracle is probably donated a crapload of free stuff to get their language on this list, so I guess its not unreasonable tradeoff.

    --
    Peace, or Not?
  116. Pascal? by Dunbal · · Score: 1

    People still use Pascal? LOL. I'm surprised they don't insist on PDP-11 and RPG II and have a punch-card section on the exam. Surely this is merely because Pascal would be easier to grade, being the inflexible piece of crap it is, rather than actually teaching the students useful skills with a flexible (yet highly dangerous - because it's so flexible) language like C/C++/C#

    --
    Seven puppies were harmed during the making of this post.
  117. Pascal Man by Anonymous Coward · · Score: 0

    First: these are High School kids. No one is going to hire a high school kid with no other experience anyway.

    Second: Pascal is a perfect introduction to programming concepts so long as it is followed up with OOP concepts. It forces you BY DESIGN to be a clean programmer. Without self enforced discipline C will easily become an unmanageable black hole.

    I can even give a real work example. When I entered college; with only Pascal experience from high school. I outscored the native C programmers at their own language almost every time because my code was efficient, readable and did not crash.

    I can take it a step further, my senior year my very small liberal arts school was invited to compete at the regional University of Illinois programming contest. For some reason the advanced data structures class at my school was offered only in Object Pascal. Since we were most recently fluent with Pascal we opted to use that platform for speed. You cannot believe the snobbery and condescension we received as a result. You can probably guess where this is going their laughter quickly faded when we were announced regional winners. I credit the structure enforced by Pascal with our win.

    I think there are quite a few generally older C snobs out who need to find a new source of self value. Of course C and its offshoots are the most abundant language out there; but give it a rest, anyone in the industry will eventually pick it up no matter what their first language is. And if that first language is pascal they will be that much better for it.
     

  118. Re:Plus, Delphi is an awesome teaching environment by BitZtream · · Score: 4, Insightful

    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
  119. Some thoughts by TheSync · · Score: 1

    1) Java is the leading OO language. But it is a pain for a beginner to learn due to an overly complex and organically developed class library, and the whole JAR thing is pretty complex.

    2) I'm the biggest OO-skeptic, but I recognize that is the way the world is going, and it is best to indoctrinate the children at a young age. So Object Pascal isn't such a bad idea. Frankly C# would be even better.

    3) ((((((don't) talk) to) me ) about ) (cons LISP Scheme etc))

  120. Teaching programming languages by pierrelux · · Score: 1

    The fact that some Comp. Sci programs have courses dedicated to the learning of a given set of languages is different from what I've seen at my school. It's contrasting with my experience (at McGill) where there is no such courses. I only had 2 classes so far where the main topic was about software design. In any other classes, if they ever happen to require yo to code anything, it's up to you to manage this by yourself. Combinatorial proofs, and proofs or all sorts, tractability, and some of probability/statistics are the main elements we learn to deal with. The course named "Programming languages and paradigm" is actually about parsers, types proof, and lambda-calculus. This has a taste of the the good old debate of comp. sci vs software ing, but this is not the point of my comment.

  121. Manual vs Automatic by Corson · · Score: 1

    The difference between ObjectPascal/Delphi and C++ is similar to the difference between cars with manual and automatic transmission. If you want to live more dangerously then you choose the former -- and of course, you might gain a few milliseconds in a tight loop; if you want to drive and not fret the small things then you choose the latter.

    1. Re:Manual vs Automatic by Corson · · Score: 1

      Tz-tz-tz.... This is what happens when you hit Submit too soon. I meant it exactly the other way, and it should be obvious: ObjectPascal/Delphi is "the car with automatic transmission"; C++ is "the car with manual transmission".

  122. A false analogy to natural (human) languages? by FoolishOwl · · Score: 1

    In natural languages, being a fluent speaker of Russian doesn't help much if what's needed is a fluent speaker of the Cantonese dialect of Chinese.

    I'm just taking courses on system administration and programming at a community college, and while I gather there are lots of programming tools and techniques I know little about, the languages themselves don't seem much different. For one thing, structures in one language are consciously reproduced in another. Every textbook I've used is careful to compare the syntax of a given loop structure to the syntax used in other languages -- and it's usually just about the same, anyway.

  123. Re: EEs not needing to know basics of programming by joebob2000 · · Score: 1

    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.

    Perhaps I misunderstood what the basics of programming mean to you, or maybe times have changed in the 15 years since I got my BS in electrical engineering and became a HW engineer. In school, among other things, I was first taught how to make computers from scratch, then we learned some different computer architectures, then how to program them in assembly. At work, even though I do not get to design computers and program them in assembly, I do get to wire up ram, nvram, adc, dac, control lines to analog circuits, etc., pick their address in the programmers model, and then write c code to test that it's working right before handing it off to a team of embedded SW engineers. The programmers I'm working with are using c, so I will be using c as well. BTW, half of the programmers I work with have an EE degree too.

    But I digress. As far as I could glean from your post, you're saying the basics of programming are knowing what is actually going on in the hardware. It used to be that HW engineers were EEs. Maybe something has changed in the curriculum since then, but in my job, you need to know how to bias an op-amp plus much other analog stuff, AND how to setup the programmers model of the HW the way the SW guys want it and much other digital stuff. Seems like EE is still the place where people like that are going to come from.

    P.S. I know a few mechanical engineers who program traction control, active suspension, etc. Those guys need to know programming basics too.

  124. I see what you did there by pjt33 · · Score: 1

    Ah the well known algorithm "swap". What, not an algorithm? Well, it must be a well-known data structure then. No? For reference (joke at no extra charge), the full sentence was

    What you need to concern yourself with is the algorithms and data structures employed, to that end references are as good as pointers.

    (My emphasis).

    1. Re:I see what you did there by LizardKing · · Score: 1

      I see the numbnuts are out in force. Ever heard of a succinct example? Check out an algorithm book for C and another for Java, perhaps even those from the same author. Then notice the fact that implementations of the same algorithms differ between the books in an identical way that the implementation of swap does.

    2. Re:I see what you did there by Rockoon · · Score: 1

      There you are cherry picking Java again.

      Its all fine and good to point at Java and scream "THAT THING SUCKS!" if that is your opinion, but doing so does not substantiate your original claim that references are suitable for algorithms and data structures.

      You are acting desperate. Your succinct example is bullshit that only seems to effect Java (you claim that it does, anyways) but none of the other languages with reference types. Let me repeat that.. your succinct example is bullshit. It only effects Java, and otherwise does nothing to undermine the ability of all the other languages with reference types.

      --
      "His name was James Damore."
  125. Re:Serious applications are still written in Delph by Qubit · · Score: 1

    Note: Delphi is not a language. Delphi is an IDE, Object Pascal is the language that it supports.

    Maybe Delphi is also the name of the IDE, however there's a boatload of evidence for it being the name of a language/dialect:

    From Wikipedia/Object Pascal

    Borland used the name Object Pascal for the programming language in the first versions of Delphi, but later renamed it to the Delphi programming language...Object Pascal [is often confused] with Delphi source code.

    Paradigm: imperative, structured, object-oriented, functional (Delphi dialect only)

    Or the Article Summary:

    ...one of its other approved languages — Java, Pascal/Delphi...

    So yeah, looks like a language to me.

    --

    coding is life /* the rest is */
  126. what a silly choice of programming language! by fr4nko · · Score: 1

    It is really sad to see the list of programming language that they have chosen. Two variants of Visual Basic, it is a joke or they are serious? Like if Visual Basic was a real programming language... And they have removed C, the most important programming language for any programmer. If I were a student I will have very serious doubts about this course.

  127. Poor judgment by Anonymous Coward · · Score: 0

    The Exam Board seems to be run by people who have no feel for what computer science is about. They appear committed to languages that are either dead or close to dead.

    I am surprised no one there is suggesting that students be taught how to write code for the PDP-11. Their sense of logic is non-existent.

    Of their decrepit list, Python (more of a prototyping tool than a language) and Java (the purest OOP language I can think of) or the only ones that promise to be of practical use to the new crop of A-level examinees.

    The Board members defy logic by excluding C, the foundation language, while promoting Java, its derivative. Pascal/Delphi is on life support, while Microsoft has already sent out invitations to VB 6's funeral; what's the point in forcing students to become proficient in a language they may never be able to use in real life?

    Why would they drop C#, the original .NET language, in in favor of VB.NET which behaves more like a macro running on top of the former?

    As US rapper Ludacris would put it, members of the Board, "Tell me who's your weed man, how do you smoke so good?"

  128. This affects me... by Anonymous Coward · · Score: 0

    I'll be doing A-level Computer Science next year. I already know Python 2.6 (and I know the differences in 3.1) so I'd be glad if my college teaches me Python. I also know a bit of Java and Pascal, though I disagree with Pascal being "easy to learn". C programming would be nice - I don't know why they're getting rid of it - as that's still needed for faster programs or extensions for said languages.

  129. This is *soo* wrong. by tibit · · Score: 1

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

    This is really, really wrong and short-sighted.

    I used to be an avid Pascal user, in the time between Turbo Pascal 3.0 for CP/M hit the shelves, and up to suspended animation period of Borland Pascal 7 (when Delphi 3 was already out). TP3 for DOS and Logo on TRS-80 were the first languages I could produce some non-trivial graphic output with.

    Yet life moves on, and I can't imagine having my productivity limited by what Delphi offers. It is behind times, to say at least.

    Even raw C++ feels somewhat kludgy these days. Qt's preprocessing lightens it up a bit, but it doesn't really go all that far in expressiveness.

    I consider CLR, JVM and Python's VM to be the platforms where you can actually use and benefit from what are "modern" yet really decades-old concepts that were implemented on Lisp systems in early 80s. Closures, access to expression AST (C# LINQ!), type inference, code attributes/annotations + code generation -- all those things help out with productivity, and heighten the level of abstraction you can work with.

    There is nothing "unstable" or somehow anti-"problem solving" or anti-"teaching" (their words!) in C#, or Java, or Python. Or C, or even PHP for that matter. The only difference between those languages is the availability of "modern" features and libraries. CLR (C#) and Java win the showoff hands-down in that regard, with PHP and Python being close contenders wrt. libraries. Methinks Python is somewhat higher, abstraction-level-wise, than Java, because generators come standard, and in Java you have to add rather niche libraries to get that. Popularity is good sometimes!

    I recently took "enterprisey" C# and Java courses at a big 10 CS department, where they stressed how the modern features and lots of libraries help with rapid development and prototyping.

    I admit that there's a lot of niftiness there that is rather absent from Delphi. I'd say that the combined power of LINQ, extension methods, lambda expressions, and Enumerable give a lot of flexibility and aid IMHO in declunkifying the code. Same goes for Java's code generation in various ORM frameworks, yielder, etc. It's all about how easily you can express yourself in code.

    Blindly sticking with C (they don't) or Delphi (they do) hides a lot of good, state-of-the art programming language features. I see absolutely no reason why those
    can't be taught even in introductory courses.

    I have some rather passing exposure to Ocaml, and some more to Common Lisp, and I of course agree that all the hullaballoo about C#/Java is somewhat overblown in the sense that you could implement every feature of Java or C# in Lisp a good decade or two ago. What's missing from niche languages like Ocaml or Lisp, though, is decent, standard, widely-deployed libraries. There are of course plenty of libraries for C, but there's usually a few mutually incompatible "decent-enough" implementations of common things and that's rather unproductive to the end user -- how many string implementations do we really need? This also applies to C++...

    If business sense and out-of-school applicability be damned, I'd be all for teaching Lisp and Logo.

    If Lisp's flexibility be damned, one could argue for Ocaml and Logo, but then you can of course do F# and Logo, and that can all run on CLR so that can be taken directly to a .net shop and be applied. I presume that Python is a sane middle ground -- performs well enough

    --
    A successful API design takes a mixture of software design and pedagogy.
    1. Re:This is *soo* wrong. by Corson · · Score: 1

      Bytecode (CLR, JVM) can be easily decompiled using commercial tools. I a world where the battleground of the IT industry is IP this is a major issue unless you only develop for servers, not desktops and mobile.

    2. Re:This is *soo* wrong. by tibit · · Score: 1

      I don't see how the battleground of IT is IP. There's really nothing in most of the code that you would want to reverse engineer for reasons other than interoperability.

      Besides, the "decompilation" you're talking about results in some intermediate language statements that are, by themselves, not any more useful than running IDA PRO or similar disassembler on the code.

      --
      A successful API design takes a mixture of software design and pedagogy.
  130. Re:Plus, Delphi is an awesome teaching environment by n+dot+l · · Score: 1

    You haven't taught anything but how to point and click.

    Except for introducing the concepts of components, objects, properties, events, syntax, variables, assignment statements, and build cycles, that is.

    At the beginner level, what they did is exactly as much real programming as the traditional, "Don't worry about this boilerplate int main stuff, or the odd acronyms you're typing at the prompt, I'll explain it later," is in C-based classes.

    At the advanced level, it is just as much real programming as parser-generators are.

  131. OK wait a minute, listen to yourself. by wonkavader · · Score: 1

    "In short: monolinguism can be the result of mediocrity, but it can also be the result of a conscious aim to know one language in as much depth as possible rather than lots of languages at a basic level."

    You mean to tell me that you know good programmers -- programmers who understand who computers work, and adapt to situations, who choose the right tool for the job, who are always able to do that and yet only know ONE programming language? I agree with a number of things in your post, but really, monolinguism? Monolinguism?

    Monolinguism is ALWAYS the mark of a bad programmer. Choosing to concentrate on one may be the mark of a good programmer who is obsessive and wants to be the best in one thing, but if that programmer doesn't know (to the extent of having explored, played with, written some things to get the ideas of) more than one language, that my friend, is a bad programmer. He or she has only a hammer, and everything around him or her is a nail.

    Monolinguism takes your perfectly good argument to an extreme where it doesn't begin to stand up.

    PS. Learn a little of the second language used in your city. It'll give you an insight into how the two languages play off one another. You're getting good at communication on a simple verbal level by learning just one (sounds like a good plan) but you're missing out on the cultural aspects of a two language environment. You don't have to get good at it, but not knowing any at all cuts you off from the cultural differences which cause only 90% of the population to be bilingual.

    1. Re:OK wait a minute, listen to yourself. by pjt33 · · Score: 1

      Learn a little of the second language used in your city.

      I can read it fairly well, and I can use a few words. You pick some stuff up without actually studying it. But I wouldn't put it on my CV. In fact, I don't even have French on my CV and I've got a certificate saying that I used to be able to communicate well in that.

      In a similar way to French, I would say that I don't know C. I wrote a few small programs and one, as an intern during a university holiday, of a few kloc in it, and I could tell you when it's appropriate to use, but I'd have to do that basic study again before I could write anything in it now.

  132. Re:Plus, Delphi is an awesome teaching environment by imnotanumber · · Score: 1

    Like when you teach someone to write the "Hello World program in C, you are only teaching them to type on an editor.

  133. Re:Plus, Delphi is an awesome teaching environment by Motard · · Score: 1

    I just listed the steps in projects 1 and 2. I did not relay the teaching that went along with it - which involved much exploration of what was going on behind the scenes.

    This was taught in a short series of two one-week courses and the projects I listed consumed about 90 minutes of those 80 hours.

  134. Re:Plus, Delphi is an awesome teaching environment by BitZtream · · Score: 1

    Yep, helloworld.c isn't teaching C. Anyone who says otherwise is probably employed as a professor at MIT.

    --
    Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
  135. Re:Plus, Delphi is an awesome teaching environment by Motard · · Score: 1

    I didn't spend five minutes on two simple projects as you assume. For future reference, read the whole post. The projects were the basis for teaching. Not the teaching itself.

  136. LMAO by Anonymous Coward · · Score: 0

    wow, how incredibly out of touch these people are. If anything the only language that should be taught is C as most others are derived from it or use the same principles. C is the greatest gateway language. VB 6 or VB.Net instead of C

  137. A Better Facebook by Anonymous Coward · · Score: 0

    A Better Facebook - a facebook alternative that takes user privacy seriously and will have community-driven features. http://bit.ly/9Kxy1p

  138. Feeding the troll by pjt33 · · Score: 1

    Implementations of algorithms differ between languages! News at eleven! But you admit that they're the same algorithms, so clearly it's not necessary to use pointers to understand them. (FWIW the algorithm book I have is CLR, which uses an imperative pseudocode).

  139. I study this course by sorfane · · Score: 1

    I'm currently studying this piece-of-shit course, and to be honest it comes as no surprise. The spec is brand new, my year is the first to actually use it. The resources are poor, the content meaningless, and the exams are stupidly easy, but with ridiculous mark schemes which seem to be answering different questions to what was actually in the paper. This is all down to the Chief Examiner, someone who my tutor has spent the last year fighting. She has no experience in "real-world" CompSci, she has just taught IT at schools for however many years. This means that the course just seems to be bolted together, a confusing, and outdated, mix of IT and CompSci. One minute youre learning about the differences between Floppies and Zip Drives, the next you're learning how to traverse trees with her own overprice proprietary software. Maybe I just hate this course too much, having endured a year and a half of it, but it seems that it simply could not get much worse.

  140. Really? by Chrisq · · Score: 1

    Can you give an example of an optimisation technique that you would use in C that is a "bad decision" in a higher level language? I can think of many that are unnecessary (like moving expressions that don't change outside a loop, writing calculations so that constant expressions are separated out, algorithm strength reduction, etc.) but not bad. In many cases these will be cleaner anyway.

  141. designed to teach programming and problem-solving. by dugeen · · Score: 1

    So was the original Dartmouth BASIC.

  142. semantics by wonkavader · · Score: 1

    So this is just a question of semantics.

    I say if you've done something in a language and could recall it, you've learned it. You don't have to be good in it to have taken the time to understand what it brings to the table (at least roughly) and the complications it's designed to get around and the complications it causes. Good enough.

    You're thinking fluency/mastership.

    OK. Then it's perfectly sensible to aim for mastership in one programming language. But if you haven't done the lower level learning on other languages, you'll never have the mental tools to achieve mastery in that one language.

    It's excellent that you have a working knowledge of the minority language in your city. I know people in the US (yes, we're famous for this kind of crap) who have one language, and only one, and would insist that the people around them use only it. I married into another language, and have had the pleasure of meeting other guys in the same situation. One of which spoke not one word of his wife's native language, even though he had been married for 5+ years and had kids who spoke that language as much as they spoke English. I've met people from other ethnic groups with the same husband situation.

    So you're a breath of fresh air.

  143. Re:Plus, Delphi is an awesome teaching environment by Anonymous Coward · · Score: 0

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

    FTFY

  144. Re:Plus, Delphi is an awesome teaching environment by shutdown+-p+now · · Score: 1

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

    You, sir, are one of the people directly responsible for the popularity of the "magic button" anti-pattern. Please resign today and help make the world a little bit better!

    (Not a fat chance, I know - and I've seen how this particular approach is extremely popular in today's IT "education".)

  145. Re:Plus, Delphi is an awesome teaching environment by Motard · · Score: 1

    And you, sir, jump to conclusions too quickly and have not had an adequate opportunity to learn from the past. You apparently also think that there's one approved way to approach any problem. Nonsense.

    What little I do know do today's IT education includes design patterns which are a rehashed rephrasing of old concepts like modularity, code reuse and general software design, etc. If you were to take my class you might've learned about how Delphi specifically accommodates all of these things.

    But if you were in my class with noobs, and railed against a couple of simple demonstrations in the first 45 minutes of the course, I may well have asked you to leave.