개인 기술 부채
누구에게나 개인적인 기술 부채가 있을겁니다.
기술 부채의 특징은 금융에서 말하는 부채와는 큰 차이가 있습니다.
기술 부채란?
개인의 기술 부채는 내가 블랙박스로 두는 기술적인 분야를 말하는 걸로 보입니다. 누군가에게는 보이기도, 보이지 않기도 합니다.
키보드로 타이핑을 하는 이 순간에도, 폰노이만 아키텍쳐의 입출력 장치와 산술 제어장치를 이해못해도 타이핑은 칠 수 있는 것처럼요. 모를 수도 있죠. 몰라도 상관없다고 할 수도 있는데, 코더는 몰라도 되겠지만, 소프트웨어 엔지니어는 결국 알아야만 한다고 생각합니다.
설계를 하려면, 아키텍처를 이해하려면, 더 새롭고, 멋진 일을... 아니 내가 하는 일을 줄이려면 알아야 할 것 같습니다.
제가 자주 하는 비유인데, 3D 그래픽 디자이너가 채도, 명암을 조정하는 프로그램의 한 기능을 이용한다고 생각해봅시다. 감각적으로 슬라이더로 된 설정값을 마우스로 이리 저리, 숫자를 바꾸면서, 이게 더 보기 이쁜가? 저게 더 좋나? 하는 감각적으로 결정하는 것 말고, 이 설정이 결과의 어느 것에 영향을 주고받는지를 이해한 상태라면, 감각적으로 조정만 하는 것과는 결과가 다르지 않을까요?
기술 부채의 특징
금융의 부채는 빚을 갚으면 원금을 상환할 수 있지만, 기술 부채는 이자가 미친듯이 늘어납니다. 부채가 없다고 느끼면 아예 보이지 않다가, 인식하는 순간 부채가 쌓여 보일 수도 있습니다.
기술 부채는 상환 하는 순간, 시야가 넓어져 부채가 더 커질 수도 있습니다.
소프트웨어 엔지니어에게 기술 부채는 보통 어떤게 있을까요?
컴퓨터 구조, 데이터베이스, 네트워크같은 컴퓨터 과학 관련 기초부터 수학, 과학과 같은 기초 학문까지...
어떻게 해결해야 할까
교육기관에서 배우는 시점에서의 컴퓨팅 관련 지식은 그 시점에 봤을 때는 전혀 와닿지가 않는 것 같습니다. 그래서 실무 경험이 있다면, 끊임없이 본인이 아는 지식을 실무와 연결하고, 일상 생활, 내가 아는 것들과 연결해야 합니다.
예를들면 데이터베이스에서의 인덱싱에 대해 이해해본다고 칩니다. 위키에는 "데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조를 일컫는다."라고 나와있는데, 이렇게 하면 와닿나요? 내가 아는 언어로 바꾸어야 합니다.
예를들어 봅시다.
책이 있다고 치자. 책에는 페이지 숫자가 있긴 한데, 중요한 내용이 있으면 포스트잇으로 표시를 하잖아? 이런게 인덱스라고 볼 수 있어.
뭐 이런식으로 내가 아는 것들과 연결하면서 확장해나가는 거죠.
기술 부채 상환은 진행중...
저 또한 기술 부채가 많다고 생각해, 위와 같은 방법으로 하나씩 주제를 잡고 부채를 상환해 나가고 있습니다.
부채를 상환한 다음에는?
저도 모르겠습니다. 기술을 자유롭게 이용해 뭔가 멋진 일을 해볼 수 있지 않을까요?