Home About The Codist RSS Feed

Interview Technique: A Topdown Approach
Sep 24, 2007 18:26 perm link Readers: 1944

Having spent too much of life on both ends of interviewing people (mostly as the interviewee lately) I've seen and experienced a world of different styles. The intent of a first interview is usually to separate the ditch-digger from the real coder.

Most of the interview techniques suck.

Interviewers often begin with asking the interviewee about programming basics, to describe object-oriented programming concepts, to describe simple language constructs, or the like. The assumption is that the ditch digger doesn't know anything like that. Of course, an experienced programmer might be good at coding but not be able to answer theoretical questions, or be good at complex concepts but spend little time with language or framework features that the IDE takes care of. Basic knowledge is also no guarantee they know how to use it. I once new a guy who aced a Java Certification test but was utterly incapable of writing even the simplest actual program.

So, OK, you say, it's just a phone screen. Now we will make them take tests, talk with some managers, perhaps solve some Pirate Puzzles or even survive a battery of intense interviews from bored (and sometimes cruel) developers. Then we will sort out the tired, the poor and the huddled masses, oh wait, wrong concept. We will then hire the brightest, smartest person in the world!

Yet after all this massive effort on the part of many people in the organization, you still wind up with programmers who are average or worse in delivering real applications.

Clearly finding the right people is more of a crapshoot than most companies would admit to. The one thing you really want to know is "will the candidate be able to write functional code, deliver it in a reasonable time, with good quality and maintainability". Sadly that's the hardest thing to figure out without actually hiring them and seeing how well they do. I do see more people these days doing contract-to-hire.

In my experience on the hiring side, the quickest type of screen to see how well they might function in real development is to pick a random entry in their resume that appeared to be significant, and ask them to describe the requirements, the technologies, the choices, the history and what their precise role was. The assumption is that someone who actually did a real project could describe it in great detail. For me, I can still remember all the details of virtually everything on my resume, since most of them took months (or in couple cases years) out of my life. It's is very hard to riff some random details and fool a competent engineer or even manager. I want to know how intimate do you know something you say you did for a fairly long period of time, even if it's a few years in the past. You may forget the syntax or some method calls, but not something that you spent months doing.

The process of programming is a lot of little details, many of which have to be mastered and reused in most projects, even as the technologies and environment changes. Dealing with managers, requirements, plans, code management systems, testing, QA, debugging, making choices in tools or frameworks all are things you do in most projects but the details change. I want to know how the candidate thinks about the work of programming, and how they have done more so than some intimate details about a language or tool or API. These things change from time to time, the ability to actually deliver does not.

I think very little of the bottom-up approach that many companies take. They focus on weeding out the ditch-diggers and then hope some deliverers survive. I would rather find the deliverers and let the others weed themselves out.

Of course this isn't a perfect solution either, nothing is short of having people work for you for a few months and see if they can deliver. I would rather know that a person can articulate what they have done on projects and understand the process of delivery (which of course means designing, coding, testing, debugging and understanding what to do) and work the interview from that perspective.

After all, no one ever asks a ditch digger to define dirt, they want to know if they can dig it.

My Tags:

  • Stephen: Oct 08, 2007 15:27

    I agree.

    The interview process is something like the Touring Test. If you want to know if someone on the other end of the teletypewriter is sentient, you have a conversation. To make this work, you must be sentient. That means that head hunters who don't know programming can't hope to be any good at screening. But it also means that if you want to hire someone who is good at something that you aren't, you are at a disadvantage. My fall back position in these cases is to be lucky. It works for me.

    The other tack is, What is your favorite interview question?

    Mine is this:

    What are your favorite tools?

    I wish i'd made it up.

    My favorite tactic. My head hunter reformats my CV (resume) and generally botches the spellings of numerous references. I gave it to them electronically, so it must be deliberate. Whoever is interviewing me then asks me about them. I often half to take a look, as it is so broken i don't even know what section it's from. But then i can explain what it was, and what context it was in. Often, it was from one of my more interesting jobs. This gets me hired, or at least an offer. I like this tactic because i personally do nothing to make it happen. And, during the interview, i just act naturally. And, it saves me from the interview where the interviewer has no favorite question. As i have no sales skills (or rather, i have negative sales skills) i take any help i can get.

    I'm also of the opinion that one takes a 50 point IQ hit by being in an interview. That might be for both sides, i'm not sure.

  • Phil: Dec 20, 2007 01:49

    Stephen said...

    " I often half to take a look"

    me thinks you complain to much !

  • Add Comment

Writing A Web Application Framework, One More Time, Again
Sep 18, 2007 10:52 perm link Readers: 1775

In the past year I've written two complete java web application frameworks from scratch; one like Wicket, and one (Blogfiche) a more traditional MVAC framework with an alternative syntax to HTML. So why am I building another one?

Am I nucking futs?

The answer is always the search for more programmer productivity, flexibility and reliability. Blogfiche (which runs this blog and other things) has proven itself to be flexible, reliable, and for what I use it for, scalable. Digg and Reddit traffic don't faze it, even though it runs on a shared (and rather overloaded) server. The alternate HTML syntax is fun to use, much less irritating than HTML if you write by hand:

    if(headlines:sizenot0)[
      div(class=articlebox heads)[
        loop(post|headlines)[
          p[a(href={post:url})[{post.title}] span[{post.created:datetime}]]
        ]
      ]
    ]

So why do another one? Mainly I want to be able to build an entire web application without any recompilation, yet still have good performance in production. I am using the solid foundation of my Fiche framework (built on the servlet spec) including its automatic caching of web content. On top of this I intend to support Javascript (Rhino) and Groovy (and anything else interesting) and see what I like better. Although I can use the alternative HTML syntax, I am building a view technology on top of regular XHTML to make it easier to use examples from the web.

Something like:

  <head>
    <title>{title}</title>
  </head>
  <body>
  {if(test)}
    <p>Test</p>
  {else}
    <p>Not Test</p>
  {end}
  </body>

For database support I will continue to use iBatis, if I can properly reload the sqlmaps when they change, or maybe try something new like couchDB, or even build something similar to ActiveRecord. There is a lot of possibilities here; the primary point is to be able to update code and database use without compilation.

I am not trying to replicate PHP or ROR or whatever flavor you might enjoy. Software is an infinitely malleable clay; you don't know what you can do unless you try something.

Again with the why? Why not, I enjoy it, I like productivity, challenges, and I have time while I wait in absolute contractor hell; at least my mind is working and I can avoid going absolutely bonkers waiting on people to make a #@!$#@decision.

My Tags:

  • florin: Sep 19, 2007 04:35

    Have a look at JPublish. Use the Scripting action support and you don't need to recompile :)

    As for the UI dev part, we are supporting: Velocity, Freemarker and StringTemplate :)

    http://code.google.com/p/jpublish/

    Let us know your impression,

    -florin

  • Mark Menard: Sep 19, 2007 06:29

    Hi,

    You said, "Mainly I want to be able to build an entire web application without any recompilation, yet still have good performance in production." That's what drove me to work on what I call Groovy Works, http://code.google.com/p/groovyworks/ and http://www.vitarara.org/cms/taxonomy/term/70.

    It's based on Struts 2, which is based on XWork. It integrates with Spring, and thus with everything that Spring supports. I can write my actions, service beans and DAO's in Groovy and just keep coding. My service beans and DAO's need to implement an interface, so my basic work flow is write the interface and an empty implementation of the interface. Then I wire my DAO, service bean and action together. At this point they do nothing, but they are wired. From that point on I can code and reload with no app server restart. Write my JSP/Velocity/Freemarker template, action, business logic and data access without the usual compile, deploy, restart cycle.

    Take a look,

    Mark

  • Mike Seth: Sep 19, 2007 13:08

    No, no and no!

    Frameworks are not born out of an abstract desire for productivity, flexibility or reliability. These are secondary outcomes caused by many factors, and the framework is not necessarily a substantial part of them: if your broken regular expression code crashes the PHP interpreter, or your JVM runs out of virtual memory, your framework of choice may as well silently die.

    Frameworks are written so that the programmer is comfortable expressing his or her vision in idioms that suit the problem domain space; that is, they provide an environment that fits what you're doing, and allows you to do so consistently. A framework is not, by a long shot, an extension of your code but a constraint on it. If you accept it, the framework pays you with consistency and bribes you with library services. If you reject it, benefits of the framework are nullified, and you might as well glue some 3rd party libraries with a bunch of spaghetti code and call it a day.

    Hint: RoR is not a framework.

  • Joe: Sep 19, 2007 14:34

    Perfectly sensible - I've yet to use a framework (in any area, including web), that doesn't contain at least a few pain-points. There's nothing duller than trawling through someone else's code trying to figure out why something that the framework should actually make a trivial task is harder to accomplish than if you weren't using a framework at all.

    There's no better way to understand why frameworks are the way they are than to build one yourself. After all, the big web frameworks started out as a single-person project, usually to address a specific type of application space, so there's plenty of room for different approaches for different application needs.

  • Add Comment

A Web Framework In Scala
Sep 10, 2007 18:59 perm link Readers: 994

lift Web Framework

Given how much I love writing frameworks (the one running this blog for example), it's cool to see someone is working on a framework using scala. It's still an early alpha, but it's interesting to see how one can leverage Scala's interesting OO-Functional hybrid language.

