(글이 많이 깁니다. 작성하면서 틈틈히 포스팅으로 분리하겠습니다 읽어주셔서 미리 감사합니다! 회고이기에 담담하게 평어로 글을 작성했습니다.)
2023년도 끝을 향하고 있는 지금, 10월 16일. 달력을 보면서 내가 프로그래밍의 세계에 입문한 지 5년이나 되었음을 깨닫고 새삼 놀란다. 그 중 프론트엔드 웹 개발을 본격적으로 학습한 기간은 어림 잡아 2년 반 정도 된 것 같다.
나는 어떤 길을 걸어오며 성장했고, 어떤 개발자가 되고 싶었기에 지금까지 개발을 하고 있는 것이며, 앞으로 어떻게 실력과 커리어 향상을 이뤄 나가야할까. 그리고 나라는 사람은 나중에 어떤 개발자, 동료로 기억되려나.
새로운 도전의 길을 걸으며 마음이 싱숭생숭해지는 날이다.
과거의 나는 어떤 길을 걸어왔는지 시간순으로 적어보기로 했다. 그러면 조금 마음도 후련해지고, 성장의 방향성도 확실해지지 않을까.
프로그래밍 언어도 몰랐던 상태
2016년 부푼 꿈을 가지고 제대 후 복학을 했다. 처음 배우는 러시아어는 어려웠지만 재미있었다. 나는 외국어를 빠르게 배우는 아이였으니까. 영어를 어느 정도 할 줄 알게 되니, 고등학교 시절 중국어도 곧잘 배울 수 있었다. 언어는 해당 문화권의 세계관이 일련의 규칙으로 체계화된 것
이라는 나름의 깨달음을 얻고 나니 러시아어도 그냥 받아들이
면서 학습했다. 으응~ 한국어에서는 __를 A로 표현하고 영어에서는 B라고 표현하는데 러시아어는 C라고 표현하는구나?
처럼 말이다.
나는 러시아어문학이라는 전공에 특별한 의미를 두고 있지 않았다. 국문학, 영문학, 등등 수많은 인문계열 전공들 중에서 러시아어문학을 전공으로 선택한 이유는 그냥 재밌어 보여서
였다. 비싼 대학 등록금을 내고 학교를 다니는데 조금 어려운 것들을 배워야지라는 생각이기도 했고 말이다.
또한, 외국어를 하나 하나 더 할 줄 알게 될 때마다 마치 게임 속 캐릭터의 능력치가 올라가듯 내 스스로의 능력이 향상되는 느낌이 즐거웠다. 새로운 언어를 배울 때마다 해당 언어권 국가들의 문화에 대한 이해도가 훨씬 깊어지는 느낌이 좋았다. 그래서 기존에 습득한 외국어의 깊이를 더하기보다는 새로운 언어의 가지를 뻗어나가는 선택을 했던 것 같다(BFS식 외국어 공부법...ㅎㅎ).
전공 선택의 이유를 남들에게 설명할 때는 그래도 나름 있어보이기 위해 동북아태지역 외교 전문가가 되고 싶어서
라는 그럴듯한 이유를 댔었다. 이렇게 둘러댔던 이유는 다들 나름의 멋진 이유를 가지고 전공을 선택한 것 같은데, 나만 재미로
대학교를 다니는 느낌이 들어 부끄러웠기 때문임을 이제는 솔직히 이야기할 수 있다(부모님에게 조금 죄송하다...ㅎㅎ). 물론 외교 관련 분야가 거시적으로 참 중요한 영역임을 알고 있고, 그 분야에서 일을 하면 보람차겠지만서도, 그 분야가 내가 앞으로 걸어가야 할 길이라는 느낌은 그렇게 와닿지 않았던 것 같다.
비록 전공을 선택한 이유는 단순했지만, 그 이유에 충실하여 나는 내 전공 지식을 즐겁게 학습했다. 여러 외국어를 학습하는 과정에서 얻게되는 언어학적인 센스... 또는 통찰력이랄까? 새로운 문법과 표현을 알면 금방 다른 표현들로 응용하는 능력이 향상되었고, 미묘한 뉘앙스 차이를 잘 이해하게 되는... 말로는 정확하게 형용하기 어려운 느낌을 받았다.
이후 개발공부를 하면서도 언어장벽을 딱히 느끼지 못하니 영어 공부 미리 한 셈 치자는 생각이다.
무언가 원하는 기능을 코드로 작성하고 싶은데, 어떻게 해야할 지 모르겠는 상태의 연속...
그렇게 2016년, 2017년을 러시아어를 공부했다. 아 이제는 어느 정도 러시아어를 알 것 같아 현지에 가보고 싶네
라는 생각이 자연스레 들어 2018년 상반기 교환학생 프로그램을 신청했다.
2018년 1월 21일 러시아 수도 모스크바에서 동쪽으로 약 200km떨어져 있는 도시 '니주니 노브고로드'에 도착했다.
학부 시절의 전공 과목들은 다 그렇다. 한 학기, 그것도 일주일에 많아봐야 3시간의 수업에서 정해진 범위의 지식을 전달하기 위해서는 깊이가 얕아질 수밖에 없다.
이 얕은 지식의 깊이는 대학생인 나 스스로가 더더욱 깊게 만들어야 하고, 그것이 대학 공부의 본질이다. 그런데... 그럴진대 프로그래밍이란 녀석은 얕은 지식도 당시의 나에게는 어렵게 다가왔다.
2의 보수는 무엇이고, 프로토콜이란 무엇이고, 네트워크 등등의 다채로운 소프트웨어 전반에 대한 지식들이 폭포수처럼 내 머리로 쏟아져 들어왔으며, 프로그래밍 언어 문법은 단순해보이는데 막상 그 문법들로 어떤 기능을 하는 코드를 작성하려면 머리가 하얘지는 순간들의 연속이었다(특히 C++를 활용한 자료구조 수업에서 포인터가 정말 어려웠다). 수업에서 배운 것들을 소화하고 과제를 수행하면서, 살아남기 위해 추가적인 학습을 열심히 진행했던 기억이 난다. (물론 놀기도 열심히 놀았지만) 어쨌거나 저쨌거나 내가 선택한 길이고, 재밌어 보여서
선택했는데 어려운
과목이라 매 주 진행하는 퀴즈 점수를 잘 맞을 때마다 성취감도 컸다. 러시아어를 학습하면서 경험해 보지못한 즉각적 피드백
의 중독성은 매우 강렬하였기에 포기할 수 없었다.
방황의 연속. 망양지탄이라 했던가. 주변에는 다 어문계열 선배들이고, 자문할 데도 없고, 공부 같이 할 사람도 없고...그래서 반 년정도 독학으로 코딩테스트를 준비하면서 느슨한 시간을 보냈다.
개발자는 프로그래밍 조금 할 줄 안다고 되는 것이 아니었던 것이다!
나는 분명 학부 수업에서 안드로이드 개발도 해보고, 데이터 분석도 해보고, 웹개발도 해보고 뭔가 다양하게 해 본 것 같은데, 세부 진로를 선뜻 결정하기 어려웠다. 아니, 무서웠다.
"지금 선택하면 앞으로 내 인생은 이 길로 정해지는 건가?"라는 불안함이 엄습해왔고, 무서웠던 나는 선택에 맞서기 보다는 선택을 미루며 회피하는 방향을 선택했다.
이 시기가 내 인생에서 가장 바닥이었던 시기라고 생각한다. 뭔갈 하는 것도 아니고, 안 하는 것도 아닌 애매한 상태가 꽤 오랫동안 지속되었다. 그 때 내가 보낸 시간은 선택을 미룸으로써 불안하지만 그 불안함을 직면하지 못해 마음이 불편한 시간
이었다. 제대로 놀지도 못하고, 공부하지도 못하는 마음이 불편하게 들떠있던 상태였다. 그 시간에 나는 갈피를 잡지 못하고 '리그오브레전드'라는 게임에 중독되어 허송세월을 많이 보냈었다.
백준 문제 입출력도 제대로 하지 못해 쩔쩔매다가 함수만 작성하면 되는 프로그래머스에서 코딩테스트를 연습하고 있었다(지금 생각하면 정말 웃음이 나올 정도로 처참한 실력이었다).
그러다가 우연히 배너광고에서 프론트엔드 웹 데브코스 1기
를 모집한다는 광고를 보고 지푸라기라도 잡는 심정으로 지원했다.
코딩테스트도 보고, 자기소개서도 제출하고 면접도 봐서 정말 다행히도 합격을 했었다. 리아 매니저님이 참 책임감 있고 따뜻하게 수강생들을 대해주셔서 더 의욕이 났었다.
이후 6개월 동안 정말 밤낮없이 강의를 듣고 과제를 하고, 커피챗에 참여하고 열심히 살았던 것 같다. 나랑 같은 목표를 가지고 있는 동료들과 함께한다는 생각에 힘도 났고, 그 당시에 만났던 팀원들이 너무 잘 맞아서 함꼐 공부하는 것이 즐거웠다(아직도 팀원들과 모임을 종종 하고 있다).
가장 좋았던 점은 현업 멘토님들의 피드백이었다. 정말 정성을 다해 코드리뷰도 해 주셨고, 실질적으로 어떤 방식으로 개발을 해야 하는지도 잘 가이드 해주셨다. 이 때 나는 CSS를 참 못해서 클론코딩 과제를 비스포크냉장고로 만들어서 제출한 적이 있는데, 정말 창피하고 죄송했었다(물론 지금은 CSS 자신 있어요!).
한국 개발자 최고 1타강사 김영한의 인생 [1부]에서 영한님의 다음 구절이 내 마음을 강렬하게 때렸다.
"처음에 열심히 공부를 열심히 한 친구들은 코드가 잘 안나가요. 왜냐하면 막 생각이 많거든요. 추상적으로 생각하는거에요 어떻게보면. 어떻게 구조적으로 더 아름다울까 막 생각을 하는데 사실 생각을 해도 잘 안나오거든요, 왜냐하면 내가 아직 저기까지 안 가봤기 때문에."
맞다. 해보기도 전에 나는 생각이 너무 많았다. 생각을 더 하면 무언가 코드를 실행착오 없이 더 잘 작성할 수 있을 것 같아서 고민을 많이 했다.
조금 공부를 하고 나서는,
내 코드가 뭔가 마음에 들지 않는데, 정확하게 어느 부분때문에 마음에 들지 않는지 모르는 상태.
그보다 더 공부를 하고 나서는,
마음에 안 드는 부분을 찾았으나, 어떻게 바꿔야할 지 모르겠는 상태.
기본 실력을 탄탄하게 갖추는 것은 대전제이다.
이후에는 전체 그림을 그릴 수 있는 사람.
새로운 기술 사용에 대한 이유 - 옛날 기술 사용해보기.
바닐라 Javascript로 웹개발을 하다가 리액트를, 리액트에서 Next.js 프레임워크를 사용하면서 라우팅에서 편리함을 느끼듯이.
지금 내가 Node.js로 express 서버를 구축해보다가 Nest를 사용하면서 편리함을 느끼듯이,
이 제품을 왜 만들어야 하나, 아키텍처를 어떻게 구성해야 하는가?
나는 스스로가 아무리 공부를 해도 개발을 잘 못한다고 생각이 들었다. 주어진 일을 잘 해내었을 때도 그랬다. 나도 모르게 비전공자라는 주홍글씨를 스스로에게 새기며 다그쳤던 것일 수도 있었을 지도 모르겠다.
새로운 주제를 학습할 때마다 나는 프로그래밍의 세계가 너무 넓어서 압도당하는 느낌을 받았다. 마치 천문학자들이 우주를 공부할 수록 우주의 광할함에 압도되는 느낌을 받듯이 나도 그러했다.
나는 이 압도당하는 기분을 언제 떨쳐낼 수 있을까 걱정하며 매일 전전긍긍하고 괴로워했다. 끊임없이 공부하고 코드를 작성해도 성장하지 못하는 기분을 떨쳐낼 수 없었고, 강한 우울감이 왔었다.
이 글을 읽는 여러분들은 이 기분을 한 번 쯤 느껴본 적이 있으리라 생각한다. 그리고 이내 곧 깨달았을 것이다. '꾸준한 학습'만이 이 우울감을 떨쳐버릴 수 있는 유일한 길이란 걸.
그렇게 꾸준한 학습을 통해 성장하면서 더 넓은 프로그래밍의 영역을 경험하면서 기술적으로 겸손해짐
을 느낀다. 기술적으로 겸손해진다는 것은 내가 기존에 사용하던 방식이 비효율적인 것일 수 있으며, 더 나은 해결책이 언제나 존재함을 인정하는 태도라 생각한다. 즉, 내 방식이 최선이 아닐 수 있다는 것을 인정
하며 내 의견과 다른 의견에 경청하게 되는 태도이다.
나는 다행이도 이러한 태도를 지닌 개발자들과 일을 함께 할 수 있었다. 이 경험은 내게 참 값진 경험이었고, 내가 앞으로 어떤 조직에 합류하더라도 나는 열린 마음으로 겸손하게 그들과 소통할 준비가 되어 있다.
개발자는 지속적인 학습을 통한 성장이 강제되는 직업이라고 생각한다. 개발자는 학습의 대상이 넓다. 이제껏 사용해보지 않은 새로운 프로그래밍 기술이 학습 대상으로서 기본으로 깔려 있고, 기존의 코드를 더 효율적으로 개선하는 방법론부터, 건강한 조직문화를 만들어 협업을 증진하는 일에도 많은 학습이 동반된다. 이 과정에서 스트레스를 받을 가능성이 높다. 나는 그랬다. 그렇다고 내가 개발자가 적성에 맞지 않느냐? 그건 아니다. 왜냐하면 나는 매일 조금이라도 학습을 하고 있으니까.
해보니 모든 공부가 마찬가지이다. 내가 살짝 어려움을 느낄 정도로 꾸준히 학습을 해나가다보면 어느새 성장한 내 자신을 볼 수 있게 된다. 마치 근력운동처럼 말이다. 꾸준히 하면 성장하지만, 그렇다고 멈추면 금새 실력이 퇴행해버린다. 그러니 조금씩이라도 매일 학습하고, 기록하고 기억하자. TIL
을 기록하는 활동들은 개발자로서 꾸준함을 의식적으로 훈련하기 위한 노력의 일환인 셈이다.
나는 문서왕이었다. 상대적으로 개발을 잘 못해서 문서 작성 능력이 더 돋보였을 수도 있었다고 생각이 들지만, 나는 문서 작성하는 것이 재미있었고, 글 쓰는 것이 재미있었다.
결국 일은 사람들이 한다.
데이터를 더 효율적으로 보여줄 수 있는 ... 어떻게 해야하지 이러면?
사용자와 서비스의 인터랙션을 높이는 3D 렌더링 기술들도 익히고 싶다.
나만 읽고 이해하고 정리해서는 의미가 없다. 지식은 나눌 때 배가 된다. 내가 읽은 좋은 글들에 대한 번역-적어도 리뷰-정도는 일 주일에 한 회 진행하면 좋을 것 같다.
얼마 전, AWS S3 서비스로 내 미니 프로젝트를 배포해 본 적이 있다. 정적 배포였지만, 기분은 짜릿했다. Netlify, Vercel 등 프로젝트 배포를 간편하게 지원하는 플랫폼들은 개인 프로젝트를 배포할 때 유용하다. 나도 즐겨 사용한다. 하지만, 내가 합류할 회사들의 서비스들은 이러한 플랫폼들로 배포를 하지 않는다.
개발자의 손끝에서 사용자의 손끝으로 서비스가 전달되는 흐름을 이해하는 활동을 직접 해보고, 기록하고, 익숙해지자.
작은 서비스더라도 기획부터 디자인, 배포까지 경험하는 프로젝트를 꾸준히 진행하는 것. 팀 단위로 진행하면 금상첨화이다.
사이드 프로젝트를 꾸준히 만들어서 새로운 기술, 디자인, 기획, 웹 뿐 아니라 서버, 모바일, 데스크탑 어플리케이션 개발에 대한 경험을 쌓자.
https://www.youtube.com/watch?v=tq3iBWuSzj4&ab_channel=%EC%9D%B8%ED%94%84%EB%9F%B0inflearn
위 작업들을 혼자 하기에는 너무 벅찰 것 같다. 함께 하는 사람들을 모아서 일주일에 한 번씩 관련 활동을 진행하면 좋을 것 같다.
배우는 속도가 빨라야 해 코딩을 많이 해야 함.
문제 상황이 발생했을 때, 30분 이상 막혔을 때는 반드시 도움을 요청해라
이후에 어떤 문제가 중요한지 해결방법을 찾는 것이 중요하다!
정말 내 적서엥 맞는지 볼 수 있고,
모든 사람이 높은 사람이 되어야 하는 것은 아니다. 자기자신을 객관적으로 평가하고, 그것보다 +1,+2 목표를 찾고, 거기에 맞는 현실적인 길을 찾는 것이 중요하다.
지금 뭐해야할 지 모르겠어? 하나만 일단 해봐! 그냥 해봐!그 때부터 길이 하나씩 보일거야. 너무 큰 그림을 그리지 마.
https://www.youtube.com/watch?v=ayXljSp0BFM&ab_channel=%ED%99%8D%EC%A0%95%EB%AA%A8
https://www.freecodecamp.org/korean/news/learn-to-code-book/#chapter-1-how-to-build-your-skills