We called him Tortoise ’cause he taught us!


We’re interviewing for junior software developers right now. I’ve just completed about 20 phone interviews and the lack of useful experience is appalling.

Let’s not rehash the arguments about what is “computer science” and how to hire and about how most people are no good and all that.

I’m not even talking about how smart they are. I’m just talking about the coursework.

It’s time for “computer science” to become “science” and not math. Meaning: Learning to use the tools and techniques of the trade, not just formulas and mathematical analysis.

For example, of the 100 resumes and 20 phone interviews I’ve done in the past month:

  • 3 have ever used a version control system; only 1 of those could describe what version control is.
  • 5 even claimed to know anything about SQL; none of them could tell me what an “outer join” was.
  • 6 have ever done a unit test; zero had ever done a unit test in school.

I can’t understand why, for example, “SQL” isn’t a required course. I’m not asking for much — OK if you want to emphasize the mathematical properties of queries, OK if you want to teach data normalization theory. I’d prefer practical things like “never delete data” and “auto-increment versus GUID’s” and “how to diagnose slow queries” and “how database vendors differ,” but I’ll take anything at all where they could at least form basic queries and know roughly how they work.

Even “unprofessional” open-source projects all use version control. The vast, vast majority of software companies do too. Version control is almost as important as the compiler. I’d be happy if there was a course where you learned things like branching theory, but I’d be content if they just used it at all, at any time. Schools love group projects, so how is it that the group project doesn’t involve version control?

And no unit testing? Ever? That’s just lazy. Why is that not required for all coursework? By the way, if you required it, almost all assignments would be correct when they were turned in. Isn’t it better to teach people how to make sure they always get an ‘A’? How is unit testing now on par with how to debug?

Which is another thing. I never had any instruction on how to use a debugger. To me that should be an entire class — how to find out what’s wrong with code, especially when you didn’t write it. And unit testing should be a part of that.

I can think of two reasons why these obvious things aren’t taught:

  1. Professors don’t know these things either because they don’t keep up with new trends and practical processes. Of course I’m making a wide, unfair judgment, but witness for example the slow acceptance of Java.
  2. Departments don’t want to “sully” their pure, theoretical, artis liberalis culture with practicalities. Analogy: The math department is mostly theoretical. If you want applied math, be a physicist or an engineer. My problem with this is there is no alternative. OK, so have a theoretical computer science degree, but then where’s the “engineering” alternative? Some colleges have this concept, but for example at UT the alternative just meant fewer hard CS classes, not more practical classes.

Oh well. From what I can tell it’s the same in a lot of disciplines. Most of the MBA’s I know can’t run Quickbooks or read a P&L, and the ones that can tell me they learned it on the job.

OK, I like on-the-job learning, it’s the best kind, but throw me a bone. At least broach the concepts somewhere in the 4-5 year curriculum.

  • http://www.blogger.com/profile/07097782604607453473 Tom Cahalan

    Hi, I feel really bad about this, because Sandra was nice enough to reply to me immediately and politely instead of blowing me off. I don’t like bad-mouthing people to their bosses or whatever, and that isn’t what I am trying to do here. I am just trying to help.

    The reason that you don’t find what you are looking for is because you turn away applicants that meet ALL of your requirements. I’m sure that plenty of people who have used SQL and source control are applying to your jobs. Here is how I stack up against the requirements:

    * Inhuman ability to bend the compiler to your will

    I am *successfully* writing a compiler for a programming language of my own design. Note the use of the word successfully. Making a programming language is pretty tricky.

    * 4 yr degree (BS in CS, CIS, MIS, Mathematics, or Engineering)

    BS in CS, from a good school. I read blogs daily to stay fresh.

    * Excellent command of written and spoken English

    yep. At my job I spend a lot of time explaining technical things to non-technical people. Occasionally I give briefs to hundreds of people. I read a lot, which is the key to being able to write well.

    * Customer-focused attitude

    My job was completely customer-focused. Everything was done to exacting, unspecified specifications. I can now read minds.

    * Self-motivated

    Despite being a junior member of the team my continual focus on improving our processes made a huge difference. I took on the role of business analyst and improved productivity by 400% (I have paper backing that number). Even though I didn’t have the right title, I took charge of a lot of stuff; no one put me in charge (well they did, after the fact).

    * No experience required

    I meet this one too! Though only if you overlook my hobby experience (I am making a programming language and a computer game), and my non-software experience. I realize that I am an entry-level candidate and expect to be offered that kind of salary, at least initially.

    * Proficient in gathering customer requirements and translating into new products or product features

    Yeah, I mentioned that above

    * Relational Database experience (e.g. MySQL, Microsoft SQL Server, Oracle)

    Yep, I have this. While I won’t claim to be a master of SQL, I do know the basics. I have used outer joins at work (not complete, just left). It is probably some big no-no but I used them to mimic inheritance. The left side was to represent the base class data; the right was to represent the additional fields. I am open to re-education as need be. We made new queries every day.

    * Version control experience (e.g. Subversion, Perforce, ClearCase)

    Ok I don’t exactly have this. However we had a file management nightmare and I used source control techniques to solve it. Coworkers were making copies and editing files willy-nilly. We all worked on the same files and we all rotated among a group of the same computers. It was not uncommon to have 20+ copies of the same file, none of which was the most updated. We had no backups.

    I instituted a plan where we had two external shared drives, each of which was the primary drive for some of our files, and the backup for the others. We used Microsoft Briefcase to do the backups. By keeping the backups and primary files divided among two drives it removed the natural temptation to unplug the backup drive and forget about it. I trained, and retrained my coworkers to only modify the primary files. I was able to do this by couching it in their terms and using metaphors that they understood.

    I have attempted to use source control on my own too. I installed Tortoise SVN and set up the repository. Then I realized that I would need a merge/dif tool and that I didn’t have any way to integrate it with my IDE so that it was automated. I was extremely busy with other things so I ended up not using it. I would like to though, I just need a little training.

    so yeah, that’s why you’re having trouble. I meet your listed requirements 100% and yet I didn’t get even a phone interview. I’m local too, so an in-person interview will cost you nothing.

    So I’m still interested if you want to drop me a line, if not just think it over and hopefully you’ll hire someone else who will then stop competing with me for the other jobs that I am applying for.

  • http://www.blogger.com/profile/18019929086510000182 Jason

    The point of this post was that they don’t teach certain things in school.

    For example, you mentioned that you learned about outer joins at work. Why is it that you had to go outside the classroom to get basic training like how to use a database?

    But the point of your post was that you’re a good candidate! So we’ll set up a phone interview, no problem.

    Also keep in mind that http://www.joelonsoftware.com/articles/fog0000000073.html“ REL=”nofollow”>it is OK that we sometimes turn away good applicants.

    Thanks!

  • http://www.blogger.com/profile/10234161210497326492 Dork2099

    Well, good to see I wasn’t the only star cadet you phone-examined. The swelling still hasn’t gone down, and my ego is still fused into the carpet. That’s gonna cost me my security deposit.

    You know, when I MOVE TO AUSTIN. *wink*

    I actually agree with your points about modern CS education. All through my undergrad people told me “Man, my (brother / sister / cousin / friend) got a job programming, and they don’t use anything they learned in school.” Well, why is that?

    By way of conclusion, I’m glad you offered me the chance to switch gears and interview for the other position. Communication is really further up my alley anyhow.

  • http://www.blogger.com/profile/10234161210497326492 Dork2099

    BTW, this is Matthew Skinner-Thebo. Dork2099 is my unfortunate handle from my early web-hopping days. Oy.