Coding while Commuting

Last week, I’ve been coding while commuting to my office. Due to busy schedule for our projects, being required to learn Cocos2d framework, and having own desire to utilize my time to its fullest, I began to train myself to be more comfortable at coding while commuting using bus.

[New York Time] Wi-Fi Turns Rowdy Bus Into Rolling Study Hall
from New York Times
I use long distance bus from my home to subway station, and take a train to the office. It takes about an hour for bus ride and about 20 minutes for subway transit. And almost every time, I’ve been able to take a sit in the bus. In other words, I have an hour at my disposal to do something productive, such as coding.

Typing and building using Xcode works just fine, especially if you are free from needing to use big external display, comfortable desk and chair. When I do occasionally need to use internet, my iPhone 4 can provide personal hotspot. However, coding without internet browsing is not bad at all for me, since it lasts only about an hour.

During this hour of coding, somehow I could be able to focus on my coding more efficiently than while sitting  comfortably in my office. I suspect it’s because of using only Xcode with all other apps being closed, and encouraging myself to find solutions from my own stuff, rather than passively search answers from internet. Also, knowing the bus ride would last only for an hour, I could just focus on finishing miniscule but important matters which could be fixed quickly.

Because of this good experience, I began to have stronger desire to get Macbook Air. This lightweight compact laptop will surely make my coding while commuting more enjoyable, though my current 13″ Macbook Pro is not so bad at all. Guess I need to find about opinions of the developers using Macbook Air with Xcode, and how to deal with disadvantages.

Why having personal projects is critical for a software developer?

I would like to share my reasons, based on what I learned from other developers, to have personal projects outside of professional jobs.

Unless you are a super genius, who can implement newly acquired knowledge flawlessly at once, it’s inevitable to make mistakes in programming based on new ideas. Your choice for solutions will need to be revised repeatedly. It may require number of customizations to accommodate merging these solution with codes from other developers or from older projects, though they are working just fine with no problems by themselves.

At early stage, your professional job will provide this kind of challenges many times, allowing you to grow patience in dealing with errors and testing implementations to find the right solutions. Sooner or later, you may find yourself simply customizing lines of codes for already solved problems. In other words, your job will get easier as your professional experience grows.

Unlike many other professional fields, new technologies are introduced so often, much faster than we can keep up with. But until your project manager or supervising developer decides to use these new technologies, you may only hear about them, if this is the worst case.

Your ability to implement new ideas, that you’ve practiced so hard, will become dull or inefficient. And what makes it more depressing is that this kind of backsliding happens very quickly and drastically. When finally new technologies are required for your projects, it could be embarrassing that your development skill is much like how it were at the early stage of your profession.

Having your personal projects not only mean that you build something, but also that you make own decisions. Because you are in charge, you can test your implementation skill with new technologies without waiting for anything. Whether your attempt to use new ideas is successful or not, you will be prepared to deal with issues later when it’s much needed for real jobs assigned by your employer.

Along with technical decisions, you can also make scheduling one on your own, without any constraints. Of course, once it’s public and used by many others, you may have to listen to their requests and satisfy their demands as soon as possible. However, it’s done proactively, being able to lengthen or even shorten the development time as you like. This sense of controlling time is probably only possible if you have complete ownership of your project, which is by having personal project outside of your job.

Also, no matter how much dedication you’ve put into your works, technically these jobs assigned by your employer are actually not yours. These useful evidences for proving your skills may not be permitted to be used when you are applying for a new job from another company. But with you own personal projects, you can just submit them to be fully analyzed without any guilt but with great confidence. It’s always better to silently show what you are so good at, than just loudly speak about it.

Started research and development using Cocos2D

Today my employer company started research and development using Cocos2D.

For diversifying our catalog of iOS application and eventually make more profit, we began to take game development very seriously. Since none of our iOS developers have experience in this area, we selected Cocos2D as the entry framework. Probably in the future, we may venture into more serious game engine, such Unity or Unreal.

My first impression from Cocos2D is, how friendly the framework is structured for avid Cocoa Touch developers. Many of coding conventions are almost identical to that of Cocoa’s. If you have already good experience in iOS development, whole aspect of the project and its architecture, then graphical game specific elements are the only problems you should work on, based my initial observation.

