어떤 회사가 요구하는 기술적 능력

1.
소프트웨어 개발자와 소프트웨어 엔지니어는 다른 뜻,같은 뜻? 일반적으로는 같은 의미입니다. 다만 우리는 소프트웨어 개발자를 그저 코딩(Coding), 프로그래밍언어로 표현하는 것을 한정해 코더라는 의미로 많이 쓰입니다. 좋은 일은 아닙니다. 소프트웨어 엔지니어가 가져야 할 많은 기술중 오직 프로그래밍언어만을 가치가 있다고 생각하기 때문이겠죠.

프로그래밍언어를 배우고 프로젝트를 몇 번 하면 능숙하게 사용하니까 도메인지식(Domain Knowledge)로 평가합니다. 초급,중급,고급을 가르는 기준도 역시 도메인지식이고 소프트웨어개발회사, 특히 솔류션회사라는 곳은 도메인지식이 많은 사람들이 승진합니다. 그러다 업무지식으로 영업을 겸합니다.

2.
인도에 있는 어떤 회사에서 생각하는 ‘개발자들이 알아야 하는 기술’들입니다. 엔지니어의 등급을 네단계로 나누고 각 단계에 필요한 기술경력을 요구합니다.

재미있는 점은 모든 엔지니어는 반드시 Communication Skills중 Good grammar,Ability to understand discussions well, Ability to articulate a concept / subject well,Penchant for reading 중 Avid reader of tech and industry blogs, articles, news and books etc을 해야 한다는 점입니다. 소통능력과 읽기능력은 필수, 쓰기는 어느 정도 해야 한다고 하는데 우리의 경우는 이런 기술을 기술로 생각하지 않습니다. 그냥 품성의 문제로 생각하죠.(^^)

한번 자신이 가진 능력을 기준으로 등급을 매겨보세요. 어디에 해달될까요? 

Capability Matrix

 

