

Ask HN: How do you go from being an average developer to a great one? - vishalzone2002

An average developer is probably one who can write code, solve issues by looking at stack overflow, intermediate with a programming language.
But how do you become someone with great skills who is respected in the industry. One who works at places like google, twitter or facebook and can crack interviews without preparing for weeks. Solves algorithms and other CS questions with complete confidence. 
I believe the biggest answer here is probably practice and I agree, but is there someone who has gone this route? 
Please share your thought,resources,advice. Thanks !!
======
arghbleargh
As you noted, the biggest thing is practice. But here are a few specific tips
that I believe significantly improved my programming ability:

1) Try to get the implementation 100% correct on the first try. I don't mean
that you should implement the whole system in one go, but the part you
implement should do exactly what you want it to do (i.e. no typos, mixed up
variable names, etc.). At first I thought this was a bit harsh, but it was
amazing how much debugging you can avoid with a little more focus in the
beginning. Also, it forces you to adopt good coding practices and make sure
your algorithms are fully specified.

2) Don't tolerate tedious work. If there's any part of your workflow that's
tedious, spend a lot of effort trying to minimize it. Some examples of things
you might do: write a script, refactor your code, use a better editor, use a
different programming language. You won't learn much from changing 100
variable names to camel-case, other than how painful it is. You will learn
something from writing a tool to help you do that.

3) Think about how various libraries and frameworks you use are implemented,
especially if they have features that seem like "magic". Try to reverse-
engineer their design, or take a look at their source code (if available).
This is a natural way to gain exposure to new ideas.

Regarding more "theoretical" subjects like algorithms and data structures that
you might need to know for interviews, you could practice on programming
contest websites (e.g. www.codeforces.com) or read some textbooks. However, in
my opinion, those are not nearly as important for a software developer as the
three things mentioned above.

~~~
bjourne
1) is great advice. It's roughly equivalent to what most music teachers
recommend for learning to play an instrument. If you just play all day long
you wont improve, or at least not improve as quickly, as if you just play one
hour per day in which you try hard to play as perfectly as possible.

------
JSeymourATL
Apply Richard Hamming's golden advice from "You & Your Research" to your
career.

1) What are the most important problems in your field?

2) Are you working on ONE of them?

3) Why Not?

~~~
cjbarber
One of the best pieces I've ever read.

[http://www.cs.virginia.edu/~robins/YouAndYourResearch.html](http://www.cs.virginia.edu/~robins/YouAndYourResearch.html)

Suggestion: use readability

------
mromanuk
Practice make the master. If we change 'programming' to other discipline, it
becomes evident: How do you go from being an average pianist to a great one?

Practice, mentors, books, new challenges, rewriting code, etc.

------
mcdevhammer
A lot of reading blogs, articles, etc. online, and a lot of time spent in your
spare time working on projects. Also working on things that are new and
challenging to you. Also if you come across something you don't understand
while reading and article or working on a project don't just skip over it,
spend the time to really understand the concept.

------
foolishdream
Start calling yourself one. Then work on a prominent enough project that
people start believing you. If this doesn't work, write / speak / comment /
manage your way to credibility and higher visibility. If a great programmer
programs by himself in the forest and no one notices, then no one cares.

------
hvd
I got this piece of advice from a mentor. "The best developers are not the
smartest ones, but the ones who ship most often." That being said, following a
test driven development path will put you ahead of everyone who doesn't test.

------
georgem12
Reading a lot seems to help - keeps you up to date on what's _possible_ , so
when you hit a problem you have something in the back of your mind to resolve
it. (more practical than algorithms-y).

------
graphene
pg has you covered:
[http://www.paulgraham.com/gh.html](http://www.paulgraham.com/gh.html)

------
muddylemon
Work with people smarter than you

~~~
vishalzone2002
I agree but to even get to that, One probably needs to be good enough or
higher than the average bar to get in their company.

~~~
sejje
Make a point to work with the best programmer in the company (or best that you
can get to work with), rather than working with the portion that is inferior
to you.

------
matttheatheist
By making a lot of mistakes.

