Why the New Guy Can't Code
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 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".
Tequila: It's not just for breakfast anymore!
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.
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.
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.
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.
Life is Reality
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.
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.
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.'
I think his whole point is that the barrier to entry is now so low that college and even high-school kids can easily have a number of high-quality apps out by the time they're ready to get a job.
This is a good way of filtering out people who're book smart but not really motivated or enthusiastic about it.
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.
The Christian religion has been and still is the principal enemy of moral progress in the world. -- Bertrand Russell
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.
I am TheRaven on Soylent News
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.
The barrier to entry hasn't been particularly high for a long time. In the '80s, most computers came with developer tools. If you were interested in programming, you probably wrote a few little games or utilities, and you may have released some as shareware. You might even have kept the cheque from the one person who ever registered it...
I am TheRaven on Soylent News
I, for one, would like to take a look.
I am very small, utmostly microscopic.
No, I've managed and worked with many incompetent woman coders. I've also managed and worked with good women coders. They are just a much smaller percentage of the work force.
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.
Probably not the case, but I could see as an interviewer asking this question not to see the interviewee's answer, but to see the interviewee's response to a conflict situation. Its actually a great and creative way to see how they'd react (do they get frustrated/angry, do they take a constructive approach to resolving the conflict, do they just accept it and not push back at all?) Great insight to get about someone during an interview.
You heard that people can completely change their field of work throughout in life? It's like those music elitists saying "if you didn't start learning musical instruments at the age of four, you will never achieve anything". This is bullshit.
In the '80s, most computers came with developer tools.
And in the 1990s, they did not. Neither Windows nor classic Mac OS came with a compiler; one had to buy a copy of CodeWarrior or Turbo C++ or whatever they called it back then, often at inflated prices comparable to those of modern-day Microsoft Visual Studio Professional unless your school happened to be in a compiler publisher's academic discount program.
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.
What metric do you use to determine which candidates will make good junior developers?
I like the "90-day-trial-period" metric, personally.
developing websites and apps is basically free.
For a web site, you need a domain and hosting. Firesheep has made HTTP obsolete for any site that takes contributions from its users, so now you need an SSL certificate. Internet Explorer on Windows XP doesn't support SNI, without which name-based virtual hosting for SSL sites is impossible, so you need an IPv4 address. Those aren't exactly free, especially now that IPv4 addresses have officially run out.
As for an application, not all kinds of applications run on Android, and there isn't a single market that serves both AT&T phones and Archos tablets.
Developing a website (that practically no one uses, and makes no profit) is basically free. Not sure if you need a SSL cert to not accept money from your users that don't exist. My domain plus XEN/KVM'd "shared dedicated host" for an entire decade is still cheaper than the fee for one single credit at the local university, and is far more educational.
The flaw in your description, is if utter newbie applicant could make a large, successful, profit generating business with no cash investment, why would Mr. Utter Newbie apply for a menial entry level job? Mr. Utter Newbie should be selling his incoming generating platform to you for $1B, not selling 40/hrs/week of code monkey time.
"Science flies us to the moon. Religion flies us into buildings." - Victor Stenger
..as a programmer?
That question is one of the best filtering questions around.
I'm god, but it's a bit of a drag really...
If you want to get a job programming, but have never written any software that you've published, then you are probably not worth hiring
This is just plain crap, I've been programming for almost 30yrs, proffesionally for the last 20. I don't have any published code to show anyone at an interview, and never have. The stuff I write in my own time is mainly so I can learn something new, once I have the gist of it I usually throw the code away. I've also interviewed ~100 programmers over the years and if you can't tell if someone knows their stuff just by talking to them for 5-10min, then I suggest you don't know yours.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
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?
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 they did on their own to satisfy a personal need or curiosity or just to have fun. The mere fact that they got something working for their own amusement, curiosity or need indicates they are part of the minority who went into programming because they have a genuine interest in the field rather than part of the majority who went into programming because someone told them it was a good career path.
Regarding the value of college itself. I certainly agree that someone can be self taught, however the person that will on their own read university level computer science material across a broad range of topics is exceedingly rare. Additionally, completing a degree demonstrates that a person has the temperament to finish what they start, even if it is a long boring bureaucratic process. When a project is long and has unglamorous components such a temperament is valuable.
Comment removed based on user account deletion
I'm guessing your lack of capitalization and punctuation skills were involved.
I did write lot of stuff for my enjoyment. still, the assembly bump mapping demo doesn't really seems to me a good thing ti show off. also, it doesn't run on windows. or linux, for that matter.
You are very mistaken. When interviewing recent grads I explicitly look for things people have written for their own curiosity or amusement. To me that separates those who have a genuine interest in programming from those who only look at it as a good career path. Your mistake is common, I often have to dig these projects out of interviewees. When hired they were shocked to learn they were preferred over a 4.0 student who never wrote anything except for class assignments. FWIW, my year+ project staffed with such individuals was delivered on time with only a few weeks of "crunch time". The product (molecular modeling and visualization) received good reviews and few bugs were discovered when it got into the hands of customers.
i do enjoy coding a lot, as in i cant think of anything i'd rather do for a living. But in my free time, i can think of thousands of things i'd rather spend my time on, so i hardly have any hobby-projects, certainly nothing that i would use to show off at a job interview.
Please rethink this reluctance, see http://developers.slashdot.org/comments.pl?sid=2134962&cid=36063020.
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.
Thank you for saying what I was thinking. Just because you don't feel like developing some shit app in your free time doesn't mean you're not a great developer in work time. If I was interviewing I would have to wonder what kind of well-rounded person would spend all their free time doing the same stuff they do at work and would worry that they lacked the requisite social skills to work in a team.
I have to agree. In my 20+ years of engineering for a small company I wrote a lot of code, but none of it is mine to share.
Also to those suggesting open source - beware - I recently applied for a job and the application asked if you had done anything to disqualify you from working for them - eg: open source or personal software development! (I believe their concern has something to do with their intellectual property policy.)
Those who have written something for their own amusement or curiosity, something not part of work or a class assignment.
Are interviewees permitted to bring in their own laptop computers on which to demonstrate "something [written] for their own amusement or curiosity"?
For me, no. I don't want to see the code. I want to have a conversation about the code. How were things implemented, what problems came up, anything particularly cool about the implementation, what was fun, what was not fun? I think the conversation is more revealing, code can be someone else's. Or if written purely for your own amusement it might be crudely slapped together and not truly representative of a person's professional efforts.
These articles are popping up at a rate of one per week now. Usually, the author is trying to portray themselves as an expert in the field of software development by relentlessly bashing a strawman army. For instance this guy, John Evans, is complaining about developers, but it appears he is an author trying to do some self promotion.
Before someone starts attacking nameless developers, perhaps they should list their own qualifications. The author is trying to write a controversial piece to drive traffic. He writes "Certificates and degrees are not accomplishments" which is clearly meant to insult 99% of professional developers, 1/3 of whom have advanced degrees. Fellow bloggers need to start demanding credentials whenever one of these articles shows up from someone clearly not working in software. And by working in software, the gold standard is being paid by someone else to produce code over many years.
Actually, in The Netherlands more and more IT-professionals with enough experience to make it work, become freelancer. Better pay, more control over your own life, but also a few downsides ofcourse (if you don't like uncertainty, acquisition, talking to people or doing bookkeeping, it's not for you). The thing that makes this possible is comprehensive and general health care + insurance that doesn't discriminate between normal and self-employed people (which is the major inhibitor in the US, as far as I've understood).
So what is left for bigger companies are NOT the people with experience, but (a) the juniors and (b) the experienced people who can't be bothered to do bookkeeping or acquisition and (c) people who can't compete. Trying to hire experienced and good developers in NL right now is almost futile - they just aren't there. So a company that won't hire juniors will eventually run up the wall OR has to increase its wages a lot.
Therefore, by the (faulty) logic you're using, you're just a cow with a keyboard - osu-neko (2604)
There's a very big difference between 'user accounts' and 'static web pages'.
CGI scripts don't need user accounts.
Sessionless web games don't need user accounts.
Loan repayment calculators don't need user accounts.
Data transformation services don't need user accounts.
But hey, I'm biased, I went for my first job interview with evidence of the MORPG I'd helped write and was helping admin. Which was hosted on its own Sun box, in 1994, despite not charging to play, not advertising, not relying on patronage.
Maybe things are different these days, but please, don't pretend you can't write a web application without needing user accounts and/or SSL. It makes you look silly.
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...".
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. Highly recommended reading; both of those links would make for good slashdot fodder, if they haven't been posted already.
Nathan's blog
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.
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.
WARNING: Smartphones have side effects--most of them undocumented.
In the interviews I've performed I've only been interested in coding experience as a demonstration that they can pick up other languages as needed for a project (yay for having 10+ languages floating around at my work site that i'm aware of). What I more drill them down on are design decisions. In given a problem why do they pick one language, algorithm, or architecture and why they made the decision? Most of the experienced programmers we've turned away we're talking about their major code upgrade projects were to switch to a modern language but couldn't provide a better reason to make the switch than the old language was out of date. DON'T go to an interpretive language for a near real time application if the supporting architecture isn't going to support the added overhead.
You probably wouldn't know this, being from the Netherlands, but here in the United States it's not just the health insurance that makes freelance software development difficult, but rather a little known section of the US Federal Tax Code: Section 1706 of the Tax Reform Act of 1986. This law, which was originally supposed to curb certain tax practices at IBM, has had the unfortunate side effect of making it practically impossible to work as a professional individual independent software developer here in the United States. Basically, unless you form a company with at least three developers, where you are all employees of this company, and then do contracts with other companies through your company; the Internal Revenue Service (the tax collector here in the US) could go after your clients by saying that you were actually their employee and not an independent contractor (i.e. they owe the IRS payroll taxes, social security, medicare and the like). This is why almost every professional software developer here in the United States is an employee of a company and not an independent. Just one more small example of how stupid US tax policies make US companies and workers less competitive. BTW: This section of the law was originally written by a liberal New York Democrat, Daniel Patrick Moynihan, who wielded it as a blunt instrument to offset changes to the tax code involving Americans working abroad. So lawyers and doctors can be independents here in the United States, but not software developers or IT professionals. It's fucking stupid really, but that is what I've come to expect from the American left; when it comes to fixing or growing the US economy, they've all got rocks in their heads.