brunch

인간의 뇌 발달구조가 프로그램언어와 유사하다고?

개발언어와 뇌구조의 상관관계

by 제로

안녕하세요. 제로입니다. 한동안 프로그램 개발에 심취하다 보니 어느덧 5개월이 훌쩍 지나버렸습니다. 이 말은 즉, 한동안 브런치에 글을 쓰지 않았다는 뜻이겠죠. 솔직히 글을 쓸 기회는 오히려 더 많았습니다. 개발이 AI와 상당히 밀접한 분야이다 보니, 프롬프트 내용을 다 취합해서 공유해도 책 10권은 더 나오겠더라고요. 무엇보다 글을 쓰며 생각을 공유하고 싶다는 마음이 가슴속에서 싹트기 시작했습니다.


예전처럼 오랜 시간 글쓰기에 투자할 수 있는 여건은 안 되지만, 꾸준히 글을 쓰며 공유할 수 있는 채널 하나쯤은 필요하다고 생각했습니다. 저는 평소에 떠오르는 아이디어와 생각을 메모장이나 카카오톡에 기록해 두는 버릇이 있는데요. 이것들이 나한테는 그저 생각의 파편이었으나, 돌이켜보면 이러한 정보와 지식들이 사회에 활용될 수 있는 가치가 있는 것들이 몇 개는 있더군요. 그래서 평소 스치는 생각을 메모장에 기록하듯 기록해 보자고 생각했고, 생각의 파편을 이곳 브런치 매거진에 작성해 보기로 했습니다. 이러한 생각의 파편들이 누군가에게는 소중한 인사이트가 되길 바라면서, 지금부터 시작해 보겠습니다.




1. 인간의 뇌 발달 흐름


인간의 뇌는 참으로 신비롭고 경이로운 존재입니다. 느끼고 상상하는 일련의 모든 과정이 뇌에서 오케스트레이션처럼 정교하게 일어나고 있으니까요. 우리가 책을 읽고, 음악을 감상하고, 문제를 해결하는 모든 순간에 뇌는 쉼 없이 활동하고 있습니다. 하지만 이런 고차원적인 기능은 하루아침에 등장한 것이 아닙니다. 그 기원은 생물이 탄생한 약 5억 년 전으로 거슬러 올라갑니다. 기원에 관한 긴 이야기는 생략하고 결론부터 말씀드리자면, 인간의 뇌는 시간이 흐르면서 단계별로 한 층씩 쌓여 지금의 형태를 갖추게 되었습니다. 이해를 돕기 위해 뇌의 발달 과정을 살펴보겠습니다.


8LOUNGE 학습전략.png


우리 인간의 원초 뇌, 정확히는 물고기의 뇌라고 해야 맞을 듯합니다. 이 단계에서는 먹고, 자고, 이동하고, 도망가는 기본적인 생존 기능만 있었습니다. 즉, 생존을 위한 핵심 기능만 갖추고 있었죠. 그다음 포유류의 뇌로 발전하면서 생존 기능 외에도 다양한 감정을 느끼는 능력을 얻게 되었습니다. 두려움, 슬픔 등 여러 감각과 감정들이 발달하게 됩니다. 개나 원숭이를 떠올려보면 이해가 쉬울 것입니다. 여기서 한 단계 더 발전하여 현대 인간의 뇌가 되었습니다. 새 겉질, 피질 영역이 생기고 발달하면서 우리 인간은 언어를 통해 의사소통하고, 사고하며, 상상하고, 시뮬레이션을 통해 논리적인 판단과 계획을 세우는 고차원적인 기능을 갖게 되었습니다. 지금까지의 내용을 정리해 보면, 현대의 뇌로 갈수록 추상화 능력이 발전해 왔다고 볼 수 있겠네요. 그렇다면, 이것이 프로그래밍 언어의 발전과 어떤 연관이 있을까요?



2. 개발 언어의 탐험


설명하기에 앞서, 저는 개발 전문가는 아닙니다. 초등학생 때 16비트 컴퓨터를 가지고 게임을 했고, 중학교 때는 매킨토시 초기모델을 가지고 놀던 평범한 소년이었습니다. 주변 친구들이 게임만 하던 시절, 저는 호기심에 컴퓨터를 뜯어보고 조립하는 재미에 빠져있었죠. 학창 시절의 기억은 컴퓨터를 해부하고 망쳐놓는 일이 일상이었고, 군대 전역하고는 회사에서 웹개발 및 웹디자인을 해오던 게 전부였습니다.


