12 Bonehead Misconceptions of Computer Science Professors

by Kavan Wolfe (published on Oct 19)

The poster-child for what’s wrong with postsecondary education is the computer science program. Despite the enormous need for competent programmers, database administrators, systems administrators, IT specialists and a host of other technical professionals, computer science programs seem to explicitly ignore the professional skills of which western society has growing deficiency and proceed with materials and teaching styles that are outdated, ineffective, useless and just plain wrong. This is due to the absurd misconceptions held by computer science faculty members across many universities.

I have personally met computer science professors who believe each of the following things. I make no claims as to how widespread these beliefs are; you can judge that for yourself.

1. Java is a good first teaching language

I don’t know how many computer science programs start teaching programming using Java, but there are more than a few, and that’s too many. When you’re going over variables, loops and conditionals, the object-oriented overhead of a language like java is unnecessary and confusing. Inquisitive students can’t just memorize things (i.e. public static void main (String args[])) without demanding to know what it means and why it’s there.

2. Machine language is “basic”

Comp Sci people seem to be terribly confused about what ‘basic’ means. When one learns to drive a car, starting the car, making a right turn, a left turn, parking, etc. is basic. Building a parallel gas-electric hybrid engine is not basic. Driving a car is more basic than building one because the latter requires significantly more expert knowledge than the former. In the same way, using a simple scripting language requires less depth of understanding that writing in machine language; therefore, computer science education should start with higher level languages and proceed to lower level ones, not vice versa.

3. You should write code on paper before you write it on a computer

Writing code by hand is stupid. It is entirely inconsistent with the interactive and iterative design process that comes naturally to hackers and painters alike. Professional software developers make extensive use of API documentation, reference guides, forum discussions, etc. to make troubleshoot problems and make their code more efficient and effective. Writing code by hand tests your ability to write trivially simple software without making errors. Real programmers must be capable of making complex software and detecting their errors with a variety of automated tools. Teaching or testing coding using pencil and paper is inconsistent with both the natural mode of human action and the practical realities of software development.

4. Lectures are an effective method of teaching programming

Programming is like algebra. You can’t learn how to write code by watching someone write code on a blackboard or listening to elaborate explanations from professors. You can’t learn math from watching someone do math. You learn to do things by doing them.

5. Algorithm design is learned by reading existing algorithms

Designing algorithms is about finding innovative solutions to difficult problems. Algorithm design courses are about studying existing solutions to rather simple problems. Learning how a particular problem can be solves provides approximately zero insight into how to solve problems you’ve never encountered before.

6. You can just ‘pick up’ prolog in a week for a course

There’s this crazy belief among Comp Sci. faculty that all languages are basically the same, so after learning the principles behind languages you can use whatever. This is bullshit. This is like claiming that since someone studied Spannish grammar in grade school, they can speak Spanish fluently, in any of Spanish, Mexican or Columbian accents. The leap between structured and object-oriented programming is huge, and it pales in comparison to the leap between object-oriented languages and declarative languages.

7. Exams measure understanding of programming

Teams of professional programmers spends months and years building intricate software systems in response to poorly-understood, ill-defined and changing problems. To accomplish this, they employ API documentation, online tutorials and forum discussions, team problem-solving sessions, reference books and an infinite number of phone-a-friend lifelines. Exams test your ability to write simple code to solve a trivial, well-defined static problems, without consulting and references. One is about resourcefulness, the other about memory. Exams test the wrong thing.

8. GUI’s are not an important aspect of learning to code

At the university where I did my undergrad, it was easy to finish a B.Sc. in computer science without ever building a graphical interface. While I agree that many software projects do not have graphical components (e.g., developer APIs), to marginalize GUIs as some kind of specialty endeavor is short-bus crazy!

9. Programming Requires Calculus

I have been told that development involving sophisticated work with graphics and animation involves calculus. Outside of this particular subfield, however, I haven’t seen much calculus in software development. Certainly I’ve seen a lot more GUI development than graphics.

10. Linux will rapidly overtake Windows among consumers

Comp. Sci. profs have been saying this for years. Hasn’t happened. And it’s not going to happen until Ubuntu and company take the dicking around out of computing the way Apple has.

11. LaTeX will overtake WYSIWYG text editors because LaTeX gives you more control

