Programmer Competency Matrix

Posted by 나에요임마
2018. 12. 14. 00:01 Story/Development story

개발자 역량측정 메트릭(Metric)

 

원본: http://www.indiangeek.net/programmer-competency-matrix/

 

다음은 개발자의 개발 역량을 종합적으로 평가할  있는 역량 측정용 매트릭스 평가표입니다.   항목별로 1 ~ 4점까지 부여하면, 140 (보너스 포함 142 만점) 됩니다각자 자기의 개발 역량을 점수로 매겨 보시기 바랍니다.

 

전산학 이해

 

 

2n 

(Level 0)

n2 

(Level 1)

n

 (Level 2)

log(n)

 (Level 3)

 

자료구조

어레이와 링크드리스트의 차이를모른다.

실제 프로그래밍환경에서 어레이와링크드 리스트와딕셔너리의 차이를설명할  있다.

어레이와 링크드 리스트의 시간/공간 타협관계를 설명할  있다해쉬의 콜리전 처리를   있고우선순위 큐를 만들  있다.

B트리이진트리피보나치힙, AVL트리, Red/Black트리, Splay 트리, Skip 리스트트라이 고급 데이터 스트럭처에대해 이해하고 있다.

 

알고리듬

어레이에 들어있는 숫자들의평균을  모른다.

소팅서칭트래버싱알고리듬을 이해한다.

트리그래프단순한 그리디알고리듬. Divide and Conquer알고리듬을 이해한다표의 레벨 구분자가  그렇게쓰였는지 설명할  있다.

다이내믹 프로그래밍솔루션을 이해한다그래프알고리듬수치연산알고리듬을 이해하고, NP문제를 식별할  있다.

 

시스템프로그래밍

컴파일러링커인터프리터를구분하지 못한다.

컴파일러링커인터프리터를이해한다.

하드웨어 레벨의어셈블리 언어 동작을이해한다가상메모리와 페이징에대한 이해가 있다.

커널모드/유저모드 차이를 알고멀티스레딩동기화를 이해하고그것들이 어떻게 구현되었는지안다어셈블리 코드를 읽을 있다네트웍이 어떻게동작하는지 안다프로토콜을알고소켓 수준의 프로그램을읽을  있다.

전체 프로그래밍 스택을이해한다.

하드웨어 (CPU + 메모리 + 캐쉬 + 인터럽트 + 마이크로코드), 바이너리코드어셈블리정적/동적링킹컴파일인터프리테이션, JIT 컴파일가비지 콜렉션스택메모리 어드레싱등을 구분해서 이해한다.

 

소프트웨어 엔지니어링

 

 

2n 

(Level 0)

n2

 (Level 1)

n

 (Level 2)

log(n)

 (Level 3)

 

소스코드

버전컨트버

날짜 단위 폴더백업

CVS/SVN/VSS등의사용을 시작했다.

CVS/SVN 대한 능숙한 사용브랜치/머지를   있고팻치를 만들 있고리파지토리 속성에 맞게 새로만들  있다.

분산 VCS 시스템을이해한다. Bzr/Mercurial/Darcs/Git 등을 쓰려고 한다.

 

빌드자동화

IDE 에서만빌드할  있다.

코맨드 라인으로빌드를 만들 있다.

빌드 스크립트를 직접 짠다.

문서설치 인스톨러릴리즈 노트를 포함한 빌드스크립트를 만든다.

 

테스트자동화

테스트는테스터의일이라고생각한다.

유닛 테스트를짜고 새로 짜는코드에 유닛테스트를 작성하고있다.

TDD 방식으로 코드를 짠다.

기능적로드/성능적, GUI 측면의 테스트 자동화를이해하고 실현한다.

 

프로그래밍

 

 

2n 

(Level 0)

n2 

(Level 1)

n

 (Level 2)

log(n)
 (Level 3)

 

프로그램분해

길게 라인단위로복사/붙여넣기로코드를 짠다.

문제를 여러함수로 나눠서코딩한다.

재사용 가능한 객체로 코드를작성한다.

적절한 알고리듬으로제네릭/OOP방법을 써서변경이 있을 법한 부분은적절히 캡슐화 하면서코딩한다.

 

시스템분해

파일 1클래스 1이상의 범위를생각하지못한다.

같은 플랫폼같은기술 범위내에서는 문제를쪼개서 해결책을설계해   있다.

복수개의 기술과 시스템에 걸쳐 있는문제에 대한 솔루션을 만들어 낸다.