그러나 이러한 경험들이 전혀 도움이 안 된 것은 아니었습니다. 하드웨어와 소프트웨어를 넘나든 경험들이 오히려 전체를 바라볼 수 있는 시야를 얻게 된 거죠. 마치 숲과 나무를 동시에 볼 수 있는 관점이랄까요? 무엇보다 현대사회는 융합과 응용을 필요로 하기에 흐름에 편승한 건 분명해 보였습니다. 아마도 제가 한 우물만 파는 시대에 놓였으면 매장당했을지도 모를 일입니다. (너 정체가 뭐냐?라고 손가락질받았을지도 모르겠네요)


어쨌거나 저는 최근 AI 시대에 역행하는 행동을 하기 시작했습니다. 그건 바로 소프트웨어 개발을 AI 도움 없이 직접 해보는 것이었죠. 마치 스마트폰 지도 앱이 있음에도 종이 지도를 펼쳐보거나, 계산기가 있음에도 암산을 연습하는 것과 비슷하달까요? 그래서 5개월간 개발언어 문법과 철학, 원리를 파헤치는 학습을 했습니다. 시작은 파이썬부터였습니다. 가장 친근하고 입문하기 좋다는 평가를 많이 들어서였죠. 그러다 추상화의 개념을 이해하고 구현의 자율성과 동적언어의 매력에 잠시 빠졌었습니다. 마치 자유로운 캔버스에 그림을 그리는 느낌이랄까요? 균형이 중요하다고 했던가요? 그렇습니다. 장점 뒤엔 단점도 있는 법이죠. 추상이란 개념은 인간의 상상력과 같이 유연한 특징을 가지지만, 그 중심과 근원을 파헤치면 허무 혹은 실망감이 싹트기 마련입니다.


인간의 호기심은 원리와 근원을 파헤치는 영역에도 미칩니다. 당연시 여기는 함수 및 속성(비유컨대 곱셈, 나눗셈 등)도 어느덧 이런 생각을 갖게 합니다. '이건 어떤 원리로 이렇게 처리되는 거지?'라고 말입니다. 일반적으로 책이나 공식문서에는 이건 이렇게 사용하면 화려한 결괏값을 얻을 수 있다고 설명합니다. 많은 입문 개발자들이 그 내용을 그대로 받아들이고 직접 타이핑 치며 학습하죠. 저도 그랬으니까요. 그런데, 타이핑을 치고 결과를 얻는 일련의 행동이 반복되다 보면 한 가지 의문이 생깁니다. '이것은 또 어떤 언어로 만들었을까?'라고 말이죠. 예컨대 2 곱하기 2는 4가 맞습니다. 그런데 구구단을 외우고 써먹을 때는 당연시했던 것들이 어느 날 문득, '그럼 곱하기는 뭐야? 곱하기는 누가 만들었어? 왜 2 곱하기 2는 4가 되는 거야?'라는 생각 말입니다.



3. 개발 언어의 근원


논문 찾듯 파이썬 원리를 파헤치기 시작했습니다. 결국 파이썬도 C언어로 만들어졌더군요. C언어? 어디서 많이 들어봤죠? 대학교 다닐 때 출력했던 그 유명한 "Hello, world"의 주인공 말입니다. 50년이 넘었음에도 현대 들어서도 노장의 지위를 굳건히 지키고 있네요. 마치 수많은 무술의 원류가 되는 태극권이나 모든 학문의 기반이 되는 철학처럼 말이죠. 그렇습니다. 파이썬 또한 C언어 기반 위에 움직이는 화려한 인형이었던 것이었습니다. 마치 화려한 무대 위의 배우가 보이지 않는 무대 장치와 스태프들의 도움으로 빛나는 것처럼요. 그래서 더욱 궁금해지더군요. '다른 개발언어는 어떨까?'라는 생각이 미쳤고, 이윽고 멋모르고 VUE를 랜덤 선택해서 학습하기 시작합니다.


