19

I am currently working as a Web Application developer using .NET Technologies. I am interested in learning more about the technologies that I work with, but I am ALSO interested in a million other things... (including Systems programming, Networking, Game Development, Mobile Development, Computer Science topics, Math, participating in an Open Source project, starting my own business, etc).

I can't seem to focus on one thing to become an 'expert' in when there are so many other things to 'master' that are pulling at my attention, and there are only so many hours in the day...

My question is, what are some good strategies to stop procrastinating and manage time effectively, so that you can get the most out of your free time and learn what you are interested in, while not losing sight of other priorities and letting other interests fall through the cracks? Or do I have to sacrifice, and if so, how do I prioritize what to sacrifice?

gnat
  • 21,442
  • 29
  • 112
  • 288
donnovan9
  • 219
  • 1
  • 7
  • Sorry, I edited to try and clarify the question being asked. – donnovan9 Apr 28 '11 at 02:56
  • Hi Konrad, your question is really long, and there's a lot that people would consider "ranty" in it. I know this is a somewhat ironic request given the question, but can you distill and focus your question down to a few key, salient points that are needed to answer a specific, solvable question? Otherwise, your question runs the risk of being closed as being more rant than question. –  Apr 28 '11 at 03:07
  • Sure... better? It is definitely ironic haha – donnovan9 Apr 28 '11 at 03:17
  • what do you want? Your question implies that you don't know what you want yet. – setzamora Apr 28 '11 at 03:29
  • That's part of the problem, maybe the root of it - how do I know what I really want? It feels like I want different things at different times. – donnovan9 Apr 28 '11 at 03:34
  • 7
    I think this is an interesting question... And I'm serious! – Sal Rahman Apr 28 '11 at 03:42
  • 3
    Not the same question, but some of the answers may be of interest to you: http://programmers.stackexchange.com/questions/16708/how-do-you-stay-motivated-for-hobby-projects – Benjol Apr 28 '11 at 06:55
  • @skizeey Thanks! I think so too, though I may be a bit biased ;) @Benjol Indeed it is a very relevant question and some good answers, reading now - Thanks for the link! – donnovan9 Apr 28 '11 at 13:51

5 Answers5

7

Yeah, I used to think just like you. I wanted to be able to make a game. Then I would go "no! I want to make a web app!" then I will say "no! I want to master Unix!" And this entire cycle of "no I want this, no I want that" never ceased.

So here's a short answer to it all: stick to doing what's at your finger tips.


So here's a story

I always wanted to build programs in general. It didn't matter what; I just wanted to build something. In the the end, the best way that I managed to move on with my life was just try to do something by using one tool that I "hear" being talking about. If I failed entirely, I would move on to something else.

And that's how I got into game programming.

It all started with Visual C# Express being showcased on the Microsoft.com home page. The entire IDE was blatantly available right in front of me, so, I clicked the download link and got started on it right away. I watched video tutorials, wrote lots of code, and there, I was set.

It was then I started to go left and right to find something to do. I could've built a Windows Forms application, or I could've built a website. Then I would be thinking about feature that I could include within my projects, but I will never proceed to actually build something. I just wasn't motivated enough.

It wasn't until the MSDN news feed in Visual Studio announced the release of a free framework to bulid your game on. It was XNA Game Studio Express v1.0! I got started right away. I built a few small games here and there.

But here's the catch: I felt more motivated to work on a game that just popped into my head, than the ones that had to think really hard for. I had a great idea to build a 3d snake game, worked on it for two days straight -- while taking breaks of course -- and voila! A very handsome game that works!

And when it would come to those games where my sole intention was to impress my friends. I would work on it for two or three hours and give up, and never look at it again. In fact, I haven't looked at it for at least two years.

So here's the moral of the story: let inspiration guide you. Don't force yourself to do something. If you want to make a webapp, maybe you might want to consider solving a problem that always bothered you. If you want to make a game, then I suggest that you look at the small things in life that you found to be "fun." Again, it all comes down to inspiration.

I hope that helps.

Sal Rahman
  • 1,544
  • 1
  • 12
  • 22
  • 1
    +1 for it is not technology per se what is really interesting, but fulfilling someone's real ideas (dreams if you wish) and solving real problems with it. – Péter Török Apr 28 '11 at 07:39
  • Thanks, this is wonderful advice, and a good point. Sometimes I mix up what I 'want' to do with what I feel like I 'should' do - but if I have an inspiring project to focus on, it should become clear what it is that I must learn next to move the project forward. The only problem that remains, I guess, is my desire to understand how other things work which don't necessarily fall under the project scope. It would be hard to come up with a project that is both inspiring AND utilizes all the topics that I mentioned in the post - but I have a feeling that I can come close :) – donnovan9 Apr 28 '11 at 13:32
