I am a Asp.Net/C# developer, I develop few projects in my spare time. I try to utilize my time as much as I can. I have been working for past 7 months. Suddenly these days I am a bit worried about learning the new stuff that is there for me as a programmer. I develop in my spare time so I don't get enough time to read books or blogs. So my question to some of you guys is how should I plan to learn new things, should I at least dedicate two-three evenings for new stuff, maybe ebooks while travelling is a good option too. How do you people plan to learn,should I also start to develop with whatever I learnt? As far as learning is concerned, should I just pick up the basics and then implement it or I should seek deeper understanding of the subject?

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.

7 Answers
7

I think you should take a project that interests you, and implement it, just to have some motivation and keep working. In general I would stick to these points:

Make a list of small tasks that are implementable in 30-40 minutes

Do something every day or two

At the beginning go through a few tutorials, then start something of your own, and use the internet to lookup things you don't know.

Do from time to time some refactoring. Just so you go over your code again, and try to see other ways to do stuff. Should be done every week at the beginning, and in greater intervals later when you have a clue of what you are doing.

Try to make many prototypes, so you first of all get an overall view of the system. And if you see something working, you get motivated again.

Don't try to build a big framework, or integrate a design pattern right at the start. Get a working example, later start thinking of memory usage, running time, reusability and other engineering concerns.

Don't over do!! If you have a job, and also do some extra learning, you could get the burn out. This is a serious concern since you almost never see per-signs yourself. If you are married, or live with someone - please notice their advice if it comes.

I appreciate your suggestion , ya apart from programming there is something called LIFE , I agree , also should I posting on codereview much more frequently.thanks a lot.
–
priyank patelJun 8 '12 at 7:51

What do you mean post on codereview? Is there a site like that?
–
KahilJun 8 '12 at 7:54

The points on making time for refactoring and avoiding premature optimizations are key to making the best use of your limited time. Premature optimization has always been the biggest waste of my time, especially when starting a new project. Excellent answer.
–
jmlaneJun 8 '12 at 16:22

The way I learn new things (relating to CompSci/Software Development) is to either:

Re-implement some project using another language/framework

Think of small (introductory) projects to implement in a foreign (to me)
language/framework

Spend some time reading up on different paradigms, techniques, languages or designs

Track down code for open source code projects that I'm interested in and study it.

Sometimes this is difficult, expensive or can take a long time. But I feel that it's worth it in the end.

I honestly think that spending your travelling time reading up on something can be much more useful than blasting your ear drums with music and staring into the middle distance. Of course physical books can be a little difficult to read while on public transport (I remember struggling to read Code Complete on a train, once).

If you can't find the information you need online or in a book, try and track down groups of developers (or even tech enthusiasts). I can recommend MeetUp for searching for local groups.

Failing all of that, how about asking family members/friends for project ideas? Implement the idea in a language/framework/paradigm/etc that you are familiar with, then attempt to re-implement it in one your note so familiar with.

[as an example, I've become an informal Android developer, developing small apps for friends with rooted phones. Until I started doing this I had no experience with Java Dalvik or Android, but I do have a familiarity with C#. I could have done the same with Windows Phone 7 platform, but I feel as though that wouldn't have stretched me as far as learning Android and Java Dalvik]

I agree , another thing I wanted to ask is how often do you search for better ways for doing something , I hardly get time to do that ,I know I should get my code reviewed right ?
–
priyank patelJun 8 '12 at 8:06

When that gets frustrating, and it will, you will have the needed motivation to actually learn the technology.

For me videos are a great learning resource. And not any video, I found the gurus in the community who inspire me and I watched their talks or tutorials.

I've started with the NDC conferences which really have been a "vitamin pill", and then I moved on to payed tutorials from the many websites available.
For the payed tutorials, I don't just pay for anything, I also search for the ones made by the people who inspire me.

Just like you, I also code in my spare time, which means I don't have much time left for reading books, and on top of that I have successfully used books as sleeping pills, so I prefer paying for a video rather than a book that I will probably never finish.

