프로그래머로 사는 법 Ch6

13
Ch.6 필수 역량 프로그래머로 사는 chois79 121125일요일

Transcript of 프로그래머로 사는 법 Ch6

Page 1: 프로그래머로 사는 법 Ch6

Ch.6 필수 역량프로그래머로 사는 법

chois79

12년 11월 25일 일요일

Page 2: 프로그래머로 사는 법 Ch6

업무 역량과 업무 외 역량

• 업무 역량

• 요건 계획, 소프트웨어 설계, 프로그래밍, 디버깅, 소프트웨어 공학, 운영체제등 학교에서 배우는 기술적인 역량

• 경력 초창기에는 기술과 관련된 업무 역량이 중요

• 업무 외 역량

• 팀워크, 의사소통, 강연 능력, 조직 예절, 협상력, 멘토링, 채용, 관리, 리더십 등

• 위로 올라 갈수록 업무 외 역량이 더 중요해짐

• 자신이 나아갈 방향을 파악하고, 적당한 시간을 투자하여 역량을 계발하는 것이 필요

12년 11월 25일 일요일

Page 3: 프로그래머로 사는 법 Ch6

성장을 위한 기술 역량

역량 설명

기본기 학교에서 배우는 핵심적인 개발 기술, 업계 분위기가 계속해서 달라지기 때문에 꾸준한 개선이 필요 ( 프로그래밍 언어, 알고리즘 등)

개발 역량 코딩 역량, 품질 보증 역량, 전략 계획 역량으로 나누어짐

영역 전문성 도메인 지식

트레이드크래프트 개발 방법론

12년 11월 25일 일요일

Page 4: 프로그래머로 사는 법 Ch6

• 프로그래머라면 어떤 언어와 패러다임이 주목받고 있는지 꾸준히 관심을 가져야함

• 잘 나가는 언어를 알아내는 방법

• 각 언어가 인터넷에서 거론되는 빈도를 확인하는 방법이 유용

• 현재 패러다임에서 저자의 생각

• 프로그래밍 언어의 동향을 따라 잡으려면 상위 5개 언어를 주시하면서 XML에도 관심을 기울이고, OOD/OOP 역량도 갖춰야만 한다.

프로그래밍 언어: 잘나가는 언어와 그렇지 않은 언어

ptg

88 MAKING IT BIG IN SOFTWARE

higher-level user-friendly languages come and go more frequently over time than the mainstay languages. Even so, you always need to have one of these in your back pocket for building tools, scripts, and small applications.

Also very significant in the data is the relative use of object-oriented (OO) languages. Java and C++ are two of the top three languages. PHP includes OO support as well. If you want to stay current on programming languages, you really ought to stay abreast of the top five languages shown, know your way around XML, and keep your OOD/OOP skills up-to-snuff.

18.8%

9.1%

6.3%

2.6% 2.4%1.9% 1.7%1.0% 0.8% 0.8% 0.8% 0.3% 0.2%

6.7%

0%

2%

4%

6%

8%

10%

12%

14%

16%

18%

20%

Java C

C++

.NET PH

P(V

isual)

Bas

icPe

rlPy

thon C# SQ

LEc

lipse

Java

Scrip

tHT

ML

Ruby

XML

Delph

iSA

SPL

/SQL

COBO

LPa

scal D

AJAX

J2EE CS

SM

isc. la

ngua

ges

Programming Language

Perc

enta

ge o

f Tot

al

13.4%

7.4% 7.1%

3.6% 3.4% 3.2% 3.1%

1.6% 1.5% 1.2% 1.1%

FIGURE 6.1 Internet frequency of the top 24 programming languages and platforms

Debugging

Programming is an absolutely humbling experience because there is just no bluffing your way around busted code. Every typo and snippet of broken syn-tax will cause a program to fail. If you’re lucky, your errors will be of the sim-plest type, those that the language parser or compiler finds. Most of us, even the best of us, will introduce a dozen syntactical errors in our code for every few hundred that we write. I’ve often wondered whether this rate of error happens in other fields but is masked by the bravado and rationalization of the practitioners in a way that the brutal mechanical honesty of computers

From the Library of Wow! eBook

12년 11월 25일 일요일

Page 5: 프로그래머로 사는 법 Ch6

디버깅