복잡한 다수개의 제품들을가시화하여 설계하고 외부시스템과 연동을 이끌어낸다모니터링리포팅장애복구 등의 운영 작업도설계할  있다.

 

의사소통

아이디어와생각을 표현하지못하고스펠링과 문법이엉망이다.

동료가 말하는지 알아먹도록 말한다스펠링과 문법은좋다.

효과적으로 의사 소통   있다.

모호한 상황에서 생각/설계/아이디어/스펙을이해하고 소통할 있으며상황에 맞게소통할  있다.

 

10 파일 내의코드 구성

코드 파일내에서 구조화가 되어 있다.

메소드들이논리적으로든접근성으로든어떻게든 구조화되어 있다.

코드가 영역별로 그루핑 되어 있고코멘트도  되어 있고서로 다른파일간의 참조도  설명되어 있다.

파일은 라이선스 헤더도있고요약설명도 있고코멘트도  되어 있고공백 사용은 일관성이있고파일 자체가 보기좋게 정렬되어 있다.

 

 

2n
 (Level 0)

n2 

(Level 1)

n 
(Level 2)

log(n) 
(Level 3)

 

11 파일 간의코드 구성

파일간의 구성에대한 어떤구조도 없다.

파일들이 폴더로나뉘어져 있다.

파일 별로 고유한 목적이 있다예를들어 클래스 하나 정의기능 하나 구현.

코드 구성이 설계와 매치되어 코드 파일명만보더라도설계에 대한이해가 가능하도록 만든다.

 

12 소스 트리구성

모든  폴더하나에  있다.

논리적인 폴더로나눠져 있다.

서큘러 의존성이 없고바이너리라이브러리문서빌드써드파티 코드등이 폴더로 구분되어 나눠져 있다.

물리적 코드 구성이논리적인 계층을 반영한다디렉토리명으로시스템 설계에 대한 이해가가능하도록 만든다.

 

13 코드가독성

단음절 변수명.

코드 가독성이낮게 짠다.

파일변수클래스메소드 등에 대한이름을 부여한다.

 함수는 없다통상적이지 않은코드나 버그수정이나 전제조건 등에대해서 코멘트를 달아 둔다.

전제조건 등은 assert검증한다네스팅 단계가깊지 않고자연스럽게코드가 흐른다.

 

14 방어적코딩

방어적 코딩이뭔지 모른다.

인수를 체크하고크리티컬한전제조건에대해서는 assert사용한다.

리턴값도 틀림없이 체크하고익셉션을항상 체크한다.

방어적 코딩을 하기 위한자신만의 라이브러리가있다실패 케이스를시험하는 유닛 테스트코드를 작성한다.

 

 

2n

 (Level 0)

n2
 (Level 1)

n
 (Level 2)

log(n) 
(Level 3)

 

15 에러핸들링

정상적인 코드만작성한다.

익셉션/에러가생성되는 주변에기본적인 에러핸들링 코드가있다.

에러/익셉션으로 가도 프로그램이안정적인 상태에 있도록 유지한다리소스커넥션메모리 등이 깨끗하게해제됨을 보장한다.

가능한 익셉션 상황을 미리감지해 내도록 코딩한다코드 전체에 대해서 일정한익셉션 핸들링 정책을사용한다전체 시스템에대한 익셉션 핸들링가이드라인을 만든다.

 

16 IDE

대부분 텍스트에디팅에 IDE사용한다.

인터페이스 이면에숨어있는IDE기능을 메뉴를이용해서효과적으로불러내서 쓴다.

거의 모든 IDE 사용을 단축키로 한다.

IDE 매크로를 정의해서사용한다.

 

17 API

자주 문서를봐야 한다.

기억 속에 자주쓰는 API 들어있다.

API 대해서 폭넓고 깊이 있는 이해를하고 있다.

자주 호출하는 것에 대해서단순화 시키기 위해API위에 라이브러리를추가로 개발하고결과적으로 API 부족한점은 직접 채운다.

 

18 프레임웍

코어 플랫폼밖의 어떤프레임웍도 쓰지않는다.

유명한 프레임웍을들어는 봤으나써보지는 못했다.

프레임웍을 여러  능숙하게 쓰고해당 프레임웍을 효과적으로  쓰는 전형적인 방법을 알고 있다.

프레임웍을 직접 개발한다.

 

 

2
 (Level 0)

n2 
(Level 1)

