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

4 points by ianamartin ↗ HN
There seems to me to be an endless supply of "how to learn a little" about almost every programming language there is.

But these things have limited usefulness to me. I know how to get really good at certain things. I'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.

But how do you get to be really good at software development?

I've studied Python as a language extensively. I feel like I know it extremely well. I know the idioms and patterns. But I don't know what to use them for.

I've read all the normal books. I've read about design patterns. I feel like I've read all the things, but something just isn't clicking.

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.

But I just don't really know how to get to the next level. I don't know how to get to that place where you can say, "Yeah, I want our api to look like this!" I can make the api look like that. But I don't know how to make that decision.

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.

So? How do you get to the next level?

15 comments

[ 0.20 ms ] story [ 38.8 ms ] thread
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.
I'm a senior developer. Having a job isn't the problem. The problem is how to get better.
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.

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.
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".

Thanks. I really appreciate that perspective.
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.
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.

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.

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.

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 !

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.

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.

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.

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.