하조은의 블로그

소설을 읽어도 개발 생각뿐

2022.02.12 (2년 전)

베르나르 베르베르가 한국에서 유독 사랑받는 작가라는 기사를 소개하며 글을 시작하고 싶다. 나 역시 그의 작품을 좋아했다. 처음 접한 작품이 <나무>. 고등학생 때 읽었고 10년 이상 지나 다시 읽게 됐다.

오늘은 이 책을 다시 읽으며 밑줄 그은 몇 가지 문장을 소개하고 그 문장과 관련된 소프트웨어 개발 이야기를 적어볼까 한다.

본격적으로 글을 읽기 전에 주의 사항을 하나 당부하고 싶다. 자칫 글이 길어질 수 있어 발췌한 문장에 대한 전후 맥락은 생략했다. 따라서 작가의 본래 의도와 살짝 다르게 문장이 해석된 부분이 존재할 수 있다. 작가의 문장과 내 글 사이에 약간의 논리적인 비약이 존재할 수 있다는 의미다. 그저 재미로 너그럽게 읽어주시길 바란다.

다름에 대한 이해

세상은 거꾸로 돌아가고 있다. 사람들은 누가 폭력을 당하는 광경은 견뎌 내지만, 어떤 사람이 자기들과 다르다는 것은 참지 못한다. ('투명 피부' 中)

개발자로 일한 지 5년이 넘었지만, 시각장애인을 위한 기능(접근성)을 고려해본 적이 없었다. 시급한 문제와의 경쟁에서 늘 뒤처졌다. 최근에 가이드라인을 준수하기 위해 시급한 문제가 되고 나서야 접근성을 고려하기 시작했다.

어쩌면 나 자신과 다르다는 점을 참지 못하고 있기 때문일지도 모른다. 참는 수준을 넘어 이해하고 당연하게 여기는 단계에 이르러야 할 텐데, 부디 다름에 대해 조금만 더 관심을 두자. 접근성을 고려하는 개발자가 되어보자. 더 많은 사람이 정보에 접근할 수 있는 세상을 만들자. 거꾸로 돌아가는 세상을 바로 잡자.

개발 일정 산정하기

낙관론자들이란 일이 어떻게 돌아가는지 잘 모르고 있는 사람들일 뿐이다. ('황혼의 반란' 中)

나는 일정 산정을 최대한 비관적으로 하는 편이다. 무슨 말이냐. 만약 하루 만에 개발 가능한 스펙이라면 1.5배 혹은 2배까지 늘려서 산정한다는 의미다. 보통 하루 동안 온전히 개발만 하기도 어려울뿐더러 개발하는 중에 예상 못 한 문제가 있을 수 있기 때문이다.

예상 못 한 문제를 줄이기 위해 문서(Tech Spec)를 쓰지만, 그마저도 실제 코드 작업을 시작하면 생각처럼 흘러가지 않는 경우가 많다. 경험상 문서와 실제 코드가 100% 일치하는 경우는 잘 없었다. 이러한 이유로 개발 일정을 산정할 때는 비관적인 태도가 도움이 된다. 예상 못 하는 이슈가 도사리고 있다고 가정하자. 일정이 예상대로 흘러가지 않을 수 있음을 잊지 말자.

우아한 코드

그들처럼 그렇게 고립되어 살다 보면, 심미적 기준이 우주 전체에서 두루 받아들여지고 있는 기준과는 사뭇 달라질 수 있다. 그들은 자기들 자신이 아름답다고 생각한다. 따라서 그들 눈에는 우리가 흉측해 보일 수밖에 없다. ('그들을 사랑하는 법을 배우자' 中)

외계인(우리)의 입장에서 인간(그들)을 설명하는 문장 중 일부다. 고립된 프로젝트에서도 비슷한 문제가 생긴다. 계속 혼자만 개발을 하다 보면 스스로 작성한 코드가 너무 멋지고 근사해 보일 때가 있다. 자신만의 규칙을 정의해 아주 깔끔하면서도 문제를 멋지게 푼 것처럼 느껴진다.

때론 이런 코드를 '우아하다'고 표현한다. 우아한 코드를 막상 다른 사람에게 보여주면 코드의 의미를 이해하지 못하는 경우가 생긴다. 코드가 흉측해 보이는 것. 이해가 되지 않는 코드는 흉측하다.

동료도 이해할 수 있으면서 문제를 완벽하게 풀어내는 코드가 우아한 코드다. 고립을 피하고 객관적으로 아름다운 코드를 도출하기 위한 방법이 '코드 리뷰'다. 코드 리뷰를 통해 더 나은 해결 방법을 찾으며 우아한 코드를 완성해가자. 그들(동료 혹은 그가 작성한 코드)을 사랑하는 법을 배우자.

연봉과 신념

인간의 정신을 고양시키기 위한 싸움에서는 천장을 높이는 것만이 능사가 아니다. 바닥이 무너져 내리지 않게 하는 것도 그에 못지않게 중요하다. ('수의 신비' 中)

문장에서 인간의 정신을 고양시키기 위한 싸움은 인간다운 삶을 사는 것으로, 천장을 높이는 것은 연봉을 높이는 것으로, 바닥이 무너져 내리지 않게 하는 것은 신념을 잃지 않는 것으로 해석했다.

개발자 연봉이 몇 년째 급속도로 오르고 있다. 개발자로서 기분 좋은 일이지만 지나치게 돈만 좇게 될까 걱정된다. 다른 사람이 아니라 나 자신이 걱정된다.

세상을 바꾸는 소프트웨어, 이웃의 필요를 채우는 소프트웨어를 만들고 싶다고 소개하지만 늘 그 기준으로 선택하지 못하는 게 아쉽다. 당장의 내 편의와 즐거움 그리고 더 많은 돈을 벌기 위한 선택 앞에서 갈등한다. 인간다운 삶을 사는 것은 결코 연봉만 높여서 가능한 것이 아님을 알면서도.

어린 신(神)과 개발자

토기 발명을 소홀히 했다는 이유로 한 문명이 무너졌다고 생각하니 분통이 터졌다. ('어린 신들의 학교' 中)

어린 신인 주인공은 인간 사회를 발전시키는 과정에서 토기 발명이라는 사소해 보이는 것을 놓치는 바람에 문명 하나를 망쳐버린다. 개발자들도 사소한 실수로 소프트웨어를 망치기도 한다.

부정을 뜻하는 느낌표(!) 하나가 빠져서 로직 전체가 뒤바뀌는 경우. 저장을 위해 'cmd + s'를 눌렀는데 cmd가 눌리질 않아서 'ㄴ'이 코드에 찍히면 빌드가 되지 않고 에러를 뿜는 경우도 있다. 또 세미콜론(;(U+003B))을 그리스어 물음표(;(U+037E))로 바꿔서 개발자 친구를 골탕 먹을 수 있다는 얘기도 유명하다.

그 밖에 얼마나 사소한 실수들이 있는지 열거하자면 끝이 없다. 이런 실수를 발견하고 허탈하고 분통이 터진다. ("이런 걸 실수하다니...!") 이처럼 개발은 어느 하나 소홀히 할 수 없는 일이다. 어쩌면 개발자는 소프트웨어라는 세상의 어린 신일지도 모른다.