일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- env
- 네트워크
- 코테
- 파이콘코리아
- 플라스크
- mongoengine
- 알고리즘
- javascript
- 파이썬
- 코테문제
- 예리님
- cleancode
- AWS
- 리액트
- mongodb
- 코드프레소
- 깃
- js
- Python
- 패스트캠퍼스
- git
- 원티드
- 이웅모
- flask
- React
- 몽고엔진
- 프리온보딩
- codepresso
- 환경변수
- 위코드
- Today
- Total
개발자가 내팔자
내가 지속적으로 개발을 공부하는 이유 본문
"빨리 가는 유일한 방법은 제대로 가는 것이다."
로버트 C. 마틴 (Rovert C. Martin)
코딩을 시작하고 여러 동료들을 만나면서 느끼게 된 것인데, "CS같은 것들을 몰라도, 프로그래밍의 작동 원리같은 것 쯤은 몰라도, 코드만 잘 짜면 된다!"고 생각하는 사람들이 생각보다 꽤 있는 것 같다. 심지어 현업 개발자인데도! 물론, 코드는 한 줄도 안 짜고 책에 파묻혀서 이론만 달달 외우는 것은 분명 문제가 있다. 처음부터 방대한 프로그래밍 지식을 모두 알 수도 없다. 그러나 너무 기본적인 프로그래밍 지식을 등한시 하면 코드에 대해서도 깊이 있는 이해를 하기 힘들고, 결국 자신의 코드를 신뢰할 수 없고, 책임질 수 없게 된다. 따라서 CS를 공부하는 것은 기본 중의 기본, 기초를 다지는 것이라고 생각한다.
무릇 프로그래밍에서 어떤 한 가지를 알고 싶으면 그 밑에 바탕이 되는 여러가지 개념들을 알고 있어야 그 위에 하나를 올려놓기가 수월해진다. 러닝 커브가 비교적 짧아진다는 것이다. 개발을 오랫동안 꾸준히 해온 전공자가 개발을 처음 시작한 비전공자보다 새로운 기술을 빨리 습득하는 것도, 개발 경력이 오래된 멘토님들이 공부할 건 많지만 하다보면 다 거기서 거기란 말을 하는 것도 모두 그런 이유에서가 아닐까? 내 경험을 기반으로 예를 들어보겠다.
MDN HTTP 문서 한 문단을 이해하기까지
과거 글쓴이는 어떠한 계기로 HTTP에 대해 공부하고 싶어졌다. 그러나 네트워크나 웹에 대한 어떠한 기반 지식도 없는 상태였다. 일단 무작정 MDN으로 가서 HTTP에 대한 글을 읽고자 했다. 나는 한 문단을 읽는 것 조차 힘들었다. 이유는 다음과 같다.
분명 한글로 쓰여있지만 나는 이 한 문단도 제대로 파악하기 힘들었다. 하나하나 구글링해서 찾는다고 문제가 해결되지 않았다. 그렇게 해서 찾은 키워드는 또 낯설고 새로운 용어들을 잔뜩 쏟아내며 설명하고 있었고, 나는 알아가려고 하면 할수록 점점 더 모르는 사람이 되어가는 마법..같은 경험을 하게 됐다.
구글링하면 다 나온다~고 하는 사람은 기만이다. 코끼리를 아는 사람은 코끼리의 일부만 봐도 코끼리라는 것을 금방 알아차릴 수 있지만, 코끼리를 태어나서 한 번도 보지 못한 사람은 코끼리의 코만 가져다 놓으면 그게 무엇인지 결코 알 수 없을 것이다. 구글링을 해서 나온 파편화된 지식들만으로 이해할 수 있다는 건 그만큼 기반 지식이 받쳐주기 때문에 가능한 것이다. 난 여기서 한 번 쯤 좌절을 느꼈던 것 같다. 뭔가 핵심을 놓친 채로 계속 겉돌고 있다는 생각이 들었다. 그렇게 HTTP를 알아야겠다는 생각을 잠시 미뤄두고 뒷걸음질을 했다. 도망친 것이 아니라 이보, 아니 십보 백보 그 이상의 전진을 위한 일보 후퇴였다.
네트워크와 고군분투
나는 네트워크와 웹개발을 공부했다. 처음엔 쉬운 그림책으로 시작했다. 가끔 쉬운 척 하면서 사기 치는 책도 있지만 위의 책들은 아무것도 모르는 나같은 초보자가 보기에도 정말 쉽다. TCP/IP 쉽게 더 쉽게는 귀여운 그림책인데, 의외로 설명이 자세한 편이어서 정말 좋았다. 아주 딥하진 않지만 초보자가 처음 배우기에 필요한 건 다 있다고 생각한다. 하지만 처음부터 이해할 순 없었다. 그림은 분명 귀여운데... 무슨 말인지 하나도 모르겠다며 덮고 그랬다. 작심 삼일도 꽤 나쁘지 않다. 삼일마다 새로 시작하면 되니까. 그런 마음으로 계속 시도하다보니 어느새 익숙해져서 받아들이게 된 것 같다. 모두의 네트워크는 더 쉽다. 아마 네트워크 책 중에 제일 쉬울듯. (참고로 모두의~ 시리즈는 다 쉬운 것 같다. 나는 C언어도 모두의 C언어로 처음 시작했다.) 이건 조금 어려운 내용(동적 라우팅 알고리즘 같은 것)은 아예 생략해버려서 한 번 TCP/IP를 공부하고 보면 조금 아쉬움이 남는다. 하지만 완전 처음 보는 사람에게는 이보다 더 친절한 책은 없을 것이다. 사자 교수님과 엉뚱한 마론군이 일대일 과외 형식으로 진행되며 모든 챕터가 웹소설 대화체로 구성되어있다. 가끔 엉뚱한 유머가 나오기도 하는데 별로 웃기진 않지만 어이없어서 웃게 된다. 하나만 추천한다면 역시 TCP/IP 쉽게 더 쉽게를 추천하겠다.
이제 나는 OSI 7layer와 TCP/IP 4계층의 대략적인 흐름을 계층 별로 간략히 설명할 수 있다. 아직은 보다 전문적이고 딥하게 하기에는 부족하지만, 나만의 비유를 들어가며 보다 더 재미있게 설명할 자신이 있다. (네트워크에 대한 자세한 이야기는 추후에 이 블로그에 쓰도록 하겠다.) 그리고 웹개발을 하며 RESTful api를 직접 만들고 REST가 무엇인지에 대해 몸소 체험했다. 이 정도면 다시 HTTP를 이해하기 위한 도전을 해볼만하다고 생각했다. 이제 나는 다시 mdn에 들어가 HTTP 문서를 본다. 그리고 예전에 적어놓은 질문 리스트를 주욱 살펴보았다. 저 의문점들에 모두 대답을 할 수 있는 나 자신을 발견하게 되었다. 하나만 빼고. 바로 RUDP다.
예전엔 모르는 게 나오면 스트레스를 받았다. 모르는 것은 고구마뿌리처럼 더 모르는 것을 주렁주렁 끌고 올 테니까. 이제는 그렇지 않다. 나는 새로운 지식을 기쁘게 받아들일 준비가 되어있다. 자, 와라! RUDP는 무엇인가!
지식이 마이너스일 때는 아무리 공부를 해도 그것에 곱해지는 기분이다.
그러나 본격적으로 마음을 먹은 어느 순간 0을 지나, 인고의 시간을 견뎌 1에 도달할 때,
그리고 그 너머로 한 걸음 나아갈 때, 시간은 내 편이 되어 새롭게 곱해질 것이다.
이제 나는 더이상 알아가면 알아갈수록 바보가 되지 않는다.
지식이 마이너스가 아니라 플러스가 된다.
이게 기본기의 힘이 아닐까?
이제 나는 문서를 읽으며 새로운 지식을 더해갈 수 있는 능력이 생겼다.
초보자가 힘든 이유
얼마 전, 개발을 시작한 지 얼마 되지 않은 친구 한 명이 백준을 풀다가 BFS DFS가 잘 이해되지 않는다며 슬퍼하고 있었다. 친구에게 자료구조는 어디까지 공부를 했는지, 배열부터 시작해서 리스트, 트리, 그래프는 알고 있는지 물어봤는데 잘 모른다고 했다. 자료구조를 모르는데 BFS DFS 개념을 며칠만에 이해하려고 하다니! 물론 똑똑한 친구니 그럴 수도 있겠지만.. 자료구조라는 든든한 기본기를 갖추고 있다면 좀 더 수월하게 이해할 수 있지 않았을까 싶다. 난 이 친구의 경험이 너무 공감됐다. 내가 초보자로서 겪었던 문제도 이와 같다. 내가 뭘 모르는 지조차 모른다는 것이다. 내가 지금 어디에 있고, 어떤 적(?)을 맞닥뜨렸는지 알기 어렵다는 것이다. 학교에서는 단계별로, 수준별로 수업이 이루어졌지만 내가 경험한 개발의 세계에서는 그렇지 않다. 은하수를 여행하는 히치하이커처럼, 자유롭게 우주를 여행하다가도 금방 운석에 부딪혀 부상을 입게 된다. 완만하게 오르막길을 올라가는 것이 아니라 오르락 내리락 하며 자주 산을 만나고, 가끔은 감당할 수 없는 거대한 벽에 가로막히게 된다. 즉, 에러가 프로그래머의 수준을 봐가면서 터져주지 않는다는 것이다. 모르는 개념이 갑자기 튀어나와버리면 그것을 넘어서기 위한 계단은 나 스스로 쌓아야 한다.
어쨌든 계속 개발을 한다...!
나의 공부는 주로 내가 아는 것이 진짜 아는 것일까?하는 의심에서 시작한다. 기존의 것을 무너뜨리고 쌓는 과정을 반복하며 쌓아 올리는 법을 스스로 익힌다. 낯선 지식에서 당연한 명제가 될 때까지 계속해서 부딪혀본다. 주변의 누군가는 공부만 하는 건 바보짓이라고 한다. 그러나 내가 개발을 하며 매번 느끼는 것은 아는 만큼 보인다는 것이다. 아는 만큼 가속도가 붙어 더 많이 배우고 더 빨리 성장할 수 있다. 그렇게 쌓아올린 기반은 나를 더욱 단단하게 만든다. 절대로 무너지지 않는 성이 되기엔 멀었을지 몰라도, 무너져도 금방 새로 쌓아올릴 수 있는 힘이 생긴다.
어떤 개발자가 되고 싶나요?
면접을 보러 가면 주로 개발자가 되고 싶냐, 왜 개발이 하고 싶냐를 묻는다.
솔직히 내 대답은 빤하다. 재미있으니까.
난 뭘 해도 잘 할거지만 굳이 개발자가 되려는 이유는 개발이 제일 재미있기 때문이다.
하지만 의외로 어떤 개발자가 되고 싶냐는 질문은 아직 받아본 적이 없다.
내가 되고 싶은 개발자를 적으며 오늘은 이만 글을 마치겠다.
나는 이런 개발자가 되고 싶다.
설명이 필요 없는 코드, 설명할 수 있는 코드를 추구하는 개발자
기본기가 단단하고 깊이 있는, 내 코드를 책임질 수 있는 개발 전문가
내가 배운 것을 나누고, 함께 성장하는 든든한 동료
'IT' 카테고리의 다른 글
[IntelliJ] 단축키 모음 (MacOS) (0) | 2022.05.27 |
---|---|
[VIM] vimtutor 번역하기 - 0 (0) | 2022.02.22 |
정말 5분만에 배포가 가능하다고? ~cra github page로 배포하기~ (0) | 2021.08.29 |
conole.log()의 반전 (0) | 2021.08.08 |
어쩌다 모르는 사람과 갑자기 비대면으로 페어 프로그래밍 하기 (0) | 2021.07.28 |