brunch

You can make anything
by writing

C.S.Lewis

by 느곰씨 오만가치 May 30. 2023

글쓰기와 코딩

둘 다 언어는 언어지

코딩을 시작한 지는 꽤 오래된 것 같다. 시골 초등학교(국민학교) 구석에 있던 4비트 컴퓨터는 우리가 가지고 놀 수 있는 유일한 장난감이었다. 시골은 문을 나서자마자 모든 것이 놀이터였지만 전자기기로 된 장난감은 그것이 유일했다. 카세트테이프에 데이터를 저장하고 불러오던 컴퓨터였다. 무려 나는 당시에 한 시간을 버스를 타고 도시로 컴퓨터를 배우러 다녔었다. 베이직으로 불리던 코딩 언어를 처음 접했다. 

그런 시골 마을에서 어머니는 컴퓨터(XT)를 사주셨다. 그 당시 한 달 월급에 가까운 돈이었다. 코딩도 가끔 했지만 어느새 게임기가 되어 있다. 돈을 들여 사준 컴퓨터인데 어머니 속이 얼마나 타들어 가셨을지 지금 생각해 보면 이해가 된다. 그러고 보면 꽤나 일찍 IT 교육을 받게 된 것이라고도 할 수 있다. 원래도 과학과 수학을 좋아했는데, 이른 나이에 접한 컴퓨터로 인해 나의 진로는 이공계가 될 수밖에 없었던 것 같다.

중학교 때는 친구 집에 있던 컬러로 된 컴퓨터 (AT, 286)가 많이 부러웠다. 가격은 지금 컴퓨터보다 비쌌다. 친구집에 놀러 가서 종종 게임을 하기도 했지만 그건 자주 할 수 있는 건 아니었다. 오히려 학교에 있는 컴퓨터로 한컴 타자 연습을 하는 것이 대부분이었다. 또래 중에서는 타자가 제법 빨라 자습 시간에 종종 교무실로 불려 가서 선생님들 자료를 만들곤 했다. 


컴퓨터 공학과는 아니었지만 공대에서 코딩은 필수 요소였고 나는 마이컴이라는 작은 칩에 프로그램을 넣는 일을 했다. 요즘은 마이크로 마우스, 라인 트레이서 같은 건 애들 과학 교재로 쓰일 만큼 흔해졌지만 당시에는 일일이 만들고 코딩해야 했다. 칩 안에 프로그램하는 걸을 firmware라고 한다. 하드웨어에 포함된 소프트웨어다.

자연스레 직장에서도 하드웨어를 움직이는 소프트웨어를 하게 되었다. 일반적인 게임이나 웹 프로그램과 많이 다르다. 코딩 자체보다 하드웨어의 구성과 움직이는 시퀀스에 더 많은 지식이 필요하다. 그래서 나도 자신을 소개할 때 프로그래머라고 하지 않는다. 엔지니어 혹은 소프트웨어 엔지니어라고 한다. 그럼에도 게임이나 웹 프로그램에 대한 동경이 없는 건 아니다. 그래서 이런저런 언어를 공부하기도 한다.


사실 언어라는 것은 크게 다르지 않다. 한국어나 영어나 말인 것이 다르지 않듯 그냥 문법과 어휘만 다를 뿐이다. 그리고 코딩 언어는 프랑스와 영어보다도 더 비슷하다. 그래서 하나의 언어를 제대로 배워두면 다른 언어를 배우는 건 그렇게 어렵지 않다. 그리고 새로운 언어는 기존 언어보다도 더 쉽게 만들어져 있다. 

코딩을 처음 배울 때 바이블을 펴고 달달 외는 사람이 있다. 물론 차근차근 배워나가는 건 중요하다. 하지만 이건 외국어를 배울 때 문법 책만 파고 있는 것과 같다. 하지만 말할 때 문법책에 나오는 몇 가지만 이용할 뿐이다. 코딩도 마찬가지다. 실제 코딩에 들어가면 생각보다 적은 걸로 많은 것을 해낼 수 있다. 

새로운 언어를 배울 때 나는 바이블 한 권을 빠르게 읽어 나간다. 목적은 단 한 가지. 이 언어는 어떤 기능이 있는지에 대한 걸 파악하는 시간이다. 그리고 그 바이블은 웬만해선 다시 펴보는 일이 없다. 읽으면서 쓸 것 같은 기능은 따로 표기하거나 정리해 둔다. 그리곤 바로 샘플 프로그램 따라 쓰기를 해본다. 이건 '필사'와 닮아 있다. 필요한 건 코드는 저장해 두고 나머지는 필요할 때마다 구글에서 찾으면 된다.

