When I have a programming assignment or some program that I have to start on I sometimes have this feeling of despair, I just do whatever to starting and then I just start feeling like crap, and that makes me not start even more...it's like a vicious circle. All my friends seem to just get things done...Is it just me or are there others that have this problem? Am I not a in "love" with programming?

If there are others, how do you overcome this feeling and just start?

EDIT:
@Kennith
it's actually kinda hard to describe but it kinda like very mild depression, i think it may be because the work required of us is so challenging. I remember in high school I loved programming because after learning the synthax of a language(ie java) you felt like an expert and could do a lot of programming. But in university the there is just so much complexity to programming and so many little things that I never considered before, log time, data structures, insane algorithms, graphs, np problems, etc.that I think I've lost that confidence that I once had. I don't think I've had to do any programming over the last 3-4 years where I knew much about what I was doing (had an overview but it was all new territory), every single project I work on is new material, new concepts, language, theory, etc. It's good for learning...in hindsight, but when your learning it's hard and frustrating. But you sort of never feel like your progressing or actually accomplishing anything. You feel good for a little while after finishing one proj, but as soon as you look the next one...its back to ground zero. What I love(d) about programming is that feeling of mastery, that was motivation enough, now when you're always doing something new, its really hard to get that feeling back.

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.

Can you elaborate on the feelings of despair? Is it confusion about where to start? Dreading programming yet again? Feeling like there's too much to learn? I'm not sure you've provided us enough info to adequately answer your question...
–
KennethMar 23 '11 at 5:04

does the feeling come for all projects or only some projects? if some, what's the similarities among those projects?
–
ohhoMar 23 '11 at 7:00

is it because in school you were appreciated for what you did and that made you felt great? No such feeling in university. No one to say 'Cool Job!' after you are done? No one to impress ?
–
Imran Omar BukhshMar 23 '11 at 12:42

1

Are you sure you want to continue being a programmer?
–
user2567Mar 23 '11 at 13:01

14 Answers
14

This would happen when the problem or task is tough and you have no clear idea of how to approach it and no clear vision on the sequence of steps to take to materialize the results.

Best way to break free of the vicious circle is to define the problem and break it into steps on paper. It does not matter if you don't start coding the instant you get the task. What matters is you get the clear idea of how to proceed in a refined set of steps.Once that happens you will find all the sense of desperation vanish, you would not have time to think of despair because you have implementation at hand.

But not getting started on paper is definitely not good.Alternative would be to discuss with colleges.But, if time permits it should be avoided/delayed as you must learn to tackle problems with your own systematic approach.

+1 for breaking it into steps on paper. Many years ago I never thought visualizing and breaking down is that important. Then, some years ago I did realize how important it is, and I was trying to use nice tools to visualize and brake down the problems straight ahead, such as MS Visio, open office drawing etc. Only in the recent few years did I learn to value the time spend for real project analysis before coding, and came to this conclusion: Paper and discussion FIRST, Visualization tools and more discussion SECOND and LAST thing is coding! You gain time spent on analysis multiple times later!
–
mspirApr 17 '11 at 15:36

Sounds like "cold feet"/"stage fright". Personally, as a sysadmin, I trust a programmer who worries about their ability to do something more than I do the hotshot who is absolutely certain they can do anything.

Sounds like you're not confident enough in your programming skills so are getting scared when the "challenge" of the assignment comes up.

When you're just given a problem and asked for a solution, it can be very daunting, especially if you're newer to programming. To overcome it, you just need to break the problem (your assignment) down as far as possible.

Try starting with simple input or output, or the basic calculation and then build more and more (small) "functionality blocks" onto that and then suddenly you'll realize that you've built the whole assignment without any problems.

Very interesting topic. I think the best response so far is Kenneth's comment, not any of the answers. When we are struggling we have to ask ourselves what it is we're struggling against. By putting a name to it, it begins to become manageable. If it remains a mystery, it can seem insurmountable because it could be anything - it could be a giant mountain, too high to climb. When you have this feeling of despair, be curious about it. Probe it little by little and learn about it.

