8 ms·
Why Can't Programmers Program? (2007)
- raister 10y agoI believe that students feel that everything is possible to accomplish with a library, let's say, <list>. When you ask them to create a list by hand (using classes or structs), they simply don't know, because they always used the library. This is the plumber analogy: "they know how to connect the pipes; they don't know how to build them."
- 0xmohit 10y ago> When you ask them to create a list by hand (using classes or structs) ... What about asking somebody to write (and compile/execute) a hello world program in a terminal window? I've run across numerous who can't do that without an IDE. Isn't that [1] the most basic part of programming? [1] being able to compile
- Retra 10y agoKnowing what a compiler does is basic knowledge. Knowing how to invoke a specific one from a command line is a matter of culture. It's like the difference between knowing the physics of baseball and the rules of baseball. One is general knowledge, the other is specific to the culture, and knowledge about the later implies very little about the former, and vice versa. You'd probably be better off giving someone the binaries for a broken hello-world and asking them to debug it.
- Retra 10y agoThis is the exact opposite of my problem. If you ask me to use a list, I'll roll my own every time. Ask me to do anything, and I'll go to paper and try designing a data structure. Ask me to setup a web page and I'll probably start designing my own web protocols. :)
- raister 10y agodo you have infinite time?
- Retra 10y agoIf you can't build something yourself, then you won't know how it works and what the consequences of the relevant design decisions are. I do it because my goal is to learn how to do things right, not to get things done quickly.
- ownagefool 10y agoThat's cool, and I indeed like to understand things too, but how do you deliver anything of value to a business if you start of designing a CPU? ;)
- Ideka 10y agoDo you know how that sentence you wrote right there works? Did you create the English language?
- deleted 10y ago[deleted]
- imh 10y agoThis is how I began my career. I fell into programming by way of physics, and for things like sorting I always knew better than to try to roll my own sorting algorithm. Every language has well tested, finely tuned libraries for that! But my job (writing simulation and numerical optimization code) made me program all day every day, so I figured I could program. Boy was I surprised when I started interviewing for my second job and got asked to write code to sort a list. My first thought was "Why would you ever do that yourself! Of course I've never thought about that!" Many years later, I've filled in most of the gaps in my CS fundamentals, and I can't help but wonder if a lot of the programmers we're talking about came into it like I did.
- msie 10y agoI know how to do the fizzbuzz and swap questions but I'm terrified there will be that one "simple" question that I won't be able to do under 3-5 minutes. Sorry, I don't know every trick in the book but I figure things out eventually.
- cbanek 10y agoI'm really conflicted when I keep hearing that programmers can't program, especially in such a high number (199 out of 200). I've done a fair bit of interviewing (on both sides), and while I've seen some bad people, it seems like if 199 out of 200 candidates couldn't write code, then we'd have a lot of out of work coders, since as everyone also complains about, everyone has to write code when doing interviews. Just because someone can't do exactly the type of program you're looking for, or in a particular way, doesn't mean they can't program. It only means they couldn't program what you asked in the way you asked. A fail for sure, but that doesn't always mean what you think. I always like to let a candidate go to their strongest area, if that is a particular technology or problem, or bit of code they've written, because then I know I should be able to ask them deep questions (performance, design tradeoffs) that actually matter on their job, instead of fizz buzz or inverting a binary tree. There's also just the possibility of nerves, or other factors as well. It's fun to follow people on linkedin and keep up good relations even if they're a no-hire, to see if your hunch was right, or dead wrong.
- jasode 10y ago>hearing that programmers can't program, especially in such a high number (199 out of 200). Fyi... that 199/200 quote came from J Spolsky that he got from D E Shaw.[1] That's a hedge fund and like other computational finance firms, they would look for strong programmers who had very good math skills (statistics, probabilities, etc).[2] Therefore, the typical web programmer who knows the difference between HTML tags and CSS selectors, or knows text slicing with Python/PERL, will not pass the rigorous interviews. Using that criteria, it's very realistic that less than 0.5% of applicants would be hired. Another way to put it: those trading firms are looking for math nerds who happen to know how to program more than programmers who happen to know some math. Including them in the general discussion about "what's wrong with hiring" will skew the discussion. Most everybody else is just looking for CRUD/web/iOS/etc programmers. [1]https://en.wikipedia.org/wiki/D._E._Shaw_%26_Co https://en.wikipedia.org/wiki/D._E._Shaw_%26_Co. [2]http://www.streetofwalls.com/finance-training-courses/quantitative-hedge-fund-training/quant-interview-questions-answers/ http://www.streetofwalls.com/finance-training-courses/quanti...
- 10y ago
- carapace 10y agoI taught myself to program as a child, and I didn't know any other programmers until I was around thirty and took my first professional job as a programmer. To me it seems like 60% to 95% of the people employed as programmers should not be. In other words, most people cannot program, even if they are working as programmers. :-( I have no idea what, if anything, to do about this. (It absolutely shocked the shit out of me the first time an interviewer asked me to write fizzbuzz. He had to convince me he was serious. Double-you tee eff, folks.)
- busterarm 10y agoI have a similar background as yourself but I'm not as negative about other peoples' programming skills. What I do find a lot of is that people can write code just fine, but they often just do the simplest thing that they can get out the door, regardless of whether or not they're doing things the correct way. I often find myself refactoring systems that are hard to reason about, where they put something into configuration that still requires a code change to reconfigure, or deploy scripts with internecine external dependencies (bash scripts) when the deploy platform can accomplish the same tasks. Given enough time and guidance I find (almost) anyone can write code, but it's the architecture stuff that's hard and I think it's something a lot of programmers do not spend enough time working on.
- yumaikas 10y agoShould we put a (2007) on this? It is still a relevant subject, perhaps one of the more timeless pieces Jeff has written, but it is from some time in the past.
- wiredfool 10y agoI love how the next article is titled: You want a 10k rpm boot drive.
- johansch 10y agoThis is so weird and arbitrary. Of course if you accept any random person who applies to any job, sometimes because they have to apply to jobs to keep their benefits, yes, you'll see a lot of people who have no clue.
- skybrian 10y agoWhat's changed since 2007? I'm under the impression that interviewing standards are much higher than they used to be. (Sometimes terrifyingly arbitrary, but higher.)
- thedevil 10y agoI like coding questions because I have an easier time then most. That said, I have sympathy with those who struggle with whiteboard questions. Even for an easy problem, you have to context switch to the language and problem type then simultaneously communicate and code, without the environment and tools to which you're accustomed. It's easy to forget some basic concept or misunderstand the question just because you're not in your element. Edit: That being said, there's plenty of developers that can't code. But there's plenty of false negatives in interviews too.
- EngineerBetter 10y agoI'd rather candidates had empathy, a willingness to learn, and an appreciation of testing & CI, than the ability to implement a linked list in under 10 minutes. In over a decade of software development including web systems, games development, command line tools and distributed systems, I've never had to implement a linked list. If you haven't used the modulo operator, FizzBuzz isn't necessarily obvious.
- deleted 10y ago[deleted]
- wasyl 10y agoWillingness to learn doesn't guarantee much. Actual skill is important too, and for anything above complete entry level position I would say knowing what is a linked list or a modulo operator is, well, necessary
- mseebach 10y agoIf you don't know the modulo operator, your claim to be a good programmer is rather suspect, so that's probably OK.
- busterarm 10y agoWhere have you ever had to use the modulo operator in your programming career, especially on the web side of things? Outside of challenges where it's almost required (FizzBuzz), the only thing that I can think of that I've ever used modulo for is to set an upper limit on random numbers. I can probably count the number of times I've needed to do that on one hand and for every one of those I've used several hundred other math functions like abs, floor & trig functions. I don't really do a lot of math in my code anyway. It's one of those things I see how to do in the language when I'm first learning the syntax and then move on.
- mseebach 10y agoI use it all the time to print out a message every 1000 iterations in a loop so I can see what's going on without flooding the output. I suppose you also don't often use division in your non-mathy web work. Despite that, would you think it unfair for an employer to think it reflected poorly on you if you couldn't write code to divide two numbers?
- fideloper 10y agoA majority of my career has been CRUD (occasionally "advanced" CRUD). Ive worked in (and coded non-trivial things) in PHP, Python, node (lol) & Golang. I've learned a ton of server management. I've literally coded a linked list once, years ago, when reviewing an algorithms book (never played in anything more advanced). I don't have a CS degree. Am I a programmer in the eyes of these interviewsers? It feels an awful lot like the answer is "no". And "hope you never get an intense technical interview!" What do y'all think?
- wasyl 10y agoWould you say you would be able to code a simple linked list, with `add`, `get` and `remove` support if asked on an interview?
- busterarm 10y agoThe worst part about these interviewers is that they assume that because you don't know their area that you don't know how to code. Anyone who has cut their teeth on crud apps and server management should be able to figure out how to make a linked list _given specifications_. If a candidate doesn't know the terminology, it should be explained what it does and then I think it's fair to say that someone can build it. They're probably built something related/similar and never realized it. This is a great place for discussion about code! It's an opportunity more than anything. Discounting candidates because they don't know a subset of the vast amount of knowledge we can have in this field is an _interviewer fail_. I think it says everything about the company culture and very little about the candidate.
- vitd 10y agoWell it kind of depends, doesn't it? Linked Lists are a good introduction to the types of structures you'll use in any sort of graph-related problems. If the work you're interviewing for is going to involve a lot of manipulations of node trees and graphs and lists, then you'd want someone who either knows that stuff or seems capable of understanding it. Certainly not knowing it doesn't disqualify you from being "a real programmer" or whatever. If you never use one, then there's no shame in not knowing it. (Though it's good to learn things you haven't used because maybe there are better ways to do what you're doing.) But it's not a flaw of the interviewer to ask questions related to the work the candidate will be expected to do, either.
- pyb 10y agoAll in all, I'd say this 'classic' post was overly influencial. It has damaged to the software industry, and only contributed to making the hiring process more adversarial than it already was at the time. It's no fun being presumed incompetent everywhere you go. More importantly, I have never met any one of these supposed incapable programmers. A better title might have been 'Why Can't Jeff Atwood clean up his recruiting pipeline ?' (Or was he just stressing candidates out?)
- preordained 10y agoIt's hard, man. I think most people who call themselves programmers could write some simple programs or tinker together a really simple app that was fragile and buggy. To do programming _right_, where your software has real impact on people's lives and you can't afford to kinda sorta get it right...that's not something most people have in them. And there are levels to this. I've worked alongside people whose code made me recoil in horror. It's like watching a toddler skipping merrily through a minefield, just no clue how careless they're being. On the other hand, I've worked with others who pointed out things I've done or an approach I was considering, and I've had to blush when they pointed out how I was sprinting headlong into a world of error...but their filter for bad logic was so fine and accurate that many other people wouldn't have thought twice about the work in question. Computers are machines, they're cold and unfeeling and they won't meet you half way...either you've codified your logic and presented it to the computer perfectly, or you lose. In other words, the best programmers may not have to be cold or mechanical in personality, but without fail they can wield logic with mechanical precision--as much as human beings are capable of, anyways. I'm not sure we know exactly what we're asking when we're trying to find the meat bodies who best interface with machines.
- deleted 10y ago[deleted]
- Animats 10y agoWho writes a linked list in Javascript? Or Python? Or even C++? I haven't had to code a linked list since the 1990s. How much low-level knowledge does a programmer need today? There's an old-school approach to computing that starts with explaining binary, then goes on to gates, progresses to a full adder, and goes on to an entire arithmetic unit. Few people need that today. But they probably need to know too much about CSS selectors. Statistics is becoming more necessary to programmers than binary logic. Programming today is following an endlessly churning mess of APIs. (Today's grumble: the author of the serial port library, "pyserial", decided to change the API so that baud rate is set by "ser.baud = N" instead of "ser.setBaud(N)", breaking existing code. This isn't progress, it's faddism.)
- jasonthevillain 10y agoYes. If anything, architecture skills are way more important.
- jean_claude 10y ago>Who writes a linked list in Javascript? Or Python? Or even C++? I haven't had to code a linked list since the 1990s. Neither have I, but I didn't write that bloody circular queue in SPARC-V9 assembly language for nothing! But, seriously, so many interviews are full of these sorts of questions. It's almost like they're trying to hire a reference book... or they don't know how to interview and just use the same sort of methods they were exposed to.
- GreaterFool 10y agoThere has been a recent proliferation of posts raging at even the simplest programming questions. Fizzbuzz? Unrealistic so what's the point? DFS/BFS? When was the last time you needed to write BFS/DFS in real world application? And so on. So maybe it is 199 out of 200.