n
 (Level 2)

log(n) 

(Level 3)

 

19 요구사항

주어진요구사항을 코드스펙으로바꾼다.

스펙에서 비어있는케이스에 대한질문을  낸다.

전체 그림을 이해하고스펙으로정의할 영역 전체를 도출해 낸다.

경험에 기반해서 주어진요구사항에 대해  좋은대안과 플로우를 제시할 있다.

 

20 스크립팅

스크립팅 툴을모른다.

뱃치파일쉘스크립팅을 한다

Perl/Python/Ruby/VBScript/Powershell 류의 스크립팅을 한다.

재사용 가능한 코드를 짜고공개한다.

 

21 데이터베이스

엑셀이 데이터베이스라고생각한다.

데이터 베이스기본 개념과정규화, ACID, 트랜잭션을이해하고간단한SELECT  있다.

실행될 질의문을 염두해 두고스키마를  정규화 해서 정의할 있으며뷰와 스토어드 프로세져트리거사용자 정의 타입 등을능숙하게   있다클러스터드인덱스를 이해하며, ORM 툴을사용한다.

기본 DB관리성능 최적화색인 최적화고급 SELECT Query   있고커서를   있고데이터가 내부적으로어떻게 저장되는지이해하며색인이 어떻게저장되는지 알고데이터베이스 미러링복제를이해하고, 2-페이스 커밋을이해한다.

 

경험

 

 

2n
 (Level 0)

n2
 (Level 1)

n 
(Level 2)

log(n)
 (Level 3)

 

22 전문경험을가진 언어

절차형 언어, OO언어를 안다.

절차형 언어, OO언어선언적(SQL)언어를 알고동적/정적 타입과약한/강한타이핑을이해하며정적으로 유도된타입을 이해하면보너스 추가.

함수언어를 알고, Lazy Evaluation, Currying, Continuation 이해하면보너스 추가.

병렬언어(Erlang,Oz)논리적 언어 (Prolog) 이해한다.

 

23 전문경험을 가진플랫폼 

1

2-3

4-5

6+

 

24

전문 경험기간 ()

1

2-5

6-9

10+

 

25

도메인 지식

도메인 지식이없다

해당 도메인의제품 1개에서 일해봤다.

해당 도메인의 여러 제품에서 일해봤다.

도메인 전문가.

해당 도메인의 여러 제품을설계하고 구현해 봤다표준 도메인 용어 프로토콜에 대해  구사할 있다.

 

지식

 

 

2n

 (Level 0)

n2
 (Level 1)

n
 (Level 2)

log(n)
 (Level 3)

 

26 도구 지식

주사용 IDE지식이 국한되어있다.

유명하거나표준적인 다른도구들을  안다.

에디터디버거, IDE 대해  알고있고오픈소스 대체물도  알고 있다. Scott Hanselman 파워툴은 대부분알고 있다. ORM 툴을 사용한다.

도구를 직접 만든다그걸공개했으면 보너스 점수.

 

27 노출된언어

절차형 언어, OOP

절차형 언어, OOP, 선언적언어 SQL. 동적/정적타이이핑약한/강한 타이핑정적유도 타이핑을알면 보너스 추가.

함수언어를 알고, Lazy Evaluation, Currying, Continuation 이해하면보너스 추가.

병렬언어(Erlang,Oz)논리적 언어 (Prolog) 이해한다.

 

28 코드베이스지식

코드베이스를 적이 없다.

코드 레이아웃에대한 이해가 있고시스템 빌드에대해서 이해한다.

코드 베이스를  알고버그픽스를코딩했고몇몇 기능도 추가했다.

코드베이스에 여러 개의주요 기능을 넣었다대부분의 기능과 버그수정에 소요되는변경내역을 가시화 시킬 있다.

 

29

최신 기술이해

최신 기술을모른다

해당 분야의 최신기술을 들어 봤다.

알파 프리뷰, CTP, 베타를 다운로드 봤다온라인 매뉴얼 등을 읽어 봤다.

프리뷰를 시험해 보고뭔가 만들어 봤다그걸공개했으면 보너스 추가.

 

 

2n
 (Level 0)

n2 
(Level 1)

n 
(Level 2)

log(n) 
(Level 3)

 

30

플랫폼 내부

플랫폼 내부에대해서 전혀모른다.

플랫폼 내부가어떻게 동작하는지기본 이해를가지고 있다.