A great way to have that motivation is starting a project of your own, you can get the feeling of mastery outside of the realm of the classroom and the modicum of weekly programming assignments. Also, yes, it's difficult, and yes it's probably not going to stick extremely well, but that's also why I say pick up your own project, or once you've gained more knowledge, go back over old assignments and apply your new knowledge to the old assignments. Find ways to incorporate the abilities that you find are short term (due to cramming so many concepts in in a short time) into longer term projects and that will help overcome this barrier (hopefully).

Awe... now that we have assessed the situation further an answer can be provided! I think I understand your feeling (at least I feel as though I have experienced this at times myself). A couple thoughts:

My first thought isn't necessarily an answer but perhaps a way of looking at the situation that maybe you haven't (or have...) thought about before. The only way we can grow and progress is to be challenged beyond our capabilities. This is common thing with regards to almost everything but I think it's very well illustrated in weight lifting. In order to make muscles grow you must first destroy them. If you only lift what you're comfortable lifting then you'll tone up but never build muscle. If however you stress your muscles just beyond their capacity (but not too much each time) then you rip your muscles and break them down such that when they heal they're stronger and able to lift even more! The same is true of any task or activity that we want to develop ourselves in. We must push ourselves past what we know or are capable of in order to grow.

My second thought is also not an answer... Sorry... A wise coach illustrated something to me once that I will never forget. In expressing concern with the fact that I wasn't even close to being even a decent member of the team (lets face it... coordination at the sports level isn't my thing!) he pulled me to one end of the court where he had me face the other. He then asked me to take a step towards the opposite end. I did at which point he asked if it looked like I was any closer to the other end. I looked and honestly it didn't. He then pointed out that for me it was hard to see how far I had gone because I could only see how far I had left to go. He on the other hand standing next to me could see I had moved forward 2-3 ft. The same I think is true in our daily lives. We're constantly growing and learning but because we can see the goal it gets difficult to see how much advancement we're making.

Now... I do have a couple of suggestions (FINALLY!!!). But please note that there isn't necessarily a one solution fixes all solution in a case like this. It sounded to me though that you might benefit from spending a bit of time working on personal programming projects. Things YOU want to do. This will give you a few benefits... you hopefully will be able to feel those feelings of accomplishment again, you'll get a chance to use some of your new knowledge, and there's definitely no replacement for personal study and application of knowledge! I'm sure it may seem like you don't have time for this... but it doesn't have to be much. But you will have to put it first some of the time or you won't do it.

Another thing to consider is that there will be times where you just need to get away from it all... do something completely unrelated to computers in anyway shape or form that you really enjoy! Decompression is a must at times.

One last thought... IMO you never really begin your journey to mastery until you have reached the point that you see very clearly just how much you DON'T know... And you'll likely reach this point many times in your career. Computer Science is such a large field and you likely won't be able to master all of it. Pick out the things you do want to master and focus on those. Remember that school is only temporary but opportunities for challenge will always be there. Dive in when you can because this leads to growth!

I don't know if any of this helps... Don't be ashamed of those feelings though. Talk things out with friends you trust and hang in there! Good luck!

+1 I think the bit about "just beyond their capacity" is very important to growth... Trying to go too far beyond your abilities can lead to the feeling of helplessness, causing de-motivation. I have a feeling the OP is trying to do too much at once...
–
Aidan CullyMar 23 '11 at 12:16

I used to have those same feeling of dread at the first programming job I had. I felt like I had a responsibility to get this code done quickly and everyday that I didn't have it done was a failure. I would get to the point where I wouldn't code because I was paralyzed by the sense of failure and despair. Eventually I got laid off (fired) because I wasn't doing the job.

I decided to do an analysis of what went wrong. I realized the following things.

My fear of failure coupled with a lack of experience and no guidance is what paralyzed me. I was too intimidated by my coworkers, because of their experience, to ask them questions. This increased my feeling of isolation which increased my feelings of impending failure. I ended up trapping myself in vicious circle which made my fear come true.

I came up with some rules for myself.

Everyday, identify what you your goal is for that day and work as hard as you can towards it.

As soon as I run into a problem that I can't solve ask someone else for help. If it still can't be solved bring it up to the boss.

If I don't know what to do ask.

Communicate, communicate, and communicate.

Identify what I didn't do well and work on doing it better next time.

