직장인 대학

최고의 개발자로 성장하기 위해 반드시 필요한 능력은?(feat. 메타인지, 자기 객관화)

동사힐 2021. 5. 29.

안녕하세요~ 테크 기업 전문 취업 전략 컨설턴트이자 생애 로드맵 설계가인, 작가 동사힐입니다. 😊
오늘은 최고의 개발자로 성장하기 위해 반드시 필요한 능력인 메타인지를 살펴보겠습니다.

1. 자신을 '메타인지'할 수 있나요?


IT분야의 취업을 준비하는 주니어 개발자들과 첫 만남 시간에 반드시 실시하는 것이 있습니다.
바로 취업 역량 자가 진단인데요.

이때 반드시 묻는 질문이 있습니다.

자신을 메타인지할 수 있는가?

최고의 개발자로 성장하는 사람은 모두 메타인지를 알고, 이를 적극적으로 활용합니다.
그만큼 개발자에게 메타인지는 반드시 필요한 능력입니다.
단순히 자바, C 이런 개발 지식이 핵심 역량이 아닙니다.
메타인지는 개발자에게 가장 필요한 핵심 역량입니다.

1.1 메타인지는 자기 객관화 능력


초인지라고 하는 메타인지란, 한 차원 높은 생각이라는 뜻입니다. 자신을 객관화하여 성찰하는 사고를 말하죠. 쉽게 말하면 자신이 아는 것과 자신이 모르는 것을 구분하는 능력입니다. 또 자신의 생각과 욕구, 감정과 느낌을 객관적으로 바라보는 것을 말합니다. 예를 들어서, 매우 부조리한 상황에 빠져서 이성을 잃고 분노를 합니다. 이때 메타인지를 할 수 있는 사람은 '아! 내가 부조리한 상황으로 인해서 분노를 하고 있구나'라고 자신 스스로를 인식하게 됩니다.


메타인지(metacognition)는 '고차원', '초월적인' 이라는 뜻으로 고차원의 인지를 의미합니다.

"知之爲知之 不知爲不知 是知也(지지위지지 부지위부지 시지야)"

"아는 것을 안다고 하고 모르는 것을 모른다고 하는 것, 그것이 곧 앎이다." -공자

1970년대 발달심리학자인 존 플라벨(J. H. Flavell)에 의해 만들어진 용어로 '자신의 생각에 대해 판단하는 능력
'을 말한다. ‘자기가 생각한 답이 맞는지’, ‘시험을 잘 쳤는지’, ‘어릴 때의 이 기억이 정확한지’, ‘이 언어를 배우기가 내게 어려울지’ 등의 질문에 답할 때에도 사용되며, 자신의 정신 상태, 곧 기억력이나 판단력이 정상인지를 결정하는 데에도 사용한다. 상위인지라고도 한다.

메타인지는 아이들의 발달 연구를 통해 나온 개념이므로 교육학 등에 주로 등장하는 용어다. 뛰어난 메타인지능력을 가졌다면 적절한 시기에 적절한 도전을 함으로써 학습속도를 빠르게 가져갈 수 있다. 예를 들어, 수영을 한 달 배운 아이가 '나는 100m를 완주할 수 있는가'를 스스로 판단하고, 만약 완주할 수 없다면 나에게 부족한 게 체력인지 기술인지를 스스로 판단하는 데에 메타인지가 사용되므로, 메타인지능력이 높다면 자신의 능력과 한계를 더욱 정확히 파악해 시간과 노력을 필요한 곳에 적절히 투자하므로 효율성이 높아진다. -출처 : 나무위키

이처럼 메타인지는 자신을 객관화해서 볼 수 있는 능력으로, 인간만이 갖고 있는 특성으로 자기객관화 능력입니다.

1.2 메타인지는 성과를 높인다


