원티드 프리온보딩 프론트엔드 챌린지 11월
클린 코드 개념 정리&강의 후기
원티드 프리온보딩 11월의 주제는 클린 코드였다. 사전과제를 통해 '클린 코드'란 무엇이라고 생각하는지와, 몇 가지 예시 중 각자가 선호하는 코드 작성 방식 등을 공유할 수 있었다. 다른 개발자들은 어떻게 생각하는지 비교해볼 수 있었다. 대체로 비슷했지만 결국 '왜?'를 구체적이고 논리적으로 설명할 수 있어야 했다. 회사에서 팀원을 설득할 때도 'Why'는 매우 중요하다. 이번 챌린지에서 가장 인상깊었던 점이다. 언제나 '이유'를 생각할 수 있는 개발자가 되어야겠다.
이번 포스트에는 '클린 코드'란 무엇인지, 클린 코드를 작성하기 위한 개발자의 멘탈 모델은 어때야 하는지 등, 강의에서 보고 인상깊었던 점과 느낀점을 적어볼 것이다.
🔖 클린 코드? 깨끗한 코드?
<클린 코드>란 Robert C. Martin이라는 미국 소프트웨어 엔지니어의 책으로, 애자일 소프트웨어 장인 정신을 기반으로 작성된 책이다. 클린 코드의 핵심은 누구나 이해하고 읽기 쉬운 직관적인 코드라고 할 수 있다. 개인마다 해석에는 차이가 있지만 클린 코드를 관통하는 핵심은 '소통'이 아닐까 싶다. 협업할 때 필요한 코드 컨벤션, 네이밍 컨벤션 등, 팀마다 약속한 기준이 중요하다.
컨벤션
접두사나 접미사를 이용할 수도 있고, 명명 규칙을 지정할 수도 있다. 코딩 컨벤션을 잘 지키면 코드가 하는 역할을 명확하게 구분해주고 어떤 상황에 사용된 변수, 함수인지 쉽게 구분이 가능하다.
중요한 점은 기준을 정할 때 근거가 있어야 한다. 논리와 이유를 가져야 한다. 틀려도 괜찮으니 나만의 근거를 가지는 훈련을 하면 좋다. 자신의 프로젝트에 대해서도 근거를 가지고 설명할 줄 아는 개발자가 되자.
일관성
코딩을 할 때는 일관성을 지키는 것이 중요하다. 개발자는 컴퓨터와 인간을 이어주는 징검다리이자 통역가이다. 비개발자와도 소통해야하고, 사람의 언어를 컴퓨터 언어로 번역해야 한다. 심지어는 나쁜 코드라도 일관성을 지켰다면 괜찮다. 실무에서는 동료들과 일관된 방식으로 협업하는 것이 중요하고, 일관성이 명확하다면 편집기나 정규식을 통해 개선할 수 있는 여지가 있다.
아이를 양육할 때 일관적이지 못한 부모가 가장 최악이다. 부모가 기분 좋을 때는 자녀에게 잘 대해주다가, 기분이 나빠지면 학대하는 경우다. 이런 양육 방식은 아이에게 안정형, 불안형, 회피형이 아닌 '혼란형 애착 유형'을 형성시키고, 이는 불안과 회피가 섞인 유형이다. 슬픈 얘기지만 나쁜 부모라면 일관적으로 나쁜 것이 그나마 낫다고 할 수 있다. 나쁠 코드라면, 기왕이면 일관되게 나쁘자.
🔖 개발자의 멘탈 모델
멘탈 모델은 '인지, 추론 및 의사결정에서 중요한 역할을 한다고 가정된 외부 현실의 내부 표현'이다. 간단하게는 '어떤 방식으로 생각하는지'라고 받아들이면 될 것 같다. 개발자의 멘탈 모델이라함은 '개발자가 코드를 작성할 때 가져야 할 사고방식'이 된다. 강의를 들으며 인상깊었던 멘탈 모델은 '보이스카우트 규칙'과 '르블랑의 법칙'이었다.
보이스카우트 규칙
보이스카우트 규칙(The Boy Scout Rule)
"캠핑장을 찾을 때보다 떠날 때 더 깨끗이 해라"
미국 보이스카우트의 '흔적 남기지 않기'에서 영감을 받은 것으로, 처음 발견된 상태의 코드보다 더 깨끗이 해두고 떠나야 한다는 프로그래밍 원칙이다. 회사에 처음 들어와서 엉망으로 되어있는 레거시 코드에 힘들어하는 경우가 많은데, 역설적으로는 코드가 깨끗했다면 회사에서 나를 입사시킬 이유가 없었다는 얘기가 된다. 레거시를 비난할 시간에 코드를 개선하려고 노력해보자. 프로그래밍은 변화가 빠르기 때문에, 복잡한 레거시 코드도 당시에는 그것이 맞았을 수 있다.
르블랑의 법칙
르블랑의 법칙(Leblance's Law)
"나중은 결코 오지 않는다. Later equals never"
한번 작성한 쓰레기 코드를 나중에 수정하는 일은 결코 없다는 뜻이다. 나중으로 미루지 말고 지금 하라는 의미이다. 바쁘게 코드를 짜다보면 리팩토링은 뒷전이 되고 만다. 나중으로 미룰 수록 그만큼 나의 코드는 쓰레기가 된다. 미루기 인간인 나에게 정신이 들게 해주는 멘탈 모델이다. 더 나아가 프로그래밍이 아니라 삶 전반에서도 필요한 개념이라고 생각한다. 현재는 다시 돌아오지 않으므로, 지금 이 순간에 최선을 다하자.
개발자로서 갖춰야 할 멘탈 모델에 관한 내용을 알 수 있었던 유익한 강의였다. 이 글에 적은 것 외에도 강의에서는 '개발하면서 완성도 높고 깔끔한 코드를 작성하기 위해 어떤 방법을 채택하면 좋을지'에 관한 내용도 다뤘다. 실무에 바로 적용해볼 수 있는 내용이었다. 해당 내용이 궁금해서 강사님의 유데미 강좌도 들어볼 예정이다. 이 부분은 추후에 따로 포스트를 다뤄보려고 한다. '클린 코드', 얘기는 많이 들어 보았지만 뭐라고 정의내리기 힘든 개념이었다. 강의를 들으며 클린 코드며 컨벤션이며 하는 것들이 다 사람과 사람 사이의 원활한 소통을 위함임을 깨달았다. 개발자에겐 혼자 독방에서 고독하게 코딩한다는 이미지가 있지만, 다른 사람들과 협업할 일이 꽤 많다. 컴퓨터와 인간 사이의 역관(譯官)이다. 프로그래밍의 궁극적인 지향점을 알게된 느낌이다.
'교육 > 원티드 프리온보딩 챌린지' 카테고리의 다른 글
[원티드 프리온보딩 챌린지 9월] 반응형 웹사이트 개념 정리&강의 후기 (1) | 2023.09.21 |
---|---|
[원티드 프리온보딩 챌린지 7월] CSR/SSR 개념 정리&강의 후기 (0) | 2023.07.27 |
[원티드 프리온보딩 챌린지 5월] 모노레포 개념 정리&강의 후기 (0) | 2023.06.03 |
[원티드 프리온보딩 챌린지 2월] Week 2-2 TypeScript's Type System - 강의 후기 (0) | 2023.02.17 |
[원티드 프리온보딩 챌린지 2월] Week 2-1 Safety Application for TypeScript - 강의 후기 (0) | 2023.02.14 |