Later on I appended:

The less interested I am in the work, the more the quality of my work suffers. So either find what is interesting about the work or switch jobs.

I started doing these in my new job and started feeling much better about working on software. It wasn't immediate, but slowly those feelings of despair went away. I havn't been paralyzed by the fear of failure since then. I have failed on a few projects as well, but I treat those as learning experiences which is what you are supposed to treat them as.

Sometimes we get depressed, and even a mild depression can take away a lot of motivation. I personally went through a period like that when my grandfather died. My skills were still sharp, but my motivation was gone. I didn't relish the challenge that lay before me as in the past. Depression can come from many sources, so while for me it was my grandfather's passing, for you it seems to be getting overwhelmed with new concepts you never had to consider before. I don't want to sound like what you are going through is any less than what I went through. Best I can figure is that depression makes no sense, but more importantly, it is temporary.

The only thing I can say is, "never, never give up" (to quote Winston Churchill). As an escape, and to help clear my mind, I got pretty deep into photography for a bit. In the mean time, I kept my job, and kept doing my duties as best I could. After a period of time, the excitement started coming back. Particularly when connections between photographic composition and artistic elegance started to appear with code and UI design. Those new connections gave me some fresh inspiration, and then programming was fun again. Perhaps I just needed a break from constantly looking at programming through only one viewpoint. Perhaps it was just time.

The point is, you can't live your life by your current emotions. If your emotions make no sense to you, keep pressing forward. Have another outlet/focus other than programming. It can help keep the feeling from becoming overwhelming. Of course, if your emotions do make sense to you, it's time to look at why you are feeling that way. I've had adversarial relationships with clients before (simply by being caught in the middle of office politics between the people needing a solution and the ones paying for it), and that's a situation you just don't want to be in. But, if it's a feeling of no motivation without any obvious reasons, keep pressing forward. It will get better.

+1 for "Perhaps I just needed a break from constantly looking at programming through only one viewpoint. " Adding a different viewpoint can do a world of good for anyone, especially for those who rely on creativity.
–
Corv1nusMar 23 '11 at 14:38

Personally I think writing code is a lot like writing a novel when it comes to creativity and authorship. One of the best advice I ever got, cheesy as it might sound, was from Stephen King's "On Writing" which contains a lot of advice around the process of writing.

The most important thing when starting coding is just to get code down "on paper", especially on harder problems it can be very daunting knowing where to begin so just begin with some small part, write it without thinking too much about design and flexibility. Continue filling in different parts of your program and make sure to keep it "runnable" since it helps with the motivation actually being able to test the program. Usually you gather momentum after a while and can tackle design issues and do some refactoring.

I've done a bunch of projects which looking at them know seems unsurmountably complex but they were all done by working incrementally and doing a bunch of proof of concepts, integrating them into the code and doing continous refactoring.

Another trick I've used to "fool myself" into doing stuff I find boring or hard is listen to something interesting (like a podcast,documentary,audio book or even some tv series) while working. It'll make the task much more enjoyable and so long as it doesn't require deep concentration it won't take away from your work (and doing some work is better than doing no work), if you reach "flow"-mode it'll fade into the background anyways

You're probably feeling that way because you can't "see the light at the end of the tunnel."
You're given a big assignment with lots of requirements, and all you have is a blank screen.

Start by drawing up a game plan on paper. Figure out what architecture you're going to use, what classes you will have, etc. Now stub out all of your classes so that you can see things come together. Finally, implement all of your methods to "connect the dots."

I used to get stuck, worrying about choosing the "right" solution to a problem. Then I read "Extreme Programming Explained", and tried test-driven development. I learned that there is no single "right" approach, and even if there is, no one knows what it is until they are halfway into implementation.

That made it much easier to get started on a project, because I wasn't trying to solve the whole problem in one go. I just start with the simplest test case. Usually this means empty input, and no output. Then I solve a slightly more interesting test case, and clean up the code as I go. Occasionally I do run into algorithmic problems, and stop to do some research, but that's a mathematical problem, not a code design problem.

Maybe you need to listen to your inner self and ask it whether you should be doing programming. If it was for you, you would have a different feel about it. If you must be in IT then maybe, networking/ system admin?