Autoblography Part 23: Vo-Tech

By Shamus Posted Tuesday Oct 4, 2011

Filed under: Personal 163 comments

Eleventh grade. My junior year of high school. On one hand, I’m really looking forward to getting out of this madhouse and its bureaucratic idiocy. On the other hand, I’m terrified of what will happen next. What if I can’t get a job with computers? People keep telling me it’s impossible to enter the field without a degree. I don’t want a degree. I want to go and do something useful. I want to write software and make stuff happen. I can’t bear the idea of more school.

I’m at a new building. In contrast to the Intermediate Building, the high school is a sprawling campus. There are huge windows everywhere, and the most expedient way to get someplace is usually by going outside. It feels more like an institution of learning and less like a dungeon. In keeping with our custom over the last four years, David and I hang out in the library in the mornings.

The new building has better facilities, and so I have more classes available to me. I try to sign up for the various computer courses being offered. They’re all far behind my skill level, but I’m not allowed to take them because I’m not in any advanced math classes. Apparently there’s just no way a student would fathom the intricacies of the BASIC programming language without first learning calculus. (Even though I’m fluent in four dialects of BASIC by this point, and I still don’t know what calculus is.) I make a halfhearted attempt to protest, but I can tell it’s useless. The people setting up these prerequisites really have no idea in the world how any of this works. They’re obviously following rules and guidelines passed down from other people, and don’t even have the knowledge to explain what BASIC is, much less why it would need to follow calculus.

Resigned, I try to get into the required math course, but the prerequisite to Calculus is Trigonometry, and the prerequisite to Trigonometry is Algebra II, which I’m about to take this year. There’s no way for me to get into the computer class. Even if I threw myself into math right now, I would finish the required math courses just in time for graduation.

The one thing that saves my high school career from disaster is the Butler Area Vocational Technical School. Vo-Tech, in the vernacular. It’s a separate school beside the high school. It serves a large area, including many other high schools. Kids are bussed great distances to attend here, but I can attend by just exiting the high school and walking twenty steps. Vo-Tech is mostly geared to low-tech or blue-collar jobs: HVAC repair, automotive repair, cosmetology, and the culinary arts. But they also offer a fully equipped computer course, and it blows away everything they have at the high school. The computer lab has proper IBM compatible machines for every student, and everyone is given liberal access to them. There’s no prerequisite for signing up, other than being in the right grade.

I attend Vo-Tech for the first two hours, and then walk back over to the high school for the rest of the school day.

For the first half of eleventh grade, our instructor is Mr. B, a cheerfully bearded old-school computer science guy. He’s a coder first, and a teacher second. This is understandable. In this time period, there just aren’t that many teachers with computer experience.

The start of the year begins with a mercifully brief introduction to computers before we’re turned loose on the machines. We learn a bit of history, a bit of vocabulary, and a bit of MS-DOS. He teaches us both BASIC and COBOL. This is now my fifth flavor of Basic, and each one is easier than the one before. The version of BASIC on this machine offers a bunch of line and pixel tools, which allows me to draw arbitrary shapes, which greatly expands the number and variety of cheap arcade knockoffs I can create.

I don’t like COBOL. COBOL is a programming language, and its name stands for COmmon Business-Oriented Language. Even the acronym is cumbersome. I see it as largely obsolete and useless. You don’t write interactive programs in COBOL, and I’m not interested in non-interactive programs. I realize that not everyone can make videogames for a living, but I don’t want to find myself in a job writing software that is – from the user’s perspective – deaf and mute.

A COBOL program is designed to do one thing. When you run it, the program pulls in some data and spews out the result. It’s good for projects like, “Scan through the customer database, find everyone with an overdue invoice, and list them in order of how much they owe us.” There are no tools for allowing the user to control how the program behaves. No graphics. No menus. No input. Nothing. It’s just a report generator. If you want a different report – maybe you only want to list invoices worth over $100 – then you have to change the source code. This offends me. In my view, a good program is one where a complete non-programmer can intuit how to use it.

I’m irritated that we spend half of our time on this obviously archaic language. I understand that BASIC is seen as a “kid’s language”, and that there aren’t many jobs for BASIC programmers, but COBOL doesn’t seem like much of an alternative. It’s a dead end. You shouldn’t need a programmer to make simple changes to a report, and you shouldn’t need two pages of source code to accomplish what BASIC can do in fifteen lines. COBOL feels like a racket to me, and the lessons seem to bear this out. All of the assignments are functionally the same program, with only a few small details changed. That might be great for keeping you gainfully employed, but it’s inelegant and it sounds like a boring way to earn a living.

I’ve heard about another language called “C”. I don’t know anything about it, but I get the impression it might be a little more “grownup” than BASIC while being less horrible and cumbersome than COBOL.

I don’t know it, but I’m now on the outskirts of the Programming Language Wars. Programmers everywhere look at the work they want to do, and choose a language that suits their task. Then they defend that language as the One True Way of getting things done. After all, if this programming language is my favorite tool, it must be the best tool. And if it’s the best tool, then everyone else should stop using those inferior tools. Now that I know more than one language, I’m joining the debate. This is a big step for me.

My assignments take a trivial amount of time. I spend the rest of the class making games or helping other students when they ask. By helping, I am able to see the discipline of programming through the eyes of people who are new to it. Through this, I am able to perceive a clear dividing line through the students. Just about everyone is passing, but not everyone is “getting it”. Some people are able to recite the correct answer to a problem, but they do this only because they were told it’s the right answer. They don’t know why it’s right and they can’t use that knowledge to solve other problems. They can take the example program given in lecture and change a couple of lines to complete the assignment, but they are completely unable to improvise. They can’t create anything new. They can’t follow the flow of a program by looking at the source. They can’t predict what values a variable will have at any arbitrary point in the execution. In short, they can’t write code. As the year goes on, this distinction does not go away. These kids are otherwise smart and good students, but the art of programming is lost on them.

Me, playing a game with Ruthie and Daniel.
Me, playing a game with Ruthie and Daniel.

“Here”, Kris says, handing me a valentine as she passes by on the way to her seat. She usually sits in the back of the bus with her sister. I usually sit a few seats up, with David.

I smile. Nobody has given me a valentine before. I’m suddenly very nervous. We talk sometimes on the way to school. She’s smart, friendly, and attractive, which has resulted in me having a very predictable crush on her, which until now I have assumed was unrequited. I look down at the valentine and wonder what it means. Maybe… maybe the crush is mutual? Although, maybe she’s just being nice? Maybe she just, like, brought one of these for all of her friends? Maybe she’s just sort of thanking me for being her friend on the bus in the mornings? It’s so hard to tell. I stammer out some thanks, but I don’t follow up.

I explain the situation to each of my friends, and they all come to the same conclusion: I am an idiot.

I’ve had a few girlfriends over the last few years. These were simple, fleeting arrangements with distant girls. Often these took place during summer camp, and they began and ended with tame kissing. Now I’m seventeen, and dating is a little more complicated. It comes with the expectation of going out on dates and spending time together outside of school. I don’t know it, but I’m actually not ready to have a “real” relationship yet. I want that sort of relationship, but I’m still a bit underdeveloped socially. I’m not even sure what would be expected of me on a date. Moreover, I don’t drive. I spend all my free time programming at home, so I’ve never had a use for a driver’s license before now. How can I ask her out without implicitly bumming a ride at the same time?

I hang onto the valentine, but I never ask her out. Next year I’ll finally get up the nerve to begin dating.

I bumped into her a few years after graduation, and did a search for her when I wrote this section. She’s married with a great career. So many people have vanished over the years, their stories halting at unresolved cliffhangers. It’s nice to find out a few arrived at happy endings.
 


From The Archives:
 

