Daniel Lemire's blog

, 11 min read

Programming and college CS education

13 thoughts on “Programming and college CS education”

  1. Parand Tony Darugar says:

    Universities shouldn’t teach any programming language; they should teach programming, with the language being just a means to that end. College is not the place to learn the special tricks and ins-and-outs of Java. It’s the place to learn algorithms. It’s a computer science degree after all.

    I run into far too many people in the workplace who can tell you all about the most minute details of J2EE, yet don’t really know what object oriented programming is all about, how to deal with probabilities, and how to think about hard computational problems.

  2. Ben says:

    Many CS students learn basic algorithms, and some languages (C/Java/LISP…). But if they don’t know API, they can’t even make a simple Window software.

  3. No, college is not the place to learn the special tricks of Java. Beside, your instructors or professors don’t know them all that well. The overwhelming majority of professors don’t know the ins and the outs of J2EE.

    Teaching “programming” is fine, what does it mean at the college level? To me, it means being able to do some pretty hard stuff like implementing those nifty algorithms you see in class and applying them to real problems and real data. What about the API? Well, this is part of the skills you need to have: you should know enough about Computer Science to be able to read and understand APIs quickly.

    Alas, we push things up and say that programming altogether is not important. Afterall, plenty of smart Indian programmers work for cheap. No, instead, we’ll focus on the business process and let the Indian guy do the coding. Well, that is fine but, to me, it is like saying that English is not important in business or in the humanities. If you have the ideas, other people will write them down for you. Sure they will, but writting is part of the thought process. Coding is part of the software design process. If you can’t code, you can’t design software.

    But, just to make sure, this doesn’t mean you should know about the APIs, you should merely be able to learn about them on your own, quickly. You shouldn’t know what the generics are in Java… who gives a damn, but you should be able to figure it out on your own quickly.

  4. Hello,

    The best place to know the programming languages tricks is on the Internet, no doubts, it’s his best utility.

    However, Daniel is right when he say that CS degree is not the place to teach programming trick (language oriented). However, the CS degree should learn how to find the things you know you need but do not know how to implement it. It is how some to see how students are unable to search things; they do not know how-to or they just do not want to.

    Put semester projects in your courses that involve programming. Do not specify the language: just tell them to do in C++, Java or C#. A cryptography course? Let them program a whole (but simplified) bank system thank will take them 30 or 40 hours in the semester to do. It will teach them how to implement a RSA algorithm, other hash functions and symmetric encryption algorithms. Then they will learn on cryptography while increasing their programming skills.

    They, we, anybody do not need to know an API in deep. We just need to know how to search for what we want to do. How someone could know the whole .NET framework without referring to the doc? Impossible, even the .NET developers do not know it.

    Salutations,

    Fred

  5. d says:

    “So, if CS graduates are just suppose to attend meetings and sign papers, […]”

    Oh God, why take the fun out of CS? 😉

    “Universities shouldn’t teach any programming language; they should teach programming, with the language being just a means to that end.”

    Can we agree that professors should know the language well enough then? The most irritating thing is to see a professors trying to guess how do do such and such in a language during class time.

    Also, I think al lot of universities do only teach programming using one language. The part they need to emphasize/encourage is the “learning more than one language” part. I’m not saying that they should start teaching perl, python, etc. I’m saying that they need to stop acting that C++ and/or Java are the only languages out there.

  6. d: Professors don’t know the languages well, and they never will because that’s not part of their job description to be good programmers. At no point is the skill “good programmer” rewarded in a professor’s life.

    As for why they make it seem like there is only one language… well, if you teach Java, and the students, after 3 years of taking courses with Java in them, still can’t program an elementary algorithm in Java, you can bet that the instructor/professor won’t go out of his way to teach other languages.

    All in all though, I agree, the programming training students get is poor in general. Not necessarily the professors’ fault, but it is poor… and I’m saying that it does matter. It is not sufficient to know about UML, database schemas and business processes. You need to know how to program, just like a manager should be able to write in English.

  7. Ben says:

    Ed: So, what’s the difference between Computer Science and Computer Engineering again?

  8. Ed is probably right.

  9. Ed Bilodeau says:

    Anyone wanting to undertake undergraduate studies with an aim to becoming a professional software developer should be taking a degree in software engineering, not computer science. Getting someone with a CS degree to write production code is like asking a physicist to build a bridge.

    Similarly, trying to cram professional software development knowledge into a CS degree dilutes the CS degree, preventing it from accomplishing its true goals (which have nothing to do with developing production software).

    My guess is that it will take another 50+ years for universities to figure this out. In the meantime, organization will continue to foot the bill (in time, money, and low productivity) for the training required to teach newly-minted CS hires how to develop production software.

  10. Ed Bilodeau says:

    Its the difference between science and engineering.

  11. Seb says:

    Software development is where most of the jobs are, and most students are going to university to land a job, so CS departments want to offer it to keep the students coming, even if it means compromising on the science part.