Take the 2-minute tour ×

Every time I settle down to continue my programming practice I always get hung up on intrusive thoughts like:

  • Am I being effective enough?
  • Am I going fast enough?
  • Am I learning the most relevant and important things?
  • What are the methods that I can use constantly to ensure that these conditions are met?

Every time these questions or things similar to them pop up in my mind and I get into analysis paralysis, I waste time and I don't get much done for the day which makes me feel worse(guilt).. What can I do to constantly remain in flow and stop worrying about speed and effectiveness or relevance of practice?

share|improve this question

8 Answers 8

up vote 6 down vote accepted

A big part in trying to effectively learn something is confidence.

After a day of trying to learn new programming techniques, sit down and program something random. Something cool! Something you've always wanted to program.

It can be a small program, like printing your own drawing in the console window or by calculating how much you will earn if you put your monthly income into stocks with cumulative returns etc. Try to use the techniques you learned that day.

Analysis paralysis is not helpful. It obstructs your learning process. By gaining confidence you will see that you are actually acquiring the skills and knowledge you are after.

This is because there is no such thing as 'learning the most relevant and important things', acquiring a skill involves touching and working with many different aspects of that skill. Different viewing points. Different details.

Therefore learning less relevant details still contributes to your general understanding of the whole.

The other questions (Am I going fast enough?, Am I being effective enough?) are purely because of lack of confidence. In any learning process, speed has nothing to do with how much you actually learn. It's about exposure: making many, many hours!


Because this is how our neocortex works: by making many hours your brain will store different versions of the patterns you are trying to learn. By having many different versions of these patterns, you will eventually recognize them faster. And that process is called 'learning'.

Hope that helps you out.

share|improve this answer
Good answer. Thank you. –  Duval Pearson III Feb 8 '14 at 3:54

The first two questions you ask require some sort of benchmark in order to be answered:

  • To be effective, you must have a goal that you're trying to effectively accomplish
  • To be going "fast enough", you must have some sort of deadline against which you measure time

I don't think you're doing anything wrong by asking yourself these questions; on the contrary, I think they're quite healthy for the learning process. But in order to avoid getting hung up on them, I think it's best to try to make them easily answerable with yes or no. I'm not sure how you best learn, but what has worked well for me is to make up a project I want to do, break it up into smaller tasks if it's a larger project, guesstimate how long everything should take and assign deadlines accordingly. The project can be something tiny like creating a hello world program in a new language within an hour, or something larger like creating a social network.

Since it's your own deadline, there's really nothing to stress about them, but they're just helpful for benchmarking your progress. And something super helpful is to use something like Trello and use checklists so you can very easily see what you've accomplished and what you have left to do.

Another benefit to project based learning is that you end up learning the "relevant and important" things in the process. For instance, if you decide to embark on creating a social network, you'll have to decide which database to use. So in asking yourself which database you should use, you'll likely come across the terms NoSQL and Graph Databases along with articles saying you really shouldn't stop using a relational db unless you have a really good reason (but you'll end up using mongodb or neo4j anyways because they just seem so much more fun). If you're just starting to learn programming, you shouldn't really be asking whether you're learning the most relevant and important things, but rather ask yourself if you can confidently accomplish the tasks you have set out to accomplish (in your project); if you're not confident, then the most relevant and important thing to learn at the moment would be whatever you still need to learn in order to confidently complete your tasks. Afterwards, you can start researching whether there was a way to do what you did.

Also, I don't know where you are in learning, but I've found that Test-Driven Development is really helpful with staying focused and having very concrete ways to measure progress. And though the overhead might be a bit much if you're just starting out, learning to use version control, such as git, can help you view your progress over time. I definitely wish I had started using git back from when I first started to learn programming (though it didn't exist then). It would've been amazing to see exactly what code I wrote at which time, and the comments kind of create a diary of sorts (for personal projects).

