이미 소장하고 있다면 판매해 보세요.
|
인간, 조직, 권력 그리고 어느 SW 엔지니어의 변
프롤로그 소프트웨어 개발의 현장 속으로 사례연구: 덴버공항 수하물 처리 시스템 프로젝트 덴버공항 건설 시스템 구축과정 시스템 구축 실패 과정 프로젝트 실패의 결과 1부 소프트웨어가 뭔지 제대로 알아야 살아남을 수 있다 사례연구: 미국 항공 교통 통제시스템(AAS) 개발 프로젝트를 통해 본 소프트웨어의 특징 AAS 프로젝트의 전개 과정 AAS 프로젝트의 실패와 교훈 Chapter 01 소프트웨어는 생물이다 소프트웨어의 역할 사람들의 기대와 소프트웨어의 능력 사이의 간격 가설과 임시적인 해결책으로서의 소프트웨어 소프트웨어의 생물학적 특성 소프트웨어의 복잡성 Chapter 02 소프트웨어는 보는 사람에 따라 다르다 - 분류 문제 분류 문제 소프트웨어는 늙어간다 Chapter 03 고립된 소프트웨어는 죽는다 - 소프트웨어의 폐쇄성 Chapter 04 소프트웨어를 개발하는 새로운 원리 - 테스트 주도 개발 요구사항 분석과 가설의 차이점 폭포수 개발 모델에 대한 비판 반복 모델에 대한 비판 테스트 주도 개발 방식 Chapter 05 구조적인 복잡성을 해결하는 원리 - 아키텍처 구조적인 복잡성 소프트웨어 아키텍처 설계 아키텍처 지식관리 2부 능력 있는 팀을 만들어 임무를 완수한다 사례연구: 작은 규모의 프로젝트를 통해 본 소프트웨어 개발팀의 문제 Chapter 06 팀을 통한 개발 생산성 향상 이상적인 개발팀의 특성 자율적인 역할 조정과 비공식적인 조직 역할 떠넘기기 Chapter 07 개발팀의 권력 구조 친호 구조 팀의 정보 구조 팀 소속감 소프트웨어 개발팀의 희생양과 소외감 Chapter 08 소프트웨어 개발팀 내의 동조 압력 동조 동조 압력을 극복하는 방법 동조 압력으로 인해 명령이 먹히지 않는 경우 Chapter 09 소프트웨어 개발팀 내의 리더십과 팀 구축 소프트웨어 개발팀 구축 팀 구축과 리더의 역할 소프트웨어 개발팀의 성공을 위한 희생 Chapter 10 소프트웨어 개발팀 구축을 위한 실용적인 기술 원칙 프로세스 관리 조직관리 형상관리 3부 고도의 정치력으로 어떤 어려움도 헤쳐 나간다 사례연구: 미국 국세청 프로젝트 사례를 통해 본 소프트웨어 개발 조직의 정치적 특성 Chapter 11 조직 구조의 특성 고객사의 조직 구조 개발사의 조직 구조 Chapter 12 권력의 속성 감독자의 유형 소프트웨어 개발팀의 운명 조직에서 명령에 대한 태도 Chapter 13 권력을 획득하고 유지하는 방법 적은 자원으로 많은 일을 하는 방법 소프트웨어 개발자의 권력 4부 어떤 상황에서도 자아를 잃지 않는다 사례연구: 마이크로소프트 워드 개발 프로젝트를 통해 본 개인의 특성 247 Chapter 14 인간의 특징 욕망 두려움 편견 Chapter 15 인간에 대해 공부하자 인간을 이해하자 유연한 사고방식을 갖자 어떤 지식이 명확해지면 모호한 부분도 함께 파악해야 한다 회의주의 Chapter 16 소프트웨어를 개발하기 위해서는 건전한 정신이 필요하다 285 세상과 나를 분리하자 건전한 정신을 유지하는 방법 Chapter 17 소프트웨어 개발을 벗어나 진정한 자유를 획득해야 한다 자유를 획득하는 방법 행복을 누리는 방법 때로는 남들에게 나쁜 사람으로 인식될 수도 있어야 한다 에필로그 한국에서 탁월한 소프트웨어 엔지니어로 살아남자 부록 또 다른 SW 엔지니어의 변 주석 및 참조문헌 |
|
미치도록 이해하고 싶었다. 당신은 누구인가.
박효선 (pokopon@yes24.com)
2012.05.17.
한국의 엔지니어들을 위한 입문서? 자기계발서? 나는 엔지니어가 아니다. 하지만 회사를 다니는 동안 겪은 개발 관련 프로젝트는 네 번 정도. 물론 엔지니어가 아니니 현업에서 맡은 역할은 테스터와 장기적으로 보면 프로젝트의 결과물인 프로그램 사용자라고 할 수 있겠다. 그럼에도 구분하자면 엔지니어들을 위한 이 책을 읽을 수밖에 없었던 나름대로 절박했던 이유는 그들을 이해하고 싶어서였다. 그러니까 이 책의 아주 일부만 취득했다고 볼 수 있다. 무엇을? 개발자들의 심리를. 이 책은 크게 4가지 개발 프로젝트 사례를 통해 '소프트웨어의 이해, 개발팀, 개발 조직, 그리고 개발자 개인의 특성'에 대해서 이야기하고 있다. 따라서 용도와는 다른 접근이 되었지만, 엔지니어와 함께 살아가야 하는 이들에게도 이 책은 꽤 유용한 선택이다.
지금이야 새삼스럽지도 않지만, 개발자들과 소통하려고 꽤나 노력하던 시기에 한 개발자로부터 충격적인 '고백'을 들었던 적이 있다. "개발이 불가능한 것은 없다. 단지 시간, 비용, 그리고 엔지니어의 실력 차이만 존재할 뿐이다." 심한 배신감이 느껴졌다. 순진하게도 불가능하다는 답변이 돌아온 요청에 대해서 열심히 다른 기획과 방안을 모색했었으니까. 하지만 덕분에 커뮤니케이션의 한계와 그 속에 숨은 함정을 깨달았다. 때로 귀찮아서, 힘들어서, 어려워서 '불가능합니다' 라는 답변을 던질 수 있다는 것을. 물론 모든 개발자와 프로젝트를 단순하게 매도할 생각은 없다. 하지만 그 뒤로 개발 회의를 할 때 결정적인 한 방이 필요하거나 협의의 난관에 부딪히면 무기로 사용하게 됐다. "절대절대 불가능하다는 말씀입니까?" 라고 던지면 즉답으로 그렇다고 고개를 끄덕이는 (나쁜)개발자는 다행히 아직 만나보지 못했다. 그리고 그 뒤로 협의의 접점을 찾기가 한결 수월해졌다. 좀 이상한 경험이었지만, 이를 통해 커뮤니케이션의 한 방법을 찾았다고 볼 수 있다. (무턱대고 다 통하지는 않는다. 이 또한 함정.) 개발팀에 수많은 요구와 요청, 부탁을 하면서 쌓인 노하우는 요구사항에 대한 개발자의 답변의 측정할 수 있는 눈치 정도랄까. 참 지질하고 슬픈 현실이지만 어쩔 수 없다. 그들과 산뜻한 공존이 가능했더라면 이 책을 읽지도 않았을 일이다. 그러니까 불행하게도 미리 짐작해서 가능할 것 같은 요청만 하게 된 것이다. 아니면 전쟁을 치를 각오를 하던가. 하지만 이는 개발자들에게 더욱 심각하고 슬픈 현실이다. 부록으로 실린 '또 다른 SW 엔지니어의 변' 인터뷰를 읽으면 개발자들에게는 크게 놀라운 일도 아니겠지만, 고객 그러니까 사용자들은 '이 정도였어?'라는 충격을 받을 수도 있겠다. (본문) “프리랜서나 외부업체에서 온 개발자들이 개발 완료되었음을 보고하고 프로젝트에서 빠졌는데 나중에 보니 프로그램에 버튼을 누르면 마치 데이터베이스에 들어가 값을 가져오는 것처럼 보이게만 프로그램을 작성한 것이다. 이렇게 심하게 속이지 않더라도 오류를 잡지 않거나 로직을 일부 빼고 프로그램을 제출하는 경우는 부지기수로 많다. 이런 개발자가 프로젝트 중간에 나가게 되면 남은 개발자들이 그 프로그램을 재작성해야 하는 이중 부담을 지게 된다. 개발자가 무엇을 하고 있는지 알 수 없다는 것이 프로젝트 관리의 큰 구멍이다.” --- p.67 이 책은 깜짝 놀랄 정도로 이 세계의 폐단과 자성의 고백들을 꽤나 솔직하게 밝히고 있다. 본문의 대부분은 개발자들을 위해 다양한 프로젝트를 통해 성공한 사례와 실패의 원인 등을 짚어가면서 혹독한 현장의 생생한 기록들이 이어진다. 추리소설의 범인이 밝혀진 것도 아닌데 읽으면서 '어머'를 연발하며 무릎을 쳐댔다. 드라마틱한 사례도 있고, 실제 사례인가 싶을 정도로 황당한 실패(그것도 초대형 프로젝트)는 스릴러처럼 조마조마하게 읽힌다. 개발자도 아닌데 내가 왜 이러지 하는 그 순간, 이해의 벽을 넘을 수 있다. 특히 Chapter 2와 3을 통해 들여다본 현장은 이들에게도 팀워크, 그리고 조직의 불합리한 구조에 대한 고민은 똑같구나 하는 동조가 일어난다. 엔지니어의 글이기에 관련 용어로 풀어 썼지만, 크게 어렵지도 않다. 불행하게도 새로운 문제가 생겼다. 이해의 벽은 넘었지만 '이해'만 하게 됐다는 것이다. 직업을 엔지니어로 전환할 것도 아니고, 앞으로도 사용자로서 나는 그들의 말을 더욱 검증하려 들 것이고, 확인하려 할 것이다. 더욱 매의 눈으로 지켜봐야 하는 내 처지가. '인간, 조직, 권력 그리고 어느 SW 사용자의 변' - 으로 이름 붙여서 고백하자면, 사용자로서 한 발 양보할 수 있었던 기능에 대해서 고집을 피운 적이 있다는 것 정도. 앞으로 개발자는 사용자의 이런 패턴을 알아가는 것이 관리의 한 방법이라고 할 수 있겠다. 싸우자는 것은 아니고. |
|
생존 본능을 지녀라
한국 소프트웨어 개발 산업이란 척박한 환경에서 SW 엔지니어로 살아남으려면 강력한 생존 본능이 있어야 한다. 위험한 상황을 돌파하는데 머리로 이리저리 궁리하면서 미적거리는 순간 이미 늦는다. 머리보다 몸이 먼저 알고 움직여야 한다. 주변에서 탁월한 소프트웨어 엔지니어라고 부르는 사람들은 대부분 이런 생존 본능을 지니고 있다. 그래서 그들은 한국의 열악한 상황에서도 살아남는다. 탁월한 능력을 배양하라 그들은 어떤 상황에서도 임무를 완수한다. 어느 누구도 성공을 예측하지 않았던 프로젝트를 아무 일 없다는 듯 완수한다. 어떻게 프로젝트를 완수했냐고 물으면 씩 웃으며 “그냥”이라고 말한다. 우리는 속이 시커멓게 타들어가서 초조해 해도 그는 늘 여유가 있다. 그와 있으면 잘 풀릴 것 같은 믿음이 솟아나고 또, 이상하리만치 문제가 쉽게 해결된다. 이런 엔지니어는 믿음직스럽다. 그는 절대 우리를 배신하지 않을 것이라는 믿음 말이다. 이런 믿음직한 엔지니어는 회사의 보석과도 같은 존재다. 이 책은 이런 생존 본능과 탁월한 능력을 지닌 엔지니어들이 한국이라는 상황에서 어떻게 일하는지 상세히 알려준다. 정글 같은 소프트웨어 개발의 세계에 뛰어든 엔지니어들에게는 좋은 안내서가 될 것이다. 더불어 회사의 핵심 역량이 무엇인지 고민하는 경영자들에게도 이런 엔지니어를 찾아낼 수 있는 심미안을 줄 것이다. 무엇을 할 것인가? 첫째, 소프트웨어 엔지니어로 살아남기 위해서는 소프트웨어의 독특한 특성에 대해 이해해야 한다. 소프트웨어는 생물처럼 성장하며 변화하기 때문에 조심스럽게 접근해야 한다. 지속적인 개선만이 소프트웨어를 다룰 수 있는 최상의 방법이다. 둘째, 팀 구축을 통해 소프트웨어 개발 생산성과 품질을 극대화시켜야 한다. 셋째, 소프트웨어를 개발하는 조직과 지원 조직, 운영 조직이 효율적으로 협업하도록 회사 조직을 정비해야 한다. 넷째, 소프트웨어 개발을 벗어나 개인의 내적 자아를 확립해야 한다. 소프트웨어 개발에 실패하더라도 개인은 사회적으로나 심리적으로 상처받지 않도록 해야 한다. 저자는 한국의 소프트웨어 개발 현장에서는 어떤 일이 벌어지고 있는지, 한국의 소프트웨어 엔지니어들이 어떤 일을 어떻게 일하고 있는지 생생한 날것의 현장을 보여준다. ‘왜, 죽기 살기로 뛰어야 하지?’라는 의문에서 시작된 그의 통찰은 특유의 직설화법으로 그 문제와 모순의 핵을 꿰뚫고 지나간다. 이런 진흙탕에서 끝내 살아남으려면 무엇을 어떻게 해야 하는지에 대해 그간 자신의 경험을 토대로 고민했던 내용을 신심어린 제언으로 풀어낸다. 물론, 그렇다고 한국 소프트웨어 현장의 문제점을 모두 다루고 모두 해결할 수 있다고 말하지 않는다. 저자의 생각과 제안이 모든 문제의 해결책이 될 수는 없는 노릇일 터이다. 하지만 저자가 제기한 문제나 해결책으로 제안한 것은 이 현장에서 먹고사는 사람이라면 그냥 지나칠 수 없을 것임이 분명하다. 인간, 조직, 권력이라는 창으로 본 한국의 소프트웨어 산업은 그야말로 전쟁터다. 총알과 포탄이 난무하고 온갖 사상자와 패잔병들이 나뒹구는 전쟁터와 같은 상황에서 살아남으려면 아마도 저자의 경험을 잘 새겨들어야 할지도 모른다. 산다는 것은 항상 이렇게 자신과 타자가 뒤엉켜 진흙탕 속에 뒹구는 과정의 산물일 것이다. 그렇다면 살아남는다는 것은? 아마도 전략과 전술 그리고 처세와 배신이 난무하는 정치의 산물일지도 모른다. 한국의 열악한 소프트웨어 개발 환경에서 탁월한 SW 엔지니어로 살기남기 위한 몸부림이 이 책에 고스란히 담겨 있다. 무릇 한국의 소프트웨어 산업에서 자신의 미래를 생각하는 사람들에게는 이 책이 좋은 가이드가 되어 줄 것이다. |