주니어 엔지니어 때 알았더라면 좋았을 것들 (1)
대학원 석사 과정 2년이 나에게는 정말로 쉽지 않은 시간이었는데, 오히려 졸업하고 나서야 대학원생 때 알았더라면 좋았을 것들이라는 책을 보게 되었고 이걸 진작 알았더라면 하는 생각이 많이 들었었다. 소프트웨어 엔지니어로서 8년 가까이 일을 한 이제는 모든 것이 적절한 때가 있다는 얘기가 많이 공감된다. 최근에 글또 내에서 주니어 엔지니어분들과 커피챗을 할 기회가 있었는데 그들의 고민하는 부분과 이전에 모 대학교 특강에서 자주 묻는 말들로 정리한 것들이 꽤 많이 겹치는 것이 있어 이번 기회에 내가 생각하는 주니어 엔지니어 때 알았더라면 좋았을 것들을 정리해 본다. 시작하기에 앞서 글 작성자는 컴퓨터 공학을 전공했고 머신러닝 관련 석사를 했으며, 운이 좋게도 경력 시작부터 좋은 조직들을 거쳐왔기 때문에 모든 사람이 공감할 수 있는 내용이 아닐 수 있다는 점을 미리 밝힌다. 비록 시작점은 다르더라도 글 내용 중 일부를 본인 상황에 맞게 잘 취사선택하여 어제보다 나은 내가 될 수 있으면 충분하다고 생각한다.
1. Software Engineer에게 가장 중요한 스킬셋
내가 생각하는 가장 중요한 기술 셋은 전산학 관련 전공 지식, 영어, 그리고 체력이라고 생각한다. 각각에 대해서 아래에서 조금 더 자세히 설명을 해본다.
1.1. 전산학 지식
직군 (Front-end engineer, Back-end engineer, Data engineer 등)에 따라 조금씩 중요도의 차이는 있겠지만, 좋은 엔지니어가 되기 위한 기반은 결국 튼튼한 전산학 전공 지식이라고 생각한다. 소프트웨어 엔지니어는 결국 문제를 해결하는 사람들이고 그 문제를 적절히 풀기 위해서는 시간/공간 복잡도를 고려해야하며, 우리가 실행하는 애플리케이션이 어떤 형태로 스케줄링되는지 그리고 데이터는 어떻게 효율적으로 관리할 지를 매일같이 고민한다. 이전 문장에서 서술한 내용을 대표하는 전산학 전공 과목들이 데이터 구조와 알고리즘, 운영체제/컴퓨터 구조, 데이터베이스와 같은 것들이라고 할 수 있겠다. 토이 프로젝트나 간단한 프로그램에서는 어떻게든 돌아가게 만드는 것이 큰 문제가 되지 않지만, 대규모 트래픽을 다루는 서비스나 로우레벨 소프트웨어 구현 시 이런 튼튼한 백그라운드는 Problem Solver로서 자신의 가치를 더 빛나게 해줄 수 있다.
전산학 지식이 중요하다는 말은 아마 이 글이 아니더라도 주위에서 꽤 들어봤을 것이고, 그래서 어떻게 전공 지식을 공부하고 쌓아나가면 좋을지에 대한 답변을 해주는 것이 좋을 것 같다. 만약 이 글을 보는 독자가 대학생이라면 당신은 행운아다. 전공자라면 대체로 졸업을 위해서 필수로 지정된 전공과목이 있을 것이니 해당 수업을 열심히 따라가면 될 것이다. 전공자가 아니라면 복수전공이나 부전공을 하면 좋겠으나, 여의치 않다면 수강이라도 하는 것 (학교마다 명칭은 다를 것 같은데 보통 선택과목 정도로 표현하는 것 같다)을 추천한다. 요즘 같은 정보화 시대에 유튜브나 인터넷에 찾아보면 공개된 강의도 많은데 꼭 수업을 들으라고 하는지 의아한 사람도 있을 것이다. 나는 개인적으로 어렵게 공부해야 그것이 정말 머리에 남는다고 생각한다. 따라서 수업을 듣고 과제를 직접 풀거나 프로그램하고 시험을 볼 수 있는 약간은 고전적 형태인 수업을 직접 듣는 것을 이런 이유로 추천한다.
만약 이미 졸업했다면 어떻게 하면 좋을까? 이때는 어쩔 수 없지만 외부에 공개된 강의나 아니면 사놓고 책장에 꽂아둔 (...) 전공책들을 보는 등의 방법을 활용해야 할 것 같다. 아래는 내가 추천하는 몇 가지 자료들이나, 아마도 내가 모르는 좋은 책이나 강의가 많이 있을 것이니 검색을 통해서 찾아보고 비교해 보면 좋겠다.
- 모두를 위한 컴퓨터과학 (CS50)
- CSAPP: Computer Systems: A Programmer's Perspective
- The Missing Semester
- Deeplearning.ai
- Mathematics for Machine Learning and Data Science
- Data Engineering
- Machine Learning / Deep Learning Specialization
1.2. 영어
구글 번역기나 ChatGPT를 위시한 생성형 AI들이 이제는 너무나 잘 번역해 주고 있는데, 영어가 중요하다고 얘기하니 고개를 갸우뚱하는 사람도 분명히 있을 것 같다. 그런데도 나는 전공만큼이나 영어가 중요하다고 생각한다. 위에서 추천한 강의나 책들이 대표적인 장점일 텐데, 좋은 책과 강의는 영어로 먼저 공개되는 경우가 대부분이다 (좋은 한국어책과 강의가 없다는 얘기가 아니다. 다만 절대적인 자료의 수가 아주 큰 차이가 난다는 점을 얘기하고 싶음). 운이 좋다면 CS50이나 The Missing Semester처럼 번역이 제공되겠지만, 그렇지 않은 경우도 상당히 많이 존재한다. 이런 강의나 책이 아니라도 해외 기술 블로그나 선행 연구 논문 등은 결국 영어를 피할 수가 없다. 번역기나 생성 AI를 쓰면 되지 않냐고 물어본다면, 회사 장비에서는 허가 되지 않은 번역 서비스 (Google Translate)나 생성 AI를 사용할 수 없는 경우도 빈번하게 존재한다. 설령 번역기를 사용할 수 있더라도 기술적인 내용의 경우 사용하는 어휘나 표현이 일반적인 구어/문어와 다르므로 오역이 발생할 가능성도 꽤 높다. 따라서 적어도 읽더라도 불편함 없도록 시간을 내서 공부하면 반드시 도움이 된다고 본다.
만약에 영어 읽기에 더해 말하고 듣기까지 수월하다면 더 좋을까? 이 경우 지원할 수 있는 회사의 범위가 외국계 회사로 확장되기 때문에 더 좋다고 할 수 있다. 반드시 그런 것은 아니지만 주위 사례나 levels.fyi에서 제공하는 정보 등을 종합했을 때 전체적인 보수 (Total Compensation)의 상방이 외국계 회사가 한국 회사에 비해 열려있으며, 회사 내에서 자리를 잘 잡는다면 해외 Relocation 기회도 얻을 수 있다는 장점이 있을 것이다.

