개발자 청춘 상담실 #23
해당 브런치에 남김 글은 초고입니다. 완성된 작품은 해당 "오늘도, 우리는 코딩을 합니다."로 출간하였습니다!! 완성된 글을 종이책의 정감과 편안함으로 읽어보시길 바랍니다^^
감사합니다.!!
http://www.yes24.com/Product/Goods/100514084
안녕하세요! 계획적인 개발자님!
프리랜서로 열심히 살아오고 계신 개발자님 프로젝트에서 계획대로 되지 않아 결국 막바지에 바빠지는 패턴을 겪고 있군요. 그런데 많은 개발자분들이 겪는 문제입니다. 저 또한 여전히 목표 날짜를 맞추지 못해서 고생하는 일이 흔합니다. 하지만 이 또한 일을 잘하고 싶은 욕구에서 생기는 욕심 때문입니다. 더 잘하고 싶고 더 좋은 결과물을 만들고 싶은 개발자님의 마음이 반영되었을 거라 생각하고 조금만 더 방법을 찾는다면 더 많은 일을 해내는 개발자가 될 거라 생각합니다.
목표를 잡았다면 계획을 세우세요
산행은 참 좋은 취미입니다. 산을 오르면 머릿속까지 시원하게 하는 맑은 공기와 수만 그루의 나무가 그려내는 대 자연의 풍경이 주는 경이로움을 느낄 수 있습니다. 특히 친구와 연인과 어울려 등산을 하면 긴밀한 대화를 함으로 교감을 도와줍니다. 그렇게 산 정상에 오르면 자신감과 만족감을 느낄 수 있습니다. 그래서 많은 산행인들은 4계절을 즐기며 산에 오릅니다. 특히 개발자들처럼 작은 모니터 앞에서 디지털 세상과 힘겨루기를 하는 직업은 푸른 숲이 주는 해방감을 느끼면 그동안 꼬였던 소스들도 어느새 정리정돈이 되는 기적을 맛보기도 합니다. 저도 시간을 내어 육체와 정신건강을 위해 그리고 코딩을 위해 등산을 갈고 노력합니다. 하지만 이렇게 좋은 운동을 하는 데에도 꼭 필요한 준비물이 있습니다.
첫 번째는 '배낭'입니다. 등산 중에 사고를 대비하여 휴대용 의약품과 수분 보충을 위한 보온병 땀을 닦아낼 수건 등 기본적인 물품을 보관하는 용도입니다. 두 번째는 발을 보호할 '등산화'입니다. 등산은 발을 이용한 운동입니다. 발을 보호하고 산을 오르기 위한 걸음을 돕는 역할을 합니다. 그리고 마지막으로 가장 중요한 준비는 바로 '목표'입니다. 등산은 산을 오르기 위한 목적이 있습니다. 그 목적지를 가기 위해서 시간과 길을 정합니다. 목표는 이처럼 모든 준비를 갖춘 후에 나아갈 길을 정하고 이루려고 하는 상태를 말합니다.
계획 없는 목표는 한낱 꿈에 불과하다. - 생텍쥐페리 -
프로젝트의 특징은 기간이 정해져 있습니다. 그렇기 때문이 날짜라는 정확한 목표가 주어집니다. 그런데 목표가 생겼지만 오히려 계획을 세우지 않는 경우가 있습니다. 혹은 큰 덩어리로 된 큼직하게 시간을 나눠 놓은 것을 계획이라고 생각하는 경우도 있습니다. 계획은 우리의 모든 일상과 아주 밀접한 관계가 있습니다. 계획에 따라 결과는 언제나 달라지게 됩니다. 그리고 목표를 효율적으로 달성하는 실행 과정을 돕습니다. 계획이 없다는 건 정상이 없는 산을 맴도는 산책과 같습니다. 그렇기 때문에 산 정상이라는 목표를 세우고 등산을 합니다. 이처럼 개발자에게도 프로젝트 완료라는 산 봉우리를 향해 가는 상세한 계획은 꼭 필요합니다. 그리고 중요합니다.
상세한 계획을 갖추기
시험 전날 한 번에 몰아서 하는 공부를 일명 '벼락치기'라고 합니다. 이는 계획을 실패한 사람들의 최후의 수단입니다. 당연히 하루 밤에 공부한 내용으로 본시험은 좋은 점수가 나올 리가 없습니다. 현업에서도 일명 '벼락코딩'을 하는 경우가 많습니다. 프로젝트 완료 기한으로 잡아둔 날짜가 다가오고 완료한 내역이 부족할 때 일명 계획에 실패할 때 결국 이 벼락치기와 같은 코딩 법을 사용하게 됩니다. 이 방법의 문제는 완성 있는 프로그램이 나올 수가 없습니다. 그리고 품질은 떨어질 수밖에 없습니다. 상세한 계획은 기간에 맞는 효율로 최대의 효과를 끌어낼 수 있습니다. 상세한 계획에는 꼭 필요한 요소가 있습니다. 바로 시간입니다.
시간을 최대한 잘게 나누어야 합니다.
프로젝트에 사용할 게시판을 만든다고 예를 들어봅니다. 그리고 기한이 정해졌습니다. 목표만 잡는다면 지레짐작으로 일하게 됩니다. "오늘은 여기 개발하고 내일은 이 부분 하는데 오늘은 영 안되니 내일 다시 해야겠다." 이런 피상적인 목표는 결국 완성률을 체크하지 못하게 되고 벼락 코딩을 면치 못하게 됩니다. 그러므로 아주 상세하게 계획을 짜야합니다. 구체적이고 계획적인 개발을 하기 위해서는 우선 기능별로 범위를 나눠야 합니다. 각 프로젝트마다 기능 범위는 다르지만 보통 기본적인 데이처 처기 기능 단위인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)로 나눕니다. 그룹이 나누어졌다면 이젠 해당 범위를 날짜 별로 상세하게 분배를 합니다. 최대한 구체적으로 날짜를 정해서 완료 기한 내에 끝낼 수 있게 합니다. 계획한 것보다 빠르게 진행되면 그만큼 다시 날짜를 앞으로 당겨서 여분의 날짜를 만드는 것도 좋습니다. 예외상황을 대비할 수 있습니다. 그리고 최대한 시간을 계산하고 아껴가며 코딩을 합니다. 개발이 완료가 일찍 될수록 리펙토링이 가능합니다. 이 과정을 통해 더욱더 완성도 있는 완성품을 만들 수 있기 때문입니다. 그렇기 때문이 잘게 쪼개 시간은 프로젝트를 완성도 있게 만드는 가장 큰 요소입니다.
각 사람의 맞는 루틴으로 막바지 코딩이 자신의 방법일 수도 있습니다. 하지만 시간을 잘게 쪼개어 늘어지지 않게 코딩하는 신뢰도 높은 개발자가 되기를 바랍니다.