본문 바로가기
Programming

고급 프로그래머 역량

by Berasix 2023. 1. 30.
반응형

조금 오래된 기준일 수도 있으나, "Sijin Joseph" 블로그에 작성되어 있는 표를 보고

대략 고급 프로그래머의 역량에 대해 정리해 봤다. 

 

https://sijinjoseph.com/programmer-competency-matrix/

 

Programmer Competency Matrix | Sijin Joseph

.article-container { max-width: 100% } Note that the knowledge for each level is cumulative; being at level n implies that you also know everything from the levels lower than n.

sijinjoseph.com

 

1), 2), 3) 은 대략 초급 중급 고급 이 가능하면 좋을 항목이다.

2)는 1) 항목에 대 알고 있어야 하며, 3)은 1), 2) 항목을 알아야 한다. 

 

컴퓨터 과학 (Computer Science)

1. 데이터 구조 (data structures)

1) Array와 LinkedList의 차이를 안다.

2) Dictionary 도 설명할 수 있다.

3) Array와 LinkedList의  시, 공간 타협관계를 설명할 수 있고, 해쉬 충돌 처리를 할 수 있고, 우선순위 큐를 만수 있다.

 

2. 알고리즘 (algorithms)

1) 배열의 숫자의 평균 얻을 수 있다.

2) 기본 정렬(sorting), 검색(searching) 및 데이터 구조 순회(data structure traversal) 및 검색(retrieval) 알고리즘을 사용할 수 있다.

3) 트리(tree), 그래프(graph), 간단한 그리디(greedy) 알고리즘, 분할 정복(Divide and Conquer) 알고리즘을 이해한다.

 

3. 시스템 프로그래밍 (systems programming)

1) 컴파일러, 링커 또는 인터프리터가 뭔지 안다.

2) 어셈블리 코드가 무엇이며 하드웨어 수준에서 작동하는 방식을 이해한다. 가상 메모리 및 페이징에 대한 약간의 지식이 있다.

3) 커널 모드 vs 사용자 모드, 멀티스레딩, 동기화를 이해하고 어떻게 구현되었는지 안다. 네트워크가 어떻게 동작하는 안다. 프로토콜을 알고 소켓 프로그램을 읽을 수 있다.

 

소프트웨어 공학 (Software Engineering)

4. 소스 코드 버전 제어 (source code version control)

1) 날짜별 폴더 백업

2) VSS, CVS/SVN 사용

3) CVS, SVN 기능 사용에 능숙하다. 분기 및 병합 방법, 패치 설정 저장소 속성을 사용하는 방법을 안다.

5. 빌드 자동화 (build automation)

1) IDE에서의 빌드

2) CLI에서 시스템 구축 방법을 안다.

3) 기본 시스템 구축을 위한 스크립트 설정이 가능하다.

6. 자동화 테스트 (automated testing)

1) ..

2) 자동화된 단위 테스트를 작성하며 작성 중인 코드에 대한 좋은 ㄷ단위 테스트 사례를 제공한다.

3) TDD(Test-driven development) 방식으로 코를 작성한다.

 

프로그램 작성 (Programming)

7. 문제 분해 (problem decomposition) 혹은 factoring

1) 재사용을 위한 copy & paste

2) 문제를 여러 기능(함수)으로 분해한다.

3) 전반적인 문제를 해결하는 재사용 가능한 기능, 객체를 제시할 수 있다.

8. 시스템 분해 (systems decomposition)

1) 단일 파일, 클래스 수준으로 처리한다.

2) 동일한 플랫폼, 기술 내에서 문제를 쪼개 설계하여 해결할 수 있다.

3) 여러 기술, 플랫폼에 걸친 시스템을 설계할 수 있다.

9. 의사소통 (communication)

1) ..

2) 동료들의 말을 이해할 수 있다.

3) 동료들과 효과적으로 의사소통할 수 있다.

10. 파일 내 코드 구성 (code organization within a file)

1) ..

2) 함수를 논리적, 접근성별로 그룹화한다.

3) 코드가 영역으로 그룹화되어 다른 소스 파일과의 참조에 대한 주석이 잘 되어 있다.

11. 파일 간 코드 구성 (code organization across files)

1) ..

2) 연관된 파일들끼리 폴더별로 정리한다.

3) 각 파일에 하나의 클래스 정의, 하나의 기능 구현 등 고유한 용도가 있다.

12. 소스 트리 구성 (source tree organization)

1) ..

2) 코드를 논리 폴더로 기본 분리한다.

3) 순환 종속성, 바이너리, 라이브러리, 문서, 빌드, third-party 코드가 적절하게 정리되어 있다.

13. 코드 가독성 (code readability)

1) ..

2) 파일, 변수, 클래스, 메서드 등에 이름을 잘 부여한다.

3) 긴 함수, 비정상적인 코드를 설명하는 주석, 버그 수정, 코드에 대한 추정이 없다.

14. 방어적 코딩 (defensive coding)

