원본
== 7장 프로그래밍 작업의 다양성 ==
프로와 아마추어의 차이
*워드 커닝햄(위키위키 고안자, OOP, 디자인패턴, XP의 선구자)의 인터뷰
"프로페셔널은 동료를 관찰하고 그들로부터 테크닉을 흡수할 수 있는 것이 매우 중요합니다.
아마추어는 "저는 제 방식으로만 일합니다"라고 말할 수 있습니다. 프로페셔널은
"한동안 당신의 방식으로 해보고 어떻게 되는지 봅시다"라고 말할 수 있어야 합니다."
항상 훌륭한 것으로부터 배울것이 있는게 아니라, 잘못된 것에도 배우는 것이 있다. 좀더 넓게 크게 생각해서 지켜보는 마음가짐을 가져야 한다. [http://www.ologist.co.kr/399 ologist`s blog 인용]
*생각해 볼 문제
[http://www.gpgstudy.com/forum/viewtopic.php?p=117923 도구에의존하는 프로그래머는 나쁜것일까요?]
== 8장 개인의 성격 ==
*미치광이 파괴자
프로그래밍뿐이 아니라, 모든 것에서 통용되는 진리
가장 무서운 적은 "어설프게 알고 있는 것"과 "자만"이다
*[http://user.chol.com/~ilovehrl/mbti/mbti1.html MBTI 테스트]
*데우스 엑스 마키나
고대 그리스와 로마 연극에서 줄거리를 풀어나가고 해결하기 위해 신이 때맞춰 나타나는 것.
신이 기중기(그리스어로 '메카네')를 이용하여 하늘에서 나타났기 때문에 이 연극 장치를
'데우스 엑스 마키나'라고 부르게 되었다. 고대 이래로 예기치 않게 나타난 구조자나
혼란, 혹은 질서를 가져오는 뜻밖의 사건(예를 들면 미국 서부영화에서 결정적 순간에
기병대가 나타나 비극을 막는 것 따위)을 일컬을 때도 이 용어가 사용되어왔다. 이
연극장치는 BC 4세기부터 사용되었다. 소포클레스의 〈필록테테스 Philoctetes〉
연극에서도 여러 번 신이 등장하여 위기를 해결한다.
== 9장 지능 또는 문제해결력 ==
* 심리적 자세와 거리[http://gpgstudy.com/forum/viewtopic.php?t=23035&postdays=0&postorder=asc&start=0 한참을 고생한 버그]
{{{#!gcode
for( int i = 0; i < 10; ++i) ; <- 요거
{
처리..
}
}}}
== 10장 동기 부여와 훈련, 경험 ==
*동기부여
문제는 푸는 것보다 발견하는 것이 더 중요하다.
'나는 무엇을 해결하고 있는가?'
'지금 이건 누구의 문제인가?'
'이게 진짜 해결하고 싶은 문제인가?'
== 프로그래밍 직업의 다양성, 개인의 성격 ==
* 같이 일하기 싫은 프로그래머의 성격? 같이 일해야 한다면 어떻게 해야할까?
* 책임감 없는 프로그래머
* 뭔가 다른 동기(짝사랑을 맺어준다던가) 로 우연찮게 친해질 수도 있다
* 개인 사정으로 인한 성격 변화에 대한 대처
* 부모님 병 수발 때문에 잠이 부족해져서 짜증이 많아진 직원
* 개인사 때문에 회사 업무에 지장이 생기면 프로의 자세가 아니다(윌 스미스의 '행복을 찾아서')
* 개발자끼리 알력이 생겼을 때 중재해 줄 수 있는 대모같은 사람이 팀에 있으면 좋겠다
* 문제를 자기 맘대로 재정의해서 풀어버리는 개발자
* 코딩 랩퍼(코딩하면서 중얼중얼 랩으로 불만을 얘기하는 개발자), 우울라이저
* 만화 '바텐더' 에 나오는 얘기 - 스탠다드를 지키면 실수를 막을 수 있다
* 여친과 헤어진 후 비탄속에서 업데이트 하다가 DB 를 날려먹은 사례가 2-3명이나 있다!
* 버그를 고치는 자세
* 일단 고친 후 결과를 지켜보자 vs 원인을 제대로 알 때까지 그대로 두자
* 방어 코드를 넣어서 제품을 보낸 적도 있다
* 디버깅 - 대박 버그를 잡았을 때의 희열(아무도 안 알아주더라도)
* 프로그래밍 하다보면 성격이 변하는 듯
* 다른 직업도 그에 맞게 성격이 바뀌는 것 같다
* 일하는 도중 휴식삼아 하는 일, 스트레스를 풀기 위해 하는 일은?
* 일주일에 하루 정도 밤새 게임하는 등의 일탈, 잠이 최고, 운동
* 도메인을 잘 아는 프로그래머 vs 공부 안 하는 프로그래머
* 시게루도 게임 안 한다더라 -> 게임을 안 하면 대화가 안 된다 -> 너무 게임만 하면 베끼기만 한다, 게임 공부한다면서 실제로는 놀기만 하는 개발자가 많다 -> 게임을 싫어하면서 게임 개발하는 사람도 있다
* 다른 부서(예 : QA, CS) 의 이해를 위해 job switch 해 본 적 있나?
* 신입을 몇 개월 QA 에 보냈는데, 나중에 물어보니 신입들은 하나도 도움 안 되더라고 하더라. 1,2년 개발시킨 후에 보냈어야 하지 않았을까?
* CS 에서 하루 정도 앉아서 고객 상담을 들어보니, 고객이 내가 생각한 것과는 참 다르구나 는 걸 알게 되었다
* 개발 마인드를 전파할 수 있는 방법은? 불가능한가?
* 신입에게 어떤 업무를 줘야할까?
* 자사 게임을 한 달간 시킨다
* 한 달간 코드 리딩만 시킨다(절대 코드를 수정할 수는 없음). 다른 사람의 코드를 읽는 능력이 생기더라
* 주석이 없는 함수에 주석을 다 달아라고 시킨다
* UML 이나 다른 문서화를 시킨 후, 발표를 시킨다
* 그냥 놔 둔후, 나중에 뭐 했는지 물어본다(알아서 일을 찾아서 하는 사람이 되자)
* 3개월간 알고리즘 문제를 풀게 한 후, drop 시키기도 한다
* 팀에서 사람마다 다른 재능을 효율적으로 활용한 경험이 있는가?
* 디버깅 잘 하는 사람, 설계 잘 하는 사람, 요구사항 분석 잘 하는 사람
* 하지만 급한 버그가 났을 때는, 사람마다 다양한 시각에서 버그를 볼 수 있기 때문에 팀원 전체가 버그를 잡는게 중요하다
* 즉, 너무 성향별로 작업을 나누면 오히려 안 좋을 수 있다
* 그리고 편애로 보일 수 있기 때문에, 팀장 입장에서는 그냥 '스탠다드'로 하는 게 낫다
* (면접을 볼 때) 이 사람이 정말 프로그래밍을 사랑하는지 알 수 있는 질문은?
* 자기 개발 여부(공부, 책, 스터디 등), 혹은 오픈소스 참여 등을 얘기하는가?
* 이런 건 거짓말해도 조금만 캐 내어보면 다 들통난다.
* 기획서를 주고 어떻게 구현할지 설명해 보라고 한다
* 문제 해결 : 컴퓨터는 거짓말을 하지 않는다
* 뭔가 잘못 돌아간다면 99.999% 는 사람이 잘 못 한거다
* 사실 0.0001 % 는 기계 잘못인 경우도 있다.
* 싫어하는 작업을 맡았을 때 재미있게 일할 수 있는 방법은?
* 반복 작업을 자동화하거나, 문서화해 보자.
* 이번 기회에 이 작업으로 내가 뭘 할 수 있을지를 고민해 보자
* 일은 주어진 시간을 다 채울때까지 늘어난다 - 파킨슨
* 느슨하게 일정잡은 프로그래머
* 팀장이 일을 파악하지 못하면 이런 일을 막을 수 없다
* 비자아적 프로그래밍 vs 창조적 프로그래밍(software creativity 2.0)
* 서로 어울리는 작업이 있지 않을까?
* 목표로 했던 기능을 일정보다 빨리 구현한 상태
* 다른 일을 더 할 것인가? 이번 일을 더 심화할 것인가?
* 이건 기획자나 PD 와 상의해야 할 듯
* 상점을 3 번째 구현중인데, prototype 때 너무 많은 걸 보여줬더니 힘들어졌다
* 구현하는 도중에 계속 feedback 을 주고 받자
* 피드백을 높이는 방법
* msn 대신 팀별 IRC 를 열어, 모든 채팅은 전체 채팅으로 만들어 둔다
* 누가 뭐 하는지 전부 알 수 있게 된다
* 파트원끼리는 항상 전체 메일
* 아틀란티카 온라인 팀처럼, 내가 만든 작업물은 전부 인트라넷에 올리고, 다른 팀원은 항상 칭찬만 리플에 달아주기
== 동기부여와 훈련 경험, 지능 또는 문제 해결력 ==
* 동기부여 : 인센티브를 주겠다 vs 이 문제는 당신만 해결가능하다
* 인센티브를 준다는 건 경영자 입장에서 해 줄 수 있는 최고의 보상
* 그 약속을 제대로 지키지 않기 때문에 인센티브로 동기부여를 못 하는거지, 개발자가 인센티브를 싫어하는 건 아니다
* 기술을 습득하는 나만의 방법은?
* 책에 나와있는 코드를 다 일일이 타이핑 해 본다
* 공책에 손으로 코딩해 본다(예전 포트란때는 그렇게 했다)
* 쉬운 책(혹은 만화책) 부터 같은 주제의 책을 여러권 동시에 산다
* 다른 도메인의 지식 습득(예 : 미술) 도 큰 도움이 되더라