개발자에게 귀찮음은 좋게 발휘되면 창의력의 원천이 된다고 생각한다.
단순작업을 자동화 하는것도 더 중요한 일에 몰두할 수 있도록 도와주는 훌륭한 도구이다.
단순작업을 수작업으로 처리하다 보면 쓸데없는 시간을 낭비하는 경우가 많다.
휴먼에러가 나오는 경우도 허다하다.
마우스 클릭 몇 번만으로 작업을 수행할 수 있는 경우도 있다.
내가 가진 리소스를 이러한 작업들보다는 자기계발에 투자하거나 좀 더 고도화된 업무에 투자하는 편이 좋지 않겠는가?
귀찮은 작업들을 컴퓨터가 처리할 수 있도록 코드를 짜는것이 마냥 쉽지만은 않다.
솔직히 말하면 스크립트를 짜는것보다 그냥 수작업으로 처리하는게 나은 경우도 있는 것 같다.
그러나 확실히 코딩으로 자동화 가능한 부분이 있다면, 자동화하는 것이 여러모로 좋다.
코드를 짜기 전 어떤 기능이 필요한지를 명확히 기술하는 것이 좋다.
기술한 기능들을 어떻게 코드로 구현할 수 있을지 미리 설계를 해보는 것이 코드를 짜는데 들어가는 비용을 줄이는데 큰 도움이 된다.
필자는 설계를 할 때 코드 구조 설계와 시나리오 베이스 설계 이렇게 두 가지 방법으로 설계를 해본다.
이후에는 세부 기능별로 코드를 작성하고, 실제 원하는데로 잘 동작하는지를 테스트해본다.
원하는데로 동작을 잘 한다면 이를 모듈화 할 수 있는 방안을 모색하고 모듈화한다.
모듈화만 잘 해두면 이후 기능을 확장 및 개선을 할 때 보다 수월하게 할 수 있다.
이 때, 방어적으로 프로그래밍을 해두는 것이 초기 디버깅에 도움이 된다.
경험상 초기에는 원인을 쉽게 알 수 없는 에러가 발생하여 기능 개발 시간을 지연시키는 경우가 많다.
이러한 시행착오를 줄일 수 있게 해주는 것이 방어적 프로그래밍이다.
가령 어떤 하나의 기능을 수행하는 함수를 개발할 때 Input 변수들의 Type이 Valid한지 검사하고 리턴값이 Valid한지 검사하는 것이다.
이 때 assert를 활용하면 좋다.
추후에 이런 코드는 예외처리 코드로 바꿀 때도 도움이 된다.
다음으로는 확장 가능성과 유연성 및 복잡성을 고려해 코드를 작성하는 것이 중요하다.
변수와 함수 이름을 지을 때도 마찬가지이다.
이 코드는 나중에 누군가가 읽어야 할 수도 있다는 것을 잊지 말자.
개발자는 높은 강도의 지적 노동을 요구받는 직업이다.
하지만 동시에 창의력을 요구하는 작업을 한다.
하루가 다르게 변하는 기술의 트렌드와 산업의 흐름을 읽는 시간 역시 어느 정도는 필요하다.
좀 더 가치있는 일에 내 시간을 투자하기 위해서는 단순작업을 자동화 하는 것 만큼 확실히 시간을 확보할 수 있는 것도 없는 것 같다.
앞으로도 기술적 탁월함을 추구하는 개발자가 되기 위해 단순작업들을 자동해 해나갈 것이다.