그땐 VUE가 프레임워크인지도 몰랐습니다. 그냥 20년 전 PHP, ASP와 같은 웹프로그래밍 언어와 비슷하겠거니 생각하며 학습했습니다. 보다 보니 과거 CSS와 동급으로 취급받던 뒷방의 자바스크립트가 등장하는 게 아닙니까? 웹개발에서 손 뗀 지 20년이 되었던 터라, 반갑기도 하고 격세지감을 느끼던 순간이었습니다. 보면서 감탄을 하게 되었죠. 자바스크립트에 클래스가 웬 말이야? 프런트엔드? 백엔드? 풀스택? 이건 또 뭐야?... 그렇게 꼬리에 꼬리를 물고 감탄과 탄성을 하면서도 점점 내 마음속에는 단순함에서 복잡함이 자리 잡고 있었습니다. 10년이면 강산도 변한다고 하지만, 뿌리가 너무 많음을 직감했죠.


이제 자바스크립트는 과거의 이벤트 창만 띄워주는 게 아닌, 하나의 언어로 자리 잡은 듯 보였습니다. 동적이면서도 타입형식에 얽매이지 않은 자율성은 파이썬과 유사해 보였습니다. 그러나 VUE를 다루면서 의구심이 들더군요. 프레임워크는 언어가 중심이 되어 서비스돼야 되지 않을까? 만약 프레임워크 중심으로 돌아가다가 사라지면 언어도 사라지지 않을까?라는 불안감이 내 머릿속을 스치기 시작합니다. 그래서 언어를 중심으로 라이브러리 형태의 프레임워크를 찾기 시작했고, 리액트라는 것을 발견하게 됩니다. 그러면서 자연스럽게 자바스크립트 상위개념인 타입스크립트를 접하게 되었고 이 둘의 문법 개념을 학습하게 됩니다.


타입스크립트는 정적인 측면이 있지만 서비스 구현의 다이내믹은 상당히 동적인 면이 강하다는 것을 알게 되었고, 파이썬 언어와 함께 구동원리를 파헤치기 시작했습니다. 그런데, 이 둘을 계속 다루다 보면 뭐랄까... 지구 위의 인공위성과 같은 느낌이 든다고 해야 할까요? 그렇습니다. 표현의 자율성은 강력하다는 게 공통점이지만 뭔가 겉도는 느낌이었습니다.



4. 개발 언어의 생태계와 뇌 발달의 유사성


어느 날 개발자 커뮤니티에서 고랭이라는 글이 올라왔습니다. 고랭이 뭐야? 약간 싼티스러운 어감이지만 친숙한 단어는 저의 호기심을 자극했고, 급기야 책을 구매해 학습하기 시작했습니다. 나름 타입스크립트와 파이썬을 학습해서인지, GO 언어의 스타일이 독특하다는 것을 금세 알았죠. 이때부터 개발언어를 공부하기 전, 창시한 사람의 목적과 취지를 바라보기 시작하는 습관이 생기기 시작했습니다. 개발철학과 그 언어를 사용하는 사람들의 문화를 먼저 이해하고 언어문법을 숙지하는 게 중요하더군요. 여기서 철학으로 이어지는 인문학적인 스멜은 뭘까요?


문득, 브런치가 고맙더군요. 인문학적 관점에서 바라본다는 것이 다양한 분야의 해석을 대변할 수 있다는 측면에서 20년 전에 드라이하게 웹개발만 했던 저와 지금의 저를 구분 짓게 만든 기준점이 되었다는 것에 감사함을 느끼는 순간이었습니다. 여하튼, GO 언어의 철학과 스타일을 학습하면서 처음으로 떠오른 키워드가 있었는데, 바로 "소소한 불편함"이었습니다. 예컨대 파이썬에서 몇 줄만에 해결할 것을 GO 언어에선 코드가 좀 더 길어지거나 고려 사항이 더 생기는 것이 다소 불편하다고 해야 할까요? 그럼에도 GO 언어 학습을 통해 오히려 파이썬 구동원리를 알게 되었다는 것이 아이러니임과 동시에 반가운 소식이었습니다. 불편함이 진짜 불편함이 아닌, 원리를 이해하게 해주는 장치라는 것을 깨달은 순간인 것이죠. GO 언어를 통해 뒤에서 돌아가는 원리를 가볍게 이해하게 되면서, 또 한 번의 호기심을 가장한 의구심이 떠오르더군요.


