If that's any consolation, you are not alone. I've been spending a lot of time lately thinking about strategies for advancing past mediocrity. Here are some general principles that I apply regardless of your background and past accomplishments:
1) Learn by doing and trying, not by thinking. Aimless reflection and introspection are bottomless pits that can suck up enormous amount of time that could be put to far more productive uses. If you have a choice between reading a book on a programming language and going through a tutorial that forces you to try examples, go through the tutorial. Immediate, tactile learning is better than abstract success stories which paper over important ingredients for success.
2) Social networking is key. Grow by connecting yourself to communities of peers, mentors, gurus, etc that you can actually rely on and that you can benefit from. If HN is making you depressed, stop reading it. Instead establish meaningful professional and personal connections with people that are supportive. The value of your circle is often overlooked. I am a firm believer that the quality of the people you know is the great predictor of your overall happiness and achievement.
3) Focus on the things you need to know. The number of programming languages you know doesn't matter. It is a meaningless metric. What matters is how comfortable you are with the tools that help you get _your_ job done. This is related to point 1). Having mastery and proficiency of something that you use daily is far more important than having the breadth of knowledge and mastery of exotic languages.
4) Stack your skills. Time is short so the best way to advance is to leverage maximum of what you _already_ know. In other words, don't jump around and shift gears all the time. Think of a long term goal(s) and try to segment the path toward that goal such that you can (a) complete each segment without getting distracted, (b) get feedback after each segment (c) learn something in each segment that you can use in the next. It doesn't have to be one project. In fact it's better if a sequence of projects, so you can adjust your course along the way.
5) Don't stop. Giving up is an attractive option. Our society has many different ways to cushion your fall, which can make quitting tempting and virtually painless. If you want to achieve something, idleness is definitely _not ok_.
1) Learn by doing and trying, not by thinking. Aimless reflection and introspection are bottomless pits that can suck up enormous amount of time that could be put to far more productive uses. If you have a choice between reading a book on a programming language and going through a tutorial that forces you to try examples, go through the tutorial. Immediate, tactile learning is better than abstract success stories which paper over important ingredients for success.
2) Social networking is key. Grow by connecting yourself to communities of peers, mentors, gurus, etc that you can actually rely on and that you can benefit from. If HN is making you depressed, stop reading it. Instead establish meaningful professional and personal connections with people that are supportive. The value of your circle is often overlooked. I am a firm believer that the quality of the people you know is the great predictor of your overall happiness and achievement.
3) Focus on the things you need to know. The number of programming languages you know doesn't matter. It is a meaningless metric. What matters is how comfortable you are with the tools that help you get _your_ job done. This is related to point 1). Having mastery and proficiency of something that you use daily is far more important than having the breadth of knowledge and mastery of exotic languages.
4) Stack your skills. Time is short so the best way to advance is to leverage maximum of what you _already_ know. In other words, don't jump around and shift gears all the time. Think of a long term goal(s) and try to segment the path toward that goal such that you can (a) complete each segment without getting distracted, (b) get feedback after each segment (c) learn something in each segment that you can use in the next. It doesn't have to be one project. In fact it's better if a sequence of projects, so you can adjust your course along the way.
5) Don't stop. Giving up is an attractive option. Our society has many different ways to cushion your fall, which can make quitting tempting and virtually painless. If you want to achieve something, idleness is definitely _not ok_.
Update: edited for style and grammar.