프로그래머 능력 매트릭스

2010. 12. 23. 10:46plming

나는 어디쯤에 있는 지 확인 해 볼 수 있겠다...^^;

프로그래머 능력 매트릭스

단계 마다의 지식은 누적됩니다.; n 단계는 n보다 낮은 단계의 모든 것을 알고있다는 것을 함축합니다.

전산학(Computer Science)
 자료구조
 (data structures)
 2n
 (Level 0)
 Array 와 LinkedList 간의 차이를 알지 못합니다.
 n2
 (Level 1)
 Arrays, LinkedLists, Dictionaries 을 설명하고 구체적인 프로그래밍 작업에서 사용할 수 있습니다.
 n
 (Level 2)
 Arrays와 LinkedLists 같은 기본 자료구조에서 공간과 시간 트레이드 오프를 알고 있고, hashtables이 어떻게 구현되고 충돌과 우선순위 큐를 다룰 수 있는지와 이들을 구현하는 방법을 설명할 수 있습니다.
 log(n)
 (Level 3)
 B-trees, binomial and fibonacci heaps, AVL/Red Black trees, Splay Trees, Skip Lists, tries 같은 고급 자료구조에 대한 지식이 있습니다.
 Comments  
 알고리즘
 (algorithms)
 2n
 (Level 0)
 배열에서 평균값을 찾지 못합니다. (믿기 어렵지만, 이런 후보자를 면접했습니다.)
 n2
 (Level 1)
 기본적인 정렬, 검색, 자료구조 탐색과 조회 알고리즘
 n
 (Level 2)
 Tree, Graph, simple greedy, divide and conquer algorithms를 아는데, 이 매트릭스의 레벨의 관련성을 이해합니다.
 log(n)
 (Level 3)
 동적인 프로그래밍 솔루션, 그래프 알고리즘에 대한 멋진 지식, 수치 계산 알고리즘에 대한 좋은 지식을 인지하고 코딩할 수 있으며, NP 문제를 구별할 수 있습니다.
 Comments  훌륭한 탑코더 랭킹을 가진 사람과 일하는 것은 믿을 수 없는 행운입니다!
 시스템 프로그래밍
 (systems programming)
 2n
 (Level 0)
 compiler, linker, interpreter가 무엇인지 모릅니다.
 n2
 (Level 1)
 compilers, linker, interpreters에 대한 기본 이해가 있습니다. assembly 코드가 무엇이며 하드웨어 레벨에서 어떻게 동작하는지 이해합니다. 가상 메모리와 페이지에 대한 약간의 지식이 있습니다.
 n
 (Level 2)
 kernel mode와 user mode, multi-threading, synchronization primitives와 이들이 어떻게 구현되었는지를 알고 있고 assembly 코드를 읽을 수 있습니다. 네트워크가 어떻게 동작하는지 이해하며, 네트워크 프로토콜과 소켓 레벨 프로그래밍을 이해합니다.
 log(n)
 (Level 3)
 하드웨어(CPU + Memory + Cache + Interrupts + microcode), 바이너리 코드, 어셈블리, 정적,동적 링킹, 컴파일과 인터프리테이션, JIT 컴파일, 가베지 콜레션, 힙, 스택, 메모리 주소지정등 전반적인 프로그래밍 스택을 이해합니다.
 Comments  

소프트웨어 공학(Software Engineering)
 소스코드 버전관리
 (source code version control)
 2n
 (Level 0)
 날짜별로 폴더 백업
 n2
 (Level 1)
 VSS와 CVS/SVN 사용하기 시작합니다.
 n
 (Level 2)
 CVS와 SVN 기능에 익숙합니다. branch, merge, 패치와 저장소 속성을 설정하는 방법을 알고 있습니다.
 log(n)
 (Level 3)
 분산 VSC 시스템을 알고 있습니다. Bzr/Mercurial/Darcs/Git을 시도해봤습니다.
 Comments  
 빌드 자동화
 (build automation)
 2n
 (Level 0)
 IDE로부터 빌드하는 방법만 알고 있습니다.
 n2
 (Level 1)
 명령어로 시스템을 빌드하는 방법을 알고 있습니다.
 n
 (Level 2)
 기본 시스템을 빌드하는 스크립트를 설정할 수 있습니다.
 log(n)
 (Level 3)
 시스템과 문서, 설정파일을 빌드하고 릴리즈 노트를 만들고 소스 컨트롤에 있는 코드로부터 태깅을 하는 스크립트를 설정할 수 있습니다.
 Comments  
 테스트 자동화
 (automated testing)
 2n
 (Level 0)
 모든 테스트가 테스터의 일이라고 생각합니다.
 n2
 (Level 1)
 자동화된 유니트 테스트를 작성하고, 코드를 작성할 때 좋은 유니트 테스트 케이스를 함께 작성합니다.
 n
 (Level 2)
 TDD 방법으로 코드를 작성합니다.
 log(n)
 (Level 3)
 자동화된 기능, 로드/성능, UI 테스트를 이해하고 작성할 수 있습니다.
 Comments  

