소프트웨어 개발자들이 흔히 저지르는 실수들
개발자의 길을 막아서는 실수들
소프트웨어 개발도 인생과 비슷한 구석이 많습니다. 처음 시작할 때는 그 끝이 어떻게 이어질지 알기 어렵고, 작은 실수가 큰 골칫덩어리가 될 수도 있죠. 몇 해 전 첫 프로젝트에서 코드를 짜기 시작할 때만 해도, 나름 자신감이 있었어요. 하지만 그것이 오만이었다는 것을 깨달은 데에는 그리 오래 걸리지 않았습니다.
버전 관리 없이 코딩하다
버전 관리 시스템을 무시하는 것은 정말 위험천만한 일입니다. 그때 프로젝트 리더였던 상사가 "Git 좀 사용해보실래요?"라고 물었을 때, 저는 별 거부감 없이 "그냥 내 방식으로 할래요"라고 답했습니다. 시간이 지나면서 파일을 어디에 저장했는지도 헷갈리고, 결국 작업해두었던 파일이 사라지면서 '타임머신'이라도 있었으면 하는 심정이었습니다. 그래서 정확히 그날부터 Git을 배우기 시작했죠. 지금 생각해보면, 간단하고 직관적인 도구인데 왜 그렇게 거부감을 가졌는지 모르겠어요.
주석을 게을리하기
"누가 봐도 알기 쉽게 코드를 작성하면 되지, 주석은 불필요하다"라는 생각에 빠졌던 적이 있습니다. 그러나, 몇 달 뒤에 그 코드를 다시 보고 나서야 깨달았습니다. '내가 이걸 왜 이렇게 짰는지 도저히 기억이 안 나네?' 대충 기억이 날 때 다시 보면 기억나겠지만, 시간이 지날수록 그때의 생각이나 빠진 부분을 파악하기가 점점 힘들어지죠. 주석은 다 컸다고 생각했던 저 자신을 위한 것임을 뒤늦게야 알았습니다.
테스트를 무시하다가 큰 코 다칠 때
가장 흔하면서도 잊기 쉬운 것이 바로 테스트입니다. 그때만 해도 유지 보수가 쉽고, 테스트가 다된 코드인 줄 알았어요. 하지만, 고객의 다양한 요청에 따라 프로젝트가 ‘살아 움직이기’ 시작하면서, 사소한 변경사항이 엄청난 문제를 일으키는 경우를 수차례 경험하게 됐습니다. "테스트 더블이라고 들어봤냐?"며 팀원이 던진 그 한마디가 그렇게 감사할 수 없었어요. 그 이후로 TDD(Test-Driven Development)의 중요성을 체감하며 조금이라도 안전망을 쌓아가고 있습니다.
고객과의 소통 부족
한 프로젝트에서 저는 이미 요구사항이 충분히 명확하다고 생각했지만, 수행하다 보니 점점 압박감을 느꼈습니다. 고객이 원하는 바와 제가 구현하는 바가 조금씩 어긋나다 보니, 점점 그 차이가 커졌죠. 한 번 잘못 이해한 것을 수정하려다 보니 더 많은 문제를 만들게 됐습니다. 고객과의 소통은 오히려 더 큰 문제를 막을 수 있는 중요한 방패이자, 더 나은 결과물을 위한 디딤돌이라는 걸 깨달았습니다.
미환된 기능 과욕 부리기
처음엔 기대감에 차 프로젝트 계획을 세우지만, 그 기대는 때때로 현실과 충돌합니다. 새로운 기술을 적용하고 싶거나 자신이 생각하기엔 '쿨해 보이는' 기능을 넣고 싶어지는 건 본능적이잖아요? 결국 이러한 과욕은 필연적으로 첫 단추부터 잘못 끼운 옷매무새처럼 되돌릴 수 없는 큰 문제로 이어지곤 합니다. '기능 추가보다는 문제 해결이 우선'이라는 초심을 잃지 않으려 오늘도 다짐하게 됩니다.
후회 대신 교훈으로
얼핏 보면 이 모든 실수가 저를 힘들게 할 수도 있겠지만, 결국 저 자신을 성장시키는 교훈이 되었습니다. 실수를 교훈 삼아 앞으로 나아가는 건 모든 소프트웨어 개발자들이 지나야 할 과정이죠. 어디까지나 미래를 위한 예열인 셈입니다. 새로운 도전을 앞두고, 지나온 길을 돌이켜 보며 한 가지 다짐하죠. “다시는 실수하지 않겠다” 이는 어떤 발전의 시작일지도 모릅니다.
실수가 두렵다면 슬그머니 돌아가고 싶을 때가 있지만, 거듭해서 배운다는 사실을 잊지 맙시다. 열정 넘치는 개발자들이여, 앞으로 우리의 실수를 무기로 삼아 빛나는 개발 여정을 만들어 나갑시다!