The important elements of Cocos2D, Director, Scene, Layer, Sprite have its counterparts that are UIApplicationDelegate, UiViewController, UIView, and UIControl, making it easier to understand. Utilizing default structure and the objects of iOS application, you can focus mainly on graphics problems, which are the majority of game development, I believe.

We expect to save a lot of time for development using Cocos2D. As a new comer in this field, our company will make a lot of mistakes, but if those trials can be tackled rapidly, though we may not have blockbuster success for each iteration, at least we will learn a lot of game development and increase our chance to have successful result next time.

Talented people are happy to help others using their talents

Everyone is so good at something, and asking for his help is actually easier than it seems.

When working together, however, some people feel reluctant to reach out for help, thinking it might be interfering or distracting the co-worker. And so they decide to try to solve the problems by themselves. It causes initially small problems to become bigger than when they are first appeared, making it even harder to ask for help later.

From the beginning, it was never possible for them to find the solutions on their own, since they are not prepared for certain problems at all. But people often forget that, in many areas, trying is not sufficient enough for finishing the assignments in the right ways.

For example, when you are writing in English, no matter how much you are willing, focused, and diligently browsing through dictionaries and utilizing translating tools, it’s never faster than a native English speaker can write. And the finished writing will definitely require a few number of revisions before finally becoming acceptable.

If you have a co-worker who is so good at writing in English, just ask for help as early as possible and as often as possible. Since tasks are smaller if they are requested in this way, and he is naturally prepared to use his English fluently and confidently, almost always he will happily accept the request for help.  It’s much better than bringing the big assignment with so little time before deadline, worrying if the co-worker will hate you. Likewise, similar principle can be practiced in many other areas.

Talented people are happy to help others using their talents. Their talents are meant to be used to help others. Though it’s tough and we are busy doing our own tasks, it’s critical to remind ourselves that we commute to workplaces which are essentially set up for the us workers to work together.

Renewing domain and hosting services

Hosting and domain renewing time has come. And by examining what new options are available, I could also review what resources I have for development.

Hardware, iOS developer connection membership, and other subscriptions, are usually fixed cost, with little variety. But most of all, I need them with no other choice. Fortunately, considering their importance, many of them are quite affordable, relatively.

But domain registration and hosting is different story. There are so many different options for different purposes. New options can be found from many places.

For domain registration, I used GoDaddy, but just transferred all my domains to Hover. Except for being cheap, there is almost no advantages in using GoDaddy. Their interface is so crude and excluding privacy option in basic purchasing of domain is not right, I think.

For hosting, I decided to stay with generic PHP and MySQL combination for one more year. Though there are disadvantages, it seems nice option for my personal blogging. I seriously thought about using Squarespace, but until my projects are grown big to attract so much traffic, having inexpensive hosting with option to use multiple WordPress installations sounded good to me. Also, revitalized respect for PHP and MySQL affected me to make such decision.

Dealing with busy situation of finalizing development

About last 5 days were dedicated to prepare newly developed iOS app to be submitted to the App Store. During those days, unknown but high priority errors were found and prevented other issues to be solved in time. It was extremely stressful to find the causes and solutions, especially if every line of code compiled and worked just fine. As expected, the main causes were architecture related, run-time issues, which are usually considered to be more difficult than anything else.

What made me more frustrated was that, the architecture was working just fine until new feature were added for the requests that were made so late as when we were just ready to submit the product to the App Store. As we were adding new feature, processes were changed and other components were affected without our knowledge. To those who request, it’s just one more feature. However, to those who develop, it’s one more variable affecting entire system.

Also, I have realized how inexperienced I am, especially if I am under time constraining situation. If newly added feature is not working right at first, I easily lost confidence in my own design of software, and attempted to modify it to accommodate the new feature. And because this modification on the currently working design was made hastily, I often overlooked how important components were affected by recent change.

I should have more training on staying calm and keeping the confidence in finely working software design in the midst the frantic development.

My thoughts on teaching English grammar in S. Korea

Studying English grammar should be approached as trustful confirmation to what learners are discovering from actually using English everyday.

To me, the biggest mistake of many teachers in S. Korea is treating English grammar as REGULATIONS to be instructed BEFORE using English.

Without actually using English, learning CONVENTIONS or USAGES from other examples FIRST, just knowing REGULATIONS will not help you at all.

Let’s admit. We are spending TOO MUCH MONEY for English education, and yet there are still TOO MANY PEOPLE not doing well. It’s wrong.