[thinking] 쿨한 개발자 (feat. 소프트웨어 장인정신, 프로페셔널리즘)

- 7 mins

쿨?

글이 살짝 길어질 것 같으니 우선 간단히 정리부터하고 시작하겠다.

이 글의 주제는 “개발자에게 있어서 쿨함이란 무엇일까”에 대한 고찰이고,

내가 내린 나름의 결론은, “마땅한 책임에 대한 마땅한 책임감을 가지는 것”이다.

물론, 이는 비단 개발자에게만 국한되는 내용은 아니다.

자, 이게 무슨 개소리일까?


언제부터인가 사람들이 “쿨하다” 라는 표현을 많이 사용한다.

이를테면,

한 때 열렬히 사랑하다가 헤어진 연인을 하루아침에 뒤도 돌아보지 않고 잊어버린다던가,

상황이 어려운 친구에게 돈을 빌려주고는 나중에 잘되면 천천히 갚으라면서 소주까지 한 잔 사준다던가,

직장 상사에게 호되게 꾸지람을 듣고 아무렇지도 않게 다시 업무에 집중해 결국 성과를 이루어낸다던가,

학창시절 항상 자신의 삥을 뜯던 일진 양아치가 10년후 우연히 길거리에 나앉은 거지가 된 것을 보고 흔쾌히 적선한다던가.


뭐 굳이 이런 섬세한 상황극을 하지 않더라도 일상의 곳곳에서 쿨하다는 표현은 자주 애용되곤한다.

쏘맥을 1:1비율로 섞은 폭탄주를 원샷때리고 안주로는 고작 땅콩 하나를 주워먹는다. 쿨

그 술자리를 본인이 모두 계산한다. 쿨

집에가는 길에 뉴스를보니 삼성이 SDC 2018에서 접히는 디스플레이를 공개했다. 쿨

집에 도착하니 풀 옵션을 박아 주문한 500만원짜리 맥북프로가 배송돼 책상에 놓여있다. 쿨


이런 생각을 하다가 문득,

그렇다면 “개발자에게 있어서 쿨한 것이란 뭘까?” 에 대한 생각이 들었다.


분명 편견이지만, 내 경우 “개발자” 하면 떠오르는 이미지는 추울정도로 상당히 쿨했다.

쿨하게 추리닝에 후드티를 대충 걸쳐 입고 회사에 출근해서,

쿨해보이는 이중, 삼중 모니터와 함께 쿨해보이는 화려한 주변기기가 셋팅된 자리에 앉아,

쿨해보이는 검은 화면을 수십개 띄워 뭔가 쿨한 표정으로 작업하는 이미지.


즉, 개발자는 그 자체로 뭔가 상당히 쿨해 보이는 직업인데,

“그렇다면 모든 개발자가 쿨한가?” 하는 의문이 든 것이다.


그래서, 어쨌든, 결국 다시 개발이야기다.

바로 본론으로 가보자. 개발자에게 있어서 쿨한것이란 뭘까?

사실 실무를 하다보면 자신이 쿨하다고 “착각”하는 개발자가 상당히 많다.

나 또한 그랬었고, 지금도 ‘쿨병’에서 완전히 벗어나지 못했기때문에 정리를 좀 해보고자 한다.


이를테면 이렇다.

로컬에서 데이터 로딩 프로그램을 작성하고, 테스트해보지 않은채로 바로 테스트서버에서 돌린다.

로컬테스트를 돌려 보았는지, 테스트코드는 작성했는지 등등을 물어보면 보통 이런 대답이 돌아온다.

“에이~ 어차피 상용서버도 아니고 테스트서버인데 뭐 어때?”

“에이~ 이런 간단한 스크립트에 무슨 테스트 코드씩이나?”

“에이~ 주석 없어도 이정도는 다 읽을 수 있잖아?”


그 다음 “에이~” 를 말하는 순간,

결국 데이터를 로딩하다가 과부하로 인해 테스트서버가 죽어버린다.

다른 사람들이 테스트하던 스크립트까지 전부 중단되어버린다.

이런 상황에서도 그는 “에이~ 어차피 테스트서버인데 복구하면 되지~” 라고 ‘쿨’하게 생각하지만,

이미 ‘생산성’과 ‘신뢰’라는 귀중한 가치들을 희생한 이후라는 것은 깨닫지 못한다.

이렇게 확고한 어조로 말할 수 있는 이유는,

부끄럽지만 저 쿨한 개발자가 바로 나였기 때문이다. ㅎㅎ


어쨌든, 내가 경험한 바로 이런사람들은 자신이 상당히 Cooool한줄로 착각하고있는 경우가 많다.

마치 영화나 드라마속의 해커라도 된 마냥 코드를 전광석화처럼 다다다닥! 작성하고,

그 이후에 출력되는 수많은 에러로그를 사뭇 진지한 표정으로 분석하며 고개를 끄덕인다.

