2012/08/29

코드는 당신 자신을 위해 존재한다. 인간적인 코드 만들기

소프트웨어 개발자에게 있어서 소프트웨어가 폐기되는 것보다 더 무서운 것은 무엇일까? 개인적인 생각은 소프트웨어 유지보수가 소프트웨어 폐기보다 더 무서운 일이 아닐까 생각해본다.

지난 시간에 열심히 코드를 만들어서 기껏 동작하게 해놨더니 오류 투성이에 동작도 제대로 안한다. 밤을 새든, 주말 출근을 하든 코드가 동작하게 해도 더욱이나 중요한 것은 내가 다시 그 코드를 볼 때다.

하루도 아니고 조금이라도 시간이 흐른 다음 본 코드는 광역시 쓰레기 매립장과 그 모습이 흡사하다.

비단, 내가 만든 코드가 아니라 할지라도 그건 변함 없는 사실이다.

그러면 소프트웨어는 어떻게 해야 잘 개발할 수 있을까? 아니 그 보단 어떻게 해야 만들기도 쉽고 유지보수도 쉽게 하게 할 수 있을까?

"읽기 좋은 코드가 좋은 코드다"의 저자인 더스틴 보즈웰과 트레버 파우커는 자신들이 경험한 나쁜 코드와 좋은 코드를 어떻게 구분하는지 그 해결책은 무엇인지 찾아본다.

이 코드를 누가 볼꺼야?

소프트웨어는 개발하는 사람과 유지보수 하는 사람이 작은 회사의 경우에는 같다. 하지만 회사의 규모가 커지고 개발하는 인력이 많아지면 자연스럽게 개발 인력과 유지보수 인력이 나뉘어진다.

물론 이런 구조가 조직 운영의 측면에선 훌륭한 운용 방법이겠으나 소프트웨어 개발에 있어서도 정말 행복한 운용 방법일까?

사람에 따라서 이 질문에 대한 대답은 다를 수 밖에 없을 것 같으니 쓸데없이 진 빼지 말고 코드를 누가 볼것인지 생각해봐야 한다.

내가 생각하는 대답은 이렇다.

자신이 소프트웨어 개발자라면 자신이 만든 코드는  자신이 볼 가능성이 70% 이상이다.

근데 내가 만드는 코드를 내 맘대로 만들면 되지. 왜 읽기 편하게 만들어야 하느냐고 묻는다면 코드는 온전히 본인의 것이기 때문이다.

코드는 미학이다!

코드를 읽기 좋게 만든다면서 자신만 알아볼 수 있는(심지어 자신도 잊어먹는) 코드를 만들어놓고 와! 이건 완전 예술이야! 라고 자신이 감탄하는 코드를 만들어 놓고 나 잘났다~

독자는 이런 종류의 행동을 하면 안된다! 물론 읽기 좋은 코드는 보기에 아름다워야 하니 미학적인 모습을 가지고 있어야 하기는 하지만 그렇다고 해서 무슨 미술관의 추상화 그림처럼 코드를 만들라는건 아니다.

읽기 좋은 코드는 명확한 이름들을 가지면서 코드 정렬을 맞추고 의미있는 순서로 재배치하며 명확한 주석을 기록해야 한다. 그러면서도 소프트웨어 개발에 정해져있는 코딩 규칙이 있으면 그를 따라줘야 한다.

잘 동작하는 코드 vs 명확한 코드

나도 코드를 만들다 보면 명확한 코드보단 그저 잘 동작하는 코드에 집중하게 된다. 그런데 잘 동작하는 코드가 항상 명확한 것은 아니다. 오히려 명확한 코드가 잘 동작하는 코드인 경우가 많다.

잘 동작하는 코드에서 명확한 코드로의 변경은 코드의 제어흐름의 조정과 거대한 표현은 잘개 쪼갠다. 그리고 무엇보다 변수는 말 그대로 자주 변할 수 있으니 그 사용범위가 제한되어야 한다.

이 코드 다른데서도 쓸 수 있을까?

리팩토링에서도 나올 수 있는 이 주제는 코드에 있어서도 프로그램에 완전히 종속하는 기능인지 다른 코드에서도 쓸 수 있는지 확인해보아야 한다. 

이와 같은 이유로 코드에서 분리될 필요가 있는 문제를 찾아서 코드를 분리하는 작업이 필요하다. 또한 작업은 한 번에 하나씩 하도록 코드를 만들어야 한다.

개발자들이 항상 하는 일 중 하나는 있는 라이브러리를 다시 생성한다거나 하는 일인데 우리가 만드는 프로그램은 항상 작은 코드 크기를 유지해야 한다. 그럼으로서 우리는 코드를 조금 더 쉽게 유지보수하고 명확한 문제 해결책을 가지게 된다.

코드만 읽기 쉬워선 안된다 - 선택된 주제들

많은 경우 우리는 소프트웨어 개발에 있어서 기능은 개발하지만 기능에 대한 면밀한 테스트는 잘 해보지 않는다. 그리고 하나의 잘 독립된 소프트웨어를 개발하는 경우도 별로 없다.

많은 경우의 소프트웨어 개발자들은 하나의 잘 설계된 소프트웨어 개발이 아닌 시간에 쫓기는 개발을 하기 때문인데, 이와 관련해서 저자는 한 가지의 해결방법을 제시했다.

테스트 케이스 작성을 통한 테스트를 해결책으로 제시했는데 많은 경우 소프트웨어 개발에서 테스트는 겉핧기 식이 다수다.

테스트를 제대로 할 경우 우리는 명확하고 읽기 쉬운 코드로 만들어진 잘 동작하는 코드를 생성할 수 있게 될 것이다.

우리가 해야 할 일...

소프트웨어 개발에서 코드 작성은 개발자가 해야 할 가장 중요한 일이지만 막상 우리는 이런 책을 보고 그냥 지나가는 경우가 많다.

필요할때 책 속의 지식을 머리속에서 끄집어내서 바로 활용해낼 수 있다면 좋겠지만 사람의 머리는 그 크기가 정해져 있으니 기억할 수 있는 것도 자주 보지 않으면 기억해 낼 수 없다.

"읽기 좋은 코드가 좋은 코드다"는 책 제목이면서 결코 빈 말이 아니다. 우리가 소프트웨어를 앞으로도 지속적으로 개발해야 한다면 이 책을 회사 책상이나 연구실 책상에 비치해두어라.

독자의 코딩이 혼돈 상태에 있을 때 많은 도움을 줄 것이다

댓글 없음: