우아한테크코스 5기로 활동한다.
이전에 주먹구구식 알고리즘 문제를 풀며 개발자 진로를 꿈꾸던 때와는 "개발"이 사뭇 다르게 느껴진다. 보다 깊고 넓은 세계에 진입한 느낌이다. 초등학교를 졸업하고 중학생이 된 꼬마가 나와 같을까. 어른의 시선에서는 그게 그거일지라도, 나는 보다 큰 세계에서 개발을 배운다.
본격적으로 개발을 배우면서 새로운 지식을 접한다.
교육이 시작된 후 2주동안 "객체지향", "단위 테스트", "TDD" 등을 배웠다. 우아한테크코스 코치님이 진행하는 강의나 인터넷 자료들, 서적을 참고해 개념을 익힌다. 그리고 개발 미션에서 나름 이러한 지식들을 활용하려고 노력한다.
미션을 수행하면 코드 리뷰를 받는다. 리뷰는 보통 질문으로 달린다. 내 생각을 묻는다.
이렇게 코드를 작성하셨는데 이유가 무엇인가요? 이러한 코드에 장점이 무엇이라고 생각하셨나요?
그러면 나는 내가 생각하는 이유를 적는다.
가령 제이미의 질문에는 아래와 같이 대답했다.
답변을 보내면서 내 논리에 당당했다.
구구절절, 좋은 말을 한 가득 실어 내 코드의 장점을 꺼낸 느낌이랄까. 어쩌면 제이미는 질문을 통해 이렇게나 좋은 원시 값 포장의 장점을 내가 알고 쓸 수 있도록 유도한 게 아닐까 했다. 그렇다면 나는 썩 괜찮은 대답을 했으니, 칭찬받을 줄 알았다.
하지만 제이미의 의견은 달랐다.
어라라
고봉밥처럼 한 가득 담겼던 내 코드의 장점은 사실 진짜 장점이 아니었다.
오히려 비효율적인 길로 한 걸음 나아간 코드였던 것 같다. 제이미의 리뷰를 받고 나서야 알았다. 내가 작성한 장점은 사실 "객체지향"의 장점이라는 것을 말이다.
나는 스스로 "객체지향"을 따랐다고 생각했다. 그러나 오해가 있었다.
"객체지향"을 따르기 위해 작성한 코드가 정답이 될 수 없다. 그 기술(개념)을 왜 따랐는지, 어떻게 따랐는지가 더 중요하다. 특정 기술이 장점을 지니는 것은 때와 장소가 있기 때문이다.
예를 들어보자. 곧 애플에서 15인치 맥북 에어가 나온다는 찌라시가 돈다. 모두가 갖고 싶은 이 맥북 에어는 개발자 지망생에게 훌륭한 도구가 될 것이다. 하지만 누군가 이 맥북으로 게임을 한다면? 그것도 배틀그라운드를 설치해 전장을 누빈다면? 모두가 의문을 표할 것이다. 나는 그의 맥북 에어를 빼앗을지도 모른다. 그렇게 쓰기엔 너무 아까우니까.(내가 갖고 싶기도 하고)
개발 기술(개념)은 하나의 도구이다. 때와 장소를 가려 사용해야 하는 것이다. 그 도구를 쓴다고 해서 내 코드가 해당 도구의 장점을 모조리 흡수하지 못한다. 때와 장소를 가려 써야지만, 비로소 좋은 코드를 탄생시킬 수 있다.
객체지향을 어색하게 따라, 확장을 대비하는 척!했던 코드는 오버엔지니어링이라는 평을 벗어날 수 없었다.
답변 말미에 적었듯이, 개발은 정교하고 세심해야 하는 것 같다.
우아한테크코스라는 크고 넓은 중학교에 들어왔으니, 조금은 더 큰 어른이 된듯이
정교하고 세심하자!