Insight? Practice!

Road to myself. 자기자신에게로 이르는 길.

[책] Professional 소프트웨어 개발

Professional 소프트웨어 개발. Code Complete으로 유명한 스티브 맥코넬 아저씨 책이다.

그냥 소프트웨어 개발이 아니다. 프로페셔널 개발이다.

아주 오래전 지금보다 훨씬 꼬꼬마 시절. 서점에서 우연히 이 책을 읽은 적이 있는데 그 때 이해한 내용과 지금 이해한 내용이 확실히 다르다. 눈이 가는 문장부터가 다르다. 10년쯤 지나면 내용이 또 다르게 느껴지겠지.

2003년도에 나온 오래된 책이지만 책 속의 통찰은 여전히 예리하다. 소프트웨어를 Professional하게 개발한다는게 무엇이고 이를 위해서는 무엇을 준비해야 하는지 알려주는 책이다.

책을 읽으면서 확실히 소트웨어공학쪽의 지식이 부족하다는걸 느꼈다. 대학교때 배운 소프트웨어 공학은 은퇴를 앞두신 할아버지 교수님이 책을 달달외우도록 시켰던 기억뿐이다. 그땐 이게 왜 필요한지도 몰랐다.

읽으면서 짜릿함을 느꼈거나 자꾸만 눈이 갔던 문장들을 정리해본다.

서문
- 어떻게 변할 것인가? 그것이 이 책에서 다룰 주제이다.

2장
- 일단 작성하고 고쳐보는 개발.

3장
- “책임 사칭 조직”은 결과(긴 근무시간)와 원인(높은 동기부여)을 혼동한다. 우리는 이러한 책임 사칭 조직을 “착취 조직”이라 부른다.
- 사칭 조직이 수행하는 프로젝트는 대부분 실패한다. 무엇이 진정 소프트웨어 프로젝트를 성공으로 이끄는가에 대한 통찰 없이 형태만 흉내내기 때문이다.
- 같은 방식으로 일하기를 반복하면서, 다른 결과를 바랄 수는 없다.
- 프로세스인가 책임인가에 대해 공방을 벌이기보다는 개발자, 관리자의 능력 수준을 향상시키는 길을 찾아야 한다.

4장
- 소프트웨어 인력 시장은 소프트웨어를 뒷받침해 주는 교육 인프라보다 너무 빨리 성장하고 있다.
- 교육 인프라는 실제 현장이 요구하는 것보다 너무 뒤쳐져 있다.

5장
- 지속적으로 도움을 주는 지식. 변하지 않는 핵심.
- 소프트웨어 공학의 수업 내용은 좀 더 오래 쓸 수 있는 지식들에 초점을 맞춰야만 한다.
- 소프트웨어 엔지니어가 모든 영역을 숙달하기를 바라진 않는다. 그러나 전문 소프트웨어 엔지니어라면 반드시 모든 영역에 대한 개론 정도의 지식은 가져야 하며, 대부분의 영역에 대해서는 충분한 지식을, 특정 영역에 대해서는 숙달되어야 한다고 생각한다.

7장
- 내가 이 프로그램의 문법 에러를 모두 잡아내고 컴파일이 될 때쯤이면, 컴퓨터 프로그래밍이 도대체 무엇인지 알게 될거야.
- 내가 이 프로그램을 완벽히 디버깅할 때쯤이면, 프로그래밍이 무엇인지 알게 될거야.
- 멋진 설계를 어떻게 하는지 알게 될 떄쯤, 소프트웨어 개발이 뭔지 알게 될 거야.
- 내가 요구사항을 잘 뽑아내는 방법을 알게 될 떄쯤, 나는 소프트웨어 개발이 뭔지 알게 될거야.
- 요구사항을 잘 분석하는 방법을 익히면서, 소프트웨어 개발이 도대체 무엇인지 결코 알아낼 수 없다는 생각이 들기 시작했다. 그러나 이런 깨달음이 바로 소프트웨어 공학을 향한 첫 발걸음이었다.

8장
- 개발자는 규칙들을 배우고 그것들을 실제로 적용하는 경험을 쌓아야만 한다. 이 모둔 수순은 풋내기가 고수가 될 때까지 자연스럽게 겪게 되는 연마 과정이다.

9장
- 커뮤니티에 참여한 순간 나는 더 이상 외로운 프로그래머가 아니었다. 소프트웨어 개발을 좋아하고 다른 사람들과 자신의 경험을 기꺼이 공유하기를 원하는 사람들이 모임 소프트웨어 개발자 커뮤니티의 일부가 된 것이다.

11장
- 당신이 소프트웨어를 개발한다면, 나는 당신의 통찰력을 글로 한번 써보라고 권하고 싶다. 참여했던 프로젝트에서 가치있는 교훈을 얻었다면 이를 다른 사람들과 나눠보자.

12장
- 골드러시 이후에는 단순히 젊은이의 수를 여럿으로 늘리고 더 큰 차고를 마련하는 것 만으로 성공적으로 경쟁할 수 없다.

13장
- 20~30년동안 소프트웨어 업계에서 일해 온 사람들조차도 최상의 소프트웨어 개발을 경험하지 못했을 수도 있다.

15장
- 이제 우리가 해야할일은 바로 상위 10%의 개발자를 식별하고, 하위 10%의 개발자들을 솎아 내며, 중간 단계의 개발자들의 능력을 상위 수준까지 끌어올리도록 하는 데 힘을 쏟는 것이 될 것이다.

16장
- 우리는 능력이라는 것이 경험과 지식을 조합한 것이라는 걸 알게 되었다. 지식이 경험에서 우러나온 것이 아니라면 정말 최신의 지식을 소유한 것이라 말할 수 없고, 마찬가지로 최신 지식을 알고 있지 않다면, 좋은 경험을 쌓는다는 것은 결국 불가능하다. 개인의 최종 능력은 일반적으로 경험과 지식 중 더 낮은 쪽에 가까워 진다.

18장
- 만약에 전문가가 학교에서 기초 교육만을 마친 뒤에, 배움을 중단한다면, 그들이 학교에서 받았던 기초 교육은 가면 갈수록 그 의미가 퇴색되어 갈 것이다.

19장
- 비효율적인 회사일수록 평균 이하의 개발자가, 효과적인 회사일수록 평균 이상의 개발자가 더 몰린다.

20장
- 소프트웨어공학 윤리 강령과 업무 규범
- 동료: 소프트웨어 엔지니어는 그들의 동료에 대해 공정, 협조적이어야 한다.
- 자신: 소프트웨어 엔지니어는 그들의 전문 업무에 관한 평생 교육에 참여해야 하며, 전문 업무에 대한 윤리적인 접근 방식을 장려해야 한다.
- 많은 소프트웨어 개발자는 아예 노력하지도 않는다. 보통 소프트웨어 개발자는 일년에 한 권 이하의 전문서적을 보고, 전문잡지를 구독하지 않는다. 전문 소프트웨어 엔지니어가 되려면 평생 교육이 뒤따라야 한다.

Comments