프로그래밍(Programming)
 문제 분해
 (problem decomposition)
 2n
 (Level 0)
 코드 재사용을 위해 Copy&Paste로 직접 코딩을 합니다.
 n2
 (Level 1)
 여러개의 함수로 문제를 쪼갤수 있습니다.
 n
 (Level 2)
 전체 문제를 풀기 위한 재사용가능한 함수와 객체를 작성할 수 있습니다.
 log(n)
 (Level 3)
 적절한 자료구조와 알고리즘을 사용하고 변경될 수 있는 문제를 캡슐화시키는 일반적인/객체지향적인 코드를 작성합니다.
 Comments  
 시스템 분해
 (systems decomposition)
 2n
 (Level 0)
 단일 file/class 이상으로 생각할 수 없습니다.
 n2
 (Level 1)
 문제공간을 쪼개고 동일한 플랫폼/기술안에서 가능한 솔루션을 설계할 수 있습니다.
 n
 (Level 2)
 여러 기술/플램폼으로 확장가능한 시스템을 설계할 수 있습니다.
 log(n)
 (Level 3)
 여러 개의 제품 라인을 가지고 외부 시스템과 통합되는 복잡한 시스템을 시각화하고 설계할 수 있습니다. 모니터링, 레포팅, 장애극복 같은 지원 시스템 기능을 설계할 수 있습니다.
 Comments  
 소통
 (communication)
 2n
 (Level 0)
 동료에게 생각/아이디어를 설명할 수 없습니다. 철자와 문법이 서툽니다.
 n2
 (Level 1)
 말한 내용을 동료가 이해할 수 있습니다. 철자와 문법이 괜찮습니다.
 n
 (Level 2)
 동료와 효과적인 소통을 할 수 있습니다.
 log(n)
 (Level 3)
 생각/설계/아이디어/명세를 명백한 방법으로 이해하고 소통하고 컨텍스트에 따라 소통을 바로잡을 수 있습니다.
 Comments  소통은 자주 평가절하되지만 프로그래머를 평가하는데 매우 중요합니다. 영어가 모국어가 아닌 곳에 프로그래밍 작업을 외주가 늘어남에 따라 소통 이슈는 더욱 두드러지고 있습니다. 프로그래머가 소통의 의도를 이해하지 하지 못하여 실패한 여러 프로젝트들을 알고 있습니다.
 파일에서
 코드 구조화
 (code organization within a file)
 2n
 (Level 0)
 파일을 조직한다는 증거가 없습니다.
 n2
 (Level 1)
 메써드가 논리적 또는 접근성에 따라 그룹핑됩니다.
 n
 (Level 2)
 코드는 영역으로 그룹되어 있고, 다른 소스 파일에 레퍼런스된 괜찮은 주석이 달려있습니다.
 log(n)
 (Level 3)
 파일은 라이센스 헤더, 요약, 괜찮은 주석, 지속적인공백 문자사용을 합니다. 이 파일은 보기에도 아릅답습니다.
 Comments  
 파일간의
 코드 구조화
 (code organization across files)
 2n
 (Level 0)
 파일간의 구조화에 대한 생각이 없습니다.
 n2
 (Level 1)
 연관된 파일을 분류하여 폴더에 넣습니다.
 n
 (Level 2)
 물리적인 파일은 독자적인 목적을 가집니다. 예로, 하나의 클래스 정의, 하나의 기능 구현 등.
 log(n)
 (Level 3)
 물리적인 레벨의 코드 구조는 설계와 깊숙하게 대응되고 파일이름과 폴더 배치는 설계에 대한 통찰을 제공합니다.
 Comments  
 소스 트리 구조화
 (source tree organization)
 2n
 (Level 0)
 하나의 폴터에 모든 게 있습니다.
 n2
 (Level 1)
 코드의 기본 분리를 논리적인 폴더로 합니다.
 n
 (Level 2)
 어떤 순환적인 의존없이, binaries, libs, docs, builds, third-party code 모두 적절한 폴더에 있습니다.
 log(n)
 (Level 3)
 소스 트리의 물리적인 배치는 논리적인 계층과 구조와 부합합니다. 디렉터리 이름과 구조는 시스템의 설계에 대한 안목을 제공합니다.
 Comments  이것과 이전 아이템과의 차이는 구조의 규모인데, 소스 트리 구조화는 시스템을 정의하는 전반적인 산물의 집합과 관련됩니다.
 코드 가독성
 (code readability)
 2n
 (Level 0)
 한 음절의 이름
 n2
 (Level 1)
 파일, 변수, 클래스, 메써드 등을 위한 좋은 이름
 n
 (Level 2)
 긴 함수가 없고, 별난 코드를 설명하는 주석, 버그 픽스, 코드 가정
 log(n)
 (Level 3)
 코드 가정은 asserts을 사용하여 검증되고, 코드는 자연스럽게 흘러갑니다 - 깊게 반복되는 조건이나 메써드가 없습니다.
 Comments  
 방어적인 코딩
 (defensive coding)
 2n
 (Level 0)
 방어적인 코딩 개념을 이해하지 못합니다.
 n2
 (Level 1)
 모든 인자값을 검사하고 코드에서 결정적인 가정을 asserts 합니다.
 n
 (Level 2)
 리턴값을 검사하는 것을 확신하고 실패할 수 있는 코드주변에 예외처리를 확인합니다.
 log(n)
 (Level 3)
 방어적인 코딩을 돕는 자신만의 라이브러리를 가지고 있고, 실패를 가상하는 유니트 테스트를 작성합니다.
 Comments  
 에러 처리
 (error handling)
 2n
 (Level 0)
 오직 행복한 경우만 코딩합니다.
 n2
 (Level 1)
 예외를 던지고/에러를 발생시키는 코드에 대한 기본 에러 처리
 n
 (Level 2)
 에러/예외처리가 자원, 연결, 메모리가 모두 깔끔하게 되는 좋은 상태로 프로그램이 종료되는 것을 확신합니다.
 log(n)
 (Level 3)
 가능한 예외가 발생하기 전에 탐지하고, 코드의 모든 계층에서 지속적인 예외 처리 전략을 유지하고, 전체 시스템을 위한 예외 처리에 대한 가이드라인을 따르는 코드
 Comments  
 통합개발환경
 (IDE)
 2n
 (Level 0)
 대부분 텍스트 에디팅을 위한 IDE를 사용합니다.
 n2
 (Level 1)
 인터페이스에 대해서 알고 있고, 메뉴를 이용하여 IDE를 효율적으로 사용할 수 있습니다.
 n
 (Level 2)
 자주 사용하는 기능에 대한 키보드 단축키를 알고 있습니다.
 log(n)
 (Level 3)
 작성된 커스텀 매크로가 있습니다.
 Comments  
 API  2n
 (Level 0)
 자주 문서를 찾아볼 필요가 있습니다.
 n2
 (Level 1)
 매우 자주 사용하는 API는 기억하고 있습니다.
 n
 (Level 2)
 광대하고 깊은 API에 대한 지식이 있습니다.
 log(n)
 (Level 3)
 자주 사용하는 작업을 단순화하고 API의 공백을 메꾸는 API의 꼭대기에 있는 라이브러리를 작성하였습니다.
 Comments  API의 예로 자바 라이브러리, .net 프레임워크 또는 응용프로그램을 위한 커스텀 API
 프레임워크
 (frameworks)
 2n
 (Level 0)
 핵심 플랫폼의 바깥쪽에 어떤 프레임워크도 사용하지 않았습니다.
 n2
 (Level 1)
 플랫폼에 사용가능한 인기있는 프레임워크를 들어는 봤지만 사용하지 않았습니다.
 n
 (Level 2)
 전문적인 역량으로 하나 이상의 프레임워크를 사용해봤고 프레임워크의 노련함을 가지고 매우 정통합니다.
 log(n)
 (Level 3)
 프레임워크의 작성자입니다.
 Comments  
 요구분석
 (requirements)
 2n
 (Level 0)
 주어진 요구사항을 가지고 명세에 따라 코딩합니다.
 n2
 (Level 1)
 명세에서 놓친 사례에 대해 질문을 합니다.
 n
 (Level 2)
 완전한 그림을 이해하고 명세화되어야 하는 전체 영역을 따라갑니다.
 log(n)
 (Level 3)
 더 좋은 대안을 제안하고 경험에 따라 주어진 요구사항을 막힘이 따라갑니다.
 Comments  
 scripting  2n
 (Level 0)
 스크립트 도구에 대해 전혀 알지 못합니다.
 n2
 (Level 1)
 Batch files/shell scripts
 n
 (Level 2)
 Perl/Python/Ruby/VBScript/Powershell
 log(n)
 (Level 3)
 재사용 가능한 코드를 작성하고 발표하였습니다.
 Comments  
 database  2n
 (Level 0)
 엑셀이 데이터베이스라고 생각합니다.
 n2
 (Level 1)
 기본적인 데이터베이스 개념, 정규화, ACID, 트랜잭션을 알고 간단한 SELECT를 작성할 수 있습니다.
 n
 (Level 2)
 쿼리가 동작하고, 뷰, 저장 프로시저, 트리거와 사용자 정의 타입을 이용하는 장점을 이해하면서 훌륭하고 정규화된 데이터베이스 스키마를 설계할 수 있습니다. 클러스터와 넌클러스터 인덱스 차이를 알고 있습니다. ORM 툴 사용에 익숙합니다.
 log(n)
 (Level 3)
 기본 적인 데이터베이스 관리, 성능 최적화, 인덱스 최적화를 하고, 고급 SELECT 쿼를 작성할 수 있으며, 관계 SQL 대신에 커서를 사용할 수 있으며, 내부적으로 데이터가 저장되는 방법을 알며, 인덱스가 내부적으로 저장되는 방법을 알며, 어떻게 데이터베이스가 미러되는지 이해합니다. 2단계 커밋이 동작하는 방법을 알고 있습니다.
 Comments  

