티스토리 뷰

 

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

 

차례

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

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

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

4부. 프로그래밍 도구

5부. 에필로그

 

 

본문 중에서...

 

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

 

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

 

프로그램은 사람이 만드는 다른 모든 물건처럼 명확한 수명과 활용 범위를 두고 설계되어야 한다. 수백 년 동안 유지될 수 있을 만큼 논리적인 방법으로 만든 장인의 작품처럼, 프로그램에는 과도하게 설계된 부분도 미진하게 설계된 부분도 있어서는 안된다. 그러나 프로그래머에게는 가장 많은 작업을 요하는 부분보다 가장 흥미로운 지적 도전을 즐길 수 있는 부분에 더 많은 시간을 할애하는 직업병이 있다.

 

적재적소에 필요한 재능을  투입하려면, 프로그래밍 작업을 단순히 프로그래밍이란 한마디로 싸잡을 것이 아니라 더 정밀하게 세분화해야 한다.

 

훌륭한 프로그래머는 어떤 작업에서 장애물에 맞닥뜨렸을 때 다른 작업으로 전환한다(의식적이든 무의식적이든). 즉, 일종의 경계 허물기를 한다.

 

버그를 찾는 사람에게는 분석적인 사고력이 필요한 반면에, 버그를 수정하는 사람에게는 종합적인 사고력이 필요하다. 물론, 한 사람이 그 두 가지 일에 모두 뛰어날 수도 있다. 그러나 그런 사람을 찾기보다는 두 가지를 다 잘하는 팀을 찾는 편이 더 쉽다. 각 팀원의 소질과 단점을 인정하는 감각과 겸손함을 갖췄다면, 그 팀의 능력은 팀원 각자의 능력을 능가할 테니 말이다.

 

"무엇이 좋은 프로그래머를 만드는가?" 란 주제에서 일반적으로 적용할 수 있는 결론을 얻으려면, 보통 논의되는 내용보다 휠씬 더 세부적인 면까지 고려해야 한다. 그리고 아마도 좋은 프로그래머를 만드는 요소가 훌륭한 우정을 만드는 요소와 비슷하다는 사실을 발견하게 될 것이다. 바로, 상호 관심과 개성 존중이다.

 

8장. 개인의 성격

 

프로그래밍 관리자들은 보통 성격보다 지능이 더 중요하다고 말한다. 그러나 프로그래밍을 할 수 없을 만큼 지능이 떨어지는 사람에 대한 일화를 인용하는 사람은 별로 없다. 반대로, 프로그래머가 되어서는 안 됐을 성격을 지닌 사람에 대한 일화를 아는 사람은 많다. 따라서 프로그래밍에는 지능보다 성격이 더 중요하다고 단언할 수 있다.

 

프로그래머에게는 유머감각이 필요하다. 컴퓨터는 자신 앞에 않은 사람을 모두 바보로 만드는 기계이기 때문에 우스꽝스러운 꼴을 당한 자신의 모습을 웃고 넘길 수 없는 사람이 프로그래머로 오랫동안 버티기는 어렵다.

 

특정 프로그래밍 업무에 필수적인 성격 요소를 추려낼 수 있어 보인다. 어떤 성격의 소유자가 어떤 업무를 잘 하지 못할 것임을 알아내는 차원에서는 말이다. 결과적으로, 성격이라는 주제를 연구하면 프로그래머의 능률을 높이는 데 어느 정도 공헌하게 될 것이다. 연구하는 주체는 심리할자일 수 있고 관리자 또는 프로그래머일 수도 있다.

 

9장. 지능 또는 문제해결력

 

코드에 주석을 다는 목적은 읽는 이가 코드를 직접 보기 전에 적당한 마음의 준비를 하게 만들려는 것이다. 그 코드가 정확히 구현되어 있다면, 주석문은 확실히 효과가 있다. 그러나 코드가 부정확하다면, 읽는 사람의 심리적 자세가 주석문의 지배를 당하기 때문에 오류를 찾아내는 데 오히려 방해가 된다.

 

나는 지능보다는 성격이나 업무 습관, 훈련이 더 관련 있다고 믿는다. 그런 것들은 지능과 다르게 삶의 경험을 통해 바뀔 수 있다. 그렇다면 문제는 어떤 사람을 프로그래머로 뽑느냐가 아니라 어떻게 프로그래머를 양성할 것인가로 바뀐다. 즉, 좋은 프로그래머는 태어나는 것이 아니라 만들어진다. 따라서 우리는 프로그래머의 생산 즉, 훈련 과정에 관심을 가져야 한다.

 

프로그래머를 강제로 다른 사람의 방식에 따르도록 하면 문제해결력이 저하된다. 결국, 창의적 사고보다 더 중요한 것은 창의적 의사소통이라 하겠다. 자신의 생각을 다른 사람들이(저마다 방식이 다른) 이해할 수 있는 방식으로 표현하는 것 말이다.

 

10. 동기 부여와 훈련, 경험

 

업무로 인해 프로그래머를 접해 본 사람이라면 누구나 프로그래밍에 대해 프로그래머에게 줄 수 있는 가장 큰 동기는 프로그래밍 그 자체임을 알 것이다.

 

"학교는 배우는 곳, 직장은 일하는 곳" 이라는 생각은 프로그래밍 분야에만 국한된 문제는 아니다. 그러나 프로그래밍은 다른 어떤 분야와 비교해 봐도 지속적인 학습이 중요한 분야다. 따라서 학습에 더 많은 관심을 기울여야 한다.

 

프로그램이 정확하게 동작할 때는 3보 정도 뒤로 물러서서 달성한 성과를 전체적으로 관조해야 한다. 다른 비슷한 프로그램에서는 좀 더 문제가 많았는데 이 프로그램은 왜 성공했을까? 왜 전에는 그렇게 문제가 많았을까? 처음부터 다시 시작한다면 이 프로그램을 좀 더 쉽게 혹은 좀 더 효율적으로 작성하거나 더 나은 문서를 도출할 수 있을까? 만약 그렇다면, 지금 당장 실행할 수 있는 일은 무엇일까? 프로그램이 동작하는 것이 업무가 끝났음을 의미하지는 않음에도, 빨리 결과를 내라는 관리자의 압력 때문에 그런 식의 잘못이 자주 일어난다. 그러나 프로그램으로부터 뭔가를 배우려는 프로그래머라면 그런 압력에 굴복하지 말고 자신의 성과를 되돌아볼 시간을 접해야 한다. 관리자도 프로젝트가 끝났을 때 프로그래머에게 하루쯤 휴가를 주는 것이 좋다. 그리고 이것은 보상의 의미라 아니라 프로그래머에게 프로젝트의 결과를 평가할 기회를 주는 것이다.

 

자신의 도구를 싫어하는 기술자는 형편없는 기술자다. 우리가 더 나은 기술자로 발전하게끔 가르쳐 주는 것은 도구 그 자체이기 때문이다.

 

학교 교육의 목표는 학생 개개인에게 컴퓨터를 충분히 사용해 볼 수 있는 시간을 제공하는 것이 되어야 한다. 그런 방식이 비용이 많이 들고, 운치 없고, 구식일 수도 있지만, 프로그래머에게는 컴퓨터를 통한 배움이 최선이다.

 

 

- James Song

댓글