신입 개발자로 입사하고 1년이 지났다. 기술적으로 보다 성장했고 자신감도 붙었다. 무엇보다 협업하는 법을 배울 수 있었다. 어떠한 활동들이 나의 성장을 이끌었는지 회고해보려 한다. 혹시 이제 신입으로 입사하는 개발자들에게 도움이 될 수 있을지 모른다는 생각에서다.

신입은 채용 시 실력도 보지만 잠재력을 높은 비중으로 평가한다. 그래서인지 신입 개발자들의 실력 스펙트럼은 다양하다. 초보인 나와 달리 실전 경험이 풍부한 개발자들에게는 필요하지 않는 글일 수 있다.



가장 도움이 된 책
클린 코드 - 로버트 마틴


인간은 음식에서 나는 ‘나쁜 냄새’를 본능적으로 안다. 하지만 코드에서 나는 ‘나쁜 냄새’를 구별하긴 어렵다. 이 책은  코드의 ‘나쁜 냄새’에 대한 감을 찾을 수 있게 해준다. 

‘나쁜 냄새’가 뭔지 알아야 비로소 협업하는 개발자가 될 수 있다.  코드를 짜는 것을 넘어 남의 코드를 리뷰할 수 있기 때문이다. 이 책은 업계에서 좋고 나쁜 코드에 대한 레퍼런스로 여겨진다. 

클린 코더 - 로버트 마틴


신입은 시니어의 요구에 ‘예예’하기 바쁘다. 내가 그랬다. 빡빡한 일정이 떨어지면 밤을 새서라도 맞춰야 하는 줄 알았다. 불가능해보이는 일정을 극적으로 달성하는 것이 바로 '프로 개발자'라고 생각했다.

하지만 이 책에서 말하는 '프로 개발자'란 조금 다르다. 프로 개발자는 명백히 달성할 수 있는 요구에 대해서만 예라고 말하며(3장) 제품 퀄리티를 떨어뜨릴 수 있는 무리한 요구에 대해서는 아니라고 말할 줄(2장) 안다. 내가 밑줄 친 '프로의 마음가짐'은 다음과 같다. 괄호 안은 문장이 들어 있는 소제목이다.

- 프로가 실수하면, 스스로 뒷감당을 해야 한다. (함부로 바라지 마라)
- 프로라면 한 명도 빠짐없이 오류에 책임을 져야 한다. 오류가 명백하지 않더라도 상황이 어떻게 돌아가는지 밝혀야 한다. (기능에 해를 끼치지 마라)
- 코드에 결함이 있는 걸 알면서도 QA에게 코드를 보내는 일은 매우 프로답지 못한 행동이다. (QA는 아무것도 찾지 못해야 한다)
- 100% 테스트 커버리지를 권장하냐고? 권장이 아니라 강력히 요구한다. 작성한 코드는 한 줄도 빠짐없이 전부 테스트해야 한다. (제대로 작동하는지 아닌지 알아야 한다) 
- 프로 개발자는 코드와 테스트에 확신이 넘치기 때문에, 시도 때도 없이 이리 저리 코드를 바꿔도 마음이 평안하다. (구조에 해를 끼치지 마라)

신입 개발자가 어떤 태도로 일에 임해야 하는지 알려주는 책으로 일독을 권한다. 

리팩토링 - 마틴 파울러

 
리팩토링은 겉으로 드러나는 기능은 그대로 둔 채, 알아보기 쉽고 수정하기 간편하게 소프트웨어 내부를 수정하는 작업을 의미한다. 이 책은 그 방법들을 빼곡히 수록한 책이다. 

나는 이 책을 스터디 교재로 삼아 읽었다. 여러 방법들을 내가 실제 작업하고 있는 소스에 적용해보았다. 아마 이 책을 읽는 가장 효율적인 방법 중 하나일 것이다. 테스트를 짠 뒤 그 안정감 위에서 코드를 더 좋게 개선하는 작업을 반복하자 코드가 몰라보게 달라졌다.