샘플 따라 하기가 끝나면 바로 내가 생각하는 걸 만들어 본다. 예제와 기록해 둔 기능들로 차례차례 쌓아둔다. 사실 코드를 외운다는 건 쉬운 일이 아니다. 많이 쓰다 보면 외워지는 것이다. 한번 만들어 놓은 코드를 지속적으로 재활용한다. 구글링 하며 자료와 코드를 찾으며 내가 생각한 대로 응용하면서 만들어 간다. 그렇게 하나를 만들면 자산이 된다.


원래 프로그램을 만들 때에는 명세서를 먼저 만들고 기능들을 정리한다. 글쓰기의 시놉시스와 닮았다. 구조를 짜는 것은 '플롯'이며 디자인 패턴은 '클리세'가 된다. 그 사이를 많은 글로 채워 나간다. 완성된 코드는 '리팩토링'해야 하는데 이건 '퇴고'와 같다. 

글쓰기와 코딩의 가장 닮은 점은 생각을 문자로 표기한다는 것이다. 글쓰기엔 스토리가 중요하고 코딩에는 시퀀스가 중요하다. 이야기는 순차적으로 때론 병렬로 진행될 수 있다. 코딩을 잘하기 위해서도 이런 스토리텔링이 필요하다. 담백하고 군더더기 없는 문자로의 전환은 코딩에서도 글쓰기에서도 중요하다.


하지만 무엇보다 닮은 점은 많이 써봐야 한다는 것이다. 책만 붙들고 잘 짜인 코드만 보고 있다고 잘하게 되는 건 아니다. 자신의 언어로 직접 작성해야 효율적인 글쓰기를 할 수 있다. 훌륭한 책, 훌륭한 문장을 알더라도 자신의 이야기에 녹여내지 못하면 의미가 없다. 그러려면 내 글이, 내 코드가 있어야 한다. 내 생각을 문자로 표현하는 일은 무엇보다 먼저 익혀야 하는 기술이다. 그것은 어디에서도 가르쳐주질 않는다. 스스로 해내야 하는 첫걸음이다.

내 글이 있는 다음에야 작법서를 이용해서 군더더기를 걷어낼 수도 있고 명료하게 수정할 수도 있다. 때론 좋은 문장을 끼어넣을 수도 있고 인용도 가능한 것이다. 시중에 나와 있는 대부분의 작법서는 퇴고 과정에서 참고할 수 있는 것들이기 때문이다. 스티븐 킹은 두 가지 글쓰기가 필요하다고 했다. 문을 닫은 글쓰기, 그리고 문을 열어둔 글쓰기가 그것이다. 맥락, 사실 등을 모두 무시하고 자신만의 이야기를 거침없이 써 내려가는 것이 문을 닫고 쓰는 글이라 했다. 그런 다음에 맥락을 맞추고 사실 관계를 확인하며 수정할 수 있다. 퇴고할 수 있는 내 글이 있다는 건 무엇보다 중요한 것이다.


아직은 초심자 수준의 글쓰기를 하고 있는 나는 코딩처럼 글쓰기를 익혀볼까 생각한다. 글쓰기도 코딩과 크게 다르지 않다. 쓰이지 않는 변수는 컴파일러가 'warning'을 띄운다. 문법대로 작성하지 않으면 error가 뜬다. 명료하지 못한 문장은 보기에 힘들다. 구조를 제대로 잡지 않으면 코딩 자체가 어렵고 코드는 난잡해진다. 스토리가 뒤죽박죽이면 훌륭한 프로그램을 만들 수 없다. 만들고 있는 나조차 뭐하는지 모를 지경이 된다. 이런 점들은 글쓰기와 코딩이 쏙 닮아 있다는 걸 알 수 있게 해 준다.


많이 쓰고 그것을 또 다듬다 보면 좋은 코드만큼 좋은 글이 나올 거라 믿는다. 언어를 배운다는 건 생각보다 더디지만 또 재미난 일이다. 즐기다 보면 더 잘하고 싶게 되고 그러다 보면 지겨운 일도 곧잘 해낼 수 있게 된다. 글쓰기도 코딩처럼 그렇게 잘할 수 있게 되길 기대해 본다.



이전 04화 확신에 찬 이야기를 하고 싶다
brunch book
$magazine.title

현재 글은 이 브런치북에
소속되어 있습니다.

작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari