

Ask HN: How do you develop incredible coding skills? - ishanr

There seems to be a lot of tutorials available for beginners but how do you develop skills which take you into the top 1%?
======
lsiebert
Coding. Coding. More Coding. You spend a lot of time working on problems. You
learn to generalize. You save and reuse code. You go off and try stuff and
make mistakes.

You read less tutorials, but you actually try to implement more stuff you read
about, instead of reading it.

You learn from people. Those who know more, those who know different, those
who study CS and those who study art, psychology, gerontology, whatever.

You go over what you learn. You teach, you tutor, you explain, you blog, so
you get a better grasp on what you know, so you think about and
recontextualize what you take for granted, so you can nail down ideas.

You go back and look at old code you wrote, and fix it. You read code, yours
and others, bad code and good code. You submit a pull request to add a feature
to something you use.

You stop worrying about being the top whatever, and focus on being better then
you used to be.

------
Stoo
Writing code, thinking about code, reading code.

As an addendum to what adrianhoward said, work with people who are better at
coding than you are, then work with people who are worse at coding than you
are. You will learns loads of things from both.

~~~
adrianhoward
_" then work with people who are worse at coding than you are"_

++$lots to this. Helping and teaching others is a stupidly effective technique
to understand things better yourself.

~~~
Stoo
Yeah, I think you only fully understand something when you try to explain it
to someone else.

------
adrianhoward
1) Work with people who are better at coding that you are.

2) Write lots of code.

3) Repeat.

~~~
lazyfunctor
This. It holds for other skills as well.

------
yen223
This is going to be controversial around here, but going back to uni and
taking up compsci courses has helped me a lot

~~~
ishanr
hmm... surprising.. why do you think going back to uni later helped you...

~~~
yen223
To be part of the proverbial top 1%, you won't just be thinking about the code
- you need to be able to understand the subtle interactions that happen within
a software system, from high-level algorithms down to the low-level compiler
stuff, and further down to the bare-metal OS layer. The kind of stuff you will
learn from a decent CS course.

Now granted, you could teach yourself all of this, but then you'd have a
teacher who knows absolutely nothing. It's worth having a mentor to guide you
through all this. Doesn't have to be from a university, but it doesn't hurt
either.

------
zygotic12
I see people at work hammering keyboards for 10 hour stretches 6 days a week
and feel sad for the current state of the profession. Being a developer is
about THINKING. Converting your solution into code is the easy bit (typing I
say). Forget the language, concentrate on the solution. BTW architecture is
just the crap that you need to do in YOUR environment. Chuck has it right - go
FORTH my son. [http://www.colorforth.com/](http://www.colorforth.com/).
Anything else is just domain/environment knowledge.

------
niveditasetru
1) Get some open source projects in a technology you are familiar with and try
to fix bugs. 2) A framework is a good example to learn good coding skills. As
it gives a very structured, scalable code. So, you can learn few good
techniques. 3) Get a person who you think writes good code to review your
code. 3) Practice, practice and more practice.

Please note- there is no top here. Every developer's technique to write code
would be different. So, you cant compare yourself with others. You just need
to worry about writing efficient code.

------
haidrali
Though i am not among top 1% bit, here are few personnel skills

\- Choose you favorite language ( your can't have same skill in all languages
so choose you base language mine is JAVA )

\- Work in opensource ( it will give you experience of reading and
understanding code of other programmers, also your code will be seen by others
)

\- Follow tutorials for tasks you have not fully grasp

\- Automation ( do automation testing for your code )

hope it might help

~~~
davelnewton
I mostly agree, but on the subject of languages we differ.

I think it's _critical_ to be able to think in languages outside your
"favorite" language's paradigms. Java and similar languages, in particular,
force you into a depressingly narrow range of looking at problems, and it will
hurt your programming skills.

------
LarryMade2
Try incredible stuff - challenge yourself. Break a rule or two now and then,
then see how to make it unbroken.

------
davelnewton
What would it mean to be in the "top 1%"?

------
oweiler
Do not be afraid to make mistakes.