163 thoughts on “Autoblography Part 23: Vo-Tech

  1. TSED says:

    Girls, man.

    I’d say “how do they work?” but that will create a storm of comments which do nothing but solicit pithy views and simplified answers that, frankly, don’t work.

    I always find it interesting, however, to see/read/hear about someone’s introduction to the opposite gender. It’s kind of like jazz music; there’s a few overarching themes and it goes all over the place from there.

    1. Simulated Knave says:

      Pithy means “having substance or point”.

      Though I would admit that it doesn’t sound like it does.

      1. TSED says:

        My bad. I “know” that definition, but I never use it as such. Which is always doubly embarrassing when it’s pointed out to me.

        Oops.

        1. Simulated Knave says:

          I’m in the exact same boat. I have forced the word from my vocabulary, but my mind rebels every time I see it used ‘correctly’.

    2. MrWhales says:

      That is the best metaphor I have read all week.

  2. sab says:

    …our instructor is Mr. B, a cheerfully bearded old-school computer science guy. He's a coder first, and a teacher second.

    If you ask me, this is the prefered type of teacher. I remember back in the Dutch equivalent of college, we had a ‘teacher’ for relational databases. In order to prepare us for an upcoming exam, he took us through a few older exams. Questions were rated A,B,C and D, in order of ascending difficulty. He decided he would explain us a few of the first three categories of questions, but not the D-types. Because those were pretty hard.

    I still to this day cannot fathom this mentality and how he got away with it.

    1. psivamp says:

      Many of the instructors in the Computer Science department at UNH don’t hold doctorates.

      I work in a help center for the early programming classes and I very rarely see people who can code. Probably because it’s a help center.

      1. glassdirigible says:

        UNH being the University of New Hampshire? New Haven? Or some other UNH that I have never heard of?

        1. psivamp says:

          University of New Hampshire.

    2. Mephane says:

      I agree. I always had the best experiences with teachers who are only teacher second, and primarily directly engaged in field they are teaching. They have both better knowledge, are more motivated about the field, and know what is actually the real, useful stuff to learn. I remember the my teacher for relational databases, she was obviously not interested in programming at all, and only seemed to have learnt what she knew at a course that covered exactly what she was meant to teach us, and nothing beyond that. Anything unexpected, and it was faster to find out cause and solution yourself than attempting to ask her, heh.

      1. Will says:

        The problem with teachers who are teacher second is that they don’t always want to teach at all.

        This probably a problem unique to universities, but i’ve had university lecturers\teachers who were only teaching because the university required it of them to continue providing funding and classes with them were worse than no classes at all.

        1. Mephane says:

          Yeah, of course, if they either don’t like their field, or don’t like teaching, they will make a bad teacher either at this specific field, or in general. Worst are, of course, those who hate both, big waste of everyone’s time, including theirs.

          1. theLameBrain says:

            I am able to perceive a clear dividing line through the students. Just about everyone is passing, but not everyone is “getting it”.

            This also may be why Mr. B is not especially enthused to be a teacher. Must be frustrating.

            1. Blanko2 says:

              it might also be Mr B is primarily not a teacher. Some people need that sort of learning.

      2. Rick says:

        I had a mix of tutors… Some really knew their stuff (having worked in the industry) but couldn’t teach at all, others could teach but had no idea what they were teaching (I’d learn years later that these teachers were studying subjects the night before teaching us). I’d also get thumping headaches trying to understand the very heavy accent of one of them. I ended up teaching myself.

    3. Will says:

      Depends, i’ve had teachers who know a lot but don’t want to teach, teachers who know a lot and want to teach and teachers who don’t know a lot and want to teach. The combination is obviously the best, but those are terribly few and far between and in absense of those, in my experience i’d rather have the latter than the former.

      The latter at least can still teach you something, even if it’s just the textbook work. The former might know everything you need and want to know about the stuff you’re doing, but good luck actually getting any of that out of them.

    4. guy says:

      I find the best teachers are teachers first but used to be involved in the field, like a physics teacher who had worked on the Superconducting Supercollider.

      I think this fact might be why my male teachers have seemed to be better in general: men are more likely to have teaching as a second career instead of a first career.

      1. Stormkitten says:

        My physics teacher in school was great. Apparently she used to be a nun. I have no idea what happened there.

    5. lazlo says:

      If you ask me, this is the prefered type of teacher.

      Yes and no. I think that there is an interplay between two completely different skills, first what is being taught, and second how to teach. The quality of teaching is the product of those two.

      What I find really interesting is that my wife is currently taking college courses in education. People teaching how to teach. The only time that the ability to teach and a knowledge of the subject matter at hand are, at least theoretically, the same. Some of them do well, but so many fail horribly…

      1. albval says:

        Argh, this is so true. Nowere else I’ve met so many bad teachers as during my pedacogical studies – you’d think that people teaching teaching would know their job.

  3. … What does it mean when you “give a valentine” ? Is that like a card you give on february the 14th or a small gift ?

    1. Mrs. Peel says:

      In this context, it probably means a little card. It’s pretty common for kids in elementary schools to exchange valentines with everyone in their classes, such that there’s a small industry dedicated to producing themed cardboard valentines, where the themes include whatever is popular among the kids at that time. (e.g., I’m sure there are “Cars” valentines for the boys, and “My Little Pony” valentines for the girls [& bronies].) The valentine in this case may have been a handmade note or card, or it may have been one of these mass-produced valentines with a note added.

      Typically, middle/high schools don’t do the classroom valentines thing, so the fact that Shamus received a valentine from this girl suggests that she was interested. (Although I gave out Crocodile Hunter valentines in high school simply because the mere concept of Crocodile Hunter-themed valentines cracked me up. Probably confused some of the guys who received them, but I just thought they were funny.)

      1. Dnaloiram says:

        I felt I should mention that Twentysided is the only place I know of where one can mention bronies and not cause a sh*tstorm (excluding sites that are exclusively brony/anti-brony, obviously).

        1. Unbeliever says:

          [New Tab]
          [Wikipedia search]
          “brony” [Enter]

          A village in Poland… no, that can’t possibly be… Oh! For the slang term relating to fans of the show, see… [CLICK]

          Ah! Fans of “My Little Pony” outside the target demographic.

          OK. Makes sense. :)

          1. krellen says:

            As “Brony” is generally reserved for the 20-30 year old male fans of the show, them buying children’s Valentines would be a little weird to me.

            1. Mari says:

              Yeah, as creepy as it is that my husband watches “My Little Pony” I can tolerate that. If he gives me “MLP” Valentines, though, I’m contacting a lawyer.

      2. TSED says:

        I got one of those mass-produced cards in highschool that I still have. It’s hilarious.

        The “to” line has the words written “Stop Consumerism” in pen.

        1. Thanks for the explanation Mrs. Peel ! I know Shamus probably didn’t intend it that way but reading his autobiographie is interesting for us non US folks, we can learn a lot about cultural diffencies and such !

          1. Paul Spooner says:

            we can learn a lot about cultural diffencies

            Cultural differences, or deficiencies? Really, either one works.

            When I was in college I once bought a dozen roses on Valentine’s Day and gave them to female friends who were single at the time. The Korean exchange students were very excited. I ended up spending maybe half an hour explaining what Valentines day meant and getting my picture taken. Sometimes we forget how strange our own culture is.

            1. Differences. Okay my bad for not doing the spellcheck thing. Especially since the word is spelled exactly the same in english and french. Damn it.

              And yes. Cultures and traditions are weird.

  4. Chuck Henebry says:

    Wow. Cobol. My mom did a lot of work in that language for AT&T in the seventies and eighties. Meanwhile I was learning Basic at school. I never could figure out what Cobol was good for. Database queries, eh? Imagine writing a program to run a query.

    1. Peter H. Coffin says:

      COBOL’s main focus is maintaining data. So much so that many implementations of it are written such that the actual files it uses can be layered right on top of an RDBMS engine, and the COBOL programs can read and write to tables directly. COBOL implementations might also include the ability to embed SQL directly into the program. COBOL also has a rich collection of data types including such fun things as packed decimal (essentially arbitrary precision numeric with each power of 10 stored in what amounts to four bits — it gets complicated when you start using what amounts to cracks between 10-value decimal digits and 16-value hex digits to indicate negative values, but that’s what it does), overlay variables that are subsections or parts of other variables, or variables that can be so strongly typed and limited that they might only allow (for example) integer values from 420 to 780 and trying to add 10 to 775 results in a runtime exception being thrown and your code execution leaps to the exception handler section.

      In trade for all this nifty, you lose pretty much any hope of being able to structure code in any way except how COBOL wants your code, no direct or dynamic memory access, if you want pointers you’ll have to make do with array indexes and key variables, and you don’t get functions just subroutines that don’t return values or structures, but at least there’s no concept of local variables either. Which means all the variables are global in scope, which means you better not reuse one that you didn’t mean to. Which you can’t, because all the variables HAVE TO BE declared in a special code section up front. Oh, and you can push a return point onto a subroutine before you call it so it doesn’t come back to where it came from but rather to someplace else. You pretty much have to have the concentration of an air traffic controller to be comfortable with coding quickly in COBOL and it’s VERY easy to end up coding yourself into an incomprehensible mess if you’re NOT that good.

      1. Retsam says:

        Though, a great benefit of not having pointers is all the optimizations that the compiler can do, that it couldn’t do otherwise. This means that COBOL is still one of the fastest running languages, which is good for high volume data processing.

        EDIT: Actually, that might be FORTRAN that I’m thinking of. Whoops. (Though it might be true of COBOL as well)

      2. Deoxy says:

        That’s actually a pretty good description of the pros and cons of COBOL (which is still in use all over the place, actually).

        I would disagree on degree with a few of the cons, though – I’ve programmed in COBOL off and on for a little over 10 years now, and really, I still structure my programs VERY much like I would in many other languages, you just have to be used to declaring variables up top (good COBOL uses naming conventions to keep it all straight) and treating them like parameters in your mind.

        Though I have to admit, if you really try to be careful with memory usage (some of the really old stuff was crazy like that), you use a lot of “redefines” clauses, and calling the variables “all global” really doesn’t work anymore. Sure, they are always available, to use, but if that space is being used differently in that context… um, yeah, bad things. (Newer stuff doesn’t bother with redefines for the sake of memory efficiency – it’s not worth the headache anymore – hasn’t been for at least 20 years, really.)

        You pretty much have to have the concentration of an air traffic controller to be comfortable with coding quickly in COBOL and it's VERY easy to end up coding yourself into an incomprehensible mess if you're NOT that good.

        Meh, only if you have bad habits to begin with. Seriously, don’t use GOTO (use PERFORM for everything), create variables for “local” use with local names (and don’t use them anywhere else), and a few other habits, and it’s not that different, structurally.

        Anyone wishing to hurt their brains looking at stupidly gratuitous complexity, go look up the worst evil in the history of programming – the COBOL command ALTER GO TO. Cobol using THAT is indeed horrendous and evil. (Actually, PERFORM THRU is almost as bad, while being more subtle about it, so it kits pretty high on the evil list to.)

      3. decius says:

        You pretty much have to have the concentration of an air traffic controller to be comfortable with coding quickly in COBOL and it's VERY easy to end up coding yourself into an incomprehensible mess if you're NOT that good.

        I think you are overestimating the concentration required of an air traffic controller. All you have to do is know all the rules and how to apply them in individual cases, just like D&D. Except the manuals for air traffic control have more rules and special cases than the ones for D&D. Including the player’s option, third edition, 3.5, and this new thing.
        Oh, and 1d4 cold damage to an airplane that doesn’t resist it results in worldwide front page news. That’s high-stress, not high-engagement.

        1. Epopisces says:

          Nothing substantive to add, but I just felt the need to applaud the extended analogy here, it really appealed to my inner nerd. “1d4 cold damage to an airplane” heheheheh.

    2. krellen says:

      COBOL was good for the days before Access and Excel.

      1. Alan De Smet says:

        Given the choice between doing database programming in COBOL, Access, or Excel, I’d choose switch careers.

        1. krellen says:

          Once you go SQL, there is no equal?

  5. Amarsir says:

    I was just far enough behind you in years (and had the different experience of honors track computer classes not vo-tech ones), that my experience with COBOL was this:

    “This language is COBOL. If you’re lucky you’ll never have to use it, but look it over so you understand what it is. Great. Now open your FORTRAN texbooks…”

    1. Mephane says:

      COBOL and FORTRAN are the only two programming languages that I’ve heard or read everyone talk about filled with either dread, loathing, or both. It’s as if their very names instill fears in their hearts and spoken out loud, the ground would open and drag them to the depths of hell.

      But any facts I’ve ever heard about them have entirely justified this image so far.

      1. mac says:

        FORTRAN isn’t as bad as Shamus’s description of COBOL sounds. I maintain some legacy code (in FORTRAN) for scientific computing, and FORTRAN is appropriate when:
        1) The work is computationally intensive, so the program has to be relatively efficient
        AND
        2) The people writing the code are scientists who can program a little

        Scientists who can code a bit can write efficient FORTRAN. It will be ugly as hell, but they’ll get it written and working…

        1. RTBones says:

          +1

          Most code written by scientists and engineers does whatever function the scientist or engineer wanted. We don’t necessarily care _how_ the program is put together, as long as the expected output/result is accurate. If it does the job required, then it is a tool that can be utilized.

          From experience, I can tell you that these same programs (which do exactly the job they were written for), when viewed through the eyes of more of a pure coder – will make said coder writhe and scream in agony on the floor….

      2. RTBones says:

        Funny – I’ve heard the same, yet most (non CompSci) engineers I know who code can program FORTRAN in any language. :)

        The biggest thing about the Language Wars that is often forgotten is that each language is a tool. Almost all are written with a specific purpose in mind. COBOL is a business language. FORTRAN is the language of scientists and engineers – it does one thing really well that even the most modern languages have trouble keeping up with, and that is crunch numbers. As an engineer and math modeler, that is what I need. If you need fancy graphics, there are other languages that do that. Java, Python, C#, C++, Visual Basic, ANSI C, COBOL, Ada, Pascal, even Assembly – all of them have their place. The trick is to fit the right tool to the right job.

  6. MadTinkerer says:

    “I don't know it, but I'm now on the outskirts of the Programming Language Wars.”

    For me, the solution to The War was simple:

    Q: What are the iD Software guys recommending as the best language to make games with?

    A: C / C++

    End of debate.

    It wasn’t until 2000 that I was able to attend a class which taught C, though.

    “A COBOL program is designed to do one thing. When you run it, the program pulls in some data and spews out the result.”

    I am literally offended by that. It’s unbelievable that someone actually standardized a programming language like that. Now I finally understand why people were so desperate for things like SQL and Visual Basic in the 90s.

    EDIT: In fact: how would you like to surf the web with a browser that required you to alter it’s source code when you wanted to go to a different page?

    Sounds to me like COBOL was obsolete the minute it was released.

    1. blue_painted says:

      I vaguely remember that COBOL was one of the early attempts to let businessmen (in those days “business person” pretty much meant “businessman”) make computers work without having to have programmers; where programmers are those awkward people who keep objecting to the stream of “Can’t you just ..” requests.

      I have a hunch that SQL started out that way too: No need to get into database cursors and paging and binary representation, just write it out in plain(ish) English …. probably HTML did too, but that one never got better!

      1. Mephane says:

        Except that SQL is not marketed as a programming language, but universally recognized as a way to perform queries. The real issue with SQL is its non-standardization.

        1. blue_painted says:

          Oh I don’t know …

          … I’d say the “Language” in the acronym SQL suggests that it is considered a (programming) language, and when you consider that the basic query really is pull(s) in some data and spew(s) out the result the parallels are pretty strong.

          My point really was that this is another situation where the suits have tried to clip programmers out of the picture only to find that programming computers is at least as complicated as we (the programmers) have always said. That’s not to suggest that programming is as insanely hard as the suits say, just that its not all just “techno babble to confuse people” … the suits are people who can’t write code.

          As to standardization of SQL, I imagine you’ll know more about that than me. :-)

          1. Mephane says:

            Well, expand the acronym further: “query language”; similarly, HTML is a “markup language”, neither of them are programming languages. And now we are back at the start, i.e. that fact that COBOL is being called a “programming language” actually is insulting. Heh.

          2. Robyrt says:

            To be fair, SQL actually works for that purpose. Even someone with no technical experience, let’s call her Sarah in Marketing, can write simple SQL queries with a couple hours of training and a Post-It note of key tables like “Customer” and “Product”. This saves probably hundreds of hours of IT’s time while she figures out what she wants or what the problem is.

      2. SolkaTruesilver says:

        I believe the problem with “business people” is one depicted like this:

        http://xkcd.com/664/

        The problem is simply that they don’t want to understand, they just want things to work without much trouble to simplify their lives.

        You can design the most beautiful program in the universe, they’ll be at best “It works fine now! Thanks! My printer doesn’t seem to be linked to my computer, can you fix it? Oh, and I don’t like Excel 2010, can you make 2007 the default Excel to be opened?”

        (I am no programmer. I am a business-related person :-)

      3. Kayle says:

        COBOL was a direct descendant of a language invented by Rear Admiral Grace Hopper (well, she wasn’t an admiral then… she’s the one who invented “debugging”), for “business” data processing–maintaining payroll, inventory, etc, by streaming through files of inputs and generating files of outputs.

    2. Sem says:

      I learned COBOL in college in 2002. They justified it with the argument that the bank/military sector still uses it a lot (which is indeed true). Now, I also hate COBOL but in its defense, it was never designed to be a general purpose programming language. It was explicitly created to be a limited language meant for business computing (see wikipedia COBOL entry if you want the whole history).

      About the divide between people who get it and those who don’t, I noticed the same thing in my classes in college. Sometimes, it frustrated me that those who didn’t get it were IMHO more than smart enough that they should have and I didn’t understand why.

      Then, some years ago, I read a post on coding horror about this divide. It links to some academical papers that tries to design a test to find those who can program and those who can’t (with varying success). It seems that one strong factor is the ability to consistently create & apply a mental model of programming.

      1. PAK says:

        Sure, that makes a lot of sense. Modern Cognitive Psych is always wrestling with this problem of how to define “intelligence.” Its use in colloquial language to apply to an overly broad range of abilities is pretty problematic. People tend to specialize, and it’s actually quite normal for someone to have advanced abilities in one area but fail to grasp another.

        Riffing on this topic, I saw a great quote from Einstein the other day: “Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.”

        1. Klay F. says:

          To riff on a common phrase, “Everyone is a nerd about SOMETHING, be it futbol, or physics.”

    3. sab says:

      Totally offtopic;

      Q: What are the iD Software guys recommending as the best language to make games with?

      This made me giggle a little, considering the Rage PC texture bug they managed to ship today: youtube vid. Appearantly this isn’t just something that happens on low end pc’s either.

      1. Paul Spooner says:

        Yeah, what’s with that? They would never have had those problems if they had coded Rage in COBOL. What were they thinking?

      2. Klay F. says:

        This actually made me breath a sigh of relief. Its comforting to know that even a programming god like Carmack can make rookie mistakes.

        That being said though, I wonder how long it will take before everyone starts accusing iD of dumbing down their games for consoles.

        For anyone experiencing this problem, Bethesda has already recommended downloading new drivers for whichever GPU you own. They said its occurring most frequently on ATI cards.

      3. Simon Buchan says:

        I can’t let that stand unargued! That issue is not because C++ is a bad language (that’s a different argument), and certainly not because id can’t write good code! Unlike essetially every other game developer, Carmack uses OpenGL (instead of Direct3D; it’s largely for historical reasons now). Which would be fine, except that OpenGL support in current graphics drivers is currently, due to the lack of use, near universally terrible, so until they’re brought up to speed Rage is made to look terrible.

  7. blue_painted says:

    I had to look up “cosmetology” … oh. Um. That’s from Grease, isn’t it?

  8. noahpocalypse says:

    Wow. I knew COBOL was horrible, but I haven’t actually looked into it. That… That is offensive even to such a rookie coder as me. Computers are to save labor, right? Not save labor for some (I.e., not programmers), save labor for all.

    Jeez. If my teacher ever pulls something like that on me, I’ll either leave the class or send a strongly worded e-mail asking them to cease & desist.

    1. PAK says:

      Peter H. Coffin has done a good job of clarifying COBOL elsewhere in these comments, but it’s worth repeating: you can’t judge something like this outside of the context of history. COBOL was designed in 1959. The idea of the personal computer was a LONG way off. The idea of the computer as a tool for everyone wasn’t necessarily as universal as it is now. And the idea of the “user interface” was far from cemented. And of course history doesn’t travel in a straight line, so even when we see C emerge in the seventies, and see the greater proliferance of screen-based computer feedback and so on, all these things that start to make the creation of consistent UIs more feasible, it’s not like everyone jumps on that bandwagon all at once.

      During the time that COBOL was first being heavily developed computers were by and large the tools of universities, scientists, and some big business, and computers were something you programmed. We have the benefit of hindsight now, but they were in the thick of it then, you know?

      1. Shamus says:

        I was going to address this, but you nailed it here.

        COBOL was very early, back when some people were apparently still programming in machine language, by hand, via wiring.

        1. Deoxy says:

          Your description of COBOL is also quite out of date – I think it was out of date even then, actually. COBOL can* indeed have input screens, take input parameters, etc. It does NOT need to have a code change for every little thing.

          Well, unless it’s all hard-coded, but that could apply to any language – it just so happens that such bad practice was very common in COBOL because of its age.

          To all the “This offends me” people – COBOL will finally die when the things it does well are replicated or improved on in a newer language. That hasn’t happened yet.** It’s been pooh-poohed by all the brainy, cutting edge types for decades, but they just wouldn’t bloody make a replacement for it.

          * The earliest iterations didn’t have those things, for reasons some other people have mentioned.

          ** Well, it may have, finally, in the last decade or so – COBOL seems to finally be on the way out.

  9. DanMan says:

    I love how people recognized COBOL as an essentially dead language 20 years ago, yet it’s still so prevalent.

    It just goes to show you how much IBM screwed up computer science.

    Sorry, I’m a java developer who just got put in a COBOL role at work and I guess it annoys me a bit.

    1. guy says:

      The thing with COBOL is that it actually handles monetary amounts properly. This is why it is still in use. It’s pretty much the only language that’s suited to banking and financial systems, so it’s going to stick around forever.

      1. DanMan says:

        This is what people say, but how is this true? Financial institutions need to add, multiply, subtract and divide. How is COBOL better at this than C++? Or Java?

        I work at a financial institution and I haven’t found COBOL to be able to do anything that C++ can’t do better.

        1. Svick says:

          I think C++ doesn’t have a decimal fractional type. Types like float and double aren’t able to represent numbers like 0.1 precisely. This shows when you do calculations with them. And especially when you have big numbers (think millions of dollars) and still want to keep the cents exactly what they should be.

          Of course there are ways to work around that, like always working with integer representing cents, but they are not pretty.

          And I expect there are C++ libraries that have the decimal type, or something similar.

          As for Java, it seems to have such type, called java.math.BigDecimal.

        2. 4th Dimension says:

          If COBOL is out of the box suited for rounding numbers, and computing with those rounded numbers like they do in accouting, than it will have an advantage over traditional programs from the start.

        3. Peter H. Coffin says:

          The key phrase you’re missing about the bankers is that COBOL easily does decimal math, rather than being stuck with floating point math. And C++ might be able to do it NOW, but it was not able to do it in 1975.

          Now imagine that you have 750,000 lines of COBOL code, written over 30 years, that the board of directors KNOWS is correct. And if you want to convert to something else, it’s YOUR butt on the line if something ever comes out differently than what the COBOL does, ever in the future. Where a float rounding differently than a COBOL decimal might make a difference bigger than five years of your salary.

      2. Svick says:

        If you mean proper handling of decimal numbers, then many modern languages do that, when you use the proper data type. At the very least C#, Java and Python can do that.

        1. RTBones says:

          This may be true, but there is a trade-off: cost – both time and money.

          If XYZ Company has 25 tools written in COBOL that do the job they need done every day, they will continue to use these tools in everyday business.

          There is a HUGE cost associated with converting these COBOL tools to C#, Python, or PickYourFavoriteLanguage. First, the tools have to be translated. They have to be debugged and tested. You have to have the infrastructure (computers, compilers, staff, etc) to support this development. You’ll likely need SOMEONE associated with the translation that actually uses the current tools. Yes, you can outsource, but there is a cost associated with that as well – you pay to get the apps translated, but what about debugging, migration, support? You need to migrate these newly rewritten tools to common use which may require retraining your current staff on the new tool (very few translations are “true” translations). There will almost ALWAYS be growing pains, which means you will need to support both the legacy COBOL apps as well as the newly rewritten ones, at least for a time. You may need the new apps to “talk to” the old ones so you can migrate data. If there isn’t a “clean” way to migrate data, it has to be done by hand – which takes more time, and requires verification that the data is entered correctly.

          Meanwhile, business continues – and particularly in this economic climate, if you cant keep up, you will either be run over or left behind.

          This is a large reason why languages like COBOL and FORTRAN survive to this day.

      3. drlemaster says:

        A friend of mine (who is a coder) told me he read a sci-fi story in which the galactic empire thaws out and revives a bunch of 8000-year-old programmers because the year 10,000 is approaching, and they need folks to help them update their legacy COBOL programs to work with the extra digit.

        1. Kayle says:

          I wonder how old that story is. I was making jokes about the Y10K problem about 15 years ago on Usenet…

    2. Tizzy says:

      I was surprised to discover that the last Cobol strip in Dilbert dates back to June 2000…

      http://search.dilbert.com/comic/Cobol

  10. LunarShadow says:

    When I entered college I wanted to be a software engineer, found I could not get my head around coding. I dunno what it was but I just could not process it. So I switched over to Aerospace engineering and encountered the monster that is MATLAB. I don’t know if it was the teacher (who was a massive bitch, denying my request to make up the final in case my grandfather’s funeral if it was to be that day, as he was on death’s doorstep. “Luckily” he died the day of the final and I was able to make the funeral) or just my general inability to code. Suffice to say there is a reason I am a History major. I can events and connect them in a elaborate web of cause and effect, but I never figured out how to code.

    1. 4th Dimension says:

      What’s problematic with MATLAB. At least if you stuck with coding in it. Some of the Modeling enviroments in it are way too complicated to me, and I did some work in signal processing, so I know my Matlab.

      Anyway, MATLAB is a nice enviroment to learn to program. It has no initialisation of the variables and such boiler plate code. Also it’s a scrip language, so you can easly test small snippets of code. And on top of it all it posseses a functional help file on ANY function of it, that is easily accesed using command line function help.

      1. Zukhramm says:

        I never really saw Matlab as something to use for programming but rather a tool for mathematics. Untill I got that, Matlab seemed really useless.

        1. 4th Dimension says:

          Yes, while you can use one of it’s many many many many MANY modeling and testing and prototyping tools, primarily it’s an enviroment for programming and prototyping altorythms.

  11. Mephane says:

    In short, they can't write code.

    I second that observation. Actually, I think this is so profound it will hold true forever. I’ve had students next to me in classroom who just manage with typing an example program and getting it up and running, who would struggle the differences between a couple of primitive data types (“Soooo, integer is for whole numbers, and float is for real numbers, right? Wait, what’s double for?), and for whom the difference between iteration and recursion appears like rocket science.

    In the best case they won’t make it as a programmer and quickly end up doing a totally computer-unrelated job. In the worst case, they end up as a former programmer at your company, and you have to maintain their code. Oh wait, that explains much…

    1. swenson says:

      It’s such a weird thing. I didn’t really realize it until I actually got to college, how unusual it was that I actually “got” programming. It’s not so much that other people are stupid, I guess their minds just work a different way. But when I go to my Visual Basic class (I foolishly didn’t take it earlier) and see people struggling… it’s hard for me to remember that. It’s VB, people! I don’t think a language could make it more easy to do things!

      1. Mephane says:

        Yeah actually, I’ve come to the realization that it’s my mind that is away from the norm, heh. Maybe all programmers are wired a bit weirdly. :)

    2. Mari says:

      LOL Know what’s even better than being the successor to a non-coder? Being the successor to a string of non-coders. I was one of the non-coders. I took the classes. I “learned” TurboPascal, COBOL, BASIC, and C/C++. I understood all the theory and could answer all of the questions correctly on the objective tests but the flow and logic of coding quite honestly escapes me. Nevertheless, I was at one point in somewhat desperate need of a job and a friend, knowing I had taken and “aced” all those classes, talked his boss into hiring me to fix the horrible code in the user-interface of an oil and gas gadget they made. I could explain it all but it would be needlessly complicated. Basically there’s a machine. A tiny computer is attached to the machine to collect data and control the machine. The collected data is beamed out (in machine language) via RF to a receiver on a pickup. The driver of the pickup uses a laptop to download the data and send new instructions to the computer. My job was to “clean up” the program that ran on the laptop. Two people had worked on it prior to me and so far it wasn’t even semi-functional. There was a very pretty GUI but it was incapable of doing much because the program couldn’t seem to take the RF gibberish and turn it into anything at all. I actually managed to get it to understand what the signal was saying but quit before I figured out how to make the two parts work together so that the GUI could then turn all that into useful information. I pity the person who came in behind me on that job. I pity my former employer for employing me, too, although with the caveat that “what the heck did they expect from a 19-year-old college student making minimum wage to write a program intended to keep their company viable for another generation??”

      1. 4th Dimension says:

        The first thing about theory vs coding reminds me why I several times had B in Programming at the Uni. It was simple, I had no problem at all programming anything you might ask from me, and never really required doing much stutying for exams, other than completing assigments during lab hours, and doing homework. Often I would finish WAY ahead of my colegues too.
        But on the other hand I couldn’t give a rats ass about weither fro example new was a command or a function. You simply inmut some data in it, and it does what you want it to do. So I allmost allways skipped theoretical part of the exam (I wasn’t helped by theory being tested with multiple choices questions, on which you could get NEGATIVE points if you marked wrong answers), so in the end I would get something like 89 out of 100 instead of 99 out of 100, and thus I was given a B.
        On the other hand while distinction between a command and a function wasn’t important to me then, I now understand why it’s important, but than I didn’t learn it by studying theory but by running into a problem requiring me to know.

    3. Paul Spooner says:

      The “cant code” syndrome is rather complex, but the core issue is one of understanding and communication. xkcd #568 touches on it.

      To program, you must face the hard unassailable fact that you have no idea what you want, or what you are trying to accomplish. Then you must not give up, and struggle to distill the goal. The computer trusts you to tell it the truth. You must be brutally honest.

      Once you know what you want, you must communicate it precisely and accurately. Programming languages are far less forgiving than natural languages. A computer will do precisely what you ask of it. This is its greatest strength, and often its greatest frustration. A compiler will not read between the lines, or empathize with your struggles. You must always strive for concision and utter clarity.

      All of this requires a great deal of rigorous mental discipline. Logical thinking, consistent total honesty, inductive reasoning, sustained concentration, attention to vastly differing scopes, precise vocabulary. Most people are neither equipped with these skills (learned through pain and practice) nor care to acquire them. This is why most people can not code.

      1. DaveMc says:

        This is remarkably poetic, and very Zen, somehow. It makes me think of programmers sitting in intense meditation, pursuing their devotion to utter clarity.

        “Eventually you realize that there is no code, and no programmer …” :)

        1. PAK says:

          http://en.wikipedia.org/wiki/Hacker_koan

          Strictly speaking, these don’t follow the form of true Zen Koans, which are not actually direct metaphors, but still, fun stuff.

    4. Zak McKracken says:

      My thesis is that most people who can’t code and are otherwise good at maths and stuff have just never been taught the right way, whichever way that may be.

      These people obviously are able to concentrate and to think analytically. Where I come from, most people learn just FORTRAN. Then came Python and a good incentive for some colleagues and my to learn it. That’s when I saw many examples of people who are mentally able to do it (after all they could already code Fortran) and who have vastly different success with a completely new language. Many gave up quickly, a few got on nicely, and for most others, it was a big hard puzzle until one moment when it started to make sense, brought about by some piece of information, told at the right time, in the right way. And this is a different bit for most individuals. Finding out which bit is missing is probably impossible, since the person doesn’t know, and the person explaining it only gets “I don’t understand” – “what don’t you understand?” – “the whole thing!”.

      What I observed at university though: Some people can get remarkably far by just memorizing the right answers and the solution schemes for problems where the answer itself cannot be memorized. After that, just don’t think and to it. You can get extremely good grades that way, without having to understand at all what you’re doing. Sadly, creating a test that will not reward this behaviour is pretty difficult without making it harder for everyone else, too. There were only few tests which managed to do that, and I scored pretty low in those, but it was totally worth it to see the “memorizers” suffer :)
      After University, I thought I had a big advantage because I knew how things really worked and many others only applied memorized schemes to known problems. Then I found out you can go a very long way in the industry, too, without actual understanding of the subject matter … dammit!
      The ugliest part is when someone like that gets a position where it’s not tolerable to not understand the stuff they’re doing. This too often results in giving them administrative tasks, which results in a promotion, which results in that person becoming your boss … nightmare!

  12. Mark S. says:

    Yeah, I’m with you on one thing, Shamus. Luckily, my HS had no math requirement to prevent kids from getting their hands on the computers in the computer class. I still don’t know why I had to suffer through 3 semesters of Calculus and Linear Algebra in college in order to get my CS degree and start writing business applications. Furthermore, IIRC, none of my CS courses ever referenced any of the hard-won information covered in Calculus or Linear Algebra!

    1. On the other hand, once you get into stuff like graphics code and representing objects in 3D space, the maths suddenly becomes very very important to know. So it’s not like there aren’t crossover areas

      1. Mephane says:

        Well but that is not because you are programming. A mathematician could do the math and just hand over some resulting formulas which any competent programmer could implement without understanding the math behind it.

        Don’t get me wrong on this, I totally get what you’re saying, I just want to point out that the math can be totally seperated from the programming part. Of course having a programmer who can do both by himself is a lot easier.

        1. Zukhramm says:

          Though understanding the mathematics can be important for making it run with reasonable speed if the formulas are complicated ones.

          1. Zak McKracken says:

            seconded
            Especially in numerics, understanding which form of an equation is solved quicker is half the job. These days, mathematics are optimized for programming. And programming for math is a big thing.

            Ohh, and also:
            Computer Science is not programming

    2. CrushU says:

      I’ve had exactly two CS courses that referenced any math whatsoever: Graphics Programming and Algorithms And Data Structures. Graphics Programming used some calculus and some Linear Algebra (matrix math). Algorithms used algebra, calculus and some statistics, too. Calculus III was still useful to me so I could think about math applying to three dimensions, though.

    3. Zukhramm says:

      I seem to have the opposite experience. Not being very good at Linear Algebra it seems to be everywhere.

    4. Zak McKracken says:

      I think it’s bad for you trying to optimize what you learn by minimizing anything you’ll probably not need at the work you think you’re going to be doing in x years’ time.

      First, knowing more than your immediate field of work goes a very long way towards talking to people you work with, solving multidisciplinary problems (and which problem isn’t multidisciplinary these days?), and in general not being intimidated by problems you haven’t faced yet.

      Oh, and it turns you from a nerd into a generally knowledgeable person, and everyone likes those.

      That’s not to say I don’t sympathize, and I did in fact try to do just that with my school career. And while I think it’s a bad idea to keep someone from learning x if they want to do it, it’s also a bad idea to allow them to skip too much of the other stuff. Where I come from, at least a tiny bit of calculus was mandatory for everyone, even if they went on to become psychologists. And in turn, I don’t mind at all having been forced into sociology and history. I hated it back then, but it all makes sense now. I’m sure Shamus wouldn’t mind knowing more vector maths these days. That could make his coding project quite a bit easier.

  13. Patrick the Parallel Intersection says:

    What? No centrifuge? No mention of weeks of car washes, Spam or red kool-aid? Man… you lived for church camp. You looked forward to it the moment you left it.
    No puppets? No mention of you brief “flock of seagulls” haircut?
    And don’t let him fool you folks with all of his talk of coding. To hear it he coded morning, noon and night. Truth is we spent as much time playing pirated versions of Leisure suit larry and Starflight. We probably spent as much time trying to smash everything in the game with Lefty’s left handed Hammer then coding anything useful…..

    And dont even get me started on the amount of time spent on Nethack….

    1. swenson says:

      Flock of seagulls haircut? That sounds… interesting.

    2. Shamus says:

      We didn’t have an IBM machine until the coming summer. So, no Larry yet.

      1. Patrick the Parallel Intersection says:

        Are you sure? I thought you had a machine your entire career of vo-tech…

        1. Shamus says:

          Yup. You’ll see tomorrow. :)

          At this point, all I have at home is a Tandy with 16k of memory. NOBODY is gonna be playing LSL on that. :)

    3. Mom says:

      THANK YOU, Patrick. Sometimes I wonder who this Shamus guy is. And what about the fireworks? And wasn’t there a garage band -or was that just you?

      1. DaveMc says:

        HEY, the man is trying to record his life, here, all right? Rebuttals from his mother and brother are just going to distract him. :)

        (In truth, it’s one of the nicer uses of this new-fangled technology that I’ve seen: public recollection of your life, where the public includes members of your own family.)

  14. HeadHunter says:

    We didn’t get computers in my school until Grade 10 (which was 1983), but fortunately, our computer teacher was our math teacher – and the class was open to those of us who showed a genuine interest. There were fewer than a dozen of us, which was good because we didn’t have many machines to work with.

    I never did well in algebra – I have the head for it but was too busy with gaming and didn’t pay attention in class or do the homework. So, geometry was difficult and by the time I got to trigonometry, I barely passed on luck and the partial credit for having a correct answer without “showing the work”.

    That was my biggest problem with math teachers – the belief that an answer is invalid unless one can demonstrate how one arrived at it. I have always had an intuitive ability for math and could solve problems in my head – usually as fast as others could with a calculator or by writing it all down. But I couldn’t show you how I got there.

    “Show your work?” Excuse me, teacher, but the “work” is thus: Plug my answer into your equation. Does it solve the problem? Then it is correct.

    I guess my problem with math education (and education in general) is that they were more concerned with “the work” than they were with answers that work. In the ’90s, I heard that some educators were trying a concept whereby the effort a student made counted for more than the result itself – so, someone who worked hard but arrived at an answer which was ultimately incorrect might be seen as a better student than one who could provide the correct answer with no apparent effort.

    Perhaps, in terms of “education”, that distinction might be important -after all, someone who doesn’t need to work on a problem clearly isn’t “learning” in class – but in reality, all it means is that there’s nothing you can teach me. And that was an underlying issue for my entire scholastic career. Teachers at the elementary level were not equipped to identify and challenge students who were above their age level in capability. So I found primary school to be boring (often times, it seems I knew as much as the teacher) and so I did not develop good study habits. In middle school, I could usually absorb a lecture while reading a D&D book or something – and could repeat the last minute or so of a lecture verbatim if someone tried to call me out on my inattention. But the lack of study habits began to be a factor. It wasn’t until later that I realized that the disservice done to me in primary school had not impaired my ability to “learn” (one is not really “learning” what one already knows, or can easily intuit), but rather had left me ill-equipped when it came to learning to learn.

    I suspect, Shamus, that you and I had similar experiences in that regard. It’s why we hated homework, why we didn’t study, and why the American educational system needs an overhaul. It’s sufficient for reinforcing mediocrity, because it diminishes the exceptional rather than elevating it. That’s not the fault of teachers in general – teachers who could see that certain students needed a more challenging course of education simply didn’t have the means to provide it anyhow. The real problem is on an institutional level.

    I’m not certain how much has changed in the last 25 years – but, if the Internet is any indication, our children’s generation isn’t even being taught as “well” as we were.

    1. Mephane says:

      Well, I think math is mostly about how to get there. Being able to plug some values into a formula and get a result at the other end is merely a by-product. Also, just writing down the result without any intermediate steps in a test usually looks like the result was just copied from the neighbour, hence the fixation on the path to the solution.

      Also, most math teachers follow your path even if you make a mistake at the beginning, and if everything holds together after that, you can still get like 9/10 points for a task, as you obviously know how to do it, and only have some minor error somewhere in the middle or beginning.

      1. To be fair, my teachers made the much more reasonable point that if I did the working on the exam but made a calculation error I’d still get some of the marks, so it’s the safer tactic.

        You would still get full marks if you just wrote down the answer, so maybe that doesn’t apply.

        1. Mephane says:

          Yeah, I remember it being that way all the time. Answer only? All or nothing. But if you can provide the path to the result, you can still get significant portions of the points if there’s only a minor calculation error.

    2. Zukhramm says:

      The purpose of a test is for the students to be able to show the teacher what they know. If the paper is just filled with answers the teacher has no way of knowing if the student understands the different parts of the problem. That’s why you have to show your work.

      1. decius says:

        If I get the right answer, of course I know the difficult portions of the problem.

        The benefits to showing work are: It demonstrates the philosophy that it is important to follow arbitrary rules; it allows the instructor to see at what point the student failed to understand the problem; and it allows the instructor to give partial credit to someone who DID get all the hard parts, but carried a 1 through as a 7.

        The first two reasons are good enough to REQUIRE showing work, and the third is a good reason to show work where warranted.

        1. HeadHunter says:

          But, of course, if the answer is correct, none of the reasons given are applicable.

          The replies have served only to reinforce my belief that “showing your work” only matters when and if you can’t get it right. It’s a useful tool for reinforcing instruction in those cases, I’ll agree – but marking off a correct answer because work was not shown serves no purpose other than to assert that the effort is more important than the result.

          And I fail to see why it’s “important to follow arbitrary rules”. It seems to me that the whole point of what Shamus is trying to say is, that’s why some intelligent kids do poorly in school. Teachers who cling to said “arbitrary rules” to the detriment of those whose grasp exceeds those rules do all of their students a disservice.

          An educational system built on that premise will always be second-best. At best, it makes poor students into mediocre ones – at the cost of doing the same to exceptional students.

          1. Kacky Snorgle says:

            but marking off a correct answer because work was not shown serves no purpose other than to assert that the effort is more important than the result.

            Not that the effort is more important than the result, but that the method is more important than the result. Which would of course be nonsense in the real world, but is perfectly reasonable in a classroom setting, where the whole point of the exercise is to teach you methods that will later help you to solve even more advanced problems.

            Your ability to solve today’s problem without using the teacher’s intended method would be a wonderful thing, if all you ever needed to do in your life was solve problems of that type. But that very ability may well be hindering you from mastering the skills you’ll need to move on to more advanced problems. Thus the teacher discourages you from using that particular ability, by giving you no points when you do. That’s not making an exceptional student mediocre; that’s helping an exceptional student to become more than just a flash-in-the-pan.

            In a more ideal world, the teacher might instead move the exceptional student directly into harder problems, where he’d realize that his poor grasp of certain “simple” methods was a major liability. But the world is not ideal, and your teacher’s no-credit-for-no-work policy is a reasonably good one given the reality that he’s got to teach a roomful of students of widely differing abilities all at the same time. Just because such a policy isn’t the best possible one for the exceptional student, that doesn’t mean that it’s *bad* for him or that it’s holding him back.

        2. Zukhramm says:

          “If I get the right answer, of course I know the difficult portions of the problem.”

          You could have guessed. Or there could (and very often is) multiple ways of solving a problem and the test is about a specific one. Also, it’s often possible to make small mistakes in the process of solving a problem and still ending up with the right final answer.

          1. HeadHunter says:

            Kirk: Mr. Spock, have you accounted for the variable mass of whales and water in your time re-entry program?

            Spock: Mr. Scott cannot give me exact figures, Admiral, so… I will make a guess.

            Kirk: A guess? You, Spock? That’s extraordinary.

            Spock: [to Dr. McCoy] I don’t think he understands.

            McCoy: No, Spock. He means that he feels safer about your guesses than most other people’s facts.

      2. Kacky Snorgle says:

        That, and also the fact that any given topic in math class is generally there to serve as preparation for future topics. Sure, you may be able to solve *these* problems in your head without effort; but eventually there *will* be problems too hard for you to do that way. And when that happens, you’re going to need to have the skill of deconstructing a problem into its component parts, making a diagram, setting up an equation, or whatever else applies in that particular situation. The teacher is trying to help/force you to develop these skills *before* you reach the point of desperately needing them. Of course, some people just don’t see the point of learning something until the need for it has become inescapably clear–I have more than a little of that attitude myself–but oh well, at least we tried. :)

        So, yes, math classes do sometimes have a habit of introducing a new method by first using it on a problem that’s simple enough to be solved without it. There are pros and cons to this approach, but I’ve found that it does help if the teacher explicitly points out that he’s doing this. “Sure, we could do this problem the old way, and it might even be quicker–but let me use this problem to show you the new way, because we’re going to need it in the next chapter when we meet harder problems.”

        1. HeadHunter says:

          If education was like that, it wouldn’t be so bad. But the rote regurgitation common to most secondary education doesn’t have room for building such skills.

          I would have loved it if someone had taken that approach in the 9th Grade – I might have stayed with math through Calculus rather than taking “Advanced Math” (much like the course Shamus described) in 11th grade and no math at all in my senior year. I have a head for math, and for some odd reason I found it stimulating. But teachers were more concerned with the traditional “parrot it back” method than building actual skills.

          Instead of the typical methods of indoctrination and testing, it would be wonderful to equip everyone in the class with the same tools to learn more. Then the average student would have what they need to succeed, and the exceptional student would have the means to go further. Sadly, in most schools in the ’80s, there wasn’t anywhere “further” to go.

        2. lasslisa says:

          Thanks for this, I took a long time to get that. It’s one thing to be able to figure that x-2=6 is 8, and a different thing to figure that sin(x) *18 + 12 = 21 is 30 degrees. For the latter there are intermediate steps even if they CAN be done without writing down.

          My preferred solution is for the class to skip straight to the interesting problems but I’m aware the other 98% of the class gets screwed by that. And I’ll learn it either way, just gimme the textbook.

    3. Zak McKracken says:

      “the belief that an answer is invalid unless one can demonstrate how one arrived at it”:
      Maths is about you learning how to solve a type of problem. And in the process learning how to figure out how to solve a different type of problem (which is where intuition is actually pretty useful). The problems in tests are simple, to make grading easier. At least we always had algebra problems with easy solutions so we could solve them without a calculator. So you could guess some of the results, and you knew that if you got “1.34963” as a solution, you were probably wrong.
      But that’s not what the test was about. It was about having a conscious understanding of the way to solve a problem and then applying it correctly. Because your intuition is gonna help you naught if you should encounter an actual problem of the same type that involves numbers with more than three significant digits and irrational solutions.

      I’m completely with you, though, on the “I didn’t learn to do it right because I was so bored in primary school” thing. That’s pretty much my story too. There was a procedure for skipping a year (and I know people who did that), but my marks in all topics that didn’t need analytical thinking were just too bad for that. I didn’t discover the use of those classes until waay later. My bad.

      1. HeadHunter says:

        I agree with you – and I think everyone’s responses help to illustrate something I was trying to articulate.

        I don’t know how different it is now, but it seems to me that the educational system of our time simply didn’t have the means to accommodate different methods of learning.

        We can see how this works, in the modern workplace. Jobs that attempt to teach skills and techniques by the old rote method typically produce employees who don’t understand why they are doing some particular thing, or of what use it is. Jobs that understand that some learn by listening, others learn by watching, and some learn by doing… those are the ones that tend to have a higher proportion of motivated employees who feel invested in what they do.

        There wasn’t much room for an intuitive, kinesthetic learner in the schools of the 80s. Teaching a class to simply parrot it back doesn’t educate the students with really good memory, it fails to equip them to go further. That’s why I felt it was holding back students who were intellectually capable of so much more.

        1. Kacky Snorgle says:

          You make a good point, but I think you’re being a little too hard on rote learning. It shouldn’t be the *only* approach used, but it’s still important for some topics and some learners…. You’re right that too much rote memorization often produces people who don’t know *why* they’re doing what they’re doing. But on the other hand, too *little* rote memorization often produces people who loosely understand some big-picture concepts but can’t put them into practice. And on the whole, the former sort of people are much more productive as employees, even if they make lousy teachers.

          And exceptional students aren’t all exceptional in the same way. Some of them are great at taking their rote learning, and working out for themselves the reasons behind it, and generalizing them to create new and improved methods on their own. Others are great at taking their knowledge of the big picture and seeing how to apply it to specific situations, without needing a bunch of rote repetition to build that skill. So the classroom needs to use both approaches from time to time, to cover everybody. (And yes, individualized instruction tailored to each student would be even better, but probably infeasible under anything resembling a public education system.)

          1. HeadHunter says:

            Good – we’re moving closer to that wonderful Socratic synthesis I seek in any intellectual debate.

            So, given what we’ve discussed so far, I’ll ask this:

            If teachers require you to show your work so that they can see that you truly understand the problem… why is the preferred and default method of instruction rote memorization? That doesn’t help someone understand the necessary fundamentals, nor to articulate any understanding they may innately possess.

            We agree that the ideal of individualized education is impractical at the secondary level, but it’s obvious that the methods of the time were not in line with achieving the desired and expressed goal. Critical thinking was absent from the curriculum, and it still appears to be – and all too often, trying to apply it in a scholastic setting can earn unfavorable attention from teachers who don’t want anyone “rocking the boat” or “throwing off the curve”.

            It’s far too late to change the education I received in the ’70s and ’80s, but I cannot help but wonder if an entirely different approach would have been beneficial overall – and, if so, how could we implement it in today’s schools?

            1. Kacky Snorgle says:

              I suspect that the reason many teachers use rote instruction somewhat more than would be ideal, is because that method is well-suited to a large-group classroom setting. Getting a roomful of students to work independently is challenging; you’re likely to end up with some students enthusiastic, others uninterested and deliberately off-topic, and still others willing but frustrated. It’s difficult for one teacher to handle all of these cases simultaneously, and each student or group ends up receiving only a small fraction of the teacher’s time and attention.

              Rote memorization is easy to troubleshoot: if the student can’t recite all the required facts, then the student needs to study more. The teacher can create assignments that drill the students on these facts, and assign extra work to the students whose performance is poor (and possibly also exempt top students from some of the regular work). This is a very crude level of “individualized” instruction, but it’s one of the few forms of individualization that’s easy to implement over a large class.

              Critical thinking is harder to troubleshoot: if the student is given a difficult problem and he fails to solve it, then what sort of help does he need? Perhaps he has missed out on an important concept; perhaps he’s struggling with mechanics; perhaps he misinterpreted the problem in an unexpected way; perhaps…. The teacher will need to spend significant time evaluating this particular student, probably through discussion but possibly from written work, in order to tease out exactly what is required to help this student succeed. If the number of students is large, the teacher will likely be unable to do this well.

              The latter situation leads to some rather unpleasant failure modes: Sometimes the teacher makes all the “critical thinking” assignments very easy, so that the number of students experiencing difficulty will be manageably small — but in that case most students aren’t actually being taught anything. Sometimes the teacher makes the “critical thinking” assignments count for very little (or nothing) toward the class grade, so that the weaker students who couldn’t get adequate help won’t be penalized for this — but that just shows all the students that critical thinking isn’t considered very important. Sometimes the teacher goes ahead and weights the “critical thinking” work heavily in the grading anyway, so that the students will take it seriously — but that both frustrates and shortchanges the students who struggle with such work and who fell through the cracks because they were never able to get the one-on-one instruction they needed. Sometimes the teacher just gives up and reverts to all-memorization-all-the-time, so that all of the students will at least gain *something* from the class — but that doesn’t help the critical-thinking skills of any students except those whose natural talents run that direction.

              The ideal solution, of course, is to give each student a larger investment of the teacher’s time and attention. In practice, within the context of our public education system, there are limits to how far we can go in that direction. So we’re left with less-than-ideal solutions. Many have been proposed, and I’m not going to claim to be qualified to judge between them. But I don’t seriously believe *any* of them are going to prevail much against the reality that (a) teaching facts to a student who’s bad at memorizing is far easier than teaching critical thinking to a student who’s weak in that area; and (b) a person who knows stuff but can’t build new knowledge on his own, is still ahead of a person who’s good at building but has no foundation to build on. Our schools will always tilt a bit too far (compared to the ideal) toward the rote side of the balance, because to do the opposite would, overall, accomplish less in our non-ideal world.

              I don’t really think of that last sentence as a problem we ought to put effort into solving. I think of it as a reality we ought to be aware of before deciding where our effort *should* go. Investing lots of time and energy and money into overhauling our public schools might have lots of positive results, but it won’t change facts (a) and (b) above. We might do better to accept that public education is good at some things and not others, and rely on other resources than the local school district for the enhancement of our children’s critical thinking skills — whether or not the children under discussion here attend public school.

  15. Jericho says:

    Heh, nice to know COBOL was just as pointless back then as it was when I learned it in 2007.

    God, I hate COBOL. And CICS. And Mainframes in general.

  16. Drew says:

    I really can’t tell if it was intentional or not… but I really find it funny that you talk about programming and how easy it was for you to tell who actually got it and who did not only to follow up with a story about something you didn’t get at all.

    Also, I officially retract my thoughts that you have Asperger’s…. I only had my first fleeting contact with dating my second year in college and it took until… *checks watch* months ago for me to start dating for real. At the tender young age of 25.

    1. Paul Spooner says:

      I only had my first fleeting contact with dating my second year in college and it took until… *checks watch* months ago for me to start dating for real. At the tender young age of 25.

      I’ve been there exactly. Now I’m three years further down the road, married, with two kids to show for it! Best of luck!

    2. Zak McKracken says:

      Don’t worry. Most people completely underestimate the average age at which people start datnig “seriously”. Maybe because a 15-year-old may be bragging about his first conquest, but a 20-year-old will probably not talk much about having been single his whole life.
      25’s quite alright in my view.

  17. Ski says:

    I went to a magnet high school from 1996-2000 for an IT program, and we STILL had to take COBOL. They tried to explain their reasoning by opening up the jobs section of the daily newspaper and counting the number of jobs with COBOL vs the jobs with C/C++: 9 COBOL, 8 C. What they didn’t take into account was that it would be 4 to 8 years (depending on college) before we’d enter the job force with our programming skills. I have not seen a single programming position that asked for COBOL since I graduated.

    Also, they kept tasking us with programs that did nothing but output reports, even outside of our COBOL classes. It wasn’t until our senior year that my fellow geeks and I could do something other than that.

    1. Zak McKracken says:

      Well, I never got to use either BASIC nor TurboPascal. Not even Logo or Prolog :)
      Doesn’t matter though. I think it’s still good to know there are languages out there that are structured completely differently. And if you’re able to wrap your head around those, you’ll be able to wrap it around the next big thing, too.

  18. Ruthie says:

    Where was that picture taken? I can’t figure it out.

    1. Shamus says:

      It’s the kitchen, pre-renovation. While a lot of rooms had those sliding doors, I’d recognize those chairs anywhere. Having said that, I don’t understand that shelf on the far right. I don’t ever remember there being a shelf there. Shouldn’t that be the glass doors to the deck?

      1. Mom says:

        The sliding door to the right hand closet is OPEN. you are looking into the right side of that closet. The charger plugged into the back wall of the closet is for the dust buster.

        1. Shamus says:

          In reply to both of you:

          My priority is to make an interesting read that people will want to read, not build an exhaustively detailed account of all the crap in my life. Obviously if I tried to set down every single memory we’d still be reading about third grade at this point. I’m leaning toward stories that relate to programming, technology, education, and writing, since that’s what I talk about on this site.

          Sure, there are lots of other stories that I could add, but would be of minimal value to people outside of our family. Others would just require really long set-up explanations to be meaningful. Some I’ve forgotten, or they just aren’t all that important to me.

          Anyway, that’s why I’m skipping some things and focusing on others.

          1. Mom says:

            O, I knew that. But YOU brought up the “shelves where the glass doors should be”.
            The family is just hijacking the comments section of your blog for our own selfish pleasure.

            1. Shamus says:

              Gah. This was SUPPOSED to be a reply to Patrick, above.

              Now we’ve replied to it, so I can’t move it, and not it will never make sense! Gah!

  19. ccesarano says:

    Oh my God Olan Mills. I didn’t realize they were a chain. When I was a kid I thought they were just that horrible nearby place. Whenever we were going to Olan Mills it meant itchy sweaters and a lot of time waiting for the chance to go into a room, stand around and smile fake just for someone to take a photo that could just be done at home.

    I never realized it was a place people suffered at outside of Woodbury, NJ.

    I spend the rest of the class making games or helping other students when they ask. By helping, I am able to see the discipline of programming through the eyes of people who are new to it. Through this, I am able to perceive a clear dividing line through the students. Just about everyone is passing, but not everyone is “getting it”. Some people are able to recite the correct answer to a problem, but they do this only because they were told it's the right answer. They don't know why it's right and they can't use that knowledge to solve other problems. They can take the example program given in lecture and change a couple of lines to complete the assignment, but they are completely unable to improvise. They can't create anything new. They can't follow the flow of a program by looking at the source. They can't predict what values a variable will have at any arbitrary point in the execution. In short, they can't write code. As the year goes on, this distinction does not go away. These kids are otherwise smart and good students, but the art of programming is lost on them.

    I think this issue has continued on, really. Possibly even grown as more people go to College with the desire to do things like make video games. Part of it is because the “told it was the right answer” part.

    I remember taking a class in College for advanced Flash programming, and in order to try and do a sort of Hex game that checked all surrounding borders we needed to use recursion. Now, I’m not the best logic programmer, so I could have missed something, but when I saw the teacher’s function I just couldn’t see how it would help me. So I basically started on my own sort of recursive function that only worked half the time. The times it didn’t work seemed sporadic. I was actually proud I got this far writing my own recursive function, especially when other students were having trouble with the function given them.

    Unfortunately, when I called the professor over to help, he was pissed I wasn’t using his function. He told me I didn’t understand recursive programming and just bitched. He never tried to help me, and never looked further into my function. He just got up, said to use the function I gave them, and walked away. The problem is, based on what he wrote and what I wrote, it wouldn’t have changed anything. Or at least I didn’t see where the problem was in my code and he never bothered to help me.

    I ended up dropping the class, and since there was no other Professor teaching it I never bothered again. I was so pissed off that I was yelled at for trying to do something on my own rather than regurgitate a function I’ll never remember by just copying and pasting it. Even more, I was baffled how the professor could be so insulted that I’d try to do my own thing that was partly working.

    Which opens up my biggest problem with a lot of modern programming courses: half the time they’re giving you a function that just magically does a bunch of stuff. Hell, I remember in my JavaScript course we had three separate functions responsible for loading XML, but I don’t for the life of me remember what they did. Chances are if I went back now I’d have a better idea (though with jQuery and AJAX it’s a bit moot), but at the time I didn’t have a clue what was going on in there. Yet this is how a lot of programming is taught.

    Man, no wonder games are so buggy.

    I smile. Nobody has given me a valentine before. I'm suddenly very nervous. We talk sometimes on the way to school. She's smart, friendly, and attractive, which has resulted in me having a very predictable crush on her, which until now I have assumed was unrequited. I look down at the valentine and wonder what it means. Maybe… maybe the crush is mutual? Although, maybe she's just being nice? Maybe she just, like, brought one of these for all of her friends? Maybe she's just sort of thanking me for being her friend on the bus in the mornings? It's so hard to tell. I stammer out some thanks, but I don't follow up.

    This was me throughout High School, and even still persists into College and adulthood. As I’ve told friends, despite my experience with women and how much I’ve grown, deep down inside I’m still the little nerd that goes “G-G-G-GIRL!”

    1. Peter H. Coffin says:

      The reason you were (probably) supposed to use the function wasn’t to keep you from doing Cool Thing on your own, but to save you the time of having to spend the time doing the (demonstrably broken) Cool Thing instead of learning what was actually being taught at the time, which was some aspect OTHER THAN what the supplied function was doing. Maybe once you’d spent enough time making Cool Thing get the right results every time, then the rest of the program, which was actually the important part for the days lesson would have worked correctly the first time and you wouldn’t have needed any assistance with it. But from the teacher’s point of view, that “rest of the program” was being set aside to redo work that was already done. Your car has a flat tire, the teacher’s wanting you to change it, and you’re elbow deep trying to reroute the wiring harness.

      1. 4th Dimension says:

        That’s why during classes pay lip service to the way they tell you things are done, than go home, and let your imagination go wild on solving that problem.

      2. ccesarano says:

        Except this isn’t true. The whole point of the exercise was learning and understanding how recursion works. But there was no learning or understanding. There was copy-paste.

        That’s what annoyed me, and again, simply dropping it into the code still wouldn’t have solved my problem.

    2. 4th Dimension says:

      You didn’t by any chance approach that theacher improperly by chiding his function? Just a question.

      If not, it’s actually really not uncommon that people that DO teach programming are not active programmers themslelves. They most likely know how to “theoretically” solve problems, and are given teaching spot to stay on campus while performing some other important research tangentally tied to programming. And it’s probablly not quite simple to find expirienced people willing to abandon their actual programming job, to come teach something madenningly simple to them for a pittance that educators are ussually paid. Also if they become teachers, that means probably no more paid programming.

      And there is also the possibility that your way of solving the problem, didn’t solve it the way it’s supposed to teach you something.

    3. Shamus says:

      I had no idea Olan Mills was a chain until you left this comment. And yes, I had the same impressions of the place.

      I was actually really irritated with this picture. The stupid idot woman WOULD NOT LET ME SMILE NATURALLY. She insisted that I continually jack it up until I had that crazed manic smile.

  20. krellen says:

    Out here, the equivalent to Vo-Tech is the Career Enrichment Center, usually just called the CEC. It had many of those vocational-level classes, especially the cosmetology ones, but it also served as the place for classes with enough interest throughout the district to justify a class, but not enough interest in a single school to justify it.

    CEC was where we had all the computer classes (which were a blend of Pascal and Assembler; many of the advanced students spent their time remaking Tetris and Tron, and then getting the rest of us to play them), but it also had a lot of esoteric language classes as well. Each HS would have Spanish, French, German, sometimes Russian, but CEC would teach you Japanese, Korean, Hebrew, Finnish, Chinese, and many other languages for which there were enough students for a class, but only when you considered the entire city.

    I attended CEC my Junior and half of my Senior year. In Senior year, I was getting sick of school and its arbitrary requirements, and I was about 20 credits ahead of graduating anyway, so I didn’t really need to take any more classes.

    1. Paul Spooner says:

      You went to school at an “Enrichment Center”… why the dearth of Portal references? Help us out here man! Did they say “Welcome to the enrichment center” when you started classes?
      “Among the many enrichment opportunities…”
      “Your enrichment experience is important to us.”
      Oh man, what did we do before Portal?

      1. bucaneer says:

        We had real cake. :(

  21. Vextra says:

    If I may drop in a late 90s-00s UK-centric Public school perspective,

    I am amazed that you guys learnt any sort of Coding in the 80s. Furthermore, I am amazed that you had a Vocational College within 20 miles that even OFFERED courses in coding, and this is still the case today. I was fairly lucky, as our school (uniquely for the area) offered GNVQs in IT, aswell as A-levels. I took both, and they were pretty similar, mostly consisting of busywork with Microsoft Office. I damn near flunked the Excel module, despite the backbreaking effort I would pour into all this stuff, being too niave/stupid at the time to realise how utterly pointless it all was. Coding? we spent one week on HTML in the 4 years I spent learning IT. Hardware? We spent ONE LESSON learning about how the Magic Thinking Boxes worked. About a year ago, I signed up at my local College for their level 2 Computer Course, not knowing what this was. It took only 2 lessons before I realised that they were teaching the same ultra-basic stuff, only this time aimed at elderly people who’d never used Office before. I quickly left and got a refund. They didn’t do level 3 courses, which would have been about on par with my skill level, and noone outside of University offers level 4 or higher IT courses. I am simply amazed that this country ever had an IT industry, the level of computer illiteracy is very widespread and yet almost unnoticable.

  22. J Greely says:

    I learned COBOL by fixing a public-school accounting system that had a really expensive support contract. Getting the vendor to write new reports was out of the question, and it was a step up from pizza delivery for me.

    It was the best tool for the job, in 1987. Also a surprisingly capable language, when used creatively; one weekend when I was bored at work, I wrote the machine-language interpreter for my group-project class, and it ended up shorter and clearer than the one we actually turned in in Pascal. I thought about writing the assembler as well, but decided that I’d shamed my group enough already.

    My most pointless computer class in college was the one where the textbook was about modern databases, the lectures were filled with ISAM/VSAM disk allocation for specific IBM disk packs (none of which the university owned), and the labs were all standard COBOL reports. I got into a number of arguments with the TA who graded the labs over my refusal to use modern COBOL features. My code was too old-fashioned for him; also shorter and clearer.

    These days, I do my database-hacking in the language of the gods: Perl.

    -j

    1. blue_painted says:

      “The Gods” in this case being twisted and evil Gods of the furtherest, deepest and nastiest nether hells?

      g,d & r :-)

      1. J Greely says:

        The road to Hell is paved with ugly code that gets the job done.

        -j

  23. Gaaaah, don’t link to explanations of DOS, Shamus! Makes me feel ooooold. I’m 24, I shouldn’t be feeling ooooold.

  24. Al Shiney says:

    First, this is an amazing read, Shamus. I took some time away from your site and just checked back in last week to see this ongoing masterpiece of historical recollection and the AC2 Spoiler Warning. Thank you!

    As for COBOL, after graduating high school in 1981 and going to a 2 year business college, it was my first true programming love, although not my first programming effort. That was in Accounting 2 class as a senior where I was the only person who knew how to use the state of the art technology offered by the TRS-80 Model II and it’s cassette storage medium. I used hundreds of SET & RESET commands to first build a “castle” and then to lob rectangular “rocks” at it to destroy its walls, which would fall in great rectangular heaps at the base. It was truly the most amazing thing I’d ever created and is largely the reason why I switched my planned college major from Accounting to Data Processing.

    COBOL rocked at the time, simply because it was pretty much all there was besides FORTRAN, which didn’t work for me. But if you’re looking for something worse than COBOL, there’s IBM’s RPG (http://en.wikipedia.org/wiki/IBM_RPG) which is anything but what we now think of when using those letters together.

    1. Shamus says:

      Ooooh. RPG. We will get to that monster soon enough. Fie!

      1. krellen says:

        I remember taking a class in RPG and reflecting on how utterly pointless it was.

        1. Paul Spooner says:

          Wasn’t that every class you took on every topic ever? :)

          1. krellen says:

            No. My history class was pretty cool. And I learned a lot about life and the tribulations of a teacher in my Latin class.

      2. Al Shiney says:

        Excellent. Kill it! Kill it with fire! Our RPG professor really loved it when we stopped calling it a programming language and began referring to it as a utility.

  25. Unbeliever says:

    My “programmers vs non-programmers” revelation didn’t occur in my high school programming course (although I did master each language presented there quickly, easily, and then proceeded to help virtually everyone else in class with THEIR programs).

    No, my revelation occurred during LOGIC class, in college.

    (Similar to your high school experience: at the University of Houston, to major in Computer Science, you were required to virtually MINOR in MATH. Calculus 1,2,3, and Differential Equations, all required for your degree. LOGIC, on the other hand, was an elective — not even RECOMMENDED. Now guess which skill is an essential element of all programming, and which is never used again once you have your diploma?)

    Logic was the only class I ever took, where the grades were an inverted bell curve. Nobody ever got a “C” in that class — it was all A’s and F’s. You either GOT it, or you DIDN’T.

    I spent the whole semester being paid to tutor one of the college football stars in the same class as me. (The thing about Logic class, was that it was considered a low-level math course — and vast numbers of “jocks and cheerleaders” would take it, thinking it would be an easy A.)

    All semester long, I could never convince poor football-guy that if “X” is true, then “X or Y” would always be true — or that if “X” were false, then “X and Y” would always be false.

    The class really was that basic. And it made the steam whistle out of the poor guy’s ears.

    These days, when we interview additional programmers for my team, I never pay attention to the person’s resume. I just look for the “light behind the eyes”. Is this person actually technical? Or are they just a drone, struggling along in a career they aren’t really suited for?

    As long as the techie lights are burning, they’ll be able to pick up the job-specific skills in no time…

  26. Potado says:

    Hehe, I’m just like you at the beginning of the article. I’m still learning how to multiply fractions in school, but I’ve been programming for years on my computer. It’s funny how little math knowledge is required to start programming.

  27. Mthecheddar knight says:

    Shamus, I’m 12 and I want to learn C++. Any tips for starting programmers? Because I am nearly clueless right now.

    1. Kayle says:

      Can you program in any other language?

      If not, I suggest learning to program, and using some other language. C and C++ have a lot of traps and pitfalls for the novice programmer. Shamus recently mentioned an easy environment for learning programming: Scratch.

      Once you know how to program, there’s lots of material for learning C and C++. The hardcore way is to read the language specification, which is how I learned C and C++ (The C Programming Language by Kernighan and Ritchie and The C++ Programming Language by Bjarne Stroustrup.)

    2. Potado says:

      I recommend Python as a practical beginner language.

  28. Mersadeon says:

    I know what you mean with some people not “getting” programming – I am one of those. I love the IDEA of programming, just as I love the IDEA of maths, but I am just crap at it and often don’t know what I am supposed to do. I envy people who possess these skills.

    Oh, and you explained that the woman who made the photo forced you to make that smile – here in Germany, you are not allowed to smile on your passport/driving license and stuff. Don’t know if other countries have that too (probably a few), but it’s just annoying me. I look terrible when I have to look neutral. I just look… empty. Grrr.

  29. Leah says:

    I love you.I love school.

  30. Mr. Wolf says:

    COBOL? Maybe you should’ve stuck with it, nowadays you can charge five-figure consultancy fees for a weekend maintaining legacy code.

  31. Gordon says:

    In my later years at university I used to tutor the first year computer science classes. I saw the same divide you describe there. It was kinda heart breaking, I’d spend quite a bit of time with them, I’d get to know them and see how hard they were trying but I never found a way to get them over that comprehension gap. If they didn’t get it by the first lab test they probably wouldn’t ever get it.

    The best bit was a bunch of them would get it mid way through the lab test. For lab tests I was just supervising, monitoring for cheating. So I’m watching the room and every so often a head would pop up and there’d be an aha glow in their eyes followed by frantic typing as they realized they now knew what was needed but only had half the test time left in which to get it done.

    I saw this paper once that had a pre course test they claimed needed no prior programming / computer experience and was a strong predictor of university computer science success. It was a series of multi choice questions where each had a couple of equations in an odd notation. The marking was complex because in isolation all the answers were “valid” depending on how you interpreted the question. What the marking was looking for is did the student interpret the notation in a consistent way across the questions. Basically in the absence of outside rules did they impose a rule set.

Thanks for joining the discussion. Be nice, don't post angry, and enjoy yourself. This is supposed to be fun. Your email address will not be published. Required fields are marked*

You can enclose spoilers in <strike> tags like so:
<strike>Darth Vader is Luke's father!</strike>

You can make things italics like this:
Can you imagine having Darth Vader as your <i>father</i>?

You can make things bold like this:
I'm <b>very</b> glad Darth Vader isn't my father.

You can make links like this:
I'm reading about <a href="http://en.wikipedia.org/wiki/Darth_Vader">Darth Vader</a> on Wikipedia!

You can quote someone like this:
Darth Vader said <blockquote>Luke, I am your father.</blockquote>

Leave a Reply to Alan De Smet Cancel reply

Your email address will not be published.