프로그래머로 사는법 (샘 라이트스톤) 요약본
『프로그래머로 사는 법』은 소프트웨어 프로그래머로 취업하여 경력을 시작하는 방법부터 창업에 이르기까지의 단계별 경력을 집약한 책이다.
Chapter1. 크게 성공하기
# 성공의 기준
재미있고 흥미로운 일, 회사와 업계에 끼친 영향력, 사회의 발전, 하고 싶을 때 하고 싶은 일을 할 자유, 명성, 여행
Chapter2. 좋은 소프트웨어란?
# 망쳐버린 소프트웨어 프로젝트와 무용담
1) 우리가 만든 소프트웨어는 정말 좋았는데, 시장이 아직 무르익지 않았어. 너무 시대를 앞서 갔다니까.
진실 : 소비자 요구를 제대로 파악하지 못했다
2) 소프트웨어는 참 잘 만들었는데 영업, 판매가 잘 안 되더라고
진실 : 아무도 그런 소프트웨어를 원하지 않았다
3) 제품은 끝내줬는데 제대로 좀 해 보려는 마당에 윗선에서 잘라버렸지 뭐야
진실 : 수익을 창출하기까지 너무 오래 걸렸다
# 우리가 하는 모든 일의 원동력은 바로 시장이다
# 고객 : 기존 고객과 신규 고객
# 이기는 전략과 전술
소프트웨어 업계에서 대상고객
1) 자체 IT인프라를 갖춘 고객
2) 스프트웨어와 서비스를 판매 또는 총판하는 독립적인 소프트웨어 판매업체
3) 호스팅서비스를 통한 소비스 SaaS
4) 개인용 컴퓨터에서 돌아가는 소비자용 소프트웨어
품질 특성
1) 고유의 기술 및 비즈니스 가치
2) 신뢰도
3) 기존 고객 평가
4) 시장 점유율
5) 사용 편의성
6) 관리 편의성
7) 가격
8) 솔루션 완전성
중요하게 여겨야 할 품질 특성
고유의 기술 및 비즈니스 가치
# SW 분야에서 성공하는 방법에 대한 조언 : 당신에게 투자하는 사람과 당신에게 도전거리를 안겨주는 사람을 위해 일하세요
1) 자기가 들어가고 싶을 만큼 정말 편하게 느낄 수 있는 곳을 찾으세요.
SW 아키텍처 결정이든, 회사의 전략이든, 사고의 자유를 만끽하고 자기 의견과 생각을 자유롭게 공유할 수 있는 곳에서 일하는 게 좋습니다.
2) 당신에게 투자하는 사람과 당신에게 도전거리를 안겨주는 사람을 위해 일하세요
3) 더 많이 생각하고 더 잘 일할 동기를 유발할 수 있는, 자기가 아는 사람 중에 가장 똑똑한 사람하고 일할 수 있도록 노력하세요
4) 언제나 아직 준비되지 않는 일을 하세요.
한 발 더 앞으로 나갈 수 있는 것, 새로운 것을 배우게 된다는 것, 성장한다는 것을 의미합니다
Chapter3. 학교 대 직장
# 차이점
원동력과 주체, 운식의 폭, 혁신, 인맥, 리더십, 학습과 일, 돈, 생산성, 평가, 리스크와 파급효과, 개인 포트폴리오
# 성공 = 바람직한 마무리
1) 어려운 문제 해결
2) 내가 한 일이 널리 쓰이는 것
3) 기술 분야에 파급 효과 미치기
# SW 분야에서 성공하는 방법에 대한 조언 : 자신이 사랑하는 일을 하라
행복을 찾으세요
배울 수 있는 건 뭐든 배우세요
새로운 것을 시도해 보세요. 하지만 옛것을 지키세요
최고의 사람과 함께 일하세요
조언자를 찾으세요. 자신이 존경하는 사람으로부터 배우세요
자기 팀, 자기 회사, 자기 이웃에게 보답하세요
글쓰기와 코딩을 꾸준히 연습하세요. 동료의 일을 검토해주고, 자신의 일도 동료에게 검토받으세요.
자기 회사, 팀, 동료 등에게 멋진 사람이 되세요. 충성심은 서로 주고 받는 것입니다.
좋은 책을 읽으세요 (영작책 Elements of style, 수학문제 풀이 How to solve it, 실제 문제해결 The woolsey papers)
Chpater4. 미션 임파서블? 소프트웨어 개발 분야 직장 구하기
# 회사를 살펴볼 때 생각할 10가지
1) 전문적인 고품질 시스템을 만든 경험이 있는 회사인가?
2) 뭔가 배울 만한, 진정 재능을 갖춘 사람이 있는 회사인가?
3) 내가 들어갈 자리가 흥미로운 자리이고, 내가 믿을 수 있는 것과 관련하여 장기적인 성장 가능성을 가진 회사인가?
4) 성공하기 위한 필요조건을 제대로 이해하고 실제 성공 실적을 가진, 상식에 맞게 행동하는 경영진이 있는 회사인가?
5) 자기가 생산하는 제품에 대한 비전을 분명하게 가지고 있는 회사인가?
6) 독립 연구 조직이 있는 회사인가?
7) 어떻게 혁신하는 회사인가?
8) 쾌적하고 유연한 업무환경을 갖추고 있는가? 내 라이프 스타일과 어울리는 회사인가?
9) 회사가 안정적일 것 같은가? 10년후에도 존속할 수 있는 믿음이 가는가?
10) 업계 표준에 걸맞는 수준의 급여를 지급하는 회사인가?
# 바림직한 개발자 이력서
리더십 경력
특정 분야의 기술
수상경력
혁신 (특허/학술 논문)
전문가 활동(학술단체)
과외활동
# 훌룡한 면접을 위한 15가지 비결
1) 해당 분야에 대해 연구하고, 그 기업의 현 위치를 파악한다
2) 스킬 테스트용 질문, 퍼즐형 문제, 현장에서의 프로그래밍 테스트에 대비한다
3) 자신감과 겸손함을 동시에 보인다
4) 명확하게 소통할 수 있다는 것을 보인다
5) 소프트웨어 분야에서의 폭넓은 관심을 보인다
6) 지피지기면 백전백승이다 (대부분 면접관은 어떻게든 지원자를 떨어뜨리기 위해 노력한다)
7) 긍정적인 면만 부각한다
8) 열정을 보인다
9) 회사에 대한 부정적인 질문은 하지 않는다
10) 개인 신상이나 건강에 관한 정보는 절대 공개하지 않는다
11) 자기선전을 준비하다
12) 거짓말을 하지 않는다
13) 면접 후 에티켓을 갖춘다
14) 면접코칭
15) 기타 면접절차를 더 수월하게 이끌어 갈 수 있는 비결 (면접장소에 미리 가보자. 회사문화에 대해 미리 어느정도 감을 잡아보자)
# SW 분야에서 성공하는 방법에 대한 조언
행운을 잡으세요. 자기가 잘하는 일을 하세요. 열심히 일하되 너무 강박적으로 하지는 마세요. 인간적으로 사세요
할만한 가치가 있는 것을 발견했다면 열심히, 꾸준히 하세요. 그리고 유행은 무시하세요.
Chpater5. 소프트웨어 개발자 초기 시절 활용법
# 트레이드크래프트 : 신뢰성, 가용성, 동시성, 성능 효율
최소한 네가지 서로 다른 프로그래밍 언어와 네가지 서로 다른 데이터형식을 배운다
적어도 천명이 동시에 사용할 수 있을 정도의 SW를 개발한다
1테라바이트 규모의 데이터까지 스케일링 할 수 있는 SW를 개발한다
열 명 이상이 참여하는 프로젝트에서 일한다
지금은 질문에 답해줄 사람이 없는, 만들어진 5년 넘게 지난 코드를 확장하는 일을 한다
남이 만든 코드의 결함을 적어도 40개 이상 수정한다
UNICODE를 입력받고 두가지 이상의 언어로 사용자 출력을 하는 다국어 지원 코드를 작성한다
다음과 같은 상황에서의 성능 특성을 연구한다
- CPU 캐시 미스가 있는 상황과 업는상황에서 메모리로부터 데이터 가져오기
- 디스크에서 연속된 블록에서 읽어오는 경우와 무작위 입출력 탐색으로 읽어오기
- 큰 블록의 입출력과 작은 크기의 입출력
- 세 가지 많이 쓰이는 언어
(JAVA, C/C++, PHP등)웹, 서버, 시스템(코어)에 따라 다름 Javascript, Python, Java, Go, Rust
# 도메인 전문성
# 온고지신
# 리더로부터 배워라
# 네트워크 구축
# 어떤 사람이 될 것인가?
1)저렇게 일할 수 있다면 즐거울 것 같고, 내 커리어에서 가장 닮고 싶은 인물은 누구인가?
2)어떤 윗사람이 지금 하고 있는 만큼, 또는 그보다 더 잘할 수 있을 것같다는 생각이 들 만큼 나한테 맞는 역할은 어떤 역할인가?
# 멘토
멘토를 만들어야 한다. 내가 생각하기에 적합한 사람, 나에게 어느 정도 시간을 할애해 줄 수 있는 사람을 직접 찾아 나서자
멘토링이 잘 진행되고 있다면.. 그 사실에 대해 지속해서 감사를 표시하고, 보답할 방법을 찾아보자
직접 만나서, 또는 이메일이나 메신저를 통해 정지적으로 조언을 받을 수 있도록 멘토와 일정을 잡도록 하자. 미리 서로의 기대치를 맞추는게 중요하다
커리어의 시기에 따라 여러 다른 멘토가 필요하다. 초기에는 기술적인 사안, 업무방식 등. 경력을 쌓아감에 따라 커리어 지도, 비즈니스 전략에 대한 통찰.
# 재미와 성공
비밀실험 skunkworks 활동으로 기존과 전혀 다른 개념의 기술이나 프로젝트 시작해보기
특허가 될 만한 것 발명하기
업계 전문지에 기고할 글이나 백서, 기술 문서 쓰기
권위 있는 학회나 저널에 학술 논문 발표하기
책 쓰기
학회에서 발표하거나 운영위원회 참여
회사에서 이뤄지는 수백만 불 이상이 오가는 거래에 관여하기
업계의 향방이나 표준을 설정하는 데 도움을 줄 수 잇는 위원회 활동
더 많은 부하직원 멘토링 및 차세대 리더 양성
사내/사외 동료를 위한 사회적인 이벤트 조직하기
자기 회사 또는 지역SW업체 및 대학컨소시엄을 위한 저명인사 초청 강연 기획
자신이 참여한 기술에 대한 유튜브 제작 참여 등
Chapter6.필수 역량
#성장을 위한 기술 역량
기본기 : 핵심 언어, 운영체제, CPU, 객체지향 설계, GUI 프로그래밍
개발 역량 : 코딩 역량, 품질보증역량, 전략계획 역량
영역 전문성
트레이드크래프트
#프로그래밍 언어 : 잘 나가는 언어와 그렇지 않은 언어
2009년 기준, 자바 18.8%, C 13.4%, C++ 9.1%, .NET 7.4%, PHP 7.1%, 비주얼베이식 6.3%, 펄 3.6%, 파이썬 3.4%, C# 3.2%
C++, Rust, Go, Java, Python, Javascript, ...
#디버깅
자기확인형 코드와 계약에 의한 설계
코드점검과 코드검토
#성장역량
시간 사분명 : 중요성 x 긴급성
#조직 최상부의 비업무 역량
사회적 의식을 가지고 구설수나 정치적인 문제에 휘말리는 일을 피하는 편이다
전문가로서 적절한 대화를 나누는 데 능숙하다
작은/큰 그룹에서든 글을 통해서든 소통을 잘 할 줄 안다
시간을 효율적으로 활용한다
조직 내에서 인간관계를 잘 맺고 있다
중요한 문제를 정력적으로 공략하며, 위기의식을 가지고 행동한다
위기 상황에서도 상대적으로 침착함을 유지하고 문제에 적절하게 대응한다
#궁극의 비업무 역량 : 감성지능
1)자신을 이해하라
2)남들에 대한 감수성을 키우자
3)긍정적인 정서를 표출하자
4)절대 화를 밖으로 표출하지 않겠다고 맹세하자
5)남들의 전문가로서의 포부를 파악하자
6)동료가 한 일에 자주 고마움을 표현하라
7)남들에게 도움을 줘라
8)남들의 삶에 대해 진심 어린 관심과 배려를 보여라
9)주변에 있는 EI가 높은 사람을 연구하라
10)사람들과 잘 어울리자
#SW 분야에서 성공하는 방법에 대한 조언
자신의 능력을 확인하고 자신이 좋아하는 것을 알아내고 그 둘이 만나는 지점을 찾아서 열심히 노력하면 된다
Chapter7. SW R&D조직
#조직의 역할
CEO, CTO, Fellow
부사장 (개발담당, 마케팅담당, 영업담당)
엔지니어링 본부장/마케팅 본부장
수석 아키텍트 cheif architect
릴리스 관리자
2선 관리자 : 관리자를 관리하는 관리자, 50~200명 구성되는 조직 관리
아키텍트 architect
기술관리자 technical manager
프로그램 관리자 : 제품관리자와 프로젝트 관리작의 역할이 합쳐진 직책
부서관리자
연구스템프 멤버
제품 관리자/기획자 product manager
사용성 엔지니어 usability engineer
프로그래머
기능 검증 테스터 function verification tester
시스템 검증 테스터
기술 영업 (사업파트너, 재판매업자, 독립 벤더)/ 직접 영업(개인) / 채널 영업 (사업파트너, 재판매업자 등)
기술 전도사
#효과적인 경력을 쌓기 위한 세 가지 : 소통하라 소통하라 소통하라
#절대로 상사를 놀래키지 말라
#SW 분야에서 성공하는 방법에 대한 조언
큰물에서 노는 게 중요합니다. 기회가 있을 때마다 저보다 나은 사람과 일하려고 노력했어요.
반면에 팀 내에서 가장 훌룡한 사람이 되는 게 좋을 때도 있어요.
Chapter8. 경력을 말아먹는 법
#대인관계 문제
남을 화나게 하는 사람. 남을 헐뜯는 사람. 대책없이 불평만 하는 투덜이. 새로운 것에만 집착하는 사람. 조직운영에 문제가 있는 사람. 의사결정에 문제가 있는 사람
#팀 문제
팀워크에 문제가 있는 사람. 남의 공로를 인정하지 않는 사람
#생산성 문제
버그투성이 코드를 만드는 사람. 생산성이 낮은 사람. 일정을 자꾸 놓치는 사람. 엉뚱한 시간 사분면에 갇혀 사는 사람. 부수적인 일이나 비밀실험에 초점을 맞추는 사람.
#성장 문제
기술역량이 감퇴하는 사람. 자기 PR에만 열중하는 사람. 엉뚱한 쪽으로 자기 PB하는 사람. 중요하지 않은 역할에 매여있는 사람
Chapter9. 조직생활
#협력과 지원을 이끌어내기 위한 다섯가지 원칙
대가를 바라지 않은 호의를 베푼다
상부상조한다
상대방의 기를 살려준다
영광을 공유한다
직접 대면한다
#SW 분야에서 성공하는 방법에 대한 조언
그 분야에서 두각을 나타내기 위해 얼마나 헌신할 수 있는가가 중요.
최고가 될 수 있도록 매진하세요
Chapter10. SW 제안서 작성법
#핵심경쟁력
기술 노하우. 기반구조. 판매처. 신용
#발표의 기술
"연설할 시간이 10분이라면 일주일은 준비해야 한다. 하지만 연설할 시간이 한시간이라면 지금 당장에라도 할수있다"
(미국 28대 대통령, 우드로 윌슨)
백 마디 말보다 그림 한장이 낫고,
백장 그림보다 데모 하나가 낫다.
성공적인 발표를 위해서는 정보를 밀도 있고 간결하게 전달해야 한다
핵심적인 질문에 답할 수 있어야 한다
-무엇에 대한 발표인가?
-그게 왜 중요한가?
-비용이 얼마나 들 것인가?
-얼마를 아끼고 얼마나 많이 벌 수 있는가?
-성공 요인은 무엇이며 얼마나 믿을만한 것인가?
#어느 단계에서든 현실적인 단기 목표를 세우세요
저 멀리 떨어져 있는 원대한 꿈 같은 건 별 도움이 안됩니다. (역주: 동의하지 못함. 둘 다 중요)
Chapter11. 승진
# 실적이 신뢰를 만든다 - 그리고 신뢰가 전부다
# 목표 지향적인 경력관리
내가 가장 즐기는 기술 업무는 무엇인가?
내가 가장 즐기는 관리 업무는 무엇인가?
폭넓은 것과 깊은 것 중 어느 쪽을 선호하는가?
대부분 동료보다 내가 더 잘하는 것은 무엇인가?
남을 이끄는 것과 남을 따라가는 것 중 어느 쪽이 더 편하게 느껴지는가?
그룹에서 일하면서 그 그룹의 집합적인 재능을 활용하고 기여하는 쪽과 1인 과제에서처럼 하나에만 집중해서 효율적으로 일하는 쪽 가운데 어느 쪽이 더 편하게 느껴지는가?
자신을 정말 솔직하게 평가해 볼 때, 끊임없이 변화하는 환경에서 계속해서 공부할 수 있는 끈기와 흥미가 있는가?
어떤 일을 하든 지속적인 학습이 필요하지만, 분야마다 그 정도가 다르다
# SW 분야에서 성공하는 방법에 대한 조언 : 결국은 모든 게 연결되어 있어요
최대한 폭넓게 공부하세요
현재의 트렌드를 두루 파악하고, 빠르게 성장하고 있는 분야를 따라잡을 필요가 있습니다.
조직 내에서 생활한다는 것은 사람들이 자기가 하는 일을 진짜 믿을 수 있게 해야 해요
즉 내 아이디어를 온전히 설득시키는 것이죠
기술이 바뀌는 시기에 기회가 찾아오기 마련입니다.
자신을 차별화 시켜 보세요
Chapter12. 시간관리
# 목표 중심적인 시간관리
장기 목표를 달성하는 데 직접 연결되는 과제를 시간관리에서 쓰이는 공식용어.
핵심성공요인 CSF critical success factor
핵심은 자기 목표와 그 목표를 달성하기 위해 해야할 일을 제대로 이해하는 데 있다
목표의 우선순위를 매기고 목표를 달성하기 위해 꼭 필요한 일을 할 시간을 따로 마련하는 게 중요하다
# 과제 중심적인 시간관리
며칠 또는 몇 주안에 해야할 과제들을 이해하고
매일 그 우선순위를 설정하는 식으로 시간을 관리하는 방법
# 절박함 = 사전준비 + 끄기
Chapter13. 개발일정을 맞추는 방법
# SW 프로젝트가 지연되는 이유
1)범위 변경 문제
- 프로그램 복잡화 경향 : 기능이 확장될수록 명세, 설계, 코드, 테스트에 필요한 노동력도 늘어나며 일정도 위협을 받게 된다
2)인력 수준의 문제
3)지연된 프로젝트에 사람을 더 붙이면 오히려 더 느려지는 문제
4)개발팀의 목표가 불분명한 문제
- 엔지니어링팀이 스스로 무엇을, 언제까지, 왜 해야 하는지 분명히 이해하고 나면 프로젝트를 성공적으로 완수하게 될 확률이 훨씬 더 높아집니다.
- 애자일 기법과 공격적인 베타 프로그램을 결합해서 개발팀에 끊임없이 상황을 정리해 주고 피드백을 전달하는 것도 꽤 좋은 방법입니다
5)의존성 관리 : 기능별 예상치를 그냥 더해서 생기는 문제
- 라이트스톤의 복잡성원리
- 서로 교차하는 구성 요소에 대해 작동하는 여러기능을 동시에 개발하는 일은 각각의 일정을 전부 더한 것보다 더 오래 걸린다
6)잘못된 추정치 문제(비율주의)
- 1/3 명세서 작성과 설계, 1/6 프로그래밍, 1/4 기능 및 통합테스트, 1/4 시스템 테스트에 시간 할당
- 설계 및 명세서 작업 = 2 x 코딩 추정치 / 기능 및 통합테스트 = 1.5 x 코딩 추정치 / 시스템 테스트 = 1.5 x 코딩 추정치
7)공격적인 추정치 문제
- 사실 거짓말이나 부정확한 정보는 아니다. 그냥 매우 낙관적인 수치일 뿐이다.
8)"난 임계 경로에 들어있지 않아"라고 생각하는 문제
- SW 개발에서 평균 기능은 가장 많이 지연된 기능이 마무리 될때까지 계속해서 늘어난다
9)SW 엔지니어링 개념을 말아먹는 문제
- 달성해야 할 요건과 목표를 확인하고 검증하는 절차가 반드시 필요하다
10)직원들이 해야 하는 다른 일을 고려하지 않는 문제
- 개발자나 테스터는 업무 시간의 약 25%를 다음에 출시될 제품의 설계, 개발, 테스트와는 무관한 일에 쓸 수밖에 없다
- 이미 25%는 시간이 지연된 채로 프로젝트를 시작하는 셈
11)바람의 변화
- "일찍, 자주 내놓는다"는 원칙을 지키는 편
#이미 일정이 늦어졌다면 어떻게 해야 할까?
1)기능 줄이기
2)기능 쪼개기
3)재협상
#생각하는 방법에도 여러 가지가 있어요
다른 분야에 관한 지식이 SW 공학자로 살아가는 데 어떤식으로 도움이 되나요?
1)공학 분야에서 생각하는 방법에도 여러 가지가 있다는 점
2)자동화할 수 있는 범위에 대한 지식을 확대하는 데 있음
Chapter14. 균형의 기술
#일과 삶의 균형
시간을 더 효율적으로 쓸 수 있다거나 잠을 줄일 수 있다는 가정은 금물이다
나를 위해 더 많은 시간을 쓰려면 결국 일에 쓰는 시간은 줄일 수 밖에 없다
가능하면 더 많은 일을 남에게 위임하자
오랜 시간에 걸쳐서 해야 하는 작업에 드는 시간을 더 늘려보자. 모든 일을 동시에 끝내야 하는 것은 아니다
정보를 한꺼번에 묶어서 처리하자
회의도 수시로 하시 말고 정해진 시간대에 몰아서 하자
책임을 줄여보자
경력을 쌓아가는 데 있어서, 업무 만족도를 높이는 데 있어서 별 도움이 되지 않은 일을 찾아보고 없애버리자.
#자기보다 똑똑한 사람을 뽑아야 합니다
Chapter15. SW 프로젝트 관리의 비밀
# SW 관리의 기본
팀을 꾸리는 법
요건을 수집하고 프로젝트 계획을 수립하는 법
달성해야 할 단계를 설정하는 법
소스 코드 및 문서 정리 방안 및 개발 절차를 수립하는 법
위험을 관리하고 추적하는 법
직원을 관리하는 법
일정과 목표 달성에 필요한 의존성을 관리하는 법
단위 테스트, 기능 검증, 합격 판정, 시스템 검증, 성능 품질 보장을 위한 품질 보장 절차를 수립하는 법
알파 및 베타 버전과 같은 조기 출시 운영법
마케팅이나 홍보 등을 위한 보조자료를 준비하는 법
결함을 추적, 감시, 전망 및 해결하는 법
패키징 및 출시 본을 처리하는 법
인과분석 수행법
# 가치 측정의 가치
1)성공의 정량화
2)차기 제품 계획에 대한 근거자료
3)마케팅에 대한 파급효과
4)팀의 사기 증진
# 개발 성숙도 평가
1) 반복개발법 iterative development : SW를 기능 단계 단위로 개발하는 것을 강조하는 SW 개발 방법론. 한 단계에서 일단 완벽하게 작동해야만 다음 단계로 넘어간다. 워터폴 절차에서 반복개발법으로, 그러고 나서 애자일 절차로 발전해가는 모습을 흔히 볼 수 있다
2) 스크럼 scrum : 고도로 효율적이고 협력적으로 일할 수 있도록 조직화하기 위한 전략
정기적으로 정해진 시간동안 회의/몇주 정도 되는 스프린트 단위로 일을 진행
데모와 사용자의 초기 피드백이 중요
3) 애자일 개발 절차 agile development process : 일일 스크럼, 다부서 간 팀 구성(개발, 시험, 사용성, 베타 및 패키징, 마케팅 등), 매 반복단위마다 완전한 시험 사이클 수행 등 특징
4) XP, 익스트림 프로그래밍 eXtreme programming : 애자일 개발 절차의 변동, 페어 프로그래밍, 테스트 주도 개발, 현장고객 오견, 설계리팩토링, 철저한 코드 검토 등
5) 린 개발법 Lean development : 반복 개발법과 밀접하게 연관된 개발법
"최대한 늦게 결정한다"는 원칙으로 정리. 더많은 것을 알고 이해하고 있는 개발사이클 후반에 의사 결정을 내리는 쪽을 선호
제품을 시장에 최대한 빨리 내놓는 것 강조
"크게 생각하고 작게 행동하고 빨리 실패하면 신속하게 배울 수 있다"
6) 폭포수 개발 절차 waterfall development process : 개발이라는 게 요건에서 명세서, 설계, 코드, 단위 시험, 기능검증 시험, 통합시험, 합격판정시험, 베타 테스트,
시스템 검증시험, 제품출시로 선형적으로 쭉 이어져서 진행된다고 생각하는 전통적인 SW 개발 모델
7) 래피드 프로토타이핑 rapid prototyping : 복잡한 SW설계를 진행하기 전에는 반드시 강점과 약점을 미리 이해할 수 있도록
개념검증용 프로토타입을 만들어야 한다는 아이디어를 바탕으로 만들어진 방법론. 폭포수 개발 모델의 초기 단계에서 종종 쓰이곤 함
# 테스트와 품질
SW 프로젝트 관리는 사람, 절차, 품질을 관리하는 일
최고 품질의 코드를 개발하기 위해 설계 및 명세서 검토, 코드 검토, 형식적인 인라인(런타임) 확인 테스트, 측정 코드, 철저한 테스트 중 어느 하나도 소홀히 해서는 안된다
Chapter16. 빅리그 : 외야 안타에서 홈런까지
# 리더십 스타일
강압형 "시키는 대로 해"
권위형 "함께 가자"
친화형 "사람이 먼저"
민주형 "어떻게 생각해?"
페이스메이커형 "지금 당장 나만큼 해 봐"
감독형 "이거 해봐"
# 권위적인 사람이 아니라 권위자가 되자
진정 남들로부터 존경받기 위해서는 주변 사람들보다 더욱 심오하고 설득력 있는 통찰과 리더의 자질이 필요하다
# 일단 저지르고 질문은 나중에 받자
1) 규칙을 깨고 싶다면 먼저 규칙을 잘 알아야 한다
2) 공식적인 승인을 받기 전에 일을 해내려면 스스로 하거나 그 계획에 시간을 낼 수 있는 누군가가 필요하다
3) 위험이 클수록 조용하게 진행해야 한다
4) 중도를 지키자
# 팀을 꾸리고 최고의 인재를 확보하는 방법 : 뛰어난 프로그래머 5명이 보통 프로그래머 50명보다 낫다
후보자 유인
최고의 선택 : 기본 필터링
최고의 사람 모집하기 : 번뜩이는 천재성을 발견하자 / 성격과 궁합 / 역량을 시험할 수 있는 질문을 던지자
최고의 사람을 행복하게 해 주는 법
팀 구성
Chapter17. SW 혁신 리더십
# 왜 혁신인가?
2005년 맥킨지 보고서, 사업 성공을 위해 필요한 능력
-52% 혁신할 수 있는 능력
-22% 최고의 인재를 배치할 수 있는 능력
-15% 글로벌 조직을 관리할 수 있는 능력
# 성공하는 SW혁신
지금 주류를 차지하고 있는 것에 비해 일부 또는 대부분 경우에 사용자가 선호할 만한 것
내가 속한 조직 또는 고객 조직의 조직 효율성을 분명하게 개선 할 수 있는 것
제품 신뢰성을 분명하게 개선할 수 있는 것
제품 서비스성을 분명하게 개선할 수 있는 것
고객에게 잘 팔릴 만한 것
우리 회사 임원들이 큰 관심을 두고 있는 문제를 해결할 수 있는 것
내 윗선에서 누군가가 그 아이디어가 좋다고 느껴서 사람들이 그것과 관련된 일을 하는 것을 승인해줄 만한 일
# 혁신가의 12가지 원칙 : 혁신을 성공적으로 키워내는 방법
1)주변에 최대한 뛰어난 사람들만 골라서 배치하라
2)혁신에 보상하라
3)영역주의를 없애라
팀으로 일한다는 개념을 제대로 실현할 수 있는 팀을 꾸리는 것이 가장 중요
4)반복하라
매번 반복할 때마다 더 나아지는 데 꼭 필요한 제대로 된 피드백을 받는 일
5) 해결책이 아니라 문제를 안겨줘라
6) 데이터는 중립적이다
7) 주어진 상황 내에서 문제를 해결하라
창의력에서 중요한 것 가운데 하나가 바로 제약조건(시간적 금전적 제약)
8) 친화도를 높여라
9) "저것은 남의 것" 증후군에 걸리지 않도록 주의하라
10) 다른 분야에 대한 지식을 쌓아라
11) 현재 최신 기술을 이해하라
12) 일하는 방법에 있어서 사용자와 시장에 휘둘리지 않는다
시장은 혁신과 바로 연결되지 않는다
Chapter18. 빅리그 : 거물에서 선지자로
# 특허
새로운 것
유용한 것
당연하지 않은 것
# 출판물
내가 아는 것을 쓴다. 질에 초점을 맞춘다. 나라면 이걸 읽을지 자문해 본다. 가능하면 다른 공저자들과 함께 일하자. 문체도 중요하다. 글 써서 부자가 될 생각은 금물이다
# 발표
청중을 이해하라. 스타일도 청중에 맞춰라. 알아듣기 좋게, 적당한 빠르기로 발표하라. 청중을 사로잡아라. 손동작을 절제하라. 웃어라. 내가 주인공이 아니다. 그래서? 목표를 가지고 해야 한다
# 소셜 네트워킹
모든 관계가 평등한 것은 아니다. 정보 배포 범위를 확대하라. 소셜 네트워킹을 활용하자. 다른 사람들의 소통에도 도움을 주자
Chapter19. 지금 알고 있는 걸 그때도 알았더라면...
# 상사 : 어디에서 일할지 결정하기 전에 윗사람이 어떤 사람인지 어떻게 미리 알 수 있을까?
관리자는 조직에서 필요로 하는 것을 충족시키면서 직원들이 필요로 하는 것도 만족시켜야 하는 두 가지 역할을 수행하는 사람
-관리자를 만나 본다 : 무엇을 중요하게 여기는지, 전략적인 사고력을 가졌는지, 직원이 원하는 것을 잘 알고 있는지 파악해보자
어떤 역할을 맡게 될까요? 다음 프로젝트가 고객에게 어떤 도움이 될까요? 제가 이 역할을 통해 어떻게 성장할 수 있을까요? 팀에서 제일 훌룡한 사람이 누군가요? 팀 이직률이 어느정도이고 왜 그런가요?
-직원들에게 물어본다 : 관리자가 실질적으로 프로젝트를 관리하고 전략과 혁신을 주도하고 조직 내 장애물을 극복하는 데 도움을 주는지? 직원에게 괜찮은 기회를 제공하는지?
일을 잘하면 괜찮게 평가하고 보상하는지?
-관리자의 경력을 확인해 본다 : 회사 측에 정중하면서도 야무지게 질물
# 동료
기존 직원 : 어떤 사람들이 일하고 있는 확인, 같이 즐겁게 일할 만한 사람인지 생각해보자
팀 성과 : 그동안 성과가 어땠는지 알아보자
인력 선발 절차
# 상사 관리하기
상사에게 모든 걸 알린다
심판에 맞춰서 일한다 : 상사가 무엇을 중요하게 여기는지(생산성 vs 창의성), 규칙에 대해 얼마나 까다로운지, 상사가 중요시하는 가치와 규칙을 이해
업무량을 적절히 조절하자 : 언제나 중요한 일을 하면서 바쁘게 지내자
팀에 대한 건설적인 건의를 하자
전문가로서의 포부를 드러내라
승진에 필요한 게 무엇인지 파악한다 : 1년에 한두번 정도는 다음 승진을 위해 어떤 게 필요한지 상사와 상담하자
# 준비될 때까지 기다리면 너무 늦다
항상 내 한계를 뛰어넘고 더 멀리 뻗어 나가기 위한 준비를 해야만 한다
# SaaS, 세일즈포스닷컴 마크 베니오프
Behind the Cloud (2009), 세일즈포스닷컴을 키워낸 전략 111가지
끊임없이 고객의 목소리에 귀를 기울입니다.
경험과 인간관계가 정말 중요하다고 봐요
한번 만들어 두면 어디서든 쓸 수 있어야 한다"
저는 항상 접속된 상태를 유지하려고 노력합니다.
중요한 일만 하라
Chapter20. 홀로서기 : 소프트웨어 스타트업
# 사업계획서와 피치
엘리베이터 피치, 60초 스피치
요약발표, 30~45분, 그래픽 중심 차트 5~10장
외부용 사업계획서, 공식 문서형태의 자료, 20장 전후 분량
내부 사업계획서
# R&D 착수
오픈소스를 적극 활용하자
클라우드 컴퓨티 서비스를 활용하자
원격근무를 활용하자
# 골을 넘어서
1) 교두보 역할을 할 고객을 확보하고, 그 고객에게 집중하라. 그 고객이 바로 성공 사례를 만들어주고 제품을 추천해 줄 사람들이다.
2) 데모에 최선을 다한다
3) 세계로 뻗어 갈 수 있는 인터넷을 적극 활용하라
4) 큰 기업처럼 행동하라
# 인수합병
분야에서의 선도성, 기회강화, 상호보완, 신사업 진입, 역량 확보
Chapter21. 보상
# 구직시 고려사항
1) 금전적 이득
월급
보너스
스톡 옵션
스톡 그랜트
보험 : 생명, 의료, 치과, 안과
차량지원
헬스케어
해외출장
퇴직연금
2) 비금전적 이득
일 만족도
회사 장기 안정성
회사 과거 경력
회사의 명상 및 기반
전문가로서의 성장 기회
승진 기회
경영진의 자질
업무환경 (업무강도 포함)
근무 유연성
유능한 동료
Chapter22. 성공하기
#SW분야 성공하는 사람들의 공통점
목표지향적, 높은 감성지능, 엄청나게 똑똑하다, 자기분야의 전문성, 놀랄 만큼 집요하면서도 예의는 갖출 줄 안다