Yes, believe it or not, a computer science prof said this during one of my classes in undergrad. It goes directly to a deeper misunderstanding among Comp. Sci. academics that power and control are the primary factors driving adoption. They’re not. Simplicity and ease of use are far more important.

12. You can buy gates at RadioShack

The same idiot who thought LaTeX was the future also told his class to go buy gates (the things transistors are made of) at RadioShack and play with them to see how they work. Again, this evidences how completely out of touch some of these people are. Gates are microscopic. You can’t go buy them at an electronics store.

Conclusion

I have long argued that society needs a professional certification for software developers and that universities need undergraduate programs dedicated to training people for these certifications. It’s worked for accounting, engineering and medicine. There’s no reason it can’t work for software development. One of the primary barriers to this sort of progress is the raging incompetence of academics in computer science, computer engineering, management information systems and related disciplines.

Have one or a few to add? Comment away.

Related Posts
Why on Earth do Business Schools Teach Microsoft Access?
Abolish Universities?
Nine Reasons why Bad Grades Don’t Mean Squat

  • Share/Save/Bookmark
Comments Published in PREV NEXT
16

16 Comments

  1. Brian S. says:

    I haven’t read this blog in awhile but just remembered it. Anyways I am going to have to agree with almost point you have made here but mainly: 1,3, and 7. I am a comp sci major currently and am also a freshman. I started programming in high school with Java and am now continuing to use it in the first course. Its frustrating to not know how things work such as the main method and exceptions which we suppose to cover later. Also i cannot write code for paper on shit or on exams. I can do the very long homework assignments with ease but like you said testing on paper is a bunch of BS. Good post.

  2. Kavan Wolfe says:

    @Brian, I’ve got bad news for you: it only gets worse.

  3. Zander says:

    I disagree with the example you get from number 4. Mathematics require lectures to give you all the information about the techniques available to solve problems. However, their are books which can do the same. Unfortunately it is all about interpretation and explanation of the material which helps students the most. In short, I watch the instructor do math, take notes about the method and try on my own. Hence we learn from failure, at least I do. I would expect the same would work in computer science.

  4. Kavan Wolfe says:

    @Zander, I agree that mathematics involves a certain conceptual toolbox. I disagree, however, that lecturing is the most efficient method of adding to a students toolbox. I also disagree that interpretation and explanation are key. In addition, many students don’t get much out of elaborate explanations of tacit knowledge. Programming, like math, is internalized through repetition.

  5. jason says:

    is anyone going to write another article for this website? taking the month off is bullshit

  6. Rajishimo says:

    Sooo… based on your analysis, I really think that I might just skip college altogether. I’ve already aced AP Computer Science AB. And calculus, physics, etc.
    I’ve taught myself Java, C, C++, C#, Python, Front End programming/Web Design, back end programming/Server setup and maintenance, and a little debugging and assembly.

    [not-important] One of my friends is a GOD in memory analysis, debugging, low level/FPU assembly, reverse-engineering, and network systems hacking. Not that script kiddy shit, real stuff: packet interception, code injection, bot clients, etc. While his business practices are questionable (hacking WoW accounts, selling gold, gear, etc), I do commend him for doing everything on his own, and making enough to BUY a car if he really wanted. He’s a bit of an elitist asshole though, he comments how everyone is beneath him and how school is a waste of time (truth). He doesn’t study for anything, though, he somehow aces every test he has come against. [/not-important]

    [rant] Anyways, thanks to the fact that most HR departments for most businesses have the intelligence of a centipede and think that you’re only hireable if you have a fucking degree in something, I might have to get that stupid piece of paper anyway.
    Try to get an interview, or bid for a contract when you’re just a senior in highschool and people just laugh saying “ha, ha, you’re just a dumb kid, you can’t do anything.” Then they show their incompetence while trying to figure out why their computer isn’t turned on when it’s clearly THE FUCKING MONITOR THAT’S JUST OFF.(true story) [/rant]

    Ahem, I do sincerely apologize for that outburst good sir. It’s just that I would rather not be prejudiced against because of my age.
    Especially when it’s clear that I can program better then some of the half-wits that graduate with a BS in CS and couldn’t program their way out of a paper bag. Now, I realize not all graduates are like that, but it’s a bit disconcerting when a company would rather keep those employees than let me at least intern or hire me for minimum wage. (also a true story)
    [PS] As you can clearly see, proper formatting is a must for me. [/PS]

  7. Jason says:

    For the most part, this a good list (coming from the mouth of a current CS major). I think that part of the problem is that the worlds of academic and real-world computer science are very different domains that happen to use some of the same tools.

    I feel obliged, however, to point out one error here. Transistors are not made out of gates, gates are built from transistors. Actually, any construct that can produce the proper boolean result from a give set of inputs is a logic gate. Heck, if you were so inclined, you could probably construct gates (and in an extreme case, and entire computer) from toys http://www.youtube.com/watch?v=H-53TVR9EOw . You can, in fact, buy DIP packaged logic gates at RadioShak, in both the TTL and CMOS variety. The generally come with 4 to 6 gates per chip.

    As I said at the beginning, I wholeheartedly agree with most of this article. I just thought you and your readers might appreciate some clarification on one point.

  8. Required says:

    This is all true, except for the last part. You CAN buy gates from radio shack: There’s a little thingie called Integrated Circuit, or IC. And no, that’s not the thing transistors are made of. Gates are actually made by associating transistors. Plus, messing around with logic gates WILL help your logic understanding in many levels. Of course, for that to work right, you’d need at least a good book on the subject of digital electronics. The author was going so well, too bad he decided to rant about things he doesn’t know crap about.

  9. Matt says:

    I must be one of the lucky ones, but none of my professors have made claims 6, 10 or 11.

    6. I’ve had to quickly learn new languages that employ completely different paradigms (i.e. prolog, ML) for courses, but none of my teachers claimed it would be easy. Instead they told us, “prepare to tear your hair out because this stuff is hard to wrap your mind around… but we still expect you to learn it quickly because we have a lot of material to cover”.

    10. I’m pretty sure all of my teachers are sane enough to realize that windows/mac operating systems aren’t going away any time soon.
    Some of my professors have made a weaker claim though: “The masses will always continue to use whatever is already installed on their box. Those of us whose job involves installing/developing/configuring will adopt *nix”.

    11. None of my professors are expecting TeX to become mainstream, but they want us to learn it because it’s a useful tool if you ever plan to publish research papers.

  10. bob says:

    I agree with the majority of your points, but if you want to be taken seriously, or even quoted, check your spelling and grammar there champ.

    Also Apple did not take “the dicking around out of computing”. They basically limited the way an end user can fuck it up.

  11. bjones says:

    BJTs are made from doped semiconductor junctions. MOSFETS are made from the same stuff but include metal-oxide layers (and a different geometry) that help create channels for electronic/hole flow by biasing the gate (not a logic gate by the way).

  12. bigT says:

    You actually can purchase logic gates they usually come with several gates on one chip

    http://www.amazon.com/767368-3-Input-NAND-Function-Logic-Gate/dp/B001ISDP50

  13. John Gates says:

    That’s why I dropped out of CS and switched to Electrical Engineering :)

    PS: I found writing code by hand particularly stupid.

  14. George says:

    I might have to disagree with you on 5.

    Studying algorithms, how they are designed, and how the problem is solved (or unsolved) teaches you the right tools and the proper mentality in figuring out a new and complex problem. Algorithms class emphasizes on efficiency. It’s not about just solving the most complex computational problems of today, analysis of algorithms is about how to solve the most complex computational problems faster.

    Also, exams might miss the point of improving your hacking skills, but they are a good tool used by Universities to weed out talented but hell lazy and frivolous hacker-wannabe’s. Just take the damn exam, ace it, and move on.

  15. DDog says:

    1. I started college in a computer science major with only HTML under my belt, and we started with C, then C++, then Java. Since then the policy has changed to start with Java. One of my professors would say that she was really teaching design principles, but had to teach us a lot of C in the process. Progressing from C to Java made sense while I was doing it. C seemed pretty basic for learning how to play with code blocks; C++ was similar to C but had new and interesting problems and tools; Java was similar to C++ but had new and interesting problems and tools. By now I’m used to Java, but I don’t think it would have made as much sense to me as a freshman, but I can’t say for sure. Things that are easy to do in Java are frustratingly complicated in C, and vice versa.

    2. I learned assembly language after Java, and it killed me. Gave me a new appreciation for engineers I guess, but mostly frustrated the hell out of me since it took me twelve lines of code to do something I could do with only one in C. I would much rather have started with assembly and worked my way out. However, I may be in the minority on that one. It just seems a more logical progression to the way my brain works.

Leave a comment