Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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?

share|improve this question

closed as not constructive by gnat, Walter, Jim G., Caleb, Yannis Rizos Jun 9 '12 at 8:49

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.

2  
Please see faq. This question is off topic. –  Monster Truck Jun 8 '12 at 10:50
1  
@MonsterTruck, maybe it can be rephrased so that it doesn't address only the person asking, but all programmers who wish to learn in their spare time –  Silviu Straliciuc Jun 8 '12 at 11:46
1  
This kind of questions is the reason I visit this SO sub site at all. I mean S.E. sub site –  user7071 Jun 8 '12 at 23:08
1  

7 Answers 7

up vote 19 down vote accepted

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.
share|improve this answer
    
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 patel Jun 8 '12 at 7:51
    
What do you mean post on codereview? Is there a site like that? –  Kahil Jun 8 '12 at 7:54
4  
yes , codereview.stackexchange.com , just another stackexchange site. –  priyank patel Jun 8 '12 at 7:56
    
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. –  jmlane Jun 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]

Hope that helps.

share|improve this answer
1  
thanks a lot for your suggestion , +1 for finding opensource projects and studying the code , I will soon start that thing , thanks. –  priyank patel Jun 8 '12 at 8:03
    
oops minimum 15 reputation required for an upvote:( –  priyank patel Jun 8 '12 at 8:04
    
@priyankpatel No worries, dude. It's the thought that counts –  Jamie Taylor Jun 8 '12 at 8:05
    
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 patel Jun 8 '12 at 8:06
    
Well, there's codereview.stackexchange.com (another section of Stack Exchange), they can help you with reviewing your own code. –  Jamie Taylor Jun 8 '12 at 8:11

First of all, do what Martin says and start a pet project.

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.

share|improve this answer
    
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 patel Jun 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 –  Silviu Straliciuc Jun 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 patel Jun 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.

share|improve this answer
    
@lvictornio Thanks a lot, stackexchange sites do help a lot.Thanks for sharing your ideas. –  priyank patel Jun 8 '12 at 9:30

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.
share|improve this answer
    
Excellent tips , really helpful.+1 for the first point , one should explore unknown areas as well.Thanks a lot. –  priyank patel Jun 8 '12 at 9:38

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.

share|improve this answer

User Twitter!

Twitter is an unprecedented learning tool.

When I first heard this I was skeptical, but now I realize that it is for a very good reason.

The way to learn through twitter is to simply find and follow the experts.

Over time they point out best practices regarding difficulties before you face them.

In this way you save time by investing time.

peace~

share|improve this answer

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