참고자료
우아한 테크코스, 캠프에 도전했다가 떨어진 사람의 이야기, 그리고 우아한 형제들에서 일하고 있으며 '기억보단 기록을' 이란 블로그를 운영하고 있는 이동욱 개발자님의 글, '포프 TV'에서 포프님이 하는 영상을 참고하였다.
정리해보면 크게 7가지로 얘기할 수 있다.
이 두글을 읽고 뽑아낸 공동점은 좋은 개발자가 되기 위해서는 결과보단 과정을 중요시 여겨야 한다는 것이다.
구체적으로 말하자면, 결과적으로 구현되는 기능도 중요하지만 그 기능을 구현하기 위해 얼마나 직관적으로, 효율적으로 맵을 구성하고 그 안에 들어가는 코드를 짰느냐 하는 것이다. 불필요한 코드제거, 리팩토링, 주석처리 , divide and conquer 등 누구나 이해할 수 있게 보기쉬운 코드들 작성했냐는 것이다.
또한 애매하게 이해하고 코드를 작성하지 않고, 모든 내용을 다 이해하고 내가 주체적으로 코드를 작성했는지도 중요하다.
결국 나중에 버그가 났을때 코드를 다 이해하고 있어야 유지 보수가 가능하고 남에게도 쉽게 설명해 줄 수 있는것이다.
결론은 유지보수가 쉽고 남과 유연하게 소통하고 협업하기 위해서는 코드가 쉽게 짜여있어야 하고 내가 모든것을 설명할 수 있어야 하는 것이다. 모든것이 남에게 공개되기 때문에 그 상황을 염두하고 코드를 작성해야한다.
그리고 동욱님은 끊임없이 성장하는지 반문했다. 그리고 그 과정에서 치부를 드러낸다 하더라도 그렇게 했다. 모르는것을 드러내고 공부해가는것. 부끄럽고 용기가 필요한 일이다. 하지만 그러한 성장통이 있어야 자란다. 지극히 당연한 사실이 개발자 세계에서도 관통한다. 또한 성장하려면 나의 문제를 인정하고 열린마음으로 문제를 받아들여 고칠줄아는 자세가 중요하다. 이것 또한 비단 프로그래머에 국한된 것은 아니라고 생각한다.
또한, 무언가 목표를 세우는 것도 좋지만, 도저히 뭘 할지모르겠다면 일단 제일 재밌어보이는걸 하나 선택해서 파고들면 될것같다. 항상 뭐를 시작하는 과정에서 새로운 목표와 공부거리가 생겨나기 때문이다. 그과정에서 성장하기도 한다.
항상 무언가를 배우면 그 지식을 잘 정리해서 머릿속어딘가에 저장해두자 언젠가는 반드시 사용할 가능성이 있다고 생각하면서. 그리고 그 지식이 필요할때를 잘 알아차리고 그 지식을 바로 적용하여 효율적으로 일처리를 하는 능력. 유연성 창의력이 필요하다.
어떻게든 해결하려고 하는 의지. 그리고 꼼꼼하게 코드를 짜고, 여러가지 경우의 수를 시험해보고 예외상황을 꼼꼼하게 걸러내려는 태도. 말그대로 내 작품에 대한 자부심과 장인정신이 있어야한다.
일을 하게 될때 클라이언트의 요구를 잘 파악하여 일의 본질을 꿰뚫어본다. 이 프로젝트의 결과와 파급효과를 예측하는 통찰력이라고 해야하나. 생각이 멀리까지 뻗어나가고 논리가 뒷받침되어있어 그 생각의 정확도가 어느정도 맞을 정도의 통찰력을 의미한다.
5번과 연계되는 능력이다.
예를들어, 버그로 고민하고 있으면, 내가 지금 어떤 문제로 고민하고 있으며 어떤 방법을 사용하였고 지금 어떤 현상이라는것을 알기쉽고 간결하게 설명해야한다. 새로운 아이디어가 떠올랐으면 아이디어의 출처, 이 아이디어의 전망, 그리고 이 아이디어를 실현시킬수 있는 방법, 그리고 지금 현재 아이디어를 실현시키기 위해 감수해야할 리스크 같은것을 논리적으로 설명할 줄 알아야 한다.
하지만 뭐니뭐니 해도 커뮤니케이션의 핵심은 상대방이 무슨 생각을 하고 있고 그 생각의 기원은 어떻게 시작되었는지 그리고 그 생각이 어떤 방향으로 나아갈 것인지 알아내기 위해 '경청'하고 '질문'하는 것이다. 그럼 딴소리 하지 않게 되고 대화에 '진전'이 생긴다. 물론 말처럼 쉬운것은 결코 아니다. 나 자신을 내려놓을 줄 알아야하고 끊임없는 연습이 동반되어야 한다.
너무나 당연한 얘기지만, 포프님의 영상을 보고 강조하고 싶어서 추가하였다. 다음 글(프로그래밍 입문 언어)에서 자세하게 설명하겠지만, 결론적으로 말하면 컴퓨터의 작동원리와 c 언어를 아는것이다. 내가 코드를 작성하면서 이 코드가 어떤 원리에 의해 어떤 과정을 거쳐서 컴퓨터가 이해하고 그에 따라 움직이는지 아는것은 나중에 엄청난 차이를 만들어낸다고 한다. 결국 숲을 볼수 있어야 최종결과도 상당한 퀄리티를 가지게 된다는 얘기인것 같다.
아직 컴퓨터 병아리 단계라서 와닿지는 않지만 사실 기본을 탄탄히 다지는 것은 프로그래밍 분야를 막론하고 어느 곳에나 적용되는 진리와 같은 얘기이다. 나중에 시니어 개발자가 되었을때 정말 어려운 문제를 해결해 가는데 큰 도움을 주는 등불과 같은 역할을 한다고 한다. 기본을 결코 무시하지 말자.