망쳐버린 소프트웨어 프로젝트와 무용담
- "우리가 만든 소프트웨어는 정말 좋았는데, 시장이 아직 무르익지 않았어. 너무 시대를 앞써갔어"
진실 : 소비자 요구를 제대로 파악하지 못했다
- "소프트웨어는 참 잘 만들었는데 영업,판매가 잘 안되더라고요"
진실 : 아무도 글너 소프트웨어를 원하지 않았다.
- "제품은 끝내줬는데 제대로 좀 해보려는 마당에서 윗선에서 잘라버렸지"
진실 : 수익을 창출하기까지 너무 오래 걸렸다.
자신이 사랑하는 일을 하라
- 행복을 찾으세요.
- 배울수 있는건 뭐든 배우세요. 언젠가, 어딘가에서, 어떤 식으로든 자기 일에도 도움이 될겁니다.
- 새로운 것을 시도해 보세요. 하지만 옛것을 지키세요
- 최고의 사람과 함께 일하세요
- 조언자를 찾으세요. 자신이 존경하는 사람으로부터 배우세요.
- 자기 팀, 자기 회사, 자기 분야, 자기 이웃에게 보답하세요.
- 글쓰기와 코딩을 꾸준이 연습하세요. 동료의 일을 검토해 주고, 자신의 일도 동료에게 검토 받으세요.
- 자기 회사, 팀, 동료 등에게 멋진 사람이 되세요.
- 좋은 책을 읽으세요.
소프트웨어 회사를 살펴볼때는 다음 열가지를 생각해보자.
- 전문적인 고품질 시스템을 만든 경험이 있는 회사인가?
- 뭔가 배울만한, 진정 재능을 갖춘 사람이 있는 회사인가?
- 내가 들어갈 자리가 흥미로운 자리이고, 장기적인 성장 가능성을 가진 자리인가?
- 성공하기 위한 필요조건을 제대로 이해하고 실제 성공 실적을 가진 상식에 맞게 행동하는 경영진이 있는 회사인가?
- 자기가 생산하는 제품에 대한 비전을 분명하게 가지고 있는 회사인가?
- 독립 연구 조직이 있는가?
- 어떻게 혁신하는 회사인가? 얼마나 근원적인 혁신을 이뤄낸 회사인가?
- 쾌적하고 유연한 업무 환경을 갖추고 있는가?
- 회사가 안정적인가? 10년 후에도 존속한 회사인가?
- 업계 표준에 걸맞은 수준의 급여를 지급하는가?
소프트웨어 전문가가 되기 위해 5년안에 익혀야할 기술들
- 최소한 네가지 서로 다른 프로그램이 언어와 네가지 서로 다른 데이터 형식(JPEG, XML, 텍스트, MPEG등)을 배운다.
- 적어도 천명이 동시에 사용할 수 있는 소프트웨어를 개발한다.
- 1테라규모의 데이터까지 스케일링 할수있는 소프트웨어를 개발한다.
- 열명 이상이 참여하는 프로젝트에서 이리한다.
- 지금은 질문에 대답해 줄 사람이 없는 만들어진지 5년 이상의 지난 코드를 확장하는 일을 한다.
- 남이 만든 코드의 결함을 적어도 40개 이상 수정한다.
- UNICODE를 입력받고 두가지 이상의 언어로 사용자 출력을 하는 다국어 지원 코드를 작성한다.
- CPU 캐시 미스가 있는 상황과 없는 상황에서 메모리로부터 데이터 가져오기
- 디스크에서 연속된 블록에서 읽어오는 경우와 무작위 입출력 탐색으로 읽어오기
멘토
- 멘토를 만들어야 한다. 누군가가 나에게 내 커리어를 챙겨주기 위해 많은 시간과 노력을 할애할 만한 현자를 붙여줄 것이라고 기대하지 말자. 내가 생각하기에 적합한 사람, 나에게 어느정도 시간을 할애해 줄수 있는 사람을 직접 찾아나서자.
- 멘토링이 잘 진행되고 있다면 멘토는 나를 위해 상당한 시간과 에너지를 쓸 수밖에 없다. 특히 팀에 들어온지 얼마 안 됐다면 더욱 그렇다. 그 사실에 대해 지속해서 감사를 표기하고, 보답할 방법을 찾아보자
- 직접 만나서, 또는 이메일이나 메신저를 통해 정기적으로 조언을 받을 수 있도록 멘토와 일정을 잡도록 하자. 미리 서로의 기대치를 맞추는게 중요하다. 나는 매일 수많은 질문을 던지는데 멘토는 석달에 한번 정도의 형식적인 회의를 기대했다면 좌절과 서운한 마음만 남는다.
- 커리어의 시기에 따라 여러 다른 여러 다른 멘토가 필요하다. 초기에는 기술적인 사안을 지도해 주거나 새로 들어간 그룹에서의 업무 방식을 가르쳐 줄수 있는 멘토가 필요하다. 경력을 쌓아감에 따라 커리어를 지도해줄 수 있는 멘토나 비지니스 전략에 대한 통찰을 제공해 줄 수 있는 멘토가 필요하다.
즐길수 있는것들을 찾자
- 비밀실험 활동으로 기존과 전혀 다른 개념의 기술이나 프로젝트 시작해 보기
- 특허가 될 만한 것 발명하기
- 업계 전문지에 기고할 글이나 백서, 기술 문서쓰기,
- 권위 있는 학회나 저널에 학술 논문 발표하기
- 책 쓰기
- 근사한 곳에서 열리는 학회나 운영 위원회 참여하기, 해변을 거닐거나 유적지를 관광할 만한 짬을 내자
- 회사에서 이뤄지는 수백만불 이상이 오가는 거래에 관여하기
- 업계의 향방이나 표준을 설정하는 데 도움을 줄 수 있는 위원회 활동
- 더 많은 부하 직원 멘토링 및 차세대 리더 양성
- 사내 또는 사외의 동료를 위한 사회적인 이벤트 조직
- 자기 회사 또는 지역 소프트웨어 업체 및 대학 컨소시엄을 위한 저명인사 초청 강연 기획
업무 역량과 업무 외 역량
1. 어떤 역량이 필요한 상황이라면 이미 그것을 배우기에는 늦었다고 할 수 있다.
2. 성공의 비결 가운데 하나가 바로 자신에게 주어진 업무 수준을 뛰어 넘는 역량을 미리 계발하여 더 나은 성과를 냄으로써 평범한 사람들과는 다른 모습을 보여주는것이기 때문이다. 당장 필요하지 않은 것들을 포함하여 자신의 역량을 계발하기 위한 시간을 꾸준히 마련하자
자기확인형 코드와 계약에 의한 설계 (TDD)
assertion을 이용하면 코드에서 상태데이터, 입력 및 출력 변수의 범위, 중간결과 및 리턴 코드 같이 코드의 여러 조건이 정상적인 범위 안에서 있는지 확인함으로써 코드 내에서 스스로 테스트 작업을 할 수 있다. 프로그램 실행시에 자체검증이 가능하다.
성장역량
어느날 모리스는 숲 속을 거닐다가 커다란 나무를 열심히 베고 있는 나무꾼을 발견했다. 목수가 워낙 열심히 일하고 있던 터라 그는 멀찌감치 서서 일이 어떻게 돌아가고 있는지 살펴보기로 했다. 몇 분이 지난 뒤에도 그 목수는 온 힘을 다해 나무를 열심히 베고 있었다. 모리스는 그 목수가 지난 며칠 동안 워낙 열심히 일하다 보니 톱날이 무뎌졌다는 것을 발견했다. 그걸 애기해 주면 도움이 될 것 같아서 그는 목수에게 다가갔다.
"안녕하세요. 지금 쓰고 계시는 톱의 날이 무뎌진 것 같아요. 잠시 일을 멈추고 톱날을 갈면 일을 훨씬 더 빨리 끝낼 수 있지 않을까요?"
그러나 목수는 이렇게 답했다.
"톱날 갈려고 일을 중단하라고요? 지금 내가 얼마나 바쁜지 안보여요? 시간 없어요"
- 개인적인 입장에서 그리고 전문가적인 견지에서의 상대적인 중요성을 파악하고 정기적으로 시간을 투자하기 위한 전략을 짠다
- 일정표에서 중요하지 않은 범주에 속하는 활동은 적당히 미루거나 건너뛴다. 중요성이 낮은 두 사분면에 쓰는 시간을 줄일 수록 중요하지만 급하지 않은 일에 쓰는 시간을 더 많이 확보 할수 있다.
소프트웨어 분야에서 성공하는 방법에 대한 조언
컴퓨터가 어떤 식으로 작동하는지 배워야 한다고 생각해요. 프로그래머중에 컴퓨터가 어떤 식으로 작동하지는지도 모르는 사람들이 있습니다. 한번은 어떤 학생이 "엔터키를 누르면 어떤 일이 일어나나요?"라고 질문을 했습니다. 잠시 생각을 했습니다. 컴퓨터안에서는 그 순간 온갖 일이 일어나니까, 잘 생각해보면 어려운 질문입니다.
효과적인 경력을 쌓기 위한 세가지
- 소통하라
- 소통하라
- 소통하라
자신이 하는 일을 사람들에게 꾸준히 알려주자. 기술적인 관점에서 볼때는 일이 겹치거나 같은 일을 두번 하는 경우를 막기 위해 알아야 할 필요가 있다. 자기 경력 면에서 보자면, 무슨 일을 했는지 남에게 알리지 않고는 인정 받을 수 없기 때문이다.
남들이 자발적으로 읙녀을 주지 않는다면 직접 물어라. 사람들은 대부분 스스로 나서서 의견이나 생각을 말하지 않는다.
어느 조직을 보더라도 소통 능력이 훌륭하지 못하면 높은 자리에 올라가지 못한다. 소통 능력은 간단하게 말하면 말과 글, 이메일, 전화, 기술 분야의 글쓰기 등에 있어서 분명하고 효과적으로 소통할 수 있는가를 의미하는것이다. 메시지가 얼마나 단순한지, 얼마나 자주 전달되는지에 따라 결정된다. 그냥 그렇게 하지 않을 뿐이다.
대책없이 불평만 하는 투덜이
사람들은 보통 건설적이고 의도가 선한 논평은 일을 진행하는데 도움이 된다고 느끼지만 자주 불평을 제기하면 동료나 상사에게 짜증을 일으키는 존재가 될수도 있다. 어떤 조직이든 풀어야 할 문제는 잔뜩있고, 자기 생각을 내세울 방법은 많이 있다. 불평처럼 들릴 만한 주장을 제기할때는 이렇게 하자.
- 문제점을 지적할 때는 해결책이 적어도 하나쯤은 있어야 한다. 해결책을 제안하면 투덜이가 아니라 해결사가 된다
- 해결책과 관현한 실천사항을 이행하는데 스스로가 나서서 도와줄 준비가 되어 있어야 한다.
아이디어도 없고 실제로 일을 할 의지도 없이 불평만 하는 사람으로 여겨지면 살아남을수 없다.
생산성 문제
- 버그 투성이 코드를 만드는 사람
- 생산성이 낮은 사람
- 일정을 자꾸 놓치는 사람
- 엉뚱한 시간 사분명에 갇혀 사는 사람
- 부수적인 일이나 비밀실험에 초점을 맞추는 사람
목표 지향적인 경력관리
경력을 쌓기 위해서는 상당한 시간과 노력이 필요하지만 내가 어디로 가고 싶은지 분명하게 안다면 최단 경로를 통해 훨씬 성공적으로 움직일수 있다. 너무 구체적일 필요는 없다. 엔지니어링 책임자가 되겠다는 정도로만 목표를 잡아도 경력을 계획하는데 있어서 초점을 분명히 잡을수 있기 때문이다.
같은 수준의 재능, 학력을 가진 사람이지만 궁극적으로 CTO가 되겠다는 목표가 없는 사람의 경력은 계속 자리를 옮기다 보면 기술의 깊이가 얕아지게 마련이고, 자기 경력에서 내세울만한 핵심제품에 대한 전문성도 약해진다. 2선 관리자나 지원 관리자 같은 자리는 CTO가 되겠다는 목표에 별 도움 되지 않는다. 목표가 없다보니, 특허나 논문, 표준이나 업계의 디러십 같이 기술적인 능력을 보여줄 포트폴리오가 미진하다. 계획없이 다양한 분야를 떠돌아다니는 경력을 쌓았을 뿐이다.
자기 목표를 분명히 파악하고 집중하는건 본인이 스스로 할 수밖에 없는 일이다. 다른 사람이 내가 무엇을 원하는지, 무엇을 즐기는지, 내 목표가 무엇이고 무엇을 염원하는지 알려줄 수 없는 노릇이기 때문이다. 목표를 스스로 깨달으면 목표에서 벗어나서 엉뚱한 데로 흘러갈 만한 기회는 과감하게 제쳐버릴 수 있기 때문에 경력을 더 현명하게 관리할 수 있다.
무엇을 목표로 삼아야 할지 모르겠다면
- 내가 가장 즐기는 기술 업무는 무엇인가?
- 내가 가장 즐기는 관리 업무는 무엇인가?
- 폭 넓은 것과 깊은 것 중 어느쪽을 선호하는가?
- 대부분 동료보다 내가 더 잘하는것은 무엇인가?
- 남을 이끄는것과 남을 따라가는것중 어느쪽이 더 편하게 느껴지는가?
- 그룹으로 일하면서 그 그룹의 집합적인 재능을 활용하고, 기여하는 쪽과 1인 과제 처럼 하나에만 집중해서 효율적으로 일하는쪽, 가운데 어느쪽이 편한가?
- 자신을 정말 솔직하게 평가해볼때, 끊임없이 변화하는 환경에서 계속해서 공부할수 있는 끈기와 흥미가 있는가? 어떤 일을 하든 지속적인 학습이 필요하지만, 분야마다 그 정도가 다르다
적어도 1년에 한번은 상사와 경력과 관련하여 논의하자
일과 삶의 균형
- 시간을 더 효율적으로 쓸수 있다거나 잠을 줄일수 있다는 가정은 금물이다.
- 나를 위해 더 많은 시간을 쓰려면 결국 일에 쓰는 시간을 줄일 수 밖에 없다. 일하는 시간을 어느 수준 밑으로 끌어내리기 위해 업무에 대한 압박감을 어떻게 줄일지를 고민하자.
- 가능하면 더 많은 일을 남에게 위임하자. 기술 분야의 리더든 관리자든 리더 역할을 하고 있다면 어차피 업무 위임이 자기가 하는 주요 업무 가운데 하나이며, 차세대 리더를 키우는데 도움이 된다.
- 오랜 시간에 걸쳐서 해야 하는 작업에 드는 시간을 더 늘려보자. 모든 일을 동시에 끝내야 하는 것은 아니다.
- 정보를 한꺼번에 묶어서 처리하자.
- 회의도 수시로 하지 말고 정해진 시간대에 몰아서 하자
- 책임을 줄여보자
- 경력을 쌓아가는데 있어서, 업무 만족도를 높이는데 있어서 별 도움이 되지 않은 일을 찾아보고 없애버리자.
준비 될 때까지 기다리면 너무 늦다.
'뇌세포덩어리"" > 책' 카테고리의 다른 글
역행자 (0) | 2022.12.11 |
---|---|
실리콘 벨리를 그리다 (0) | 2019.07.09 |
소프트웨어 객체의 생애주기 (0) | 2015.06.21 |
까칠하게 힐링 (0) | 2015.06.08 |
나무를 심은 사람 (0) | 2014.09.12 |