이야기가 길어질 듯하여, 결론만 말하면 C++, RUST 언어를 추가로 학습했습니다. 이제야 조금씩 윤곽이 잡혀가기 시작한다고 해야 할까요? 전체 그림이 조금이 보이기 시작합니다. 그러나 뭔가 핵심이 빠진 듯 공허했습니다. 네. C언어가 최종 마스터피스였던 것이었습니다. 이쯤 되어서는 파이썬에 비해 불편함은 극에 달하는 수준까지 도달합니다. 무식하게 이렇게 많은 코딩을 왜 해야 할까?라는 생각이 들더군요. 자바스크립트나 파이썬에서는 몇 줄이면 되는 일이니까요. 그럼에도 하드웨어(메모리, 카메라, 디스크, 화면, 움직임 등)를 직접 통제하는 통제권은 심층권으로 갈수록 권한이 막강해집니다. 이 말은 C언어가 하드웨어 통제권에 가장 가깝다는 소리죠. 또한 C언어는 추상적이지 않으며 직관적이고 절차적입니다. 기계를 직접 컨트롤하는 언어이다 보니 화려하고 복잡한 기능은 생략되고, 투박하고 단순한 기능만으로 행동을 제어하는 것이 오류를 최대한 줄일 수 있습니다. 그래서 로봇, 임베디드, IOT, 시스템커널 등의 핵심코어 영역은 아직도 C언어가 표준으로 쓰이고 있습니다.


그 이후 저는 한국에서 가장 많이 쓰이는 자바와 C# 언어, 코틀린을 학습했습니다. 제2 외국어 2개를 익히면 나머지 언어 또한 습득이 빠르다고 했던가요? 맞습니다. 개발언어 또한 언어와 유사해서 2~3개를 중심으로 학습하다 보면 여타 언어의 공통점과 패턴이 보이기 시작합니다. 단기간에 이 많은 개발언어 문법을 어떻게 습득할 수 있을까?라는 생각을 가지신 분들이 있을 듯한데요. 신기한 게 어느 유튜버의 말이 맞더군요. 실전 코딩능력은 이론학습과 완전 별개의 문제지만, 문법습득과 기초코딩 능력은 원리를 이해하면 교집합이 점점 더 많음을 알게 됩니다. 그러한 패턴을 구분하고 예문을 직접 AI 도움 없이 풀다 보면 입문까지? 는 누구나 가능하다고 생각합니다.


어쨌거나 자바, C#, 코틀린을 접하면서 순간 머릿속에서 다양한 개발 언어의 스펙트럼이 하나씩 이어지더군요. 그러곤 최근까지 살아남은 개발언어를 중심으로 철학과 특징을 분석하고 목적별로 개발언어의 영역을 나누기 시작했습니다. 유레카! 장님 코끼리 만지듯 해오던 일련의 행동의 파편이 하나씩 조합이 되면서 그것이 코끼리라는 것을 알게 된 것입니다. 개발자 커뮤니티에서 서로 자기 개발언어가 우수하다고 싸우던 것들이 이것으로 이해가 되는 것입니다.


어떤 개발자는 자바를 오래 해서 파이썬과 자바스크립트를 이해 못 하겠다고 말합니다. 적응이 안 되며 이상하다는 설명과 함께 폄하하기도 하죠. 그러나 이는 장님끼리 서로 자기가 최고라고 싸우는 것밖에 안 된다는 것입니다. 결국 우리는 코끼리를 보며 각각의 특징을 설명한 것이기 때문이죠. 장님 간의 코끼리의 각 부위를 떼어낸다면 코끼리는 죽을 겁니다. 결국 모두가 없어서는 안 될 부위라는 것이죠.



이제 서두에서 말했던 뇌 발달구조에 대해 다시 설명할 시간이 온 듯합니다. 앞에서 말한 개발언어의 스펙트럼이 뇌발달 구조와 매우 닮지 않았나요? 원시뇌는 생명을 담당했습니다. 기본적인 번식, 사냥, 도피 등의 행동이 C언어의 기계동작방식과 닮아 있습니다. 그다음 중간 뇌의 경우, 각각의 감정 담당기관이 분업화되어 있죠. 이는 C#, 자바, GO 언어의 각각의 영역과도 맥락을 같이 하고 있습니다. 마지막으로 현대의 뇌는 고차원적인 사고, 시뮬레이션, 표현, 언어 등을 통해 협동과 소통을 밀접하게 이어나가고 있습니다. 이는 파이썬, 자바스크립트의 동적언어인 고객지향 서비스와도 맞닿아 있습니다.


