정예 개발자의 조건
제가 생각하는 문제해결 능력이 뛰어난 개발자의 조건에 대해서 얘기한 적이 있다. 정예개발자라고 칭했는데, 아직 더 나은 호칭이 생각이 나지는 않네요.
소규모 초단기 S/W개발 프로젝트를 위한 TFT의 구성
위글에서는 단순히 조건을 아래와 같이 나열하기만 했습니다.
php, c#, javascript, HTML, ajax, mysql, sqlite, linux, windows
왜 이렇게 나열했는지 이야기하려고 합니다.
1. 문제의 해결
우선 개발자의 본질인 '문제의 해결'에 대해서 이야기하겠습니다.
'문제의 해결'이란 '사람이 하는 일의 일부를 시스템으로 대체해 노동량을 줄이려는 과정에서 발생하는 문제의 해결'을 말합니다.
좀 말이 길지만, 개발직군의 목적을 명확히 하는데 도움이 될 것이라 믿어요.
2. 시스템
노동에 있어서 판단력이 필요한 부분만 남기고.
하드웨어,소프트웨어,저장/출력매체를 이용해 자동화하는 것을 말합니다.
사람은 자동으로 한데 모아진 자료를 이용하여 판단하고 결정하면,
그 결과물도 자동으로 생성되고 조회가 가능하도록 분류됩니다.
이 시스템에는 사용자의 PC, 서버 PC 할것없이 그 과정에 사용되는 전자기기는 모두 포함됩니다. 플랫폼이라고 일컬어지는 것들이기도 합니다.
3. 개발자의 역량
개발자는 이 시스템을 설계하고, 구축하는 주체입니다.
전문 웹개발자라면, 달리 말해서 웹으로 모든것을 해결하려는 사람이라면,
웹브라우저의 form,Javascript와 웹어플리케이션 만으로 모든 것을 해결하려고 하겠죠.
결코 이 구성으로 해결을 하지 못하는 일은 얼마든지 있기 마련입니다.
또 다룰수 있는 범위 자체가, 실력이라고 일컬어지기도 하지요.
그래서 개발자는사용자의 OS에 맞는 어플리케이션 개발부터,서버의 OS에 맞는 어플리케이션 개발,
모바일의 OS에 맞는 어플리케이션 개발까지 모두 아우르기를 바라는 것입니다.
무작정 많이 익힌다고 좋은게 아닙니다.
asp,jsp,php 등 웹언어만 몽땅 익히는 것은 그다지 도움이 되지 않습니다.
php를 할줄안다면 c#을 익히고, c#을 할줄안다면 javascript를 봐야하는 겁니다.
4. 균형적인 시스템 구성 = 저비용
사용자의 OS와 서버의 OS에 맞는 어플리케이션을 능숙하게 개발할수 있다면, 기능을 적절히 나눠서 단순하고, 저비용의 시스템을 만들어 낼수 있게 됩니다.
예를 들어, 동영상 인코딩 서비스를 제공해줄 경우,
웹기반으로만 한다면,
서버 CPU/메모리 자원의 한계때문에
인코딩용 서버를 대량으로 준비해줄수 밖에 없고,
세션을 유지하기 위해 서버프로그래밍이 보다 정교해져야만 합니다.
사용자 PC의 어플리케이션으로 인코딩하고 결과물을 업로드 한다면,
인코딩용 서버를 준비할 필요도 없고,
세션을 유지할 필요도 없어서
매우 단순하고 효율적이며 저비용의 시스템이 될 수 있게 됩니다.
물론 모든 OS별로 어플리케이션을 만들어야 하지만 말이지요.
후자가 맞습니다.
결정권자가 고집을 부리면 비용이 낭비되고 퇴근시간이 늦어집니다.
5. 팀의 구성
혼자서 모든걸 하기 힘든게 사실입니다.
그렇지만 노동량이 많다는 뜻이지,
한사람이 두개이상의 OS 프로그래밍에 능숙해지는 것이 불가능하다는 말은 아닙니다.
보통 개발자가 많은 회사에서는 웹전문 따로 어플리케이션 전문 따로 팀을 구성하는데, 그다지 좋아보이지는 않습니다.
모두에 능한 사람들을 몇 모아서 팀을 만들고,
프로젝트에 따라 다른 역할을 주는 것이 더 효율적이고 훌륭한 결과물을 만들어 낼수 있다고 봅니다.
6. 결론
시스템은 수단방법을 가리지 않고 잘작동해야만 하며, 그 비용이 사람을 고용하는 것보다 커서는 안됩니다.
고로, 저비용이어야 한다는 얘깁니다.
저비용의 필수조건으로는 개발기간이 짧아야하고,
시스템이 필요이상으로 크거나 복잡해서는 안됩니다.
이런 조건에 부합하는 시스템을 만들려면,
개발자는 사용자PC, 서버OS 모두에 능해야 합니다.