Experience
 전문 경험을 가진 언어
 (languages with professional experience)
 2n
 (Level 0)
 필수적(Imperative) 또는 Object Oriented
 n2
 (Level 1)
 Imperative, Object-Oriented and declarative (SQL). static vs dynamic typing, weak vs strong typing and static inferred types 을 안다면 보너스를 추가합니다.
 n
 (Level 2)
 Functional(함수언어). lazy evaluation, currying, continuations 을 안다면 보너스를 추가합니다.
 log(n)
 (Level 3)
 Concurrent (Erlang, Oz) and Logic (Prolog)
 Comments  
 platforms with professional experience  2n
 (Level 0)
 1
 n2
 (Level 1)
 2-3
 n
 (Level 2)
 4-5
 log(n)
 (Level 3)
 6+
 Comments  
 years of professional experience  2n
 (Level 0)
 1
 n2
 (Level 1)
 2-5
 n
 (Level 2)
 6-9
 log(n)
 (Level 3)
 10+
 Comments  
 영역 지식
 (domain knowledge)
 2n
 (Level 0)
 영역에 대한 지식이 없습니다.
 n2
 (Level 1)
 하나의 영역에서 하나 이상의 제품에서 일해왔습니다.
 n
 (Level 2)
 같은 영역에서 여러개의 제품에서 일해왔습니다.
 log(n)
 (Level 3)
 여역 전문가입니다. 하나의 영역에서 여러개의 제품/솔루션을 설계하고 구현하였습니다. 도메인에서 사용하는 표준 항목과 프로토콜에 대해 매우 정통합니다.
 Comments  

