Friday, July 6, 2012

Important Programming Topics That Don't Often Come Up in Job Interviews

Been thinking on and off about job interviews lately, and realized there are several important topics that don't seem to come up very often. Thought I'd make a list.

  • Threading
  • Recursion
  • Memory management
  • HTTP lifecycle (requests, sockets, threading, etc.)
  • Framework architecture
  • Time systems (UTC system, time zones, etc.)

Of those, I occasionally get questions on threading, recursion, and memory management. When memory management comes up, it's usually in reference to algorithm performance and memory optimization (e.g. hash vs. red-black, arrays vs. linked lists, etc.). Which is important, but there's a whole lot more to memory management, like garbage collection, memory leaks, etc.

I've been a Java web programmer for 12 years but NEVER been asked to describe how HTTP works. I've never been asked about sockets, request threading models, or even about application vs. session scope. I've also never been asked to describe how Hibernate, Struts, Spring, or any other framework actually works. I have been asked how JSP's work. But I've never been asked about Java servlets, filters, or authentication.

And while every programmer eventually has to deal with time systems and time zones, no one ever asks about them. I'm constantly amazed at the number of devs who think it's a good idea to simply compare timestamps without consideration of time zone, DST, leap year, leap second, etc.

I can certainly see where a junior or even a mid-level developer might not have much depth in any of these areas. For the kind of work they're doing they don't need it. But I think it would still be good to bring these topics up in every interview, if only to learn whether a younger dev might have some hidden talent.

I would expect senior developers to have mastered at least two of these topics, and to be familiar with all of them. No individual will know everything, but I'd hate to hire a senior dev that couldn't at least talk intelligently about each topic. A senior dev doesn't just design, code, and test, but also mentors younger devs. They need more than just "tutorial" knowledge, they need the first principles as well. Or at least know where to find them ;)