개발의 통찰. 글로벌 소프트웨어를 말하다, 지혜.
기술 서적을 거의 읽지 않는다. 개발에 필요한 대부분 자료는 웹에서 찾아보면 되기 때문이다. 기술 관련 책은 두껍고 시간이 얼마 지나면 전혀 쓸모가 없어져 버린다. 이런 책들은 쓸데없이 책꽂이 공간만 차지하고 있다가 색이 바래고 다시는 펼쳐져 보지 않은 채 버려지기 마련이다. 그중에는 가끔 다른 용도로 활용되는 책이 있기도 한데, <비주얼 C++ 6> 과 <자바 2 프로그래밍 바이블>. <실무에 강해지는 JSP 프로그래밍>은 책이 튼튼해서 이 세 권을 잘 쌓아 그 위에 모니터를 올려놓고 쓴다.
자료를 찾아보는 면에서 더 편한 걸 쓰면 되므로 책이 편한 사람은 책을 보면 되고 인터넷이 편한 사람은 인터넷을 보면 된다. 이건 개인의 취향이니까.
<글로벌 소프트웨어를 말하다, 지혜.>는 고수의 비급을 풀어놓은 책으로 개발자로서 자신을 한번 돌아볼 기회를 준다. 분명 IT에 대해 말하지만, 글쓴이의 삶의 방향과 의지를 느끼게 하는 수필과 같은 느낌이 들기도 한다. 때로는 당연한 이야기가 나오기도 하고, ‘맞네, 맞아!’하고 손뼉을 치게 하는 글귀도 나온다. 그동안 개발을 업으로 하며 느꼈던 좌절감을 다시 느끼기도 하고, 그래도 이 정도면 썩 괜찮은 개발자가 아닌가 하는 생각도 든다. 내가 백발이 성성할 때까지 개발자로 살아갈지 어떨지는 모르겠다. 그러나 확실한 건 내 개발 인생의 끝을 마주하고 싶다는 것이다. 설령 언젠가 개발을 그만두게 되더라도, ‘아 개발자로 계속 살아갈 것을...’ 이런 미련이 남지 않도록.
글로벌 소프트웨어를 말하다, 지혜. 책갈피.
미국의 직업선호도 조사에 의하면 수만 개의 직업 중에서 소프트웨어 개발자는 과거 수년 동안 직업선호도 1위를 차지해 왔다. 노동집약 산업이라면 가장 선호하는 직업이 될 수는 없었을 것이다. 눈이 충혈되고 피골이 상접한 모습으로 일하는 모습으로는 직업선호도 1위가 될 수 없다.
비용평가와 가치평가는 노동집약 산업과 지식 산업의 대표적인 차이이다. 어떤 제품의 가치를 판단할 때 ‘누가 얼마나 걸려 만들었는가?’라는 원가산출 방식으로 제품의 가치를 산정하는 것이 노동집약 산업의 특징이다. 반면에 ‘고객이 느끼는 가치가 제품의 가치’인 것이 지식 산업이다. 즉, 모차르트가 하나의 곡을 하루 동안에 작곡을 하든 한 달에 걸쳐 작곡을 하든 곡의 가치와는 상관이 없다는 것이다.
“잘못된 길을 멀리 가느니 안 가는 게 낫다”라는 격언이 있다. 모험과는 다르다. 모험은 잘 될 수 있는 확률이라도 있지만 원칙이 잘못된 경우는 모험이 아니라 그냥 100% 오류인 것이다. 잘못된 길을 모험이나 열정적인 노력으로 미화하지 않기를 바란다.
음악을 작곡하는 사람과 연주를 하는 사람이 다르듯이 ‘한 사람이 분석(작곡)도 하고 설계와 구현(연주)을 해야 한다’는 생각은 버려야 한다. 소프트웨어에서는 연주할 곡은 ‘소프트웨어 요구사항 분석서(Software Requirements Specification, SRS)’라는 문서로 작성된다. SRS라는 곡을 가지고 연주하는 것이 설계와 구현이다. 먼저 SRS가 아름다워야 한다. 그리고 아름다운 연주를 해야 한다.
음악에서는 연주할 곡이 완성되지도 않은 상태에서 연주할 수 있는 방법이 없다. 그런데 국내 소프트웨어에서는 무엇을 만드는지도 잘 모르는 상태에서 만들기 시작하는 경우가 허다하다. 반쯤 작곡된 곡을 미리 연주하겠다는 것이다.
대개 아름다움은 좋은 결과를 가져오지만 항상 좋은 결과를 가져오는 충분조건은 아니다. 하지만 아름답지 않으면 절대 좋은 결과는 나오지 않는다. 즉, 충분조건은 아니지만 필요조건인 것이다.
“개는 그들이 던지는 돌을 쫓아다니지만, 사자는 더 이상 돌은 거들떠보지 않고 돌을 던진 자를 문다”고 했다. 우리는 적어도 인간으로서 개가 아닌 사자만큼은 인과관계를 구별할 줄 알아야 한다.
감동은 근본적으로 자기가 할 수 없을 때 느끼는 감정이다. 자기가 스스로 실행하고 있는 사람은 감동받을 일이 없다. 기부를 늘 해 온 사람들은 아름다운 기부 얘기를 들어도 별 감동이 없는 법이다. 그냥 동질감을 느낄 뿐이다.
리눅스의 창시자인 리누스 토발즈가 다음과 같이 말했다.
“지혜는 일을 하는 것을 피하면서 일을 완수하는 역량이다.”
(Intelligence is the ability to avoid doing work, yet getting the work done.)
가장 상위 개념으로 올라가서 “당신이 추구하는 인생의 목표가 무엇입니까?”라고 물으면 거의 모든 사람이 “행복하기 위해서”라고 답한다. 그럼 궁극적인 목표를 알기 위해서는 “왜 행복하기를 원합니까?”라는 질문도 답을 해야 하는데 대부분 여기서 답이 막힌다. 답을 한다고 해도 다음 질문이 또 나온다. 여기서부터는 형이상학의 영역이기 때문에 보통 사람들에게는 짜증나는 대화일 뿐이고 극히 소수의 사람만이 대화가 가능하다. 결국은 거의 모든 인간은 동물과 같이 오욕에 집착하며 목표도 모른 채 만물의 영장이라고 자아도취하면서 살아가는 것이다.
소프트웨어 공학에서의 정의는 ‘가장 빠른 시간에 가장 적은 비용으로 좋은 품질의 제품을 개발하는 것’이다. 소프트웨어 공학에서도 지적하는, 개발자가 믿는 대표적인 미신이 ‘분석할 시간이 없어서 바로 코딩에 들어가겠다’이다. 이 한마디가 회사 전체의 역량이 초급 수준이라는 것을 말해 준다.
우리 몸에는 방위체력과 운동체력 두 가지가 있고 총합이 일정하다. 그러니 운동체력이 올라가면 방위체력은 떨어진다. 어느 순간 운동을 열심히 하면 병에 걸리기 쉽다는 얘기이다. 총합을 올리려면 운동을 장기간 꾸준히 해야 서서히 올라간다.
깨달음은 스스로 얻어야 하는 것이다. 소크라테스처럼 제자들이 깨달을 때까지 계속 질문을 던지는 것이 스승이 할 수 있는 최선이다. 깨달음의 세계는 다 그런 식으로 진행된다. 그냥 일방적으로 가르쳐서 배울 수 있다면 그건 지혜가 아닌 지식의 세계이다.
국내 팬들이 실리콘밸리의 어느 누구보다 훨씬 더 존경하는 스티브 잡스는 사용자 대표들의 모임인 Focus Group 미팅 따위에는 관심이 없었다. 만일 이에 의존했다면 애플의 혁신적인 제품은 하나도 나오지 않았을 것이다. 그는 고객에 대해 너무도 잘 알고 있었다. 고객 자신보다도 고객을 더 잘 알고 있었다. 고객선호도를 알아내겠다고 설문조사의 결과를 맹신하는 것이 창조와 혁신의 세계에서는 얼마나 위험한 것인지 알 수 있다. 수많은 사람의 의견보다 전문가 한명의 통찰력이 중요하다.
혁신적인 이슈로 강연을 했을 때 50%이상이 공감하면 잘못된 것이다. 그것은 혁신적인 이슈가 아니라는 것을 의미한다. 많은 사람이 공감대를 가질 수 있다면 대부분 선동가나 사기꾼이다. 선각자와 공감대는 본질적으로 서로 모순된 용어이다.
감정적인 이슈를 논리적으로 해결하려 들고, 논리적인 이슈를 감정적으로 해결하려 들고, 공감대가 필요한 이슈를 독단으로 하고, 독단으로 결정할 이슈에서 공감대를 찾는 일은 이제 그만두어야 한다.
개발자는 하루종일 혼자서 일할 수 있어야 한다. 공유해야 할 이슈가 있다면 자기가 집중력을 회복하기 위해 쉬는 시간에 이슈관리시스템을 보면서 처리하면 된다. 하지만 자신이 집중하고 있는 중에 누가 불러댄다면 처음부터 다시 시작해야 한다. 이를 ‘일체성’이라고 한다. 한 번에 완성되지 않으면 처음부터 다시 만들어야 한다. 바둑도 마찬가지고 당구도 마찬가지다. 조엘 스폴스키는 그의 책에서 “개발자가 한 번 전화를 잠깐 받으면 원상복구하는 데 평균 30분이 걸린다”고 했다. 하루에 전화 다섯 번을 받고, 회의에 몇 차례 다녀 오면 개발 일은 할 수가 없다는 것이다.
열정이 없는 것이 아니라 자신의 능력과 현실을 정확히 인식하는 것이 중요하다. ‘아키텍트의 삶을 살 것인가, 고참 개발자의 삶을 살 것인가’를 선택할 수 있는 소수의 경우에는 어떤 삶이 좋을지는 가치관에 따라 다르기 때문에 옳다, 그르다의 문제는 아니다.
글로벌 회사가 될 수 있는가 아닌가를 평가할 때 고객이 직접 방문을 하는 모델로 만들었다면 일단 아니다.
예외처리나 디버그 문장이 습관상 게을리 하기 가장 쉬운 것들이다. 귀찮은 코드이기도 하고 일단 구동이 되는 것이 목표이기 때문에 나중에 한다고 하지만 결국은 못 한다.
좋은 프로그래밍의 필요 조건은 손가락이 아닌 머리를 사용하는 것이다. 그 훈련도 많이 해야 하고 빨리 타이핑의 유혹에서 벗어나야 한다.
진정으로 해야 하는 중요한 것은 다 장기적이고 일만 시간의 법칙이 필요한 것이다. 힘든 노력은 하지 않고 돈으로 재미있고 쉬운 것에 유혹될 때 못하게 하는 것이 회사의 비용을 절약하고 주화입마에 빠질 위험성을 줄이는 것이다.
‘과거에 내가 한 일이 나만의 가치가 되는 일’은 없애야 한다. 그런 가치를 인정해주는 회사라면 희망이 없는 회사니 빨리 이직을 하기 바란다. 과거의 정보는 모든 사람이 나누어 가지고 미래의 가치를 키우는 회사가 바로 개발자가 열정을 가지고 일할 가치가 있는 회사다.
이해할 수도 없이 복잡하게 만들어 놓은 설계는 100% 나쁜 설계이다. 왜 이 설계가 좋은 설계냐고 물어볼 필요가 없다. 인간이라면 아름다움은 스스로 판단할 줄 안다. 결국 아름다운 설계가 좋은 설계이다.
Top-down을 하기 위해서는 다음 네 가지 역량이 필요하다.
- 자연스러운 습관의 거부
- 외로움을 이기는 강력한 의지
- 예술적인 창조성
- 방법적인 역량
이 중에 하나라도 해당되면 글로벌 회사의 역량은 없다고 보면 된다.
- 개발자가 재택근무를 할 수 없다.
- 회의한다고 개발자를 계속 불러 댄다.
- 멘토가 가르쳐주지 않고는 신입사원이 일을 시작할 수 없다.
- 제품 릴리즈를 일 년에 세 번 이상 한다.
- 백발이 성성한 개발자가 한 명도 없다.
- 지금 없어지면 제품 유지보수에 큰일 나는 개발자가 있다.
- 시장에 나온 새로운 개발도구는 다 가지고 있다.
- 코드를 많이 복사해서 사용한다.
- 코딩하면서 예외처리를 하지 않는다.
- 코딩을 각자 다 자기 스타일로 한다.
- 어느 개발자가 마지막 일주일에 소스코드를 왜 몇 줄을 고쳤는지 모른다.
- 착한 개발자가 피해를 입는다.
- 보고하느라 시간을 많이 보낸다.
- 개발자가 2주 휴가를 갔다 올 시간이 없다.
- 모든 결정에 ROI(투자대비효과)를 달라고 한다.
- 다음에 개발할 제품이 무엇인지 모른다.
- 문서를 만들기는 하나 보지는 않는다.
- 물려줄 자산이 없다.
링크
저자 블로그 (http://ikwisdom.com)
SWEBOK (http://www.computer.org/portal/web/swebok)
The evolution of a softwareengineer (https://medium.com/@webseanhickey/the-evolution-of-a-software-engineer-db854689243)
by 月風