그러면 어떻게 영어 공부를 하면 좋을까? 이것 역시 정답은 없고 본인의 성향에 따라 다를 것이다. 해외에서 영어를 쓸 수밖에 없는 환경 (유학, 워킹 홀리데이 등)에 노출된다면 가장 좋겠지만, 현실적으로 모든 사람이 그렇게 하기는 어려울 것이다. 글 작성자 역시 해외 체류 없이 영어 공부를 했기 때문에 많은 도움을 받는 자료들을 남겨본다. 아마도 글을 쓰는 시점에서는 좋은 자료들이 더 많이 있을 것이다. 가장 중요한 것은 어떤 강의, 책을 보는 것보다 그것을 끝까지 꾸준히 유지하는 것임을 강조한다.
- 영어 읽기를 위한 구문과 문법 공부를 위한 교재들
- 영어 말하기/듣기를 위한 강의들
1.3. 체력
프로그램을 작성하고 디버깅하고 고치는 작업은 상당히 고된 작업임은 자명하다. 대개 주 5일, 하루 8시간 근무를 기본으로 하며 때에 따라 야근까지 있는 소프트웨어 엔지니어들은 앉아 있는 시간이 대체로 길 것이다. 20대 때는 크게 문제가 없었던 체력이 나이가 들어가면서 결국엔 업무 생산성에 영향을 미치는 경험은 나만 겪은 것이 아닐 것으로 생각한다. 체력이 부족하면 그것이 결국 정신적인 부분에도 영향을 주고, 사소한 것에도 감정 제어가 어려워지는 악순환으로까지 이어질 수 있다.

그렇다면 어떻게 하면 좋을까? 나는 개인적으로 어떤 운동이든 좋다고 생각하고 심지어 하루하루가 아니라 주에 2~3회 정도만 해도 아예 하지 않는 것보다는 무조건 좋다고 장담한다. 아마도 흔하게 접할 수 있는 운동은 아래와 같은 것들이 있을 것이다.
- 걷기
- 달리기
- 웨이트 트레이닝
- 수영
- ...
아예 운동 경험이 없고 가볍게 시작해 보고 싶다면 런데이 앱을 통해서 걷기부터 시작하는 것을 추천한다. 단계별로 시간을 조금씩 늘려가며 걷기 훈련, 달리기 훈련 등이 제공되므로 본인의 수준에 맞게 체계적으로 시작해 볼 수 있을 것이다.

마치며
이번 포스트에서는 내가 생각하는 중요한 소프트웨어 엔지니어를 위한 스킬셋 세 가지에 대해서 그렇게 생각하는 이유와 몇 가지 자료들을 제공하면서 마친다. 생각보다 내용이 길어져서 다음 포스트에서는 독서, 채용 과정 준비, 개인 재무 그리고 최신 기술 트렌드를 따라가는 방법에 대해서 정리하려고 한다.
댓글
이 글 공유하기
다른 글
-
주니어 엔지니어 때 알았더라면 좋았을 것들 (2)
주니어 엔지니어 때 알았더라면 좋았을 것들 (2)
2025.03.30 -
코드트리 (Codetree) 두 달 이용 후기
코드트리 (Codetree) 두 달 이용 후기
2025.03.09 -
Cache를 활용해서 똑똑하게 중복 로그를 방지해보자!
Cache를 활용해서 똑똑하게 중복 로그를 방지해보자!
2025.03.02 -
Adapter Pattern
Adapter Pattern
2024.03.31
댓글을 사용할 수 없습니다.