본문 바로가기
Business

IT 신입 개발자들에게 필요한 역량 - 컴퓨팅 사고

by 마루날 2018. 4. 5.
반응형

최근에 네이버, 카카오, NHN엔터테인먼트 등 판교와 분당에 있는 몇몇 주요 IT기업의 시니어 개발자, 개발 리더, 팀장급 분들을 연속적으로 뵙게되면서 알게 된 것이 몇 가지 있다.


사람 뽑는 것이 쉬운 일이 아니지만, 대기업 또는 중견기업 이다보니 중소기업에 비해 상대적으로 사람을 뽑기는 쉬워 보였다. 적어도 지원자는 경쟁률이 생길만큼 오더라.


그래도 현업에서 필요한 사람들을 선발해야 하기 때문에 여러 가지 방법을 사용하는데, 적어도 코딩을 할 줄 안다는 전제로 선발과정을 진행한다고 한다.


당장 실무에 투입할 수 있는 인력을 원하다 보니, 단순히 코딩을 할 줄 안다가 아닌 문제 해결 능력을 갖춘 실무형 개발자를 원한다. 신입 개발자에게 너무 과한 요구가 아닌가 싶기도 하지만, 대부분의 IT 기업에서 개발자에 가장 중요한 자산이고 경쟁력이다보니 나름 고민을 해서 사람을 뽑는 것 같다.


서류 전형보다 우선 코딩 테스트를 거쳐서 사람을 뽑는 경우가 많은데, 일반적으로 자료구조, 알고리즘 등의 전산학 기초에 대해 충분히 학습하였다면 누구나 풀 수 있을만한 문제들로 구성한다(출처 : tech.kakao.com).


알고리즘과 자료구조는 기본 중에 기본이다. 단순히 정렬 알고리즘에는 퀵소트, 힙소트, 머지소트 증이 있고 자료 구조에 큐와 스택 등이 있다와 같이 정의만 알고 있어서는 안되는 것 같다.


알고리즘을 효율적으로 사용하기 위해 적절한 자료구조를 사용하게 되는데, 알고리즘 적용 대상이 되는 데이터를 이해하여 가장 최적의 알고리즘과 적절한 자료구조를 선택하여 구현할 수 있어야 한다.


이렇게 하기 위해서는 우선 알고리즘과 자료구조를 잘 이해해야 하고, 사용할 수 있어야 한다. 알고리즘이나 자료구조 모두 수학적 기반을 가지고 있기 때문에 익숙해지기 위해서 가장 필요한 것은 많은 문제를 풀어서 수학 공부를 하듯이 많은 코딩을 해보는 것이 좋다.


(주)그렙에서 운영하는 알고리즘 연습 서비스를 이용해보자. 하노이탑과 같은 문제가 레벨5 라고 하니 난이도가 높다고 할 수는 없지만, 그래도 제일 기초부터 차근차근 공부할 수 있을 것 같다.



아니면 (주)사이냅소프트에서 운영하는 한국어 오일러프로젝트 사이트도 있다. 수학적인 문제들을 프로그래밍으로 해결하는 퀴즈 풀이 사이트인데, 사이냅소프트에서 한글로 번역한 사이트를 제공하고 있다.



자료구조와 알고리즘에 자신이 있다고 끝이 아니다. 최근 기술 트랜드에 대한 이해가 필요하다. 클라우드, 독커, 블록체인, 머신러닝 등에 대해서 적어도 개요 수준의 이해를 하고 말로 설명할 수 있어야 한다.

이러한 기업들의 평가 기준을 살펴보면 요즘 초등학생 아이를 둔 학부모들의 가장 큰 관심사인 코딩 교육의 목적이나 배경과 이어져 있는 것 같다.

코딩 교육을 하는 것에 대해서 개인적으로 좀 우려가 되는 부분이 있지만, 앞으로 이 아이들이 자라서 살아가야 할 세상을 예상해보면 인공지능과 로봇이 일반화되는 세상이 될 텐데, 과연 어떤 능력이 인간에게 필요할까 생각해 보게 된다.

결국, 창의성과 문제해결 능력이 가장 필요할 것이다. 이중 문제해결 능력을 여러 가지로 이야기할 수 있지만, 현장에 필요한 능력은 다음과 같이 정리할 수 있다.


분해 : 문제, 자료, 과정을 해결할 수 있는 가장 작은 단위로 세분화
패턴/규칙 : 처리 과정, 데이터 등의 안에 있는 패턴이나 추세, 규칙 등 정의
추상화 : 패턴/규칙이 들어있는 모델을 만들어 일반화한 뒤에 반복
알고리즘 : 추상화나 처리를 효율적으로 처리하기 위한 최적의 솔루션 적용


이런 역량을 카네기 멜론 대학교의 Wing교수가 말하는 컴퓨팅 사고(computational thinking)라고 하는데, 컴퓨팅 사고는 컴퓨터과학자뿐만이 아니라 누구나 갖춰야 하는 기본적인 역량이라고 할 수 있다.



혹시 컴퓨터공학을 전공하고 IT회사에서 개발자로 일하는 것을 목표로 하거나 초등학교 아이의 코딩 교육이 신경쓰인다면 결국 창의성과 문제해결 능력이라고 표현할 수 있는 컴퓨팅 사고를 키우는 노력이 필요하다.

이러한 컴퓨팅 사고력을 높이려면, 문제를 정의하여 분석적으로 해결하고 실제 상황을 기반으로한 알고리즘 교육이 되어야 하고 평소에 문제의 현상만 보지 않고 지속적인 질문으로 본질적인 문제를 찾는 습관을 들이는 것이 중요하다.

이렇게 적어놓았지만, 과연 나는 이렇게 아이를 가르치고 있는지, 직원들을 교육하고 있는지 살펴보면 쉬운 일은 아닌 것 같다. 그러다 보니 우후죽순 코딩 학원만 늘어나는 것 같은데….

지금까지 이야기하는 것들은 뭔가 새로운 것 같고 지금까지 없었던 일인 것 같지만, 창의성이나 문제해결 능력은 컴퓨팅 사고력 이전부터 있었던 주제이고 질문이다.

지금까지 잘 알고 있었던 책을 많이 읽고 새로운 경험을 쌓고 뭔가를 만드는 일을 계속하라는 것에서 문제 정의, 분석, 해결 등의 좀 더 구체적인 학습을 해보라는 것이다. 소비만 하지 말고 생산을 하고 내 안에 새로운 것을 채워보는 일을 시작하는 것이 바로 컴퓨팅 사고력을 높이기 위한 시작이다.





반응형