
지난 10여 년간 프론트엔드는 눈만 뜨면 새로운 기술이 등장하고, 시시각각 변화가 이어졌습니다. 그러나 이제는 어느 정도 안정기에 접어들면서 예전만큼의 빠른 변화는 줄어든 듯합니다. 또 클라이언트 브라우저 중심의 무대에서 벗어나, 서버사이드와 프론트엔드 사이의 경계가 중요한 화두로 떠오르고 있습니다. 여기에 AI까지 등장하면서, 앞으로 프론트엔드가 어떤 변화를 맞이하게 될지 더욱 궁금해집니다.
사실 글을 써야겠다는 생각은 오래전부터 하고 있었지만, 기술적인 새로움이나 적어볼 만한 주제를 찾지 못해 망설이고 있었죠. 그러다 우연히 제 커뮤니티 ‘개발자 유머’ 채널에 올린 ‘Programmer Mindset’ 짤을 보게 되었습니다. 그 순간, 프론트엔드 기술 이야기가 아니라 소프트 스킬, 특히 마인드와 관련된 이야기를 풀어보면 어떨까 하는 생각이 들었죠. 이번 글에서는 기존과는 조금 다른 주제로 이야기해 보려 합니다.
개발자라면 공감할 유머라고 생각합니다. 저를 비롯해 우리는 항상 (시간과 돈만 준다면) 세상에서 개발 못 할 것이 없다는 최고의 자신감을 가진 개발자(중2병)의 기분을 느끼다가도, 갑자기 세상 모든 개발자들이 나보다 뛰어나 보입니다. 내가 맡은 프로젝트는 다른 사람 덕분에 성공했고, 나 자신은 너무 초라하게 느껴지는 임포스터 증후군 (Imposter Syndrome)과 같은 기분을 왔다 갔다 하며, 감정의 롤러코스터를 타곤 하죠.
임포스터 증후군: 번역하면 ‘가면현상’인 이 말은 자신의 성공이나 현재 위치에 대해, “이건 진짜 나의 실력이나 참모습이 아니다”라며 언젠가 이 가면이 벗겨지고, 제 형편없는 실력이 들통날지도 모른다는 심리 상태를 말합니다. 정리하면, 임포스터 증후군은 자신이 쌓아온 성취를 능력과 연결하지 못하고, 오히려 스스로의 실력을 낮춰 평가하는 현상을 뜻합니다.
이런 심리학적 용어가 개발자 관련 글에 자주 등장하고, 커뮤니티에서도 짤이나 공감 글로 자주 공유되는 이유가 있습니다. ‘이런 감정은 나만 느끼는 게 아니구나’ 하는 생각이 들 때, 오히려 위안을 얻을 수 있기 때문입니다.
특히 개발자라는 직업은 프로젝트 성과의 차이가 극명하게 드러납니다. 더구나 프로젝트의 성공 기준이 기술적 성취보다 사업적 성과에 맞춰지다 보니, 개발자의 기여가 온전히 반영되기 어려운 구조입니다. 그래서 개발자가 이런 감정을 더 자주 경험하는 것 같습니다.
다행히 이런 감정의 파도는 위아래로 요동치면서도, 결국 긴 흐름으로 보면 ‘적분(?)하면 0’에 가까워집니다. 즉, 지나친 기복이 아니라면 꽤 건강한 상태라고 할 수 있습니다. 하지만 문제는 특정 감정에 너무 오래 머무를 때입니다. 특히 번아웃처럼 힘든 상태가 길게 이어지고, 한 번 무너진 자신감이 좀처럼 회복되지 않을 때는 상황이 달라집니다. 그때 느끼는 감정은 단순히 ‘괴롭다’라는 세 글자로는 설명하기 어려울 만큼 깊고 무겁습니다.
저 또한 개발자로 살아오면서 이러한 심리 상태를 여러 번 경험했습니다. 특히 개인 사업을 접어야 했을 때, 구직이나 이직에 실패했을 때, 내가 맡은 프로젝트가 사업적으로 성공하지 못해 정리해야 했을 때, 그리고 내가 저지른 실수가 큰 손해로 이어졌을 때 등 수차례 이런 시기를 겪어보았습니다. 그 과정에서 극복을 하기도 했고, 또 더 깊은 곳으로 떨어지는 경험도 했습니다.
이 글은 그런 심리적 문제를 어떻게 극복하면 좋을지에 대한 내용을 적어보려 합니다. 결론적으로 말하자면, 가장 좋은 방법은 이미 여러분도 잘 알고 계실 겁니다. 1) 운동을 하세요. 2) 그리고 취미를 가지세요. 시대를 막론하고 어른들이 늘 하던 조언은 사실 크게 틀리지 않습니다. (웃음)
그렇지만 보통 이런 부정적인 심리 상태에 오래 빠져 있으면 운동을 하거나, 취미를 즐길 만한 에너지 자체를 잃어버리기 쉽습니다. 저 또한 뻔한 말로 끝내고 싶지는 않습니다. 그래서 이번에는 도움이 될 만한 몇 가지 이론에 대해 이야기해 보려 합니다. 이 글이 개발자로 살아가면서 힘들고 지친 마음을 겪고 있을 누군가에게 작은 도움이 되기를 바랍니다.
주의: 앞으로 설명할 이론들은 최대한 나름대로 책을 통해서 얻은 지식이긴 합니다만, 여기저기에서 짜집기한 것이니 엄밀하게는 틀릴 수 있습니다. 학문이 아니라 그냥 팀의 사수나 동료가 해줄 수 있는 일종의 개똥철학 중 하나라고 생각해 주세요. (틀린 이론이 있다면 댓글로 PR 주세요!)
저는 정신적으로 지치고 마음이 약해지면 책을 보곤 했습니다. 그리고 “우울할 때 뇌 과학”과 같은 내 상황에 맞는 제목에 끌려서 책을 고르곤 합니다. 그러다 보니 주로 심리학, 뇌 과학, 자기계발서 등을 읽게 됩니다. 부자가 되는 방법을 다룬 책을 제외하면, 대부분의 이런 책들이 이미 베스트셀러에 올라 있기 때문에 찾아보는 게 어렵지는 않습니다.
저는 제가 개발자라서 그런지 몰라도, 철학이나 심리학, 뇌 과학, 자기계발서를 읽다 보면 이게 단순히 힐링이나 지식, 학문, 혹은 진리로 다가오기보다는 하나의 ‘프레임워크’나 ‘패러다임’처럼 느껴집니다. 가령 객체 지향 프로그래밍이나 함수형 프로그래밍, MVI 아키텍처, 새로운 상태 관리 라이브러리, 클린 코드나 리팩토링 책, 혹은 TDD같이 말이죠.
뭐랄까, ‘개발에는 정답이 없지만, 내가 해보니 이 방식이 더 좋은 것 같아서 이렇게 정리해 봤어. 너도 이렇게 한번 해볼래?’라는 느낌이랄까요? 개발이라는 단어 대신 ‘인생을 살아보니까’라고 바꿔 읽어도 큰 위화감이 없을 거라고 생각합니다.
보통 우리가 개발을 시작할 때 깊은 이론은 잘 모르더라도, 개발을 하다 보면 직감적으로 ‘이렇게 하니까 나중에 너무 힘드네. 다음에는 이렇게 해봐야겠다.’라는 경험치를 쌓게 됩니다. 그러다가 객체 지향 프로그래밍이나 함수형 프로그래밍 같은 특정 패러다임을 알게 되면, 좋은 코드에 대한 관점이 생기면서 그동안 직감적으로만 느끼던 것들이 훨씬 더 선명하게 보이기 시작합니다.
그러나 객체 지향이 더 옳고 함수형 프로그래밍이 틀렸다거나, 혹은 그 반대라는 것이 사실은 아니라는 것도 알고 있습니다. 그것은 단지 같은 대상을 바라보는 다른 사고 체계이자, 생각하는 방법일 뿐입니다. 우리가 특정 프레임워크를 사용하면 개발이 더 편해지고, 특정 아키텍처 패러다임을 따르면 개발이 더 수월해지는 것과 비슷합니다. 반대로 특정 프레임워크나 특정 상태 관리 방식을 적용하는 것이 더 불편할 수도 있습니다. 그렇다고 해서 그 프레임워크의 체계가 완전히 틀린 것은 아니겠지요.
이와 같은 느낌으로, 저는 멘탈 관리에 도움이 될 만한 사고 체계, 정확히 말하면 이론보다는 일종의 관점을 몇 가지 소개하려고 합니다. 제가 ‘이론’이 아니라 ‘관점’이라고 표현하는 까닭은 이것이 절대적인 진리나 진실이 아니기 때문입니다. 언제든 ‘나와 맞지 않는다’라고 느끼면 받아들이지 않아도 되고, 무엇보다 제가 학문적으로 틀릴 수도 있다는 점을 전제로 말씀드리는 것입니다.
제가 본 심리학 혹은 뇌과학 영역에서 알게 된 흥미로운 이론 중 하나는 ‘사람은 두 가지의 사고 체계를 가지고 있다’라는 것이었습니다. 아마 보통은 무의식과 의식, 감정과 이성처럼 우리의 생각에는 서로 다른 무언가가 함께한다는 느낌을 받아본 적이 있을 겁니다.
제가 읽은 『생각에 관한 생각』이라는 책에서는 우리가 흔히 들어본 ‘메타인지’와 ‘생각’에 해당하는 두 가지 체계를 설명합니다. 그런데 저자는 이 체계에 이름을 붙이는 순간 그 자체가 틀이 될 수 있다고 말하며, 대신 ‘시스템1’과 ‘시스템2’라고 부르자고 합니다. 저도 앞으로는 이 표현을 사용하려 합니다.
이러한 사고 체계가 생겨난 이유는 진화론적인 관점에서 설명할 수 있습니다. 언어가 생기기 이전에 만들어진 뇌와 그에 기반한 사고 체계, 그리고 이후 언어가 발달하면서 진화한 체계가 공존하게 되면서 두 가지 시스템이 형성되었다는 것입니다.
아래 2가지 질문을 봐주세요.
- 2 x 2 = ?
- 167 x 24 = ?
시스템1은 생각을 거치지 않고 바로 작동합니다.예를 들어, 우리가 ‘2 x 2 = ?’를 보는 순간, 답을 계산하려고 하지 않아도 곧바로 ‘4’가 떠오릅니다. 이는 무의식적으로 나오는 반응이며, 우리가 의식적으로 제어할 수 없습니다.
반면 ‘167 x 24 = ?’라는 문제의 답을 구하려면 상당히 의식적인 사고가 필요합니다. 주의를 집중해 의식적으로 생각할 때는 시스템2를 사용하게 됩니다.
여기서 ‘의식’이라는 단어를 떠올리니, 예전에 인터넷에서 본 함정 글이 생각납니다.
“당신은 눈을 깜빡이는 것을 의식하게 되는 저주에 걸렸습니다. 이제는 눈을 깜빡이는 것을 계속 신경 쓰게 됩니다.”
이 글을 보기 전까지는 눈을 깜빡이는 것을 전혀 의식하지 않았을 겁니다. 의식적으로 생각해 본 적도 없었을 겁니다. 그러나 이 글을 읽는 순간부터는 눈을 깜빡이는 행위 자체가 계속 신경 쓰이게 됩니다. (이 글을 쓰고 있는 저조차도 지금 눈을 깜빡이는 것을 의식하고 있네요 ㅠㅠ)
재미있는 이야기들이 많지만, 제가 하고 싶은 이야기의 본질은 이게 아닙니다. 정리하자면 우리는 두 가지 사고 체계, 즉 시스템1과 시스템2를 가지고 있다는 점입니다. 시스템1은 내가 의식하지 않아도 자동으로 반응하고 동작하는 생각이며, 시스템2는 내가 의식해서 행하는 생각을 의미한다는 것을 기억해 주세요.
시스템1은 내가 실행하지 않았는데도 OS에서 자동으로 돌아가는 백그라운드 프로세스와 같습니다. 사실 무엇이 돌아가고 있는지도 잘 인지하지 못합니다. 반면, 시스템2는 내가 지금 실행하고 있는 애플리케이션과 같아서, 주의(focus)를 기울여야만 사용할 수 있다고 이해하시면 됩니다.
시스템1은 단순히 익숙해진 수학 문제에만 국한되지 않습니다. 얼굴 표정을 보고 순간적으로 해석하는 것이나, 공이 날아왔을 때 피하는 반응, 특정 사진을 보고 즉각적으로 느껴지는 감정 같은 것들도 모두 시스템1에서 이루어집니다. 내가 하지 않으려고 한다고 멈출 수 있는 것이 아니며, 이 과정에서는 ‘인식했다’라는 자각조차 존재하지 않습니다.
시스템1과 시스템2는 운동선수나 프로게이머의 반응 속도, 그리고 개발에서의 숙련 과정까지 설명할 수 있습니다. 처음에는 우리가 무언가를 할 때 의식적으로 노력해야 하고, 원하는 대로 잘되지 않습니다. 이때는 시스템2만 작동하고, 오히려 시스템1이 방해를 하기도 합니다. 그러나 반복적으로 개발하거나 훈련을 거듭하다 보면, 시스템2의 행동이 시스템1로 옮겨가면서 점점 능숙해집니다.잘하기 위해 충분한 반복과 시간이 필요한 이유도 바로 여기에 있습니다.
그리고 재미있게도 시스템1을 통해 무언가를 하게 되면, 우리는 언어로 그 사실을 인지하지 못합니다. 그래서 무언가를 잘하는 사람에게 ‘왜 그렇게 했느냐?’, ‘어떻게 하면 잘할 수 있느냐?’라고 물어보면, 이성적으로 설명하기 어려운 이유도 여기에 있습니다. 언어를 사용해 설명하는 것은 시스템2의 역할이기 때문입니다.
이 개념은 우리가 개발을 할 때에도 적용됩니다. 많은 이론을 알고 이해하는 것은 시스템2의 몫이지만, 실제로 적용하고 경험을 쌓아 능숙해지는 것은 시스템1이 담당합니다. 그래서 단순히 학문적으로 공부만 하는 것보다, 직접 많이 해보는 것이 실력을 키우는 데 훨씬 큰 도움이 됩니다. 다만 그 과정을 더 효율적으로 만들어주는 것은 시스템2의 역할이지요.
시스템1은 감정에도 깊게 관여합니다. 그리고 시스템1의 특성상 이러한 반응은 우리가 의식하지 않아도 자동으로 발현됩니다. 특히 누군가의 표정을 볼 때 우리는 거의 즉각적으로 반응하게 됩니다. 한번 거울을 보고 웃어보세요. 아니, 굳이 거울을 보지 않아도 좋습니다. 웃는 표정을 짓거나, 찡그린 얼굴을 하거나, 화난 표정을 지어보면 그 순간 말로 설명하기는 어렵지만, 감각이 달라지는 것을 느낄 수 있습니다. 그렇지만 이 변화를 언어로 표현하기는 매우 어렵습니다.
그리고 반대로 ‘기쁨, 슬픔, 짜증, 분노’라는 글자를 읽는 순간에도, 우리는 살짝 다른 감각을 받을 수 있습니다. 분명 언어를 다루는 체계는 시스템2인데도 글자에서 감정을 느낄 수 있는 이유는, 시스템2와 시스템1이 서로 다른 체계이면서도 완전히 분리되지 않고, 항상 상호작용하기 때문입니다.
시스템1은 감각적입니다. 말로 표현할 수는 없지만, 분명히 신체의 변화와 감각이 느껴집니다. 웃을 때, 찡그릴 때, 얼굴을 일그러뜨릴 때, 우스꽝스러운 표정을 지을 때마다 설명하기는 어렵지만, 분명히 다른 감각이 느껴집니다.
반대로 시스템2는 이성적이고 언어적입니다. 우리는 이러한 감각에 특별한 언어를 붙이고, 그 언어는 다시 특정한 생각을 불러일으킵니다. 시스템2는 시스템1이 만들어낸 감각을 언어로 이해하고 해석하여 이성적인 사고로 정리하는데, 이것을 우리는 ‘감정’이라고 부릅니다.
재미있는 사실은 시스템1의 감각을 사실 우리는 제대로 알지 못한다는 점입니다. 분명히 실재하는 감각이고 생생하게 느껴지지만, 우리는 이것을 이해하지 못하기 때문에 시스템2가 언어로 설명해야만 비로소 감정의 형태로 발현됩니다. 이 점은 굉장히 중요합니다. 진정한 의미는 감정에서의 감각은 실제로 존재하지만, 우리가 느끼는 ‘감정’은 주관적인 이성적 해석을 거쳐 발현된다는 점입니다.
물론 감각과 감정은 실제로 매우 복잡하며, 단순히 이 두 가지로만 설명할 수 있는 것은 아닙니다. 다시 한번 말씀드리지만, 이 글은 어디까지나 일정 부분 이론적 내용을 바탕으로 하지만 엄밀한 학술적 이론을 설명하려는 것이 아닙니다. 그러니 하나의 패러다임으로 바라봐 주시기를 바랍니다.
아주 중요한 부분이라 한 번 더 강조하겠습니다. 시스템1이 만들어낸 감각은 100% 실재하는 것이지만, 이를 해석하는 것은 시스템2의 역할입니다. 결국 감정은 감각을 해석하는 과정에서 발현되는 것이기에, 결과적으로 매우 주관적이라는 점입니다.
처음에 보았던 짤을 떠올려봅시다. 사실 어제의 나와 오늘의 나 사이에는 그렇게 큰 차이가 있을 리 없습니다. 그럼에도 불구하고 감정이 널뛰듯 요동친다는 것은 곧 감정이 주관적인 해석이라는 방증이기도 합니다. 이제 취업이나 이직을 위해 면접을 앞둔 상황을 생각해 보세요. 가슴이 답답하고, 평소보다 숨이 가빠지고, 심장이 쿵쾅거리며, 몸이 마비되는 듯 죄어 오는 감각을 느낄 수 있습니다. 우리는 보통 이런 상태를 두고 ‘긴장했다’라고 표현합니다. 그런데 여기서 감정이 아니라, 당시의 신체 변화나 감각만 떠올려 보시기 바랍니다.
사실 이런 감각은 우리가 ‘설렘’을 느낄 때와도 상당히 비슷합니다. 멋지게 면접을 마치고 합격 또는 불합격 통보를 기다리는 순간, 그리고 메일이 도착했지만 차마 제목을 클릭하지 못하는 순간에도 비슷한 감각을 경험합니다. 물론 이때도 긴장했다고 볼 수 있지만, 동시에 설렘이라고 할 수도 있겠지요.
뭔가 억지스럽게 느껴진다면, 우리가 누군가에게 고백하는 순간을 떠올려보세요. 몸이 굳어지고 두근거리고 호흡이 가빠지는 그 감각은 긴장과 매우 유사합니다.
우리가 ‘긴장된 상태’라고 말하는 순간은 사실 고도의 각성 상태입니다. 평소와는 다른 중요한 일을 앞두고 있기 때문에, 몸이 평소와는 다른 신호를 보내며 반응하는 것입니다. 그리고 이러한 과정은 시스템1에서 일어나기에 우리는 그 감각이 정확히 무엇을 의미하는지 알지 못합니다. 앞서 말했듯 긴장이란 결국 “중요한 순간이니 더 잘할 수 있도록 준비하라”는 신호인 셈입니다. 말 그대로 우리에게 ‘긴장감’을 불어넣는 것이죠.
흥미롭게도 공연장의 가수들 중에는 이러한 감정을 즐기는 사람들이 있다고 합니다. 실제로 이 순간을 ‘굉장히 설레는 감정’이라고 표현하기도 합니다. 평소와는 다른 이상적인 각성 상태이기에 몸이 뻣뻣해지고 사고가 잘되지 않거나, 말을 버벅댈 수도 있습니다. 그러나 반대로, 이러한 각성 상태 덕분에 평소보다 더 큰 에너지와 집중력을 발휘할 수도 있습니다.
다시 생각해 보면, 결국 중요한 것은 이것을 어떻게 받아들이느냐입니다. 즉, 같은 감각을 어떻게 해석하느냐에 따라 면접장에 들어가기 전의 감정과 생각은 충분히 달라질 수 있습니다. 이 감각을 ‘불안’이라고 해석하면 정말로 불안해집니다. 하지만 ‘각성’, ‘변화’, ‘설렘’, ‘초조’ 등 얼마든지 다른 이름으로 해석할 수도 있습니다.
분명 감각은 시스템1이 만들어내는 변하지 않는 사실입니다. 그러나 그 감각을 감정으로 해석하는 과정은 시스템2가 이성의 언어로 하는 것이기에, 우리는 이를 상황에 맞게 바꿔 받아들일 수 있습니다. 그렇게 함으로써 같은 감각도 다른 감정으로 전환해 활용할 수 있습니다.
제가 조금 오래된 웹 개발자라서 그런지, 이 대목에서 HTML과 CSS로 개발하던 순간이 떠올랐습니다. 예전에는 게시판 솔루션 등을 통해 개발하고, 프론트엔드 개발자는 CSS만 수정해 개발하던 시절이 있었습니다. 변경할 수 없는 HTML을 가지고 어떻게든 요구사항을 맞추기 위해 고군분투했던 시절이었죠. 게시판이나 블로그, 혹은 쇼핑몰 솔루션에서 제공되는 HTML도 CSS를 어떻게 꾸미느냐에 따라, 같은 솔루션이라도 얼마든지 새로운 서비스로 탈바꿈할 수 있었습니다.
지금 프론트엔드 개발을 하는 분들이라면 이 비유가 크게 와닿지 않을지도 모르겠습니다. 그렇다면 백엔드와 프론트엔드의 관계로 생각해 보세요. HTML과 CSS 대신 오픈 API(Open API)와 프론트엔드 개발로 치환해도 좋습니다. 우리는 오픈 API 서버에서 제공하는 API, 스키마, 값은 제어할 수 없습니다. 그것은 그대로 주어지는 것이죠. 그러나 같은 API를 가지고도 무수히 많은 다른 서비스를 만들어낼 수 있으며, 당연히 그 퀄리티 역시 달라집니다.
시스템1은 우리가 컨트롤할 수 있는 영역이 아닙니다. 이것들은 자동으로 동작하며, 원하든 원하지 않든 반응합니다. 예를 들어, ‘2 + 2 = ?’라는 글자를 보는 순간 곧바로 ‘4’가 떠오릅니다. 이와 같은 원리로 감정이 발생할 때 만들어지는 감각과 신체적 변화 역시 시스템1에서 처리됩니다. 그리고 이때 만들어지는 감각은 내가 제어할 수 없으며, 100% 실재하는 감각입니다.
그러나 감정의 최종 결과는 시스템2가 이러한 감각을 해석하면서 만들어집니다. 다만 우리가 편의상 시스템1과 시스템2라고 나누어 부르지만, 실제로 이 둘은 분리될 수 없습니다. 우리는 하나의 존재이기 때문입니다. 마치 HTML과 CSS는 따로 존재하지만, 결국 서비스라는 결과물은 이 둘이 함께 만들어내는 것과 같습니다. 어느 하나만 있어서는 의미가 사라지죠.
그러나 같은 HTML에도 얼마든지 다른 CSS를 붙일 수 있습니다. 우리가 어떤 CSS를 작성하느냐에 따라, 같은 콘텐츠라도 전혀 다르게 보이게 만들 수 있습니다. 보기 싫은 요소는 {display: none}으로 숨길 수 있고, 없던 콘텐츠도 {content: ‘❤️’}를 통해 추가하고 꾸밀 수 있습니다. 같은 HTML이라도 어떤 CSS를 적용하느냐에 따라 결과물은 달라집니다. 복잡하고 못생겨 보일 수도 있고, 반대로 깔끔하고 정갈한 결과물을 만들 수도 있습니다.
감각과 감정도 마찬가지입니다. 감각은 분명 바꿀 수 없고, 우리가 통제할 수 없는 무언가입니다. 하지만 해석은 다르게 할 수 있습니다. 감정은 주관적인 것이며, 우리는 이성의 의식과 의지를 통해 같은 감각으로도 다른 감정을 만들어낼 수 있습니다. 이를 ‘긍정적 인지 재해석’이라고 부릅니다.
“우리는 같은 감각을 가지고도 얼마든지 다른 감정을 만들어낼 수 있다. 감각은 실제이지만, 감정은 주관적인 해석의 결과물이다. 즉, 내가 만들어내는 것이다.” 앞서 말했듯 같은 HTML도 CSS를 어떻게 작성하느냐에 따라 전혀 다른 결과물을 만들어낼 수 있습니다. 그렇다고 하나의 CSS를 무작정 모든 HTML에 적용할 수는 없습니다.
개발자들은 Bad Code와 Good Code를 비교하며, 무엇이 더 클린 코드인지 배우곤 합니다. 그리고 나쁜 코드를 더 나은 코드로 바꾸는 과정을 리팩토링(refactoring)이라고 부릅니다. 같은 코드라도 더 가독성 있고 보기 좋은 코드로 바꿀 수 있으며, 이러한 방법은 좋은 예시 코드를 통해 배우게 됩니다.
마찬가지로 우리는 앞서 ‘긴장’이라는 감각을 ‘설렘’이나 ‘각성’으로도 해석할 수 있다고 했습니다. 즉, 리팩토링을 통해 같은 코드라도 더 읽기 좋은 코드로 바꿀 수 있듯, 같은 HTML도 다른 CSS로 더 멋지게 표현할 수 있습니다. 이제 저는 이러한 개념을 바탕으로, 유사한 감정을 더 긍정적이고 멋진 감정으로 해석할 수 있는 좋은 코드 예시들을 소개하고자 합니다.
우리는 화가 날 때가 있습니다. 일이든 논쟁이든, ‘분노’라는 감정을 접하는 순간은 누구에게나 찾아옵니다. 그러나 이러한 분노는 논리를 통한 설득보다는, 더 쉽고 편하게 상대를 굴복시키려는 편협한 커뮤니케이션 방식으로 흐르기 쉽습니다.
대신 우리는 이 ‘분노’를 ‘열정’이라는 감정으로 치환해 해석할 수 있습니다. 분노와 열정은 모두 순간적으로 폭발적인 에너지를 만들어낸다는 점에서 유사합니다. 따라서 분노를 느끼는 순간, 그것을 상대를 제압하는 도구로 발산하기보다 스스로를 더 열정적으로 움직이게 하는 에너지로 전환해 보시기 바랍니다.
우리가 자주 겪는 감정 중 하나가 바로 ‘스트레스’입니다. 업무를 하다가 스트레스를 받고 있다는 감정을 느낀다면, 이를 ‘도전 의지’라는 감정으로 치환해 볼 수 있습니다.
예를 들어, 헬스를 하는 상황을 떠올려 보세요. 근력을 키우려면 원래 들던 무게보다 더 큰 무게를 들어야 비로소 성장할 수 있습니다. 내가 감당할 수 있는 최대치를 이겨낸 만큼 근육이 발달하는 것이죠. 스트레스를 받는다는 것은 지금 내가 한계치에 도달했다는 뜻입니다. 이는 곧, 그것을 뛰어넘는 순간 내가 성장할 수 있다는 의미이기도 합니다.
만약 스트레스를 받고 있다는 사실을 인지했다면, 그것을 극복하는 것을 도전 목표로 삼아보세요. 스트레스는 곧 내가 성장의 문턱에 서 있다는 증거이며, 충분히 자랑스러워해도 좋습니다.
우리는 때때로 비슷한 또래의 다른 성공한 개발자들을 보며, 질투나 시기의 감정을 느낍니다. 그 정도까지는 아니더라도, 부러움이나 배 아픔을 느낄 수도 있습니다.
하지만 이때 중요한 것은, 그 감각을 단순히 ‘시기와 질투’로 두지 않는 것입니다. 대신 ‘나도 저런 것을 하고 싶어 했구나’라는 자각의 감정으로 전환해 보세요. 또한 ‘이 분야에서 저렇게까지 성공할 수도 있구나’, ‘저런 길도 가능하구나’라는 영감의 감정으로 바꾸는 것도 좋습니다. 그렇게 되면 진심으로 그 사람에게 감탄할 수 있고, 나아가 롤모델로 삼을 수도 있습니다. 결국 열등감은 배움과 성장으로 향하는 향상심으로 치환될 수 있습니다.
지금 상황이 너무 답답하다고 느껴지시나요? 그렇다면 개발자로서 창의력을 발휘할 시간입니다. 답답함이라는 감정은 곧 내가 직접 나서서 새로운 방식으로 해결해야겠다는 신호일 수 있습니다. 이때 발휘되는 창의적인 감정은 문제를 바라보는 시각을 넓히고, 새로운 해결책을 찾아내는 원동력이 됩니다. 결국 답답함을 해결하는 과정에서 문제의식을 느끼고 이를 풀어내는 것, 그것이 바로 개발자의 본질적인 역할입니다.
우리는 어떤 사람이 몹시 싫을 수 있습니다. 혹은 특정 상황이나 결정이 너무나 불편하고 싫게 느껴질 수도 있습니다. 이럴 때는 그 거부감에 집착하기보다, 자기 인식과 자기 이해를 넓힐 수 있는 좋은 경험이라고 생각해 보세요. “나는 이런 것들을 싫어하는구나.”, “나는 이런 가치를 중요하게 여기고 있구나.” 개발자에게는 자기 자신을 이해하는 메타인지가 매우 중요하다고 합니다. 따라서 거부감이나 혐오감을 느낄 때는, ‘나는 이런 것들을 싫어하는 사람이었구나’하고 스스로를 인지하는 기회로 삼아봐도 좋겠습니다.
우리는 누구나 두려움을 느낄 때가 있습니다. 예를 들어, 하루에 수억 원이 오가는 커머스 서비스에 프로덕션 배포를 해야 하는 상황이라면 두려움을 느낄지도 모릅니다. 사실 두려움이라는 감정은 ‘경계’라는 감정에서 비롯된다고 합니다. 만약 우리가 어떤 것이 무서운지도 모르고 무조건 낙관적이었다면, 이미 맹수에게 잡아먹혔을지도 모릅니다. 따라서 무섭다는 감정이 들 때는 그 두려움에 잠식되지 말고, 오히려 이 감정을 경계심으로 바꿔 활용해 보세요. 두려움은 더 꼼꼼히 점검하고, 실수를 줄이고, 스스로를 지키라는 신호일 수 있습니다.
개발자로 살다 보면 심한 피로감을 느낄 때가 있습니다. 그런데 이 피로감을 방치한 채 업무를 이어가다 보면 번아웃으로 이어지기 쉽습니다. 따라서 피로감을 느낄 때는 단순히 불평의 감정으로 받아들이기보다, 지금이 바로 ‘쉬어야 할 순간’이라는 신호로 생각해 보시기 바랍니다. “나는 하루에 12시간은 일할 수 있는 사람이라고 생각했는데, 사실은 8시간밖에 일하지 못하는 사람이구나.” 이렇게 받아들이는 것도 좋은 기회가 될 수 있습니다.
혹시 술을 좋아하시나요? 본인의 주량을 알게 되면 술을 더 잘 즐길 수 있습니다. 마찬가지로 일을 더 많이 한다고 해서 반드시 유능한 사람이 되는 것은 아니며, 일이 많다고 해서 효율이 높아지는 것도 아닙니다. 내가 얼만큼 몰입할 수 있는 에너지를 가지고 있는지, 자신의 업무량을 파악하는 것은 매우 중요합니다. 필름이 끊겨 본 뒤 주량을 알게 되는 것처럼, 피로감을 통해 자신의 일할 수 있는 한계를 체크하는 기회로 삼아보세요.
무력감을 느낄 때는 내가 정말 무력한 존재라서가 아니라, 사실은 ‘내가 통제할 수 없는 것에 집착했다’라는 사실을 깨닫게 해주는 신호라고 생각해 보시기 바랍니다. 우리는 생각보다 통제 가능한 것과 통제할 수 없는 것을 구분하는 능력이 부족합니다. 따라서 통제할 수 없는 것에 집착하며 무력감을 느끼기보다는, 이 감정을 통해 ‘나는 지금 무엇을 통제할 수 있는가, 무엇을 통제할 수 없는가’를 분별할 기회로 삼아 보세요. 무력감은 오히려 내가 통제할 수 있는 영역을 더 잘 자각하게 하고, 분별력을 높여주는 계기가 될 수 있습니다.
이 글을 쓰다 보니, 사실 누군가에게 선배로서 알려주고 싶은 이야기가 아니라, 결국은 내가 나 자신에게 해주고 싶은 이야기였다는 생각이 듭니다. 저 역시 부정적인 감정에서 한동안 헤어 나오지 못할 때가 있었습니다. 이 부정적인 감정은 꼭 이직 실패라든지, 내가 맡은 프로젝트가 다른 이유로 무너졌다든지 하는 큰 사건이 없어도 찾아옵니다. 그냥 문득문득 나를 괴롭히고, 한 번 부정적인 생각의 늪에 빠지면 좀처럼 빠져나오지 못하는 경우가 있죠.
저는 심리학 전문가도, 철학자도 아니고, 단지 개발자입니다. 그래서 제가 설명한 이론이 완벽한 학문적 설명이 아닐 수도 있고, 누군가에게는 그저 개똥철학처럼 보일 수도 있습니다. 하지만 이 패러다임의 개념을 제 안에 탑재하고 나니, 훨씬 더 쉽게 내 감정을 선명하게 바라볼 수 있었고, 다시 돌아올 수 있는 장치가 되었습니다. 마치 함수형 프로그래밍을 알고 나서 훨씬 더 클린 코드를 작성할 수 있게 된 것처럼요.
우리가 통제할 수 없이 발생하는 신체적 감각을 긍정적으로 해석할 수 있다는 사실, 그리고 그것이 주관적이지만 의식적으로 가능하다는 사실은 제게 프로그래밍처럼 느껴졌습니다. 마치 내가 CSS를 바꿔 블로그 테마를 새롭게 꾸미듯, 고정되어 있는 HTML도 얼마든지 멋지게 다듬을 수 있다는 것을 알게 되자, 훨씬 더 건강하고 좋은 마인드를 가질 수 있게 되었습니다.
여러분들도 이 글을 통해, 그 어떤 프로그램보다 ‘나’라는 프로그램을 잘 수정할 수 있는 개발자가 되기를 바랍니다. 우리는 우리의 생각마저 프로그래밍할 수 있는 개발자가 되었으면 좋겠습니다. 마지막으로, 그저 한번 싱긋 웃어보세요. 순간 느껴지는 감각을 충분히 느끼고, 본인의 목표와 자신감, 그리고 긍정적인 해석을 불어넣어 보세요. 그렇게 즐겁게 나를 프로그래밍해 보시기 바랍니다.
참고로, 이 블로그에 나온 이론들은 제가 여기저기에서 보고 들은 내용을 정리한 것이지만 학문적인 입장에서 엄밀하게 검증한 내용은 아닙니다. 학문적으로 옳고 그름은 물론 중요하겠지만, 이 글은 그냥 개발자가 올린 하나의 오픈소스라고 생각해 주시면 좋겠습니다. 이 라이브러리가 괜찮아 보인다면 설치해서 사용해 보세요. 일부만 마음에 든다면 fork해서 쓰셔도 좋습니다. 혹시 내용에 잘못된 부분이 있다면 댓글로 PR을 올려주세요. 바로 수정하도록 하겠습니다. 고맙습니다.
<원문>
©️요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.