최근 우리회사는 새로운 인력 채용을 계획하고 있는데, 이와 관련하여 금일 팀원들과 함께 현재 팀원들이 생각하는 각 영역에서의 필수역량을 주제로 스몰토크를 나누었다.
나는 현재 초기 스타트업(현 seed)의 멤버로 있는 만 2년차 주니어 개발자으로, 개발자의 필수역량에 대해 생각해보게 되었다. 그리고 이 생각은 연차가 지날수록(시간이 지날수록) 바뀔 듯하여, 생각의 로그를 남기기 위해 기록으로 남겨본다.
내가 생각하는 개발자의 필수 역량
앞서 이야기 했듯이, 나는 아직 주니어 개발자이다.(응애..) 개발자로서 감히 경험이 얼마나 된다고 감히 개발자의 역량에대해 논해?! 할 수 있다.(존중한다!) 하지만, 나는 주니어일수록 이런 생각은 필수적으로 고민해봐야한다 생각한다.
- 나는 어떤 개발자가 되고 싶은지 고민해볼 수 있다.
- 내가 어떤 역량이 부족한지 고민해볼 수 있다.
- 내가 어떤 역량이 강점인지 생각해 볼 수 있다.
그래서 나는 자주 "어떤 역량이 개발자로서 필요한 역량일까?" 고민을 하곤 했다. 이전에는 고민된 역량을 기르기 위한 "행동"만을 하곤 했는데, 이번 기회를 통해 이를 "기록"으로 남겨본다.
의도를 명확하게 갖고 행동하는 역량
나는 세상에 정답은 없다고 생각한다. 하지만 오답은 존재한다. 특히 개발에서는 더욱 그렇다고 생각한다. 이런 관점에서 나는 개발을 하면서 작성하는 모든 코드에는 의도와 목적이 존재한다 생각한다. 작성한 코드의 모습, 성능, 품질 등 모두 개발적으로 중요한 요소라는 것에는 의심하지 않지만, 이와 관련해서는 정답은 없다.
- 모든 것은 트레이드 오프이다. 코드의 성능이 떨어지는 코드가 무조건 나쁘다고 할 수 없다. 성능을 포기하고, 다른 부분을 선택해야 했다면, 성능이 떨어지는 코드라 할지라도 나쁘다(오답) 생각할 수 없다.
하지만, 의도가 없다면 이야기는 달라진다. 의도없이 "그냥" 작성했다면 해당 코드는 잘못되었다고 생각한다.
- "의도 없이 작성한 코드"와 "의도를 갖고 작성한 코드"의 결과적인 모습은 같을 수 있다. 하지만, 문제 상황에서의 큰 차이를 보인다.
- 의도 없이 작성한 코드는 추후 "기술 부채"가 될 가능성이 높다고 생각한다. 작성 후 의도를 생각하는 코드는 같은 목적을 가진 다른 형태의 코드가 수 없이 많이 작성되어 있을 가능성이 매우 높다.
- 의도를 갖고 작성한 코드는 오답이될 수 있다. 하지만, 의도가 분명하기에 해당 의도를 가진 부분만 정답으로 수정하면 된다. 즉, 의도를 가진 코드는 정답이냐 오답이냐는 중요하지 않다.(수정하면되니깐)
작성해야(지향해야) 하는 코드는 비용이 적게 드는 코드를 작성해야 한다 생각한다. 내가 생각하는 비용이 적게드는 코드는 "코드 작성 시기의 상황을 고려한 코드이다." 그리고 이런 코드는 의도와 목적을 갖지 않고서는 작성할 수 없는 코드이다.
- 비용에는 유지보수 비용, 확장 비용 등 모든 비용을 이야기한다.
그래서 나는 개발자의 필수 역량 중 한가지로 "의도를 명확하게 갖고 행동하는 역량"을 이야기하고 싶다.
공동체적 사고를 하는 역량(협업의 역량, 배려)
협업이라는 단어는 매우 광범위하다. 개발자 끼리의 협업이 될 수도 있고, 다른 팀끼리, 다른 기업끼리의 협업이 될 수도 있다. 나는 다양한 협업에서 특히 개발자 끼리의 협업에서의 협업을 중심으로 이야기 해보고자 한다.
개발에서 협업의 역량이 가장 잘 나타나는 것은 "읽는 사람을 고려하여 작성하였는가?(코드를 포함한 타이핑을 통해 기록하는 모든 것)"를 통해 개발에서의 협업 역량이 가장 잘 나타난다고 생각한다.
- 타이핑을 통해 기록하는 것: 코드, 문서, PR, Issue 등
다른 영역에서도 마찬가지 비슷하겠지만, "작성되는 모든 것은 작성자 중심이 아닌, 독자 중심"으로 작성되어야 한다. 내 중심적인 기록은 타인을 배려하지 않는 것이라고 생각한다.
- 타인은 내가 작성하는 것을 이해하기 위한 문맥을 이해하기 힘들다. 하지만 작성자는 기록하는 내용의 문맥을 이해하고 있다.
- 만약 작성자도 문맥을 모르고 기록을 한다면, 이는 기록의 목적 없이 작성하는 것이며 잘못되었다.
그래서 나는 개발자의 필수 역량의 두번째로 공동체적 사고를 하는 역량(협업의 역량, 배려심)으로 이야기 하고 싶다.
비즈니스적 사고 역량
마지막으로 나는 비즈니스적 사고 역량을 이야기 하고 싶다. 나는 개발자의 존재 이유를 문제를 해결하기 위해 존재한다 생각한다. 그리고 풀어야 하는 핵심 문제는 비즈니스(사업)이다.
개발적인 욕심(기술 욕심)을 으로 문제를 풀이해서는 안된다. 문제를 풀이하기 위해, 기술을 사용해야한다. (이 생각은 호불호가 갈릴 수 있을 것 같다.) 솔직하게 이게 중요하지만 개발자로서 이를 준수(?)하기는 어려운듯하다. 조금더 정확히는 연습이 많이 필요하다.
관련하여, 현재 상황에서 최적(최소한의 비용)의 비용을 사용하는 방법은 무엇인지 고민하는 것이 정말 중요하고 필요하다. 딘 비즈니스 측면에서 말이다.
'회고 > TIL' 카테고리의 다른 글
나의 첫 개발 멘토링은 어떠했을까? (1) | 2024.11.07 |
---|---|
[ TIL ] 탈락과 하소연, 친구와 개발 (1) | 2023.10.26 |
최종 불합격, 독서: 예외처리, 개발 안티패턴에 대하여 (1) | 2023.10.19 |
논블록킹 I/O 에 관하여, 단위 테스트를 설계하는 방법 (0) | 2023.10.18 |
독서: 단위테스트, DDD (0) | 2023.10.17 |