The Wonderful World of Computer Graphic User Interface

As WWDC 2013 is over, some of the respectable opinion leaders share their thoughts on iOS 7’s new look. I would like to share links to their posts:

I admit, I’m quite biased in selecting these posts, having positive perspectives.

Surprisingly, there are some common understandings I could find, and have come up with myself, about iOS 7’s new look. Though I’m not a professional designer, or an influential leader like the ones above, I think it won’t be too bad to write one more post about iOS’ User Interface.

Representation by Animation: Until recently, objects or ideas have been represented by visualization. However, instead of bringing full detail from the looks of the objects shown in the real world, iOS 7 chose to use subtle or obvious animations of the objects, or about the ideas as the essential representation method. Please watch the video about Apple’s Design Intention, and recognize how different animations have been used to identical circular dots, to represent many different objects and ideas. This shift can be a great opportunity to those who believe in the apps to be more dynamic and alive, and a great challenge to those who are so used to draw beautiful but only static images.

Content Supremacy: iOS 7’s extremely minimal buttons and labels remind us what we’ve been forgotten; that the app’s main content must have full attention. If pixels or focus inside the device’s screen cannot be shared, so fighting between the main content and user interface controls cannot be avoided, iOS 7 voluntarily yield user’s attention to the main content, by making the controls so thin, translucent & borderless. Because they occupy so little area or look so simple, they can help the main content to be stood out automatically. However, what should not be misunderstood is that, the limitation on the controls can be ignored if they are parts of the main content.

Space Telescope: It’s not that easy to bring fluid transitions between views, but iOS 7 provides new methods to help the developer to implement them as easy as possible. I think it is to encourage the device’s screen to be utilized like a telescope showing one area of much bigger space, which includes more contents yet to be shown, until the device’s screen is looking toward them. The concept of panning & zooming from scrollable views have become more adoptable into view transitioning. Personally, I really like this. (Don’t know how to express in clearer form but…) This is to motivate the apps to bend more space and time, which is no real world medium will ever be able to do.

Still, it is Beta 1. I wonder how the end result will be for the look of iOS 7. But, at least for now, the heading of this exploration is showing the glimpse of the wonderful world of computer graphic user interface.


Avoiding Difficult Errors

The errors do happen. It’s impossible to write error-free lines of code at first.

If it has to happen, then I would like it to be easily searchable, and have been happened to others, and publicly documented, preferably with right solutions.

Often errors are caused by attempting to do something new after learning about changes in methods, or when adopting external source codes.

However, the difficulty in fixing the errors may be eased, if your new attempts are based on rigorously reviewed official documents, or widely used & time-tested open sources. Unless, you were doing extremely strange stuff, most of the errors you will encounter usually already had happened to others, and fortunately solved and documented for you.

Or, if your error is absolutely new one, you have the right (or responsibility) to expose it and ask for attention from others. Because the error is caused by your attempts based on the official documents, there is no way fellow developers who read the same documents to ignore the situation. It does matter to them. And they will join you to fix the problem, making the process relatively easier than doing it alone.

If what makes fixing the errors difficult is because they are strange to you, and you have to do it by yourself, improving the condition of the root causes can help you avoid the difficult errors.

Do your best to spend time for the Real Work

Recently, I had to work so much time on one element of the product, requested by the colleague who was not completely sure if the application was perfect enough for her to think that the product was alright to be released.

At the end, we have found that perfecting the element was impossible since it relies on the external conditions like network status. I had known about this, but I had to show it to her to convince her that it was impossible. She usually don’t understand about software limitations without actually seeing them.

I don’t disrespect perfectionism. Sometimes, even I can see myself spending so much time for just a few things of whole product, to satisfy my purposes for them.

However, it’s false to consider getting the perfect result is directly related to and only possible by working a lot of time on it.

And if such hours were spent for the sake of reenacting already known and proven limitations, you should accept the fact that you just wasted precious time which could be spent for the real work.

I am trying my best to use my work hours for the real work. But it’s irritating when it’s not possible because of incompetencies of others.

iOS Tech Talk 2011 in Seoul

[This blog does not contain any technical information. Also, I am an Apple fan, probably my blog will be purely subjective.]

iOS Tech Talk World Tour

Today, December 8, was very special day for me.

It was my birthday, which was meaningful to me and my parents.

Also, it was the event day for iOS Tech Talk in Seoul, which was meaningful to every iOS developer in S. Korea.

One of the greatest things I didn’t expect from this event was to be able to meet the same instructors who were at the WWDC. In other words, this Tech Talk event can be considered as the extension of WWDC, not the another kind.

To some people, including myself, these instructors are the Rock Stars. They were touring around the world to excite their fans. Some people took pictures with their stars. I didn’t do it because I thought it could be perceived as objectifying them, which could be impolite. However, I just hope I don’t regret not taking pictures with them, later.

Aside their professional authority in the field of software development, the instructors were extremely friendly. They were so generous enough to pay good attention to people they never met before, who kept asking annoying questions. Probably, it’s their job requirement as the  Apple Evangelists. However, it’s impossible to ignore but respect their effort.

This one day event did impress me a lot, strengthening my positive perception about Apple and its people. They do know how to make their fans happy.

Allow me to reuse the tweet I shared: With these enthusiastic, friendly and yet extremely professional masters, the future of Apple will stay to be bright, I think. Even if Steve is no longer with them, with us.

I definitely want to attend WWDC 2012. Not only because I am eager to learn new technologies, but also I want to continue the joyful conversation I was having with the masters. Now it’s clear to me that, everything about Apple has become very personal to me.

[Korean] About my comment on the book, ‘Real iOS Programming without Interface Builder’