제가 정리한 프로그래밍 언어들의 생태계는 이렇습니다:


파이썬: 인간의 상상력과 가장 가까운 개발언어로, 현대 뇌의 추상화 능력과 유사합니다. 데이터분석, 프로토타입, 머신러닝, 시뮬레이터, 과학 연구를 목적으로 적합합니다. 마치 인간의 사고 실험이나 시뮬레이션을 하듯 코드를 작성할 수 있죠.


타입스크립트, 자바스크립트: 고객접점의 가장 가까운 지점에 속한 고객 서비스언어입니다. 인간의 감각과 소통 능력처럼, 사용자 경험과 직접 맞닿아 있어 유동적이며 직관적인 특성을 갖추고 있습니다.


자바, C#: 서비스생산 측면과 안전적인 운영에 포커싱을 맞춘 언어입니다. 마치 중간 뇌가 감정과 기억을 체계적으로 관리하듯, 엔터프라이즈 프로젝트에서 안정성과 확장성을 제공합니다.


코틀린, 스위프트, DART: 모바일앱 플랫폼의 핵심 언어로, 특수한 환경에 최적화되어 있습니다. 마치 특화된 감각기관처럼 모바일이라는 특정 생태계에서 뛰어난 성능을 발휘합니다.


GO 언어: 인체의 혈류와 같은 역할로, 시스템 및 분산 네트워크에 최적화된 언어입니다. 빠르게 혈류를 회전시켜야 하는 기능과 안정적인 속도로 동시에 온몸의 혈류를 회전시켜야 하는 성능을 가져야 하는 운명을 가집니다. 마치 인체의 자율신경계처럼 우리가 의식하지 못하는 사이에도 시스템을 원활하게 작동시키는 역할을 합니다.


C++, RUST: 같은 층위에 있는 언어이나 그 성질은 다소 차이가 있습니다. RUST가 C++ 이 살고 있는 층간에 이사 와서 잦은 충돌이 있으나, 엄연히 성질은 다르므로 그 영역이 서서히 구분될 가능성이 있습니다. 이들은 원시 뇌와 중간 뇌 사이의 미묘한 영역을 담당하는 언어들이라 할 수 있습니다.


C언어: 가장 원초적이면서도 강력한 언어로, 마치 원시 뇌처럼 생존과 직결된 핵심 기능을 담당합니다. 지금까지의 언어들이 수행하지 못하는 영역을 뒤에서 조용히 받쳐주며, 로우 레벨에서 하드웨어와 직접 소통하는 독보적인 지위를 누립니다.


이러한 연관 관계를 하나의 스펙트럼 도식으로 그려보면 다음과 같습니다.


뇌구조vs개발언어.png


물론, 이것은 1:1 매칭을 뜻하진 않습니다. 상황에 따른 영역의 모호성은 존재하니까요. 그럼에도 유사패턴과 영역의 범주를 대략적으로 형성해 보고 비교해 보면, 그것이 코끼리라는 것을 알 수 있는 지표가 됩니다.



5개월간의 학습에서 얻은 인사이트는 개발 언어들은 경쟁 관계가 아닌 상호보완 관계라는 사실입니다. 마치 뇌가 원시적 생존 기능부터 고도의 추상적 사고까지 다양한 층위의 기능을 통합적으로 운영하듯, 프로그래밍 세계도 C언어부터 파이썬까지 각자의 영역에서 최적화된 기능을 수행하며 공존합니다. 어떤 개발자들은 자신이 애용하는 언어만이 최고라고 주장합니다. 하지만 이는 장님이 코끼리의 일부분만 만지고 전체를 판단하는 오류와 같다고 생각합니다. 코끼리의 다리, 귀, 코를 떼어놓으면 코끼리가 죽듯이, 프로그래밍 생태계도 다양한 언어들이 함께할 때 비로소 완전해지지 않을까요?










keyword