TLDR: Instead of trying to ignore your questions, create projects with goals and deadlines so that you have benchmarks allowing you to easily answer your questions without wasting too much time on them..

share|improve this answer
Good recommendations. Thank you. –  Duval Pearson III Feb 8 '14 at 3:56

I think these are all good, valid questions one should ask him/herself from time to time. As a general principle it is nice to write down the task and divide it to smaller parts and work on these smaller tasks one by one. There are many methods like GTD or pomodoro if you even want to be a bit more systematic. At the end of the task or day or even week you can ask all the questions above. I think they are valuable.

share|improve this answer

The questions that pop in your mind are useful BUT... only at a certain - later - stage of your progress.

And as I can understand from your question, you aren't yet in that stage.

First concentrate yourself on acquiring the basis - and only after that start to think about improvements. It's difficult to improve what you don't know yet.

It may sound strange but see it like that:

You want to create a new amazing product that beats all the competition. You are at a design & specification stage. Do you think it's a moment to think about the layout of the future factory that will manufacture that new product? No. First you should have finish the product design - don't lose your focus. The factory will come later ;-)

The improvements, the effectiveness and efficiency come with the experience. But to get this experience, you first need to learn the basics. And even if you don't learn in the most efficient way, the most important is to pass that critical point between the acquisition of basics and the improvents of the way you are working/learning.

share|improve this answer

In addition to the following pieces stated above:

  • Try to not worry about it until you are further along your learning path.
  • Use a system to create small pockets of focus time (like pomodoro)
  • Create manageable goals so you can measure effectiveness
  • Create some deadlines so you can measure speed
  • Try to build your confidence

I also want to add that all of these things are hard. They continue to be hard problems in development, even with people with a lot of experience. There are some things to make it easier though. All of the above get better with experience but you need to get that experience in order to make it to a point where it is manageable. The essence of your question is how to make it to a point where you can do this.

My biggest piece of advice is to find someone who is more experienced than you, preferably someone who has mentored someone before but is someone who remembers what it is like starting out. Try to arrange a weekly check in with that person where you state you reflect on how the previous weeks goals went and set goals for the next week. This goal setting can be really helpful because as they get a better sense of where you are in your path, they can help you set attainable goals that will help you build confidence and measure speed more reliably. A mentor can also help you see blind spots for things you should be learning but don't know to learn yet.


  • Find a mentor
  • Use discussions with them to make manageable goals, have accountability, and shed light on blind spots in your learning path.
share|improve this answer

I don't get hung up thinking about programming simply because I am enjoying myself when I am writing code. As a programmer, I will always be learning how to program. There are always challenging problems to solve and techniques developed that keep it interesting

That being said, you are spot on in your areas of concern.

Goals, deadlines and measurement of effectiveness are constraints that programmers have faced as long as there have been computers. Lucky for you there are professional practices that address these concerns. The practices fly under the banner of Agile Software Development

Get familiar with the following practices

share|improve this answer
Thank you. I will look into them. –  Duval Pearson III Feb 8 '14 at 3:58

Some great comments from the others, but two more essential thoughts, imho...

Schedule reflection time so that you do not allow yourself to second guess what you're doing outside of that window.

Find the fun thing to do and just do it. It sounds like you have a lot of long term motivation but not a lot of short term motivation. You have to find some reason for doing it in the short term.

share|improve this answer

Self confidence - must have, for sure. It speeds up every human being task.

But you should get the feedback from your team lead, or from your colleagues who have more experience. You should compare your speed/code quality with others. If you are studying yet then find some programming club or join the online community (e.g. - http://www.codecademy.com/).

Once you take part in commercial projects you will have deadlines and code guidelines and code review and valuable feedback from your colleagues. All these restrictions will help you get into the flow )

And remember that discomfort - is why magic happens - https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-prn1/p480x480/555150_3464849669140_1365424940_n.jpg

Hope this will help.

share|improve this answer

Your Answer