This is the comment I left at following URL:  ‘인터페이스 빌더 없이 하는 아이폰 리얼 프로그래밍’

It’s about questioning the intention of the book about doing iOS development WITHOUT using  Interface Builder. It’s written without reading the book yet.

I’m a strong proponent of Interface Builder and its usefulness, and my comment was about that not using the Interface Builder may not be useful for those who need to read this book, who may be new to programming. And ironically to the author’s intention, it may not be able to help creating the application which should be easily maintained and expanded.

(내용을 읽지 않고, 별도의 프로그래밍 관련 주제의 댓글입니다. 소개글만 읽고 적은 것이므로. 책에 대한 평가로 오해하지 말아주세요.)

좋은 책이 나온 것 같습니다. 인터페이스 빌더’만’ 쓸 줄 아시는 분들에게 무척이나 유용하고 의미있는 내용을 가지고 있을 것이라 생각됩니다.

정교하고 디테일한, 100% 통제를 해서 모든 요소들을 일일이 다 챙기는 것이 중요한 프로젝트라면 당연히 코딩으로 VIEW 또한 손수 다 그리는 것이 좋을 수 있습니다.
또한, .xib 은 일종의 XML 로서 parsing 과정을 거쳐야 하기 때문에, 0.001 초라도 아껴야하는 경우에는 분명 사용하지 않는 것이 맞습니다.

하지만, MVC 분리법에 대한 충분한 이해가 되지 않은 초보 개발자, 실제로 응용해본 경험이 적고, 그 가치를 제대로 이해하지 못한 개발자들에게는 잘못하면, VIEW-CONTROL-MODEL 에 속하는 코드들이 우후죽순 막 섞히는 결과물을 내게 만들기도 합니다. 마감날짜가 급한 경우에는 더더욱 유지보수에 문제가 있는 (앞으로 문제가 생길) ‘위험한 코드’를 만들게 되지요.

이렇게 되면 소개글에 나타난 대로 유지보수에 탁월한 해결책이 되어주지 못하게 됩니다.

분명 하드코딩은 중요하고, 어떤 개발환경도 반드시 이것을 가능케 해야 합니다. 하지만, 이것은 과거의 생산물이 가진 생명력을 연장하는데 좋은 것이지, 미래를 위한 혁신적인 결과물을 만드는데 장애가 되는 것이라 생각합니다.

그래서, 혹시라도 미래를 위해서 일해야할 초보 개발자들에게 잘못된 습관을 가지게 하거나 자칫 혼란을 주지 않을까 하네요. 컴퓨터가 할 수 있고, 컴퓨터가 해주는 것이 훨씬 더 좋은 일인데도 불구하고, 단지 자기는 이렇게 가르침 받았고, 이렇게 하고 싶다는 이유만으로 하드 코딩을 고집하는 것은 미래에 대한 좋은 준비자세가 아니라고 생각합니다.

또한 단지 코멘트를 많이 남기기 위해서도 좋은 이유라고 생각되지 않네요. 코멘트 대신에 코드 그 자체로 모든 내용을 표현할 수 있다면 제일 좋다고 많은 분들이 얘기하시는 것 같던데.

반대로, 인터페이스 빌더를 쓰면 그에 대한 설명을 구구절절 코멘트로 어딘가게 남겨둬야 하니, 아예 코멘트 없이 코딩을 하기 위해서라도 하드코딩을 하는게 좋다고 하려 하신 거라면, 적극 동감할 수는 있습니다.

책의 내용은 분명 추정컨데 회사내 베테랑 개발자들에게 무척이나 도움이 되겠지만, 책없이 공부할 줄 아시는 그분들에게 정작 책이 필요하지 않을 것도 같고요. 왜 그동안 이것을 공개적으로 다룬 책이 씌여지지 않았을 지 좀더 냉정한 고민을 하셨기를 바랍니다.

당연히 그런 고민을 하셨다면, 어떻게 하면, 인터페이스 빌더의 장점과 하드코딩의 장점을 융합해서 양쪽 모두가 가진 탁월함을 같이 쓸 수 있는 방법도 책에 써주셨을 거라 믿습니다.

이런 목적으로 두마리 토끼를 다 잡는데 유용한 내용을 쓰셨다면, 이런 책이 다른 곳도 아닌 한국에서 한글로 먼저 출간된 것에 엄청난 자부심을 느끼셔도 좋을 것 같습니다.

My understanding in naming a Class with Prefix

Many source codes, especially those which are written in kinds of C languages, almost always named their classes using prefix.

Intuitively, I adopted to use this way of naming, since many GOOD ones were written in this way. My usual way of learning is by imitating.

As I’ve gained more experience, it became obvious to me why it’s critically helpful for programming.

In my case, I care quite a lot how methods and variables are named. Nicely named ones can help understanding the workflow, minimizing any confusion, thus producing reliable lines of codes.

However, one must careful not to use same syntax for the name of class and instance of it, since it’s difficult to distinguish if one is meant for the instance or the class. It gets worse if the class name and the instance name are as common as something like ‘WebViewController.’

Since naming instances of class happens more often than naming a class, it’s better to name the class with less common way. To make it less common, one of the easiest way is to use a prefix, elongating it to be syntactically different. For example, by using prefixed, ‘FXDWebViewController’ for the class name, one can use ‘webViewController’ as a name for an instance.

Though this instance name is quite common, you can use it as often as possible, without causing the programmer to be confused and even preventing compile time or run-time errors, as long as they are separated by scopes.

It gets even better when one has to use Find and Replace function, since syntactically different words are much easier to be found more quickly.

Also, using the prefix, you can leave it as some kind of signature, claiming your authorship and responsibility on the source codes.

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.