Nice, well I’m going to get off gitter because, while it’s a great chat, it’s way too Brain Cycle intensive and doesn’t allow for building a knowledge repository. Hopefully this forum works out well.
So the first thing is you know what the problem is but you probably aren’t sure what the cause is. If I break this down the problems are usually:
Can’t Focus
Do you feel like you have “brain fog”? Like you sit there and just can’t focus and have no direction? This is usually caused by external factors like not getting enough sleep, not eating right, not exercising. Sometimes just working out everyday, even a little, and eating better usually helps this.
The next thing is you must live and die by the TODO! The vast majority of things you do in programming are boring. Especially as a professional. But, you have to sit down and do them anyway. The very best tool for making sure you get things done is the TODO list. Just don’t even bother looking for motivation and instead, just sit down, write down your tasks on a 3x5 index card or notebook, and do them. Use the TODO list as a rhythm to do tasks, and eventually you’ll be able to use this even though you don’t feel like working. I typically will just sit down and turn off my emotions and just robotically crank out a TODO list like it’s nothing.
This way of working doesn’t make the most inspired things, but it does get grunt work done. Especially if you throw in breaks and rewards. Like, “I’ll knock out the next 5 TODOs then go watch 3 minutes of TV.”
Fragmented Time.
This is is probably the biggest one but it’s where you seem to do a whole bunch of stuff all day, but actually don’t get anything done. It’s all errands and random things and before you know it it’s 9pm and you haven’t even eaten dinner yet. Best solution for this is to build a routine where, first thing in the morning, get up and do the things you need to do for self-improvement. Just get up, exercise, eat, 2 hours of Python, and then do all your random errands.
Too Many Interests
This is definitely me, but I’ve mastered the art of doing multiple things at once. For example, I like watching TV but I hate how it eats into the time I need for everything else. Solution? I have an easel in my living room and while I watch TV I paint. Or, while I watch TV I practice guitar scales. I even bought a silent metronome and a tiny practice device with headphones so that I can play guitar and no disturb anyone else. If I’m coding these days it’s also to work on a book or to implement something I need. For example, right now I’m learning Perl 6 by using it to automate my systems and video production as much as possible.
There are then some interests that you need to focus on, but that you really enjoy. Playing video games is a good example of that, so what you do is use those activities as rewards for getting your other stuff done. If you do 4 exercises of LPTHW then you can play video games for an hour.
Finally, just put some things on hold. When I found painting I stopped playing guitar mostly for about 4 years. I wanted to get good at painting. I would still practice sometimes, and I still built one recently, but I didn’t really play nearly as much as I did before. Now that I’m confident in my painting abilities I’m getting back into guitar and I find that I’m not really terrible like I thought I’d be.
Magical Should Thinking
This is the worst thing you can do, but if you constantly tell yourself you should be better, or should be doing more, or should magically know how to do things without practice, then you’re going about it all wrong. I work crazy hard at the things I want to be good at and I don’t expect to be an expert in them without a lot of work, and possibly never in my lifetime. I don’t tell myself I should be better at painting. I just paint, and then figure out how I can do better the next time. Too often though I see people who, despite not investing any time in learning to code, have this unrealistic idea that they should be better at it. They should just know how to code a small project from nothing.
If this is how you think then you’ll constantly be avoiding doing the work you need to get better, and you’ll be searching for hacks and ways around the work. Hacks are awesome, and I have a whole rant on how the majority of things that separate experts from beginners is secret hacks, but most everyone who’s an expert puts in the work.
Related to this is beating your self up for not meeting some insane expectations. If you have a bad day and don’t do anything all day, maybe you just needed a break. Everyone does. Just get up the next day and try again. I don’t think in terms of “Do 10 Things Each Day”, but more in terms of my improvement from day to day, which goes up and down in a cycle. It’s not constant, but I look at the average over time of what I’m getting done and that’s what I’m aiming for.
End Game Only Thinking*
You want to be the next Mark Zuckerberg, but you can’t code at all. Alright so you go get LPTHW and start working on it while fantasies of billion dollar IPOs dance in your head. You need to rush! Now! You’re getting old and you’re like, wow man, 23 already! Zuck was a billionaire by then. You should already know how to code even though you’re only on exercise 10. I wonder if there’s a quick hack, like what if Ruby is easier. Everyone says it is.
This is similar to Magical Should Thinking, but it’s more that you’re putting your dreams before the work you need to realize those dreams. You have a dream of being a top guitarist but don’t want to do any scales. You want to be a major painter but don’t want to practice drawing (well, yeah that happens a lot but you get the idea). The end game is important, but the path to get there is even more important. Many times, on the road to fulfilling your dreams you find new dreams.
So what I do is I set goals and setup ideas, but I figure out all the steps I need to get from where I am to where I want to be, and then I just start knocking down the steps. Many times I run into something weird and new along the way and my plan changes, but I don’t let my ideas and goals get in the way of the process of learning. On the flip side, I try not to let the process of learning get in the way of making things. I tend to do that a lot, but then again I love learning new things so it’s not too big of a deal for me.
Create A Base Sheet
I have no idea what to call this, but it’s not really a TODO list. It’s more of a “I want to do these 10 things every day.” Mine currently is Art, Music, Work, Write, Code, Record, Fitness, Finances, Plan, and Meditate. I have a grid with those on the left and M, T, W, Th, F, S, S along the top, and I just try to fill the grid. Even if I only do one of those things for 10-15 minutes I count it, and if you’re combining things, then it becomes fairly easy to do both. For example, I need to practice drawing and meditating, so if I practice drawing from memory then that does both. Done, 2 boxes off the list.
This works great when combined with a morning routine.
I think that’s most everything I can think of. Let me know if you want more.