
소프트웨어의 지혜
블로그 by 김익환
서울공대. 스탠포드 전산학 석사. 미국 실리콘밸리에서 20년 글로벌 소프트웨어 회사 근무. 한국에서 안랩 부사장, KAIST겸직교수등 20년간 소프트웨어 회사 개발역량 글로벌화 컨설팅 수행. “대한민국에는 소프트웨어가 없다”, “글로벌 소프트웨어를 말하다, 지혜” 등 5권의 저서 출간.

All of Software
블로그 by 전규현
27년간 한글과컴퓨터, 안랩 등에서 수많은 소프트웨어를 개발하였다. 그 과정에서 경험한 실리콘밸리의 개발 문화와 소프트웨어 공학을 국내의 대기업부터 중소기업에 이르는 수많은 회사에 전파하고 글로벌 수준의 소프트웨어 역량을 갖출 수 있도록 컨설팅하고 있다. 저서는 “소프트웨어 개발의 모든 것”과 “소프트웨어 스펙의 모든 것” 있다.
나쁜 프로그래머가 되는 18가지 방법
소프트웨어 개발자는 끊임없이 변화하면서 성장한다. 스스로 길을 잘 찾아서 성장하는 경우도 있고, 좋은 환경에서 개발을 하다 보니 자연스럽게 실력이 향상되기도 한다. 하지만 열악한 환경에서 열심히 일만하다가 개발자로서의 실력은 점점 잃어가는 경우도 있다. 아무리 사회가 어떻고, 회사가 열악하다고 불평을 해봤자 남는 것은 자신의 개발자로서의 실력밖에 없다. 이번 글에서 나쁜 프로그래머가되는 18가지 방법을
빈 줄도 지워서는 안된다.
SVN을 쓸까? Git를 쓸까? 주제로 얘기를 하면 논쟁이 심하다. 하지만 이보다 더 중요한 것은 SVN이나Git와 상관없이 어떻게 하면 여러 개발자들과 협업이 잘 되도록 코딩을 하느냐다. 많은 개발자들은 혼자서 또는 소수의 인원과 개발을 한다. 또는 여러 명이 개발을 하더라도 자신의 소스코드가 딱 정해져 있어서 혼자 개발하는 경우가 많다. 이러다 보니 협업을 위한 개발에는 별로 관심이 없다. 하지만 협업은 혼자서 할 때도 필요한 것이고 여러 명이 개발할 때는 더욱더 필요하다. 방법을 모르거나 문제를 피해 다니면 개발 효율이 떨어지고 한계를 넘지 못한다. 혼자서 개발을 하더라도 수많은 브랜치가 발생할 수 있고 한두 명끼리는 그럭저럭 개발을 하더라도개발팀이 조금만 커져서 뒤죽박죽이 되곤 한다. 그럼 어떻게 코딩을 하는 것이 좋을까? 첫째, 빈 줄도 고쳐서는 안 된다. 내가 고치고 있는 모든 소스코드는 다른 개발자들도 지금 고치고 있다고 생각해야 한다. 설사 혼자서고치는 소스코드라고 하더라도 습관이 된다. 협업을 하고 있다는 마인드는 꾸준히 유지를 해야 한다. 빈 줄 뿐만 아니다. Indentation이 맞지 않는다고 고치는 것도 좋지 않다. 괜히 연산자 사이에 보기 좋으라고 빈칸을 추가하는 것도 나쁘다. 무조건 처음에 잘해야 하고 나중에는 그냥 놔두는 것이 낫다. 둘째, 파일 이름을 바꾸지 말아야 한다. 처음에 대충 파일을 만들다 보면 파일이름이 마음에 안 드는 경우가 있다. 그렇다고 파일을 이름 바꾸면 수많은 사람들에게 영향을 준다. Git에서는 파일을 이름 변경을 추적해주는 기능이 있지만 혼란을피할 길을 없다. 처음에 잘 정해야 한다. 셋째, 함수 이름과 정의를 바꾸지 않아야 한다. 대충 만들어 놓고 자꾸 바꾸는 것은 협업 습관이 없기 때문이다. 그리고 대충 만들고 나중에 수정하는것은 비용이 더 많이 든다. 아주 작은 시스템만 경험해 본 개발자는 이런 방법이 더 빠르다고 주장할지몰라도 큰 시스템에 개발자가 수십 명이라면 얘기가 달라진다. 대충하고 바꾸는 습관이 들어서는 안된다. 넷째, 소스코드를 재배치하지 말아야 한다. 파일의 아래쪽에 있는 함수를 위로 올리고 정리를 하면 소스코드 Merge가 어려워진다. 처음에 잘 생각해서 정하고 나중에는 고치지 말아야 한다. 여러 사람이 동시 소스코드를 정리하면 소스트리는 완전히 뒤죽박죽이 된다. 이미 문제가 발생한 경우 리팩토링이 필요하게 되고 계획을 잘 세워서 시행해야 하고 상당한 비용을 치뤄야 하는 경우도 있다. 이런 경우는 최소화하고 처음부터 제대로 하는 것이 훨씬 낫다. 이 외에도 변수를 어떻게 선언하느냐는 등 협업을 위한 수많은 코딩 노하우들이 있다. 항상 개발은혼자 하는 것이 아니다라는 것을 염두해 두고 개발하는 자세가 필요하다. 물론 위 내용들은 개발자 본인이
개발자간 공유 문화 정착이 힘든 이유
소프트웨어를 개발하는데 있어서 가장 중요한 문화 중 하나는 '공유’ 문화라고 할 수 있다. 소프트웨어개발 속도를 향상하고 비용을 절감하며 프로젝트 성공 확률을 높이는 중요 요소다. 뿐만 아니라 개발자들의 실력을 향상하고 개발자가 20년, 30년 계속 개발자로 일할 수 있도록 하는 기초 체력이기도 하다. 하지만 우리나라에서 공유 문화를 제대로 갖추고 있는 회사를 찾아보기란 그리 쉽지 않다. 내 주변에는 소프트웨어 개발 문화에 관심을 가지고 있는 개발자가 많다. 특히 공유문화에 관심이 많아서 실천을 하려고 노력하는 경우도 많다. 하지만 그런 노력의 결과로 성공적으로 개발문화를 정착했다고 하는 소식은 잘 들려오지 않는다. 그 이유는 무엇일까? 여러 가지 이유가 있겠지만 그 첫 번째는 아직 공유에 노력을 하는 개발자들이 소수이기 때문이다. ‘죄수 딜레마’라고 들어본 적이 있는가? 상황은 다음과 같다. 두 명의 사건 용의자가 체포되어 서로 다른 취조실에서 격리되어 심문을 받고 있다. 이들에게 자백여부에 따라 다음의 선택이 가능하다. 둘 중 하나가 배신하여 죄를 자백하면 자백한 사람은 즉시 풀어주고 나머지 한 명이 10년을 복역해야 한다. 둘 모두 서로를 배신하여 죄를 자백하면 둘 모두 5년을 복역한다. 둘 모두 죄를 자백하지 않으면 둘 모두 6개월을 복역한다. 죄수A는 죄수B가 침묵할 것으로 생각되는 경우 자백을 하는 것이 유리하다. 죄수B가 자백할 것으로 되는 경우 자백이 유리하다. 따라서 죄수A는 죄수B가 어떤 선택을 하든지 자백을 선택한다. 죄수B도 죄수A와 동일한 상황이므로, 마찬가지로 죄수A가 어떤 선택을 하든지 자백이 유리하다. 따라서 둘 모두 자백을 하지 않는 것이 최선의 결과이지만 죄수 A, B 는 모두 자백을 선택하고 각각 5년씩 복역한다는 것이다. 이런 죄수딜레마를 게임으로 시뮬레이션을 해보면 죄수 둘이 서로 의논을 하게 하건, 죄수가 2명이 아니라 여러 명이건 상관없이 비슷한 결과가 나온다고 한다. 도로로 나가보자. 조금 막히는 교차로에서는 교차로 꼬리 물기가 아주 흔하다. 아무리 막히는 교차로라고 하더라도 꼬리물기를 하지 않으면 다같이 평균적으로 더 빨리 교차로를 빠져나갈 수 있다. 하지만 대중은 그런 선택을 하지 않는다. 다들 꼬리 물기를 하는 상황에서 나만 교통법규를 지키고 가만히있으면 교차로를 가장 늦게 통과하게 될 것이다. 심지어는 주변의 차들에게 욕먹을 각오도 해야 한다.꼬리 물기를 하는 차가 다수인 상황에서는 교통법규를 지키는 소수가 몇 배 더 손해를 보게 되어 있다. 그래서 어쩔 수 없이 다같이 손해를 보는 경우를 선택하게 된다. 몇 년 전 가족과 함께 괌의 한 리조트를 방문한 적이 있었다. 하지만 여기서 부끄러운 일을 목격했다. 수영장에는 충분한 선배드가 있는데 아침 9시쯤 수영장에 가보니 모든 선배드가 이미 임자가 있었다. 선배드에 타올을 하나씩 걸쳐 놓았지만 선배드에서 쉬고 있는 사람은 하나도 없었다. 몇 시간 후나타난 선배드의 주인을 보니 모두 한국사람들이었다. 아침 일찍 일어나서 일단 선배드를 찜 해놓고아침식사를 하러 간 것이었다. 사실 선배드는 모든 사람이 충분히 쉴 만큼 많았다. 하지만 이용도 하지않으면서 먼저 찜을 해놓으니 다른 사람들은 전혀 쉴 곳이 없게 된 것이었다. 한국에서는 이런 현상이후로 수영장의 선배드 이용이 유료로 바뀐 것으로 알고 있다. 외국에서는 이로 인해 어떻게 바뀔지,바뀌었는지 알 수 없다. 어쨌든 낯부끄러운 일이었지만 다음날 아침에는 아침식사를 하기 전에 선배드 몇 개를 찜 해 놓는 일에 동참하는 우리를 발견하게 되었다. 이렇듯 죄수딜레마는 어디에서나 나타난다. 약속을 지키면 다같이 이익이 되고 모두 약속을 지킨다는확신이 없다면 약속은 순식간에 무너진다. 그럼, 규칙을 엄하게 적용하면 해결될 수 있지 않을까? 공유를 하지 않으면 벌칙을 주고 필요한 문서를 모두 만들지 않으면 승인을 하지 않아서 프로젝트의 다음 단계로 넘어가지 못하게 하면 해결할 수있지 않을까? 이런 식으로 해결이 될 수 있었다면 우리나라의 대부분의 회사가 이미 공유문화가 잘 정착되었을 것이다. 안타깝게도 엄격한 규칙적용은 그렇게 효과적이지 못하다.
55세 개발자가 막내인 개발팀
얼마전 미국 소프트웨어 회사인 P사의 호주 지사에서 일하고 있는 엔지니어를 만나서 얘기를 나눴다. P사는 본사가 캘리포니아에 있고 전체 개발자 수는100여명이다. 그리 크지 않은 회사지만 20년동안 꾸준히 성장을 해왔고, 소프트웨어 개발자라면 알만한 시스템을 개발하는 회사다. 그 회사의 제품군을 알고 있는 사람들은 100여명 밖에 안되는 개발자들이 일하고 있다는 것에 놀랄것이다. 우리나라 소프트웨어 회사라면 20년간
야근, “악의 균형”
어떤 경영자는 “우리 회사 개발실은 밤이나 주말이나 불이 켜져 있다”고 자랑을 한다. 6개월간 개발자들이 집에도 못 들어가면서 프로젝트를 하고 있는 것을 자랑스럽게 얘기하기도 한다. 오랜 야근으로 이혼에 이르게 된 개발자를 에피소드로 소개하기도 한다. 많은 경영자들은 야근이 개발자들의 열정을 대변해준다고 생각한다. 나도 수년간 자발적으로 하루에 14시간 이상 개발을 한 적이