7 ms·
What Makes A Great Programmer?
- jleyank 15y agoSomebody who delivers sh*t that works, on time and under budget. The code is robust and can be maintained, with extra points and gratitude if it's well-documented. Oh, and said code both scratches an itch and solves an important customer problem. As Joel said: Smart, and Gets Things Done.
- njharman 15y agoCommunication - if you can't talk* about solutions and translate them into code that others can work with, learn from, maintain, etc. then whatever else you have doesn't matter. Your impact will be limited to that you can directly touch. You will never be great. * "talk" most of the time means "listen and understand".
- j_baker 15y agoThe best programmers that I’ve known put people first. They’ve realized that the software that they’re writing is for people, even if it’s just the back end of a complicated system or a protocol that no one but other developers will ever use. They write documentation because it’s important. They help people use their code. They’re willing to work extra and deal with a bit more complexity to give the people using their software the right solution. I always get a bit irritated when people make the "people first" argument. It's not that I disagree with putting people first. It's just that "putting people first" always seems to mean "being a good cog in the machine". There's more to putting people first than writing documentation and explaining your code to other people. Those are important, but they mean putting the task first, not the people. To put people first, you have to do things like: listen to others, empathize with them, use tact, compromise, and occasionally do something impractical for no other reason than to help work suck a bit less.
- gaius 15y agoOn the other hand, you can always tell software that was written (and/or bought) by someone who knew they'd never have to use it themselves. It's why most corporate software is so bad: it's written by someone who really couldn't care less about General Ledgers, and it's bought by the CFO who has staff to actually operate it.
- pgroves 15y agoI'll throw in my favorite under-rated characteristic of good programmers: the ability to throw away code you've worked hard on. Sometimes code that is well written, tested, and documented just isn't needed anymore or doesn't fit with new changes to an architecture. The pros throw it out without a second thought. Many programmers find it hard to let go and it causes serious bloat to a code base.
- sn 15y agoThis is why we use version control.
- apalmblad 15y agoWhile tools may not make a great programmer, tools do make a great programmer more effective. In fact, I'd say passion (I'd prefer a different word, but need something stronger than strong preference) for tools is a trait of great programmers. And sure, the desire to optimize one's toolset comes from deeper motivations, but I think a better programmer is, among many other things, one who never passes up on chances to improve productivity through better tools. I kind of like Rand's take on the subject: As an engineer, there is a short list of tools that you must be rabid about. Rabid. Foaming at the mouth crazy. [http://www.randsinrepose.com/archives/2009/11/02/the_foamy_rules_for_rabid_tools.html http://www.randsinrepose.com/archives/2009/11/02/the_foamy_r...] And sure, there isn't going to be a single set of tools for every programmer and every workflow, but good tools and a thorough understanding of them are something I would expect from a great programmer. I agree with most of the author's points, and don't want to at all suggest that becoming a vim wizard will on its own make you a great developer, I guess I'd hate to discourage anyone from seeking "text editor zen".
- known 15y agoAs per statistics, many of the great programmers are introverts.
- vegai 15y agoI would like to add something that everyone seems to have forgotten. A great programmer has a significant life outside the field. Additionally, and I don't know if it's just a coincidence, but the best programmers I know are fluent at least in one musical instrument.
- mcrittenden 15y agoAssuming a "great programmer" is one that writes good quality code, then I don't think tools are necessarily about making you a great programmer, I think they're more about making you a faster and happier programmer. I would probably write the exact same code in nodepad as I would in vim, but I could probably write it in significantly less time in vim, and I would be much happier and less frustrated along the way.
- pspeter3 15y agoI agree but I think people confuse happier programmer and better programmer a lot of the time.
- analyst74 15y agohappy programmer and better programmer do have high correlation though -- as better programmers tend to have more leverage on their environment to make themselves happier.
- pspeter3 15y agoTrue, but the issue is that what defines happy is up to the individual programmer and articles that try to define it just lead to generating debate, ex. vi vs. emacs.
- neduma 15y ago" It's not really enough to solve the problem. We have to have the pleasure " - DHH, 2011 Railsconf, Keynote Should this trait has anything to do with it?
- commondream 15y agoThe way pleasure factors into great software development is super interesting to me. I don't think you can be a great programmer (and I have to say I have no clue where I'll fit on the scales of developer skills) without loving what you do, but I have known programmers who love it and weren't necessarily all that great at it when I knew them, because of how early things were in their career. Who knows if they'll be amazing at 30 or 45 or 80, though?
- deleted 15y ago[deleted]
- jwdunne 15y agoAs I said in the comments on the blog, I don't think it's the tools, it's how you use them. This extends to languages too.
- lpolovets 15y agoThere's a great Quora page about this topic: http://www.quora.com/What-distinguishes-a-good-software-engineer-from-a-great-one http://www.quora.com/What-distinguishes-a-good-software-engi... The top answers on Quora offer a lot of food for though.
- gaius 15y agoOne more characteristic: fearlessness. You have to be able to not only start, but commit to completing, a project even tho' you've no idea how to do it. You have to have that faith that you are smart enough to learn on the hoof, and you have to have the courage when you realize that you've written a ton of code already, when you realize you're heading down a dead end, to just delete it all.
- neduma 15y agofearlessness - come to think of it, Git makes developer fearless while deleting current version code and put some new twist to it. cause you can go back to it whenever you want it. and git is a tool like vim.
- gaius 15y agoWith Git you can branch, try something, then abandon the whole branch if you want to, it's pretty sweet.
- pagekalisedown 15y agoDelete only after you have a copy under source control.
- gaius 15y agoIt's not the physical act of deletion that matters. It's the psychological act of abandoning something you've invested time and effort in when you realize it was wrong, and not looking back.
- gruseom 15y agoI couldn't agree more, both about fearlessness and about deletion. The only thing worse than deleting a ton of code is not deleting it. Without ruthlessness there is no containing complexity. How many software projects are run this way though?
- wccrawford 15y agoCourage is far better than fearlessness. Fearlessness means complete lack of caution, since nothing is feared. Plunge forward without any thought of safety. Courage, on the other hand, means paying attention to the dangers and going forward whenever it's not a mistake. Having said that, fearlessness can be the correct attitude when dealing with situations that are extremely risky from the start, such as startups. I've actually worked on a project that had the owners approached me at the start, I would have told them it was impossible due to various concerns. It turned out to be massively successful and they created a new niche, but only by rushing head-first into it and refusing to stop.
- stcredzero 15y agoIt seems as though the programming field is in a bit of a bind because, odd though it might seem, it has been difficult to be empirical in our approach to our field. The programming domain is very complex, so there are considerable difficulties in implementing empirical approaches. Proprietary development often entails a degree of secrecy, so a lot of data is not available to be shared. There is even debate along the lines of what is valuable to measure, or what can even be measured. One is reminded of many social sciences and psychology, or even medicine prior to the scientific revolution. What is holding programming back from the degree of empiricism found in a field like mechanical engineering? Is it that it's hard to fund or even structure meaningful experiments? Should someone be developing non-ferromagnetic monitor/keyboard sets so that we can study programmers of different levels of demonstrated ability with their heads stuck inside MRI machines? (Such research has been done with piano virtuosos playing on electronic keyboards and rappers.) http://www.ted.com/talks/charles_limb_your_brain_on_improv.html http://www.ted.com/talks/charles_limb_your_brain_on_improv.h... Another thing I'd note, is that a lot of debate about programming is word salad full of reasons why you can't say X or Y. There seems to be a lot of the Epistemic Viciousness that exists in martial arts schools. http://lesswrong.com/lw/2i/epistemic_viciousness/ http://lesswrong.com/lw/2i/epistemic_viciousness/
- j_baker 15y agoNot everything that counts can be counted and not everything that can be counted counts. - Albert Einstein I don't think programming is necessarily unique in this regard. As with any other profession, there are things that can be measured, and things that you just have to trust your gut on.
- gruseom 15y agoThis does not sound like something Einstein would have said. For one thing, it's a play on words in English. Let's see what the google has to say... Edit: yep. It comes from Informal Sociology (1963) by William Bruce Cameron. Never heard of him? Me either. By the way, this the first time I've seen quoteinvestigator.com come up in the search results. That's welcome; it's a great site. If you like this kind of thing, check it out. http://quoteinvestigator.com/2010/05/26/everything-counts-einstein/ http://quoteinvestigator.com/2010/05/26/everything-counts-ei... p.s. fully agree about the barriers to empirical study of programming.
- run4yourlives 15y agoMy brother took a Python class his Senior year of high school The best I got out of high school back in the early 90's was an "Intro to Computer Programming" using Turing[1], of all things on a Macintosh Classic. Of course we didn't have the internet either back then, but I digress. You guys are so lucky to be growing up post internet. :) [1]: http://en.wikipedia.org/wiki/Turing_(programming_language) http://en.wikipedia.org/wiki/Turing_(programming_language)
- commondream 15y agoHe took it at a college as part of a program where kids got to take a few college courses while still in high school. We didn't have any computer science while I was in high school, and my family didn't own a computer until halfway through my sophomore year, so a big chunk of my high school programming was BASIC and assembly on TI calculators.
- wccrawford 15y agoWhen I was in high school, the local college didn't have any programming classes at all. The closest was how to use Excel. I have to agree that you guys are lucky to be growing up post-internet. (For fun, I just checked and they now teach C++, VB, Java, PHP and SQL.)
- Aga 15y agoWhile I agree with the main points of the post, I'd like to defend learning proper tools. Even if a good text editor like vi won't make you a great programmer, it most definately will make you a better programmer! First, you'll be more effective and thus achieve more. You can squeeze more refactoring and trying out different things when you are more efficient. This could lead you becoming great at some point. Second, it's about your mindset. Programming is about automatizing and a great programmer should aim for the highest achievable level of automation. Why should your tooling be left out of the equation? With proper tools you can automate more. If a developer has more then 1 year active developing to do, learning e.g. a good editor will pay off.
- sn 15y agoHaving used xemacs for quite a while now, I'm finding visual studio to be more effective for following convoluted code. But maybe that's how the code got convoluted in the first place. Perhaps there's something to be said for less capable editors.