

Ask HN: How do you get to be really good? - ianamartin

There seems to me to be an endless supply of &quot;how to learn a little&quot; about almost every programming language there is.<p>But these things have limited usefulness to me. I know how to get really good at certain things. I&#x27;ve had along habit of being very good at things. I did not go to school for comp sci. I studied violin, music theory, philosophy, and statistics.<p>But how do you get to be really good at software development?<p>I&#x27;ve studied Python as a language extensively. I feel like I know it extremely well. I know the idioms and patterns. But I don&#x27;t know what to use them for.<p>I&#x27;ve read all the normal books. I&#x27;ve read about design patterns. I feel like I&#x27;ve read all the things, but something just isn&#x27;t clicking.<p>I just have no real clue about building software. I feel like I have all the tools and no idea what to do with them. Give me a specific task, great! I can do that. Tell me about a feature you want! Great, I can do that.<p>But I just don&#x27;t really know how to get to the next level. I don&#x27;t know how to get to that place where you can say, &quot;Yeah, I want our api to look like this!&quot; I can make the api look like that. But I don&#x27;t know how to make that decision.<p>Not sure if this makes any sense. But there have got to be some HN readers that either currently feel the same way, or have in the past and have some thoughts.<p>So? How do you get to the next level?
======
EnderMB
This isn't gospel. This is just my opinion based on observations I've made
from working with or against people that are considered "great".

You don't know what you don't know. Someone could say something with shocking
clarity, that not only answers a question, but answers it in such a way that
you understand a seemingly complex problem right away. The person that answers
that question could be perceived as having an expert level of knowledge on
said subject, but in reality they might have been in your position mere months
ago and just happened to come across the answer. They might only know a
fraction more than you do on a subject, but knowing that one thing makes it
all fall into place.

Ultimately, it comes down to having the right experience. Someone could design
a fantastic API and be lauded as a great architect, but this could be the
first success from a long line of failures. The best thing I can suggest, from
my own experience, is to decide what you want to learn, and to work towards
getting experience in said subject. Reaching "that" level is hard, because the
goal-posts always change. As I said at the start, "you don't know what you
don't know".

~~~
ianamartin
Thanks. I really appreciate that perspective.

------
mobiplayer
I don't want to sound rude, but you just need to get a job. All the problems
in the world will come to you to be solved, so you get all the chances you
like to apply your knowledge and eventually get to be really good.

~~~
ianamartin
I'm a senior developer. Having a job isn't the problem. The problem is how to
get better.

~~~
mobiplayer
Hey, I'm not saying getting a job is the problem. I'm saying getting a job is
the solution, at least that's what I've figured out during my career.

Maybe I could've simplified and said just practice.

------
mathgeek
Once you've reached an advanced level of knowledge about any given language,
my experience is that the best way to get better is to find someone who knows
more than you and learn from them. Pair coding works well for this.

If you have a job that exposes you to these people, that's great. This often
gets confused with "having a job is the best way to get better," but it won't
help you one bit if you're the best at what you do for your company.

~~~
ianamartin
Thanks, I really appreciate this. I had a job where I was pretty much the best
at what I was doing (not Python; SQL Server). I really wanted to get better at
Python, so I got a job doing Python. My boss has a serious understanding of
this stuff, and I'm learning a ton. He's really showing me how much there is
to learn.

I guess I'm just impatient to get better faster.

------
alltakendamned
2 things stand out: \- You use words like reading, studying etc. I think you
enter a territory where you can only learn further by doing, and not by
reading. \- It sounds to me that you need practice architecting applications.
Seeing how many features and logic fit together, what the underlying
principles of a system are, and then thinking how things would be different
from multiple angles.

Good luck on your path !

~~~
ianamartin
Thank you. This seems to be a common sentiment here in this thread.

It seems that the answer is to keep doing what I'm doing.

------
Mimu
You don't master a subject by reading about it. This is an issue with this new
"wikipedia/whatever" generation, they think they know everything because they
read about it but truth is, you don't know shit until you actually use
something.

~~~
ianamartin
I don't think I'm part of a new "wikipedia/whatever" generation. I'm 35, and
I'm on my second career after spending 25 years as a professional violinist.

I know that you have to use things to understand them. But on the other hand,
you don't just go out and take a chainsaw for a spin without trying to figure
out how it works first.

Well, I feel like I know how it works. I just don't know what to do with it.
Hmmm, should I cut down a tree? Or should I cut down a house? And what's the
real difference?

Are you suggesting that I should just go around willy-nilly and cut things
down with my new technology chainsaw? Then I'll know shit about how it works
because I've used it?

I'm asking a real question here because it's not one that is easily google-
able. Perhaps it's not easy to answer. I feel like there's a dearth of
material available that addresses the question.

------
cyber_ninja
I don't think I'm quite at the level of knowing the language as you are, but
I'm the same way about knowing how to do something if it's assigned to me as
opposed to figuring out how to make the decision to make something the next
step.

------
Klockan
The most important parts of getting good is lots of practice and the ability
to tell good results from bad ones. All professionals gets roughly equal
amounts of practice so there is no use competing on that front. Therefore the
only reasonable thing to do is to practice judging things.

You want to get better at designing API's? Then start writing down
comprehensive critique for as many API's as you can. List good and bad traits
and explain your reasoning. This will build understanding about the parts
needed for an API to be good.

When you are done then you should apply your newfound judgement on projects
over and over again since good judgement is nothing without practice.

------
freedevbootcamp
This is one of the biggest complaints from my students. We have so many
beginner books that show you the basics, for loops, if statements, variables
etc..etc.. but don't show you how to create a widget. We need more
intermediate books that skip all the basics and just show you how to create
things. So whats the solution till then? Start searching through github on a
particular language and see how the rockstars do it. If you can read code then
you should be able to learn how to create widgets and lookup whatever you
don't understand.

------
S4M
I think you have to work on something that interests you and develop around
it. You will probably easily be able to get something simple running, but then
you will have troubles in some small details, that will make you learn new
things.

And try to do it all by yourself, so you will be pushed out of your comfort
zone faster, and have to deal with things you don't deal with at your work
place.

