본문 바로가기
Life

웹 개발자 최대의 고민, 무엇을 공부해야 할까?

by softserve 2023. 8. 9.
반응형

개발자는 평생 공부해야 하는 직업

 

'사실은 그렇지 않습니다!'라는 말을 기대하셨다면 죄송하지만 사실입니다. 지금 다니는 회사에 뼈를 묻어도 좋다거나, 다른 직무로 전향할 계획을 가진 분들이라면 이런 고민을 안 하셔도 되겠지만 '모두가 꿈꾸는 개발자'로서 오래오래 행복하게 살아가기 위해서는 반드시 계속 공부를 해야만 합니다.

개발자의 삶은 시작부터가 쉽지 않습니다. 1) 코딩테스트에 대비한 알고리즘 학습과 연습이 필요하고, 2) 서류 전형을 통과하기 위해서 다양하면서도 실속 있는 경험들로 채워진 이력서와 3) 프로젝트 경험을 통한 통찰이 녹아있는 포트폴리오를 만들어야 합니다. 이렇게 하면 면접 기회를 얻을 수 있습니다. 어렵게 얻은 기회를 놓치지 않기 위해  4) 개발 언어, 프레임워크, 전공 지식을 입에서 술술 나올 정도로 익히고 다듬어야 합니다. 5) 인성을 고칠 수는 없으니 최대한 포장하는 방법이라도 고민해봐야 합니다. 다섯 가지 관문을 통과하면 비로소 개발자로서 커리어를 시작할 수 있습니다. 

개발자가 되고 나서는 매일매일 회사에서 제대로 자기 몫을 하기 위해, 그리고 조금 더 좋은 프로그램을 만들기 위해, 지금 회사에서 살아남기 위해 공부가 필요합니다.

신입 개발자들은 우선 회사의 업무 프로세스와 도메인에 대해 이해할 필요가 있습니다. 도메인 지식은 특정 분야의 전문 지식을 말합니다. 간단한 예로, 배달의 민족에 다닌다면 요식업 배달 서비스에 대해 알아야 하고 토스뱅크라면 금융업에 대한 지식이 필요합니다.

또 실제로 업무에 투입되기 위해서는 그 회사에서 사용하는 도구와 언어의 사용방법을 숙지해야 합니다. 그리고 개발을 하다가 막히는 부분이 생기면 구글신의 도움을 받거나 ai의 힘을 빌리거나 동료들에게 물어보거나 해서 난관을 헤쳐나가야 합니다.

여기까지는 크게 걱정하지 않아도 일을 하다 보면 자연스럽게 체득할 수가 있습니다. 

진짜 어려운 부분은 지금부터입니다. 단순히 업무에 필요한 지식을 취득하는 것을 넘어서 우리의 미래를 위해, 자기 가치를 올리고 이직에 성공하기 위해, 향상된 삶의 질과 높은 연봉을 위해 우리는 대체 무엇을 공부해야 할까요? 급속도로 변화하는 시장에서 도태되지 않기 위해 무엇을 알아야 하는 걸까요?

 

많아도 너무 많다, 공부해야할 것이!

 

개발에 있어서 가장 기초가 되는 것은 대학교에서 4년 동안 배우는 CS 전공과목들입니다. 프론트엔드 또는 웹 개발자가 알고리즘 같은 걸 알 필요가 있냐 하는 사람도 있지만 코딩테스트에 대비하기 위해서라도 알고리즘을 공부해야 하고 논리적인 사고를 훈련하기에도 좋습니다. 클라이언트는 주로 윈도우 같은 운영체제를 통해 웹에 접속하고 서버는 리눅스를 통해서 서비스를 제공하므로 운영체제에 대해서도 알아야 합니다. 그리고 웹과 네트워크, HTTP 통신에 대한 이해도 필요합니다. 이런 기초 과목의 경우 공부하는 데 시간과 노력이 많이 필요하고, 공부한 만큼 직접적인 효과를 볼 수 있는 것도 아니기 때문에 더욱 어렵게 느껴지죠. 학생 때 더 열심히 할걸...

실무에 있어서 가장 중요한 것이 개발 언어를 다룰 수 있는 능력이라고 생각합니다. 특정 언어를 손발처럼 다룰 수 있을 정도로 훈련이 되어야 합니다. 문법과 기본 라이브러리는 한 달이면 어느 정도 익힐 수 있지만 언어의 작동 방식에 대해 깊이 이해하고 효율적으로 활용하기 위한 학습도 필요하죠. 요즘은 언어만큼 중요한 것이 프레임워크입니다. 지금은 어떨지 모르겠으나 라떼는 학교 다니면서 스프링 같은 걸 들어보지도 못했습니다. 학교만 열심히 다니고 기본기만 잘 갖춘다고 뽑아주는 세상이 아니기 때문에 개인 학습과 프로젝트를 통한 훈련이 필요하죠.

