Take the 2-minute tour ×

I've been interested in programming for a while now, and have been slowly, slowly, slowly working on things over the years. However, I don't feel like I've learned much.

I've only really stuck with familiar languages (Java, C# and I've tried a little bit of PHP). The problem is that in those languages, I've only brushed upon the surface of them and have restricted myself to doing fairly simple things.

For example, as a Java project, I've downloaded the source code for some game and changed a few things to my liking, but nothing terribly difficult. In C#, I've made a few WinForm and console projects to do some repetitious or routine tasks for me, which is nice, but again nothing too complicated.

I've just barely begun to grasp the concept of classes, multithreading and some basic but essential tools that are required in modern object-oriented programming. ("Why can't I just shove everything into one monster-sized class?" "Why can't I just run everything in one thread?" are questions I used to wonder about)

I've never made a large project by myself. Ultimately, my kind of "dream" hobby project is that I would like to create a game using DirectX technology. I say that because I've used XNA but it requires the user to install a framework to get it running, and I also feel that if I use the framework, that a lot of the back-end work is being obscured from me. (DirectX or OpenGL seem to be about as close to the machine as I can get without going overboard in complexity. DirectX is also installed on most [if not all] Windows machines that plan on running games.)

But I haven't even begun to even think about starting that. The amount of things I need to know to undertake a task is absolutely overwhelming. I wouldn't know where to begin. Likewise, I also feel inadequate because I've restricted myself to [what I see as] easy languages. I feel like I should start learning some scripting language or learn this or learn that, which is quite daunting.


tl;dr: I've been slowly teaching myself to program for a while now, but have been restricting my knowledge to limited languages and only scratching the surface of what I can do. I want to learn more and possibly start a decent-sized project (I can only make so many text-based RPGs and calculators), but the massive amount of knowledge I'll need is very intimidating.

One of my concerns is that I know so little about programming languages in general. Is it better to learn several languages or to be able to delve deep into one single language?

How can I motivate myself to learn more?

Am I thinking about this the wrong way?

share|improve this question

closed as not constructive by Matthieu, Mark Trapp Jan 14 '12 at 8:54


5 Answers 5

up vote 7 down vote accepted


I don't know that I can expound on much of your question, but this particular line struck me as one that I have something to offer...

While there's some merit in experimenting in a handful of different languages, what I've found (and it took me about 6 years to really see this) is that at its core, programming is programming, and languages are just syntax. The fundamentals are going to be the same across languages, and the longer you've programmed, the more you'll find that you can pick up a new language (at least to the point of basic proficiency) in almost no time. For that reason, I would say you'd be better served by diving deeper into one language and learning the craft than by trying to get a shallow understanding of several.

As to how to motivate yourself to get deeper, your comment about "another text-based RPG or calculator" reminds me of this: the way I typically learn best is to have a project in mind. When I start out, I know that it's beyond my present capabilities, and I know that there are components in it that I have never done before and know that I don't even begin to know where to start on them. Because they are a defined part of the project, though, I have to do the research to learn. That way I'm not boxed into, "Here are the tools I've already got. What new thing can I make with them?", but rather, "Here's what I want to make. How do I get there?"

share|improve this answer
Great points. Just make sure that "have a project in mind" is closer to the "calculator" example than, say, "let's create a new version of Word" example. Small steps are key, especially at the beginning. –  Wonko the Sane Oct 19 '10 at 15:38
Yep--in fact, perhaps maybe a good guideline would be to have a project in mind where you have an idea of how you would make the overall system, but there are individual components that will be new territory. –  Blumer Oct 19 '10 at 15:42
Languages aren't just syntax: "A language that doesn't affect the way you think about programming, is not worth knowing" -- Alan Perlis –  Frank Shearar Oct 19 '10 at 16:04
But this still might not end up being sufficient right? I mean, a project I work on that is in java and needs very little of Collections framework well might end up being not a GREAT step at learning that language. Collections framework is one of the core features of java and if my project does not cover it extensively would not be that beneficial. –  darkie15 Oct 19 '10 at 16:05
@Frank -- Yes, I've oversimplified, but for the purpose of the topic at hand, I still think it's true. And when you know you don't know enough, learning more in any language will affect the way you think about programming. –  Blumer Oct 19 '10 at 16:42

To really get motivated and to be able to learn from other peoples code you could start looking at some open source. With limited knowledge it would probably take you a while before you felt like you could contribute but it would give you real-world problems to solve and there would be real people out there using it which is fun.

share|improve this answer

As the others said, take baby steps. You make progress faster that way.

Also, you need inspiration. I got that from

  • Isaac Asimov, "I Robot"

  • Marvin Minsky, "Computation: Finite and Infinite Machines"

share|improve this answer

I would ask myself 3 questions:

  1. What is smallest/attainable step I need to take first? Break down the long term into small bite-size tasks.
  2. Why did I get into programing in the first place? Go back to your real passion and use that as your fuel for motivation.
  3. Who do I know who can work on a project with me? Accountability is key in accomplishing tasks that seem overwhelming.
share|improve this answer
+1 for #3, part b. –  Wonko the Sane Oct 19 '10 at 18:44

I think you are overwhelming yourself with the Big Picture. Don't try to learn everything at once.

Could you read War and Peace at the same time you were learning Marvin K. Mooney?

Pick a small task, and learn how to do it in the language of your choice. Then enhance it. Then enhance that.

Despite the perception that all programming is either 1.) game programming or 2.) hacking into your favorite government agency (the main questions that I get when I speak at a Career Day in any high school), most of programming is not necessarily so glamorous.

Grow into it.

share|improve this answer
I know that programming isn't glamorous - even in my limited experience, I've had the displeasure of tracking down hard-to-find bugs and written small but mundane applications. Writing a game is simply a hobby project I'd like to work on, with no idea where to start. –  Corey Oct 19 '10 at 16:15
Depending on what you mean by "writing a game" is a very ambitious Step 1. Break that down into different, simple parts. "I want to learn how to do animation." Then, break that down further. "I want to learn how to do animation in Flash." Then, start small - figure out "Hello World" in Flash. The biggest issue I see you having, again, is that you want to create the Mona Lisa - unfortunately, you need to start with finger painting. –  Wonko the Sane Oct 19 '10 at 17:10
That's very true and makes a lot of sense. –  Corey Oct 19 '10 at 17:42