메타인지는 인지 활동의 효율을 극대화시켜 줍니다.
특히 인간만이 갖고 있는 통찰력은 바로 메타인지를 통해 생겨납니다.
우리의 신체 기관 중 크기 대비 가장 큰 에너지를 소모하는 기관이 뇌입니다.
뇌는 무려 절반 이상의 에너지를 소모하는 이유가 바로 메타인지 때문입니다.
메타인지를 통해 인간은 의사결정을 매우 신속하게 내릴 수 있습니다.
예를 들어서 개발자에게 Git의 State 기능을 설명하라는 질문을 합니다.
이때 개발자는 자신이 이에 대해 알고 있는지 모르는지를 바로 대답할 수 있습니다.
메타인지때문이죠.
그런데 네이버 클로버 AI에 Git의 State 기능을 진술하라는 명령을 내린다면 어떻게 될까요?
실제 DB속 데이터를 모두 검색한 뒤에야 답을 내립니다.
메타인지를 갖고 있는 사람과 DB의 차이가 바로 이러한 프로세스 차이를 만들어냅니다.
네이버나 카카오의 연봉 2억 정도를 받는 S급 개발자들에게 '텐서플로를 활용한 서비스 고도화 프로젝트'를 진행하는데 얼마의 기간이 필요한지 물어보면 프로젝트 완성에 필요한 기간을 매우 정확하게 예측합니다.
또는 특정한 기간 안에 프로젝트를 수행하기 위해서 필요한 인력을 물어보면 역시 매우 정확하게 답합니다.
반면에 개발 실력이 낮은 개발자들은 프로젝트 수행 예측 기간과 실제 프로젝트 수행 기간 간의 오차 범위가 매우 커집니다.
당연히 특정 기간 내 수행하기 위한 필요 인력 역시 제대로 계산하지 못합니다.
실력이 높은 개발자일수록 자신의 프로젝트 수행 능력을 정확하게 파악하고 있습니다.
자신의 프로젝트 수행 능력을 객관적으로 파악하고 있다는 것은 달리 말하면 프로젝트 수행 능력이 매우 높다는 뜻입니다.

1.3 익숙함은 메타인지를 방해한다


주니어 개발자에게 다음과 같이 묻습니다.
"자바(JAVA)를 아나요?"라고 물으면 바로 "네, 압니다. 자바(JAVA)는 객체 지향 언어입니다."라고 답합니다.
그런데 "텐서플로(TensorFlow)를 아나요?"라고 물으면 대부분의 사람들은 모른다고 답합니다.
이렇게 대답하는 이유는 익숙한 것을 안다고 생각하는 오류에 빠져들기 때문입니다.
'안다'와 '모른다'는 것을 바로 판단 내린 1차 근거는 바로 '익숙함'입니다.
자바(JAVA)는 익숙하므로 안다는 판단을 바로 할 수 있고, 텐서플로(TensorFlow)는 익숙하지 않은 것이기에 고민할 여지도 없이 바로 모른다고 판단을 내린 것입니다.
하지만 익숙할 수록 제대로 모르는 경우가 많습니다.
익숙하면 제대로 알지 못하는 경우에도 안다고 생각하고, 더이상 알려고 노력하지 않기 때문이죠.
온라인으로 코딩을 배울 수 있는 사이트 인프런이 있습니다.
https://www.inflearn.com/
주니어 개발자들이 많이 애용하는 사이트죠.
인프런에서 강의를 듣는 주니어 개발자들에게 다음과 같이 질문합니다.

"인프런에서 강의를 들으면 개발 실력이 향상되나요?"

실력있는 주니어 개발자들은 “실력이 향상되지 않는다”라고 답했지만, 실력이 부족한 개발자일수록 “실력이 향상된다”고 대답합니다.
이 결과에서 정확히 파악할 수 있는 것은 높은 실력을 지닌 주니어 개발자일수록 단순히 강의를 듣는 행위를 자신의 개발 실력이 향상되는 행동이라고 여기지 않습니다.
실력이 낮은 주니어 개발자일수록 강의를 듣는 행위가 곧 자신의 개발 실력이 향상되는 것으로 생각합니다.

2. 메타인지와 개발 실력의 상관 관계


메타인지와 개발 실력은 매우 깊은 상관 관계를 맺습니다.
자신의 개발 실력을 객관적으로 파악할 수 있는 사람만이 부족한 개발 실력을 키우기 위해 효율적으로 학습하기 때문이죠.
자신의 개발 실력을 객관적으로 파악하지 못하는 사람은 필요한 노력을 하지 못합니다.
무엇을 어떻게 해야 할 지도 모르죠.
그러니 실력이 성장할 수 없습니다.
이러한 일련의 과정은 모두 메타인지의 작용입니다.