• 디버깅은 핵심 역량임에도 정규 교육과정에서 다뤄지지 않는다.

• 대부분의 프로그래머는 디버거나 값 추적 기능을 사용

• 문제점을 찾아내기 위한 더 나은 전략

• 디버거를 띄우고 싶은 욕망을 억제하는 방법

• 자기확인형 코드와 계약에 의한 설계

• 코드 점검

12년 11월 25일 일요일

Page 6: 프로그래머로 사는 법 Ch6

자기확인형 코드와 계약에 의한 설계

• 확인 (Assertion) 사용

• 여러 조건이 정상적인 범위 안에 있는지 확인함으로써 코드 내에서 스스로 테스트 작업을 수행

• 실행 시에 자체 검증이 가능

• 보통 확인은 출시용 코드에서는 돌아가지 않는 매크로로 구현

• 계약에 의한 설계 (Bertrand Meyer)

• 함수의 입력 값과 출력 값이 함수의 해당 규격에 맞는지 점검

• 시작 부분과 마무리 부분에 확인 구분을 많이 집어 넣는 방법은 일관성 있는 프로그램 방식으로 자연스럽게 연결됨

12년 11월 25일 일요일

Page 7: 프로그래머로 사는 법 Ch6

코드 점검과 코드 검토

• 직접 소스코드를 일일이 검토하게 하는 방식은 결점을 잡아내는데 있어서 가장 효율적

• 설계 검토

• 시스템상의 문제를 제거하는데 있어서 가장 효과적인 절차

• 코딩 문제를 찾아내는 데는 별 위력을 발휘하지 못함

• 코드 검사를 통해 코드상의 결점을 대부분(최대 90%) 제거할 수 있다 - 마이클 페이건

• 코드 검사의 범주

• 검토 담당자 그룹에 의한 형식을 갖춘 코드 검토

• 작성자 외에 추가 한명의 프로그래머에 의한 형식을 갖추지 않은 코드 검토

• 개인에 의한 점검. 본인이 직접 만든 코드의 논리 흐름을 따라가면서 코드를 점검

12년 11월 25일 일요일

Page 8: 프로그래머로 사는 법 Ch6

생존을 위한 규격, 설계 및 코드 검토

• 업무에 관한 기술 검토

• 제품 규격, 설계 규격, 테스트 계획, 제품용 코드, 테스트용 코드 등.

• 소규모의 검토팀이 투입되어 모든 일을 샅샅이 파헤치면서 문제점을 발견

• 프로그래머에게 곤혹스러운 일이 될 수 있음.

• 기술 검토는 프로그래머 성장의 기반이 될 수 있음

• 프로젝트에서 사소한 것에까지 주의를 기울이는 능력이 급격하게 올라감

• 자신의 선택에 제기될 수 밖에 없는 질문을 대비하게 되므로, 설득력 있는 전문가로 성장할 수 있음

• 검토에 임하는 자세

• 검토에 참가하는 사람은 나보다 더 잘 안다는 마음가짐으로 임하는 자세가 필요

• 카리스마에 억눌리거나, 정치적인 면에 말려서 부당하게 윗 사람에게 휘둘리면 안됨.

12년 11월 25일 일요일

Page 9: 프로그래머로 사는 법 Ch6

• 역량을 구축하고 프로세스를 최적화하는데 있어서 가장 어려운 점은 시간 관리

• 업무의 구분

• 급하고 중요: 핵심 업무 (중요한 회의등)

• 급하고 중요하지 않음: 전화 받기 등.

• 중요하지도 않고 급하지도 않음: 시간낭비라고 할 수 있는 일 (웹 서핑 등.)

• 중요하지만 급하지 않음: 경력을 확장하고 잠재력을 키우는 일

• 이 업무에 투자한 시간에 따라 승자와 패자가 결정 됨.

• 성장을 위한 시간 관리 전략 (중요하지만 급하지 않는 일에 시간을 투자하는 방법)

• 개인적인 입장에서, 전문가적인 견지에서 상대적인 중요성을 파악하고 정기적으로 시간을 투자하기 위한 전략을 수립

• 중요하지 않은 범주에 속하는 활동은 적당히 미루거나 생략, 중요성이 낮은 업무에 쓰는 시간을 줄일수록 중요하지만 급하지 않은 일에 쓰는 시간을 더 많이 확보 할수 있음