지식(Knowledge)
 도구 지식
 (tool knowledge)
 2n
 (Level 0)
 주요한 IDE (VS.Net, Eclipse)로 제한됩니다.
 n2
 (Level 1)
 인기있고 표준적인 몇몇 대체가능한 도구를 알고 있습니다.
 n
 (Level 2)
 에디터, 디버거, IDE, 오픈소스 대체품에 대한 많이 알고 있습니다. 예로, Scott Hanselman's power tools 목록의 대부분을 알고 있습니다. ORM 툴도 사용합니다.
 log(n)
 (Level 3)
 도구와 스크립트를 실제 작성했습니다. 공개했다면 추가적인 보너스입니다..
 Comments  http://www.hanselman.com/tools/
 노출된 언어
 (languages exposed to)
 2n
 (Level 0)
 필수적(Imperative) 또는 Object Oriented
 n2
 (Level 1)
 Imperative, Object-Oriented and declarative (SQL). static vs dynamic typing, weak vs strong typing and static inferred types 을 안다면 보너스를 추가합니다.
 n
 (Level 2)
 Functional(함수언어). lazy evaluation, currying, continuations 을 안다면 보너스를 추가합니다.
 log(n)
 (Level 3)
 Concurrent (Erlang, Oz) and Logic (Prolog)
 Comments  
 코드베이스 지식
 (codebase knowledge)
 2n
 (Level 0)
 코드베이스를 본 적이 없습니다.
 n2
 (Level 1)
 코드 레이아웃과 시스템을 어떻게 빌드하는가에 대한 기본 지식과
 n
 (Level 2)
 수차례 버그를 고치면서 구현되고 적은 기능을 가지는, 코드베이스의 훌륭하게 동작하는 지식
 log(n)
 (Level 3)
 여러개의 커다란 기능을 구현하였고 대부분의 기능과 버그수정을 위한 요구되는 변화를 쉽게 시각화할 수 있습니다.
 Comments  
 신기술에 대한 지식
 (knowledge of upcoming technologies)
 2n
 (Level 0)
 신기술에 대해 들은 적이 없습니다.
 n2
 (Level 1)
 해당 분야에 대한 신기술을 들어봤습니다.
 n
 (Level 2)
 alpha preview/CTP/beta를 다운로드 하고 기사와 메뉴얼을 읽습니다.
 log(n)
 (Level 3)
 previews를 가지고 놀며 실제로 무엇인가를 만들며 보너스로 다른 사람들에게 공유합니다.
 Comments  
 platform internals  2n
 (Level 0)
 플랫폼 내부에 대한 지식이 없습니다.
 n2
 (Level 1)
 플랫폼이 내부적으로 동작하는 기본 지식을 가지고 있습니다.
 n
 (Level 2)
 플랫폼 내부에 대한 깊은 지식이 있으며 플랫폼이 프로그램을 어떻게 실행코드로 바꾸는지 시각화할 수 있습니다.
 log(n)
 (Level 3)
 플랫폼 내부의 정보를 제공하는 도구를 작성하였습니다. 예로, 디스어셈블러, 디컴파일러, 디버거등.
 Comments  
 책들 (books)  2n
 (Level 0)
 Unleashed 시리즈, 21 days 시리즈, 24 hour 시리즈, dummies 시리즈(초보자용)
 n2
 (Level 1)
 Code Complete, Don't Make me Think, Mastering Regular Expressions
 n
 (Level 2)
 Design Patterns, Peopleware, Programming Pearls, Algorithm Design Manual, Pragmatic Programmer, Mythical Man month
 log(n)
 (Level 3)
 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
 Comments  (역주-대부분 책 제목입니다.)
 블로그 (blogs)  2n
 (Level 0)
 블로그를 들어봤지만, 시간을 가진적은 없습니다.
 n2
 (Level 1)
 tech/programming/software engineering 블로그를 읽고, 정기적으로 podcast를 듣습니다.
 n
 (Level 2)
 수집한 유용한 기사와 도구에 대한 약간의 모음을 가진 링크 블로그를 운영합니다.
 log(n)
 (Level 3)
 프로그래밍에 대한 개인적인 통찰과 생각을 나누는 블로그를 운영합니다.
 Comments  

Thanks to John Haugeland for a reformatting of it that works much more nicely on the web.

[펌] http://alt21.tistory.com/entry/프로그래머-능력-매트릭스-번역-zhoto-httpzhototistorycom
프로그래머 능력 매트릭스-번역: zhoto (http://zhoto.tistory.com)

'plming' 카테고리의 다른 글

Tistory 코드표시기 (Syntax Hilighter) 적용하기  (0) 2016.09.03
2010년도 적용 SW기술자 노임단가 공표  (0) 2011.01.18
java.lang.ThreadDeath  (0) 2010.04.07
502 Bad Gateway  (0) 2010.04.07
Color 값  (0) 2009.05.11