여기에 더해서 조금 더 스킬 업하기 위해서 읽어야 할 책들이 산더미처럼 쌓여있습니다. 실용주의 프로그래머, 클린 코드, 클린 아키텍처, 리팩토링, 디자인 패턴, 이펙티브 자바... 첫 장을 넘긴 책들은 점점 늘어나고 있는데 마지막 장까지 읽고 덮은 책이 하나도 없네요.

 

직장인에게 최고의 스승은 회사이다

 

학생이라면 무엇을 공부해야 할 것인가에 대한 부담은 다소 적은 편입니다. 시간적인 여유도 있고, 학교나 학원에서 정해진 커리큘럼에 따라가기만 하면 되니까요. 그 과정에서 더 공부해보고 싶은 부분이 있다면 깊이 파볼 수 있고, 앞으로 영원히 쓸 일이 없을 것 같은 지식들도 학생 시절에는 한 번쯤 공부해 볼 만하죠.

반면 직장인들은 할애할 수 있는 시간이 많지 않습니다. 모처럼 야근이 없는 날 금쪽같은 저녁 시간, 고된 한 주를 보내고 맞이한 황금 같은 주말, 피로에 절어있는 사람으로 가득 찬 출퇴근길 정도가 전부입니다.

따라서 지금 다니고 있는 회사가 앞으로의 삶에 미치는 영향은 생각보다 커지게 됩니다. 하루의 대부분을 회사에서 보내기 때문이죠. ('개발자의 첫 직장, 중요한가?').

어떤 회사에 다니느냐에 따라 공부해야 할 양이 더 늘어나기도 하고, 쓸데없는 데 시간을 낭비하게 될 수도 있습니다. 

옛 방식을 고수하는 작은 기업에서는 풀스택이란 말을 많이 씁니다. 말이 풀스택이지 사실 프론트, 백을 구분할 만큼 프로젝트 규모가 크지 않거나 인력이 충분하지 않기 때문에 혼자서 여러 가지 일을 다 해야만 하는 경우가 많습니다. 모든 것을 경험해 볼 수 있다는 이점은 있지만 하나에 집중할 수 없다는 단점도 있습니다. 프론트엔드에서는 기본적으로 HTML, CSS, JS를 알아야 하고 React, Vue, Angular 중에 하나는 쓸 줄 알아야 하죠. 백엔드에서는 Java와 스프링, SQL이 기본입니다. 축하합니다. 공부해야 할 양이 두 배로 늘어났습니다. 오래된 기술 스택의 회사에서는 유명한 프레임워크 대신 JQuery나 JSP를 사용하니 더욱 혼란스럽습니다. 여기에 형상 관리는 기본이고 지금 회사에서 사용하지 않는 상태 관리 도구니 테스트 도구니 하는 것들이 채용공고에 오르내리는 걸 보면 대체 무엇을 공부해야 할지 알 수 없는 상황에 이르게 됩니다.

제가 생각하는 좋은 회사는, 그 회사에서 해야 하는 일을 더 잘하기 위해 노력하는 것만으로도 좋은 개발자가 될 수 있는 회사입니다. 자연스럽게 나에게 부족한 부분을 찾아서 공부하고, 동료들과 함께 스터디를 하거나 어떤 걸 공부하면 좋을 지에 대한 팁을 얻을 수 있으며, 그 결과 연봉이 오르고 시장 경쟁력이 생기는 것이죠.

반면, 나쁜 회사에서는 매일매일 일상적이고 반복적인 업무를 수행하며, 앞으로의 나의 삶에 큰 도움이 되지 않을 잡다한 지식을 익히기 위해 노력합니다. 회사에서 쌓은 경험을 경력으로 쓰기 어렵기 때문에 이직이 어렵고 개인의 삶을 포기하고 이곳에서 탈출하기 위한 공부에 매달려야 합니다.

여러분이 다니는 회사는 어떤 회사인가요? 

 

중요한 것은 꺾이지 않는 목표

 

공부해야 할 것은 많고 인간의 수명은 유한하니, 늙어 죽기 전에 공부한 덕을 좀 보려면 적절히 공부해야 할 것을 취사선택할 필요가 있습니다. 우리는 대체 무엇을 공부해야 할까요?

저는 다음 글에서 정답을 찾을 수 있었습니다.

https://evan-moon.github.io/2019/08/26/how-does-developer-study/

바로 나한테 필요한 것을 공부하면 됩니다!

'너무 당연한 소리 아니냐, 나한테 뭐가 필요한 지는 어떻게 알 수 있느냐' 반문하는 분들이 있겠죠.

