views:

708

answers:

8

Hello,

I have a question. How you get up motivated if you find out that you are far away from the best programmers? I mean I have some people who are around me who are better than me a lot. Some of them are web guru's, some of them are sport programmers(TC, ACM and etc). But they are universal, they easily can adopt to any development environment very fast. When we chat they show they deep and wide knowledge and understanding of technologies, I get depressed and envy that I don't know so much... So when I return back home where I always study for something new I don't feel motivation to do it. I just get back to my old bad habit - (pro)gaming. So how do you guys get motivated?

+4  A: 

Do it for the chicks man, they loooove nerds... :p

Mobbit
If you're trying to be funny, it helps to *be funny*.
OregonGhost
Shut up. He is funny :)
Click Upvote
Extremely. Ha Ha!
Seun Osewa
Unless movies from the 1980's have lied to me then you're dead on the mark!
Repo Man
+21  A: 
  1. Stop envy (if you do)
  2. Understand that you will get there with time and practice
  3. Don't focus on things you can't. Think of present and always look forward.
  4. Learn something new each day and enjoy your daily progress
  5. Do your best each day and don't worry if it's not perfect yet
  6. Have fun with what you do and with what you already can

Tips on how to get there:

  1. Feel involved. When you see an issue with your code or an improvement opportunity, explore it. Even if it doesn't work out in this case, the thinking process itself will bring you better understanding of the universe.
  2. You notice something not related but interesting - dig it out. It doesn't take much time to read a brief overview on Wikipedia - a cup of coffee or a full rebuild will give you a minute to do it.
  3. Check out daily programming sites and blogs. Now you read one article, tomorrow you read one more, after a week you'll tell yourself: "Nothing interesting today, I know it all already."
  4. Learn from your experienced colleagues. You miss something or have doubts, ask someone to enlighten you. People love teaching and patronizing. They will gladly help you.
  5. Have little fun projects to check out things, technologies and concepts. Make them short so that you can finish them and have a very important sense of accomplishment. This will be improving your self-confidence and automatically decreasing your demotivation issue.
  6. Help others when you can. When people say you solved their problem and they value your knowledge, this works like miracle.
  7. Now a difficult part. Discard the feeling of inferiority, of stress, of urge to quickly learn it all to become a master. Just forget it. Relax. Take a deep breath. Think of what will give you fun, learning what will you enjoy. Start there. Read something, process it, think about it. Now what cool could you do with it already? Use it in work project? What about trying it on your own? How about coding a little test case to check it right now? What about having a small project to practice it? Well, go for it.
Developer Art
Yeap, there's this article www.ericsink.com/Career_Calculus.html on points 2 and 3.
sharptooth
+3  A: 

I'm motivated because I am fascinated by the fact that I can sit down in front of a keyboard and, withing a short while, make the machine it's attached to do something useful. That's fundamentally what drew me into computers, and that's why I thoroughly enjoy what I do.

If you don't find the same enjoyment, you need to ask yourself if you're doing the right kind of work. Programming isn't for everyone. In fact, it's not for most of the people in the world. In the long run, you will be happiest in life if you find a profession that you truly enjoy and focus your energies on that. Maybe it's programming (and you just need to find your second wind), maybe it's not. Only you can tell.

Eric J.
+1 "I am fascinated by the fact that I can sit down in front of a keyboard and, withing a short while, make the machine it's attached to do something useful."
flybywire
Modern programming eschews the "within a short time" part. You can't do anything useful without touching lots of languages/frameworks. You can't write a simple console application and get any appreciation.
Seun Osewa
The code test at that company was to create a simple 3-tier form using VB6. It was very doable in 4 hours if you knew what you were doing and did provide some insight into programming style and knowledge of 3-tier architectures, but it was still not a great predictor of success.
Eric J.
+2  A: 

You need to be able to apply a bit of self-perspective. Are you unhappy because others are better than you, or are you unhappy because of low self-esteem issues? When I was young, I used to be overawed by the so-called superstars that I worked with. In a lot of cases, these people are full of it, and you come to understand (once you have a bit of age and experience on your side) that people don't challenge their bull because they are afraid to seem as though they don't understand it.

I'm lucky to be a member of a group of truly outstanding developers - the conversations that we have, and the level of discussions that we have inspires me to be a better developer. The truly outstanding developers inspire you to be better because you want to understand what they can do, and you want to be able to compete with them.

It's important to understand that everybody has to start somewhere. These "superstars" will have started off in just the same way that you did - with discipline and application, you can gain a deeper level of understanding. You need to be self-critical (in a none-destructive way), so you can analyse where your weaknesses are and improve them. Review your own code, and think about how you can make it better.

Read up on programming issues - not just on areas you deal with on a day to day basis; read about areas such as functional programming and patterns. Sometimes this breadth helps you to find solutions that are so "out there" that people think you are the superstar.

Pete OHanlon
+2  A: 

Sorry there is no "how to be a guru in 7 days".

But the good news is, there is no need to hurry. Software development is hard and has a steep learning curve, so nobody (at least no sane person) expects you to function at guru level from day 1.

Key points are, that you must be willing to learn and liking the job does not hurt either.

You can start a pet project at home to use the newly find knowledge and practices.

Gamecat
+6  A: 

A trap that is very easy to fall into is to put pressure on oneself to learn as much as one can in as little time as possible. The problem here is that in a higher state of anxiety, it is significantly harder to take information in and remember it compared to a lower state of anxiety. It's a negative feedback system that can be hard to break out of.

My advice is to concentrate your efforts on learning one thing and one thing well at a time. It does take time, but putting pressure on will not yield better results. Remember, programming and learning ought to be fun and one is most able to learn faster when one is compelled to view it in that way. By remaining focused on one thing, you set yourself a goal and it will no doubt touch on other topics that provide ideas for the next area to look into.

Everybody writes "crappy" code, it just gets less crappy over time and with greater experience, the first bit of code that comes out is less crappy than the lot that came out the first time around last time.

It will come, just give it time :)

I recommend looking at joining any groups in your local area that may provide some additional stimuli and motivation. For me, there are a number of .NET groups where I live that hold regular meetings for people of all levels to come and discuss the framework, 3rd party offerings and share their experiences.

Russ Cam
+1 for the "Everybody writes "crappy" code, it just gets less crappy over time and with greater experience"
Clement Herreman
+1  A: 

Here are some motivational (?) guidelines:

Their common denominator to me is:

  • Work on things you care about.
  • Make daily small incremental step. You may become a guru. Or just enjoy the path more.
Yuval F
+1  A: 

I think I'd like to turn this question around for a moment:

What would being the best programmer in the world give you that you don't already have?

Really, think about how would you answer that question and how do you know that there aren't thousands or more programmers that have a similar status, whether that be fame, wealth, power, or something else in this world.

At the same time, how would you measure that best? This is focusing more on how would you determine who is best. Personal wealth is much easier to calculate than something that may be harder to quantify.

Is Jon Skeet the best programmer in the world? Maybe, but I suspect even he makes mistakes and learns new things from time to time. Maybe somebody should ask that question somewhere.

As for what motivates me to be a better developer, this is rather easy to answer:

  1. Pride in my work - I have no issues saying what kind of work I do and standing behind it. Yes, it isn't perfect but then neither am I.

  2. Helping people - When I create something that makes it so someone can do in a few hours what used to take weeks, how can you not think, "That's cool, dude."

  3. Learning the tips and tricks of the trade - Having a store of various algorithm generating ideas and seeing how the world is put together motivates me to help build a better world. Solving problems can be rather neat.

  4. Continuous improvement - This kind of ties in with the first point but the idea here is that I'm a work in progress and improving year by year so that while I may get older and have some physical changes, there are also mental changes that may make up for that.

If you want a blog that may help with motivation, take a look at Sources of Insight, which is written by a Principal Program Manager on the Microsoft patterns & practices team.

EDIT v1.1: In answer to comments, here are my suggestions on where to go from here:

  1. If possible, ask those that can seem to do a lot initially how they are doing it. Are they relying on experience, guessing, or something else to get that idea? Do they really know all those details in advance or are they just doing what is needed as it is needed?

  2. Design patterns will help from the perspective of making your box of tools bigger. "Refactoring" by Martin Fowler and "Heads First Design Patterns" by Elisabeth Freeman are good ideas for where to start on some of this. I see refactoring as a mini-design patterns in some ways is why I group them together.

  3. Try to formulate the steps of what do you need to do at each step to be able to do what others do. This isn't likely to be easy or really fun initially, but I'd think effectiveness is why this would be good. The idea here is to possibly take a simple request and start mapping out possible answers and then check with those that could give feedback which ways seem better than others and refine this skill which is really what this ability is. Some people may have it initially more developed than others, and some may spend years working on it to get where they are.

I can understand how easy it is to get demotivated when one looks at the mountain of possible stuff out there to learn and how other people seem to handle things with ease, but do you know their story? Life lessons may help, especially if you remember things like "Do YOUR Best" and "Version Your Perfection" as ways to combat perfectionistic thinking.

EDIT v1.5:

"Do you have a cheerleader?" If not, I highly suggest finding one in your life so you have someone that can positively motivate you to do well, help move on after failures and really celebrate those victories in life. Have you ever had that experience were something awesome happened and you just get really excited and grin when telling others about this experience? I know I have and that is when having those others, whether they be developers or not, can make all the difference in the world in terms of getting back on the horse again and again, with nearly infinite recursion. I recognize that that is a bad joke, sometimes a little humor is a good thing.

The edit numbers are random and just a fun way to track what I change in the answer as this may get longer as more details are requested as like I noted above, I do like to help people, whether that be by sharing knowledge, experiences, thoughts or just listening to what happened to someone else.

JB King
I can answer that I cannot read code so fast and generate idea how to solve it. In example if one guy gets a task. He almost instantly have an approximate idea how it will look like. later on he manages to describe what he means in UML. After(or when doing design) he can calculate all resources needed for that(memory, speed). And that takes for him not so much time, as it will take for me. Major thing that I get demotivated. Because I don't really know what is lacking in me. Sometimes i think that i am lack of knowlegde in particular language, or i don't have a knowledge
faya
continue: about design patterns(only heard about and seen few), or just lack of experience... So I try to figure out how to solve this problem, and I don't I always struggle. Do I first need to read this book or that one? How much will it take? Will it help me for sure? Or is this is a correct path which I took? So I get so demotivated so I even don't know what to do....
faya