플랫폼 내부가 어떻게 동작하는지 알고 있고가시화 시켜서 플랫폼이어떻게 코드를 실행시키는  설명할 있다.

플랫폼 내부에 대한 정보를제공하기 위해서 디컴파일디버깅디스어셈블 등을하거나 툴을 만든다.

 

31

Unleashed 시리즈, 21시리즈, 24시간시리즈더미시리즈 책을읽는다.

Code Complete, Don’t Make me Think, Matering Regular expressions같은 책을 읽는다.

 

디자인 패턴피플웨어, Programming Pearls, 알고리듬 디자인 매뉴얼실용적 프로그래머, Mythical Man Month같은 책을 읽는다.

Structure and Interpretation of Computer Programs, Concepts Techniques, Models of Computer Programming, Art of Computer Programming, Database systems , by C. J Date, Thinking Forth, Little Schemer 등을 읽는다.

 

32

블로그

들어 봤지만별로 친하지않다.

주기적으로programming, software engineering 블로그를 읽고, Podcast 듣는다.

펌글 블로그를 운영하고유용한 팁과기사를 모아서 관리하고 있다.

프로그램에 대한 개인적인통찰이나 생각을 적는블로그를 개설해서다른사람과 공유한다.

 

외국어

 

2n

 (Level 0)

n2
 (Level 1)

n
 (Level 2)

log(n)
 (Level 3)

33 외국어

한국어아닌자료로는기술습득을못한다.

영어로 기술 교재를읽고 기술을파악한다.

유럽인 /  미국인 으로부터개발 업무 지시를 받고 그에따라 업무수행 후에 결과를보고할  있다.

영어로 유럽인 / 미국인 에게서 S/W발주 받아서인도인 중국인에게 S/W 개발 업무를 아웃소싱시키고 국내 팀과 연계하여 국제적인 프로젝트를진행시킬  있다.

 

문서화

 

2n

 (Level 0)

n2
 (Level 1)

n
 (Level 2)

log(n)
 (Level 3)

34 문서포맷

문서 작성이서툴고 작성해야하는지자발적으로판단하지못한다.

프로젝트에 필요한 문서포맷이 어떤 것인지 알고있고 적어도 1 이상의프로젝트에서 단계별 문서를작성해  적이 있다.

여러 S/W 프로젝트에서S/W 사용된 다양한 문서포맷을 여러 세트 작성해 적이 있고여러 세트를확보하고 있다.

필요하면 문서 세트를 종류 포맷을 직접 정의할  있고베스트프랙티스를 알고 있다.

35

오피스

툴사용

오피스문서도구사용법을완전히숙지하지 않은상태이다.

오피스를 이용해서 각종문서를 작성하지만문서포맷이 주어지지 않으면작성에 애를 먹는다.

오피스 사용법을 완전히숙지하고 있으며단축키도사용하고 효율적인 파일처리를   있다.

상당한 작업을 단축키로 수행하며매크로도 직접 정의해서 사용하고오피스  외의 공개판 도구들도적극적으로 사용해서 효과적인문서를 생산한다.

 



개발자 경력을 대강 점수로 매핑해 보자면, (개발자로서 일한 기간 기준)

40점 생초짜

50점 초급

60점 아직 초급 - 평균 2년~3년차 쯤 되지 않을까... 5년차가 여기에 머물러 있으면, 당신은 글로벌 경쟁력에 문제가 있음.

70점 중급

80점 중급

90점 아직 중급 - 평균 7~10년차 쯤 되지 않을까... 12년차가 여기에 머물러 있으면, 당신은 글로벌 경쟁력에 문제가 있음.

100점 고급

110점 고급 - 아마 12년차 쯤 되지 않을까... 17년차가 여기에 머물러 있으면, 당신은 글로벌 경쟁력에 문제가 있음.

120점 특급

130점 특급 - 100인 이상의 SW 전문 중견기업의 CTO로도 충분한 실력!

135점 신


------------

※ 주의: 본 역량 측정 도구는 주관적인 점수 산정이므로 두사람의 평가결과를 바로 신뢰할 수는 없습니다. 예를 들어 개발 회사의 사원 역량평가로 쓰면 심각한 문제가 발생할 수 있다는 것을 경고드립니다. 편차의 기본 이유는 '초보자는 스스로를 좀 높게 평가하는 경향'이 있고, 고급자는 '좀 낮게 평가하는 경향'이 있기 때문에, 중간에 몰리는 경향이 있습니다.