코딩 잘하는 방법(고급 프로그래머로 가는 길)

코딩잘하는 방법, 프로그래밍 잘하는 비법이라는게 있을까요? 네, 있습니다. 오늘은 코딩 스킬이라는 다소 추상적인 주제를 다뤄보려고 하는데요. 최근에 좋은 프로그래머는 어떤 사람인지에 대한 고민이 많습니다. 너무 추상적인 주제인 것 같기도 하네요.

크게 5가지 정도로 코딩을 잘하기 위해 지켜야 할 내용을 정리했는데요. 실천하기 쉬운 내용들은 아니지만, 읽어보시면 좋은 개발자가 되는데 큰 도움이 되실 거에요.

학습 능력이 중요하다

동료 개발자들과 이야기를 나누다보면 자신이 알고 있는 기술에 대해 잘 설명하는 사람이 있습니다. 경험상 이런 분들과 일을 하면 그 프로젝트는 순항하더라구요. 하지만 대부분의 사람들은 막연히 안다는 느낌은 있지만 막상 설명하기는 어려워합니다. 내향적인 성격탓인 경우도 간혹 있지만, 이런 문제는 메타인지가 낮은데에서 비롯되는 경우도 많습니다. 메타인지는 타고나는 것도 있지만 후천적으로 훈련이 가능하다고 합니다. 본인이 알고 있다고 생각하는 기술을 글이나 말로 표현해보는 연습을 하면 도움이 됩니다.
IT분야는 매일 새로운 기술이 생기고 사라지기를 반복하죠. 물론, 회사에 고용되어 몇년간 같은 일만 하시는 분들도 많이 있습니다. 하지만 Senior 개발자, S/W Architect 처럼 레벨업을 하시고자 한다면 새로운 언어, 도구, 기술을 최소한 설명할 수 있는 수준으로 배워둬야 합니다. 기회는 준비된 사람만 잡을 수 있고, 특히 회사에 소속되어 있다면 기회라는 건 자주 오지 않더라구요.

더 나은 방법이 있는지 고민하라

매번 같은 언어, 같은 방식으로 코딩만 반복하면 당연히 실력이 늘지 않겠죠. 개발 업무를 하다보면 과거에 작성했던 코드를 재사용하는 경우도 많을텐데요. 코드를 그대로 가져다 쓰기보다는 더 나은 방식이 새로 나오지 않았는지, 더 빠르게 만들수 있는 여지는 없는지를 고민하는 자세가 필요합니다.

기능단위로 모듈화 하라

작성하고자 하는 소프트웨어에 필요한 기능 명세를 미리 파악하고 기능단위로 모듈화를 해야 합니다. 모듈은 실행가능한 프로그램 일수도 있고, 파일단위 일수도 있고, 객체 일수도 있습니다. 규모와 관계없이 기능단위를 가진 모듈을 작성하고 모듈간의 인터페이스를 통해 전체 시스템이 동작되도록 해야 합니다.

그럼 모듈화의 장점을 나열해 볼까요?
1. 모듈화 작업이 잘 되면 모듈단위의 재사용성이 높아져, 전반적인 생산성이 올라갑니다.
2. 모듈을 작업단위로 구분할 수 있어 팀단위 작업이 쉬워지죠.
3. 프로그램에 오류가 발생했을 때, 오류 발생 위치 추적이 쉽습니다. 오류가 발생한 기능에서 역추적하면 되죠.
4. 코드 가독성이 높아지고, 모듈단위로 버전업그레이드가 가능하므로 유지보수가 편합니다.

본인이 짠 코드를 검증하라

실력있는 개발자들은 코드 작성시에 테스트 용이성(Testability)를 염두에 둡니다. 원하는 기능이 되도록 구현하는 건 의외로 빨리 됩니다. 소프트웨어 개발 분야가 컨셉증명(PoC), 프로토타이핑이 상대적으로 쉬운 이유죠. 하지만 문제는 원하지 않는 동작 즉, 오류를 막는데 시간이 훨씬 더 걸린다는 점입니다. 원하는 동작 하나를 검증하기 위한 테스트 케이스는 한개이지만, 의도하지 않은 동작에 대한 테스트 케이스는 수십-수백가지 일수도 있습니다.

예를 들어, 계산기 프로그램에서 더하기 기능을 만든다고 생각해보죠. 더하기 기능이 되는지 검증하는 건, “1 + 1” 을 입력으로 넣었을 때, 2가 나오는지 확인하면 됩니다. 하지만, “1 +” 만 입력으로 넣으면, “+ 1″은 어떤가요? “1 – 1″은요? “1 #$% 1” 을 입력으로 넣는 경우는 어떻게 될까요?
경험이 많은 개발자들은 이 사실을 잘 알고 있죠. 그래서 유닛테스트를 작성하거나 테스트 주도 개발과 같은 방법론에 관심을 가집니다.

많이 읽고, 많이 짜보기

다른 사람의 코드를 많이 읽어보는 것, 그리고 코딩을 많이 해보는 것.
당연한 이야기이지만 코딩을 잘하는 가장 기본적이고 확실한 방법이겠죠.
개발이 활발한 오픈소스 프로젝트들이 많습니다. 마음에 드는 프로젝트를 골라 Commit들을 읽어보는 것도 좋고, 직접 오픈소스를 운영하거나, 참여한다면 더욱 좋겠죠.

Open-source software list - OneWeb TN
오픈소스 프로젝트

마치며,

쓰고 보니 뜬구름 잡는 이야기가 되었네요. 저도 잘 지키지는 못하는 내용들이지만 포스팅하면서 한번 더 마음에 새겨 봅니다.