Please create an account to participate in the Slashdot moderation system

 



Forgot your password?
typodupeerror
×
Programming

Why the New Guy Can't Code 948

theodp writes "'We've all lived the nightmare,' writes Jon Evans. 'A new developer shows up at work, and you try to be welcoming, but he can't seem to get up to speed; the questions he asks reveal basic ignorance; and his work, when it finally emerges, is so kludgey that it ultimately must be rewritten from scratch by more competent people.' Evans takes a stab at explaining why the new guy can't code when his interviewers and HR swear that they only hire above-average/A-level/top-1% people. Evans fingers the technical interview as the culprit, saying the skills required to pass today's industry-standard software interview are not those required to be a good software developer. Instead, Evans suggests: 'Don't interview anyone who hasn't accomplished anything. Ever. Certificates and degrees are not accomplishments; I mean real-world projects with real-world users. There is no excuse for software developers who don't have a site, app, or service they can point to and say, 'I did this, all by myself!' in a world where Google App Engine and Amazon Web Services have free service tiers, and it costs all of $25 to register as an Android developer and publish an app on the Android Market."
This discussion has been archived. No new comments can be posted.

Why the New Guy Can't Code

Comments Filter:
  • Experienced only? (Score:5, Insightful)

    by Pharmboy ( 216950 ) on Sunday May 08, 2011 @08:18AM (#36061838) Journal

    This reminds me of the old expression "I can't get the job because I don't have any experience, but how can I get experience if they don't give me a job?"

    Yes, on your own, but it is still saying "don't hire someone directly out of school" without considering that there are some advantages to this, such as being able to integrate someone into your system, before they have had the chance to develop "bad habits".

    • Re:Experienced only? (Score:5, Interesting)

      by TheRaven64 ( 641858 ) on Sunday May 08, 2011 @08:30AM (#36061920) Journal
      Experience can be gained on non-job tasks. Quite a lot of the people who contribute to open source projects that I organise are in university. When they graduate, there's a body of code that they can point to and say 'I worked on this'. There are also public commit logs so that people can look at them and see exactly what they did, and sites like Ohloh.net that let people quickly see their total contribution. If anything, this is better for a recruiter than experience on the job, because most employers won't allow you to show code that you wrote for them to your next potential employer...
    • by bunratty ( 545641 ) on Sunday May 08, 2011 @08:33AM (#36061954)

      I was doing programming projects for years before I ever took any sort of computer class. If a potential programmer can't show any work they've done outside of the classroom, they're almost certainly not ready to code for a living.

      If an interviewee really can't show any work, perhaps a good idea would be to give them a few simple Google Code Jam problems [google.com] and have them pick one to solve. Just watching them write down some pseudocode would show whether they have the ability to think for themselves, and if they can actually write a working solution in a common programming language, or better yet, the language they'll be using on the job, then of course they can program!

      • I've been coding full-time for ~10 years, but there's nothing that I would be able to show to another employer, as the apps are held within previous employers.

        By headcount, a majority of developers work in internal projects in large non-IT corporations, the public web projects, startups and software sold to consumers are much more visible, but ultimately the smaller half of programming industry.

    • Re: (Score:3, Informative)

      by ShakaUVM ( 157947 )

      By the time I got my degree, I had a variety of projects I did for school and for fun that I could show off. Bayesian. If people don't have a portfolio, they're lazy. Either because they can't be bothered to put together a portfolio, or because they haven't done anything at school except sit like a bump on a log. (Never understood that phrase...)

      Any student can work on:
      1) Open source projects
      2) Mods for games
      3) Websites for whatever interest
      4) Useful utilities to make their own coding projects faster. I wro

      • by stewbacca ( 1033764 ) on Sunday May 08, 2011 @09:33AM (#36062394)

        All good ideas...for people with tons of free time. When you get a job doing this stuff, you get 8-10 hours a day to do it. I'm hard pressed to think of any time outside of my work hours that I have 8-10 hour blocks of time to do stuff for fun.

        • Re:Experienced only? (Score:5, Interesting)

          by Ephemeriis ( 315124 ) on Sunday May 08, 2011 @10:11AM (#36062726)

          All good ideas...for people with tons of free time. When you get a job doing this stuff, you get 8-10 hours a day to do it. I'm hard pressed to think of any time outside of my work hours that I have 8-10 hour blocks of time to do stuff for fun.

          Exactly.

          It's all well and good to tell people they ought to have prior experience... And that they ought to be coding on OSS projects or something in their spare time... But spare time is something I've just now discovered - at the age of 34.

          There's a reason why they consider 12 credits "full time" (at least here in the US) - if you're taking classes that are even remotely challenging you'll be putting several hours of work outside of the classroom into every single hour of work in the classroom. And then you throw in a job on top of that... Doesn't leave much time for OSS projects.

          Then I graduated, and got a job at Electronics Boutique, because nobody would hire me in anything even remotely IT-related. It was part time, hourly work... Which meant absolutely no benefits, a schedule that would change wildly from one day to the next, and no sick time. I was constantly dropping everything to cover for someone. Had to take every hour I could get to make ends meet.

          Then I grabbed a second job, because EB wasn't working out - taught things like Microsoft Word at a local community college. Prepping for class... Teaching the class... Office hours... Grading... All in addition to working at EB.

          Then I finally got a job in IT. Worked for one of the local repair shops for a while. Quickly moved through the ranks from bench technician to lead network engineer (a fancy title to make up for the lack of pay). I don't know how much overtime I put in there... Came in early, worked through lunch, worked late, came in on the weekends...

          My current job is the first one where I can actually leave work at 5:00 on a routine basis. It's the first one where I don't wind up working weekends on a routine basis. It's the first one where I actually have some time to myself at the end of the day. Time I could spend doing some OSS coding...

          Except that my days of writing software are long behind me. I've got experience now, but it isn't in software. I've wound up on the sysadmin side of things. Yes, I write scripts fairly frequently... But I sure as hell couldn't be trusted to do anything substantial.

          And I graduated with a Computer Science degree that was very heavy on programming. I originally intended to write code. But nobody would hire me. The local repair shop only hired me because they figured I could probably replace a HDD without drooling all over it first.

    • code sample (Score:4, Insightful)

      by Weezul ( 52464 ) on Sunday May 08, 2011 @08:44AM (#36062032)

      Isn't this old hat? Doesn't everyone ask for a code sample?

      I feel however that 'I did this, all by myself!' isn't the best metric.

      I'd rather hire the kid who's code sample consists of fixing 5 memory leaks in 5 different open source libraries. He'll write solid code.

      I'd rather not hire as a "coder" the kid who's website took him 40 hours in photoshop, several hours configuring Drupal, and another several hours writing a Drupal extension that should've taken him 20 min. He might be more artist than programmer.

      In fact, that's a pretty good interview tactic : Ask them in advance to find & fix a memory leak in some open source C library so they can explain it at the interview. Hint : Find a crap library with many leaks.

      • by Jeremi ( 14640 )

        I'd rather hire the kid who's code sample consists of fixing 5 memory leaks in 5 different open source libraries. He'll write solid code.

        I'm not sure I buy this. Debugging code and designing code are two different skill sets. Granted, you usually pick them up together, but it certainly be possible to be quite skilled at running valgrind and parsing its output, while at the same time having little or no idea of how to put together maintainable non-spaghetti code yourself.

    • by Fuzzums ( 250400 ) on Sunday May 08, 2011 @08:51AM (#36062084) Homepage

      We hire inexperiences developers regularly. They're called JUNIOR DEVELOPERS and they require extra time. That's why they make less money than a medior or senior developer.

      • We hire inexperiences developers regularly. They're called JUNIOR DEVELOPERS and they require extra time. That's why they make less money than a medior or senior developer.

        Yup.

        They get on-the-job training, so they learn how to do things right and they have the experience to get a decent job later on.

        You get some cheap (relatively speaking) labor to crank out the simple/repetitive stuff.

    • by dkleinsc ( 563838 ) on Sunday May 08, 2011 @08:53AM (#36062096) Homepage

      The thing is, most employers already follow this rule. As someone who's career started in 2004, the first 3 years of it were extremely difficult because almost everybody in the industry needed 3 years of full-time development experience on the resume before they'd even talk to me. And of course, these same employers have the audacity to say "We can't find any good young developers!" as if making it difficult-to-impossible for anyone to join the industry (oh, and if they're large enough for age discrimination laws to apply, acting on that sentiment is illegal) would have no effect. I've gotten over that hump, but that was by taking any job that came my way, being willing to work 70 hours a week for about $7 an hour, and I'm sure having recruiters lie a bit to get my foot in the door.

      And the reason for all this isn't hard to figure out: This "don't hire anyone without experience" is a pretty smart rule if one employer does it, but a really really dumb rule if every employer does it. In addition, because it takes 3 years for the negative effects of this to really sink in, the system looks great for a while. Basically, everyone wants the experienced demonstrably-capable programmers, but wants the responsibility of giving them basic practical experience to fall on somebody else. To do otherwise would require the vision and the funding to think about a picture bigger than "my company this fiscal year".

    • by drinkypoo ( 153816 ) <drink@hyperlogos.org> on Sunday May 08, 2011 @09:07AM (#36062198) Homepage Journal

      Nobody wants to train anybody any more. They want to be able to hire and fire at will and they know that they are not capable of fostering loyalty when they feel no responsibility to their employees. There's no point in spending money to train someone who is just going to go somewhere else, and that's what they will do.

      • by Ephemeriis ( 315124 ) on Sunday May 08, 2011 @10:15AM (#36062770)

        Nobody wants to train anybody any more. They want to be able to hire and fire at will and they know that they are not capable of fostering loyalty when they feel no responsibility to their employees. There's no point in spending money to train someone who is just going to go somewhere else, and that's what they will do.

        Very true.

        Folks are treated as interchangeable parts. Hire somebody to fit some role, and you expect them to do their job on day 1. If they aren't working out, fire them and hire someone in to do the job they weren't.

        Used to be that skilled labor was the backbone of our economy... Folks who didn't necessarily have college degrees or anything fancy like that, but who'd been doing their jobs long enough that they actually knew what they were doing and were worth more because of it. You could actually stay with a single company for a while, learning as you went, getting raises and promotions along the way.

        These days you're lucky if you work in one place long enough to learn where the restroom is. And if you want a promotion or a raise, you've got to go get hired somewhere else.

    • Not only that, but the real reason for their code being bad is actually rather simple. It's a matter of coders being perfectionists, even when it comes to simple matters of style. Another man's code will always look bad, especially when he's the new guy and isn't yet using the same styles and conventions as you. Hell, your code will always look bad - all developers are constantly unhappy with their code.

      Put that together with the fact that developers tend to be harder on other devs than on themselves, be

    • Hiring someone straight out of college is OK. Doing so does not necessarily violate the "accomplished something" rule. When I interview recent grads I always as about their personal projects, things unrelated to work or class assignments. I sometimes have to pry info out from them. They are embarrassed by how trivial the projects look and think they are not worth mentioning. They don't understand that I am not really interested in how involved the project was, rather I am looking for any kind of project the
  • by inflex ( 123318 ) on Sunday May 08, 2011 @08:20AM (#36061850) Homepage Journal

    Even with a few Open-source projects under your belt for others to check out you might still be a crappy coder but at least they've got more chance to see what they're getting into.

  • So... (Score:5, Insightful)

    by zero.kalvin ( 1231372 ) on Sunday May 08, 2011 @08:21AM (#36061856)
    If you don't have experience we won't hire you ? I might be naive, but isn't by getting a job you get the experience? Yes I do agree that you don't hire someone who just got out of college to code for the next super secret OS, but you can't expect everyone to be the that good right away.
  • by hughperkins ( 705005 ) on Sunday May 08, 2011 @08:24AM (#36061876) Homepage

    Firstly, why is this a nightmare? Who wants extra competition?

    Secondly, "technical interview" is a misnomer. They're actually "potential colleague" interviews. Who is going to pick someone who is smarter than them, or who is going to give them competition for promotion?

    Those who get through technical interviews are either smart enough to bluff to the interviewer that they're not quite as smart as the interviewer, but an ok guy to hang out with; or are genuinely not as smart or talented as the interviewer, but are an ok guy to hang out with.

    Quick tip: when you attend a technical interview, answering the questions correctly doesn't get you the job. Being amazed at how much the interviewer knows does.

    • by giorgist ( 1208992 ) on Sunday May 08, 2011 @08:36AM (#36061982)
      <quote><p>Who is going to pick someone who is smarter than them, or who is going to give them competition for promotion?</p></quote>

      As the rule goes ... A class managers, hire A class people.
      B class managers hire C class people.

      A class managers do not feel threatened, so they hire the best there is. The result is a great workplace.
      B class managers on the other hand want to make sure their staff is dumber than them selves, so they make sure they hire C class staff.

      So the rule is, if your boss is a moron ... you should be worried.
      • by Kjella ( 173770 )

        Somehow I've never found that to be very accurate. The "managers" love strong "doers" because they get projects done and solve problems quickly covering for the manager's incompetence and making him look good, while requiring a completely different skill set and interests. The danger is whoever has your title with "Senior" in front of it or if you have that, then "Chief" or "Lead". They know those are the positions you will be gunning for next, the natural step up.

        • by stewbacca ( 1033764 ) on Sunday May 08, 2011 @10:02AM (#36062654)

          I'm a lead. I like my two worker bees. They are both better than me at everything technical, but neither could be a lead (yet). I don't feel threatened one bit, even though I know both of them are smarter and technically more competent than me. Plus, most organizations don't replace leads without a reason, so unless I go to another position, my two guys won't get my job. If I lead like I were in fear of my job, I'd be a terrible lead.

  • by cronius ( 813431 ) on Sunday May 08, 2011 @08:24AM (#36061882)

    I usually say that it doesn't matter what you know, what matters is how fast you learn. Someone who you can teach and tell how to do things once, and they actually understand the message and do it right from then on is much more valuable in the long run then someone who has a (short and) static merit list in my opinion.

  • by Anonymous Coward on Sunday May 08, 2011 @08:28AM (#36061900)

    There is no excuse for software developers who don't have a site, app, or service they can point to and say, 'I did this, all by myself!' in a world where Google App Engine and Amazon Web Services have free service tiers, and it costs all of $25 to register as an Android developer and publish an app on the Android Market."

    There is no excuse for self-proclaimed software authorities who don't know that software development covers much more than just Web-related or mobile apps. I've been developing software since before the Web was invented and I still don't have a website, I don't write apps for Android and there's no service on the Internet that I can point to and say "I did that all by myself!" I'm a systems programmer and I make a nice living writing code for embedded systems that make it possible for this Evan guy to post his ridiculous rants on the Internet.

  • by Lemming Mark ( 849014 ) on Sunday May 08, 2011 @08:34AM (#36061964) Homepage

    If someone who's clever enough and can program is still a drag on productivity then it sounds like a problem of technical management in providing appropriate tasks, guidance and training. If you're in need of urgent productive programming (and / or you're a small start-up - *maybe*) then, yes, hire someone with substantial experience so you get returns quickly. Otherwise, it's your job to train them in stuff they might not know. Industry used to be responsible for training and educating workers appropriately beyond their academic career.

  • by Smoodo ( 614153 ) on Sunday May 08, 2011 @08:34AM (#36061966)

    New guys do not get senior pay. People with experience usually command higher wages.
    You can get people out of school fairly priced to their abilities. That fair price can be significantly under what an accomplished senior engineer will make.

    The best question is, "Who are you fishing for and why?"

    Hopefully your company is willing to spend the coin for the experience implied by this article.
    If not, your company may see the time slow down as worth it. From an investment side, management must consider timing of future cashflows and likelihood they will arrive (risk). Slow and steady can win the race, despite how frustrating it can be to 'bring someone else up to speed.'

    • Too bad human beings do not have the level of foresight, let alone managers that get to party and drink beer all through college because their classes are so easy. That is why my generation has the most unemployed educated people for the last 80 years or so (maybe more). It sucks being racked up with student loans, then every job you want gets taken by someone that has experience, this leaving you unemployed and unable to even start you life.
  • Hungarian Notation (Score:5, Insightful)

    by TheRaven64 ( 641858 ) on Sunday May 08, 2011 @08:45AM (#36062034) Journal

    Wow, a footnote devoted to a dig about Hungarian Notation, with a link to Wikipedia, and a display of complete ignorance of the subject. The Wikipedia article that he went to the trouble of linking to, while deriding the inventor of the notation, tells you that there are two forms, Apps Hungarian and Systems Hungarian, and no doubt goes on to tell you that the person that he is deriding invented Apps Hungarian. The point of this notation is to include units in variable names. For example, you might prefix a length with m or ft to indicate the units, or an index with row or col. It's then completely obvious that an expression like mHeight -= ftDistance is wrong. This is a very sensible convention and eliminates some very expensive yet simple to fix bugs. The author of the article calls it 'probably the dumbest widely-promulgated idea in the history of the field', which makes me quite glad that I don't work with him.

    He's probably thinking of Systems Hungarian, which is what happened when the systems group at Microsoft got ahold of the idea and started prefixing things with their types (language types, not semantic types), which is completely redundant information.

    • Comment removed based on user account deletion
  • by erroneus ( 253617 ) on Sunday May 08, 2011 @08:45AM (#36062036) Homepage

    There are definitely some people out there who are annoyingly incapable and inept. Cert chasers and the like don't even realize they are what they are -- they were sold on the belief that if they attend and complete classes, that they will somehow have ability and knowledge. (I think I will take a class on weghtlifting and compete in Mr. Universe. or something...) Worse, I have never seen one of these people "become" a skilled and seasoned professional later on.

    Success invariably hinges on a person's ability to think, learn and understand in the ways needed for their profession to be effective. Those are things that are difficult, if not impossible to measure by someone who doesn't have an in-depth understanding of the materials themselves. And yet, all too often, the people who are in charge of hiring such people are the very people who are completely unqualified to make such assessments. (Of course, this idealism ignores that politics can get many people around the requirements of skills, knowledge and understanding.)

    Lack of shame is another problem that these unqualified employees display... or is lack of shame OUR perception? I know I would feel shame if I inserted myself into a situation where I was not qualified. But maybe that's just me and a bunch of other like-minded geeks here on slashdot. (Then again, when I insert my opinions here and someone with greater knowledge calls me an idiot, I don't often feel much shame... though some form of hate or anger results at times.)

    I guess what I am getting at is that no matter what level you or another are at, someone else will be better or worse. There's a great thing about humans, as it turns out, though -- we are good at teaching each other things -- from what I have learned recently, that seems to be the "one thing" that humans have that other animals don't -- and we have the capacity to build on knowledge from our predecessors. But this knowledge is important for growth -- people with academic backgrounds have their place. ("Relevance" of academic knowledge is another matter though.)

    I definitely identify with the problem and the solution(s) depends on the individuals with the problems. Sometimes "giving them enough rope" is the best answer. Other times, coaching them over their deficiencies is the best way. It's always a tough call.

    • Your description is right on the mark for the particular pathology of the unskilled and unaware [wikipedia.org]. I've had some additional correspondence with David Dunning about whether unawareness implies denial. His view is that while denial is certainly a possible adjunct, it's not strictly necessary for unawareness. Simple ineptness would also be sufficient. Your idea about lack of humility may be similar. That said, I think that anecdotally we can almost always find some aspects of denial and irresponsibility in
  • by gatkinso ( 15975 ) on Sunday May 08, 2011 @08:59AM (#36062140)

    I, for one, would like to take a look.

  • by theodp ( 442580 ) on Sunday May 08, 2011 @09:09AM (#36062218)

    Unfortunately, unlike an artist or musician or copywriter, most programmers' finest work isn't intended to be publicly shown, since it may be regarded as a trade secret. Which puts both employers and coders in a bad position. And while a personal website may be useful to demonstrate certain talent, it won't help showcase work in proprietary languages for which one may be seeking employment.

  • by Charliemopps ( 1157495 ) on Sunday May 08, 2011 @09:37AM (#36062428)
    When you take a new guy, immediately stick him on your most critical project and then start bitching about his code and re-writing what he does, what's really going on is you're being a bunch of drama queens. I'm not sure how groups of programmers got like this but I see it all the time and it's ridiculous. Management doesn't want to offend you by telling you you're acting like a bunch of stuck up bitches on your periods but that's exactly what you're doing. Knowing the syntax of the language you're coding in is not the only thing going on at work... knowing the ins and outs of the company is at least 1/2 the job and they're not going to know that sort of stuff for months. "OMG Pete is trying to hit the ODBC on the corp server on port 3412! What a rube!!" or "He pulled the employee table down from the exchange server instead of using the Emp_Agent table on oracle3!!!"

    Just because you and the rest of your hen house have been working together for 4 long years and have your little click doesn't mean you have to treat the new guy like shit. You were a retard once as well. Put him on non-critical projects for a while, let him figure out how YOU do things, figure out who are the right people to ask questions to so he can avoid the dickheads and after he proves himself let him work on the big stuff.
  • by i_ate_god ( 899684 ) on Sunday May 08, 2011 @10:07AM (#36062696)

    ..as a programmer?

    That question is one of the best filtering questions around.

    • by urusan ( 1755332 ) on Sunday May 08, 2011 @01:45PM (#36064582)

      I think this is a good question, but I'm having a little bit of trouble answering it and I think this demonstrates a weakness of this particular question.

      I'm a relatively new programmer, just out of college working at my first job. I have several past programming accomplishments that I could choose from, but I'm sort of ashamed of all of them. Why? I've been getting better and better as time goes on, so when I look back at my past work I'm extremely critical. My previous work sucked compared to my present work. That's not to say my past work wasn't valuable, as I had to work on these previous projects to learn what I know now. Also, my past work isn't objectively bad (or so I've heard from others). However, when asked this question I sit there and think about it for several minutes and eventually it becomes "what am I least ashamed of?" rather than "what am I proudest of?". I'm also tempted to answer with something like "getting through school" (which I am actually proud of due to all the hard work I put into it, and I see as programmer related)...but I bet this is one of the worst possible answers to give a recruiter.

      I'm like an artist who has trouble putting together a portfolio because I want to sweep my entire learning process under the rug, but has little to no present work to stick in the portfolio. Even worse, anything I do now will probably end up being heavily criticized by my future self, putting me back in the same boat. I think it is likely that many skilled programmers that are just getting started have this issue, as programming is a creative endeavor and I see this all the time in other creative endeavors. It's sort of the inverse of the Dunning–Kruger effect...whereas the incompetent can't tell how awful their work is, the competent see all the itty-bitty problems in their work in gruesome detail. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect [wikipedia.org]

      The weakness of this question is that it is not orthogonal. It is testing for skill, self-confidence, and a lack of perfectionism all at once. Unfortunately, slightly low self-confidence and a high degree of perfectionism can be positive attributes in a worker (as long as these attributes aren't so extreme as to be crippling). Too high a degree of self-confidence can lead to interpersonal conflict...or can lead to the situation where the person wastes a ton of time trying to do something themselves when it could have been easily resolved by talking to someone else. A degree of perfectionism prevents sloppy work being passed off as sufficient and leads to a constant drive for improvement (though of course it can also lead to irrational decisions about putting effort into something long after the law of diminishing returns kicks in).

      It's still a good question, but you need to make sure that you account for people who would deal with this problem poorly precisely because they are skilled, otherwise you might let a gem slip through your hands.

  • by zoomba ( 227393 ) <mfc131.gmail@com> on Sunday May 08, 2011 @10:17AM (#36062790) Homepage

    I think a lot of comments are lashing out at the "Don't Hire Inexperienced Developers" concept without really thinking about what's being said in the rest of the article.

    What the author is really saying is "Don't hire developers fresh out of school who have nothing to show for themselves except coursework."

    Why is this so important? It's important because it shows two things:
    1) The developer only has theoretical, academic knowledge of programming
    2) The developer isn't passionate about developing.

    The first is a huge problem for any company hiring said developer. I don't know a single instance where what I have encountered in the working world matched closely at all to how my textbooks or professors told me things "should be". The mental shift required between school and work is large and can be very difficult to overcome for many.

    The second point is a critical thing to consider especially if you're a small company or a startup. A-level developers and other IT folks are passionate about what they do. They have side projects. They have little tools and such that they create to help solve whatever task they're focusing on at the moment. Coming out of school with absolutely nothing beyond class assignments is a strong indicator that the developer is only interested in the bare-minimum requirements to get by. That's not to say they're not talented, just that they're looking for a 9-5 job where they're in at 9:00 and out at 5:00 and aren't interested in going the extra mile. These guys are terrific coders for large companies where there's a lot of maintenance type work to be done. They're productivity vampires though for small companies that need every member of the team to be highly efficient and high producing.

    The article points out how easy it is to have side projects. To turn out a little app on a website or on a mobile platform that you can point back to and say "I did this."

    To those who argue that there's just no time in a 4 year degree to do side projects like that... Where the hell did you go to school? Did you have a full-time 40hr/wk job totally outside of CS/IT during the same period that left you with only enough time outside of class to sleep? If MIT students can get through in 4 years and manage massively complex pranks, contribute to OSS projects and still graduate with high grades, what's everyone elses excuse?

  • by jbolden ( 176878 ) on Sunday May 08, 2011 @10:49AM (#36063066) Homepage

    The "show me something you wrote independently" tests for:

    a) Experience working on your own thing in isolation and a desire to do so.
    b) A genuine love of programming, seeing it as trying to get a job in your passion.
    c) The ability to use easy tools fluidly.

    Now those are good characteristics for a start-up which is who the article is written for. But all of those are negatives in many enterprise jobs.

    Isolated opinionated programmers are a definite determent in enterprises quite often. You want enthusiasm but not passion in most workplaces. You often don't want to test for easy tools, but the ability to use hard tools. Complex applications are orders of magnitude more confusing than simple android applets.

    And finally the Microsoft brain teaser type problems are basically a computer IQ test. They are testing for:
    i) Do you know basic computer science
    ii) Are you smart.

    You can fix skills deficits in employees. Generally you can't fix (i) or (ii), though with younger programers you can sometimes fix (i). You will fight those problems everyday forever. Quite often in programming you can construct two algorithms to solve a problem with times like: n^2 + 25n + 100, 1000n + 20000. If you hire the Android guy you often get the n^2 solution since it works so much better on test data sets.
     

    • I almost always go for n^2 solutions. They are usually the fasted to implement and usually use less memory, and when I only have to scale to n=100 or so, it's not really a big deal. In kernel land we take these short cuts all the time. I'd rather spend my time optimizing something to be O(n) or O(1) when n is huge.

      • by jbolden ( 176878 )

        I agree its not a big deal for n=100, that's why I mentioned test data sets. On the other hand n=10m is not uncommon in business programming. My working definition of "system's programming" is "when the constant term matters".

  • by Animats ( 122034 ) on Sunday May 08, 2011 @01:07PM (#36064322) Homepage

    I once ran an employment ad "Send us a thousand lines of C++ that you're proud of". Very few people submitted code. Lots of excuses, though. What I was looking for in code, incidentally, was proper paranoia. This was an embedded project for a large machine, and I wanted to see conservative code that would clearly not do bad things. I actually sent one application back with "Your application has been received. Your first buffer overflow is on line 22. Thank you for your interest."

    I once encountered an applicant who claimed to be an experienced C++ programmer, and sounded convincing. I sat him down at a computer, demonstrated how to type in, edit, and compile "Hello World" in that environment, and asked him to code something. Anything. He got stuck at "int main...".

  • Delete "New Guy" (Score:4, Insightful)

    by npsimons ( 32752 ) * on Sunday May 08, 2011 @05:09PM (#36066046) Homepage Journal

    Replace "New Guy" with "applicant" ("experienced" or otherwise) in the title and you will basically have something that tech company interviewers have been noticing for a while:

    The article is good reading, and links to the even more controversial supposition: a large percentage of people *cannot* be taught to program [codinghorror.com]. Highly recommended reading; both of those links would make for good slashdot fodder, if they haven't been posted already.

  • by Sarusa ( 104047 ) on Sunday May 08, 2011 @05:36PM (#36066262)

    Although hardly anyone seems to do it because they think an interview is all about schmoozing, there's no excuse for not asking the interviewee to code in the interview.

    It doesn't have to be anything fancy. Even a bubble sort or sorted list insertion is sufficient to weed out most of the candidates. You'd be amazed at how fast the guy who talks a good talk crumbles when you just ask him to write a simple for loop on the spot. You're a c++ 'expert' and you can't even write a for statement, much less get the logic correct? If you can whip out the STL version, fair enough.

    Now if s/he tells me 'I wouldn't use a bubble sort here, I'd just call qsort()' that's also a good sign. Okay, here's the qsort() parms in case you've forgotten them (very easy to do) - write me the sort with the attendant comparison function. Now give me some code to print the sorted array (we'll make them write a for loop one way or another). Now, why might you actually use a bubble sort instead of a qsort? There are higher level concerns, but at least the covers the 'can you code?' bit.

  • Apprentice? (Score:5, Informative)

    by Haxx ( 314221 ) on Sunday May 08, 2011 @07:30PM (#36067068) Homepage

    Apprenticeship is dead. How dare someone with a degree and a few certs look for a job.

  • Tap onto his other skills then. If he can read code, so much the better. "Listen, we need a guy to jump right in and document all that we've been working on here. I'm glad you came in when you did. You can hit the ground running compared to the last guy." It sort of puts him in his place for acing all the questions, with a dash of tact thrown in for good measure. What he does next determines his future in your company.

    1-OMG Sure! I'll get right on it! (He sees it for what it really is, and is eager to thank the gods on this twist of fate. This would make him ideal to face or work with users or deal with customers)
    2-He flounders and stalls (Watch him dig into this hole and sweat his way out; gets you off the hook because he will wind up over comitting himself, albeit at great risk to the project.) Give him a quick test like, would you be able to code a DVD player app with what we have. (just an example, could be something that ought to take a page of code or so.) You'd then be forcing his hand to make some sort of admission
    3-He might use it as an out e.g. I've found another opportunity someplace else and I'm taking it.
    4-You find out he's armed. Just kidding, to see if you were reading through this.

    But you get the point.

"What man has done, man can aspire to do." -- Jerry Pournelle, about space flight

Working...