At work we mostly do WinForms development and it’s not a secret that it is already very outdated. I have a passion to learn new stuff like WPF, MVVM and want to use full advantages of C# 4.0. There is no way I can push my bosses to change “well-recommended” and “proven” technologies like WinForms to something else.

I have up to two hours a day which I can dedicate to self-learning but I simply don’t know the most efficient way to study. I tried to read couple of books and even wrote a simple WPF application but think that it’s not enough.

How can I manage my time learning new things in a way that sticks, even if I don't use it on a daily basis?

  • 3
    There are multiple similar questions already, you may want to check #1, #2, #3, #4
    – Jalayn
    Dec 13, 2011 at 12:28
  • You've learned somehow whatever you know by now. So just carry on doing the same thing.
    – SK-logic
    Dec 13, 2011 at 12:42
  • 1
    WinForms may be old, but still is well-recommended, proven and IMHO has a chance to be still there when WPF was replaced by "Metro". And in many situations, using WPF just violates the "YAGNI" principle. That does not mean you shouldn't learn WPF, since there are also situations where WPF makes a lot of sense, but don't do it just because it is "trendy".
    – Doc Brown
    Dec 13, 2011 at 13:05
  • 3
    @DocBrown WPF was replaced by "Metro" Sources please? Will WPF apps simply not run on Windows 8. How long has Windows 8 been out? Will Metro apps run on Windows 7/Vista? Is Metro any more of a threat to WPF than say HTML5? WPF just violates the "YAGNI" principle Again sources? I have written a few WPF apps and can't think of a single situation where I felt it violated YAGNI.
    – maple_shaft
    Dec 13, 2011 at 13:18
  • 1
    @maple_shaft: well, that WPF will be replaced by "Metro" in future is just my highly subjective opinion. And the YAGNI principle is violated every time someone invests more effort into a thing than needed. AFAIK the WinForms GUI designer is much more mature and easier to use than the WPF designer, which makes Winforms GUI development - still - a lot easier (don't get me wrong, I hope this will change with the next VS edition). On the other hand, WPF has some very nice features Winforms is missing, of course, but for a lot of applications those features are dispensable -> so YAGNI
    – Doc Brown
    Dec 13, 2011 at 14:15

9 Answers 9


We should all be so lucky to work somewhere that gives us 2 hours per day dedicated to self-learning! :) Don't waste that time certainly!

I wouldn't use that time for books and reading. I find myself reading books and online tutorials in my spare time at home anyway since I wouldn't need access to company resources to do that. The best thing to do is try to prototype a component or software in WPF that your company has already written in WinForms.

I learn best by taking a real world scenario and tackling it with a new technology or language. If it doesn't turn out well then you still have good experience with the new technology that you can put on your resume, however if it works out well, then you can also use the prototype as an example of how much better the new technology is, and you may be able to convince your boss with a working prototype.

It is a win-win situation.


Find a business problem that needs solving - something that needs automating or a small application that will help some of the users.

Write the application using the technologies you want to learn.

You now have both learned something and have provided value to the company.


In addition to actually using the technology in smaller projects, such as Oded and maple_shaft suggested, I find answering questions on SO to be a good way to keep up with what's going on.

I've moved away from WPF programming a bit at work (stuck doing web stuff... ugh), but I still love it and find that browsing/answering questions on SO is one way to keep my WPF knowledge from getting rusty.

  • 1
    I find answering questions on SO to be a good way to keep up with what's going on I disagree, I think reading questions and answers is good but I find that trying to answer questions on SO before you are a grand master leads to less than complete and incorrect answers. Further, people answer so fast that by the time I prepare an elaborate answer, three others already beat me to it, then they proceed to downvote you because you neglected one small detail. If anything I find SO highly discouraging when I am learning a new technology.
    – maple_shaft
    Dec 13, 2011 at 15:29
  • 2
    @maple_shaft I felt the same way at first, but I would delete my incorrect answers and learn from the correct ones, and I found it helped improve my programming skills providing my pride could handle it. There are sooooo many bad answers out there that you definitely don't have to be a "grandmaster" to provide a answers to most of the questions. At least, that's been my experience with the WPF tag. I don't touch really popular tags like C#, mostly for the reasons you mention
    – Rachel
    Dec 13, 2011 at 15:40

You might consider focusing on theory instead of APIs. Then when confronted with problems, you'll know how to solve them and you can just skim the reference manual for whatever technology you have to use and implement a solution. It'll also help when you do want a new job :) If the self-study time is completely self-directed I would suggest choosing something completely unrelated to what you do; even if it seems unrelated at the time, the more you learn the more you might learn something useful.


I'd recommend developing something useful during your free time that can serve as a proof of concept for what you want to do. Plus, it allows you to apply a new technology to a problem domain that you and your management are familiar with.

For example, if there's some relatively simple utility program that users are clamoring for but nobody has time to write it, write it using WPF. Then present it to your boss. If they like what you've accomplished, they may be more open to moving in that direction in the future. If they reject it, then it is certainly time to polish up the resume.


The big picture idea here is to learn by emphasizing coding rather than reading whole books at a time before coding. Then capture that coding so that you can go back to study what you did, how you did it, and explain all that.

So here's a plethora of proposals:

  1. Configure a personally-owned computer as dedicated development machine
  2. Locally Source control all your experimentation
    • whether on your personal machine or at-work machine.
    • version (or tag, whatever) as you go along so you can later review the evolution of your changes
  3. Extensively comment in-line. Even "obvious" things.
    • This is for future review and quick re-learning so be verbose
    • documenting separate from your code is futile in the end.
  4. "Code Kata" - research this concept on the internet.
    • Borrows the martial arts idea of repetitious practice and applies it to coding.
  5. Learn by teaching
    • "If you want to learn something, teach it" - a time-tested truism.
    • Create your own on-line blog.
    • Write up things you're learning as if you're teaching someone else.
    • Originality is not a prerequisite. We don't care if 10,000 others have explained your subject here. This is for you in words you understand.

My approach is similar to Oded's one. More abstract I try to identify a concrete feature set, be it for a customer or for myself. I then try to be pretty TDD heavy, because that way I can approach the idiomatic ways of, say, a new language and see whether the features still work.


If you are passionate about learning new things, there are more hours of the day than you spend at work. Do some smaller hobby-projects on your own time to try out new technologies.

That's what most of us do.


In my view, learning all things will take time. What all i do is search for new technologies, by subscribing Microsoft website or any leading platform blogs or website, so if they introduce any new things, we will automatically come to know and then for the next time when u think to do something new, think of these new technologies.

Because you can only learn if you use it..

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