아는 것과 해본 것의 차이

최근 지인과의 대화 중 그가 나에게 OO대해 알고 있는지 물어봤다.
간단하게 알고 있는 수준에서 대답은 했지만, 그 뒤 내가 무엇을 알고 무엇을 모르는지에 대해 알고 싶어졌다.

소위 말하는 메타인지인데, 생각에 대한 생각, 인지에 대한 인지라고 위키피디아는 말한다.

프로그래밍에 있어 OO에 대해 안다는 것은 무엇인가.

안다.

  1. 정의
  2. 공식 문서의 Getting Started를 읽고 실행
  3. 공식 문서의 많은 부분을 파악
  4. 프로덕션 레벨에서 사용(물론 이 안에서도 수없이 많이 구분될 수 있다고 생각)
  5. 소스코드의 대부분을 파악
  6. 만약 오픈소스라면 공헌
  7. 내가 만든 프로그램

nginx에 대해 아는가? Spring에 대해 아는가? 둘 다 실제 서비스 환경에서 사용한 기술들이지만 어디가서 알고 있다고 말하기가 부끄럽다.

처음 개발에 입문한 후 이력서를 쓰기 시작했을 때, 나의 이력서 속 보유 기술란은 칸이 모자랄 정도였다.
HTML, CSS, Javascript, MySQL, NGINX, Google App engine, Python, Flask, SqlAlchemy, … 등등 나를 스쳐갔던 모든 것이 너나 할 것 없이 그 자리에 있길 원했다.
보잘것 없는 실력을 숨기고 어떻게든 일자리를 얻기 위해서였을까? 정말로 그 시절의 내가 알고 있다고 믿었던 것일까?

4~5년이 지난 지금 기억하려해도 잘 기억나지 않지만, 현재 나는 위에 쓰여진 기술 중 그 어떤것도 잘 알고 있다고 하지 않는다.
‘다만 사용해본적이 있다’정도의 약간은 자기 방어적인 말로 언제있을지 모르는 추궁에 대비한다.

지금 만약 다시 이력서를 쓴다면, 첫 이력서에 있던 보유 기술들은 대부분 지워지고 한 두가지의 언어와 프레임워크가 남아 있을 것이다.
쓰여진 기술들에 대해 잘 알고 있냐고 물어본다면 역시나 나의 대답은 “몇 번 써본적이 있다”로 끝을 맺을것이다.

관련 링크