back to article US computer-science classes churn out cut-n-paste slackers – and yes, that's a bad thing

Computer science (CS) students in the US aren't being taught properly, and their classes are too limited in scope, says one IT think-tank. The Information Technology and Innovation Foundation (ITIF) says that its most recent study [PDF] of curriculum in the US has found that not enough schools are offering computer science …

Page:

  1. Anonymous Coward
    Anonymous Coward

    First learn the basics...

    ... then look at the big picture.

    Evidently, this 'think tank' didn't understand how many of the creators of the digital revolution learnt CS when young. You still need to learn the basic tools and pieces before being ready to tackle the big ones. Start the other way round, and you'll never be able to master the complexity and build on solid foundations.

    Try to learn mathematics looking at the 'big picture' instead of learning the humble basics first...

    1. Vector

      Re: First learn the basics...

      I think what the Think Tank is saying is that too many High Schools, in particular, are focused on teaching their students how to use Word instead of how to create Word, or any application.

      1. Anonymous Coward
        Anonymous Coward

        @Vector - Re: First learn the basics...

        Right on! For more than a decade, teaching computers in schools was a course on how to use Microsoft Word.

        1. chivo243 Silver badge
          Headmaster

          Re: @Vector - First learn the basics...

          @AC

          Yes, it's a shame that students can't format a word document for the IB internal assessment. They don't know how, but they can text at 130 wpm, and share embarrassing photos like a pro... Using Word is like learning how to write... This is the digital age no?

      2. Gray
        Facepalm

        Re: First learn the basics...

        My grandson just graduated a large High School in a Tacoma suburb. He took the requisite CS classes; he now despises MicroSoft Office although he hasn't a clue how to code it. Not all is lost, however: thanks to a curriculum heavily laced with High School ROTC participation, he's enlisted in the US Army as a Computer Communications Specialist!

    2. Kernel

      Re: First learn the basics...

      ' "Unfortunately, curriculum and standards still focus on using, rather than understanding, technology," the ITIF says.

      "In fact, only 37 per cent of states' CS standards include a focus on computing concepts, while 73 per cent of state CS standards include a focus on computer skills." '

      I'm pretty sure the "Think Tank" is saying that schools should be teaching the basics leading to a an understanding - not sure how you interpreted it any other way, really.

      1. Anonymous Coward
        Anonymous Coward

        Re: First learn the basics...

        To understand technology you have to use it first. Concepts without actually making them "real" are usually pretty useless, especially in IT.

        In IT a top-down approach can easily become boring. It can easily become like learning a language just studying tons of grammatical rules, or learning photography just being told how a camera works, and how an image should look like.

        One key to become a good photographer, for example, is becoming so proficient in using a camera you can "forget" about it. You are no longer worried about how to use it, your skills are so honed you use it without actually thinking about it. So you can focus on your image creation process. Without that skill, your workflow is interrupted by many small issues and you lose focus.

        Same for IT - to design a complex system you need to be beyond the petty problems of coding and small scale designs - but you need to master them first to go beyond. Without actually mastering the basic skills first, you'll attempt to design bigger systems, just doomed to fail, for lack of "been there, done that".

        You will probably become a good "pre-sale engineer", those leaving the s**t to those who have to make things work later....

    3. This post has been deleted by its author

      1. the spectacularly refined chap

        Re: walshk@byteform.com

        "Hacker culture" has its heart in the right place, but it devalues theory and over emphasizes the act of writing code, and there is a limit to being self taught... learning through experiment is excellent, but only if someone can guide you towards the experiments that produce insights that will make you a better developer. I've worked with people who wore their lack of formal education in software as a kind of badge of honor, but their work always reminded me of that of a portrait artist who'd never studied anatomy: Well executed, but not quite the right thing.

        I agree with this. The way I usually express it is that you don't really go to Uni to learn a program language - frankly, learning how to express yourself in any given language is not degree level stuff. Rather you go to learn what to express, not how to say it.

        Secondly there is the perennial problem for any self learning - it tends to be of a piecemeal a la carte menu nature - one area is studied, then something else and so on. There is no guiding master plan ensuring a balanced rounded view. Examples that come to mind here would be tools like Lex & Yacc - Yacc in particular can save masses of time once you are familiar with it but the self taught tend to disparage it as much from ignorance as anything else.

        Instead you'll hear the profound wisdom that a hand-written parser is always much better despite generally being slower, buggier and taking far more effort to build and maintain. Why? The learning curve for a tool like Yacc is pretty close to vertical - you'll need perhaps ten or twenty hours study before you can accomplish anything useful. For the self taught that's frequently difficult to motivate yourself to do for a fairly old, unglamorous tool that isn't getting all the hype of newer toys. The CS undergrad for whom it is simply on the course has no such issue.

        1. Michael Wojcik Silver badge

          Re: walshk@byteform.com

          learning how to express yourself in any given language is not degree level stuff

          True. But this report is not about "degree level stuff", either; it's about high-school CS education.

          It would have been nice if the article had made that clear, since it's extremely important to interpreting the report. There's a vast difference (in the US system) between secondary and tertiary education, and another between undergraduate and graduate education.

          The secondary (high school) curriculum is already very crowded. While arguments can certainly be made for teaching CS concepts as well as or instead of programming, or for (as the report suggests) allowing CS to substitute for advanced mathematics or physical-science courses, it's not obvious those positions are correct - even if you're a fan of CS education.

          On the other hand, it's harder to see much value in the "computer literacy" courses that were popular in the '90s and still persist today, except possibly for disadvantaged students whose access to computers prior to high school was severely limited.

      2. tom dial Silver badge

        Re: walshk@byteform.com

        My son, a system development supervisor, has said for years that all too many programmers lack a basic understanding of what the machine they are writing to is doing under the covers. I made the same observation during a stint in a developer technical support position about 25 years back. While for many purposes that is unimportant that lack can bite rather hard when an application fails to perform well enough and the customers are angry that they cannot do their work.

        And here the general concepts ("big picture knowledge") do not help all that much. What is most useful is detailed knowledge of what the computer is doing, how (for example) a file is organized and what has to happen between the request for a record and its delivery to the program for processing, and maybe most useful, what can be done to adjust the operating system environment, the program, or both, to eliminate bottlenecks and delays.

    4. Tchou

      Re: First learn the basics...

      Even when it comes to programming, they teach how to use Java, .Net or Python, which hide how the computer really works.

    5. Anonymous Coward
      Anonymous Coward

      Ah, but that isn't actually the BIG picture..

      First learn the basics...

      ... then look at the big picture.

      You're looking too much at the detail IMHO. The key problem you have in the US is that the big companies who are to employ such people at present think that they can magically cook up better results by outsourcing their problems to companies with a lower wage bill, because they would otherwise already been complaining to whoever they bought in government. Ergo, local training is of no interest, but expect lots of effort to "help" developing nations abroad in their education.

      All they have to ensure is that the supply of visas doesn't dry up, because that too is a scarcity that could drive up their costs.

    6. Anonymous Coward
      Anonymous Coward

      Not everybody needs to or should learn how to program

      The percentage of people who are programmers or system designers is small compared to the number who need to be computer literate to do other jobs like engineering, finance, teaching or whatever.

      The basic courses should teach them how to use a computer, and what computers are and are not capable of. How they can be misused and how to protect yourself from the basic ways those who are out to get you will use. You don't need to worry about more complex stuff like like MiTM or leaked RF emission attacks - that's got to be left to those who design the software and hardware to prevent.

      The advanced courses for people who want to have a career as a programmer or system designer can teach programming, but I think using languages like Java is dumbing them down too much. It is starting at the wrong end and that's because of the stupid idea of trying to teach everyone a little programming. Driver's Ed classes don't try to teach everyone how to change their oil, why do we want to teach every kid how to write Hello World in Java?

      For those who are interested in learning programming you need to start at the other end, with something really simple, like 6502 assembly language. It is limited and simple enough you can learn how the instructions work and even get a basic idea of how the CPU itself executes the instructions at the logic level. Then build up from there, learning C, C++, then Java or whatever language du jour replaces it. Learn basic OS functions like a filesystem (DOS 8.3 is perfect for this) memory management, databases etc. getting more general as you go.

      I agree that starting with how a computer works would really help people truly understand computer science and what they are programming. I can well imagine those in university now, growing up where an iPhone may have been one of their early computing experiences would think of computers as almost magical. Being taught "enter this special syntax and the computer will do what you want" doesn't really teach them programming because they have no understanding of why the computer is doing what they're telling it. That is more like preparing a priesthood for the proper way to prepare a virgin sacrifice.

      1. Anonymous Coward
        Anonymous Coward

        Re: Not everybody needs to or should learn how to program

        Just, students has to learn, for example, a lot of mathematics they may not use later at all. Still, it's important to teach - and learn - that. Same for literature. It makes you a better person, and lets you understand where you would like to go later.

        Computer became so pervasive it is right to teach something beyond "how to run some software". First, to let the many to understand a computer is not a "magic box", and to let others understand if they would like a a career in IT telling them what's beyond the screen and the nice graphics.

        But you still need to keep it "simple" enough to let young people learn the foundations. And teach the basics. At this level, students don't need to "understand the systems they would be working on as IT professionals" - that's the dream of companies that wants "ready workers" without spending for training, yes, teach Java/NET, HTML/Javascript, some cloud? without really learning, prepare tomorrow serfs.

        Students need to understand the basic blocks on which build later, possibly on hardware they can afford. The Pi is a great learning tool, even if it won't teach you Cisco IOS, Oracle PL/SQL, or SAP ABAP.

        Asking school to teach "systems they would be working on as IT professionals" is like asking a physics course to teach how to use the CERN accelerator and its sensors data....

      2. mrtom84

        Re: Not everybody needs to or should learn how to program

        The book "The Elements Of Computing Systems" is a pretty incredible resource for gaining a basic understanding of how a computer works and sets a good foundation for any computing related study. You go from connecting NAND gates to building a CPU and memory (which get emulated). You then write an assembler, a compiler, a vm, and finally an OS. You can then start writing programs for this system. Pretty cool.

        1. Daniel von Asmuth
          Unhappy

          Re: Not everybody needs to or should learn how to program

          Electronics is about building computers (hardware), CS is about software.

          Not everybody needs to use computers, but programming is a valueble skill for CS students.

          "As a result, the ITIF says, many universities are failing to produce the diverse, well-trained graduates that companies seek to hire."

          The real problem is that so many CS graduates abandon their discipline for a job in industry. Some people even think that universities exist to train the youth for careers in commerce or goverment.

  2. Anonymous Coward
    Anonymous Coward

    Yes, teach fundamentals

    And then face "need 10 years windows 2020 experience", eventually train your much cheaper indian colleague, and then wonder why you didn't stick to something that actually made sense career and life balance wise.

  3. Martin Gregorie

    Been that way fror a long time in the US of A

    Back in the mid '70s I was working in NYC with an bright American guy with a relatively recent BSc in Computer Science. It turned out that they'd taught him COBOL and, err, not a lot else apart from some elementary system design.

    1. Anonymous Coward
      Anonymous Coward

      Re: Been that way fror a long time in the US of A

      Back in the mid '70s I was working in NYC with an bright American guy with a relatively recent BSc in Computer Science. It turned out that they'd taught him COBOL and, err, not a lot else apart from some elementary system design.

      I graduated in 93 with a BSc in Computer Science. COBOL was a required class, but I was one of the first students to take the C++ and Software Engineering classes. System Software, Database Management, boolean algebra, Systems Analysis, etc, were also all required.

      We also, incidentally, had the last surviving VAX in the state's university system, an old IBM 370 compatible, and NetWare and Windows and Linux servers.

      1. Anonymous Coward
        Anonymous Coward

        Re: Been that way fror a long time in the US of A

        I saw the same thing in 1999, only by then it had shifted from C++ to Java.

        2016, same thing, only JavaScript? (feeling charitable)

      2. Kevin 6

        Re: Been that way fror a long time in the US of A

        LOL 70?

        My buddy who was in CS, and graduated in 2002 had to take 3-4 COBOL classes.

        and when I graduated(in electronics) in 2004 the CS students still had to take COBOL, but the problem was the only teacher who taught it retired, and they gave the class to some idiot who didn't know anything so they wasted time taking a worthless class(I only know this as I knew someone in it)

        1. Doctor Syntax Silver badge

          Re: Been that way fror a long time in the US of A

          "students still had to take COBOL, but the problem was the only teacher who taught it retired"

          Obligatory Dilbert: http://dilbert.com/strip/1998-10-12 et seq.

        2. tom dial Silver badge

          Re: Been that way fror a long time in the US of A

          The repetitious denigration of COBOL is both unwarranted and counterproductive. It is unwarranted because for many purposes (see the 'B' in the acronym) it is a perfectly good language, if more than a bit wordy, for representing and solving the problems in its domain. It is counterproductive because it is (or was the last time I saw any reports) still in use for a good deal of core financial and other data processing in the US and probably numerous other countries. The cost to reimplement such systems is enormous, and COBOL, like FORTRAN, is likely to remain widely used for quite a while going forward. Discouraging students from learning it, or removing from the CS curriculum, does not serve the students or their prospective future employers well. Competent programmers certainly can learn a new language at need, but prior knowledge cannot help but be beneficial all around.

          1. LongGoner

            Re: Been that way fror a long time in the US of A

            Agreed. Uncle Sam relies on nearly a million lines of COBOL to pay out several trillions (that's 10^12 for our British friends) of dollars every year. I've held the CDs containing these in my very own hands when we were preparing to deal with the Y2K "threat". Can't imagine rebuilding that code in any kind of realistic fiscal or temporal framework...

            1. AMBxx Silver badge
              Boffin

              Re: Been that way fror a long time in the US of A

              Doesn't really matter what language you're taught. The important bit is to understand structures and logic.

              I went through the standard list- BASIC, Pascal, COBOL, Fortran, Forth during the 80s.

              Took some time out of IT, played with some VB, came back and had to learn about OO (would have been easier without the VB exposure). The OU course used SmallTalk. Unused outside of achademia, but a great way to learn OO. Made the move to C# & Java much easier.

              1. DropBear

                Re: Been that way fror a long time in the US of A

                "Doesn't really matter what language you're taught. The important bit is to understand structures and logic."

                Well, no. Programming doesn't happen in a vacuum just as a train doesn't go anywhere without a rail. And once you have those rails tightly nailed to the railroad ties, it's going to take considerable time and effort to rip them up and move them somewhere else, so you might want to give some consideration to where you want them laid in the first place. And no amount of wishful thinking will make an all-terrain Humvee out of a train.

    2. Kimo

      Re: Been that way fror a long time in the US of A

      Back in the early 80s, my high school had two computers (one Apple II, one Heathkit) and four dial-up modems to the district mainframe. With a limit on the number of students who could actually use a computer at any given time, we spent a lot of time learning logic first, and diagramming programs before we turned them into code. That basics of logic has stayed with me while languages and programs have come and gone.

    3. Anonymous Coward
      Anonymous Coward

      Re: Been that way fror a long time in the US of A

      My college course was Fortran.

      Hadn't used it before, haven't used it since.

      I expect most students now have already been coding for a while in some language before they start college.

    4. bombastic bob Silver badge

      Re: Been that way fror a long time in the US of A

      at least COBOL programmers would understand the fundamentals better than those who've only seen XAML or ".Not" or C-pound or any other "Microsoft new,shiny" they're hawking at the moment...

  4. zen1

    And this is supposed to surprise anybody?

    They did the same damn thing with MSCE, Novell CNA/CNE's and Cisco CCNA/CCNE/CCIE's. If the educational system can make a buck pandering to someones dream of a life in computer science, they will all day long.

    They crank out paper Certified (insert newest fad here) graduates every single day. And while a percentage might be able to do the job, the fact of the matter is, the majority prove only that they're capable of taking test well, rather than applying that knowledge in the real world.

    1. Anonymous Coward
      Anonymous Coward

      Re: And this is supposed to surprise anybody?

      Justified, but now that I'm very good at taking IT based tests, but have no actual other skills, what, besides IT, am I supposed to do in life?

      1. Rich 11

        Re: And this is supposed to surprise anybody?

        what, besides IT, am I supposed to do in life?

        Go into management.

        1. Mark 85
          Devil

          Re: And this is supposed to surprise anybody?

          Go into management.

          And take more than a few language courses in some southern Asian language so you know when the outsourced developers are talking negatively about you. And maybe get your hair person to style it in the pointy variety.

      2. Anonymous Coward
        Anonymous Coward

        Re: And this is supposed to surprise anybody?

        "..what, besides IT, am I supposed to do in life?"

        Teach exam prep courses.

    2. Anonymous Coward
      Anonymous Coward

      Re: And this is supposed to surprise anybody?

      I've had most of those.

      I am good at taking tests, but I did learn a lot prepping for the exams.

      But I get your point - it's no substitute for time served and actual experience.

  5. hellwig

    Come on schools, get your act together!

    [quote]The report found that at the high school level, dedicated computer science classes are mostly limited to affluent schools, and when the courses are taught, girls and minority students are rarely enrolled.[/quote]

    My home town (Albuquerque, New Mexico) isn't exactly a hot-bed of education or learning, and has a high level of poor and minority students, but the public school system still managed to make it work. APS ran/runs what is known as the Career Enrichment Center. A sort of vocational school for high schoolers. They offered two years of Computer Science (in C++ when I attended), with the goal for each student to take the Computer Science advanced placement test.

    Of course I'm biased, but I do think my "generation" benefited from the [lack of] capabilities of the computers at the time. My programming was done using DOS in real-mode, 16-bit addressing, etc... We had to concern ourselves with memory space, switching segments, register overflow, interrupt processing (for graphics, mouse/keyboard interaction, etc.). We used Borland Turbo C++, that means pre-C++98 standard libraries. When we wanted a hash or list, we created our own class to handle that. They even offered a course in Assembly, so no libraries there at all.

    Kids today learn to program in Java or some other managed language. The hardware doesn't even exist to them. There are standard libraries or open source libraries for any operation anyone might need to perform. We're not teaching people to create software, we're teaching them to stitch together applications. It's a lot different.

  6. Herby

    IBM vs. Microsoft way of thinking...

    THINK vs. REGURGITATE.

    Pretty obvious if you ask me. Modern languages (take your pick) are getting so complex that nobody really knows them completely. The only way to do things is to try what someone else showed you how to do (even if irrelevant) and paste it into your "solution". This yields debacles that are well documented. Yes in the 'old days' things were much simpler, but the complexity was something that the author of the software did in a "good way".

    There are several videos on the Apollo Guidance Computer, and that was done with a code space of around 72kB (yes, kilobytes). Nowadays a computer program couldn't get a character echoed for that much code (I may be exaggerating but maybe not). In broad terms, people have become lazy with the implementation and put together Lego blocks hand hope it looks good. Not the best way to make up a "system" of things.

    Life goes on.

    1. Anonymous Coward
      Anonymous Coward

      Re: IBM vs. Microsoft way of thinking...

      "[..] with a code space of around 72kB"

      I remember the sense of relief in the Systems Programming Department when the Algol compiler ran successfully on top of the multitasking operating system. A memory of 128KB was the then top of the range mainframe's limit. The new prototype mainframe then took that to the unimaginable heights of 1MB - housed in several 6 feet high cabinets..

      1. energystar
        Holmes

        Re: IBM vs. Microsoft way of thinking...

        The first modern language? ALGOL, to me.

        1. AMBxx Silver badge

          Re: IBM vs. Microsoft way of thinking...

          We could also blame the Internet. Back in the day, you had to be able to document something completely and simply enough to fit in a text book.

    2. Rusty 1

      Re: IBM vs. Microsoft way of thinking...

      Bang on the money Herby.

      The operation of a modern, "idiosyncratic", C++ program is so difficult, bordering on impossible, to reason about given its source. Developers tend to cut-n-paste from previous (possibly simpler, and definitely different systems), and rely of test-driven-development approaches even when that may be utterly unsuitable for the application in question.

      The legendary C.A.R. Hoare knew about this a few decades ago: "There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult. It demands the same skill, devotion, insight, and even inspiration as the discovery of the simple physical laws which underlie the complex phenomena of nature."

      The first method involves engineers. The second, code monkeys.

      1. Anonymous Coward
        Pint

        Re: IBM vs. Microsoft way of thinking...

        I'd like to see some of this unicorn code that's so simple it has no obvious deficiencies in real life.

        Everyone I've worked with seems to be a fellow code monkey :D

      2. DropBear

        Re: IBM vs. Microsoft way of thinking...

        "There are two ways of constructing a software design"

        No, not anymore. Just one: infuriatingly complex. Complexity is unavoidable and outright required today - it's just an unavoidable consequence of progress in the field and in corresponding expectations. While at some point "text" meant "ASCII printable" these days not handling any intricacy of UTF-8 (or is UTF-16? Which order, and with or without BOM? Right-to-left or left-to-right?) is unthinkable. While at some point "retrieving data" meant reading bytes from a file, these day probably means yanking a video stream out of a remote database. Not much can be done about that, the cat is not going to go back into the bag. The problem is that our tools to abstract, encapsulate, and reuse that complexity in a _confidently predictable_, _verifiably and inherently safe_ way are either piss poor or they don't exist at all.

        It's the equivalent of being given a set of lego bricks where no two bricks have the same shape (and definitely no two bricks use the same connector) then being expected to build something really large out of it just as one would with a proper set of bricks. No wonder it just doesn't happen, and it just can't happen - not until we come up with some entirely different paradigm to program that makes that complexity reducible to a level we can handle (or tools that can reliably manipulate and verify it for us to an arbitrary degree). At any rate, as long as we keep trying to manhandle ever bigger juggernauts cobbled together from bits of C/C++ and the like, nothing whatsoever will change - segfaults, crashes, security flaws, all of it is here to stay until we come up with something adequate for our current level of ambitions...

    3. bombastic bob Silver badge

      Re: IBM vs. Microsoft way of thinking...

      copy/pasta isn't programming. you can learn technique and algorithms with BASIC. But of course 'C' is probably the best language to learn to REALLY program on because of stuctures. Pascal has its equivalent. But a lot of "modern" (quotes for emphasis) languages lack even simple structures. They focus too much on "object-oriented" to the neglect of other, more important features.

      Also the 'object oriented' trend is BASS ACKWARDS. You don't need "Multiverse.universe.galaxy.solar_system.planet.continent.country.province.county.city.street.house.individual" to describe a person. THAT, and the HORRIBLY inefficient infrastructure to support "all that collectiveness". Yuck.

      XAML, ".Not", C-pound, and in many respects Java, all reflect this bass-ackwards kind of thinking. And I wouldn't call them "Modern". I'd pick another word that reminds people of an unfavorable genetic mutation.

      Maybe *THAT* is the core of the problem? The 'bass ackwards' trend and "bad thinking" associated with these so-called "Modern" languages?

      Teaching FORTRAN COBOL BASIC and ASSEMBLER might be worth doing, JUST to get people familiar with PROPER technique. C and shell scripting come next, and *THEN* "other things" like Python, Perl, etc.

      But my curriculum wouldn't be a sales platform for Microsoft's "new, shiny" so there ya go.

  7. Anonymous Coward
    Anonymous Coward

    Started my career in computing straight from school in the 1960s - really by accident. Throughout my time I have constantly been amazed by how few of my colleagues knew much outside their very narrow job role. Outside of work they had no interest in IT, electronics, or even things that affect human behaviour.

    In recent times they often seemed to get promoted or paid more for their apparent specialisation - than did those of us who understood the complexity of IT systems in both depth and breadth. When it came down to job evaluation it was the product accreditations that ticked the HR boxes - not the hard to quantify "grey area" knowledge and experience for which there were no set courses.

  8. This post has been deleted by its author

  9. PJF

    Not challenging enough

    for the "trainees"...

    I (we?) had the same problems in the '80's - got board quickly!

    Teacher/Director gave an assignment to do in such-n-such, in the "X" language, (BASIC, ForTran, Cobol, etc.) in a weeks time (5-days) Majority got it done in a day or 3 (45 min. class time - not including login time) then simply didn't come to class.

    The others did the same assignment using other languages.

    Then a few (ahh...plead the US 5th.) got mischievous.. (false login, teacher accounts, SysOp accounts, f'n with other users progs, etc..)

    The '10s the same as the 80's?!!

    1. Anonymous Coward
      Anonymous Coward

      Re: Not challenging enough

      You may well have got board quickly, but we, of the West Country, got planked. Regularly.

    2. Robin

      Re: Not challenging enough

      Made worse by the fact that back in the 80s it wasn't possible to go online and surf when you were board.

Page:

POST COMMENT House rules

Not a member of The Register? Create a new account here.

  • Enter your comment

  • Add an icon

Anonymous cowards cannot choose their icon

Other stories you might like