본문 바로가기

기타/실용주의 프로그래머

1장. 실용주의 철학

실용주의 프로그래머는 무엇이 다른가?

그들은 직면한 문제 너머를 생각하며, 문제를 항상 더 큰 맥락에 놓으려 노력하고, 항상 더 큰 그림을 보려 한다.

 

1. 고양이가 내 소스코드를 삼켰어요.

실용주의 철학의 초석 중 하나는 경력 향상, 프로젝트, 일상 업무의 면에서 자신과 자신의 행동에 대해 책임을 지는 것이다. 실용주의 프로그래머는 경력에 대한 책임을 지고, 자신의 무지나 실수를 인정하기를 두려워하지 않는다.

우리는 자신의 능력에 대해 자부심을 가질 수 있지만 실수나 무지 같은 단점에 대해서도 정직해져야 한다.

 

 

책임지기

결과에 대한 책임을 받아들인다면, 그 결과에 대해 나중에 해명할 것을 예상해야 한다.

실수나 저지르거나 잘못된 판단을 내렸다면, 정직하게 인정하고 다른 방안을 제안하도록 노력하라.

 

다른 사람이나 다른 무언가를 비난하거나 변명을 만들어 내지 말라.

모든 문제가 벤더, 프로그래밍 언어, 경영진 혹은 동료 때문이라고 떠넘기지 말라.

이들이 모두 한몫씩 했을 수 있겠지만 변명이 아닌 해결안을 제공하는 것은 여러분에게 달려있다.

 

Tip 3.
어설픈 변명을 만들지 말고 대안을 제시하라.

 

나쁜 소식을 전하러 가기 전에 뭔가 시도해 볼만한 다른 것은 없을까?

변명을 말하기 전에 머리 속에서 대화를 진행시켜 보라.

 

변명 대신에 대안을 제시하라.

안 된다고 하지 말고 상황을 개선하기 위해 무엇을 할 수 있는지 설명하라.

 

 

도전해 볼 것

점원이 여러분 앞에서 어설픈 변명을 늘어놓는다면 어떻게 반응하겠는가?

그들에 대해서, 그리고 결과적으로 그 회사에 대해 어떤 생각을 갖게 되는가?

 

 

2. 소프트웨어 엔트로피

엔트로피는 시스템 내의 '무질서'한 정도를 가리키는 물리학 용어다.

소프트웨어의 무질서도가 증가할 때 프로그래먿르은 이를 '소프트웨어의 부패'라고 일컫는다.

 

Tip 4.
깨진 창문을 내버려두지 말라.

 

'깨진 창문'(나쁜 설계, 잘못된 결정, 혹은 형편없는 코드)을 고치지 않는 채로 내버려 두지 마라.

발견하자마자 바로 고쳐라. 고칠 시간이 충분치 않다면 판자로 덮는 것만이라도 하라.

더 이상의 손상을 예방하기 위해 어떤 조치든 취하고 현 상황을 잘 관리하고 있다는 것을 보여줘라.

 

깨진 창문이 꽤 있는 프로젝트를 한다면, "나머지 코드가 전부 쓰레기니까 나도 그렇게 하지 뭐."라는 사고로 빠져들기 너무도 쉽다.

 

 

3. 돌멩이 수프와 삶은 개구리

큰 무리 없이 요구할 수 있을 만한 것을 찾아내라.

그리고 그걸 잘 개발해라. 일단 되면, 사람들에게 보여주고, 그들이 경탄하게 하라.

그리고는 "물론 만약...를 추가하기만 하면 더 나아지겠죠."하고 말하라. 그게 그다지 중요하지 않은 것처럼 가장하라.

계속되는 성공에 합류하기란 쉽다.

그들에게 미래를 살짝이라도 보여주면 그들은 원조를 위해 집결할 것이다.

 

Tip 5.
변화의 촉매가 되라.

 

마을 사람의 경우

돌멩이 수프 이야기는 부드럽고 점진적인 속임수에 관한 이야기이기도 하다.

한 가지에 너무 지나치게 집중하는 것에 대한 교훈이다.

 

코드에 패치가 하나 둘 적용되다가 원본이 하나도 남지 않을 때까지, 시스템은 명세에서부터 기능 하나하나씩 정처 없이 떠다닌다. 의욕과 팀 자체의 파괴는 종종 작은 것들의 누적에서 온다.

 

Tip 6.
큰 그림을 기억하라.

 

끓는 물 안의 개구리처럼 변화를 감지하지 못하면 안된다.

큰 그림에 늘 주의를 기울여라. 

개인적으로 무엇을 하고 있는가에만 정신을 쏟지 말고, 주변에서 무슨 일이 벌어지는지 지속적으로 살펴보라.

 

 

4. 적당히 괜찮은 소프트웨어

'적당히 괜찮은'이라는 문구는 너절하거나 형편없는 코드를 의미하지 않는다.

단지 우리는 여러분이 생산해 낸 것이 어느 정도면 적당히 괜찮은지를 결정하는 과정에 사용자가 참가할 기회를 가져야한다는 걸 말하고 있는 것이다.

 

타협과정에 사용자를 참여시켜라

Tip 7.
품질을 요구사항으로 만들어라.

놀랍게도 많은 사용자들은 멀티미디어 버전을 위해 일 년을 기다리느니 차라리 오늘 당장 좀 불편한 소프트웨어를 사용하고 싶어 한다. 오늘의 훌륭한 소프트웨어는 많은 경우, 내일의 완벽한 소프트웨어보다 낫다. 

사용자들에게 뭔가 직접 만져볼 수 있는 것을 일찍 준다면, 피드백을 통해 종국에는 더 나은 솔루션에 도달할 수 있을 것이다.

 

언제 멈춰야 할 지 알라

완벽하게 훌륭한 프로그램을 과도하게 장식하거나 지나칠정도로 다듬느라 망치지 말라.

그냥 넘어가고 코드가 현재 상태에서 한동안은 그대로 있도록 놓아두라.

완벽하지 않을 수도 있다. 걱정하지 마라. 완벽해지기란 불가능하다.

 

 

5. 지식 포트폴리오

지식에 대한 투자가 언제나 최고의 이윤을 낸다.

 

여러분의 지식과 경험이야말로 가장 중요한 전문가적 자산이다.

불행히도 그것들은 소진하는 자산이다. 

여러분의 지식 가치가 점점 떨어짐에 따라, 회사나 클라이언트에 대한 여러분 자신의 가치 역시 떨어진다.

 

지식 포트폴리오 만들기

 

- 주기적인 투자.

지식 포트폴리오에 주기적으로 투자해야 한다.

비록 소량일지라도 그 습관 자체가 금액의 합계만큼이나 중요하다.

 

- 다각화.

여러 가지를 알면 알수록 자신의 가치는 더욱 높아진다.

컴퓨터 분야의 지형은 빨리 변한다. 오늘날 인기 있는 기술이 내일이면 거의 쓸모없어지기도 한다. 

더 많은 기술에 익숙하다면, 변화에 더 잘 적응할 수 있을 것이다.

 

- 리스크 관리.

여러분의 기술 달걀을 한 바구니에 모두 담지 말라.

 

- 싸게 사서 비싸게 팔기.

새롭게 떠오르는 기술이 인기를 끌기 전에 미리 알고 학습하는 것은 저평가된 주식을 찾아내는 것만큼이나 어려울 수 있지만, 이익 또한 그만큼 클 수 있다.

 

- 검토 및 재조정.

 

Tip 8.
지식 포트폴리오에 주기적으로 투자하라.

 

 

목표

 

- 매년 새로운 언어를 최소 하나는 배워라.

다른 언어는 동일한 문제를 다르게 푼다.

몇 개의 서로 다른 접근법을 알면 사고를 확장하고 판에 박힌 사고에 갇히는 걸 예방하는 데에 도움이 된다.

 

- 기술 서적을 분기마다 한 권씩 읽어라.

습관이 들면, 한 달에 한 권씩 읽어라.

현재 사용하는 기술을 일단 완전히 익혔다면, 가지치기를 해서 지금 하는 프로젝트와 관련 없는 분야까지 공부 범위를 넓혀라.

 

- 비 기술 서적도 읽어라.

컴퓨터를 사용하는 것은 사람이라는 점을 기억하는 게 중요하다.

방정식에서 인간이라는 변을 잊지 마라.

 

- 수업을 들어라.

근처의 대학, 혹은 시사회에서 열리는 흥미로운 강좌를 찾아보라.

 

- 지역 사용자 모임에 참여하라.

가서 가만히 듣고만 오지 말고, 적극 참여하라.

고립은 경력에 치명적일 수 있다. 

여러분 회사 밖에서는 사람들이 어떤 일을 하는지 알아보라.

 

- 다른 환경에 실험해보라.

윈도우에서만 일을 해 왔다면, 집에서는 유닉스를 갖고 놀아보라.

 

- 요즘 흐름을 놓치지 마라.

업계의 잡지와 기타 저널을 구독하라. 여러분의 현재 프로젝트와 다른 기술을 다루는 것도 몇 개 선택하라.

 

- 인터넷을 이용하라.

논문, 상업 사이트 기타 여러분이 찾는 정보의 원천을 찾기 위해 웹 서핑을 하라.

 

 

투자를 계속하는 것이 중요하다.

새로운 언어나 어떤 기술에 대해 익숙할 정도가 되면 다음으로 나아가라. 또 다른 걸 배워라.

 

이런 기술들을 프로젝트에서 사용하지 않거나 심지어 자신의 이력서에 올려놓지 않아도 상관없다.

학습 과정을 통해 사고를 확장하고 새로운 가능성과 새로운 방법들로 자신을 활짝 개방하게 될 것이다.

사고간의 교접은 중요하다.

자신이 배운 교훈들을 현재 프로젝트에 적용하도록 노력하라. 

 

 

비판적 사고

마지막으로 중요한 점은 여러분이 읽거나 듣는 것에 대해 '비판적으로' 생각하는 것이다.

 

Tip 9.
읽고 듣는 것을 비판적으로 분석하라.

 

 

6. 소통하라!

효과적인 소통 없이는 어떤 훌륭한 아이디어도 고아에 지나지 않는다.

 

- 말하고 싶은 게 무언지 알아라

비즈니스에서 사용하는 조금 더 형식적인 스타일의 의사소통에서 가장 어려운 부분은 아마도 여러분이 말하고자 하는 것이 정확히 무엇인지 생각해 내는 것이다. 

 

무엇을 말할지 미리 계획하라. 개요를 작성하라. 그리고 자문해라. 

"이게 내가 말하고자 하는 것을 잘 전달하는가?" 그렇게 될 때까지 다듬어라.

 

이 방법은 문서를 작성하는 데에만 적용되지 않는다.

중요한 회의나 주요 클라이언트와의 전화 통화에 직면했을때, 의사소통하고 싶은 아이디어들을 적은 다음,

제대로 전달하기 위해 필요한 전략을 몇 개 세워라.

 

- 청중을 알아라

청중의 요구와 관심, 능력을 이해할 필요가 있다.

청중에 대한 뚜렷한 그림을 가져야 한다. WISDOM이 도움이 될 것이다.

WISDOM - 청중 이해하기
What: 무엇을 배우길 원하는가?
Interest: 말하려는 것에서 그들이 관심있어 하는 건 무엇인가?
Sophisticated: 얼마나 소양이 있는가?
Detail: 어느 정도의 구체적인 내용을 원하는가?
Owe: 누가 정보를 소유하길 원하는가?
Motive: 그들이 경청하도록 동기를 주려면 어떻게 해야 할까?

 

- 때를 골라라

청중이 무엇을 듣기 원하는지 이해하기 위해서는, 그들의 우선순위를 알아야 한다.

말하는 내용만 아니라 말하는 시간도 적절하게 하라.

가끔 '...에 대해 이야기할 좋은 때일까?'라는 간단한 질문을 해보는 것만으로도 충분하다.

 

- 스타일을 골라라

전달하는 스타일이 청중에 어울리도록 조정하라.

어떤 사람들은 '그저 사실만 전달하는' 브리핑을 원할 수도 있고, 어떤 이는 두꺼운 문서를, 다른 이는 간단한 메모나 이메일을 기대한다. 

 

하지만 여러분이 의사소통의 나머지 반쪽이라는 사실을 기억하라.

간단히 설명할 방법이 없다는 생각이 들면, 사실이 그렇다고 말하라.

 

- 멋져 보이게 하라

여러분의 아이디어는 중요하다. 청중에게 전달하기 위한 멋있는 매개물이 필요하다.

문서 내용에만 집중하지 말고 스타일과 레이아웃 등에도 신경을 써라.

 

- 청중을 참여시켜라

가능하다면 문서 초고에 독자가 참여하도록 하라. 피드백을 받고 그들의 머릿속을 도용하라. 

더 좋은 관계를 형성하게 될 것이고, 아마도 그 과정에서 더 나은 문서를 만들게 될 것이다.

 

- 청자가 되어라

다른 사람들이 여러분이 하는 말을 경청해주길 바란다면 사용할 수 있는 기법이 하나 있다. 바로 경청하는 것이다.

회의를 대화로 바꾸면 생각을 좀 더 효과적으로 전달할 수 있을 것이다.

 

- 응답하라

심지어 응답이 단순히 "다음에 답해 드리겠습니다."라고 할지라도 언제나 이메일과 음성 메일에 답을 하도록 하라.

늘 사람들에게 응답을 해주면 때때로 일어나는 실수에 대해 훨씬 더 관대해질 것이고, 

여러분이 그 사항을 아직 잊지 않았다는 느낌을 줄 것이다.

 

Tip 10.
무엇을 말하는가와 어떻게 말하는가 모두 중요하다.

 

'기타 > 실용주의 프로그래머' 카테고리의 다른 글

서문  (0) 2022.03.05