목표를 명확히 세우면 나한테 뭐가 필요한 지 알 수 있게 됩니다.

당장 취직이나 이직이 목표라면 취업 사이트에 들어가 공고를 보셔야 합니다. 공고에서 자기네 회사에 들어오려면 무엇을 공부해야 하는지, 무엇을 경험해야 하는지 상세히 알려주고 있습니다.

지금 회사에서 하고 있는 일을 더 잘하는 것이 목표라면 주변 사람에게 묻거나 충분한 자아성찰을 토대로 부족한 부분을 찾아서 채워나가야겠죠.

가장 도움이 되는 목표는 'OO을 만들고 싶다.'와 같은 구체적이고 현실적인 목표입니다.

면접을 볼 때 '만들어 보고 싶은 것이 있느냐?'는 질문을 종종 받았습니다. 그냥 취직해서 돈 버는 것이 목표였던 저는 사실대로 없다고 대답을 했고, 떨어졌습니다. 그때는 이런 걸 왜 물어보는지 이해를 못 했었는데 이제는 조금 알 것도 같습니다. 저처럼 막연하게 훌륭한 개발자가 되는 것이 목표인 사람은 해야 할 것이 너무 많기 때문에 이것저것 건드리다가 제 풀에 지쳐 쓰러지기 쉽습니다. 저는 불과 얼마 전까지만 해도 프론트엔드로 빠른 이직을 하려고 리액트를 공부하다가 생각만큼 녹록지 않다는 것을 깨닫고 다시 백엔드로 돌아서게 되었습니다. 뭐든 공부해 보고 경험해 보면 언젠가 도움이 된다는 생각을 갖고 있긴 하지만, 지금 시점에서 볼 때 리액트를 조금 다뤄본 것은 시간 낭비에 불과하겠죠.

억지로라도 만들어보고 싶은 것을 찾아보세요. 어지간한 것들은 이미 기성품이 존재하겠지만 100% 본인 입맛에 맞지는 않을 겁니다. 목표를 실현하기 위해 필요한 것들을 찾아서 공부하세요. 여유가 된다면 실제로 필요한 어플이나 웹사이트를 만들어 사용해 보세요. 배포, 출시까지 해서 다른 사람들의 피드백을 받고 부족한 것을 채워나가는 경험까지 해본다면 금상첨화입니다. 

무엇을 공부해야 할지 대충 윤곽이 그려졌다면 이제 어떻게 공부해야 할지도 고민을 해보아야 합니다.

저는 계획을 세워서 1) 책의 첫 장에서 마지막까지 꼼꼼하게 공부하는 것을 선호하는 편인데 막상 일을 하면서 그런 방식으로 학습을 하는 것은 어렵다는 걸 깨닫게 되었습니다. 출퇴근 시간을 이용해 꾸준히 읽었지만 진도가 너무 더디게 나가는 것 같아 놓아 버린 책들이 많습니다. 글이라도 하나 남겼으면 다행인데 그렇게 하지 못한 지식들은 금방 날아가버려 쓸모없어지고 말죠. 완주를 위해서는 스터디를 통해서 약간의 강제성을 주입하는 것이 좋을 것 같습니다. 

또 어렵게 취득한 지식들이 진정 쓸모를 가지게 만들려면 그 지식을 활용해 보는 경험이 꼭 필요합니다. 필요할 때 언제든 꺼내쓸 수 있어야 비로소 자기 것이 되었다고 할 수 있습니다. 그런데 터득한 지식을 어디에 쓸 것인지 찾기란 쉬운 일이 아닙니다. 진행 중인 프로젝트에 억지로 끼워 맞추는 것은 오버 엔지니어링이 될 수도 있죠.

그래서 반대로 2) 직면한 문제점을 해결하기 위해서 관련 지식을 인터넷이나 책에서 찾은 다음, 문제를 해결하는 방식의 학습이 더 효율적일 수 있습니다. 

이것은 취향의 문제이기도 하고, 둘 다 적절히 활용하는 것이 좋다고 생각합니다. 체계적으로 지식을 넓히는 데는 1) 방법이 유용하고, 2) 방식으로 그 지식을 체득하여 현찰로 바꿀 수가 있으니까요.

 

마치며

 

제가 성공한 10년 차 개발자 입장에서 내가 해봤는데 이렇게 하면 되더라 하면서 이런 얘기를 했다면 훨씬 신빙성이 있었을 텐데, 안타깝게도 본문에서 이렇게 하세요 저렇게 하세요 한 것들을 저도 아직 실행에 옮기지는 못했습니다. 이 글은 저 자신에게 하는 말이기도 합니다. 저와 비슷한 고민을 하는 분들과 함께 제가 나름대로 찾은 답을 나눠보고 싶었어요.

반응형

댓글