I tried three times to get myself to program more of my graphics application today but all three times I was only able to get about 50 lines of code in before my mind turned to jelly. Food didn't help, water didn't help, and neither did pop.
Granted, I'm adding the file handler into my program now, which is something I'm not greatly experienced at doing, and it's being made more overwhelming since eight of the ten load/save dialogue windows are all using the same code. (So that I only have to write them once instead of eight times.)
...I find it funny that I can write a basic tile mapping system within an hour but I can only get 1/3rd of a file handler done in three. 
I didn't get any work done on it for over a week as I was working on documentation for other projects coming up, so I'm only up to v0.11a. (About 3000 lines of code.)
But enough about that. I'm basically wondering what everyone here uses to motivate themselves. Perhaps I can apply some of the wisdom to my own situation and really get myself wanting to program again.
--- Kris Asick (Gemini)
--- http://www.pixelships.com
Well right now I'm watching a movie, and tomorrow I shall be going out and the day after I'll probably do some reading and maybe some studying for school.
Yeah I notice theres no programming in there :p.
Basically, as it's been said before, if you don't want to program don't force yourself to. There will be lots of time to do that when you work.
Anyway if i really need to get some work done, I make a schedule every week and try to adhere to it as best as possible. You can average out work between multiple projects and the fun and boring stuff so as to not lose to much motivation. It's made every week because I never actually make the schedule hence it needs to be updated frequently.
You'll find once you get one project done, you get snowballing momentum, and then when you let go of that it's hard to get anything done.
First, ask yourself if it's really that important. You only live once, so there's not much use in doing something you don't want to do.
That said, it's very hard to do something when you feel like you are on an island by yourself and that your work is irrelevant. So one tip is to share the details of your project with people and create excitement about it. Also, you need to discover a purpose. If you cannot justify what you are doing, then you won't be motivated to do it.
Basic daily motivators are as simple as keeping track of a TODO list and forcing yourself to do at least one per day, no matter how small it is. Taking extended time off a project can effectively kill it.
I totally agree with everyone here. That said...
I really need to find myself a good todo manager... And I need to re train myself to use one, with lots of little steps instead of all the larger ones that look like too much damn work
Taking extended time off a project can effectively kill it.
ML's really got a point here. I decided to take a break from my rigorous programming as of late to get back in the mood, but haven't managed to get back into the swing of things. Little breaks are okay, long breaks are bad. You know, you have a four day vacation from work and on your first day back you don't want to work too hard. With hobbyist programming, you don't have to work at all, and the "vacation" will keep being extended.
As I said before, I hate dealing with files and/or file handling. In situations like this, there's two options. Sit down and chain yourself to your desk until you get it done or have several modules of your project you can work on and when the file stuff gets annoying, work on another, less-annoying module.
I really need to find myself a good todo manager...
What I use is notepad. An example todo list of mine looks like this:
(It's from the DCGG.)
| 1 | ((v)ictory!)write to-do list |
| 2 | (v)set unicode mode |
| 3 | (v)startup allegro |
| 4 | (v)load all strings |
| 5 | (v)kill all strings |
| 6 | (v)load datafile |
| 7 | (v)unload datafile |
| 8 | (v)load AUTH,HOME,MAIL strings from datafile object BITMAP_DBLOGO |
| 9 | (v)unload AUTH,HOME,MAIL strings |
| 10 | (v)shutdown allegro |
| 11 | (v)examine menu items and take notes for additional dialogs |
| 12 | (v)examine mockup and take notes for dialog items |
| 13 | and positions |
| 14 | (v)examine buttons and take notes for additional dialogs |
| 15 | (v)write menu array |
| 16 | (v)write dialog array with all the standard d_procs |
| 17 | (v)write custom d_clear_proc or add fixed modesel.c and guiproc.c to release |
| 18 | (v)write non standard custom messages(scroll up,down,left,right) |
| 19 | (v)write main loop with support for scrolling dialog on backbuffer |
| 20 | (v)write basic sub dialog starting/ending branches |
| 21 | (v)make bmp,pcx,tga,code,dcgg file strings global to preserve their content |
| 22 | (v)write customizable RED ERROR alert(centered on screen) |
| 23 | (v)write ascii file extensions to unicode converted table, init deinit |
| 24 | (v)debug exit bug with unsaved changes |
| 25 | (v)write cleaner subdialog handling with custom scrolling dialog routine |
| 26 | (v)function to stretch the unsaved changes alert as necessary |
| 27 | (v)unsaved changes alert dialog (buttons save, save as..., ignore, cancel) |
| 28 | (v)unsaved changes click return behaviour |
| 29 | (v)same for load and new (move inner switch to outer then just change sub_request) |
| 30 | (v)the load dialog itself |
| 31 | (v)fix tab,pgup,pgdown,up,down,home,end "change signalling" |
| 32 | (v)write function to "reset preview bitmap" from loaded gradient (kill bitmap,new bitmap, draw (black cross)) |
| 33 | (v)fix < 32bpp color modes, broken mouse cursor and color conversion |
| 34 | (v)fix 8bpp red alert message |
| 35 | (v)insert secret grayscale mode(select 8bpp, hold shift on click ok) |
| 36 | (v)write callback function to show render progress message |
| 37 | (v)write function to process click on "recalculate" |
| 38 | (v)change class hierarchy in gradient generator to prevent some more conversion trouble |
| 39 | (v)add gui info getter function to attractor classes |
| 40 | (v)write function to update author/title contents from loaded gradient <- |
| 41 | (v)write function to set author/title contents from fields -> |
| 42 | (v)write function to update field contents from selected attractor <- |
| 43 | (v)write functions to set attractor from input fields -> |
| 44 | (v)fix set_hep BUG with POLYNOMIAL |
| 45 | (v)write attractor scroll list d_proc (msg_draw, msg_scroll_xyz, msg_click) |
| 46 | (v)write attractor scroll up/down button message sender d_proc |
| 47 | (v)write bitmap scrolling d_proc (msg_draw,msg_scroll,msg_key) |
| 48 | (v)write bitmap scrolling buttons up/down/left/right message sender d_proc |
| 49 | (v)select language dialog |
| 50 | (v)make type dialog |
| 51 | (v)make mode dialog |
| 52 | (v)make select color dialog |
| 53 | (v)make distancemode dialog |
| 54 | (v)add button processing function |
| 55 | (v)duplicate button processing function |
| 56 | (v)delete button processing function |
| 57 | (v)make coefficients dialog (one fedit field and a custom list) |
| 58 | (v)make set dimensions dialog |
| 59 | (v)change update absolutes of attractors to accept a callback function, that |
| 60 | will inform about progress (e.g: if large lookup tables have to be created) |
| 61 | (v)fix memory hole with gradient_generator |
| 62 | (v)finalize save function |
| 63 | (v)finalize make save as dialog |
| 64 | (v)overwrite confirm alert |
| 65 | (v)check size of logos and position text strings |
| 66 | (v)make about dialog |
| 67 | (v)make export bmp dialog |
| 68 | (v)make export pcx dialog |
| 69 | (v)make export tga dialog |
| 70 | (v)write quick reference text file and place a hint to it manual dialog |
| 71 | (v)insert thanks section into manual |
| 72 | -BETA VERSION DONE- |
| 73 | |
| 74 | (v)fix some visual glitch(restoring backbuffer, before running frontbuffer dialog) |
| 75 | (v)fix save as cancel SAVE FAILED bug |
| 76 | (v)stretch proc should also shrink the first object if it is too large(noticed on unchanged dialog) |
| 77 | (v)change 1,4096 clamping behaviour of dimension dialogs to perform only "on lostfocus" |
| 78 | (v)optimize datatransfer between edit fields and generator to perform only "on enter || on lostfocus" |
| 79 | (v)remove mouse_inside_window check because it is unreliable and still systemdependant |
| 80 | |
| 81 | (v)allow resolutions higher than 800x600 stretch preview field then |
| 82 | (v)clean up code |
| 83 | |
| 84 | (v)allow moving of attractors up and down the list |
| 85 | (v)draw move buttons |
| 86 | (v)put move buttons into datafile |
| 87 | (v)add move buttons to interface |
| 88 | (v)write switch method for two entries for gradient_gen |
| 89 | (should autohandle invalid switching and stuff) |
| 90 | (v)attach attractor movement (using the previously written switch method) |
| 91 | to interface buttons |
| 92 | (v)make the list scrolling follow the moved attractor if necessary |
| 93 | |
| 94 | (v)change callback function to be called on milliseconds elapsed, not values processed |
| 95 | |
| 96 | (v)fix wrong ELLIPSE behaviour(throw it out!, promote ELLIPSEP to ELLIPSE!) |
| 97 | (v)make load function interprete ELLIPSE as ELLIPSEP |
| 98 | (v)remove old ELLIPSE from interface, generator |
| 99 | |
| 100 | (v)make export code dialog (shadowbox, ok, cancel, instancename, stretchbox, yield, null) |
| 101 | ok --> select_file |
| 102 | (v) extension ".cpp" |
| 103 | (v) add a string INSTANCENAME to the languagefiles and to the string enum |
| 104 | (v) write the dialog definition |
| 105 | (v) include that string into the conversion/attaching of string to dialog entries |
| 106 | (v) write function to show and handle the export code dialog |
| 107 | (v) attach that function to the specific item in main menu and activate it |
| 108 | (v) fix wrong caption in export code dialog |
| 109 | |
| 110 | (v)add wrong extension alert to bitmap exporting and code exporting |
| 111 | (v)add wrong extension alert to save .dcgg file |
| 112 | (v)add autorecalculate check item to options menu |
| 113 | (v)apply autorecalculate to dt_apply_changes |
| 114 | (v)fix "gradientchanged" on lostfocus, even if already changed on enter |
| 115 | (v)fix about dialog display problem with larger font |
| 116 | (v)remove recalculate on change author/title |
| 117 | |
| 118 | (v)write click/keypress and associated setting of edit fields to attractor -> |
| 119 | (v)click - position (all except global) |
| 120 | (v)rightclick or R (range, different for circle and ellipse) |
| 121 | (v)mclick or D (radius for circles, width height for ellipse and pointe) |
| 122 | (v)A (angle) |
| 123 | |
| 124 | (v) add drawing of small position and angle indicating lines when bitmap has mouse focus |
| 125 | (v) change new s to new (nothrow) s. |
| 126 | |
| 127 | ()manual dialog |
| 128 | ()write documentation about attractors, formula, user manual |
| 129 | |
| 130 | * implement missing features(render over image(generator already |
| 131 | has it, but it is not yet |
| 132 | accessible from GUI), |
| 133 | save language on exit |
| 134 | |
| 135 | * write USER, TRANSLATOR, DEVELOPER documentation |
| 136 | * seperate GUI code into smaller (better maintainable) files |
| 137 | * optional loading of font from a datafile "languagename.dat", so |
| 138 | that translators can create fonts that include the needed UNICODE |
| 139 | ranges for languages not supported by the Allegro standard font |
| 140 | (write FONT creating documentation (max font height will be 22 pixels) |
| 141 | * clean up code |
| 142 | (only the top-priority "todo"s are listed here) |
| 143 | |
| 144 | ()fix point e / ellipse middleclick dimension setting (is set wrong when attractor is rotated) |
| 145 | |
| 146 | 9()add new mode: multiply |
| 147 | 9()fix wrong POLYNOMIAL to curve behaviour (has probably sth. to do with LUT) |
| 148 | 9(ignore)popup dialog export dimensions crashes in the DEBUG build (an allegro bug? (i think yes)) |
It works as follows.
I first insert one line per item todo:
() make chickens palette () animate chicken walking left () draw bomb icon
I then sometimes put priority numbers in front of those items (whenever I don't feel like working them down from top to bottom).
When an item is done, I immediately go and check it off the list by putting a 'v' inside the '()'. What's very important with this is to think "The V stands for victory!" when putting it in there.
The items that are already done are kept on the list, so that in times of motivation problems, it is visible that already lots of stuff has been done and that gives me faith that the other things will also be done eventually.
So.. why is DCGG still not finished? Well, I got a job while I was working on it, so it's basically on ice.
Anyway, remember: "The V stands for victory!"
Kris, sounds like you need to take a few days break? Get away from where you are and just blob out somewhere without the PC.
Sometimes you just have days like that..
What I use is notepad. An example todo list of mine looks like this:
Sadly thats not easy enough
nor pretty enough. Something that effectively timed how much I work on an item would be nice to... But that would be interesting and inaccurate (you'd have to like attach projects to program windows and check for usage...)
Isn't this the project that was supposed to take two weeks, two months ago? I'd say it's about time to wrap this thing up and move on to other things....
Except hes making it so he can use it. Its a tool after all.
Hmm.. a few people here seem to be suggesting he should give up. That would be a mistake in my opinion, he should carry on and finish the paint program.
Sadly thats not easy enough
nor pretty enough. Something that effectively timed how much I work on an item would be nice to... But that would be interesting and inaccurate (you'd have to like attach projects to program windows and check for usage...)
If you're working with Eclipse, check out Mylar.
Yesterday I discovered this blog with lots of useful advice. This one is the top 20 motivation tips BTW, ML's advice is #2!
Enjoy and happy programming!
Thanks for the advice, everyone! 
In regards to taking extended breaks, I find I can't. Every day I always seem to work on some project or another, whether as code, as graphics, as sound, as music, or as documentation. It's actually very hard for me to skip away from my work for too long.
The thing is it's hard for me to work on one thing at a time. So when I try to work on the most important thing, it doesn't necessarily end up being the thing I want to work on. (And my drawing program is important as its font features will dramatically cut down the amount of time it takes for me to make conceptual screenshots.)
The past six or seven weeks has only seen about four weeks of effort into my drawing program, one of which was conceptualization, so only three weeks of programming has actually gone into that project since I started it.
Beyond that I've been working on documentation for four game ideas, three of which I'm likely to make by the end of next year, and my game engine docs.
I guess, to be more specific, I believe what I meant was I need to find a way to motivate myself to do what I need to do, rather than what I want to do.
It wasn't hard when I coded for another company, though occasionally I would spend a day or more writing side-code that wasn't actually going to go into what we were making, but which probably saved me time in the long run. And every opportunity that came up where I could code something above and beyond the standard, I jumped at it. But, while I worked for that company, I found it was nearly impossible to code at home. (Coding for 6-8 hours a day would leave me not wanting to look at another line of code afterwards.)
And it doesn't help that we weren't using C/C++, so for two years my C/C++ skills atrophied. It's been taking me time to really get back into it.
--- Kris Asick (Gemini)
--- http://www.pixelships.com
It depends on what the 50 lines of code has to do. There have been plenty of times where I took a couple days to write 5 lines of code and I didn't consider that "too slow".
I find bugzilla highly demotivating. My todo list never moves. And finishing a bug isn't rewarding at all, it just drops me off at the next bug in the list!
Something simple, a cool graphic, maybe even a flash gadget saying "Good job!" would do wonders for my motivation..
Did you go to the john yet? That's what I do when I can't think of what to program. Turns out I need to take a dump and it was that that prevented me from thinking.
It's very difficult to stay motivated. Almost all of my personal projects ended up in the recycle bin.
Crazy Photon: ... both your links are identical.
This post was brought to you by
.m7791 { display: none; }
Thanks gnolam, corrected!