코드는 대체 어떠한 형태로 작성해야 할까

단순히 기능만 줄줄이 구현한다면 그건 코딩공부 꽤나 해본 초등학생 개발자랑 똑같지 않을까?

비록 비전공자지만 살면서 사람들과 다양한 일을 해보고

또, 어린 시절부터 개발자를 꿈꿔왔지만 현실적인 이유 때문에 미루다 미뤄서 이제서야

개발자의 길을 걷게된 사람으로써

세상에 내놓을 프로젝트를 만들고자 한다면, 그래서 그것으로 수입을 내고자 하고자 한다면

많은 사람들과 일을 함께하면서, 또, 새로운 동료를 받아들이고, 또는 떠나보내게 되는

이런 환경에서 어떻게 코드를 작성해야 하는가?

솔직히 왠만한 기능을 구현하는 것은 크게 어렵지 않다.(물론 구현이 어려운 것도 있지만 세간에서 자주 쓰이는 기능은 구글링만해도 왠만해선 다 나온다. 경험상 머리채 붙잡고 고민하면 늦어도 2~3일 안에 답이 나왔다.)

하지만 이 코드들의 구조를 어떻게 짜야 하는가는 별개의 문제라고 생각한다.

 

이건 내가 협업을 하면서 가장 많이 했던 생각이 아닌가 싶다.

 

내가 여기에 적어놓은 것이 정답은 아니겠지만

협업하면서 느낀점과 내 생각에 어떠한 생각을 끼치게 되었는지를 정리해보자

 

1. 타인의 코드를 최대한 건들지 않으면서 나의 기능을 추가하자

내가 협업을 통해 만들었던 코드를 타인이 자기 기능을 추가한답시고 수정해버린다면 내 입장이 어떨까?

단순히 기분이 나쁘고 자시고가 문제가 아니라 내가 작성한 코드를 내가 다시 이해해야하는 상황이 발생한다.

더군다나 코딩 스타일은 사람마다 차이가 있는지라 의도치않게 나의 스타일을 상대방에게 강요하는 형태가 되어버릴 수도 있다.

 

이건 협업에서 나쁘게 작용한다고 생각한다.

물론 상대 코드의 편집이 불가피하거나 그럴 상황이라면 어쩔 수 없겠지만

그게 아니라면 나의 기능은 나의 기능대로, 동료의 기능은 동료의 기능대로 놔두고 서로의 기능이 독립적으로 작동할 수 있게 하는 것이 코드의 신뢰성을 높이는 것에도 기여한다고 생각한다.

만약 기능 1과 기능 2가 이리저리 섞여있다면 기능1에 문제가 생길 경우 1과 2 중 어느코드를 뜯어고쳐야할지 애매해지지만 코드간의 독립성이 유지된다면 기능 1에 문제가 생겼을 때, 그 코드만 고치면 되며 기능 2는 무사할태니 말이다.

 

어쩌면 이것도 객체지향 프로그래밍에 속하는 것이 아닐까?

 

2. 가능한 짧고 간단하게 작성하자

주의해야 할 것은 어렵게 작성하자는 것이 아니다.

프로그래머스 문제를 풀고 타인이 작성한 답안을 보면 1~2 줄로 아주 짧게 작성했지만

표현식을 너무 남발했거나, 어거지로 한줄로 구현한 답안을 볼 수 있다.

이런건 보는 사람 입장에선 한 눈에 이해되지 않고 오히려 자기만 아는 소리를 하는 것처럼 보이기도 한다.

차라리 3~5줄 정도 작성했지만, 무슨 기능인지 한 눈에 이해가 되는 쪽이 타인들과 작업할 때 좋다고 생각한다.

 

3. 스파게티 코드를 지양하고 주석을 잘 활용하자

명심하자, 나는 모든것을 기억하지 못한다.

심지어 1주일전에 작성한 코드가 뭔지 기억조차 잘 나지 않는다.

그렇기 때문에, 주석을 잘 활용해야 하며

추후 유지보수를 위해서라도 코드를 깔끔하게 정리할 필요가 있다.

2번내용과도 겹치는 부분인데, 결국 보기 좋고 이해하기 쉬워야 한다는 것이 골자다.

코드는 같은 기능이라도 얼마든지 어렵고 복잡하게 적을 수 있는데 그렇게 적어봐야 다른 사람들 눈에는

그뭔씹 밖에 더 되겠는가

 

4. 조건문과 반복문은 가급적 중첩해서 사용하지 않는다.

예전에 게임개발을 독학했을 때도 겪었던 문제로 이프문과 포문을 겹쳐서 쓰면, 그만큼 퍼포먼스가 많이 떨어졌다.

사실 이건 그 언어를 능숙하게 다루지 못해서 발생하는 문제이기도 하다.

프로그래밍 언어는 생각보다 훨씬 넓고 영리한 기능을 제공하며 이것들을 잘 사용하면

같은 기능조차 훨씬 나은 퍼포먼스로 구현할 수 있다.

 

마지막. 내 코드에 미련을 갖지말자

어려운 기능을 머리채싸가면서 겨우겨우 구현한 기능이 협업할 때 제외당할 수 있다.

내가 구현한게 어려운 기능일 수록 그만큼 고민을 많이 하게 되고 자연스럽게 애착을 가지게 되기 마련인데

여러가지 이유로 제외당하면 미련이 생길 수도 있다.

하지만 제외당하는 이유가 정당하다면 프로젝트를 위해서라도 내가 작성한 코드에 미련을 버릴 필요가 있다.

비록 힘들게 구현했지만, 그 코드가 내 프로젝트에 독으로써 작용한다면 굳이 가지고 있을 필요는 없지 않겠는가

물론 나중을 위해서, 따로 아카이브를 해놓는 것은 좋은 선택이다.

 

 

 

번외. 내가 필요하다고 생각한것은 이미 다른 프로그래머들이 한 생각이다. 

가끔 코딩을 하다보면 "이 언어에는 이런 기능이 있으면 좋을 텐데..."하고 아쉬운 생각을 할 때가 있다.

그러나 지금 프로그래밍 언어는 정말 오랜기간 개선되어온 결과물이다.

때문에 십중팔구 그 기능이 있다.

일개 병아리 개발자의 생각을 과연 시니어 개발자들이 못했을까?

잘 찾아보도록 하자

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts