Yes I don't really know the feeling of what is like to create something, this kills me.
I am constantly disappointed by my code, it sucks, it's really bad and that also makes me lose motivation whenever I try to build something, for some reason failure is a permanent constant and the fear that I am going to fail anyway keeps me from actually getting trough building something to the end...
Just out of curiosity, were you a good student throughout your life, and told you were smart or bright? I ask because there was an interesting article on HN a week or two ago that showed a correlation between crippling fear of failure and self-doubt, and those with above-average IQs who were lauded for their academic prowess in school rather than their work ethic. Anyways, thanks for posting this question. I've found myself in this situation, and the advice shared here is rock solid.
I used to be in your situation and then I read this.
"I do not write tests for my code. I do not write very many comments. I change styles very frequently. And most of all, I shun the predominant styles of coding, because that would go against the very essence of experimentation. In short: all I do is muck around.
So, my way of measuring a great programmer is different from some prevailing thought on the subject. I would like to hear what Matz would say about this. You should ask him, seriously.
I admire programmers who take risks. They aren’t afraid to write dangerous or “crappy” code. If you worry too much about being clean and tidy, you can’t push the boundaries (I don’t think!). I also admire programmers who refuse to stick with one idea about the “way the world is.” These programmers ignore protocol and procedure. I really like Autrijus Tang because he embraces all languages and all procedures. There is no wrong way in his world.
Anyway, you say you want to become better. I mean that’s really all you need. You feel driven, so stick with it. I would also start writing short scripts to share with people on the Web. Little Ruby scripts or Rails programs or MouseHole scripts to show off. Twenty lines here and there, and soon people will be beating you up and you’ll be scrambling to build on those scripts and figure out your style and newer innovations and so on." -why
That's fair, but who actually cares about how good your code is? Make it work. Hack things together. After you practically code for longer, patterns will emerge, you'll refactor and rewrite as necessary. At any point in time, if I look at code I have written earlier, I shudder at how awful it was.
Finally, "fear that I am going to fail" is silly. It's the other way. You're starting at the point of failure. You have nothing right now. Accept that, and then you won't have to hold yourself to such a high standard. Start somewhere (and remember that you "suck" at first), and keep at it. Seriously.
Pretty much everything sucks when you start it. Its only by working on something sucky that you figure out A) this sucks and B) how to fix it. I've got a couple of gems that are embarrassingly bad in spots—they (mostly) get better over time.
Remember that software development is much much a procedural skill than a memorized skill. You have to do it, and you have to do it a lot, before you'll be great at it. Get started making the mistakes you need to make, and don't let them get you down. We've all got projects we didn't really get off the ground.
I don't really know the feeling of what is like to create something.
Take a cooking class.
I'm absolutely serious about this. You learn to build things by building things, and you build things by following recipes, recipes that are very slightly above your skill level, but no more. Go get some recipes, and use the techniques they tell you to use, and build some pancakes, and eat them. [1] Then you will "know the feeling of what it is like to create something." Something tasty.
I can hear you already: "My pancakes are just pancakes! They are not amazing and original pancakes." This is true. You need to get over that. Trying to amaze yourself is generally a waste of time. You can't do it consistently – that's what "amazing" means: something that doesn't happen every day. If what you want to do is create things, lots of things, every day, you've got to realize that it's not going to feel amazing while you're doing it. It's going to feel normal.
But: It will be tasty. Oh, there are worse fates than being so good at making pancakes that you can make them without even thinking. For one thing, other people will eventually start talking about your amazing pancakes, and even though you'll know in your heart that they're flattering you - hey, they're just the same pancakes that you've made a hundred times, from a recipe, with only a minor tweak or two - it will still be gratifying.
And maybe in thirty years you'll be the next Anthony Bourdain, and you'll be out drinking one night and suddenly you'll look at yourself and your own life and be amazed: You remember starting off with the pancakes, and you just kept trying a little more every day, and then there was the day you got a job cranking out those pancakes on the line, and man was that an educational experience, but now it's years later and you're shocked to find that you're some kind of breakfast legend, people line up for your amazing cooking, and at that moment you'll actually be amazed at yourself for everything you have accomplished. You'll be amazed for at least five minutes, maybe even ten minutes, depending on how much you've been drinking. [2]
Then you'll wake up the next morning and go back to work, just like we all do.
Anyway, programming. Throw SICP away and try something like Zed Shaw's Learn Python the Hard Way, something with a lot of exercises. Do all the exercises. Then do some of those programming-contest-type problems. Do little problems, ten-minute problems, thirty-minute problems. Practice the art of small victories.
---
[1] No, do not use a pancake mix. That's like copy-and-paste.
[2] Incidentally, alcohol is a depressant, so don't think I'm seriously recommending it to someone who is already depressed. Coffee! I meant coffee!
Learning to cook is one of the most important things I've ever done for my creativity. Not only does it help you get into building things, but it's a great way to blow off steam and boost your self esteem with small successes. I learned from a friend who taught me his "no recipes" approach, but I'm sure a cooking class would do the trick if you're not an improviser.
A meal or two per day and suddenly everybody is complimenting you.
I really like this advice. Even if you're not doing super-duper, crazy creative "disruptive" things all the time, one can get a huge sense of satisfaction by approaching some platonic ideal of pancakes, or whatever. Even if your code (or copywriting, design, or whatever it is you do) isn't groundbreaking, you can still strive for the ideal form of whatever it is you're working on.
I heard a really good piece of advice, in the form of metaphor: If you install carpet for a living, you don't have to like the carpet you're installing, but you should be damned proud of how well you laid it down.
Yes I don't really know the feeling of what is like to create something, this kills me.
I am constantly disappointed by my code, it sucks, it's really bad and that also makes me lose motivation whenever I try to build something, for some reason failure is a permanent constant and the fear that I am going to fail anyway keeps me from actually getting trough building something to the end...