티스토리 뷰



4장. 프로그래밍 그룹

p. 130

사회적 환경은 비자아적 프로그래밍을 장려하거나 또는 억제하는 방향으로 조성될 수 있다. 새로 들어온 프로그래머의 마음가짐은 기존 구성원들이 어떻게 반응하느냐에 따라 다르게 형성되기 때문이다. 다른 사람에게 조언을 부탁했는데 그것도 모르냐는 식의 조롱이 돌아온다면, 다시는 남에게 도움을 청하지 않게 될 것이다. 반대로 동료가 먼저 부탁을 해오고 또 자신이 잘 도와주어 감사를 받게 된다면, 이후에 자신이 부탁을 해야 할 때에 그다지 거리낌이 없을 것이다. 

우리가 취하는 행동에서 상당 부분은 주위 사람의 행동에 영향을 받는다. 따라서 어떤 프로그래밍 그룹에 새로 합류한 사람은 그 그룹의 철학에 맞춰 사회화된다. 


p. 137

4. 너의 프로그램에는 오류가 있다며 다른 사람을 비난한 적이 있는가? 천공기나 자기테이프 같은 무생물을 비난한 적이 있는가? 다른 사람이나 사물을 비난할 때 당신이 옳았던 경우가 몇 번이나 되는가?

5. 당신의 프로그램에 어떤 오류가 있을 때 불운함을 탓했던 적이 있는가? 얼마나 자주 그랬는가? 다른 프로그래머들도 당신만큼 불운하던가? 아니라면, 왜 운명이 유독 당신만 박대한다고 생각하는가? 그 액운을 떨치려면 어떤 굿판을 벌여야한다고 생각하는가? ㅠㅠ;;  


5장. 프로그래밍 팀

p.148

최소의 비용으로 최고의 프로그래밍을 원한다면 가능한 한 최고의 프로그래머들을 구하고 그들에게 최소한의 인원으로도 문제가 없을만큼 충분한 시간을 주어야 한다. 이것이 프로그래밍 팀의 크기와 구성에 대한 언제나 통용되는 기본 원칙이다. 일을 더 빨리 해야 하거나 덜 숙련된 사람들과 일해야 한다면 비용과 불확실성이 더 증가하게 된다. 어쨌든 프로그래밍 프로젝트를 수행하는 가장 최악의 방식은 초보자들만 고용한 뒤 스트레스만 많이 주고 감독은 하지 않으면서 일을 시키는 것이다. 불행하게도 오늘날 가장 흔히 볼 수 있는 광경이기는 하지만 말이다.
경험이 전혀 없는 완전 초보들은 그렇게 방치 될 경우 프로그래밍 경험을 통해 배울 수 있는 것도 놓쳐 버릴 수 있다. 그리고 현재에서 볼 때 생산성을 최대로 내도록 조직된 팀이 장기적으로도 최대의 생산성을 내라 보장 할 수도 없다. 그러기 위해서는 반드시 훈련이 필요하다. 따라서 당장은 팀에 거의 아무 도움이 못 될지라도 상대적으로 미숙한 프로그래머를 한 명 이상 포함 시키는 것이 좋다. 그런 구성원이 있는 팀에는 목표가 하나 이상, 즉 생산과 훈련이라는 두 가지 목표가 생기게 되고 그에 따라 업무 구조도 달라진다.

p. 152

어떤 업무를 마느냐에 따라 지위를 얻을 수도 혹은 잃을 수도 있다. 프로그래밍 작업에도 사무실에 카펫처럼 상대적인 지위의 높고 낮음이 있으며, 팀을 조직할 때 업무를 분배하는 사람은 팀원들의 감정이 상하지 않도록 아주 조심스럽고 신중해야 한다.
프로그램이 작업에 스며있는 이러한 인격화가 업무분배 관한 팀의 만족도를 결정하는 중요한 요소로 작용하는 현상을 이성적이라 할 수는 없다. 그러나 오히려 비이성적이기 때문에 그만큼 더 현실을 잘 반영하는 것일 수도 있다.

p. 172

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

p.175