성장 역량

ptg

94 MAKING IT BIG IN SOFTWARE

people with big-shot potential from the career middlemen. As a software pofessional, this is where you expand your career and develop your poten-tial. Growth activities, the activities that sharpen the saw, generally fall in this quadrant. They are rarely urgent—they can wait a week, a month, or longer, in most cases. But although these tasks aren’t urgent, they define the scope and potential of your career. Spend time in this quadrant as follows:

. Recognize its relative importance to you personally and professionally and develop strategies for spending time here on a regular basis.

. Purge or bypass activities in your schedule that are really in the unimportant categories. The less time you spend in quadrants 2 and 3, the more easily you can justify to yourself and others time that you’ll spend in quadrant 4.

Take a look at Figure 6.2.

Urgent and important

(firefighting)

Urgency

Impo

rtanc

e

Important but not urgent

(quality time)

Urgent but not important

(distractions)

Not urgent, not important

(time wasting)

FIGURE 6.2 Quadrants of time (From The 7 Habits of Highly Effective People, by Stephen R. Covey New York: FreePress, 2004, reprinted with permission from Franklin Covey Co.)

Individuals and corporations have varying strategies for getting quality time in quadrant 4, the magical zone of Important but Not Urgent. For some people, it’s a daily event; for others, it’s a weekly or monthly routine. If you’re not finding time in the Important but Not Urgent zone on a regular basis, it will definitely lower your career potential. Carpe diem—seize the day.

From the Library of Wow! eBook

12년 11월 25일 일요일

Page 10: 프로그래머로 사는 법 Ch6

조직 최상부의 비업무 역량

• 조직에서 최고위층에 있는 사람들의 공통적인 특징

• 사회적 의식을 가지고 구설수나 정치적인 문제에 휘말리는 일을 피하는 편이다. 전문가로서 적절한 대화를 나누는데 능숙하다

• 작은 그룹에서든 큰 그룹에서든 글을 통해서든 소통을 잘 할 줄 안다

• 시간을 효율적으로 활용한다

• 조직내에서 인간관계를 잘 맺고 있다

• 중요한 문제를 정력적으로 공략하며, 위기 의식을 가지고 행동한다

• 위기 상황에서도 상대적으로 침착함을 유지하고 문제에 적절하게 대응한다

• 이러한 역량은 학교에서 배울 수 있는건 아니자만, 어떤 전문가에게든 강력한 무기가 될수 있다

• 대부분 타고나는 성격적 특성이지만, 성실한 사람이라면 시간은 걸리겠지만, 이런 역량을 배우고 익히는 것이 가능

12년 11월 25일 일요일

Page 11: 프로그래머로 사는 법 Ch6

궁극의 비업무 역량: 감성 지능

• 감성지능 (Emotional Intelligence)

• 다양한 상황에 적응하고 성공을 이끌어낼 수 있는 능력에 지대한 영향을 주는 몇가지 비인지적인 정신, 감정적인 역량의 척도

• 일반적인 면에서의 지능과는 별개의 것

• 성공에 미치는 영향도

• IQ: 6%, EI: 27% ~ 45%

• 전문가로 성공하는 기폭제 역할을 할 뿐 아니라 삶 자체가 달라지는 요인이 됨

12년 11월 25일 일요일

Page 12: 프로그래머로 사는 법 Ch6

요약

• 소프트웨어 전문가로서의 필요 역량

• 기술 역량

• 특정 분야의 전문성

• 비업무 역량

• 전문가로서 성장하기 위한 2가지 비법

• 중요하지만 급하지 않은 일에 시간을 투자

• 시간이 지남에 따라 고위 전문가로서의 적합성을 극정으로 향상해 줄 수 있는 EI를 계발

12년 11월 25일 일요일

Page 13: 프로그래머로 사는 법 Ch6

생각해 볼 것

• 각자의 생활에서 4가지 업무 분야에 투자하는 시간의 비율은?

• 중요하지만 급하지 않은 일에 얼마나 많은 시간을 투자하고 있는가?

• 주변 사람들 중 EI가 높은 사람은? 그 사람의 행동 패턴은?

• Assertion에 대한 자신의 생각

• 현재 적용하고 있는가?

• 적용했을 때 어떤 이점이 있을거라 생각하는가?

12년 11월 25일 일요일