
Ask HN: what makes a good developer? - QuoVadis7
Short version:<p>What makes a good developer? What can I do to prove that/learn if I’m a good one? (also with regard to hiring decisions)<p>Longer version:<p>I’ve got more than six years of experience working as a software developer now, but through my whole career I had doubts about my skill level. In a couple of places I was the only developer or the most skilled one, even though I was pretty junior then (I come from an industrial town in one of the ex-Eastern bloc countries - not the most advanced place really).<p>I also worked in a couple of places where there were more skilled guys around, but the level of these companies was still not too high, so I knew some of the things I saw there were not actually the best practices.<p>Finally I got a job in a place I thought was good - they are in financial industry, can afford to (and do) hire people from across the world, some of their ex-employees joined Google, so I felt pretty confident about their level.<p>I was fired from that job a few months ago, and the whole process that led up to it was very difficult for me. The official reason was ‘not meeting expectations’, and it was implied that I’m not a good developer at all.<p>The whole process was pretty dirty from the other side, with lack of communication, ambiguous statements that were not to be discussed and (at times) directly contradictory input. What makes me think that these problems weren’t only mine is the fact that employee turnover was high: a team of ten saw four people joining and five leaving (including all four newcomers) in about a year. I believe a good deal of personal dislike from the manager could also be present in my case, so I’m quite sceptical about the assesment - but I admit I had problems, so my professional self-esteem is still quite damaged.<p>Now, I’m looking for a way to restore it. There are a couple of details to take into account: I was working in Western Europe, and my visa depended on my job (which made that whole thing way more important and difficult that it normally would); the country I was working in isn’t exactly the world center of software development, so I moved back to my home country to recover, but I still want to try emigrating to US/CA/UK/AU a year or two later.<p>Another thing is that I am also changing my primary language: I was working with the corporate standard language (think C#/Java), didn’t really like the community and typical problems/jobs associated with it, and decided to move to a more ‘hacker-friendly’ language (think Perl/Python/Ruby).<p>So my goals are as follows: personally - get experience in the new language and prove to myself that I’m a good developer; with regard to the outside world - have something to show that would make me worthy of an employment in a good company and might convince them to go through the immigration process with me.<p>I could think of several ways to do it:<p>- join an opensource project;<p>- start my own project, get it running and attract users;<p>- have some visible/measurable proof like certifications or a position in TopCoder/Project Euler;<p>- a classic way of finding a beginner level job, learning at work and getting some recommendations there is also an option.<p>These are the ways that I can think of, but I don’t really see the picture from the manager’s side, and I think many people here are more experienced that I am. So I’d like to ask your opinion on these options, and would also love to hear about other ones that I could’ve missed.<p>Thanks in advance!<p>PS There’s one more thing that’s been haunting me the whole time - I try to look at the situation and figure out who and what was wrong there. Frankly, I can see the situation in two very different ways: either I’m a whiner who just cannot face the reality, or something was really broken in the management system there (and two biggest signs that make me suspect it are high turnover and contradictory managerial input). Could you please share your impression of the situation?
======
brudgers
With any firing, there is the official reason and the real reason. Short of
gross misconduct on the part of the employee, they are often quite different.

From your description, there is a good chance that your firing was at least in
part due to the organizational and staffing practices at the company (your
technical skills may have played some role - but are unlikely to have been the
sole reason and may not have even been the primary reason). High turnover is
often symptomatic of incompetence in the hiring process, poor management
techniques or a poor workplace environment.

On the flip side, corporations will often be concerned with employees who "are
just passing through." There's a lot of risk potential in employing a person
who is actively seeking another job - particularly if they appear to be
dissatisfied and use the term "hacker" and has high level access to financial
software.

As for your professional self-esteem, that's all in your head not in the
external world. Some things just have to be learned the hard way, and the
ability to recognize which sort of organizations are a good fit - and which
sorts are not - can be one of those. Certain personality types survive in
corporations and banks, and other types don't. Neither group has a monopoly on
technical skill or personal character.

Only you can choose to cowboy up and pursue your long term goals, which are
ambitious, or not.

Good luck.

~~~
QuoVadis7
Great answer, thanks!

I suspected some of this stuff, and it's nice to know that other people also
see that and it's not just me being paranoid.

------
nandemo
Such a high turnover is a major red flag. Still, if you want to take a self-
evaluation take a look at this programmer competency matrix:

[http://www.indiangeek.net/wp-
content/uploads/Programmer%20co...](http://www.indiangeek.net/wp-
content/uploads/Programmer%20competency%20matrix.htm)

It is by no means authoritative but it could be a start for you to brush up on
weak spots.

~~~
ayers
That is a great skills matrix. I have some set learning goals for
myself(outside of work) this year and this matrix just confirms that I am
heading in the right direction.

------
bostonOU
_Everything should be made as simple as possible, but not simpler. -Einstein_

That's the quote that's been banging around in my head since I've been trying
to clean up the mess left by the programmer I replaced.

When I think of a good programmer, I think that reading/understanding their
code should be as simple as possible. If I'm reading through the controller of
a basic Rails app, it should be pretty simple. I should be able to easily
figure out what's going on. I shouldn't see a 100 line action that mixes view
and model code. If I'm reading through the Rails core, I should expect to
spend significant time understanding what's going on. Simple as possible, but
not simpler.

In my experience, bad programmers take misguided pride in writing complex code
(which is _always_ more brittle than clean, clear code). Or they think _you_
are the bad programmer because you don't immediately understand it.

Good programmers are programmers that are fun to work with (code-wise
especially) that get things done. At least that's my working definition.

Here's how I judge myself:

1) Do other programmers have good things to say about working with me?

2) Do other programmers have good things to say about my code?

3) Do I get things done/working?

4) When I read my old code, do I understand it quickly (relative to the
complexity)?

5) When I read my old code, do I see things that I could have done better
(shows personal growth)?

The Dunning-Kruger effect is always on my mind as well.

<http://en.wikipedia.org/wiki/Dunning–Kruger_effect>

edit: formatting, typo

~~~
QuoVadis7
Thanks a lot, great answer!

I indeed solved some problems in a more complex way than it was necessary -
though I wasn't proud of it.

------
ayers
I won't pretend to have any answers but if you want someone to discuss
ideas/share experiences with, drop me an email. (contact email in profile)

------
Daniel_Newby
_Frankly, I can see the situation in two very different ways: ..._

That's one problem identified!

