Programming Goals

Programming was a struggle last month. I put in only around 25 hours, which is pretty pathetic, less than an hour a day on average. This must improve, but I want to see if I can enjoy the process a lot more this month. If I don’t ever enjoy programming, I’ll never be able to make it as a programmer!

First, I’ll quickly summarise how my programming is going. As seems traditional for newbie programmers, I decided to write my own calculator application on OS X. This seemed to be a modest goal, and I thought I would definitely be able to finish it in a month. After an enthusiastic start, I began to struggle a little. Instead of a standard calculator like Apple’s, I wanted to create a calculator more similar to that of Casio’s modern dual line display calculators. This proved to be a little tough, but I found the command line calculator bc, which seemed to provide the equation parsing tools that I desired.

Implementing this into my application seemed not to be a problem, but I wanted to remap some of the keys on the keyboard. In terms of functionality, bc already provides 90% of what I want it to do, I’d like to just clean up the error messages and other GUI issues.

That’s where I got stuck. I began to spend hours just staring at the screen, reading Apple’s dreadful documentation and the confusing Cocoa API. Furthermore, the application doesn’t really excite me as much any more. With Quicksilver integration, it would become something that I might use personally however, as Quicksilver’s built in calculator (also using bc) is a bit awkward for performing a string of calculations.

So that’s where I am after a month. Since another month may not even help enough, I’d like to change focus, and try to concentrate more on learning, rather than end product. The way I see it, the programming skills I currently have aren’t at the stage where I can actually realise my designs. It’s better to concentrate on improving those skills.

I’ve mentioned before the Now Habit by Neil Fiore. In this book, Fiore describes a technique in which he sets an upper limit on the hours one can work. It’s a form of reverse psychology. I’ll do the same – restricting output to five hours this week. In the process, I also hope to complete more quality hours instead of the staring at code or ‘research’ on the Internet that I’ve been doing, or just waiting for my timer to finish. In order to generate those quality hours, I’ll need to do more planning.

In addition, one of the things I’m going to do is to give myself a whole day off programming or any thoughts of programming. There were days last month where I didn’t do any programming and felt guilty about it. This time, I’m not only allowing myself to take a break, I’m enforcing it.

As for what I’ll be working on, I haven’t quite decided yet. I do want to finish my calculator, but some easier projects will be the way to go for this week.

June Rules and Goals

Well, I decided to write out my goals for June! I like to set rules and goals – essentially, the rules are to improve myself, whilst the goals are there to keep me motivated and to have something to work towards. Goal setting is very important after all. This is likely to be a long post. As mentioned in my previous post, I broke many of my rules for last month, which was annoying. Again, these rules and goals pretty much correspond to the five threads in which I’m concentrating my resources. Any more, I believe, is to spread myself too thinly and will lead to a loss of focus.

Rule 1. Wake up before 6.30 am daily, and wake up once a week effortlessly and bursting with energy.

With Dragon Boat finishing next weekend, I’m worried about how my sleep pattern will take it. I have a morning 10am class which should help me to some extent, but I still want to wake up before 6.30, and probably even earlier. Taiwan is getting hellishly hot now, and the mornings are just so much more comfortable. Steve Pavlina made a recent post which spoke about how to create daily habits, which seemed timely. It’s the discipline to sleep early that I’ve been having the most trouble with. It’s hard to make myself sleep early when Taiwan is such a late sleeping culture. As with the programming, I want to create the situation where it’s more appealing to wake up early than to lie in.

Even though I failed last month, there’s no point in changing the goal to something like ‘wake up early just six days a week’ in order to build confidence. I don’t think that really works, especially for sleep, and I did come pretty close to succeeding. So I’ll keep that goal the same, and additionally I want a goal to wake up effortlessly once a week, with a view to increasing the number of days over time. In order to do this, I’ll need to sleep early once a week, and hopefully that day/morning will be so pleasurable in contrast to zombie like, I’ll choose to continue.

I have enjoyed the Dragon Boat practice, so I’m going to run every morning to wake myself up. It will need to be early due to the disgustingly hot weather here.

Rule 2. Surfing the Internet can only be done while standing up

