Over the last month, I created my own programming language. While it's not good, (buggy, missing major functionality, not fit for human consumption) I learned how to implement most of the features I wanted to.
Most of my projects start with a burst of activity, and then they're never touched again. This is a rare project hat has made slow and steady progress over time. That's because of one thing: I worked on it for a small amount of time every day.
Here are the days I made commits and how many:
2020-07-08 13 2020-07-09 9 2020-07-10 5 2020-07-14 5 2020-07-15 11 2020-07-17 3 2020-07-18 2 2020-07-19 7 2020-07-20 1 2020-07-25 5 2020-07-26 1 2020-07-28 6 2020-07-30 3 2020-08-06 2 2020-08-14 4
There were lulls and it's tapered off as I got what I wanted out of the project, but I mostly kept to the schedule. There's three reasons this worked for me:
I once tried to start running; I decided to run on Tuesday, Thursday, and Saturday. The overhead of remembering to run on a particular day made me forget to do it, and I kept forgetting until I just stopped running.
If you do the thing every day, you don't have to remember to do it - if you haven't done it yet today, you still need to do it.
It's also fine to miss days. There's no need to "make up" for lost time, or "bank" days by working extra so you can miss some in the future. Do it every day, unless you can't, then do it tomorrow, and every day after that.
Doing something an hour a day for five days is better than doing it for five hours in one day.
This seems to apply to lots of things, learning, reading, exercise, and software development. I don't have any real evidence for this other than ~feelings~, but spaced repetition learning must be popular for a reason.
Reading a book/watching a series/playing a game in small sessions over time makes me remember more of it than reading it a few long sessions.
Writing a piece of software in small sessions over time helps me keep it in my head, and gives me time to think about problems and come back to them with fresh eyes.
Doing only a small amount every day stops you from mopping up the "easy" tasks. Easy tasks are my shortcut back into the project and I make sure there's always some left over.
Keep a text file with little jobs. Add that CLI flag you've been meaning to, tidy up the debug output, fix the grammar in the README. Using these you cheat yourself into thinking "I'll just do this little thing", then you end up tackling that big nasty problem that seemed insurmountable yesterday.
This gemlog is one of my many attempts to do this with writing, but now that I've figured out my ground rules I'm hoping it will be more successful.
Only time will tell.
gate
2020-08-22