8 ms·
What Level Programmer Are You?
- Erwin 15y agoI think this might be more accurate: http://www.infiltec.com/j-h-wrld.htm http://www.infiltec.com/j-h-wrld.htm
- uberPhil 15y agoI personally don't like the idea of "levels", especially with programming. IMO it adds to the "I'm better then you cause I do xyz code" mindset which seems to get adopted more and more each day. It actually almost turns me off and makes me not want to participate in the community. Perhaps that mindset is more common among those in the valley or other tech "hot" areas. But around here, Washington DC, if you know People Soft and SharePoint you can easily command a salary ~130k salary. Knowing how to write your own Ruby implementation or js library gets you pretty much nowhere. /end My first HN comment :)
- deleted 15y ago[deleted]
- Maro 15y agoSo you're saying that Washington DC and Silicon Valley are different bubbles. @uberPhil: I'm in Hungary, so I'm not a bubble boy =)
- uberPhil 15y agoPretty much.. But my bubble is better then your bubble! :). FWIW I am a "programmer". This list also doesn't take necessity into account. Is "A" programmer better then "B" programmer if "B" programmer has never had to derive their own programming language while "A" programmer had this requirement or need? This entire concept is just silly to me.
- steve8918 15y agoActually I've found that in Silicon Valley, no one cares about quantifying programming levels, and care more about what you did and what you know. When I applied for jobs on the East Coast, they all seemed to want things like GPA (even though I'd been out of school for 15+ years), and especially results from programming tests like Brainbench.
- kenrik 15y agoI know SQL/.Net Gurus that have never made anything for themselves. Destined to live in Corporate IT forever drudging along day to day. Just because they reached a certain level does not guarantee they will ever make something meaningful, What a shame.
- brildum 15y agoIf you increase your skill/knowledge that doesn't hinder your ability to use PeopleSoft/SharePoint. It certainly expands your options. While you can get a good salary using those technologies, eventually they will be obsolete. When that happens, we'll start to see news stories posted on some future-HN about how older IT workers are being passed up for younger, fresher IT workers and how it is a biased industry. When in fact, its just a group of people who decided that sitting in their comfort zone doing their day-to-day was good enough and when it was time to move on, they couldn't find any other jobs that fit their particular niche they'd had for the last decade(s).
- uberPhil 15y agoOr it could just be that the younger crowd is using the tech that is popular today, therefore they are in higher demand. 10 years from now some next best thing will replace Ruby and the cycle continues.. As in my original post, the issue I have is the concept of knowing how to write your own language being considered a HIGHER skill then someone knowing Sharepoint or visual basic in depth. Who's right is it to say that my particular skill is better or higher then yours..
- brildum 15y agoKnowing how hardware works, how languages are compiled/designed, how libraries are architected. It can only increase your knowledge of [insert technology here]. I think you're confusing "Levels" with A > B (A is better than B) when in reality the point is that: A comes after B. You must first understand B, then you can move on to the next level in your path of understanding programming.
- darxius 15y agoI think it's difficult to group up knowledge like this. I read through the levels and found that I had bits and pieces from different levels, meaning the whole system sort of failed me. Levels work in a structured environment. Programming and the learning of programming is far from structured.
- Maro 15y agoI think Donald Knuth, who must be placed at the Mystery Level, never went through the functional phases. http://homepages.cs.ncl.ac.uk/m.j.bell1/blog/?p=49 http://homepages.cs.ncl.ac.uk/m.j.bell1/blog/?p=49 DK on the subject of functional programming: “Out of the ~250 programs I wrote last year, 2-3 would have benefited from being written in a functional style.” DK on the subject of functional programming: “With 1 or even 2 hands tied behind your back it’s hard to do anything dangerous.”
- agumonkey 15y agoIMHO, when you reach this kind of math level programming, you do functional programming with indexed n-dimensional arrays.
- derleth 15y agoKnuth is a competent mathematician, though; that's closer to the core of functional programming than most languages get.
- jebblue 15y agoI'd like to know why the LISP/Clojure/JavaScript functional crowd is so enigmatic. Knuth is a genius.
- amishforkfight 15y agoSo I'm a 4.5, that's nice to know.
- mrspeaker 15y agoI think there should be a level "I believe I've reached a level where I can speak wisely about programming ability". Followed by the "Oh, oops. Now I see I STILL know nothing" level. ;)
- DanielBMarkham 15y agoOf course, the problem here is that by making that statement, you are both trying to wisely speak about programming ability while still claiming it's mostly unknown to you. Both bases effectively covered. Score! :) It's just a blog entry with observations. I make no claim on being an expert or creating the next standard. Just throwing some ideas out. I knew this would generate a bit of a stir on HN, so I thought it would be fun. What can I say? I like putting out ideas and having people throw rocks at them. If the criticism is poor, then I know I'm on to something. Having said all that, I think there is a level of symbols, symbol assembly, and abstraction involved, even if I did a poor job of grouping them together for this entry. Writing your own language is dealing with a problem from about 3 or 4 meta levels away. It's nothing like simple scripting. There has to be some kind of natural level involved there. EDIT: I restated the programming levels in a really short list posted to HN here: http://news.ycombinator.com/item?id=3562422 http://news.ycombinator.com/item?id=3562422 I think this might be a case where more words are worse. That is, by providing concrete examples it just gave people a bunch of stuff to complain about. Hopefully the follow-up put it in generic enough terms to be more tractable.
- uberPhil 15y agoI'm sure those who have wrote complex scripts would probably disagree with you. Do you know what writing complex scripts in equally complex environments entails? I sure don't, therefore it makes me sufficiently unqualified to determine "meta levels" (whatever that means) for that skill. Unless you are deeply familiar with both, i'm not sure how you can say one is higher then the other.
- encoderer 15y agoComplex scripts? I hit the "reply" button to tell you that no, no amount of "complex scripting" is as mentally challenging as developing a Turing complete language. But maybe you mean scripts as any program? In that case, I agree that developing things like, I don't know, database engines and file systems and such are equal in complexity to developing a language. I suppose the only caveat is that those things are usually teams -- sometimes huge teams. A language is often a 1-man or small team effort.
- pilot_pirx 15y agoPersonally I see this as a permanent cycle where I'm on different levels for different things all the time. With some languages I'm on a high level, with others on a low one. Even within languages I know very well, there are parts I didn't use that much. Same for many other things like commandline tools, frameworks, api, databases. Often enough I go down on a lower level and for example work through a beginners tutorial just to have a reason to use a few things in Ruby on Rails which I don't use often enough in everyday work. Or simply to go through the cycle of setting up a developer machine with rvm, RoR, some gems, git, github. All this more as a kind of programming kata than because there would be any need.
- itmag 15y agoI would say I'm close to 7, with a lot of peeking ahead toward levels 8 and 9. It's an interesting way to look at prowess. Instead of looking at specific languages/technologies, we look at the progression of understanding. Ie how rich, efficient, and effective the programmer's mental model is. What's a good salary aspiration for someone at this level who's situated in Sweden? I am currently making nowhere NEAR the ludicrous fantasy sums (ie $100k+) that you Americans consider to be a human right but I'm thinking I could aim higher. Maybe I could use this level-based thinking when discussing salaries with employers?
- kahawe 15y ago> I am currently making nowhere NEAR the ludicrous fantasy sums (ie $100k+) that you Americans consider to be a human right but I'm thinking I could aim higher. When comparing USA and €U salaries, you always have to factor in all the things you basically get for more-or-less free like complete medical care which you are paying ridiculously little for, way less than the amount of money you actually need in case of a serious illness - plus social insurance, more than twice as many vacation days than the average USA employee who just started out, plus way more restrictive labor laws, plus some sort of retirement money the government pays you (at least still for now) and paid sick leave. Then factor in the money USA employees have to spend to "keep up" with the on-average higher working hours - ever wondered why there are so many convenient services for practically everything in the USA that we Euros can only dream of? And ultimately you have to factor in costs of living in the valley or surroundings which are way higher than over here and way higher than in most other places in the USA. Ultimately, I think this level of proficiency might be hard to sell in an interview because employers care about what you can actually do and if they want a Java or C genius, then they probably don't care that much that you could "write a library" but have no working experience in the languages they are requesting. But if you can plausibly sell them on your broader view and understanding of all things IT, ideally backed by some sort of study and degree, that might work but I am sure it would also depend on the position you are applying for. You want to make close to or more than €100k as a programmer/it-expert in Euroland? Shouldn't be too very hard, either find a fantastic niche and work it and/or combine that niche with consulting work... I think the unfortunate truth is that unless you are some sort of coding rock star and/or become technical lead or something like that, just being good at writing lines of code in an arbitrary language isn't such a highly paid job anymore. Make that some obscure language for a very specific system, ideally serious-business system, somehow directly business/profit-related and all of a sudden you have leverage. A lot of the old host neckbeards are retiring or, excuse me, dieing out and I have to yet see a bank or stock exchange that runs completely without those old "legacy" systems and has successfully migrated 100% away from them. So, time to polish your COBOL and what-not skills, get some working experience there... I am sure you could find a LOT of happily paying customers with all sorts of software running on some host system and they no longer have anyone who knows what is going on. Or look into the myriads of software systems surrounding banks and stock exchanges in general. It's all just some software and a lot of it is pretty damn terrible but the prices customers have to pay for using it and for support is still ridiculous plus you have a niche with lots or a couple of customers pre-made for you. If you like working as a consultant and carrying all the risks and benefits, then 5-figures a MONTH aren't a fantasy or wishful thinking but of course you are giving more than just your work and you are "paying" in other ways. Just don't expect you will be making more than €100k just because you are so much better at LAMP than Johnny at age 16.
- eykanal 15y agoI disagree with the premise of this article. By trying to differentiate the different "programmers" by nothing other than their skill, he is ignoring the fact that you simply shouldn't group together low-level chipset programmers with PHP programmers with LABview drag-and-drop-individual-components programmers with computer scientists who also happen to be programmers. These people are fundamentally different, and trying to say that they are all the same and only differ in "programming experience" is fundamentally missing the boat on these distinctions.
- bigtech 15y agoAgreed and to expand on this, there's a big difference between the advanced architect who takes a year to build an incomprehensible framework, and the multi-paradigm programmer who solves problems efficiently.
- cube13 15y agoI agree completely. I work on high performance C API's. Most of the code I write is as close to the silicon as possible because of that. So where am I? Not level 7, because our OO design doesn't have the performance we need. But I've never done anything in the web space, which means I don't actually qualify for level 1.
- gomphus 15y agoYeah - to put it another way, ordered, general criteria like these will rarely be fit for the purpose of selecting the best coder for a given job. They place a huge premium on showing the widest possible diversity of knowledge, whereas what makes many programmers world-class is that they offer highly specialized skills for dealing with highly specialized applications, with which they have huge experience.
- tnuc 15y agoI am always a bit perturbed by lists such as this. I have worked with people that would be categorized as a "script kiddie" and the work they put out is far more useful than what has been done by someone who has a doctorate in computer science. I'd much rather employ someone who can get stuff done rather than someone who knows everything yet does next to nothing. The man driving the delivery truck is a lot more useful than the worlds best nascar driver. My level: Some days I wonder if I am even a level 1 by this list.
- LargeWu 15y agoMy advice to you: stop taking it so seriously. It is just meant to be a metaphor for one's skills evolving from the concrete as a beginner to acquiring the ability to think more abstractly as your skills improve.
- agumonkey 15y agoWhere does Chuck Moore would fit there ?
- michaelochurch 15y agoSeems naive. I came up with an engineering scale that I think is pretty solid, at least over the 0.5 to 2.2 range. http://michaelochurch.wordpress.com/2012/01/26/the-trajectory-of-a-software-engineer-and-where-it-all-goes-wrong/ http://michaelochurch.wordpress.com/2012/01/26/the-trajector... . I'm only about 1.7 so beyond about 2.2 I had to start using "bigger and badder" type definitions because I could only delineate those levels based on visible accomplishments, not experience or observation. Also, it's more of an "liberal arts" engineering (adding value to organizations) than one focused on domain-specific programming capabilities, which are still important but much harder to measure. You can become a 2.0 engineer in artificial intelligence, or in front-end web development, or in embedded device development and the processes of getting there are rather similar. Being a "good programmer" in each discipline is different. What OP's system describes is the progress from a novice (0.5) to a competent adder (1.0) to a general-purpose multiplier (2.0). Most serious programmers are between 1.0 and 2.0, so the growth process is about becoming a multiplier. At 1.1, you start automating annoying tasks by writing scripts. At 1.4, you're starting to become aware of the need for language-level support for code reuse and complexity management, so functional programming becomes attractive. The 1.5-1.7 range is when Lisp's language-oriented features (macros) start to shine. Most 2.0 programmers are cautious about when they use such things, though. Yes, DSLs can be very powerful; they can also be unmaintainable, miserable cruft-piles. Being a great (2.0+) programmer is about adding the most value though team- or company-wide multiplier effects, not being clever. Often, you add the most value by designing systems so simple and elegant that they almost insult the user's intelligence (in a good way). Functional programming is a shibboleth of good (1.5+) engineers because it's usually what they first learn as they break through the 1.2 ceiling observed in Javaland (since Java and enterprise programming actively work to prevent people from having multiplier effects). And pretty much every 1.5+ programmer knows what functional programming is and what its rules are (and when to break them). That said, it's not a strict rule that to reach or surpass 1.4-1.5 you have to spend X amount of time using functional languages.
- j_baker 15y agoYou know, one thing I like about your system is that you aren't at the top of it. I have to question peoples' motives when I see an article like this where they're clearly at the top of the hierarchy.
- jbooth 15y agoThe levels in this article kept moving towards higher and higher levels of complexity (writing your own DSL), while in my experience, getting better at my job has resulted in writing code that's less and less complex. I used to refactor things into inheriting models with overridable behavior, etc if it could save me from repeating myself. Now I just copy/paste code when it's appropriate, and it's way easier to maintain. Key word is appropriate.
- analyst74 15y agoI totally agree. In most programming projects, the most important thing is maintainability, and that is relative to the skill of the maintainer. If the maintainer is going to be junior developer, then writing complex OO design is not good, even if it makes the program more concise; if the maintainer is a business developer who is not good in math, then crafting non-trivial algorithms will throw him off, even if it means shorter program; if the maintainer is smart and willing to learn, then you can do whatever.
- pooriaazimi 15y agoI think his levels are really stupid. I can write functional & OO code somewhat well (in dozens of languages (Java, ObjC, C++, Scheme, ...) - in 3-4 of them I'm more experienced but with the help of StackOverflow can do almost anything I want, given a few hours time), read/write bash scripts, can (and do) write iOS/Mac GUI applications, can use PHP and Ajaxish things, have good experience with MongoDB/MySQL and a lot of other things. I use OS X Terminal.app regularly and have no problems doing tricks with bash (from piping to xargs'ing); But, I spent almost a whole day a few months ago and couldn't install an OpenVPN server on a linux machine. I just couldn't. I knew about IPSec, and that I must create exceptions in the ipfw for this thing to work, etc. but it wouldn't work, and I didn't have a single clue how to fix that mess. So by his test, I wouldn't even pass the first level... You could be good at some aspects of programming and weak at other aspects. Programming is a multi-faceted art. You don't start at level 0 and move up; You learn different parts of it simultaneously.
- deleted 15y ago[deleted]
- blhack 15y ago"Programming ability" absolutely does not fall onto a linear scale, it's an n-dimensional vector.
- itmag 15y agoProgramming ability == quality of mental model, IMHO. A mental model is essentially a map, and there are many types of maps. More on this: http://esr.ibiblio.org/?p=316 http://esr.ibiblio.org/?p=316
- m0th87 15y agoThis same idea seems to crop up every month or so on HN, and it just seems like ego stoking. My friend is learning to program with a functional language. Does that automatically shoot him up to level 9?
- matwood 15y agoWell it's part ego stroking and part just a normal wondering of how one stacks up to others who do the same thing. For me it's also part learning experience. For example, I know Carmack is a much better programmer than I am, but having never seen him program or his process it's hard for me to put it into concrete terms other than he's better. But what does better mean? Faster, more creative, more X? Knowing the details of better is how I can build a plan to improve. I also liken the fascination with ranking to when I thought I was pretty fast running a 5 second 40yd dash. Of course I had read about or seen sub 5s of other people, but until I finally ran next to a D1 track athlete it was a foreign concept just how much faster he was. Once again, putting something into concrete terms helps people understand where they rank.
- kahawe 15y agoI think the only "level" you should really care about and isn't on that list: being fluent enough on all systems, APIs, libraries and infrastructure you are connecting to or using so you ultimately do not really care all that much which language you are programming in, on which system and OS and even if you didn't know the system or language all that well to begin with, you would still manage to become fluent and productive in it in reasonably short time. It takes experience and some understandings of the fundamentals of computers, software and networks and some curiosity and will to find things out and better yourself but if you want to be a programmer and even work as one, then this is what you should aim for... be "fluent" enough on (almost) all OSI layers so you can figure things out and understand what is really going on and whatever very-specialized knowledge will be required at a certain point in time, you will be able to figure it out and pick it up along the way because you will have the broader overview and understanding to connect things. Level 5 sounds close but still too limited still.
- user24 15y agoReminds me of the classic Programmer Competency Matrix: http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm http://www.indiangeek.net/wp-content/uploads/Programmer%20co...
- joshuahedlund 15y agoI think the most interesting element was the idea that as you become more abstract you get a target audience of those who are less abstract. Sometimes it seems like programming (with the start-up space in particular) is a kind of pyramid scheme where you advance to create nicer tools for the people who are less advanced. Of course there are plenty of other ways that start-ups and programming are not like that, but it's a really interesting lens through which to view a lot of the news that is popular on HN.
- MaysonL 15y agoSomehow this seems like saying that Paul Erdös, John von Neumann, and Andrew Wiles are different levels of mathematician. Not a productive endeavour.
- tete 15y agoI don't really get this stuff. Building stuff that's considered to be hard are actually the things I learned when starting out with programming. Things like a driver, a boot loader, a compiler aren't things that are harder than any other piece of software. Of course everything gets hard when you go beyond the basic stuff, but I never got why people that program in C++ or Java (usually) tend to be so arrogant when it comes to these things. Assembly isn't hard and building an interpreter or compiler also is pretty simple. The thing that's really hard when programming is the "maintenance" stuff. Be it a web application, an operating system kernel, a compiler, video game or an IRC client. Implementing the feature itself usually isn't that hard. Fixing bug is, finding the right balance between performance and simplicity is too. Oh and progressing without breaking API or ABI compatibility. It usually not important what paradigm you follow. I myself like languages like Perl, where I can choose what way I want to go. Also functional programming languages like Haskell are awesome for building interpreters, but really I consider Assembly to probably be the easiest language there is and everything should start with it, especially C or C++ programmers, because it will prevent you from making assumptions that are wrong and prevent stupid code. Also looking at different languages is fun and everything that is considered hard is usually lots of fun. Haskell and Assembly are the best examples. About research. If you don't do the same thing over and over it's always a way of researching things. Most people building awesome stuff are people connecting things that haven't been connected by now. What I want to say in short is that I don't see how these "levels" can ever fit to anyone. Also I don't get what paradigms and well, everything thing listed fits the term "level". It's about what I thought when I had even less of an idea of what programming is about. I am still exploring stuff and am a complete beginner. I never had a serious project. I just hack (as in writing bad code) some scripts together. Disclaimer: I know I am a bad programmer, if you can even call me one at all. I have a very idealistic view on things.
- jimbokun 15y ago"Building stuff that's considered to be hard are actually the things I learned when starting out with programming." Maybe it's not harder than other things on the list, but the author is saying that this order is the most common progression for programmers in his experience.
- verelo 15y agoThe first few levels make sense, but beyond that unless the author is the highest level described here i have to ask if this is a prediction or a description of their experiences?
- PaulHoule 15y agoI don't accept that there's one track. I know scientific programmers who still use FORTRAN and write incredibly fast programs in a domain that's much harder to get things correct than you think. On one level these people are "geniuses" but many of them would be completely lost if it came to object-oriented programming or relational databases. As for the computer scientist, he's an odd animal. I remember a time when I got a program that did something almost magical from a guy who's a household name in machine learning and CS instruction. It turned out this program crashed before getting into main()! On close inspection the problem was that he was allocating a huge array statically that he never used! This worked OK on the 64-bit monster he was using, but would kill any 32 bit machine. My experience is that code written by computer scientists is very rarely suitable for commercial use because computer scientists usually aren't professional programmers. They get rewarded for writing papers instead of writing programs, so a succesful endpoint for them is producing some artifacts that would demonstrate how the program would have worked if it really worked.
- tomkin 15y agoI think in an effort to categorize himself, the OP has created layers of knowledge that only apply to him. Personally, my expertise slides up and down all of these types, proving you can't really nail this one down. There are going to be those who write to automate, write for design sake, write for scale, etc. Even saying that is a bit of a misnomer because there are so many facits that incorporate one or many of those functions.
- darkmethod 15y agoIf I ignore the rating system in this post, I see this list as an exercise to acknowledge my strengths and recognize where my weak points are. Doing so, I came up with a list of areas to explore in the near future.
- jasonkester 15y agoWhile this article doesn't help at all to classify programmers, it's interesting in that it gives a good insight into the author's approach to computer programming. It's a very book-oriented, "teach yourself how to program computers, then program them" way of looking at the sport. It's what I'd expect to see from a CS major who'd never programmed until he hit university, or possibly a history-major-turned -programmer who learned his trade through those big red Wrox Press books with 24 authors on the cover. My personal path never intersected this curve at all. I (and I suspect a lot of other folks) came up the Tinker route, being given an Apple II or C64 as a kid with no games on it and needing to find the shortest route to get games written so that you could play them. Every exposure to a new technology (with a new thing that needs accomplishing) gets met with a new batch of playing around with it until it all makes sense, then on to the next thing. Windows programming, web development, database stuff, OOP, functional programming, and everything in between, but never with a plan or anything resembling any of the "stages" the author describes. Even now, 35 years in, I can't find a place on that scale where I fit. I bet there are a lot of programmers out there in the same position.
- DanielBMarkham 15y agoAuthor here. The funny thing is not that you're wrong about me, it's how completely wrong you are. I'm self-taught, and started programming Commodore Pets under PetBasic with, woohoo, 4K of RAM and a cassette tape. Wrote my first contract program when I was 16, on an Apple II. I had written my first game a few months before that. I think I had four college-level programming classes in my early 20s. That's about it for formal training. I'm very much a tinkerer. But you're right about the books. Being self-taught, I had to voraciously read, especially starting out. Since I ended up doing this for a living, and since everybody else had the advantage of a college degree, I felt very much under the gun: learn or starve. I read like a maniac. I don't think people "fit" in the scale in any one spot. Different jobs require different skills. Much more interesting (to me) is if folks understand the levels and are able to work as needed in them. So far the comments look very much hit and miss, which was about what I expected. Interesting analysis, though! I appreciate the feedback on how I sound.
- brd 15y agoReading the comments, theres a lot of disagreement (for some valid reasons) but this list is getting more hate than it deserves. If you consider that the MAJORITY of programmers are essentially corporate code monkeys this is actually a very accurate list. If I read this list and then apply its rules to the average programmer at fortune 500 companies it is almost perfectly accurate at measuring the least to most talented programmers I've worked alongside. In the corporate world, the bulk of developers fall into one of the following groups: guys who can barely modify a custom report, guys who can write a report, guys who can create a basic CRUD class for reuse across reports, guys who can contribute to a complex application, guys who can design a complex application, and then the guys who are hired to create the tools/languages that are leveraged when creating complex applications. There are obviously many areas of programming that do not fall under these definitions but the AVERAGE programming (i.e. average corporate developer) probably fits very neatly into one of these definitions.
- drostie 15y agoI was curious about something a former boss told me. He had been a programmer before he had been a manager, and he said, "oh, you haven't written a compiler yet? When you write a compiler you graduate to a whole new level of programming." I have learned Lisp and in that sense I have graduated to a new level, although I've still not used it enough to make macros an everyday joy. I still prefer JavaScript and I am going to learn some Ruby and some CoffeeScript. But I have no idea what writing a compiler gets you, so if anyone wants to tell me about it, I'd love to hear.
- rachelbythebay 15y agoThis seemed oddly familiar, and sure enough: http://michaelochurch.wordpress.com/2012/01/26/the-trajectory-of-a-software-engineer-and-where-it-all-goes-wrong/ http://michaelochurch.wordpress.com/2012/01/26/the-trajector... What I said when that hit HN still applies. Treating the creation of yet another programming language as somehow being the pinnacle seems like a bad idea.
- 6ren 15y agoI like how programmers target other programmers at different levels (and also that the more advanced you get, the more able you are to target less skilled programmers). Not sure that's fully correct, and lots of details to disagree with, but I appreciate this point of view. An overall objection: though it does both, it focuses on coding solutions rather than understanding problems. While there's a case for defining a programmer as "someone who programs", to me, understanding the problem (aka asking the right question) is the difficult bit (see Douglas Adams).