Skill Software Engineer (2+ yrs) Sr Software Engineer (4+ yrs) Tech Lead (8+ yrs) GM (10+ yrs)
Algorithmic skills
Understand and dissect complex problems quickly Must have Must have Must have Must have
Understand trade-offs between space / time complexity Must have Must have Must have Must have
Come up with solutions with minimal space / time complexity Should have Must have Must have Must have
Reasonably mathematically savvy Bonus Bonus Should have Should have
Familiarity with graph theory, graph traversals etc Bonus Bonus Should have Should have
Data Structures
Basic Knowledge of data structures – Hashmaps, Binary tree, B-Tree, B+Tree, Linked Lists etc Should have Must have Must have Must have
Understanding of trade-offs between various data structures etc Should have Must have Must have Must have
Advanced Knowledge of implementation of data structures – Hashmaps, Binary tree, B-Tree, B+Tree, Linked Lists etc Should have Should have Must have Must have
RDBMS
Basic RDBMS knowledge Must have Must have Must have Must have
Advanced RDBMS knowledge Should have Should have Must have Must have
Query optimization Should have Should have Must have Must have
RDBMS tuning Should have Should have Must have Must have
Replication and Clustering Should have Should have Must have Must have
RDBMS Scalability Should have Should have Must have Must have
Caching
Basic knowledge of caching Should have Must have Must have Must have
Advanced caching strategies Should have Should have Must have Must have
Design and modeling
Strong knowledge of OOPs Must have Must have Must have Must have
Design patterns and application thereof Should have Must have Must have Must have
Understanding of KISS, YAGNI, DRY, SOC, SRP, Loose Coupling etc Should have Must have Must have Must have
Networking
Basic knowledge of DNS Should have Must have Must have Must have
Protocol level understanding of TCP / UDP Should have Should have Must have Must have
Deep understanding of OSI stack Should have Should have Should have Must have
Basic understanding of Routing concepts Should have Should have Should have Must have
Socket programming
Ability to implement a protocol server/client Should have Must have Must have Must have
Ability to write high performance server/client Should have Should have Must have Must have
Understanding of Async I/O Should have Should have Must have Must have
Understanding of various network protocols Should have Should have Should have Must have
Web application development
Basic HTML and CSS Must have Must have Must have Must have
Basic Javascript Should have Must have Must have Must have
Protocol level knowledge of HTTP Should have Must have Must have Must have
Advanced HTML and CSS Should have Should have Must have Must have
Advanced Javascript Should have Should have Must have Must have
Ajax / Flex Should have Must have Must have Must have
Understanding of MVC architecture Should have Must have Must have Must have
Multi-threading and concurrency
Basic knowledge of multi-threading Must have Must have Must have Must have
Advanced knowledge of multi-threading / trade-offs Should have Must have Must have Must have
Automated Testing
Understanding of unit testing Should have Must have Must have Must have
TDD Should have Must have Must have Must have
Writing code conducive to Automated testing Should have Must have Must have Must have
Planning and writing functional tests Should have Must have Must have Must have
Planning and writing stress tests Should have Should have Must have Must have
Knowledge of unit and functional testing frameworks for relevant platforms Should have Should have Must have Must have
OS Concepts
Understanding of OS concepts, kernel, interrupts, native libraries etc Bonus Bonus Should have Must have
Understanding of OS process scheduling concepts Bonus Bonus Should have Must have
IPC / RPC / Web Services
Knowledge of different forms of IPC / RPC Should have Must have Must have Must have
Knowledge of various protocols involved and trade-offs Should have Should have Must have Must have
Basic implementation knowledge of any one RPC mechanism Should have Must have Must have Must have
Advanced knowledge of SOAP / REST / other remoting Should have Must have Must have Must have
Security
Knowledge of OWASP Bonus Should have Must have Must have
Knowledge of Network layer security Bonus Bonus Must have Must have
Knowledge of secure architectures Bonus Bonus Should have Must have
Internationalization
Knowledge of Unicode and its implementations Bonus Should have Must have Must have
Knowledge of implementation of internationalized interfaces Bonus Should have Must have Must have
Understand implications of internationalized data in RDBMS, searches, indexing etc Bonus Should have Must have Must have
Development Methodologies
Knowledge of Agile, XP, Scrum, TDD and pairing Bonus Should have Must have Must have
Knowledge of Identifying code smells and Refactoring Should have Must have Must have Must have
Scaling
Write and plan stress tests to determine scalability Bonus Bonus Must have Must have
Ability to identify scalability and performance bottlenecks quickly Bonus Bonus Must have Must have
Ability to determine whether an application is / will be disk bound, memory bound, cpu bound, network bound etc Bonus Bonus Must have Must have
Understanding of all layers from the hardware to the application to determine bottlenecks Bonus Bonus Must have Must have
Knowledge of scaling techniques on the application side such as Async IO, caching, multi-threading etc Bonus Bonus Must have Must have
Knowledge of scaling techniques on the data side such as Identifying optimized data structures, caching strategies, Horizontal / Vertical partitioning, replication / clustering Bonus Bonus Must have Must have
Knowledge of scaling techniques on the app server side such as clustering and load balancing Bonus Bonus Must have Must have
System Administration
Basic Unix commands and shell operation (including grep, awk, sed, regex and shell / perl scripting) Bonus Should have Must have Must have
Basic Windows administration Bonus Should have Must have Must have
Usability
Knowledge of information architecture Bonus Should have Must have Must have
Ability to design intuitive UI Bonus Should have Must have Must have
Communication Skills
Good grammar – written and oral Must have Must have Must have Must have
Ability to understand discussions well Must have Must have Must have Must have
Ability to articulate a concept / subject well Must have Must have Must have Must have
Good command over vocabulary Should have Should have Must have Must have
Penchant for Writing
Frequently writes internal / external documents / articles Should have Must have Must have Must have
Conducts internal and external training sessions Should have Should have Must have Must have
Penchant for reading
Avid reader of tech and industry blogs, articles, news and books etc Must have Must have Must have Must have
Strategy and Vision
Business acumen Bonus Bonus Must have Must have
Ability to determine features and product strategy Bonus Bonus Must have Must have
Platform Selection
Ability to select languages, OS, RDBMS, Data structures, Frameworks, libraries, Hardware for an application Bonus Bonus Must have Must have
Understand performance, cost and other trade-offs between myriad platform choices Bonus Bonus Must have Must have
Architecture
Understanding of deployment architectures and their trade-offs Bonus Bonus Must have Must have
Capacity Planning
Ability to plan and conduct capacity planning exercises Bonus Bonus Must have Must have
Soft Skills
Likeable / people’s person Should have Must have Must have Must have
Ability to garner respect amongst peers by demonstrable knowledge and actions Should have Must have Must have Must have
Proactive mentor who loves to impart and share knowledge Should have Must have Must have Must have
Attract and Recruit ‘A’ players Bonus Bonus Must have Must have
Train and grow team Bonus Bonus Must have Must have
Contribute to process evolution Bonus Bonus Must have Must have
Motivate and inspire the team Bonus Bonus Must have Must have
Product Evangelism
Frequently blog Bonus Should have Must have Must have
Misc
Humility Must have Must have Must have Must have

4 Comments

  1. whiterock

    표의 Skill들 보고 헉! 했습니다. 게다가 “Must Have”만 줄창..ㅡ,.ㅡ;;;;

    Reply
    1. smallake

      인도 회사지만 존경스러웠습니다.

      저는 소프트웨어엔지니어가 아니지만 대표를 할 때 이정도로 Skill Path를 두지 못했는데…

      반성합니다.

      Reply
  2. 8년차개발자

    최고급 개발자라고는 생각하지 않았지만, 왠지 그동안 너무 자만에 빠져서 공부를 게을리 했다는게 실감나네요.

    외국에서 전문가로 인정받는 8년차가 가진 기술적 능력의 절반 정도밖에 만족을 못하니 원….
    영어만 잘하면 미국 가서 최고급 대우 받을 수 있을 것으로 생각한건 정말 제 착각이 지나쳤던 것 같네요.

    Reply
    1. smallake

      어떤 일을 하시는지 모르지만 대부분 한국 개발자들은 SI와 관련된 일을 합니다. 따라서 기술을 습득하거나 개발프로세스를 높이는 기회를 잡기 쉽지 않습니다.

      그저 도메인과 관련된 지식을 높힐 수 있습니다. 그래야 등급판정을 할 때 좀더 유리합니다.

      SI가 아니면 좀더 다를 수 있지 않을까요?

      Reply

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.