The Internet restriction is something that could warrant a whole article (I’ll probably give a humorous Toastmasters speech about it in the future). Indeed, fairly recently Paul Graham wrote an awesome essay about it. It’s a real problem for many people, so I shouldn’t feel too bad. In addition, I guess I could see it as a good thing that I’m so curious about knowledge (albeit useless knowledge.) Still, it’s something that must be stopped. After last month, I realised that the days I’ve spent without the Internet have been better than the days with it. That’s worth keeping in mind.

A similar restriction to last month is not only slightly inconvenient (since I have to go down to the library), it’s not a realistic option this month. Now I’ve finished the book and will start to write my own programs, I’ll need the Internet as a reference, and so this looks like I’ll be opening a can of worms.

Since I couldn’t think of a clear cut solution, I decided to brainstorm some ideas. Many ideas which sounded good have failed me in the past, so if necessary, I may have to employ as many as I can simultaneously.

To go for an outright ban sort of builds resentment and frustration and isn’t the best route to motivation, as last month proved. The most ingenious plan I’ve thought of thus far is to stand up while I surf. Many people have advocated a chairless office environment, and it builds energy levels, though personally I can’t imagine coding for long periods of time standing up. In order to stop myself falling into that glazed over trance where I browse endlessly, standing up seems like a good way to go.

Graham’s solution (to use a separate computer) seems like it could work, but I only have one computer! In a way, keeping the Internet out of my home, and using the university Internet has been a similar idea, and to be fair, it did work. But as I mentioned earlier, I can’t keep doing that. A similar solution is that I already have a separate user account on my computer for programming, and when I’m switched, I’m pretty reluctant to waste time; in fact, after I switch, I start work pretty much right away. So allowing myself to use that account for Internet and freely too, is another option.

However, since I do manage to work in that account and pretty well too, I don’t want to ‘contaminate’ it with my bad habits.

I think the common idea is to build a different sort of state where you become very aware of your Internet use. Standing up seems the most obvious way to provide this. I want to keep my rule simple, so that’s the final goal I decided on. I feel I’m a grown man, and should be able to use my own self discipline. But if I can’t do it, then treating myself like a child is the way to go. :P

The other important factor I discovered was that use of the Internet comes when you’re bored. There’s no excuse for boredom in today’s world, and the solution to this is to plan your day beforehand – also an important exercise.

In summary, I’ll keep it simple, as per the rule above. If my plan doesn’t work (i.e. I follow the rules, but still waste time), there’s no point to adhering to it. I will reassess the situation next Sunday if my plan has failed me. This is an interesting solution. I’m looking forward to seeing how it works!

Rule 3. 25 Words in ProVoc daily

I think that I can continue doing ProVoc every day, and that I’m also going to listen to some audio programs while I do it, so this should be a nice morning ‘mental conditioning’ exercise. I wasn’t going to put this down as a rule, seeing as it was pretty easy to keep up, but I could do with a cheap win. :P

As for the goals…

Star Goal. Program 40 hours this month, with milestones.

The priority is again the programming, and I had trouble keeping up with it last month (I did only 30 hours.) Still, that’s a nice initial target to improve upon. I’m going to try to do 40 hours this month, as opposed to the previous 50. The idea of this is a sort of reverse psychology – I’m going to set a target that I know I can hit, and continue to improve upon that each month in the future. And of course, I won’t stop myself should I choose to work more than 40! This comes from an idea from The Now Habit by Neil Fiore. The ideal is to create the situation where I can’t wait to get back behind the computer and work on my projects. In other words, I need to be in the state where I want to work, more than anything. If that situation never arrives, I can’t see that I can continue this sort of work for the months (or years) that I’ll need to to make a success of myself.

Furthermore, I’ll set a bunch of light milestones of 10 hours of programming a week to work up to the 40 hours, which should stop what happened last month, where I set myself up to do marathon sessions towards the end of the month! It’s a habit I picked up from school! June starts nicely on the Sunday, which is nice for me. Since I’ve finished the Hillegass book, I’ll often need to do planning on paper, outside of the computer. That’s okay, it still counts. Just as an aside, I don’t feel like I’m all that comfortable in Objective-C yet, despite finishing the book. I might choose to work on some tutorials e.g. those on www.cocoadevcentral.com, but I’m not sure if I can work it into my schedule.

Goal 2. Be ready to deliver C8, C9, C10 speeches

Although my progress has been very quick compared to others here, I procrastinate a lot on my Toastmasters speeches. I’m not sure that I’ll have the speech slots to deliver my speeches this month, which is a disappointment. I’m not setting a particularly ambitious goal here, but as the scouts say, be prepared. I’d like to prepare these speeches this month so that I’m ready to deliver them if someone calls me.

Well, I think this is a better plan than last month. It’s obviously not perfect, but I’ll see how it goes!

May Goals: Summary

Just a quick summary of how things in May went. Basically, I’ve failed on several fronts, but I can’t allow myself to dwell on it all too much. I have to pick myself up for next month after all!

I had three goals this month. The first was to wake up before 6.30am every day. I failed on four days, all on the weekends. This is a disappointing result, because I didn’t pay enough attention to my sleep needs. On the plus side, waking up is definitely a little easier than before this month. My energy levels haven’t been that great. I’ve slept a lot in the morning. So, I’ll try to continue this for next month.

The second was not to use the Internet in the apartment. This went great until one day last week, and then in the last three days I grew frustrated and turned it on again. As soon as I did that, my productivity fell apart, and it was easy to see how much of a time sink the Internet is. Ultimately, being without the Internet is much better for my life than having it, and the obvious decision is to continue with the restrictions, although I will almost certainly revise them.

The Provoc is the only goal that I managed to complete. I’m forgetting words very quickly, but with the system in place, I know very clearly that some of the words are sticking. It might not be the best method for incorporating the words I’ve learned into my everyday conversation, but as I remember the word writing, I’m also remembering the English definitions, that’s for sure. It’s doesn’t take too much effort, but being able to do that tiny little bit of Chinese every day is something positive to take from a month in which I failed many of my goals.

The Big F***g Goal was to complete 50 hours of programming. This was definitely possible, but I left myself a mountain to climb in the last week. As I closed in on 35 hours, I completed the Hillegass book on Cocoa at the same time, and didn’t really have any clear goals after that. In contrast to being able to follow the tutorials for an hour at a time, I procrastinated because I didn’t know what I ought to have been doing. I never managed to set up a clear goal, so I finished only on 35 hours. It’s a lot fewer than I’d hoped, but finishing the book is a decent start and should leave me with a decent foundation for continuing learning Cocoa development. So I’m not as upset as I might have been.

In conclusion, setting the goals for May was definitely a good exercise, even though I didn’t manage to hit them. Just writing out my summary makes me feel less annoyed about not completing them for some reason, but the Provoc alone was something I might not have done at all had I committed it as a goal. I’m not sure if I’ll publish out my goals for June after this public failure, but after I revise my goals, I should still be able to get much benefit from the exercise. I’m tending towards publishing it, because I think it will help me to have to account for my actions. I want to look forward to writing a more positive post in June :)

Hillegass on Sleep

Dragon Boat training has both helped and completely destroyed my sleep pattern. It’s helped me to wake up around 6am, which is great, but it’s tired me out to the extent that after I get back home, I just want to sleep, sometimes for over two hours. That can’t be great. At night though, I still don’t have that much trouble getting to sleep, so my body really needs the rest. That’s how I justify it anyway.

It was interesting for me to read the recommendation by Aaron Hillegass in his book that while you are learning programming, he recommends getting ten hours sleep. Also, while you are in physical training, you should also get more sleep, maybe nine or ten. If that’s the case, how many hours should I get? I have a real time maintaining concentration, and it might be a direct result of muscle fatigue, but I’m also walking around a lot slower than I used to. Unfortunately, this weekend, I slept in until 10am on the Sunday, which is the second time this month that I haven’t woken up at 6am. I don’t know what this will mean for the chances of establishing the habit of waking up early after Dragon Boat. I know that waking up early is getting easier overall, although I’m crashing out later in the day.

Still, we only have three weeks before the races, so I’ll need to just push harder until then.