멘티님 안녕하세요. 먼저 소프트웨어 엔지니어로 진로를 결정한 것을 환영합니다. 대학 교과 과정에서 아마 *임베디드 시스템 쪽을 많이 공부했을 것 같네요.
전체적인 그림부터 그려보자면, 보통의 소프트웨어 엔지니어는 임베디드 같은 기계에 가까운 설계보다 사용자에 가까운 프로그래밍 분야의 역량을 많이 요구합니다.
ⒸNESA by Makers
기계를 제어하는 임베디드 소프트웨어는 소프트웨어 엔지니어보다는 하드웨어 쪽에 가까워요. 이쪽에 특화된 직장에 대해선 잘 설명하기가 어려울 것 같습니다만, 일단 아는 한도 내에서 알려드릴게요.
프로그래밍 기술 VS. 프로젝트 질문
면접 질문은 회사별로 다릅니다만, 삼성, LG, SK 등의 대기업에선 프로그래밍 기술에 대해서 잘 묻지 않습니다. 이보다는 무슨 프로젝트를 했었는 지를 중점적으로 물어보죠. 그 외에는 심화 지식보다는 일반 기업 면접 질문하고 비슷하다고 생각하시면 됩니다.
여러 가지 요인이 있겠지만, 제 생각에는 입사 후에 프로그래밍 교육을 다시 받기 때문에 프로그래밍 역량에 관해 심도 있게 묻지 않는 것 같아요. 아무리 컴퓨터 공학을 전공했어도 학교에서 배운 지식은 대기업에서 바로 활용하기에 거리가 있거든요.
하지만 네이버/카카오 같은 프로그래밍을 많이 써야 하는 회사에선 프로그래밍 관련 질문을 많이 합니다. 서비스의 규모에 비해 인력이 적어서, 바로 실전에 투입되어야 하기 때문이죠.
ⒸMarkus Spiske
보통 컴퓨터 공학 과정의 기본을 많이 물어봅니다. 혹시 이쪽에 관심이 있다면, 자료구조론, 알고리즘, 객체지향 프로그래밍을 숙지해야 면접 때 주어지는 문제를 풀 수 있습니다. 임베디드 소프트웨어 쪽은 자리가 있긴 하지만, 가뭄에 콩 날만큼 적긴 해요.
잘 쓴 코드를 내 것으로 만들자
소프트웨어 엔지니어 직군은 협업 잘하는 사람을 필요로 합니다. 규모가 큰 소프트웨어를 만들어야 할 테고 그러기 위해서는 필수적으로 다른 사람과 협업해야 하기 때문이죠. 여기에서 협업이란 자신이 써 놓은 코드/매뉴얼을 남들도 빨리 이해하게 하는 것을 의미합니다.
이런 역량을 얻는 가장 빠른 방법은 다른 사람이 만든 코드/매뉴얼 중에서 잘 쓴 부분을 내 것으로 만드는 노력을 하는 겁니다. 좋은 부분을 판별하는 것은 어렵지 않아요. 그런 부분은 기본만 할 줄 아는 사람이 봐도 "우와" 소리가 저절로 나오거든요.
같은 과에 프로그래밍을 잘하는 친구가 있다면, 같이 들은 수업에서 내준 과제 코드를 공유해달라고 부탁해보는 것도 좋아요. 단순한 과제로는 그 사람이 잘 짜는지 못 짜는지 알기 어려우니, 좀 복잡한 과제를 읽어보는 걸 추천합니다.
저의 답변이 도움이 되었으면 좋겠네요. 혹시 더 궁금한 점이 생기면 질문 주세요!
*임베디드 시스템: 특정한 제품이나 솔루션에서 주어진 작업을 수행할 수 있도록 추가로 탑재되는 솔루션이나 시스템