This is a sincere question, please hear me out before downvoting or hitting close.
I noticed last night after having spent hours away playing a new computer game that I had lost all track of time while I was playing it. Someone would have to come and physically drag me away while I was playing to break my concentration. Then, when I woke up the next day, all I could think of was playing again.
Is there any possible way to get the same motivation and interest in programming, where you spend hours away and all you can think of is getting back to it? My life would be so much better if I could get to that point. For one thing, I would be able to finish all my projects on time rather than having them delayed every single time.
Its not about enjoyment, when I'm coding I enjoy myself just as much as I was when playing the game. But during the day when I think about working, I just immediately make myself think of something else to put off working for a little longer.
Do you notice something like this as well? How do you get yourself to look forward to programming? And if you are close to the stage where you'd call yourself addicted or even just get things done on time, please share with me how you got there!
P.S if it helps, I'm a freelancer and work from home.
You can all totally laugh at me, but...
I worked a programming job during the day and tried to still have ambition and energy to write my own products at night after my kids and wife went to bed. I tried hard, but never could get motivated and never could get a lot to market. I had one product on the market and it took 5 years to get there.
So...
I left my job for a tech company and took a job as a barista at a Starbucks. 20 hours a week and they give you benefits. I carry a small pad in my pocket for writing down ideas and bug fixes as I work. I work my hours there and come home by 1 in the afternoon ready to code, code, code.... I now started my own LLC, I have 4 products on the market with 2 in the workings. I have the passion again to write good software.
I am happy to elaborate more if anyone is interested.
In my opinion it's all about small successes. What makes games attractive are all the small or big successes you have. This gives you the feeling of progress in whatever you are doing in the game. For example WoW has all these little Quests where you gain experience when you finish them or you get armor or weapons after a fight. These moments keep you playing.
To transfer this to programming: You might consider changing the way you structure your work. You need to set small more easily reachable goals. When you want to write an application you should work towards the low hanging fruits first. Make an easy input form, write some backend code, write tests. All small tasks that you can "normally" do in up to 2-4 hours. The tasks should be that hard that you can gain joy of finishing them but not too hard to get frustrated or that you get the feeling of getting lost in it.
An approach that also fits in this schema is TDD (test driven development). You write your tests first and try to make them pass. This can lead to a similar success-feeling. But this requires a certain way of thinking that many developers are not used to.
This is not a programming question, it's a psychology question!
I'm completely bored with programming. I used to be a prolific programmer, and something these days it can become a little bit less boring, but all in all I completely lost it.
What you describe is happiness: experiencing complete fulfillment in what you do (playing). Reaching that point requires one and only one thing: what you do has to be in complete accord with your self-image.
It's easy to see why this works for your - and many others - with games and not programming. Nobody of us grew up believing that playing games was work. In other words, games is a no-responsibility zone. It's an escape hatch.
Programming may have started like this for many of us - innocent, no responsibility - but quickly changed into being work. That complicates things because now your livelihood depends on how you perform as a programmer. That brings self and the outside world in collision for yourself. Hence, programming (work) messes with your self-image while playing games you do on your own terms.
My € .02
Quit your job as a programmer and get a job play testing video games 60 hours a week, then you'll think about nothing but programming. =)
Personally, I'm most addicted when the code I'm writing is to solve a puzzle. I suggest you check out project euler [1]
[1] http://projecteuler.net/Get something working.
An important component to your motivation is when you get something to work. When it starts to breathe, and you created it, that's a big motivator.
Which is why I believe a common piece of advice is to get something working first, and then make it perfect.
Before I begin, I would like to say that I think part of the reasoning for the question is at least, partially flawed.
Video games, movies, TV, etc. have a very low barrier to entry; programming on the other hand can some times be very discouraging, aggravating and time consuming. It is work. Sure, if you can manage to solve a lot of bugs all at once, or lower the start up time for Application X by 15 seconds by taking out a single line of code, it can give a really big adrenaline rush, but most of the time it is much, much more slow going than say, a head shot, or watching Vin Diesel jump out of an exploding submarine and hitch a ride on the back of a whale back to the surface.
Programming is an end goal that you are working towards. Completing that goal with as little code, and as succinctly as possible is the payoff. In video games, you are living in the moment, looking enemies around the next turn, or for more interaction with the users and the environment around you.
Anyway, on with the answer (of sorts).
How do you get yourself to look forward to programming?
I tend to think of people who inspire me and try to figure out how I can build on, and maybe even improve, what they have created, whether it be: a program, a solution to a problem, or even an Operating System.
Knowledge and logic are really wonderful and more importantly, exciting things to gain when improving your programming skills. If you have serious problems getting yourself excited over those types of things, I would have serious concerns for why you are programming in the first place. Or at least why you are programming the types of things that you are. For example: if you are creating a lot of business related code, but it is just incredibly boring, it couldn't hurt to try something vastly different; maybe a 2D side-scrolling shooter, or a 3D modeling software, or a basic imaging program. Maybe start up a small website and mess around with some web apps in a language you've been meaning to try out.
It couldn't hurt to look for some motivational quotes to help inspire you into programming more often. Maybe you could create a simple script to have one pop up each time you open Terminal, that way you would not only be flexing your programming muscles, you may be able to increase productivity as a result.
I would encourage you to look into working on programs that can help you in every day life. Sure, maybe you wont make any money off of them, but if the average application that you create for your freelance work isn't particularly stimulating, this could be something that you could pursue in your down time to help perk up your interests.
Some people may advise you to simply uninstall whatever game you end up wasting a lot of time on, but I think that this is a stupid way of approaching the problem. It is human nature to find a way to keep yourself occupied, and I could just as easily imagine you playing flash games, or Solitare, or reading the newspaper for hours on end, if you had no other way to escape. It is important to have something that you can fall back on if you have been struggling to find a solution for a problem and need to get your mind off the project for a while. The key is moderation.
"So how do I moderate how often I get to play game X, or do this other thing, than?" This is something that really no one but you can answer. You know how good or bad your programming skills are, and how long it typically takes you to solve a problem.
Hope this has helped some.
I look at this in terms of what the addictive factor in games is; I believe to a large extent, one of the things that makes games so powerfully attractive is the design; there is a large amount of design that goes into games specifically to achieve a certain challenge / reward ratio. That is, a well designed game will usually (although not always) have a consistent challenge to reward ratio; there is a certain amount of challenge involved, and once achieving it, you get a little bit of reward. The challenge is not too great, because that leads to frustration, and the reward is precisely doled out, so as to encourage the players to come back for more.
How this relates to coding is this: I genuinely believe that some of the more modern software engineering practices (specifically Scrum) incorporate precisely this same attempt at balancing challenge and reward. More specifically, I think a lot of the intent of Scrum is to allow the engineers to choose a level of challenge that they feel comfortable with (either at estimation time or just pulling stuff off of the backlog), and to provide reward in the form of short cycles and clear product improvements.
This is a deep topic, and I don't think there's any definitive answer to this sort of stuff, and it seems like there's certainly a lot of research that could be done on this topic. But to (sort of) answer your question, I think that working in an Agile environment and specifically with Scrum may be useful for your procrastination and motivation problems. If nothing else, working in a structured office environment may help you with your motivation issues; a consistent solid schedule can be surprisingly helpful. It's hard to maintain that when you don't specifically have anyone to report to on a regular basis; having regular office hours can really help.
I used to be addicted, and I want to be again... so this questions comes at just the right time. Here's what I would do...
Find lots and lots of free time. Obsession requires time. Lack of free time, thanks to work, is one thing that prevents me from bothering with starting a new programming project. Quitting your current job can free up time, but there are other ways.
Organize everything you've ever coded. Don't ask me how, but organize it. Craft things into libraries, or at least write down the types of applications you like to code or have coded. Disorganization can become overwhelming, and can prevent you from wanting to add to the disorganization.
Code code code. You have to just do it. Make time if you don't have it. You will never find something interesting that you never do. You're imagination will only go so far. The more you code, the more questions you will have, the more you will learn; your brain will have no choice.
Get other people to use your software and provide feedback. Helping others is a huge motivating factor, not only to get it done, but to make it better.
Associate yourself with other addicts. If everyone else is coding, you'll want to as well. Plus, you can share code and ideas.
Although not a direct answer to your question, I think you'll find that this Newsweek article on procrastination has a lot of relevance: http://www.newsweek.com/id/173335?tid=relatedcl
Essentially, we procrastinate about tasks that are abstract and nebulous because our brains have a hard time comprehending them. Programming definitely falls into this category. You never know exactly what every single line of code is going to look like in advance.
On the other hand, playing a game is a concrete, well defined, easy to comprehend task. Your brain wants to do it just because it's easier and simpler.
I have the exact same problem as you, so my solution has been to create very granular to-do lists for each programming project, so that I break them up into tiny but manageable chunks. They're so small that I'm checking off a box every 5 minutes, rather than every hour or two(like I'd done in the past).
Another thing that works is giving yourself a hard rule like "I'm not allowed to play any counter-strike today", instead of saying "I'm going to try to play counter-strike less today". You're much more likely to follow a rule like that if it's very strict and specific.
Based in the discoveries of behaviorism, to become addict you should aim for Positive Reinforcement of Variable Ratio [1]. Here is a graph, where the variable schedule is in red:
I recommend to develop using TDD with a test runner that displays a green light when all your tests are working. The green light is really addictive. Follow the other advice in this question, use small tasks etc. I really like Kent Beck's book TDD by Example [2].
[1] http://en.wikipedia.org/wiki/Reinforcement#Schedules_of_reinforcementThe times I'm most addicted to programming is when I'm working on a project that I am interested in, usually a personal program that will benefit me or make my life easier, as long as it is something interesting. Sometimes I also find that the right book or learning medium can keep you interested and begging for more. After taking a look at Why's Poignant Guide [1], and utterly loving how it's all put together, it made learning Ruby an enjoyable experience for me. Sometimes it takes a little something extra to spark that passion you have.
[1] http://poignantguide.net/ruby/What about connecting your game-playing w/programming? If your game addiction is WoW, for example (but, I'm sure, for many other games as well), there's plenty of cool hacks you can do for your game with a little scripting or programming...!
I understand what you mean by this, I often struggle to find motivation to work at home.
Have you tried setting yourself personal targets? Promise yourself that once you've spent x amount of time, or implemented feature y, you'll take an hour out for gaming.
It may sound childish, but a chart of features, with target date/times that you can check off as you complete them would give you a visible representation of how little you're working. If you put this in a place that you'd find hard to miss whilst procrastinating you'd have a constant reminder of what you're missing out on by not programming.
Addiction to any activity results when the said activity continues to provide you relentless excitement and enjoyment, stokes your passion everytime you think of doing it and makes you restless whenever you are not doing it, over an extended period of time. (No, I'm not talking about sex, you pervs! :P)
Most of us are able to get obsessed with any activity for a short period of time till the time the activity can keep us involved and the thrill still remains. Those who can maintain a lifelong passion for some such activity (and are lucky enough to convert that activity into a profession) excel in life.
For me, programming is about solving problems, about charting a mental path through an imaginary maze, about visualizing a solution when the problem itself is not clearly defined. It is about creating wonderful things that follow my instructions to the letter.
At work, when faced with a complex problem that I am unable to solve easily, it weighs on my mind, and I think of it even after work, while driving home, and before I fall asleep, for instance. Invariably, the solution presents itself in the form of myriad ideas that I am eager to try out... which starts the cycle of a new work day again.
I derive my addiction to programming from my insatiable desire to defeat problems.
I was addicted to programming while I was growing up, and I can give you the EXACT answer you are looking for, and I can tell you right now you will NOT like it and that it is totally the truth.
The answer is:
You have to completely give up gaming.
I'll probably get downvoted and nobody will believe me, but give it a try. Playing completely saps my love of programming.
When I'm playing a game, that's what I'm thinking of when I'm not playing. I'm trying to figure out my next move, or what armor I'm going to get, or how to take over a town...
When I'm not playing a game, my mind is filled with algorithms and object models and I can't wait to get home to implement the next part.
So many times I've been stuck on a difficult problem and figured it out the next day in the shower--my mind crunched on it all night. There really isn't room for more than one obsession though (by the definition of obsession!) and when I'm playing, that just doesn't happen.
I play a lot--this isn't bullshit, I really like it. Every so-often though I go cold-turkey so that I can concentrate on programming and other parts of my life.
Damn Oblivion.
This is an interesting question, because I have definitely felt "addicted" to programming before. There have also been times when I have not felt quite as enthusiastic. I can't give you a guaranteed method for spiking your programming enthusiasm, but I'll share some of the things I've noticed that make me really excited about creating software.
The first (and most obvious) kind of thing would just be a really interesting project to work on. This can just be, at its simplest, an experiment with some cool new tool or technology. For example, I remember after discovering Pygame [1], I was so enthusiastic, I basically spent an entire month doing nothing but working on building a cool little Tetris game. I think it's safe to say that I was rather addicted to my project. ;)
My other suggestion would be to read some of the stories behind famous software projects. There's this book called Revolution in the Valley, which is a collection of anecdotes about the development of the original Macintosh computer (which are also available online [2]). I found that after reading about some of the inspiration and experiences of the development team, I felt quite inspired myself. I'm not sure why this is—perhaps enthusiasm and passion is contagious. ;) Nevertheless, whenever I feel listless about programming and software design, I just re-read some of those stories, and I usually feel a lot more motivated afterward.
Of course, exactly what causes motivation and drive differs from person to person, so I can't really prescribe the perfect remedy for your situation. But I hope some of what I shared can perhaps help you motivate yourself. To expect someone to be passionate about something 100% of the time is unrealistic, I think—we all need some kind of a catalyst at times.
[1] http://pygame.org/For myself, it's all about small victories, in both games and programming. I like winning and I keep coming back for the challenges.
When you're programming for fun; try picking projects that you're really interested in. It's very hard to stay motivated if you're just doing it for the money, a friend. Program for yourself.
I for example enjoy C programming because even when you accomplish small things, like modifying a string, it feels like this huge victory.
I'm not sure if this goes for everyone, but solving a software problem really gives me this great feeling of accomplishment, and that's what keeps me coming back.
This might be different for professional programmers, I strictly do this for fun at the moment.
It's two things for me. The drive and desire to create new things and the joy of problem solving. Approach topics from this standpoint and you wont help but be addicted to programming. It satisfies both of these things easily.
In all honesty, it can be a bit tough at first to get in, because you aren't doing anything particularly creative, but it gets much much better :)
non-chemical addiction is based on passion and enjoyment. if you are not experiencing both of these when you program, you cannot be addicted.
I think a lot depends on the individual, I don't think there's a single right answer here. I do know folks who are completely "addicted" to programming - who clearly can't wait to leave the party, go home and code. And I know folks who love programming, but will never be addicted to the point of wanting programming to be the first and only activity for the day.
I think the key to motivation is to figure out what drives you and align your work so that you get more of what motivates you and less of what doesn't. In the end, it might be that they call it "work" because you have to be paid to do it, even if you enjoy it. I know that's true for me - I love software, but not enough to do it for free.
Things about video games that might serve as inspiration for finding programming motivation:
I know, personally, I'll never be an "addict", but I can usually pull myself away from distrctrations (hmm... like Stack Overflow...) and get going on work by changing something about my work environment and how I reward myself.
You should get yourself motivated again. I believe that the best way to do this is to "code for yourself". You could try your own projects, or puzzles and math problems. The best collection I know you can find at Project Euler [1], as ethan stated. The very first problems are somewhat easy, and then you find yourself playing with very hard problems, and
although it may take several hours to design a successful algorithm with more difficult problems, an efficient implementation will allow a solution to be obtained on a modestly powered computer in less than one minute.
I think its just a beauty for a programmer like me. Maybe you can dive into it and enjoy as well.
[1] http://www.projecteuler.netEnglish is not my native language, I hope that all of you understand what I mean. In my opinion, programming give me chance to study new thing. I am very enjoy on research stage, learn a new programming language, study language features and etc. In research stage, I can explore a new place in my mind, it's very exciting and funny.
Moreover, debug is also a funny stage, I am become a detective to find where the bug is, eliminate other possibility and find out the bug in tons of file and tons of line in a file.
I've been programming as a .net developer for almost 5 years now, and I often find myself getting bored out of my mind doing the same CRUD code over and over again ad infinitum. To get myself out of this funk, I bought myself a Macbook to program against the iPhone for a change. Learning a new language (objective-c) has been both a challenge and a joy, as I'm now trying to shift my energies to developing games instead of business apps.
There's a few things that have gotten me to be "addicted" to programming. The main one is that I have an intense interest in learning new things. Another is that I realize that the better I get at programming, the more interesting, meaningful, and high paying jobs I'll be able to get. The third is making to do lists.
I love notepads. When I get requirements, I break them down into a sheet of small work items. As I finish each item, I cross it off the list. When everything is done I put it in a pile on my desk. It's very satisfying to see 1,000 things crossed off as accomplished.
If you're looking for specific new things to learn, I would recommend getting into java, google app engine, google web toolkit, restful web services, and a social networking api like twitter, facebook or buzz. Also, the android platform and mobile/location in general is another good one, and what I'd like to master next. Sure, there's a steep learning curve, but you can really do some amazing things when you master these particular technologies.
Of course, not coming from a wealthy family helps. At some point, I decided I wanted a nice sports car, and one day I went out and bought one. I ended up working my ass off so that I could make the payments, this was also a great motivator. Sort of like how some people say having a child can do the same thing for you.
One last thing, monetize your work. Whether you are building a web app or a mobile app, employ google adsense advertising. It's really something when I look back at the open source projects and free books I've created, and see that I am getting a check from google every month for doing literally nothing, for the rest of my life, for work I did seven years ago.
Hope this helps to inspire everyone. Best wishes to all.
Oh, and if you drink, stop! It's hard to code while you are drunk or hungover, lol.
Also, take a look at design patterns and object oriented programming, they are really fun.
I think this is a perfect metaphor for programming or any creative and intellectual work.
"If you have built castles in the air, your work need not be lost; that is where they should be. Now put the foundations under them."
--Thoreau
In this quote lies the key to getting "addicted" to something positive.
The incentive of attention is interest; the greater the interest, the greater the attention; the greater the attention, the greater the interest, action and reaction; begin by paying attention; before long you will have aroused interest; this interest will attract more attention, and this attention will produce more interest, and so on. This practice will enable you to cultivate the power of attention.
The quote comes from this link [1]
It was written about a 100 years ago by a man named Charles F Haanel in a book called The Master Key System [2]
Hope that helps.
[1] http://www.psitek.net/pages/PsiTekTMKS37.htmlFind your own language. Some will say "Learn Python", others will say "Learn C". But the truth is; you must find your own path.
And I don't think you should see it as a quest for addiction. I think, perhaps, a better word would be immersion. Learn to become one with your chosen language, and when that language no longer serves you, learn a new one. And then a new one.
The "addiction" to programming itself, as a tool for productivity, may not be an achievable goal; but when you learn, and I mean really learn to learn, then, as what you have seen as parenthesis give way to structures, what you have seen as numbers give way to meaning; when you no longer see the numbers, but blondes, brunettes, redheads; when you become as one with the computer; then an addiction may arise.
It is possible to get addicted to an abstract pleasure like solving programming problems if you have enough good experiences.
A good start is to learn how to quote time since there are few things as depressing as having to kill yourself to deliver half baked solutions because you quoted frivolously.
Continuity is important. Stick with it even when you are nowhere near a computer. Design, code, refactor. Use paper when you have it, thin air when you don't. By the time you find yourself near a PC, you'll be pretty anxious to try out all the ideas that have built up inside.
Find someone you can discuss code with. Detailed discussions about design, language features, implementation. I usually find that many coders are reluctant to talk about such things (except on the Internet). Bait them with a challenge. Ask for advice; programmers love giving advice.
Watch "How to Protect Your Open Source Project from Poisonous People" [1]. Understand that they're referring to you.
[1] http://www.youtube.com/watch?v=ZSFDm3UYkeETwo words.
Learn Python
...seriously, Python (for me) has put a lot of the fun back into developing software. A lot of the more tedious stuff you have to deal with (I come from a C/C++ background) becomes trivial which leaves you with the fun bit; solving problems.
I often use Python to prototype ideas before I implement them in other languages too, so even if the end result isn't a Python solution, I can take advantage of the speed of development. Python's an interpreted language so there's no need to compile which reduces the code-test-code-test-... cycles we all go through to produce a working solution.
Add to that lot the fact that Python comes with an enormous library of useful modules you can download [1] and it brings back more of the fun of making cool 'stuff' :-)
[1] http://pypi.python.org/pypiWell, I have found that the best way to motivate myself and really get myself excited about my programming projects is to set small goals for what I want to achieve every time I sit down in front of the computer. I focus on what I am supposed to deliver and then start to build it. Either from the project specification or task list (for formal work or school related projects) or from my head (for the ad hoc hobby projects).
As soon as code starts to appear on the screen and the functionality grows it quite easy to get that same feeling of satisfaction as leveling up in WoW. As the project grows I find it hard to not think about how things could be improved. Much like the feeling I get when I play great games. It is hard not to think about them even when you are AFK. It can be everything from additional functionality, or existing functionality that could be improved (put in the "nice to have" column in the todo list/specification) or refactoring ideas that you can do when you have some down time (waiting for some other unit to be finished etc).
To me it is all about mindset. If you give it time and really apply yourself you are investing in the programming project much like the way you invest in games. There is an emotional satisfaction to be had when you manage to solve tricky problems. It might not always be as immediately satisfying as playing a game, but in the end I think it is well worth the investment.
Programming for the type of person to be interested in it in the first place is interesting because it requires you to solve problems and learn new things. As long as you do it as a hobby, you can choose to do only interesting things but unfortunately after you have worked in the field for a number of years you get pretty good at some aspects (languages, types of software, etc.) and then your employers want to use you to write more of the same - you are after all effective at it so they get the most bang for their buck that way.
I developed a database application for SQLServer with VB6 for several years (5+) and got totally bored with it so much so that I lost all motivation. I have since worked again with real-time DSP SW (I had had some previous experience with it before my VB6 years) using C and that again ignited my interest in programming.
So, my advice is to try something completely different if at all possible. If you are forced to solve completely different type of problems and you still can't get interested in it, then you might want to try some of the other suggestions (change to a non-programming job and only code for fun).
I believe that kind of addiction to the computer games comes because
So I usually find it useful to leave some of my ideas/bug fixes uncoded before leaving the PC. This way they remain as unfinished tasks and you wonder if your ideas or 'possible' bug fixes will work! This even helps you to think of other possible approaches to your problem as it leaves you some mandatory thinking time before actually getting into coding.
"How do you get yourself to look forward to programming?"
Read this very important book,"Unlimited Power" by Tony Robbins.
He describes the techniques to put yourself in empowering mental states. That is the key solution to your problem.
If you think you can get 'addicted' to programming or any kind of work, you're fooling yourself. Accomplishing work or completing any goal is a matter of discipline and self-control. Get into the habit of doing work when you're supposed to do work, and you will be more productive.
The underlying driver for all compulsive behavior is a system of "Constant Rewards". Casinos do it, and most Blizzard products and PHP games (Planetarion, Mafia Wars) do it. Setting multiple small, satisfying goals that you can achieve in a single sitting should help drive a compulsion to code.
Not that this would necessarily be healthy, or even make you a better programmer. Some projects require hours of unrewarded contemplation, and a compulsion to achieve something quickly won't always help the project. It'll just drive you to produce more code.
I can't get you addicted in programming. I, however, may be able to get you addicted to solving interesting problems using programming.
This is not a total answer, but establishing a series of short term achievable goals with a tangible result is important. The idea being that you can work for maybe an hour or two and be able to mentally reward yourself for your work. It could be adding a button, or commenting a source file, or making something new happen on screen. Typically it's bugs fixed/feature added, as long as the features are small enough. You can break larger features down into smaller tangible steps as well. The important aspects are the achievability of the goals, and how satisfying/convincing the mental reward is. Quite a lot of whether the reward is convincing depends on your inclinations.
If you think about it, this is essentially what games are: Sequences of very short term easily achievable goals with a satisfying reward after each one. That's why they are so addictive. That's why languages like python and ruby are so popular, because they have interactive shells where you can see tangible results with far less work than a compiled language. It's the feedback loop that feeds our masculine obsession with controlling things.
You don't get addicted to programming, you get addicted to stuff it brings you. Just think in terms of what new stuff(e.g. car, new house, latest gadgets, gf, knowing more people, etc) it can bring you if you switch to a new programming language or learn new programming techniques.
Or perhaps you are doing some things which were exciting before, but now become plain boring or mundane to you now. Try to create a code generator around them, so you'll be excited to learn new stuff and be addicted to them, this way mundane things won't drag you to boredom again. Good programmers are born lazy and are very effective with automating tedious task.
Yeah who knows what the true answer is.
But here are some principals and motto's I try to abide by and would suggest:
Take some time out from what you MUST CODE, to something you WANT TO CODE. Play around with some game programming if that interests you, work on fun programming tasks that YOU want to do to keep interest levels high.
And something very important I think.. take a break, I always love coming back to programming once I know I feel I have put in some solid real life ("RL") time. ;)
Also as much as it sucks, as I once freelanced from home too, getting out and not being stuck at home and getting into an office or surrounding yourself with other like-minded passionate programmers will really help your mood and outlook on the whole thing!
I 've noticed that my motivation for programming is very dependant of the project I am working on.
So I would say that you should work on an app that is very interesting for you. here are some ideas to find the right project.
1) Is it useful?
2) Is it challenging?
3) Do you learn new things?
4) Is it something that you can be proud of?
5) Is it fun?
...
Why not take a few lessons from the games and the gameplay in them.
Lessons like:
The moment you try to get comfortable in anything, you must always know, you will get bored very soon. Push yourself, you won't die. So for programming, start a small project to dab in artificial intelligence, evolutionary algorithms etc, the newest technologies in your field of interest and work, and read and experiment.
Do something new each day.
Computer gaming gives you some kind of progress, maybe a virtual progress, but still.. Find something else that gives you progress, or convince yourself that something your already do does so.
I've had this illusion before with various video games on various platforms. I'd question whether or not you finished the video game after playing for hours and hours as this is one part of where the flow in a video game can be different than in developing software.
For example, in various role-playing or real-time strategy games there can be hundreds of hours spent building up power and getting stronger and stronger. Does this get to the end result? Not necessarily if the game normally takes tens of thousands of hours or is open-ended like some MUDs and other games are in terms of the game just going on and on.
I get myself to look forward to programming by thinking about how there should be an easier way to do this and what are the variables I need to enter, what processing has to be done and what output would I like it to have. The challenge is to focus on what are the key points that I need to get done. Of course there is a find a bug, fix a bug, re-test loop to run that can take many many iterations before something can be said to be done.
Another way to approach this question is to ask, "Why am I not addicted?" or "Why am not doing it?"
There's some research into Writer's block [1] referenced on Wikipedia, that you may find interesting. For example, Blocked: why do writers stop writing? [2] starts with,
[1] http://en.wikipedia.org/wiki/Writer%27s%5Fblock... Most of the poems for which [Coleridge] is remembered were written when he was in his mid-twenties. After that, any ambitious writing project inspired in him what he called “an indefinite indescribable Terror,” and he wasted much of the rest of his life on opium addiction. How could he have done this? Why didn’t he pull himself together? ...
I can get addicted to programming when I have a project that I'm really motivated about, and I continue to push myself to achieve my goal. It helps to continue to push yourself as you accomplish your goals, and just try to get something done. If you spend to long on theory, programming can start to get really boring.
The things that constantly pulls me back to the coding is solving problems. I often find myself thinking about a problem that should be solved when I walk to the buss etc. I think that's the thing that makes you addicted to programming; solving the problems. So try to come up with projects that include some kind of problem for you to solve, not just the usual mindless using of old solutions. It doesn't need to be big projects, write a program that indexes and searches a file or try to come up with an own compressing algorithm. You probably won't create anything that doesn't already exists, but as long as it is an challenge for you it doesn't matter.
I cannot answer the "how", I'm afraid. For me it just happened. For a few years in the 90ies, while the company I was working for did in-house developing for customers, I was spending more hours at work than at home. Each time I walked home I was already looking forward to coming back a few hours later. I consider those years the best time of my working life so far. Of course, it had to end one day, because in-house development needed a paying customer, which were hard to find in at the end of the 90ies.
I can relate to some of the factors already mentioned by other posters:
But something else was very important to me: The people I was working with. The colleagues had found different ways to become programmers, which lead to differing ideas to solve problems. They were proficient in different things. To talk openly with each other, be it about aspects of the software we developed or about private things, was in my opinion the key factor, why I was so focused on my job back then.
On the gaming side, it is similar´for me. I enjoy playing WoW and Diablo2 with people, that are fun to play with, who know what they are doing, who are open to criticism and also offer criticism freely. Some of them I have known for over six years now.
Perhaps the "right" people to work with in a team (if at home or in an office should not be relevant) would be a motivational factor for you, too?
I would say work on programs that help you get your job done easier. It helps when your primary job isn't programming but some sort of engineering or science. Tools, automation, things like that.
You should ask yourself if you would really enjoy programming? If yes, what sorts of programming do you enjoy? If not, nothing in the world can get you that dedication and addiction. Addiction comes when you have adrenaline flowing when you do something - and that happens when you deeply enjoy doing something.
If in the heart you "feel" you might enjoy programming, then at least search for what you would enjoy programming the most - games? databases? websites? user interfaces? mobile apps?
Often you will discover that you enjoy things that you can relate to very easily - so may be you should try getting a job to program at a game development company!
I understand where you come from completely. I am both a n00b programmer and a WoW addict.
Lately, though, I've had much more of a passion for programming than for WoW. What made the change?
-- Easier projects. When I started studying Python, the guide I was following had some really difficult example projects. The guide's examples were all based around stuff like computing primes that not only didn't interest me but really made me feel stupid. I don't have a strong math background and the difficulty of those projects made me feel as if that was going to keep me from ever programming. Later, by just browsing at the library, I found the Head First series of books which has projects that start off simple and grow gradually more difficult. Like another commenter said, games like WoW offer just the right amount of challenge v. rewards, and so did the exercises in the Head First books.
-- Relevant projects. When I started looking at PHP and SQL I could immediately see uses for it. For instance, I'm moving a lot of my possessions into storage and I used SQL to create a database telling me what items I put in which box. I could have accomplished the same thing with just a list in Microsoft Office, but it gave me a chance to play around with SQL and incorporate it into my life. When I studied programming in school I knew that I was programming just for the sake of my education, and wasn't motivated at all. Now that I'm doing it to create specific things in my life, I want to do it. It's like the difference between mowing the lawn and gardening.
Depending on what game you play, you may be able to work programming into it. For WoW, you can program addons (and there's a book available for that). Oblivion offers a construction set that lets you make your own spells, characters, quests etc, and is not quite programming but is a first step to game development.
PETER But is there any way that you, you could just sock me out so there's no way that I'll know I'm at work? Right here? (points to his head) Can I just come home and think I've been fishing all day or something?
DR. SWANSON That's really not what I do, Peter. However, the good news is, I think I can help you.
From here [1]. You either love it or you don't. For example, I hate fishing. :)
[1] http://www.awesomefilm.com/script/office%5Fspace%5Ftranscript.htmlOh man, I hate programming so much that I just want to punch anyone who talks about programming in the conversation. Why i hate programming so much back then? Well, i picked CS as my major and college years were my worst years in my life, I just hate it more than anything! All those N-gate, nor-gate, link list, push pop jump, quick sort bubble sort, algorithms, recursive, database, network programming, turing machine... etc. Every time i see system.out.println makes me throw up. Now I'm back to coding because you can make cool stuffs. Well I only code to the things that I think its cool and useful for people. why can't we make cool apps back then instead of building stupid calculators in assembly language ? My point is that you have to be interested in what you are programming.