최근 조사 결과를 바탕으로 간략히 현 시대의 소프트웨어 개발 프로세스와 툴의 현황을 공유해본다.
먼저 소프트웨어 개발에 활용중인 프로세스들의 비중을 살펴보자.
다음은 조직내에서 Agile 이 어느 정도 받아들여지고 있느냐에 대한 설문이다.
마지막으로.. Agile 을 지원하는 툴로써 현 시대 제품들을 평가해본 결과이다.
When you develop an Android application on Emulator, you probable encounter a tiny problem. The default screen size of Emulator is generally too large to work on small laptop. For instance, 13″ macbook only supports screen size 1280*800. And you want to develop an application looks perfect on Motorola Droid, which supports 480×854. It exceeds your laptop’s real estate.
In this case, you may want to resize (or scale down) the Emulator’s screen. Here’s the solution what you’re looking for.
In face, Android AVD Manager’s shipped with the feature built-in. Let’s check one by one.
I prepared one AVD which supports WSVGA1024. Really big. Mostly suitable for tables, but not phones. Anyway..
Your emulator on your display will have the exactly same size you just set at step 5. In above case, the emulator’s screen will cover 7″ in your display.
OK.. Enjoy programming!
작년에 iPhone Application Programming 이라는 제목의 강의를 iTunes U 를 통해 공개해 화제가 되었던 미 Stanford 대학에서 새로운 업그레이드 버전의 강의[1]를 다시 시작했다. 물론 이번에도 iTunes U 를 통해 강의 동영상[2]을 볼 수 있다.
iPhone Application Development. 시작 부분은 작년 강의와 비슷하지만, 후반부로 가면서 최신 iPhone OS 3.1 을 포함하여 작년에 다루지 않았던 내용들을 제법 커버하고 있다. 또한 타 언어 청강자들을 위한 배려로 자막을 포함시켰다. 대략적인 강의 계획[3]은 아래 정도..
This is our preliminary syllabus. Details may change as we go along. 1/5 – Intro to Mac OS X, Cocoa Touch, Objective-C and Tools 1/7 – Using Objective-C, Foundation objects 1/12 – Custom classes, memory management, properties 1/14 – MVC, Interface Builder, Controls & target-action 1/19 – Views, Animation, Open GL 1/21 – View Controllers 1/26 – Navigation Controllers, Tab Bar Controllers, Searching 1/28 – Table Views 2/2 – Dealing with Data: User defaults/Settings, CoreData, JSON & XML, Push 2/4 – Threading, Notifications, KVC 2/9 – Text, Responders, Modal Views 2/11 – Address Book 2/16 – WebViews, MapKit 2/18 – Multitouch, Gestures 2/23 – Device APIs: Location, Accelerometer, Compass, Battery life 2/25 – Audio playback, Video playback, Image/Video Picker, iPod Media Access 3/2 – Bonjour, streams, networking, GameKit 3/4 – Unit testing, Objective-C fun, localization 3/9 – TBD 3/11 – TBD
This is our preliminary syllabus. Details may change as we go along.
1/5 – Intro to Mac OS X, Cocoa Touch, Objective-C and Tools 1/7 – Using Objective-C, Foundation objects
1/12 – Custom classes, memory management, properties 1/14 – MVC, Interface Builder, Controls & target-action
1/19 – Views, Animation, Open GL 1/21 – View Controllers
1/26 – Navigation Controllers, Tab Bar Controllers, Searching 1/28 – Table Views
2/2 – Dealing with Data: User defaults/Settings, CoreData, JSON & XML, Push 2/4 – Threading, Notifications, KVC
2/9 – Text, Responders, Modal Views 2/11 – Address Book
2/16 – WebViews, MapKit 2/18 – Multitouch, Gestures
2/23 – Device APIs: Location, Accelerometer, Compass, Battery life 2/25 – Audio playback, Video playback, Image/Video Picker, iPod Media Access
3/2 – Bonjour, streams, networking, GameKit 3/4 – Unit testing, Objective-C fun, localization
3/9 – TBD 3/11 – TBD
빠르면 이달 말, 늦어도 강의가 끝날 즈음엔 iPhone OS 4.0 API SDK 가 공개될 것이다. 이 강의를 통해 3.x 까지 기본 개념들을 익혀둔 후 4.0으로 넘어가는 것도 괜찮을 듯 싶다.
작년 강의 때는 진도에 맞춰 숙제도 해보면서 많은 것을 배웠다. 회사에서 비슷한 과제를 진행하는데.. 우리의 것보다 너무도 우월하여 다른 팀원들도 시간내서 꼭 봐주길 촉구했으나 관심도 보이지 않던 씁씁한 기억이.. -_-
p.s. Stanford 강의만큼 녹화/편집이 깔끔하진 못하지만, 독일의 RWTH Aachen 대학에서도 iPhone Application Programming 강의를 진행중이다[4].
우리는 창의력과 혁신을 강조하는 시대에 살고 있다. 소프트웨어 개발도 당연히 그 중심에 서 있다. 하지만 우리의 소프트웨어 개발 문화는 창의력을 심히 제한하는 방식으로 굳어져 있다.
일반적으로 우수한 편에 속하는 지적 능력을 가지고 있고, 새로운 것을 만들어내는 것을 즐기는 소프트웨어 개발자들. 그들은 회사에서 어떤 대우를 받고 있나. 조직이 조금만 커져도 기획은 별도의 부서에서 진행하고, 소프트웨어 개발은 몇몇 관리자들이 이끌게 된다. 소프트웨어 개발자들은 창의력을 발휘하기 보다는 시키는 일만 열심히 해야 하는 위치에 놓이게 된다. 코드를 찍어내고 타의에의해 변경된 요구사항들 때문에 수정/테스트를 반복하는 나날을 보내며 발언권은 점점 작아진다.
기술 개발을 중시하는 몇몇 소수 기업을 제외하고는 대부분(대기업)의 윗사람들은 아직까지 소프트웨어 개발자들을 단순 노동자 취급하고 있다. 이를 빗대어 나는 ‘소프트웨어 제조업’ 에 종사하고 있다고 얘기하곤 한다.
반면, 개발자들의 능력을 믿고 그들에게 스스로 혁신을 일으킬 수 있도록 지원해주는 대표적인 기업들로 Google, Apple, Rally Software 등을 들 수 있다.
Google 은 20% 제도로 유명하다[1]. 자신에게 주어진 시간 중 20% 정도를 주업무가 아닌 다른 일에 할애하도록 권장하는 제도로, 다양한 형태로 응용 가능하다. 매일매일 20%의 시간을 다른 일에 투자하는 것은 대부분의 경우는 현실적이지 않다. 프로젝트 마감이 코앞인데 다른 일에 정신 팔기도 힘들고, 하루 1~2시간씩 해서는 진도도 나가지 않기 때문이다. 대신 그들은 1주일에 하루, 1달에 1주, 혹은 6개월에 1달, workaholic 이라면 주말을 이용 등등.. 자유롭게 변형해서 일한다. 과제가 바쁠때는 열심히 그 일에 매달렸다가 한가할 타임에 그동안 못 쓴 20%를 쓰는 식이다.
20%의 시간에는 어떤 일을 할까? 이것도 아주 자유롭다. 전혀 새로운 과제를 수행할 수도 있고, 관심있는 다른 팀 과제를 지원할 수도 있고, 자신의 주 과제를 진행하면서 불편했던 부분을 자동화하거나 유용한 유틸리티를 만들거나, 최적화/리펙토링을 할 수도 있고, gmail/chrome browser 등에 유용한 플러그인을 만들어넣을 수도 있다. 공부를 할 수도 있다.
이렇게 해서 나온 결과들은 팀의 개발 생산성을 향상시키고, 제품의 품질을 좋게하고, 새로운 것을 배우게 만들고, 운이 좋으면 구글의 미래를 이끌어갈 제품으로 거듭날 수도 있다. Gmail, Google News, Google Talk, Orkut, Google Sky [2], Go programming language [3] 등은 모두 20% 시간에 시작된 프로젝트들이다.
Apple 의 경우 1년에 1달 가량 자신이 원하는 일을 할 수 있게 해준다지만.. 자세한 내용은 잘 알려지지 않았다[4].
마지막으로 Rally 의 경우 8주의 개발 사이클 중 마지막 1주는 회사의 미션과 관련된 일이라면 어떤 것이든 할 수 있는 권한이 주어진다[5]. 기간이 일정하게 주어져 있기 때문에 융통성이 조금 부족하지 않을까 우려되긴 하지만 한 숨을 돌리며 자신들의 과거를 뒤돌아볼 수 있다는 점만으로도 확실한 장점이 될 것이다.
다시 암울한 우리의 이야기로 돌아와보자.
나는 현 회사의 윗사람으로부터 ‘관지자가 할 일은 개발자가 놀지 않게 하는 것’ 이란 얘기를 들었다. 여기서 논다는 것은 ‘주업무와 직접적으로 관련 없는 모든 일’을 지칭한다. 내게는 ‘공장 가동을 멈추지 말 것’ 정도로 들렸다. 공식적인 주업무 외에는 회사에 기여하지 못하는 것으로 여겨기기 때문에 일거리를 만들어서라도 주지 않으면 능력 없는 관리자가 되는 것이다.
개발자 입장에서도 마찬가지다. 좋은 아이디어가 있더라도 side job 은 업적으로 인정받기 어렵다. 놀고 있는 것으로 받아들여지므로 드러내놓고 할 수도 없다. 결국 몰래 하거나 개인 시간을 희생해서 짬짬이 하게 되고, 인정받지 못하기 때문에 의욕이 생길리 만무하다.
고급 인력인 개발자들의 좋은 두뇌를 활용하지 못하고, 반대로 창의성을 저하시키는 이런 문화는 하루 빨리 고쳐져야 한다. 말로만 소프트웨어가 중요하다고 하지 말고, 소프트웨어 개발의 특성과 개발자들을 이해하려는 노력이 절실하다.
두서 없지만 이 글은 이쯤에서 마무리하기로 하고, 유사 주제로 작성하고 있는 글이 있으니 그 쪽에서 정리를 시도해보기로 하겠다. ^^