Log in

No account? Create an account

Previous Entry | Next Entry

It's all about the API

I found an article on Joel on Software that seems to explain why highly specific questions about programming libraries (and other software topics) are now asked in sweng interviews. In a nutshell, the more experienced people will have worked with the APIs quite extensively, and know not only what they do but what their limitations are.

This reminds me of something I was working on back at AV that required a call to one of the Perl library functions. In testing, it worked most of the time, but there were some odd corner cases that didn't work quite right. I wound up having to catch exceptions for this particular call. The Perl documentation didn't say anything about this bug or the need to catch exceptions; I had to look at the sources for the library to figure this out.

So I guess I can see why an interviewer might prefer someone who'd worked extensively with a language's library routines. However, I still question the specificity of some of the interview questions. Maybe it's just me – I don't commit that level of detail to long-term memory (especially since I'm unlikely to remember on an interview). I tend to think more of the (general) problem I was trying to solve. If I remember something like that on an interview, it's a coincidence. I think there are other ways for a candidate to be tested on their knowledge and use of APIs. For example, the interviewer could make a design problem out of it: give an example of a library routine that has a bug and ask candidates how they'd resolve it. One can even make variations on the question, such as when sources are/aren't available; when you do/don't have permission to make changes to libraries; when there is/isn't information on the web about it.

I remember once on a screen, being asked which Perl CPAN modules I'd used recently. Fortunately, having read on an interviewing site that such a question might be asked, I thought of a couple I'd used for the log processing. But there are zillions of CPAN modules (and new ones are added all the time); there's no way I could possibly keep track of all of them, let alone memorize what they do. (I didn't get the job.)

As an aside, in the first Google phone screen I ever had back in 2001, I was asked what command is used to get the process id of a TCP connection on a Unix machine. Now I had done this, back in the 1980s, as part of debugging some kernel code, but I didn't know of a (user-level) command that did this offhand, because back then, people used awk scripts with kernel debuggers to print out data structures associated with protocol control blocks, and there was a pointer in one of them to the data structures where process ids were kept. So I said that, but the screener seemed disappointed. After the screen, I poked around the man pages a bit, which brought back a vague memory that this could be done with sockstat. I remember thinking that this was a very odd question, especially from Google, which (at the time) was not very big, and most of the people I knew of were more research-oriented than development-oriented (some of these people came from Digital's research labs, and had even worked on AltaVista). So I thought the questions would be more concept-oriented, and that understanding how the kernel data structures were organized would be more valuable to them. I knew very little about the "new order" of candidate assessment; was I in for a surprise.


( 3 comments — Leave a comment )
Nov. 19th, 2007 02:07 pm (UTC)
Every time I read a hiring-related article from Joel on Software, I get depressed because it convinces me that if for some reason I lost or left my current job I wouldn't be able to get another one in software.

On the other hand, I got a kick out of "People who only know one world get really smarmy, and every time they hear about the complications in the other world, it makes them think that their world doesn't have complications. But they do. You've just moved beyond them because you are proficient in them," and the points made related to that. I should make this point next time some Mac evangelist blathers on at me about how superior Macs are to PCs.
Nov. 19th, 2007 10:15 pm (UTC)
Assuming you want to continue working in software, you might want to start saving/investing heavily, so you have some money to start a company (or something to live off of while starting a company).

Do your friends who are (or want to be) software engineers feel the same way? When I was a student, most people who didn't go to grad school or to ROTC didn't seem worried about needing to start a company if they were unable to find a job. Back then, startups, consultancies, etc. just weren't on many people's radar. Perhaps something they might be interested in somewhere down the line, but not right away. I knew of a few people who started companies within a few years of graduation, such as johnromkey.
Nov. 20th, 2007 03:37 am (UTC)
I'm not really worried about my job disappearing (if I seriously were, the hiring articles and the like would bother me a lot more than the vague uneasiness I feel now when I read them. I work for a small but stable company that's been around for a quarter-century, and I work in the one sector of software that's probably immune from the threat of outsourcing - defense contracting.

My friends largely don't seem worried, but I tend to assume that all my friends would be in better positions than I would. Four years of being an academically marginal student at MIT and then going to work in a field outside my major has given me an impressive inferiority complex. My software engineer friends have also mostly been okay jobwise...I don't know if it's the location or what. There's one who has been out of work for most of three years, punctuated only by ~6 months in a startup that failed, but everyone else seems more or less all right. The local video game development industry seems capable of absorbing lots of software engineers.

I didn't have much trouble getting my current job - in fact, I had an easier time than some of my friends who were actual course 6 majors. But entry-level jobs are different. Employers look for different things. I read Joel's articles on hiring and wonder, if this is what people want for non-entry-level folks, how could I possibly get another job? I don't have the "passion" for writing code that he talks about - I have a passion for problem-solving in general and greatly respect software as a useful tool for that. I don't write Lisp compilers for fun in my free time (instead, I go study radar systems or analog design or neuroengineering or usability, or whatever my latest interests are). I'm about as generalist as they come. I don't learn the most trendy, avant-garde new languages for fun. I don't memorize the minutiae of languages. I think I've become a solid coder, but I'm not a brilliant one - I have a broad skillset, and I'm lucky to be at a company that values that, but I get the impression that a lot of software companies just want someone to crank out code and unit tests.

This got excessively long, my apologies. Like I said, I'm not generally that worried, because there's no reason to think that my current job would disappear. But I'd be worried if it did.
( 3 comments — Leave a comment )

Latest Month

July 2018

Page Summary

Powered by LiveJournal.com
Designed by Tiffany Chow