그리고는 에러가 발생하는 부분을 마치 땜빵하듯이 수많은 try ~ except로 처리하고는 git repository에 merge해버린다(?) (git에 올라온 본인의 기괴한 레거시코드를 몇 번이고 훑어보며 뿌듯해하는것은 덤)


테스트 케이스도 없고, 변수명도 제멋대로인데다가 주석 하나 없는 코드를 모두가 이해할 것이라고 생각한다.

컨벤션을 지키지 않는 것을 본인만의 “코딩 스타일” 이라고 말하곤 한다.

“난 특별해, 남들과 달라, 내 코드는 언제나 나만의 색을 지킬거야!”

뭐, 이런거다.


물론 개성은 존중받아야 마땅하지만,

나는 짧은 시간을 일하면서도 느낄 수 있었다.

개발자란 직업은 개성있고 톡톡 튀는사람보다는 생각보다 보수적인 사람에게 어울리는 직업이라는 것을.

여기서 개성, 보수성을 가르는 기준은 겉으로 드러나는 패션, 헤어 스타일, 말투나 성격 등을 두고 말하는 것이 아니다.

아마 이러한 외적인 부분때문에 개발자는 개성넘치는 사람들이 많다고 느끼는 경향이 있는 것 같다. 물론 동의한다.


하지만 여기서 말하는 보수적인 마인드란,

업무에 임하는데 있어서 기존의 일관성을 해치지 않으며 향후 유지보수에 대한 중요성을 항상 되뇌이는 마음가짐이나 철학을 일컫는다.

내가 생각해도 재미없는 말장난이지만,

그렇기때문에 좋은 코드는 유지’보수’가 용이하지 않은가?


다시 아까 이야기하던 ‘쿨한 개발자’ 이야기로 돌아오자면,

그 쿨한 개발자는 빠르게 코딩해서 돌아가는 프로그램을 신속히 만드는것이 실력이라고 생각한다. (물론 생산성또한 개발자가 갖춰야할 아주 덕목중 하나이지만, 단순히 “빠른 개발”과 생산성은 분명 차이가 있다고 생각한다)

그리고 누군가 그런 코드를 설명해달라고 하면,

귀찮음 절반과 거만함 절반이 섞인 애매한 표정으로 자신있게 설명한다.

중요한건, 그걸 듣고 이해하는 사람이 별로 없다.


개발자는 게을러지기위해 바빠져야한다는 말을 어디선가 들은적이 있다.

개발시에 코딩 컨벤션, 변수명, 테스트코드 등에 대한 충분한 고민을 수반한다면,

분명 단순히 동작하는 코드를짜는 것 보다 훨씬 ‘바빠질’ 것이다.

그리고 완성된 소프트웨어를 유지보수할때 비로소 게을러질 특권을 얻을 수 있는 것이다.

하지만 ‘쿨한 개발자’들은 그 게으름으로인해 향후 바빠질 운명이므로, 개발자의 미덕(?)과도 역행한다.


백번 양보해 모두가 이해하는 것을 떠나서, 1주일 후의 본인조차 이해할 수 있을지 의문이다.

타임머신이 있다면 1주일 전으로 돌아가서 전광석화같이 키보드를 두드리는 본인의 그 ‘쿨한’ 손가락을 몽땅 부러뜨려버리고 싶을텐데.


“쿨한 개발자”에 대해 너무 격하게 표현한 감이 있지만,

이는 아직도 완전히 고쳐지지 않은 나 자신을 스스로 꾸짖기위한 글이기도 해서 그렇다.


모두가 그렇겠지만, 나 또한 막 입사했을 무렵에는 코딩에 대한 자신감이 넘쳐흘렀다.

처음 몇 개월동안 가만히 앉아서 사내 코드 분석이나 하게하고, 매뉴얼 작성따위의 일이나 시키는게 상당히 귀찮고 지루했다.

그래, 내가 하기 싫었던 일에 대해서는 ‘쿨’ 하지 못했다.


하지만 당시에는 스스로 내가 상당히 쿨하다고 생각했다.

“코드 분석? 뭐 별거없네. 코드 못읽는 개발자도 있나? 2시간만에 끝났는데 남은 6시간은 뭐하지?”

“매뉴얼? 어차피 다 개발자들이 볼거니까 이런이런 기본적인 설명은 다 빼도 되겠네. 벌써 끝났는데 남은 4시간은 뭐하지?”

따위의 ‘위험한’ 생각을 하면서말이다.

실제로 이 위험한 생각은, 이후 실무에 투입되어 수많은 레거시코드를 양산하는 과정에서 그 위험성이 증명되었다.


마땅히 주어진 책임을 지지 않고, 선택적인 책임감과 의무감을 가지고 만족하는 것이 쿨하다고 생각했던 것이다.

사실 쿨함이란, 자신이 져야할 책임에 대한 마땅한 책임감을 가지는 것인데 말이다.


내가 정말 쿨한 개발자였다면 이렇게 생각했겠지.

“이쪽은 설명이 좀 부족해서 개발자도 이해하기 어렵겠는데? 하는김에 내가 공부해서 채워넣지뭐”

“이런 코드는 나중에 문제가 발생할 수 있겠는데? 근데 확신은 없으니까 일단 고쳐서 PR 올려놓지뭐”

비슷한 뉘앙스지만,

두 가지 태도중 어떤게 진짜 ‘쿨’한 것인지는 굳이 설명할 필요가 없을것이다.


사실 이는 비단 개발자에게만 국한되지는 않는다.

밀린 업무 메일을 보며

“뭐 별일 있겠어? 나중에 하자 나중에”

라고 하면서,

회식때는 책임감에 대해 침튀기며 연설하는 직장상사는 언뜻 쿨해보이지만, 사실 모순적이고, 위험하다.

업무를 나중으로 미룬것에 대한 책임을 본인이 아닌 회사나 주변 동료들에게 돌릴 가능성이 농후하다.


이러면 무슨 매일 숨 쉴 틈 없이 일하고,

허구한날 야근하는사람이 쿨한 사람인 것 처럼 말하는것으로 오해할 수 있는데,

일단 애초에 야근할 일이 없도록 업무조정을 합리적으로 하는 사람이 쿨한것이다.

자신의 능력으로 주어진 시간 내에 마치지 못할 업무를 잠자코 받아들이는 것이야말로 not 쿨이고, 책임감 없는것이다.


시간내에 못할 정도로 업무가 넘친다 싶으면, 합리적이고 명확한 근거를 기반으로 관리자를 설득시키는 것이 쿨한것이다.

최선을 다했음에도 설득시키지 못했다면 당장은 야근을하든 인력을 충당하든해서 일단 마무리지으면된다.

업무량과 기한에 대한 의견을 한 번 어필했으니, 관리자도 다음 업무를 배분할 때에는 어느정도 감안을 할 것이다.


만약에 그렇지 않고 똑같이 일이 반복된다면?

본인의 책임을 다하고자 꾸준히 ‘쿨’했음에도 도저히 대화가 되지 않고 합리적으로 개선할 수 없는 한계를 느꼈다면,

미련없이 다른 곳으로 떠나는 것 또한 쿨한것일지 모른다.


하지만,

현실에서 이러한 것들을 행동으로 옮기는 것이 어려운것은 나또한 한 명의 개발자이자 직장인으로써 너무 잘 알고있다.

사람들이 옳은 길을 몰라서 가지 않는 것은 아니다.

책임져야할 가정, 집안 형편, 아니면 그냥 선천적으로 소극적인 성격 등,

부당한 환경에 맞서고 싶음에도 불구하고 “쿨”해지기 어려운 여러가지 이유들이 있을 것이다.


하지만 이정도는 할 수 있지 않을까?

단순히 코딩을할때 변수명, 주석, 테스트코드를 합리적으로 작성하는것.

작성한 코드를 리팩토링하며 꾸준히 개선해 나가는것.

그리고 완성된 소프트웨어를 누구나 쉽고 편하게 사용할 수 있도록 매뉴얼을 작성해 문서화하는것.

어찌보면 이는 특별하고 어려운게 전혀 아니다.

본인이 작성한 코드를 본인 혹은 팀 구성원이 함께 관리할 ‘책임’을 가진 개발자로써,

이는 그 책임에 대한 마땅한 책임감을 지고 가는 것 뿐이다.

또한 개발업무 이외의 작업도 충분히 자신의 업무 영역임을 인정하고, 기꺼이 즐겁게 받아들이는 것이 쿨하다. (물론 터무니없이 완전 다른 영역의 일을 갑작스레 떠맡는것에 대해서는 이의를 제기하는게 맞다)


마무리가 좀 어정쩡하게 되어버린 감이 없지않아 있는데,

어쨌든 쿨한 개발자에대한 내 고찰은 이정도 선에서 마무리 되었다.

쿨한 개발자란 무엇일까를 정리하다보니 문득 이런 생각이 들었다.

프로페셔널리즘, 장인정신이라고도 말하는 그것들과 내가 고민한 “쿨한 개발자”는 비슷한 개념인 것 같다고 말이다.


좋은개발자가 되기위한 고민은,

더 나은 인간이 되기위한 고민은,

결국에는 비슷한 지점에서 접점을 찾게 되는걸까?

이미 이런 고민을 나보다 훨씬 깊이있게하고,

그 내용들을 이미 잘 정제된 문장으로 정리해놓은 훌륭한 다른 개발자들의 글을 보는것도 중요하다는걸 다시 한 번 느낀다.




코딩장이

코딩장이

-장이: [접사] ‘그것과 관련된 기술을 가진 사람’의 뜻을 더하는 접미사.

rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora