Consultant woes



  • The setting:

    Our development group uses a Java pair-development exercise during our hiring interviews. It involves an existing Eclipse project with classes that implement an interface and the requirement to create a new class to perform actions against both subtypes. It's drop-dead simple, something an intermediate Java class might ask you to do. We use it to observe the problem-solving skills, development techniques, and their testing strategy. A senior Java developer (which is generally all we've hired so far) ought to be able to do this in their sleep. Indeed, the candidates we end up hiring generally look at this like it's peculiarly simple. The ones we don't generally struggle a bit.

    We've been trying to bring on a couple senior Java development consultants. So far, we've interviewed four, each with 8-12 years experience in Java, most with certifications.

    The WTF:

    3/4 of these have candidates have failed miserably at this. The last one couldn't even type in a method without help! The words "embarrassing" and "brutal" were used to describe that part of the interview.

    WTF?! How do these people actually find gainful employment for months at a time?



  • We interviewed 10 people for an intern position about a year ago. All of them were graduate students going for a master's degree in Applied Computer Science and already had bachelor's degrees in CS. Most of them had very impressive resumes including real-world development experience at real-world companies, some of them involving crazy-sounding image and audio analysis algorithms that would make my brain explode if I thought about it too hard. Most of them were also TA's at the local university and claimed to teach programming to undergraduates. All except one had all their experience in Java.

    We decided to do a round of programming tests. I came up with a trivial test that involved reading in a sane CSV file, searching for rows that meet a certain criteria, and printing them to the screen. They could use Java, VB .NET, or C# using their IDE of choice. My Java solution was about 50 lines of code and my C#/LINQ solution was around 10. This kind of stuff should be easy to anybody who knew anything about programming.

    However, only three of the candidates could do anything. The other seven struggled to do basic tasks such as write syntactically-correct Java code that would actually compile, create new methods, use their IDE of choice(!), and even correctly use the auto-generated main method. One guy had about eight projects imported into his NetBeans workspace (was blank before he sat down), all were identical and none of them worked. One guy cursed under his breath during the entire time (I stayed in the room during the testing in case they had questions) and ended up with a main method with a few lines of meaningless code. Another guy kept asking me questions that you'd expect from a first-year CS student who had no prior experience with programming. Four of the seven couldn't write code that would compile. One guy claimed NetBeans didn't work at all on the system we tested him on, and when I suggested he try Eclipse that didn't work either. Both IDEs worked fine when I tried them right in front of him.

    I'd suggest reading Jeff Atwood's "Why Can't Programmers Program?" Scary stuff but it's unfortunately true. Oh, this one's good too.



  • All I can say is that with 12 years of experience, they'd have to have started in 1999 or even earlier if they didn't have continuous employment with it.

    The language was released in 1995 and I'm really unsure how big its userbase was even in 1999.

    Bottom line: maybe I'm splitting hairs but if someone told me today that they have 12 years of experience with Java, I'd think they were lying.  Not that it's impossible, but it's on the more unbelievable side of things.



  • I started Java in 1999 - about a year before going to Uni, and after years of using various dialects of BASIC. IIRC, I was mostly writing AWT applets (slideshows etc for the school website, and the ever popular fractal renderers), but it would have been quite feasible to write proper applications. It so happens that I detoured away from Java into C and .net for about 5 years after graduation, but had I not done so I'd have a bit over 12 years continuous experience.

    There's probably quite a lot of people my age (29) with about 12 years' experience - it was just about that time that the langauge was really taking off.



  • People are dumb.

    I used to travel to universities and hire potential candidates. Most of them were about ready to graduate, and most had decent grades.
    We were told not to ask the same question, because they talked. Well I RARELY got people who could answer the simple question I asked correctly, so I didn't really care if they talked.

    My simple question was "Write StrCmp" When I first started interviewing things like Java were rare. As more people were learning VB and Java and the like, fewer people could really answer the question.

    But what really surprised me was how many people didn't understand "dictionary order." Really? You don't know if "dog" comes before or after "cat" in a dictionary?

    Of course many of these people eventually graduated and moved on into the real world. Somehow getting jobs, and writing some of the crappy software we have (and probably many of the WTFs here)

    Lately I've been interviewing people with more experience. And I am still always surprised how poor of a job they do in the interview. How do they manage to write code at their existing company?



  • About half of the class I graduated with I wouldn't want to work with. And I would tell my boss not to hire them if they showed up for a job interview.

    Want to know how bad it is? I have a bachelor degree in embedded software engineering. Which was a 4 year study. In the 3th year we got a class about software testing. We where asked to write a simple quadratic formula solver in C. We had to work in pairs of 2.

    After 4 sessions of 2 hours only 5 of the 15 groups had a working C program that solved something. At that point the 10 groups just started stealing/trading other peoples code. So they all passed the class.

    From that day, I realised the http://en.wikipedia.org/wiki/Wizard%27s_First_Rule#Wizard.27s_First_Rule is true.

    ED: made URL -btk



  • @Daid said:

    About half of the class I graduated with I wouldn't want to work with. And I would tell my boss not to hire them if they showed up for a job interview.



    Want to know how bad it is? I have a bachelor degree in embedded software engineering. Which was a 4 year study. In the 3th year we got a class about software testing. We where asked to write a simple quadratic formula solver in C. We had to work in pairs of 2.



    After 4 sessions of 2 hours only 5 of the 15 groups had a working C program that solved something. At that point the 10 groups just started stealing/trading other peoples code. So they all passed the class.



    From that day, I realised the http://en.wikipedia.org/wiki/Wizard's_First_Rule#Wizard.27s_First_Rule is true.

    Well, well.


    In the first semester of my electrical and electronic engineering degree, some 32 years ago, we had a "basic programming" course (and indeed, it was BASIC, one of the many dialects that abounded at the time - incidentally we quickly learned the fact that different machines used different languages). One of the very first tasks we were assigned was to program a quadratic formula solver. This we were expected to finish in about half an hour (and the more ambitious of us even managed to expand its operation to take on complex numbers). It was taken for granted that this was an easy exercise that anybody could program. More challenging was the exercise to draw (using the primitive graphics techniques at our disposal) a sine curve (a line of asterisks on a piece of paper where the axes were drawn using hyphens and pipes) - that took us the best part of a morning.


    But what is really puzzling is that I can not remember that we were ever formally taught about assignment, arrays, loops, recursion, apart from "This is the syntax you need to do this stuff." What I do remember is that every teenage boy in the 1970s instinctively knew how to program, it was what boys did. Rumour had it that some girls could program too, but I never met any (girls, that is, we were segregated in those days).


    So, what went wrong? What happened to the bursting glory of intellectual accomplishments that had many of my peers absolutely choking in money before the age of sixteen, when we would be writing programs in the backs of our exercise books for fun, when we would be drawing flow-charts for wiring plugs, for parsing English sentences, for generating random characters for FRP games, for cracking copy protections on computer games, for creating the universe?



  • @QJo said:

    In the first semester of my electrical and electronic engineering degree, some 32 years ago, we had a "basic programming" course (and indeed, it was BASIC, one of the many dialects that abounded at the time - incidentally we quickly learned the fact that different machines used different languages). One of the very first tasks we were assigned was to program a quadratic formula solver. This we were expected to finish in about half an hour (and the more ambitious of us even managed to expand its operation to take on complex numbers). It was taken for granted that this was an easy exercise that anybody could program.

    I hope they taught you some numerical analysis first. The quadratic formula is a classic example of where it's easy to get catastrophic loss of significance.

    Rumour had it that some girls could program too, but I never met any (girls, that is, we were segregated in those days).
    My mother learnt to program in secondary school, sending programs by post to Manchester University and getting the results back about a week later.
    So, what went wrong?
    Games, multimedia, and complexity. It's far easier now to get stuff to entertain you on a computer, and you don't get dumped straight into a programming environment which makes it easy to write simple programs. So you need more motivation to get started, but most people will have less motivation.


  • @Daid said:

    From that day, I realised the http://en.wikipedia.org/wiki/Wizard%27s_First_Rule#Wizard.27s_First_Rule is true.

    I thought the wizards' first rule was "Do not meddle in the affairs of dragons, for you are crunchy and taste good with ketchup" :-)

    (I did read the link.  I reckon Wizard's second rule should be "The simplest way to manipulate someone is to tell them about the first rule, and then explain how you can see that they're cleverer than that".  Have them eating out the palm of your hand!)




  •  I wonder how much of the problem is test anxiety.  Although the person who commented about the decreasing complexity leading kids to being unable to really get in an analyse problems is very apt also.  When I was in college, I signed up for the assembly language class first for that very reason and took Cobol later.  (Everybody else took Cobol first and later assembly and the whining and moaning was epic.)

    @chrismcb said:

    But what really surprised me was how many people didn't understand "dictionary order." Really? You don't know if "dog" comes before or after "cat" in a dictionary?

    I do now, but when I was fresh out of school, it may have thrown me too.  Mostly because I didn't learn it using that term; I learned it as "ascii order".  I like ascii order better still, because you don't see where punctuation or unprintables sort out in a dictionary.  Having said that, I do still have to look up an ascii table to find what their hex/decimal values are, and I did once fail an interview question about where characters fall in the ascii table.  The way the question was phrased made me think they were trying to trick me, so I tried to be clever.   Doh!



  • @jetcitywoman said:

    I did once fail an interview question about where characters fall in the ascii table.
    This seems like a very poor interview question.  It's something that could easily be looked up when needed, but wouldn't be needed that often in most settings.

    That said, I realized when looking up hex values that someone was very clever when assigning hexes to the digits.  All of the digits are 0x3n where n is the digit you're looking for.  hence, 1 is 0x31.  Beyond that, all I know A is 65, a is 97, and space is 13.  



  • @jetcitywoman said:

    Although the person who commented about the decreasing complexity leading kids to being unable to really get in an analyse problems is very apt also.

    Ah, that's not what I was trying to say. My point was about increasing complexity. I started programming with BASIC on an Amstrad CPC6128. When you turned it on it dropped you straight into a BASIC shell, and chapter 6 (IIRC) of the manual was a BASIC reference. On a typical Windows machine your choices really are .bat, arguably JavaScript, or installing a compiler/interpreter, and you either have to learn what a command line is or jump straight into GUI.

    @belgariontheking said:

    That said, I realized when looking up hex values that someone was very clever when assigning hexes to the digits.  All of the digits are 0x3n where n is the digit you're looking for.  hence, 1 is 0x31.  Beyond that, all I know A is 65, a is 97, and space is 13.

    Space is 0x20.

    Capital letters are 0x40 + the position in the alphabet (counting A as 1); lower-case letters are 0x20 + the upper case letter, so you can toggle case with a one-bit XOR. Unfortunately this property doesn't quite hold in ISO-8859-1 with the extended Latin characters - in fact Ý isn't even in ISO-8859-1.



  • @belgariontheking said:

    (Java) was released in 1995 and I'm really unsure how big its userbase was even in 1999.

    By 1999 my university (a top-10 CS program according to US News rankings) had switched over from C++ to Java for their undergraduate OOP courses, but I don't know how much it was being used in the real world at that point.

    I wouldn't be incredulous about a claim of 12 years' experience with the language, although it's still a pretty meaningless indicator of proficiency.

     



  • @pjt33 said:

    @belgariontheking said:
    That said, I realized when looking up hex values that someone was very clever when assigning hexes to the digits.  All of the digits are 0x3n where n is the digit you're looking for.  hence, 1 is 0x31.  Beyond that, all I know A is 65, a is 97, and space is 13.
    Space is 0x20.

    Capital letters are 0x40 + the position in the alphabet (counting A as 1); lower-case letters are 0x20 + the upper case letter, so you can toggle case with a one-bit XOR. Unfortunately this property doesn't quite hold in ISO-8859-1 with the extended Latin characters - in fact Ý isn't even in ISO-8859-1.

    Just goes to show you what I know, and how poor of an interview question it is.

    13 is Carriage Return then?



  • @belgariontheking said:

    13 is Carriage Return then?

    Yes. That's why some UNIX / Linux software shows text files edited in Windows with ^M at the end of each line. Similarly, although rarer, you sometimes see ^J for line feed / newline / \n.



  • @Rootbeer said:

    @belgariontheking said:

    (Java) was released in 1995 and I'm really unsure how big its userbase was even in 1999.

    By 1999 my university (a top-10 CS program according to US News rankings) had switched over from C++ to Java for their undergraduate OOP courses, but I don't know how much it was being used in the real world at that point.

    I wouldn't be incredulous about a claim of 12 years' experience with the language, although it's still a pretty meaningless indicator of proficiency.

     


    !2 years experience in Java, all very well - but that does somewhat suggest that there's not going to be a lot of experience in much else. Personally I'd love it if a prospective candidate said "2 months BASIC, 6 months Algol, 2 years Fortran, 1 week's Cobol, 3 months Occam, 3 years C (various dialects), 1 year Pascal (as a trainer), 9 months 8085 machine code, 2 years Java, 2 years SQL ..."



  • @pjt33 said:

    On a typical Windows machine your choices really are .bat

    Ugh. Hopefully any university/job site has PowerShell on all their Windows machines.

    @pjt33 said:

    arguably JavaScript

    Where's the "arguably?" Every copy of Windows ships with IE, which will run JavaScript. Or JScript, of course. (And VBScript, you missed that.)

    @pjt33 said:

    or installing a compiler/interpreter

    The good news is that there are gobs of these, and most can be had for free.

    @pjt33 said:

    and you either have to learn what a command line is or jump straight into GUI.

    Uh... what?



  • @blakeyrat said:

    @pjt33 said:
    and you either have to learn what a command line is or jump straight into GUI.

    Uh... what?

    Seems like an undeniable truism to me.




  • @pjt33 said:

    lower-case letters are 0x20 + the upper case letter, so you can toggle case with a one-bit XOR. Unfortunately this property doesn't quite hold in ISO-8859-1 with the extended Latin characters - in fact Ý isn't even in ISO-8859-1.
    Well, it works for most of them. 0xC0-0xDE and 0xE0-0xFE (minus 0xD7/0xF7 which are ×/÷). You are thinking of Ÿ, which is not in 8859-1. 0xFF is ÿ, but 0xDF is ß.



  • @DaveK said:

    @blakeyrat said:

    @pjt33 said:
    and you either have to learn what a command line is or jump straight into GUI.

    Uh... what?

    Seems like an undeniable truism to me.


     

    Then, which if the two is a javascript executed by WSH? Commandline or GUI?

     


  • :belt_onion:

    @dhromed said:

    Then, which if the two is a javascript executed by WSH? Commandline or GUI?
     

    If the script host is CScript.exe, then command-line. If the script host is WScript, then GUI.

     



  • @dhromed said:

    @DaveK said:

    @blakeyrat said:

    @pjt33 said:
    and you either have to learn what a command line is or jump straight into GUI.

    Uh... what?

    Seems like an undeniable truism to me.

     

    Then, which if the two is a javascript executed by WSH? Commandline or GUI?

    We're still talking about what the options are for someone beginning programming on a PC, right?  In response to ...

    @pjt33 said:

    Ah, that's not what I was trying to say. My point was about increasing
    complexity. I started programming with BASIC on an Amstrad CPC6128.
    When you turned it on it dropped you straight into a BASIC shell, and
    chapter 6 (IIRC) of the manual was a BASIC reference. On a typical
    Windows machine your choices really are .bat, arguably JavaScript, or
    installing a compiler/interpreter, and you either have to learn what a
    command line is or jump straight into GUI.

    ... just to be sure we're all on the same page here.  Well, I imagine there are GUI environments out there in which you can develop javascript and run it under WSH right from the IDE, and I'm sure you can write javascript using DOS EDIT and run it using cscript/wscript from the command-line, so the answer to your question is "Whichever you feel most comfortable using", isn't it?




  • @Thuktun said:

    The setting:

    Our development group uses a Java pair-development exercise during our hiring interviews. It involves an existing Eclipse project with classes that implement an interface and the requirement to create a new class to perform actions against both subtypes. It's drop-dead simple, something an intermediate Java class might ask you to do. We use it to observe the problem-solving skills, development techniques, and their testing strategy. A senior Java developer (which is generally all we've hired so far) ought to be able to do this in their sleep. Indeed, the candidates we end up hiring generally look at this like it's peculiarly simple. The ones we don't generally struggle a bit.

    We've been trying to bring on a couple senior Java development consultants. So far, we've interviewed four, each with 8-12 years experience in Java, most with certifications.


    The WTF:

    3/4 of these have candidates have failed miserably at this. The last one couldn't even type in a method without help! The words "embarrassing" and "brutal" were used to describe that part of the interview.

    WTF?! How do these people actually find gainful employment for months at a time?

    They must use tried and tested copy-paste methods for continuing in job work.


Log in to reply