2.1 실제로 개발을 해야만 개발 실력이 늘어난다


모두가 알다시피, 개발 실력은 강의만 듣는다고 절대 향상되지 않습니다.
자신이 직접 습득한 지식을 바탕으로 개발을 실제로 해야만 개발 실력이 성장합니다.
실력있는 개발자는 강의를 통해 무엇인가를 배우면 그것을 활용해서 실제로 프로젝트를 해봐야 실력 향상으로 이어진다는 것을 알고 있습니다.
실력이 부족한 개발자들은 단지 인프런 강의를 듣는 것이 자신의 실력 향상으로 이어질 거라고 착각을 합니다.
정말 많은 주니어 개발자들이 이런 익숙함의 오류에 빠져 있습니다.
이것을 해결하지 못하면 최고의 개발자로 성장할 수 없습니다.

2.2 구현하지 못하면, 아는 것이 아니라 익숙한 것이다.


언어로 표현할 수 없다면 그것은 아는 것이 아닙니다.
막연하게 아는 것 같은 느낌일뿐이죠.
대개 많이 들었거나, 많이 보아서 익숙할 뿐입니다.
그런데 대부분의 주니어 개발자들은 언어로 표현할 수 없는 익숙한 것을 자신이 안다고 생각합니다.

"자바스크립트를 압니까?"


이러한 질문에 대부분은 안다고 대답하죠.

  • 자바스크립트 강의를 들었다.
  • 자바스크립트 코딩테스트를 몇 문제 풀어보았다.
  • 자바스크립트의 일부 기능을 프로젝트에 활용하였다.


대부분 이 정도 경험을 해보고, 안다고 생각을 하죠.
자바스크립을 익숙하게 여깁니다.
익숙하게 여기기 시작하면 더이상 발전이 없습니다.
한 번 익숙하게 여겨서, 아는 것 같은 느낌이 들면 더 이상 깊이 파고들지 않기 때문이죠.
그러다보니 자바스크립트를 활용해서, 프로젝트를 구현하거나 알고리즘 코딩 테스트를 풀어낼 수 있는 사람들은 매우 적습니다.

“1시간 내에 자바스크립트로 회원 가입 페이지를 구현하시오"

  • 보안 인증 토큰을 구현하시오.
  • API를 호출하시오.
  • 비동기 방식으로 컴포넌트를 구현하시오.


지금 당장 구현할 수 있으신가요?
이러한 프로젝트를 실제로 구현할 수 있는 사람은 매우 적습니다.
그뿐만 아니라, 이런 프로젝트를 구현할 수 있도록 자신의 실력을 키우는 방법을 알고 있는 사람도 매우 적습니다.
방법을 알고 있었다면, 이미 이 프로젝트를 구현했을 것입니다.

다시 한번 같은 질문을 해보겠습니다.

"자바스크립트를 정말 압니까?"

아까와 동일한 대답을 하기가 어려울 것입니다.

2.3 최고의 개발자로 성장하기 위한 방법을 설명할 수 있어야 한다


내적 동기가 충분하고, 자신의 멘탈이 단단하다면 자신의 실력을 키우는 것은 쉽습니다.

“개발 실력을 키우려면 어떻게 해야 하나요?"

이 질문에 대한 답을 다른 사람에게 충분히 설명할 수 있는 사람만 최고의 개발자로 성장할 수 있습니다.
그런데 거의 대부분의 개발자들은 최고의 개발자로 성장하기 위한 방법을 다른 사람에게 설명하지 못합니다.
막연하거나 추상적인 수준이죠.

  • 개발 실력을 키우려면 지금 당장 해야 하는 것은 무엇인가요?
  • 최고의 개발자들은 시간을 어떻게 활용하나요?
  • 최고의 개발자들은 아침에 일어나면 무엇부터 하나요?
  • 최고의 개발자에게 반드시 요구되는 능력은 무엇인가요?
  • 개발자의 덕목은 무엇인가요?
  • 개발 실력을 키우려면 무슨 언어로 프로젝트를 어떻게 해야 할까요?
  • 들은 내용을 내것으로 만드려면 어떻게 해야 하나요?
  • 무슨 방법으로 언어를 학습해야 가장 큰 효과를 낼까요?
  • 개발을 할 때 집중력을 어떻게 유지할까요?

