Ok, so I'm at a point where I think I have my basics down. I'd like to think I'm just starting to become an intermediate dev. So, how do I level up here?

It feels like I have reached my threshold, but I really want to break it, and move ahead, do more crazy stuff (for context, I'm talking about programming).

So, what would be the best strategy to achieve this?

I'm working on multiple side projects of my own (I'm a student).

How should I approach learning to program from here? What I currently do is, if I'm unable to understand a how to solve a problem, Google or SO it, find an answer, modify it as required and use it. It this the correct way to go? Is there a better way?

How do I go about learning about new concepts, new classes etc. in an organized manner, one that doesn't overload my brain?

I know it's practice, practice, practice, but the question is what to practice? There's just so much and only so much I can do.

Share your knowledge!

PS: My primary field is Java, so I tagged it for some specific advice as well.

EDIT: As I said, I'm a student, NOT in CSE major, so I don't have any clients or "requirements" per se. So what's best strategies to develop my own projects? I have done a few projects and learned a lot from them, but is there a guide about standards or conventions about projects? How do I structure my projects? How do i build them efficiently?

closed as not constructive by Robert Harvey, gnat, Frank Shearar, Martijn Pieters, thorsten müller Mar 27 '13 at 8:14

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 1
    I wrote a blog on this: programmers.blogoverflow.com/2013/03/… – Rocklan Mar 27 '13 at 2:56
  • Thanks, great read. But I'm still not sure how to apply these. I'm still very young in programming (and age). – Karan Goel Mar 27 '13 at 3:26
  • (I think this question is subjective, so I will comment instead of answering.) Maybe do an open-source project or make a cloud service with an API? Working with others will bring a lot of problems to light that you wouldn't have noticed alone. Other than that, you could choose an aspect of programming that interests you and read papers about it while trying to implement their ideas. Finally; check out Scala or Clojure. They run on the JVM and can interoperate with your Java code, but are wildly different from Java so learning them will cause you to view programming from a new angle. – John Cartwright Mar 27 '13 at 3:53

"I know it's practice, practice, practice, but the question is what to practice? There's just so much and only so much I can do."

The only answer is to do things you're passionate about, or things that you want to exist but don't.

Like games? Make games. Like web stuff? Build a website/service, use some new frameworks, tinker with third-party APIs. Like tinkering? Get an arduino/RasperryPI/etc and hack away.

You will never learn everything. Just do things you're interested in and you both won't get bored and will continue learning new things.

Also, why is your primary field Java? There's a wonderful world of languages out there, and learning some others will give you a good understanding of benefits, drawbacks, language features and lots of other fun things.


The right way to approach leveling up is know by another name, deliberate practice. To do deliberate practice you pick a topic and stick with it for at least 2 months. So if you pick sockets and network protocols then you should stick with it for at least 2 months and write some non-trivial code that makes use of sockets and network protocols. The great thing about this approach is that not only do you gain a deeper understanding of whatever topic you're exploring but you also get to explore some other topics along the way. You can't really do sockets and network protocols without learning about threads and parsing techniques so you end up killing several birds with one stone. This is true of any topic in CS. You can't really learn it well without exploring some nearby concepts and topics as well. So even though it feels like there is all sorts of stuff you could be learning at this instant the slow, steady, and deliberate approach always wins in the end.

In summary, pick a topic and stick with it for at least 2 months. Spend at least 1 hour a day learning and implementing something that makes use of whatever topic you're exploring and you'll be an expert in several domains in no time.

Not the answer you're looking for? Browse other questions tagged or ask your own question.