That very week I switched my major from physics to computer science. The code I wrote then was truly, truly awful, but the feeling it brought the first time a line of cubes was correctly drawn was incredible. I, and only I had made it do that.
I've not felt that way again. Programming contests bring only the feeling of excelling in competition. Algorithm textbooks bring only the short-lived satisfaction of having a magic trick explained to you. Now it seems any time I research a new project I'm drowned in best-practice recommendations and intense fear of writing my own extensive library when a tested, vetted, and fully functional copy exists elsewhere.
What to do? I would do anything to recapture that feeling.
 http://i.imgur.com/wih35.png (find the tetris pieces!)
* If you want to run the script, you'll need the modified turtle graphics module found in the same github directory.
Personal projects give you freedoms that professional ones can't. If your personal project isn't quite as stable because you rolled your own middleware in Node instead of using something that's already built, you can tell people to go to hell. These are projects that exist first to let you explore, interact, and build. Perhaps they exist second to provide utility to you. Only as a distant third do they exist to provide utility to others.
Now, that isn't to say that such a project can't or won't evolve into a professional one, or that you won't decide to make utility to others a higher goal. At that point, you'll have to see about revisiting some of your early decisions. But to me, what keeps things fun in that context is exactly that: creating something for me and no one else. Because then there are no rules and no constraints: just a canvas, a paintbrush, and paint.
when I work on a personal project, if I want to implement
a functionality and there's a library that does it, I
write it myself anyway.
This year is different though. I've done a new project every month and amazingly the code seems to make its way back into the real product. This month I unintentionally worked on my main product for fun...but not features that customers have been asking for. Instead, the guilty pleasures like making the admin interface twice as fast. Long time customers were really excited to hear the change.
For (1), I picked up the book Seven Languages in Seven Weeks and learned to write (really basic) Ruby, Io, Erlang, Prolog, Scala, Clojure and Haskell. I didn't write anything great, but it was a lot of fun to play with new ideas.
For (2) I decided a couple of weeks ago to implement my own Lisp. I know almost nothing about Lisp and so I'm making a lot of mistakes and re-inventing the wheel a lot, but having a language whose syntax or semantics is changeable on a whim is just so much fun. Want a syntax for function literals? You can add it. Always thought that hashmaps should be a special case of functions? You can add that too. I can't recommend this enough as a way to rekindle your interest in computer science. I'm going to work on the language in my spare time for a couple more weeks, and then try to write a compiler for it. I've never written a compiler before (I was a math major, not computer science). I have no idea how you do it. But I'm pretty certain it's going to be fun.
It is not a coincidence that the article was written by a Nobel price winning scientist. To be successful in science you to be in this creative mode of operation all the time. Even if you are solving a "real" problem (the kind you get funded to solve), your inspiration for doing so needs to come from all over the place.
Did porting your project to github mess up the formatting, or did you actually use 8-space tabs?! Because I just threw up in my mouth a little bit.
Nobody picks a date and says "from that point on, I'm going to grow up and lose my sense of wonder", but still it happens. I worry, sometimes, about how dangerous slow changes can be. The boiling frog thing turned out to be a myth, but the fact that it still persists as pseudo-fact tells you something about how well it aligns with our experiences. I saw a child today play for, honest to god, about half an hour with a low concrete wall. What if I'm just getting a little bit less playful every day?
With achievement I feel like you have an internal zero point that you measure from. But the zero has a dangerous tendency to climb. When I was a child I felt like the zero was at, well, zero. People got impressed if I just managed to fall over with gusto. Now I'm a proper software developer and aspiring startup guy, the zero is more like being well paid writing good code for successful projects that make an impact but are also somehow deeply meaningful, about which I make clever insights while blogging, tweeting, plussing and getting a million internet points on Hacker News.
Even if it's not quite that bad, expectations build up pretty quickly, and it's easy to end up worried about being in the negative. Why can't it all just be positive? Imagine if you could return to the days when just getting something to compile was a victory that would stay with you for days. I don't really know if it's possible, but I have been making some attempts to try.
I read a book on Stoicism that was referenced on Tim Ferriss's blog (that he writes from the deck of his jumbo yacht on the shores of lake always successful), and it actually had a lot of great stuff to say about how to stop expectations wrecking your happiness. But even armed with the ability to bring up Marcus Aurelius at dinner parties, it's tough going. I've cut down to one day a week of work (and pretty fun work with a low responsibility factor) on the theory that I should undersubscribe myself for a while and let myself naturally gravitate towards things I like without an expectation they'll be my life's work, or even very good at all.
That's meant I've spent a lot more time doing things, but I still feel a sense of residual nervousness that things I do will be bad. My website, for example, has been blank page for nigh unto half a decade now, just because I want to write something good on there and I'm not sure whatever I write will be good. Old habits die hard, I guess.
Having written this now I look back and it seems long and rambly without any particular point other than what goes through my head when I think about that part of Feynman's book. I feel an overwhelming urge to go back and tidy it up, try to tie it all into a nice conclusion or something. Maybe that's the point, though. Can't I just be proud of the fact that I wrote something without worrying that I should be able to do better? Maybe we're all standing around worried but nobody says anything because it would ruin our carefully tended never-fail image. Alright, I'm going to post it. Here goes...
I was really pleased to see you referencing this site - the Feynmann piece reminded me of his attitude to interaction and life generally.
(The most famous book of his - "How to Win Friends and Influence People" - I can really recommend too.)
That said, I do agree that practicing facing rejection is a good exercise. I just feel better about that exercise when it's done as part of something useful to others - e.g. handing out lunch coupons, etc.
¹ I just invented this fact.
If you loved it once, it will come back to you.
It only took a few months being away before I couldn't contain it anymore, and would catch myself building solutions for things in my head, excited to get back to my apartment and code it all out.
It's not always practical, but a break from it all can be really healthy.
It's a lucid dream that you can get to work immediately after. Letting y imagination run has pushed me to build many things I wouldn't have rationally considered. The dishes are the most sure fire quotidian way to get there.
Fresh creative work is something that enables you to make a break with your history.
You have to move on.
I don't know what kind of software you write, but if it were me, and I got tired of writing software for the web, I'd try to pick up writing graphics, or writing native mobile.
"Twyla Tharp, one of America's greatest choreographers, began her career in 1965, and has created more than 130 dances for her company as well as for the Joffrey Ballet, The New York City Ballet, Paris Opera Ballet, London's Royal Ballet, and American Ballet Theatre. "
I'm really rediscovering the joy of programming by teaching intro programming classes at the local community college. To some extent it's let me relive the first time I realized I could make the computer do what I wanted, not what someone else said I was allowed to.
I would say that the death of his first wife Arlene and the aftermaths of the Trinity Project affected Feynman greatly, as exuberant as he is usually.
Feynman's magnificent exuberance and puzzle solving enthusiasm was also illustrated during his last days, where his coworker Christopher Sykes remarked "Look at this man. He faces the abyss. He doesn't know whether he is going to live through this week. But he was consumed by it, and he worked on it all day long...."
Feynman was the epitome of the "Doing things for the fun of it" philosophy. His last words to his artist friend Jirayr was "Don't worry about anything~! Go out and have a good time~!" http://www.youtube.com/watch?v=Fzg1CU8t9nw#t=1h32m10s
The first hit on searching for the quote explains its history: http://quoteinvestigator.com/2010/08/27/master/
We should all follow our natural tendencies in order to do what we want. Whenever you fight it, it creates a cognitive dissonance within you that makes you feel depressed and unworthy sometimes.
Also, with web applications you get to make websites, and experience the thrill of crazy traffic, ad revenue, and making sure people have a good time.
Web apps is what brought the excitement back to me. Again, I'm 19 so I'll most likely end up finding another vehicle for my excitement in the near future.
I guess I've been lucky in the fact that I've never truly been so burned out that I've stopped coding completely. I still get that feeling that I used to get when I first started writing software 16 years ago.
The key is to have interesting personal projects. Even if I'm working on a project I hate, I can always find some piece of it that I like (and I can use for future projects).
I realized that (hopefully) I am going to be programming for a long period of time. And last 5 years on my own have been very fulfilling in that respect, and I am very thankful for it.
The bulk of my last big project is in Java/GWT. But off late I am back to loving C++. And I want to write more software in C++. Even considering moving something from Java to C++.
I got inspired by GIT being done in C. And wrote one fairly good piece of code in all three Java/C++ & C. Before finally adopting C++. The reason was memory usage wise there was very little difference between C & C++.
And as somebody above mentions about finding joy in getting things to compile. I am getting that too. C++ just feels fast after working in Java.