4

Find areas within the fields you want to learn with overlap. You might not think it intuitively but systems programming and game programming can be very similar. Especially when it comes to accelerating hardware.

Another example, if you devote 10 hours or more a week towards building a startup company that develops a multiplayer mobile game, you've included Mobile, Game and Network development along with starting your own company. Find a good Open Source library that will be a major part of your project and help develop it further as a way to get going and become familiar with your framework.

Try to follow the KISS principle not only in programming but in life as well :) Consolidate and make yourself gain more reusable skills. In my situation, I'm usually developing internal software for running a company's day to day tasks, tracking data, etc.. In my off time I'm working on a game engine.

Both have huge amounts of data which need to be routed through complex channels. Both benefit from optimizations and both use databases, networking, cache and 'smart precision' among many other things. I've learned from each side how to increase performance and quality in the other.

My advice is to find the best set of tasks keeping in mind what you care most about and then, a close second, how well they interconnect.

  • 1
    This is exactly along the lines of what I was looking for! I guess the trick now is to come up with a project that has these overlaps. I like the idea of making a game precisely because it involves so many different, overlapping skills, not to mention, having completed a simple 'pong' game would give me a sense of confidence and supreme well-being - it's something I've been putting off for a while. A game engine is a great idea as well, as it becomes a launching point for future projects, and something I can build and expand upon. Cool stuff! – donnovan9 Apr 28 '11 at 13:40
  • 1
    A nice, juicey engine is a huge challenge that has been stretching my skills! Keeps the staleness of my day job's code away :) ...+1 for supreme well-being – That Realtor Programmer Guy Apr 28 '11 at 13:52
  • 1
    + 1 for "juicy engine" – donnovan9 Apr 28 '11 at 15:27
  • >_<; mispelled juicy~~ Hope I see your game when it comes out =P – That Realtor Programmer Guy Apr 28 '11 at 16:03
2

I suggest doing a nice project on the side. Come up with something cool you would like to build, but have no idea how to approach--maybe a game or a programming language or...

Instead of choosing a topic and learning it, learn what you need to get to the next milestone on your project.

In my experience, this focuses your learning while ensuring that it's complete. You learn only whatever subjects you need to finish your project, but (as long as you actually finish the project) you learn them well enough. The best bit is that non-trivial projects tend to cover a wide variety of subjects, so you won't become over-specialized either.

At the very end, not only will you have learned stuff (sometimes not the stuff you expected to learn, even!), but you will have something shiny to show for your effort.

Tikhon Jelvis
  • 5,206
  • 1
  • 24
  • 20
  • Great advice. I often tend to focus on "finishing the tech book" as the project in order to build a foundation for creating something 'one day', but now I am starting to see how flawed that approach is: slow progress, poor retention of knowledge and nothing to show for it! The reverse sounds more appealing: start with a project, and THEN hit the tech book with a thirst to solve that next challenge in your project. – donnovan9 Apr 28 '11 at 13:46
0

Well your situation is understandable. Happens to newbies. Well your current job will pretty much decide what will do in the rest of your life. It will be difficult(read near impossible) to switch to another line such as Systems programming the longer you work in your current line. If you wish to switch, do so in 2 years. You can follow up on your other interests on the side. Look for projects in sourceforge.

DPD
  • 3,527
  • 2
  • 16
  • 22
-1

This looks like it's going to take many years. Learn Unix, it won't become obsolete.

Christopher Mahan
  • 3,404
  • 19
  • 22
  • Yes, that is part of the problem... technologies come and go, so I start sweating over the fact that Silverlight 5 is coming out and I haven't finished that book on Silverlight 3 yet... for example – donnovan9 Apr 28 '11 at 02:55
  • and Unix is on the list too ;) – donnovan9 Apr 28 '11 at 03:02
  • @Konrad - If you can't decide, and can't keep up, then it would be wise to choose those technology paths that change "more slowly" to put it, like *nix, Perl, C, Fortran ... that have a history and are bound to be here some time from now. The problem with new technologies is that they burn out too fast, and unless you're concentratin g on them solely, most often you can't just keep up. – Rook Apr 28 '11 at 03:14
  • Interesting... I am keeping up fine with what I need to do at work, at least... just overwhelmed by the choices of what to learn in my free time. Yet, I like the idea of striking a contrast by working more on something like OS internals or networking in my free time (which change more slowly as well). I am still left wanting to do more though. – donnovan9 Apr 28 '11 at 03:20