It will be easy to plan them, because even if you watch a long and in-depth tutorial on a particular technology, they are usually split into short chunks, no more than one hour.

Thanks a lot , ya I realize the importance of pet project.Another thing that I constantly think about is how do you as a programmer take care of the code that you right , how do you know that this might be a feasible solution.Do you use code review.
–
priyank patelJun 8 '12 at 9:12

Thanks to Uncle Bob's talks, I realized that the code I write is never perfect, I always have to work on improving it. So I don't even try to write perfect code from the beginning, I iterate. I just write the minimal that I need at that point, and I try to refactor as often as I can according to the SOLID principles and common sense. Of course, I do ask for feedback from teammates and friends pretty often. I haven't done this yet, but I'm also thinking of starting to put code out in the public, in places like codereview.stackexchange.com <-- thanks for that, I found it from you
–
stralsiJun 8 '12 at 11:23

Thanks atleast now I know how to plan , write something that is going to work , then may be refactor as often as you can.Thanks for the feedback.Much appreciated.
–
priyank patelJun 8 '12 at 11:43

Indeed having some pet projects is the key. But I often feel frustrated by the projects I do in order to learn new stuff... In fact my brain always try to be friendly to me, so the pet projects he thinks of are often something I can do without learning much.

The best way to learn new things or to improve skills was, for me, to do project for my friends. In fact I work with a lot of people who do not live in the computer world. And they often have needs specific to their jobs, it's often micro tasks needing less than 1000 lines of code, but it's always a challenge, and very rewarding to help them. Not simply because they are friend but because they have specific needs, often needs that you wouldn't have imagined they could exist.
Helping that kind of people with their day to day needs will ask you to work on platform you don't know yet, or using langage you do not master... etc.

It's for me the best way to keep your friends while learning a lot of new things.

Also I think this stackexchange web site is perfect to learn new things every day.

Most importantly: Don't push yourself too hard, and don't worry about quantifyable results. You have a desire to learn, and I'm sure there are more things that spark your natural curiosity; following that lead, IMO, is the most effective way of determining what to learn next. After all, if you're curious about something, it means you have a strong desire to learn it and push through, and as a result, you will learn more thoroughly, and it will not feel like a chore.

On a more specific level, a few things you may want to consider.

Nose around in unfamiliar terrain. If your day job involves a Microsoft-only stack, see what the Java, Mac, and *nix camps are up to. Learn a new programming language (I try to pick up at least one new programming language per year, even if I don't get to the bottom of it). Program in a different discipline, e.g. if your main occupation is web development, do some systems programming, or write a desktop application, or a mobile app, etc.

Pet projects are an excellent hands-on way of learning. You'll learn new things as you go, in a perfectly non-theoretical way. You'll get your feet wet in the real world, and who knows, your pet project might actually turn out quite useful.

Pick your battles wisely. If you have found a language you want to learn, apply it to a problem for which it is suitable - for example, if you want to learn PHP, use it to make a website, not a desktop application. But more importantly, pick something of the right scale. If it's too large, you won't achieve critical mass, and you'll hit frustration long before the thing becomes remotely usable. If it's too small and too easy, you might not be learning much (but then, you're not losing much time either).

There is no shame in dropping half-finished pet projects. While "shipping is a feature", the luxury of pet projects is that shipping is a nice-to-have, not a must-have. You learn a lot by pushing through to shippability, but you don't have to do it on every project.

Evolve a workflow that allows you to start and stop working at a project on a moment's notice. How exactly you do it depends on a lot of personal factors, but the goal is to make it so that you can drop the project at any time, come back to it three months later and be productive again within minutes.

To get project ideas, create a free, no-obligation account at www.vworker.com, then browse the project listings. They have small and large programming projects listed, waiting for programmers to bid on them. You don't even have to try to bid for a project. Just find a small project that will challenge your current skills, then work on it at your own pace.