What distinguishes a good software engineer from a great one?
quora.com
quora.com
When I think of great programmers and think about what distinguishes them from me, I'd say it's probably their experience. The more you do it the greater you become at it. I've never looked at a project and thought to myself "wow I couldn't make that even after 10 years". I always think "I bet I can do it too if I spent the last 10 months working on it".
I have a friend who, when he does stuff, I can look at and say that there is no-way I would ever come up with that. Once I've seen it, I can say that I could repeat that, given some time, but that isn't the same as coming up with the original idea and implementing it really well
That is a great programmer.
"implementing it really well" mostly comes from dedication and attention to detail, in my opinion. And of course, you have to actually care about the thing you're doing, and always keep in mind the user's experience.
"Until a man is twenty-five, he still thinks, every so often, that under the right circumstances he could be the baddest motherfucker in the world. If I moved to a martial-arts monastery in China and studied real hard for ten years. If my family was wiped out by Colombian drug dealers and I swore myself to revenge. If I got a fatal disease, had one year to live, devoted it to wiping street crime. If I just dropped out and devoted my life to being bad." - Neal Stephenson, "Snow Crash".
How old are you, hasenj?
I'm 26. off by one!
I see the point of the quote.
I didn't mean what I said in the naive dismissive attitude that a reckless teenager might have.
I'm not talking about the difference between the lousy and the great. I'm talking about the difference between the good and the great.
I consider myself a good developer, in the sense that I'm not a lousy one. I don't see myself as a great/awesome hacker.
What I'm trying to get at, is that the difference is dedication and experience. Yea I didn't create the first ever 3D game, but I never had the required mathematical knowledge, never had much experience with 3D modeling, nor the dedication to go through with such a project.
Fake it 'till you make it is for social skills, not engineering, and while social skills factor into being a great software designer it isn't even close to the whole story. The computer does not care whether you are faking it, it cares whether you've got it.
Second, there may be casualties along your path. A few projects crash and burn. Nobody is born great. They get there. You can't get there without experience. That's definitely on the list. The only way of gaining experience that I know of is through failure. The more catastrophic, the more you learn.
You beat me to this list of qualities. The only minor disagreement is that brilliance shows up only after a good developer, who embodies your list of qualities, follows his/her interests and gets really familiar with a couple areas of the field. As an example, someone who enjoys hacking graphics at a low level will eventually become great at that area, but may be only good at language design.
Our field is too broad to be great at everything.
I prefer simple tests:
Bad programmer: It can't be done.
Mediocre programmer: It's never been done.
Good programmer: It can be done.
Great programmer: It's done.
Somewhere in there should also fit, "Let me teach you how to do it too."
In your personal open source project or side projects you can afford to be experimental and push the box, but when you're in a business setting, you need to balance the need to ship with the desire and drive to be experimental and solid. Get from point A to point B balancing risk, reward, and speed.
I loathe engineers who produce complex, unreadable code and have enough nerve to call that "cool". A great programmer knows when to refrain from saving two lines of code to spare the next person two hours of debugging.
Programmers needing wingmen that clean up after them are in my opinion simply jerks. It's a sign of disrespect towards their coworkers and a sign of a lack of an important skill.
I have met a few and know of a few other great programmers - the ones who do the work of 5-10 lesser programmers - who exactly fit this description (and some that don't). Either way, if you have one of these guys you shouldn't mind having to pay for a minder.
Guys like this are common in the games industry, but I've met a few working in other fields.
I have found that these programmers tend to be idolised and adored by the rest of the coders: good programmers tend to appreciate great craftsmanship. Plus, everyone ups their game in the hope that some of the magic will rub off. It's also easy to take a few clever risks if you have one of these guys standing behind you.
Kinda funny that Yelp's on this list; I see their office everyday as the elevator passes by on the way to mine, -and- they've one of the worst apis ever. haha