티스토리 뷰

 

프로그래밍 심리학
제랄드 M. 와인버그 저/조상민

 

이 책은 1971년에 초판이 출간됐다. 오랜 시간이 흘렀지만 저자의 통찰력은 여전히 빛나고 있다. 과격하게 표현하면 여전히 프로그래머를 공장의 기계처럼 취급하는 우리 현실에서 40년도 전에 '프로그래밍 심리학'을 고민하고 연구했다는 것이 놀랍다. 그리고 우리 프로그래머의 현실은 별로 나아진 것 같지 않아서 슬프다.

 

차례

1부. 인간 행위로 보는 프로그래밍

2부. 사회 할동으로 보는 프로그래밍

3부. 개인 행위로 보는 프로그래밍

4부. 프로그래밍 도구

5부. 에필로그

 

 

본문 중에서...

 

1부. 인간 행위로 보는 프로그래밍

 

"중요한 것은 질문을 멈추지 않는 것이다.

호기심에는 그 나름의 존재 이유가 있다.

영원과 인생 그리고 신비한 현실의 구조가 주는 불가사의를

생각해 보면 우리는 경외심을 느낄 수밖에 없다.

이러한 불가사의를 매일 조금씩 이해하려고 노력하는 것만으로 충분하다.

절대로 신성한 호기심을 잃지 말라."

- 아인슈타인(Albert Einstein)

 

프로그래머들은 자신의 코드를 다른 사람에게 검토해 달라고 요청하거나 다른 사람의 코드를 보며 자신의 능력을 키우는 것에 왜 그렇게 인색할까? 또 이상한 점은 자칭 똑똑이들보다 정말 유능한 프로그래머들은 그런 일을 더 중요시한다는 것이다. 따라서 항상 그렇듯이, 부익부 빈익빈 현상이 발생한다.

 

우리는 어떤 프로그램을 다른 프로그램과 비교해 상대적으로 평가하기보다는 개발에 관련된 모든 상황에 비추어 그 프로그램을 평가해야 한다. 그리고 솔직히 말해서, 우리가 원하는 것은 최고의 프로그램이 아니다. 우리가 원하는 것은 요구 명세에 부합하는 프로그램이다.

 

아마도 프로그래밍은 연구 대상으로 삼기에 너무나 복잡한 행위이기 때문에 커다란 불가사의로 남을 수밖에 없었을 것이다.

 

2부. 사회 활동으로 보는 프로그래밍

 

비자아적 프로그래밍을 실천하는 그룹의 능력 수준은 특별한 교육 없이도 저절로 높아지는 듯하다.

 

프로그래머의 작업 환경은 복잡다단하며 인간관계와 그 변화 그리고 오해를 불러일으킬 만한 상황들로 가득 차있다. 그 환경을 이해하려면, 공식적 구조와 비공식적 구조의 차이를 이해하고 물리적 환경에서 개인의 자아까지 환겨에 영향을 미치는 다양한 요소들도 이해해야 한다. 그리고 프로그래밍 환경에는 외부로부터 발생한 변화에 저항하는 자기보존성이 있다. 특히, 그 변화가 공식적인 것과 비공식적인 것의 차이를 이해하지 못한 상태에서 이루어질 경우에는 더더욱 그렇다. 이런 자기보존성은 모든 차원의 사회의 존재하는 현상이고, 본질적으로 좋지도 나쁘지도 않다. 그저 프로그래밍의 현실일 뿐이다.

 

최소의 비용으로 최고의 프로그래밍을 원한다면, 가능한 한 최고의 프로그래머들을 구하고 그들에게 최소한의 인원으로도 문제가 없을 만큼 충분한 시간을 주어야 한다. 이것은 프로그래밍 팀의 크기와 구성에 대해 언제나 통용되는 기본 원칙이다.

 

당장은 팀에 거의 아무 도움이 못 될지라도 상대적으로 미숙한 프로그래머를 한 명 이상 포함시키는 것이 좋다. 그런 구성원이 있는 팀에는 목표가 하나 이상 즉, 생산과 훈련이라는 두 가지 목표가 생기게 되고 그에 따라 업무 구조도 달라진다.

 

가장 큰 위협은 꼭대기에 않아 팀이 문제를 인식하기도 전에 비트 하나, 바이트 하나까지 자기가 정의하려드는 관리자다. 그만큼 확실하게 팀의 사기를 떨어뜨리고 팀원들이 자신을 단순 코더에 불과하다고 느끼게 만드는 것은 없다.

 

사회학자들은 업무 집단의 만족도에 영향을 끼치는 요인들을 다음과 같이 크게 4가지로 분류했다.

1. 물질적인 보상과 기회

2. 일 자체가 불러일으키는 의욕과 흥미

3. 조직 전반의 일반적인 조건들, 예를 들어 근로자 복지, 근무 환경, 비슷한 조직들 사이의 상대적인 위치

4. 관리자와 리더의 능력

 

프로그래밍에 경험이 없음을 공개적으로 인정하는 리더는 팀에서 존중 받을 수 있겠지만, 괜히 아는 척 했다가 허풍이라는 게 발각되면 돌아오는 것은 비웃음뿐이다.

 

팀 리더는 다음을 반드시 명심해야 한다.

1. 경영자가 약속 이행을 아무리 강하게 요구한다 해도, 진정으로 원하는 것은 결과물 자체다.

2. 팀 전체가 참여하여 설정한 목표를 추구한다면 결과물을 휠씬 더 쉽게 얻을 수 있다.

 

사실 프로그래밍 팀에 여성이 있을 때 그 여성이 팀의 대모 역할을 하는 경우는 상당히 많다.

...

이런 리더십의 남성-여성 구분이 사회학 또는 심리학적으로 타당하지 와는 별개로, 각 팀에 시험 삼아 여성 프로그래머를 최소한 한 명 이상 배치해 볼 가치가 있음을 뒷받침하는 경험 증거가 꽤 있다.

 

리더십이 지닌 역설 중 하나가 바로 이것이다. 언제든 물러날 준비가 되어 있는 리더만이 진정한 성공의 열쇠를 쥐고 있다.

 

팀의 일생과 업무 수행 능력에 영향을 끼치는 요인들

1. 개인이 지닌 강점과 약점의 다양성

2. 목표가 설되는 방식

3. 개발하는 프로그램의 구조

4. 외부로부터 강요되는 리더십 구조

5. 특정 구성원의 성별과 그 성별을 대하는 다른 구성원들의 태도

6. 팀과 팀 외부 환경 간의 의사전달 통로

7. 팀 리더의 기술적 능력 또는 무능력

 

환자가 회복되면 의사의 작품이고, 환자가 죽으면 신의 뜻이다. 그러나 컴퓨터 프로그램이 작동하지 않으면, 누구의 탓이겠는가?

 

절대 없어서는 안 될 프로그래머가 있다면, 한시라도 빨리 그를 프로젝트에서 제거하라.

 

동조자가 단 한 명만 있어도 전체의 의견에 반대되는 생각을 말하는 데 장애가 되는 사회적 압력이 현저히 줄어들기 때문에, 어떤 프로그래밍 프로젝트에서는 회의에서 데블스 에드버킷(devil's advocate)을 활용하기도 한다.

 

 

- James Song

댓글