9 ms·
The Non-Programming Programmer
- Roridge 17y agoI think that it is worse that most people who turn up for a Developer job are just programmers, have no design skills at all.
- barrkel 17y agoMost development outside web front-end work doesn't particularly require end-user UI design skills.
- berntb 17y agoThat is correct, of course (otherwise, I'd be unemployed!). But what you comment on might mean "design" as in "system architecture design"?
- deleted 17y ago[deleted]
- j_baker 17y agoThis is actually a very well known problem: http://sourcemaking.com/antipatterns/the-grand-old-duke-of-york http://sourcemaking.com/antipatterns/the-grand-old-duke-of-y... Unfortunately, it doesn't necessarily end upon hiring either. Usually, the "implementationists" won't get the "abstractionist" point of view and will reject it immediately. And since they're more common, this can lead to bad ideas winning simply because everyone understands them.
- ciscoriordan 17y agoThe post mentions a tool for live coding over the web (http://i.seemikecode.com http://i.seemikecode.com) that looks simple but good. Etherpad (http://www.etherpad.com http://www.etherpad.com) is also real good for those and has some other features like line numbers.
- gkoberger 17y agoBespin (http://bespin.mozilllabs.com http://bespin.mozilllabs.com) is even better for this. It's slightly less realtime than EtherPad, however it is made for collaborative programming. It has syntax highlighting and a bunch of other features for coding.
- telemachos 17y agoCheck your link: you're missing an 'a' http://bespin.mozillalabs.com/ http://bespin.mozillalabs.com/
- jbellis 17y agoThe hosted version is 0.4.4? I think they're up to 0.6.something now.
- patio11 17y agoThis is why I think that Codility (covered on HN earlier here: http://news.ycombinator.com/item?id=1039140 http://news.ycombinator.com/item?id=1039140 ) is such an amazing idea. You can administer a web-based company-appropriate FizzBuzz for rounding error next to the cost of doing an interview or (worse) hiring someone who can't do FizzBuzz. Incidentally, if you think Java programmers who can't figure out how to count the number of occurrences of the letter "a" in the string "Java java java" are bad, you should see how many interpretations of "advanced oral and written Japanese proficiency" we've had. Oh boy. Let's hypothetically say you're a recruiting company and you get a candidate as far as our door without disclosing that their exposure to Japanese is, I kid you not, "I loved watching Kenshin in high school" -- we will not be doing business with you again. Hopefully ever.
- Sukotto 17y agoThat casts the old "I'll just pick up the language as I go... I'm a fast learner" in an interesting light. And I'd take it as a good counter argument to "smart and gets things done". (edit: maybe not "counter arguement since SAGTD is also important. Maybe "corollary" would be a better word choice?) I've seen a few "will pick up [perl | c++ | java | whatever] as a I go" type guys. (Come to think of it... I've been that guy on occasion)
- MaysonL 17y agoI've done that a few times myself - my first coding experiences with a number of languages were paid gigs [C, shell, Modula-2, Data General Nova assembly, PL/I].
- gfodor 17y agoSee, honestly I think something like Codility misses the point of these coding exercises. For me, a coding exercise is more than just a way for me to see if the person can produce something that works. It's also a kick-off point for other questions. Often there are things the person will do along the way to a solution that reveals some lack of knowledge, so I keep my eyes peeled as they talk through their solution for these potential gaps. One of the biggest problems now is that you have people who can even pull of FizzBuzz but don't know much of anything beyond how to get something like that working. They don't understand data structures, algorithms, or how a computer really works. A simple coding exercise like FizzBuzz can reveal these gaps too, even if they get the problem right. The trick is to use their implementation as a way to probe their thinking. For example, if they are just using a "sort" function, like in Ruby, ask them how it contributes to the runtime of their algorithm. Or, if they are loading a file into RAM instead of just iterating over reads on a file handle, ask them about it. Or, if they are iterating over the keys of a hash (h.keys), ask them how they think that works. (This recently revealed to me the candidate did not understand that a hash function was irreversible.) None of the major gaps in knowledge I've found that separate mediocre from good candidates were found by just looking at their code and giving them a thumbs up or thumbs down. That's good for separating the mediocre from the morons. To find out if they're good, you have to probe. To find out if they're great, well, that's another story entirely that is far afield from FizzBuzz :)
- mootothemax 17y agoI remember interviewing for the first time, where I'd asked lots of questions, and then called back potential candidates for a proper coding test if they passed the talking test. I know better now, but anyway, it was scary! The amount of people who can talk about the inner workings of compilers, internet protocols etc, and then can't do the fizzbuzz test is shocking! The next time, I started with fizzbuzz and made life a lot better ;)
- ohashi 17y agoOut of curiosity, anyone want to share some of the questions they use or would use in these situations?
- patio11 17y agoHere's hash maps A and B. Identify all values which are present in A but not in B. In an interview at another company there might be a complication like "By the way, A and B are Google-sized" or "By the way, A and B are being written to." or "By the way, you have to do it in constant space.", but none of those things apply to our business.
- magoghm 17y agoThis is one test I've used: write a program that reads a text file and then prints out all the lines in reverse order.
- jbellis 17y agoI love interview questions that make Python look awesome.
- Luyt 17y agopython -c "print '\n'.join(open('file.txt').readlines()[::-1])" Hmmm, slightly longer then the Perl version ;-) python -c "print '\n'.join(reversed(list(open('test.py'))))" Somewhat more elegant, but still lots of parentheses.
- RiderOfGiraffes 17y agoIt's also wrong - "readlines" keeps the "\n", and you've added another one between lines.
- Luyt 17y agoIndeed. A cosmetic refinement, but it should really be: python -c "print ''.join(reversed(list(open('test.py'))))" That's even two characters less!
- cake 17y agoCould this phenomenon happen because of stress ? I've done several interviews where I was asked to code and I really don't think it's easy, because you're under intense pressure of doing your task right the first time and under a very tight time frame. Sometimes even with your interviewer sitting next to you.
- RiderOfGiraffes 17y agoThe whole point is to use a task so trivial that even moderate amounts of stress won't prevent your fingers from taking over. That's why people who criticize "FizzBuzz" as not testing the true requirements for a job are simply wrong. All you want is some real code that produces a correct answer. My programmers wrote FizzBuzz in under 60 seconds. If you can't write FizzBuzz in 15 minutes in an interview then you are either unable to program, or any level of stress will prevent you from doing your job. Either way, you couldn't work for me. I don't routinely stress my programmers, but stress is a matter of observable fact.
- _delirium 17y agoYeah, I think it's a good test for that reason. I personally would probably do badly on a complicated programming test--- I tend to program best when not in a room with other people, not being put on the spot, allowed to think while walking around outside and then return to a burst of coding, etc. But I could write a few lines of obvious code in pretty much any situation; there's a pretty big difference between peak performance and absolute minimal competence. It's hard to make analogies to other fields, but it feels sort of like a writing job not asking you to write an insightful philosophy essay on the spot (legitimately difficult), but just asking you to write a paragraph of grammatical English (anyone even remotely fit for the job should be able to do it).
- Retric 17y agoI don't think it's just stress. Few programmers actually write correct code on a whiteboard / pen and paper so expecting them to accurately program outside of their preferred environment can be vary hard for some people. It's something like asking an author to spell out an essay, plenty of people can do it but it's a separate skill from being a good writer. PS: Try composing your response by saying one letter out loud at a time without typing it before you type it.
- forkandwait 17y agoI can't remember the link, but I read about one job where they gave candidates an ssh login and asked them to write a simple, running, perl script. Something like 10% actually finished the assignment, and they hired one of them, but avoided screwing around with LOTS of screening phone calls, enthusiastic people who "were familiar" with Perl, Windows programmers who didn't really know what ssh was, etc.
- RiderOfGiraffes 17y agohttp://neil.fraser.name/news/2005/09/03/ http://neil.fraser.name/news/2005/09/03/
- lele 17y agoIt makes sense to me. Programmers who can program - and don't want to stop working as employees - give up programming to pursue higher paying careers, such as project management. Actually, many "programmers" nowadays can get by simply copying and pasting code from the Internet. If you ask them how things work, they don't know. That's my experience.
- edw519 17y agoI was recently contacted by a head hunter for a job I thought was worth investigating. I wanted to talk to the company directly, but the head hunter made it clear that Step 1 was always a web-based programming aptitude test, no matter who you were. 20 questions. 18 correct was considered passing. They would only talk to candidates who got 19 or 20 correct. So I took the test and got 20 correct (as I imagine many people here would do as well). I thought it was very easy. The headhunter later told me that in 9 months, she had sent 52 people to the test, only 2 of us got 19, and I was the only one who got 20. I'm not really sure what this means. That there are a lot of posers out there? That she wasn't very good at screening talent? That the companies seeking the best talent gladly pay $100 50 times to save their time? I guess my biggest feeling is one of disappointment. It's just not that hard to become a good enough programmer to get 20 right every time. All it takes is study, passion, a lot of dedication, and a lot of hard work. I wish more people would do that. There aren't enough of us.
- mcantor 17y agoOut of curiosity, what sort of questions were on the test?
- edw519 17y agoThe entire test was about a fictitious language, I forget what they named it. Every question built upon the previous. The first question was something like, "These are the definitions of variables: A string is... An integer is... A date is..." Then the question would be something like, "What can '15232' be? a. an integer b. a string c. a date d. any of the above e. a and c". Another question might be "Here are the rules of precedence... What is (1 + 2) * (3 + 4) / 3 a. 4 b. 2 c. 7 d. 12 e. Can't tell for sure." It got more and more complex, all in their own pseudocode. They covered branching, iteration, arithmetic operations, Boolean algebra, etc. Things most people here have seen a million times. Kinda like SATs for programmers.
- msluyter 17y agoThat's sorta cool idea though; much better than questions like "do you know this obscure feature X of some programming language Y, or what does some class EJBServletContainerFoobar do?"
- johnl 17y agoI would think "bring a sample of your coding" might be better. Non-programming might include: Query language "programming". Maintaining an existing "out of box application" Maintenance programming. End user support. Little real coding is necessary. These are programming jobs but not really programming as I see it but. Then there is the ability to learn new languages, processes, dealing with the end user, is the code maintainable, code by specs?, juggling multiple projects. I might start an interview by a sample code but that would not be my only criteria and if the person failed the "programming" test I would see it as a need for further discussion, not really a big red failure flag. Example: If the reason the programmer doesn't know sql is because they spent their time putting out fires and supporting the end users, I would hire that person over the others any day.
- brown9-2 17y agoThis is hard-to-impossible for those developers whose entire development career has been for companies (i.e. no OSS contributions).
- blhack 17y agoDo most professional programmers not ever work on personal projects?
- nitrogen 17y agoMost professional programmers probably view programming like any other job, rather than a passion like I expect most HN readers do. As a result, they leave programming behind when they leave the workplace.
- robryan 17y agoI guess this is a good way to weed out people as well? Depending on the type of company you are, you probably don't want someone who has never written any stuff they can show you at all.
- bshep 17y agoWe were once hiring programmers for a small consulting firm. We asked the prospective employees if the knew how to program for Windows, VB, etc... They almost all answered 'yes', when we asked them to write a sample program the couldn't, so we asked them to describe how the would program something for windows... Their answer: 'You put the CD in the drive and run the setup.exe' They all thought that programming meant 'installing' software... Needless to say we ended up not hiring anyone.
- deleted 17y ago[deleted]
- SMrF 17y agoWhenever the FizzBuzz topic pops up on Hacker News in the back of my mind there is a nagging anxiety: am I one of these programmers that can't program? There is always some comment in the ensuing discussion that makes me question my own competence.
- telemachos 17y agoDitto, and for me it's a more general thing. (In this case, I tested myself quickly on Patio's suggested question from somewhere in this thread. I just had to open a terminal and see if I could quickly do it. Stupid.) I always feel like a fake - not about programming in particular, about whatever I'm doing and supposed to know about. I like to tell myself that I'm being 'Socratic' and worrying about what I know I don't know.
- iron_ball 17y agoIn the same vein as the Dunning-Kruger Effect, look up "Imposter Syndrome."
- eneveu 17y agoYou should read this recent submission if you haven't yet: http://news.ycombinator.com/item?id=1121775 http://news.ycombinator.com/item?id=1121775 [No One Knows What the F* They're Doing (or "The 3 Types of Knowledge") (jangosteve.com)]
- RiderOfGiraffes 17y agoIf you had contact information 1. I'd send you one of my regular tests 2. You could reply with your code 3. I could tell you if I think you can code at this point in time, under the conditions you used. Or you could email me. 30 seconds of searching didn't find contact details on the blog in your profile. EDIT: amended 3 in light of insightful comment(s) below.
- SMrF 17y agoAdded my email to my profile.
- zarski 17y agoGood article but didn't he write the same article in 2007 (as he mentions but ..)? This re-posting is a subtle shill for stackoverflow careers. Not that there is anything wrong with that.
- radu_floricica 17y agoAlong with the CV I always used to ask for code samples. I wanted to see the code before I could develop any biases by talking to the person. I found it worked best to ask for "the last project/projects you had fun working on, or developed on your own time". If there are none...
- Jeema3000 17y agoIMO if you're giving people 'gotcha' programming tests in an interview, then you don't know how to select candidates or interview in the first place. You should be looking for competence by looking at their programming accomplishments, both in and out of work, as well as their ability and desire to teach themselves (probably the most important trait IMO).
- brown9-2 17y agoThis article doesn't mention "gotcha" programming tests.
- Jeema3000 17y agoI disagree. IMO asking someone whether they can program a loop that demonstrates the use of a mod operator is a 'gotcha' test because it proves nothing as far as their suitability as programmer and as an employee and is designed soley to weed people out based on one thing. Sure, maybe they are completely ignorant... or maybe they were just nervous that day or unfamiliar with a particular language's mod operator. Lots of programmers don't do well in high-pressure situations... which incidentally programming is not most of the time. How about asking someone how they got interested in programming, or what sort of things they've created with their knowledge in and out of work, or what languages/technologies they've taught themselves in their free time, how they go about fixing puzzling software problems, or what they consider to be good vs. bad programming practices, or even what their hobbies are? - those kinds of things that will tell you IMO whether they are smart, passionate, and will make a good employee.
- kaib 17y ago> unfamiliar with a particular language's mod operator Just anecdotally, over some hundred interviews, I've never ever ran into a candidate who failed one of these FizzBuzz style loop writing tests because the didn't know the mod operator, or were nervous enough not to remember it. I see a lot of candidates that can't remember what params some standard system call is supposed to take and I always tell them I'm happy as long as they define what they think it looks like. Heck, most of the time I have no clue myself. I'm not claiming the candidate you describe (competent but can't remember a for loop) doesn't exist, just that I've never personally encountered such a beast. Quite the contrary, with a technically open minded interviewer it seems hard to get even the most introvert candidate to stop talking shop .. :-)
- geebee 17y agoI think this article does a good job covering the second best way of selecting programmers - the technical job interview. The best "interviews" aren't really interviews, though, they're recruiting sessions. A really strong, experienced software development manager who plans to employ programmers should have 1) a strong background in programming, and 2) a strong network of programmers who would jump at the chance to work with him again. You already know your potential hires are good programmers, because you've worked with them before - in school, on side projects, at work, in various collaborations. You don't need to ask them to print all the nodes in a binary tree, and if you did, well, you'd probably lose the candidate. I think Joel (on software) put it this way (I'm paraphrasing): if you're a small independent film maker, and Uma Thurman expresses an interest in your movie, you don't ask her to audition, you ask what you can do to get her on board. I think 37Signals is another example of a company that mainly recruits people they already know through programming projects (esp contributions to rails). I won't say the technical interview is evidence of a "broken" recruiting system the way some people do, because let's face it, we don't all have the recruiting mystique to wave the magic wand and get top people to join us, and our networks just aren't big enough. So we have to interview relative unknowns. But I will readily admit that this shows that I'm not doing it the best way. This goes both ways. If I'm in an interview and people start asking me how to implement a singleton, I start to wonder if I'm going about my job search the wrong way. If I have to ask the candidate this, then maybe I'm going about the recruitment in the wrong way as well. But if that's your reality, then yeah, make sure you screen well.
- barrkel 17y agoExcept that even headline actors do audition - if the role is good, there will be competition.
- geebee 17y agoWow, I didn't know that. Brad Pitt actually has to audition for roles? Jeez. Well, that's the problem with analogies. But I'm not really a fundamentalist about the code test. I've gone through many, many, many of them. I just had a little epiphany the last time I was in one. I was thinking, "why don't these guys already know that I'm a good programmer? Why don't they already know good programmers?" It made me realize as a programmer and as a manager that I wasn't really building my career the right way. I decided that I wanted to build a network and a reputation that went both ways - essentially, I wanted to have a large number of people out there, in different organizations, who are both confident in my tech skills and my value as a manager. I'll step outside that network constantly, and when I do, I'll certainly validate programming ability (and I'd expect people to do the same for me). But every time I do this, it's a reminder that I failed on Plan A, which is the best way to do things.
- timwiseman 17y agoFirst, as someone who has done a fair number of technical interviews, there are a lot of posers. I have had people claim to be experienced that had no clue how to do even very basic programming, just as described in this article. Even more common, I have had people that grossly exaggerate their skills and experience. One that stuck with me was someone who was a "senior DBA" but when I probed further it turned out he mostly ran stored procedures written by consultants and didn't really have the knowledge right then to do much more than that. I would also like to point out that if you are up front about your lack of skills and applying for an entry level post, it can work out. I had one interviewee who had no programming skills, but was ready and willing to learn. She was up front about it, convinced the whole team of her sincerity, and willing to start for less than most people with a CS degree. By the end of her 3 month probationary period, she was competent. Still junior and with a lot to learn of course, but quite competent and a good hire overall.
- va_coder 17y agoTough questions without also building rapport is also bad. I've had some interviews where they asked tough questions and I got a job offer but I declined because I felt there was no rapport or interest in my career.
- yason 17y agoIt seems completely unfathomable to pose for a programming job. It's one of the rare professions where your skills and understanding can be tested very quickly, harshly and objectively. It would probably be easier to lie your way (with mere knowledge and possibly some experience) into the position of a lawyer, an airline pilot, or a medical doctor than a programmer. (At least I hope they don't test doctor applicants as like "Please operate this unfortunate cardiac surgery patient as an example so that we know you'll know how to do it.")
- yanilkr 17y agoIn early stages, aspiring programmers need mentors. It would be interesting to know how many people who consider themselves good programmers, spend a reasonable amount of time mentoring other jr. programmers. Looking back in 7 years, there were only two good programmers I learnt a lot from. I took every chance to read their code and ask them to review my code and pair program with me once a while. I became convinced recently with a new approach to this problem. If you want an artist, pick someone with decent interest to learn art and put a brush in his hand and he becomes a painter. It takes time but this is overall good for the programing community.
- javajones 17y agoPart of the problem here is that not all interviewers can recognize a candidates learning aptitude. Typically the interviewer is so enamored with his own coding style that if the candidate can't mimic his style the candidate is not acceptable. If the candidate does not communicate in the interviewers style the candidate is not acceptable and so on. As well, most programming projects are not about such simple problem solving tasks as printing out the contents of a text file backwards. Of course most people could figure this out and as my experience has been this is when most people think about such issues, when they are required to apply it to a larger problem at hand.
- calebgilbert 17y agoJust to state the obvious but all fizzbuzz really tests for is whether someone is familiar with the modulo operator or not. Arguably any good programmer should know about it, but I think it's not a very comprehensive check on the knowledge of any one particular individual. Suppose for instance, that the only bit of code someone has ever written was something which required them to get very familiar with the modulo operator, but virtually nothing else. They could pass fizzbuzz, but not much else. Note: The author of the 'non-programming programmer post' saw took my comment down when I had posted it there (which is why I posted it here). Guess there's no knocking of the fizzbuzz test allowed... :p
- pavel_lishin 17y agoThe first interview's purpose - whether in person, over the phone, or via e-mail - should be to weed out the obvious idiots. If you don't know what the modulo operator is, door is right this way, operate it by placing your hand around the knob, turning clockwise, and pushing forward.
- calebgilbert 17y agoI've been programming for 3-4 years now, have memorized tons of functions and operators, across a variety of languages, and have never once needed to use the modulo operator for anything, so I personally don't place it at the top of list of priorities for what someone should know. As an employer and interviewer I'm more concerned the person has a grasp on general programming issues and the ability to problem solve than testing their knowledge of narrow subjects.
- donaldc 17y agoSome of this may be due to selection bias. The good programmers find jobs quickly, whereas the non-programmers go to interview after interview, until they finally find a company dumb enough to hire them.
- WorkerBee 17y agoI'm not sure about that article at all, actually. My C++ and Java are very rusty, and I don't think I could do it on the spot if I tried; let alone go into languages like python and ruby that are new to me. But if you gave me a week or two, I know I could get up to speed.