Pro Git

 
Git은 필수다. 협업을 잘 하는 개발자가 되기 위해선 Git을 한번쯤 깊게 공부해야 한다고 생각한다. 선배에게 ‘코드가 날아갈 것 같아요’라고 말하지 말자. 

이응준님의 글에 ‘프로 Git 읽는 법’이 잘 정리되어 있다. 



가장 도움이 된 멘토
'메소드는 10줄 이내, 클래스는 200줄 이내로'
사내 Objective-C 교육을 담당한 강사님의 말이다. 좋아 보여서 꾸준히 실천하고 있다. 나는 강사님이 말한 원칙을 지키기 위해 무던히 노력했다. 메소드가 10줄이 넘어가면 메소드 추출(Extract Method)를 실시했고 클래스가 200줄이 넘어가면 클래스 추출(Extract Class)로 라인 수를 줄였다. 고통스러운 훈련으로 보일지 모르지만 신입에게는 큰 도움이 된다고 생각한다.

Pull Request를 활용한 코드 리뷰 중심의 교육
신입 교육에서는 PR을 통한 코드 리뷰의 중요성에 대해 귀에 못이 박히도록 들었다. 모든 작업은 PR로 날렸고 문제가 있으면 merge가 거부됐다. PR에 대해 이해하고 필요성을 절감하는 좋은 경험이었다. 실무에 와서도 PR을 통한 코드 리뷰에 적극적으로 참여했다. 



가장 도움이 된 프로젝트 - 라이브러리 개발
입사하자마자 앱을 한 차례 만들고 그 뒤로는 라이브러리를 만들었다. 재밌는 경험이었다. 라이브러리는 개발자들이 쓴다. 개발자들은 코드를 열어보기 때문에 부끄럽지 않은 코드를 짜야 했다. 내가 택한 방법은 이미 만들어진 유명 오픈 소스(Alamofire나 Gifu 같은)를 모방하는 일이었다. 좋은 코드를 보고 좋은 코드를 짜려고 노력하다보니 상당히 실력 향상에 도움이 됐다.



가장 도움이 된 컨퍼런스 - Let’s Swift
내가 iOS 개발자여서다. 가장 인상 깊었던 세션은 Viper, POP, RxSwift에 관한 세션이었다. 늘 ViewController가 비대해지는 문제를 겪고 있었기 때문에 VIPER가 반가웠다. POP는 OOP의 단점을 일부 보완할 수 있는 매력적인 방식이었다. 덕분에 실무에서 적용해볼 수 있었고 주위 개발자들로부터 좋은 반응을 얻었다. POP를 활용해 작은 토이를 만들어보기도 했다. RxSwift는 무척 흥미로워 다음 도전해볼 주제로 남게 되었다.



2016년에 진행했던 스터디
slipp 10차 스터디 - Hacker Rank
사내 리팩토링 스터디



시기별로 많이 했던 공부 
1분기 - Git
Pro Git 읽기
사내 Git 강의 : reflog, stash, pull —rebase, git flow 등을 배워 실전에서 매우 유용하게 사용했다.

2분기 - Swift

3분기 - 리팩토링

4분기 - Data Science
k-MOOC - 빅데이터 첫 걸음 (완강), 포스텍 유환조 교수님
k-MOOC - 경제통계학 1부 (완강), 서울대 류근관 교수님



마치며
1년 간 많이 성장했다. 좋은 평가를 받았고 그에 따른 보상도 받았다. 내가 일을 하며 느끼는 기쁨은 대부분 동료 개발자로부터 왔다. 좋은 프로젝트에서 좋은 동료들과 함께하는 기쁨을 계속 누리고 싶다. 




'Tech' 카테고리의 다른 글

4년 차에 다시 읽는 기본서  (0) 2019.03.27
TDD 적용기  (0) 2016.10.06
다양한 예제로 학습하는 데이터 구조와 알고리즘 for Java  (0) 2015.11.10

+ Recent posts