1) ..

2) 모든 인수를 확인하고, 크리티컬한 조건에 대해서는 assert문을 이용한다.

3) 리턴 값을 확인하고 Exception을 항상 체크한다.

15. 오류 처리 (error handling)

1) ..

2) 기본 error handling

3) 오류, 예외 처리로 프로그램이 양호하게 유지되고, 리소스, 연결, 메모리가 모두 적절하게 정리된다.

16. IDE

1) ..

2) 메뉴를 사용해 IDE를 효과적으로 사용할 수 있는 인터페이스 사용 방법을 알고 있다.

3) 가장 많이 사용되는 작업에 대한 키보드 단축키를 알고 있다.

17. API

1) 문서를 자주 찾아본다.

2) 가장 자주 사용하는 API를 기억한다.

3) API에 대한 방대하고 심층적인 지식이 있다.

18. 프레임워크

1) ..

2) 인기 있는 프레임워크에 대해 알고 사용해 본다.

3) 전문적으로 하나 이상의 프레임워크를 사용하며, 사용한 프레임워크를 효과적으로 쓸 수 있다.

19. 요구 사항

1) 주어진 요구 사항을 코드로 작성한다.

2) 요구 사항에 대해 누락된 사례에 대한 질문을 제시한다.

3) 전체 그림을 이해하고 필요한 스펙을 제시할 수 있다.

20. 스크립팅

1) ..

2) 배치 파일, 쉘 스크립트 작성할 수 있다.

3) perl, python, ruby, VBscript, powershell 작성할 수 있다.

21. 데이터베이스

1) ..

2) 기본 데이터베이스 개념, 정규화, ACID, 트랜잭션을 안다.

3) 실행해야 할 쿼리를 생각하고 정규화된 데이터베이스 스키마를 설계할 수 있다. 뷰, 저장 프로시저, 트리거 및 사용자 정의 유형을 능숙하게 사용할 수 있다. 클러스터형 인덱스와 비클러스터형 인덱스의 차이점을 알고 있다. ORM 도구 사용에 능숙하다.

 

경험 (Experience)

22. 전문적 경험을 가진 언어 (languages with professional experience)

1) 명령형, 객체지향형 언어를 사용한다.

2) 명령형, 객체지향 및 SQL 언어를 사용한다. 정적/동적 타입(static vs dynamic typing), weak vs strong typing, 정적 타입 추론(static infeerred types)에 대해 이해한다.

3) 함수적인 언어를 알고, 지연평가(lazy evaluation), currying, 후속문(continuations)  이해한다.

23. 전문적인 경험을 가진 플랫폼 (platforms with professional experience)

1) 1개

2) 2~3개

3) 4~5개

24. 전문적인 경험 기간 (years of professional experience)

1) 1년

2) 2~5년

3) 6~9년

25. 도메인 지식 (domain knowledge)

1) ..

2) 도메인에서 하나 이상의 제품에 대해 작업한다.

3) 동일한 도메인에서 여러 제품을 작업한다.

 

지식 (Knowledge)

26. 도구 지식 (tool knowledge)

1) 기본 IDE를 사용한다.

2) 널리 사용되는 표준 도구를 사용한다.

3) 편집기, 디버거, IDE, 오픈 소스 대안 들에 대해 알고 있다. Scott Hanselman의 툴을 알고, ORM 툴을 사용한다.

27. 노출된 언어 (languages exposed to)

- 22번 문항과 동일

28. 코드베이스 지식 (codebase knowledge)

1) ..

2) 코드 레이아웃 및 시스템 빌드에 대해 이해한다.

3) 코드 베이스에 대한 작업 지식, 몇 가지 버그 수정 및 일부 작은 기능을 구현한다.

29. 최신 기술에 대한 지식 (knowledge of upcoming technologies)

1) ..

2) 해당 분야의 향후 기술에 대해 안다.

3) 알파 프리뷰, CTP, 베타를 다운로드하고 기사/메뉴얼을 읽는다.

30. 플랫폼 내부 지식 (platform internals)

1) ..

2) 플랫폼이 내부적으로 작동하는 방식에 대한 기본 지식이 있다.

3) 플랫폼 내부에 대한 깊은 지식이 있고, 가시화시켜 코드가 어떻게 실행되는지 설명할 수 있다.

31. 책

1) ..

2) Code Complete, 정규식 마스터하기 와 같은 책을 읽는다.

3) 디자인 패턴, 피플웨어, 프로그래밍 펄, 알고리즘 디자인 메뉴얼, 실용 프로그래머, Mythical Manmonth 와 같은 책을 읽는다.

32. 블로그

1) ..

2) 기술, 프로그래밍, 소프트웨어 엔지니어링 블로그를 읽고 정기적으로 팟캐스트를 듣는다.

3) 자신이 수집한 유용한 기사 및 도구 모음이 포함된 링크의 글을 블로그에 올린다.

 

728x90

댓글