백문이 불여일타
스킬이라는 말을 먼저 생각해보자. 스킬은 한국어로는 일을 감당할 수 있는 능력인데, 조금 설명이 부족한 것 같아서 영어 위키백과에 있는 설명을 가져왔다.
A skill is the ability to perform an action with determined results often within a given amount of time, energy, or both. Skills can often be divided into domain-general and domain-specific skills.
위의 문장대로라면 스킬은 시간이나 에너지가 주어졌을 때 (혹은 둘 다) 일정한 결과물을 내도록 하는 능력을 말하는 것이다.
그럼 코딩이 왜 스킬인지도 생각을 해보자. 필자는 회사에서 업무에 활용하기 위해 코틀린이라는 언어를 새로익히려고 한다. 그렇다면 코틀린이라는 언어를 가장 빠르게 익히는 방법은 무엇일까? 여기서 프로그래머들이 많이들 얘기하는 격언을 하나 꺼내고자 한다.
백문이 불여 일타
다양한 방법이 있겠지만, 코딩을 배우는 쉽고도 정확한 방법은 많은 코드를 작성해 보는 것이다. 어떤 회사는 면접시에 코드를 작성 한시간이 1000시간이 넘는지를 물어본다고 한다. 많은 코드를 작성해보는 것은 그 코드를 짜는데 많은 시간을 보냈다는 것을 의미한다.
그렇다면 여기서 의문이 생긴다.
단순히 많은 코드를 작성하면 괜찮을까?
스킬이라는 말을 다시 생각해보자. 스킬이 되려면 특정한 시간과 에너지를 투입하여 적절한 결과물이 나와야한다. 그런데 왜 우리가 게임을 해보면 낮은 레벨에서 사용하는 스킬이 있고, 높은 레벨에서 사용하는 스킬들이 있지 않은가? 프로그램의 세계도 동일하다고 생각한다.
높은 레벨의 코드는 단순하게 코드를 많이 해본다고 생기지 않는다. 좋은 코드를 만들기 위해서는 많은 생각을 해야한다. 성능에 대한 테스트가 필요하고, 예외 상황에서의 대처가 필요하고, 확장성이 좋아야 하며 초보가 알아볼 수 있을 정도로 간결함도 있어야한다. 그 코드가 실제로 써먹을 수 있는 코드이기도 해야한다.
다행이도 이렇게 공을 들여서 만든 코드들은 대부분의 경우 프로그래머를 배신하지 않는다. 디지털 세상에서 얼마든지 재활용이 가능한 코드는 프로그래머의 시간과 노력을 아껴준다. 코드 자체가 스킬이 되는 것이다.
좋은 프로그래머가 되기 위해서는 많은 스킬이 필요하다. 또한 몇몇 스킬은 매우 능숙하기도 해야한다.
가장 첫번째로는 편집기이다. 코드를 작성하는 에디터에 대해서는 각자 선호하는 것이 있을 것인데, 중요한 것은 그 에디터를 정말 잘 사용해야하만 한다는 것이다. 장인은 도구를 가린다. 본인의 손에 맞는 도구가 있다는 것은 진짜 중요하다. 그렇지 않으면 코드 작성이 아닌 다른 것에 시간을 많이 빼앗길 것이다.
두번째로는 잘 하는 언어가 최소 하나 이상 있어야 한다. 보통은 잘하는 언어를 기준으로 자바프로그래머, 파이썬프로그래머 이렇게 수식어가 붙게된다. 필자가 생각하기에 언어를 잘 한다는 기준으로 삼는 것이 있는데, 본인이 작성한 코드가 실제로는 어떤 원리로 동작이 되고 있는지 알고 있는가이다. 원리를 아는 것과 모르는 것은 너무도 큰 차이가 있다. 문제가 생겼을 때 대처를 할 수 있느냐 없느냐의 차이를 가른다.
세번째로는 git과 같은 버전관리시스템을 잘 사용하는가이다. 혹시나 이 글을 읽는 사람중에 git과 같은 버전관리시스템을 사용하지 않는 사람이라면, 꼭 사용하시길 추천드린다.
네번째로는 테스트이다. 좋은 프로그래머는 좋은 테스터이다. QA에서 못잡는 버그들도 프로그래머는 잡을 수 있어야한다. 왜냐하면 그 프로그램을 작성한 사람이기 때문이다. 좋은 프로그래머라면 단위테스트, TDD, BDD, 인수테스트, 전체테스트등 수단과 방법을 가리지 말고 테스트에 익숙해져야한다. 테스트코드가 잘 작성되어 있는 코드는 거의 대부분은 좋은 코드이다. 최소한 테스트가 있는 부분에 대해서는 그 코드를 신뢰할 수 있다. 내 자신감을 신뢰하지 말고 테스트를 신뢰하자.
다섯번째로는 사람에 대한 이해이다. 사람에 대한 이해를 말하는 것이 의외일 수 있겠다. 하지만, 프로그래머가 작성한 프로그램의 최종은 사람이다. 고객이 있어야만 프로그램이 있을 수 있는 것이다. 그렇기에 사용하는 사람에 대한 이해가 없다면 좋은 프로그래머가 될 수 없다. 그렇기에 프로그래머는 제작자이자 또한 사용자이어야한다. 흔히 개밥먹기라는 표현을 많이 쓰는데, 만드는 사람이 만든 프로그램을 사용해보지 않는다면 아주 이상한 프로그램이 나오게 될 것이다.