위 질문 중에서 개발 실력을 키우기 위해서 가장 핵심적으로 알아야 할 것은 무엇인가요?
그리고 그 방법을 다른 사람에게 설명할 수 있나요?
여기서부터 시작입니다.

3. 자바(JAVA)와 C 중 무엇을 선택하겠습니까?


3년 전입니다.
A 기업에서 지원자들에게 코딩테스트 응시 전에 자신의 언어를 선택하게 했습니다.
선택 가능한 언어는 자바(JAVA)와 C 였습니다.
지원자 25명 중 23명은 자바(JAVA)를 선택했습니다.
2명만 C를 선택했습니다.
그런데 문제의 난이도가 너무 높았습니다.
대부분 1문제도 풀지 못했습니다. 문제 난이도가 높아서 변별력이 떨어졌던 것이죠.
인터뷰의 기회는 25명 중 누가 얻었을까요?
단 2명이었습니다.
그 기준은 무엇이었을까요?
그렇습니다.
C를 선택한 2명만 인터뷰를 볼 수 있었고, 최종 합격을 하였습니다.
23명은 자신이 잘 안다고 생각하는 자바(JAVA)를 선택했지만, 사실 아는 것이 아니었습니다.
익숙했을 뿐이죠.
2명은 자신이 잘 안다고 생각하는 언어를 선택하지 않았습니다.
자바(JAVA)도 모르고, C도 모른다고 생각했습니다.
그래서 A 기업에서 요구하는 C를 선택했고, 인터뷰 기회를 얻었습니다.
그렇습니다. A 기업은 지원자들의 메타인지 능력을 본 것입니다.

3.1 아는 것과 익숙한 것을 구분하라


이처럼 익숙함에서 비롯되는 오류의 가능성은 언제나 존재합니다.
왜 이러한 오류가 발생했을까요?
자바(JAVA)는 SW 전공을 하면서 가장 먼저 배우는 언어입니다.
그러다보니 자바(JAVA)는 약간 익숙한 정도인데, 그걸 안다고 착각하고 집중해서 학습을 하지 않으니 실제 코딩테스트를 해보면 제대로 풀어내지를 못합니다.
그저 1학년때 가장 먼저 배워서 조금 익숙해진 정도였던 것이죠.

  • 익숙하니까 제대로 학습을 안합니다.
  • 익숙하니까 깊게 파고들지 않습니다.
  • 익숙하니까 프로젝트를 많이 하지 않습니다.
  • 익숙하니까 다양한 유형의 코딩테스트를 풀어보지 않습니다.

이런 상태로 코딩 테스트를 보면 당연히 좋은 점수가 나올 리 없습니다.
그런데도 자바 코딩테스트는 자신있게 풀 수 있다고 착각합니다.
코딩테스트 뿐만 아니라 자바 프로젝트를 실제로 수행해보면, 대부분 제대로 된 퍼포먼스를 내지 못하죠.
이렇듯 개발 실력과 메타인지의 상관관계는 매우 높습니다.

  • 메타인지의 수준이 높아야 자신의 개발 실력을 비약적으로 키울 수 있습니다.
  • 메타인지로 더 많은 코딩테스트 문제를 풀 수 있습니다.
  • 메타인지를 잘하면 프로젝트에서 지금보다 더 큰 퍼포먼스를 이룰 수 있습니다.
  • 메타인지를 갖춘 개발자가 기업에서도 뛰어난 개발자로 인정을 받을 수 있습니다.


그렇다면 메타인지를 제대로 갖추기 위한 방법은 무엇일까요?

이 방법은 다음 포스팅에서 이어서 쓰도록 하겠습니다.



어떠셨나요? 도움이 되셨나요?
그러면 다음에도 더욱 좋은 글로 돌아오겠습니다.
궁금한 사항 있으시면 댓글로 남겨주세요.
도움이 필요하시다면 사연을 적어서 이메일을 보내주세요.
dongsahill@gmail.com
그리고 도움이 되셨다면 공감과 구독 부탁드려요.
이상으로 동사힐이었습니다!
읽어주셔서 감사합니다. 😊

반응형

댓글

💲 추천 글