팀원 중 누군가 맡은 몫을 제대로 해 내기에는 능력이 모자람을 다른 팀원들이 알아차리는 순간, 또 다른 종류의 위기가 나타난다 이에 대해 민주적인 팀의 경우 그 업무가 다른 팀원에게로 서서히 넘어가는 결과를 예상할 수 있다. 만약 한 사람의 강력한 리더를 중심으로 팀이 조직된 중앙집권적 형태라면 그 팀원을 해고 할 가능성이 더 높다. 그러나 해고로 만사가 해결되는 것은 아니다 그런 상황이 될 때 쯤이면 대체인력을 구해 훈련시킬만큼 시간이 충분히 남지 시기일 테니 단순히 그를 해고하는 것만으로는 아무것도 해결되지 않는다. 민주적인 팀에서는 각 팀원이 서로 작업결과를 검토할 기회가 많으므로 무능력함이 금방 드러나기가 쉽다.
 따라서 무능력함이 너무나 뻔하게 드러나는 경우에만 권위적으로 처리하는 방식이 더 효과적일 것이다 그러나 설사 그런 경우라도 무능력한 팀원을 냉정하게 잘라 버리는 처사가 팀의 사기에 좋은 영향을 줄 리 없다. 아무리 무능력 해도 얼마든지 다른 사람들과 사이가 좋았을 수 있기 때문이다.
민주적인 집단에서는 철저하게 무능력한 구성원보다 유능하지만 다른 사람들과 잘 어울리지 못하는 구성원이 훨씬 더 심각한 문제가 될 수 있다. 권위적인 집단이라면 구조적으로 무능력한 구성원이 업무에 관해 다른 사람들과 접촉할 기회가 많지 않을 것이다. 따라서 리더와 원만하게 지내는 한 특별한 문제가 되지 않는다. 사실 어떤 프로그래머들은 동료들과 친하게 지낼 필요가 없다는 점 때문에 강력한 중앙집권적 리더 아래에서 일하기를 선호한다. 그러나 민주적인 팀내의  반사회적인 구성원은 의사소통의 흐름을 차단하고 팀 회의에서 합의를 도출하는 데 항상 장애물이 된다.


7장. 프로그래밍 작업의 다양성

p. 245

아마추어는 주어진 문제에 대해 배운다. 그리고 그가 배운 것은 뽐낼 만한 장식이 될 수도 있고 발전의 장애가 될 수도 있다. 

반면, 프로는 자신의 직업에 대해 배운다. 지금 다루는 문제가 발전하는 과정의 한 단계일 뿐이다.

또, 프로는 어떤 문제도 아마추어만큼 심각하게 생각하지 않는다. 그에게는 항상 버그가 있었고 앞으로도 그럴 것이기 때문이다. 이런 태도의 차이는 프로와 아마추어 간의 끊임없는 마찰로 이어진다. 프로는 아마추어들이 잘못된 결과에 대해 컴퓨터나 운영자, 시스템, 심지어 정부까지 탓하는 것에 매우 진저리를 친다. 반면, 아마추어는 프로들이 시급한 상황에서도 너무 느긋하여 책임감이 없다고 본다. 


p. 248

프로그램을 개발할 때에는 그 용도에 따라 적절한 수준으로 노력을 기울여야 한다는 교훈을 보여준다. 적절한 수준 이상으로 작업하는 것은 차라리 그 이하로 작업하는 것 보다 더 프로답지 못하다. 프로그래머가 일을 잘하고 있는지 알려면 그가 주어진 문제에 대해 적절한 수준으로 작업하고 있는지를 보면 된다. 작업의 수준을 적절히 조절하지 못하는 사람은 프로가 되기에 항상 실격이다.

프로그래머는 문제를 해결하고자 기울이는 노력 수준을 조정하는 데 보통 실패한다. 풀어야 할 문제가 무엇인지를 모르기 때문이다. 다시 말하면, 방법을 알고 있는 일이나 바로 전 프로그래밍 업무에서 요구됐던 일을 기반으로 현재의 문제를 가정한다. 결국 일이 끝날 때까지 주어진 문제를 제대로 파악하지 못한다. 


p.261

다른 사람이 작성한 프로그램에 있는 버그를 수정하려면 적응력과 균형 감각이 필요하다. 더불어, 주어진 플랫폼이나 언어에 대한 광범위한 이해도 갖춰야 한다. 버그를 찾는 사람에게는 분석적인 사고력이 필요한 반면에, 버그를 수정하는 사람에게는 종합적인 사고력이 필요하다. 물론 한 사람이 그 ㄷ가지 일에 모두 뛰어날 수도 있다. 그러나 그런 사람을 찾기보다는 두 가지를 다 잘하는 팀을 찾는 편이 더 쉽다. 각 팀원의 소질과 단점을 인정하는 감각과 겸손함을 갖췄다면, 그 팀의 능력은 팀원 각자의 능력을 능가할 테니 말이다.


댓글
댓글쓰기 폼