My Tags:

  • Eelco Hillenius: Sep 18, 2007 11:54

    Interesting about Lift - besides the fact that it uses Scala - is that it allows different styles of using it. That can be a good or bad thing; good because it gives you flexibility and there might be something in it for many different folks, bad because it might result in a mess when your team members use their own flavor (just look at the mess you can get when mixing different flavors of JSPs).

    Btw, I really like the name and the logo isn't bad either.

  • Add Comment

How Much Privacy Are You Willing To Give Up For A Job?
Sep 10, 2007 12:51 perm link Readers: 1680

I just turned down being interviewed for a contract position due to the client's demands for an invasive examination of my life which even exceeded what I had to do for a Secret security clearance.

Here's what they wanted me to fill out before a phone screen was even done:

  • The usual employment stuff
  • Detailed job history
  • Authorization for investigative consumer report (salaries, lifestyle, friends, etc)
  • Authorization for credit check
  • Authorization for drug testing
  • Authorization for fingerprint and criminal background check

Every form had my address/social security number/birth date on it and would likely be faxed to some subcontractor. There were no assurances of protecting my privacy on any form. Faxing these forms to the recruiter would open me to all sorts of identity theft since I have no way to measure the honesty of everyone in the chain (or even know who they might be).

I can understand an employer/contractee's need to verify that I am not a crook or likely to steal something after making a tentative agreement to hire me, and then where I have at least some idea of who is in charge of the information (like an HR department).

In the early 80's I qualified for a Secret Security Clearance from the DOD, and it actually had less requirements than this simple contract (which is not a defense company, just a financial services company like ones I have worked for in the past). In that defense job I was hired and then began the clearance process (although I had the clearance I never actually needed it). The FBI did all the work; whatever you might think of the government, at least they already had all the info I gave them.

So I've said no to this one, unless they decide to change their tune (sometimes people make demands they are willing to negotiate on), I will continue to work with other contract options that are less invasive.

I have nothing to hide that would concern anyone, but defending your privacy and personal information is all about avoiding giving others the opportunity to rip you off. You have to balance giving out enough to satisfy a reasonable request to the risk of losing your identity.

I'm not willing to risk all for a chance at a job.

My Tags:

  • Riccardo: Sep 11, 2007 07:51

    You're absolutely right!

    Those requests were simply put INSANE! No way I'm gonna give all this info to one I don't even know before (!) having even a phone screen!

    Regards,

    Riccardo

  • Jason: Sep 11, 2007 07:58

    Good for you for sticking to your guns.

    I had a similar experience recently with a large financial institution. The worst part was that it was only for a two-week contract engagement. It would have taken longer to get the results back than to complete the work! But they were unwilling to budge and I walked away the same as you did.

  • NoLiveTv: Sep 11, 2007 08:33

    Invasive? Insane? You can't know. It is the company's choice to ask for it and it is your choice to refuse to submit it. The reason why they have the policy is unkonwn to you, but may be very reasonable from thier perspective. For instance, the company I work for once hired a subcontractor who had 7 outstanding warrants for his arrest. When he was fired for blatantly violating software license in a way that would have exposed the company to nasty lawsuits, he social-engineered his way back into the office after hours and stole a bunch of company and personal property. My company successfully sued the subcontracting company for damages+. So I imagine the subcontractor now does background checks on whomever it hires.

    They are probably willing to lose a few potential employees to it. I would expect that if so many interviewees refused like you did, then they might change their policy, or even change their salaries so that the trepidation over potential identity theft is overcome by the actual rewards of submitting oneself to that potential. That's how the market works.

  • codist: Sep 11, 2007 09:28

    I do understand why they do this for hiring, the objection is having to give out this information before any contact is made. Once a contract is in place you at least have some fallback if they screw up.

  • Danno Ferrin: Sep 11, 2007 11:10

    Secret clearance is nothing. They basically check to see that you are not a paroled felon and do a credit check to see that you don't have crushing debt that can be used to blackmail you. And secret basically gets you on base and allows you to clean the toilets.

    To do most anything worth getting cleared for requires Top Secret, and at the lowest background check levels they ask for more than you listed, such as medical histories (for mental illness) and such.

  • Stephen: Sep 11, 2007 13:02

    Does that mean there's still an opening?

  • JGM: Sep 11, 2007 14:05

    Good for you. I can see that portions of this would be fine in and of themselves once you were hired, but just to do a phone interview? I'd hate to think about what it would be like actually working for them. Daily frisking and body cavity searches? Unfortunately for many of us, there is no real incentive for companies to be realistic about their expectations in situations like this. There is always someone who is desperate enough to just submit.

    @Danno Ferin - I dont know about what kind of bases you've been on that need a secret clearance to clean the toilets, but as someone who at different times has held confidential through top secret clearances, there is a lot going on even at the confidential and secret levels, and the background wasn't nearly as invasive as described in this article.

  • Add Comment

Name:


Optional URL:


Comment:


Save Cancel

Copyright © 2007 By Andrew Wulf