프로그래밍과 글쓰기

지난 프로그래밍과 수학에 이어 오늘은 프로그래밍과 글쓰기에 대한 이야기를 하고자 합니다.

게임을 포함한 모든 소프트웨어는 요구사항 및 기획, 설계, 코드 작성, 테스트, 출시 ,유지 보수 등의 과정을 거쳐야만 하고, 다른 공학 분야와 마찬가지로 해당 분야에 대한 전문 지식, 고도의 사고력, 제품 경험 등 종합적인 능력이 요구됩니다. 따라서 소프트웨어를 잘하기 위해 어떤 능력이 필요하냐는 질문에는 보는 관점에 따라 “해당 분야의 전문 지식”을 말하는 사람도 있고, “수학이나 논리적 사고력”을 말하는 사람도 있고, 더 나아가 “인문학적 소양”을 말하는 사람도 있게 됩니다.

저는 프로그래밍이란 행위는 글쓰기와 가장 유사하다고 생각합니다. 주제를 선정하고 개요를 작성하고 글을 쓰고 퇴고하는 일련의 행위는, 어떤 소프트웨어를 만들지 정하고 중요 모듈을 설계하고 코드를 작성하고 리팩토링하는 과정과 닮아 있습니다. 좋은 코드를 작성하기 위한 팁을 담고 있는 Clean CodeCode Complete과 같은 책들은 내용과 구성 면에서 글쓰기 책과 다를 바가 없고, Refactoring은 글을 다 쓴 후에 퇴고하는 과정을 설명합니다.

대부분의 소프트웨어는 무척 복잡합니다. 소프트웨어 작성의 핵심은 결국 복잡한 문제를 얼마나 사람이 이해하기 쉽게 풀어쓸 것인가에 대한 문제입니다. 운영체제나 웹브라우제, 프로그래밍 언어 런타임 같은 소프트웨어가 아니더라도 웬만큼 성공한 소프트웨어는 1명의 인간이 이해할 수 있는 한계를 넘어서 있고, 이러한 복잡한 소프트웨어를 계속 유지 보수하고 개선해 나가기 위해서는 코드가 얼마나 이해하기 쉽게 작성되었는지가 가장 중요합니다. 새로운 기능을 추가하거나 성능 최적화를 하려고 해도 코드 이해가 선행되어야만 합니다.

제가 지난 1년 2개월간 현업의 게임 개발자들과 같이 이야기하면서 알게된 것은 게임을 잘 만들기 위한 도메인의 전문 지식에 비해, 프로그래밍을 잘 작성하기 위해 필요한 “글쓰기”로서의 프로그래밍 능력이 현저히 부족하다는 사실입니다.

여기에는 이유는 여러 가지가 있을 수 있습니다만, 가장 큰 문제는 도메인에 대한 전문 지식과 프로그래밍 능력을 구분하지 않는 풍조에 있습니다. 예를 들어, 머신 러닝 관련 프로젝트를 진행한다고 하면 당연히 해당 분야를 전공한 전문 지식이 필요합니다. 하지만 머싱 러닝 알고리즘을 오랜 시간 연구하였다고 해서 반드시 프로그래밍을 잘하는 것은 아닙니다. 프로그래밍은 글쓰기와 비슷해서 잘 쓴 글을 많이 보고, 많이 작성해 보고, 작성한 코드를 고쳐보고 고민하면서 조금씩 발전하기 때문입니다. 오히려 전문 분야 연구에 시간을 많이 쓴 개발자일수록 프로그래밍 경험이 부족해서 코드 작성을 잘 못하는 경우가 더 빈번합니다.

물론 현업 개발자라면 어쨌거나 하루 최소 8시간은 코드 작성에 시간을 쓰고 있고(물론 회의에 불려가거나 잡무를 하는 경우는 제외하고), 코드 작성 경험 부족이 프로그래밍을 못 하는 이유라고 보기는 어렵습니다. 실제로 개발에 많은 시간을 쓰는 데도 실력이 늘지 않는 또 다른 이유도 글쓰기 비유에서 답을 찾 수 있습니다. 유명 작가가 되려면 글을 많이 써보는 것도 중요하지만, 이른바 고전이라고 불리는 잘 쓴 글을 많이 읽는 것이 무척 중요합니다. 코드 작성도 마찬가지라서 잘 쓴 코드를 읽는 것이 코딩을 배울 수 있는 가장 좋은 방법입니다.

대부분의 개발자는 현업에서 선배 개발자들이 작성한 코드를 유지보수하면서 코드 작성 방법을 배우게 됩니다. 회사에 따라 다르긴 하겠지만, 이렇게 접한 대부분의 코드는 겨우 겨우 동작만 하지, 코드의 가독성이나 유지보수를 거의 생각하지 않고 작성된 코드일 확률이 높습니다. 이런 코드를 읽고, 어떻게든 돌아가게 수정하는 훈련만 하다 보면 애시당초 코드를 잘 짠다는 게 무엇인지 알기가 어렵게 됩니다.

방법이 없지는 않습니다. 잘 짠 코드는 인터넷에 이미 오픈소스로 많이 공개되어 있기 때문입니다. 관심 있는 분야의 오픈소스 프로젝트를 골라서 코드를 읽고 공부하는 것은 고전을 읽고 공부하는 것과 마찬가지라 정말 많은 것을 배울 수 있습니다. 물론 진입 장벽이 있습니다. 고전이란 모두가 읽고 싶어하지만 아무도 안 읽은 책인 것처럼 이런 성공한 오픈소스 프로젝트들도 사람들의 관심에 비해 실제로 코드를 읽고 참여하는 사람이 지극히 소수이기 때문입니다. 하지만 해답도 고전 읽기에서 찾을 수 있습니다. 원전을 두고 해설서만 찾아 헤맬 것이 아니라 원전을 사서 한 줄이라도 읽기 시작하는 것입니다.

Advertisements

3 thoughts on “프로그래밍과 글쓰기

  1. 안녕하세요. 게임 회사에 다니는 신입입니다.
    우연한 기회에 코딩 스쿨을 알게 되어서, 정말 많은 도움을 받고 있습니다.
    앞으로도 좋은 글 부탁드립니다.

    그리고 질문이 하나 있습니다. ^^
    오프소스 프로젝트 라는 말이 나와서요. 저같은 신입에겐 아직 낮선 단어라서,
    게임쪽 관련해서 추천할만한 오픈소스 프로젝트 있을런지요.
    현재 회사에서 유니티로 작업하고 있습니다만, 유니티에서 제공하는 프로젝트들을
    보는것도 도움이 될지 궁금합니다.

    좋아요

    • 클라이언트 개발자라면 오픈소스로 작성된 게임 엔진을 공부해 보시면 좋을 것 같습니다.

      모바일 게임에 많이 사용하는 https://github.com/cocos2d/cocos2d-x 가 소스 코드가 공개되어 있으니 한 번 보시기 바랍니다.

      유니티 자체는 소스 코드가 공개되어 있지 않지만 Mono나 Unity 라이브러리 중에서도 오픈소스가 있으니 찾아서 보시면 도움이 될 것입니다.

      좋아요

댓글이 닫혀있습니다.