Programming Ideas by Mike Charlton

An RSS feed is available for this site.

About Me

How I think and work... and why I'm writing Yet Another Blog.


I'm a software developer, but I don't define myself by that title. The world is a big place and life is exciting. Please excuse me as I indulge myself in explaining my journey in this adventure.


Hello. My name is Mike Charlton. Professionally, I describe myself as a software developer, but if you peruse my CV you may notice that I don’t exactly fit the mold of your average programmer. Perhaps spending the last 5 years teaching English in Japan is the thing that stands out the most. When people talk about “thinking outside the box” it can be confusing for me as I don’t think I have encountered this box of which they speak.

I’m trying to fix problems. Why can’t you understand?!

Early in my career, like many programmers, I struggled with communication issues. As I wrote in the Three Rings of Programming, I believe that the foundation of programming is solving problems. So when a potential client came into my office and casually asked why I was rewriting some of the functionality in our code, “Because it is crap,” was a perfectly natural response for me. Only the horrified look on our CEO who was accompanying the client clued me in to the faux pas that I had stumbled into.

I think a burning desire to solve problems is not uncommon with good programmers, and so it was for me. Very quickly I started to see problems with the way we were doing programming in our teams. This led me to a passion for software process improvement. Owing to a lack of real life experience, I was not entirely successful in solving these kinds of problems for some time.

For example, having spent considerable effort trying to explain that our targets were completely unreasonable, I recall speaking to another CEO at the release party for our product – several years late. I said, “Wouldn’t you have wanted to know that it would take this long when you first started?” He smiled and winked at me, “No, because then I would never have been given the money to begin with.”

If I am any indication, I think that a lot of the communication issues that good young programmers have results from this basic disconnect. Many programmers desparately want to solve problems that management is quite happy to have persist. We figuratively throw ourselves repeatedly up against walls that will never shift, making ourselves unhappy in the process. It is this which prompted me to write about the difference between being useful and being beneficial.

You mean it’s OK to have fun at work?

When I first had this realization it was amazing for me. I discovered that the kinds of activities that I didn’t enjoy (complaining about things being “crap”) were exactly the kinds of activities that my management didn’t enjoy. Not only that, but there were many things that I enjoyed doing that my management also enjoyed me doing (programming). I spent a good long time basking in that environment until the fateful day that one of the directors said, “Mike, you know about this process stuff. Some of the dev guys want to do some XP or Agile something-or-other. I don’t know anything about it. Can you find a way to make them happy?”

Having grown up a little over time, I was careful to listen closely to his request. Did he want to do XP? No. He wanted the development people to be happy. This is really a very different problem than fixing the development process. My job from that point was to make developers happy. “I think I can live with that kind of job”, I thought. I removed myself from the responsibility of releasing products and took on the responsibility of releasing developers.

To make a long story short, we had considerable success with our approach. One day the director came to me and said, “I’m really glad that you didn’t do that XP thing. I’ve just started reading up about it and it looks like a fad. You just fixed problems that the developers were having and did stuff that made sense.” I could only agree, although the fact was that we were then doing all of the practices that made up XP. Were we really doing XP? I think everyone would say that we were just releasing products incredibly successfully.

I think this was the point at which I made another revelation, though I suppose it seems obvious in hindsight. Success is fun. It’s not just fun; it’s super fun. Success also breeds success. The more you succeed, the easier it is to succeed in the future. Creating a culture of success drove me from that point.

Beyond Success

People have asked me why I quit a very senior role in an excellent company to teach English in Japan. I had a nice house, a nice car, and the money that comes with a senior developer role. I had also found a way to work in which I was returning a lot of value to the companies I worked for by simply running around and having fun. In Japan, I would be living in a run down shack on the beach and be paid less than most starting software developers. I would also have no idea how to return that value to my employers – my 20 years of experience would count for almost nothing.

The first time someone asked me this question, I said, “I was trying to learn Japanese at the time and thought, wouldn’t it be nice to have a job where learning Japanese was one of my responsibilities.” To me that seemed obvious – if you have a passion in your life, orient yourself so that people around you value that passion. I had looked in to working in Japan as a programmer, but felt that my Japanese skills were not up to the task. However, if I said that the prospect of teaching high school didn’t attract me, it would be a lie.

I love programming. I practice programming whenever I get a chance. I love working with software processes and helping programmers be successful and happy. I also love walking the thin line between the workers and management, enabling smooth communication for both. But I still wanted to grow.

I think most people who will read this blog will have some experience with a foreign language class. Perhaps you were successful in your classes. Perhaps you were able to achieve adult level proficiency and fluency through your classes. If so, you are one of a very small minority. Most people fail to reach such a level despite having many years of study. It is not unusual to spend hundreds of hours in class and still not be able to order a drink at McDonald’s (although such people can often speak in detail about how to construct sentences using the past imperfect or some other such nonsense).

I hated my French classes when I was growing up. I took 12 years of classes. My parents spoke French at home frequently. I lived with a Francophone girlfriend for a year and a half. I’m ashamed to admit that I can’t order a drink at McDonald’s in French. My continuing failure made me hate learning French.

One thought burned in my mind. Could I make my students successful and, based solely on that success, make English class fun? Could I create a culture of success that would feed on itself and lead the sudents to succeed time after time? It seemed impossible. Was I willing to give up everything I had and take on that challenge? It would be the biggest adventure of my life.

No, I’m not crazy (necessarily)

There are times in your life that are pivotal. For me, I have three such points. First I learned how to be beneficial. Second I learned how to be successful. Finally I learned how to be adventurous. Each one of these points has returned dividends beyond my expectations, but the last is very difficult for many others to understand. Why, after learning to be successful should I pursue adventure rather than security? I suppose the only answer I can supply is that having learned to be successful I feel confident that I can continue to be successful. In that environment, adventure seems like a lot more fun than security.

I spent 5 years teaching English. It is a fascinating and difficult discipline. I gained many insights on the way, but just as everything has a beginning, so too does everything have an end. After 5 years it was time for me to move on to my next adventure. I love teaching, but I have always been a programmer. It was time (perhaps past time?) for me to return. But who will hire a programmer that suddenly quit his job and moved to a small town in Japan to teach English? It’s one thing for me to have confidence in myself, but in order to be hired, others need to have confidence in me too.

For this reason I have started this blog. To be honest, for years I have meant to write down the things I’ve learned over time, but was never able to do so for one reason or another. In the spirit of being beneficial, I hope you enjoy the blog and gain something from it. As for me, I’m just having fun writing.

Note: This website uses Google Analytics to collect statistics. If you wish to avoid being tracked, please disable Javascript for this website (using the NoScript plugin, for instance).