안녕하십니까. 저는 컴퓨터 전공 4학년에 휴학 중인 멘티입니다. 군 전역하고 제가 하고 싶은 일이 무엇인지 찾고 있습니다. 저는 사람 만나는 일을 좋아하고 또 해외에서 일하고 싶습니다. 그동안 무엇을 해야 할지 몰라 행동하는 대로 살아왔습니다. 앞으로는 현재에 집중해보려고 합니다.
제가 컴퓨터 관련 학과이고 사람을 대하는 걸 좋아합니다. 새로운 환경에 부딪혀 보고 싶습니다. 저의 최종 목표는 창업입니다. 아직 분야를 명확하게 가지고 있지 않지만 어떤 무엇인가를 만들어보고 싶습니다.
그래서 저는 취업을 한다면 그전까지 창업을 위한 경험을 쌓고, 역량을 키우고 싶습니다. 영업도 하고 싶고 프로그래밍도 하고 싶습니다.
현재 휴학 중인데 이 상황에서 제가 할 수 있는 최선의 선택(역량계발)은 어떤 게 있다고 생각하시는지 궁금합니다.
그리고 우선 대기업 취업을 위해 프로그래밍을 공부한다면 어떤 언어들을 공부해야 하는지 또 어떻게 공부해야 할까요. 학원에 다녀야 할까요. 1년 남은 2학기 복학이 좋을까요. 멘토링 해주셔서 정말 감사드립니다.
💬 홍성모 멘토의 답변
안녕하세요. 멘티님. 복합적인 고민이 많으시네요. 굉장히 머리 아프시겠어요.
그래도 무얼 할지 모르는 사람들에 비해 생각이 상당히 앞서가고 있으세요. 사실 컴퓨터 전공을 포함한 공대에서 자기가 무얼 하고 싶은지 제대로 생각하는 사람은 적잖아요. 아무래도 학교 과제에 치여 사는 게 일상다반사다 보니, 미래에 대한 생각이라고 해도 졸업 후에 무얼 하고 싶다 정도의 가까운 미래에 대해서만 희망하곤 하죠.
그렇게 해서 들어간 첫 회사가 만족스러운 경우도 많이 있지만, 몇몇 경우는 전공을 좋아했음에도 불구하고 회사와 자신이 맞지 않는다는 현실에 굉장히 힘들어하더라고요. 미래를 내다보는 고민을 하시는 데에 먼저 박수를 보내드리고 싶어요. 미래 방향을 정확하게 파악하려고 하는 것은 그 무엇보다도 어려운 일이니, 잘 안 풀린다고 근심하지 마세요.
멘티님이 질문하신 내용에 대해 제가 이해한 바를 써봤습니다.
먼저 원하시는 방향은,
1. 해외에서 일하고 싶다. 2. 사람 만나는 것을 좋아한다. 3. 창업하고 싶다. 4. 프로그래밍을 잘하고 싶다.
그리고 궁금한 것들은,
1. 휴학 중인데, 무엇을 해야 하는지 아니면 복학을 빨리하는 것이 좋은지 모르겠다. 2. 많이 배울 수 있는 대기업 같은 곳에 취직하고 싶은데, 어떤 공부를 해야 하는지 모르겠다.
맞지요?
전체적으로 연결이 안 될 것 같지만 연결이 많이 되는 것들이 있네요.
능력 좋은 사람들이 많은 곳에 취업해서, 사람과의 네트워크를 쌓아 나아가면, 후에 창업하는 데 큰 도움이 되지요. 창업을 직접 하시거나 아니면 창업 멤버로 들어가셨을 때, 영업을 잘할 수 있다는 부분을 내세우신다면 원하시는 바를 모두 이룰 수 있을 것 같아요.
조금 더 구체적이고 단계적으로 다시 정리해보면,
1. 프로그래밍을 기초를 다져 놓습니다. 2. 그럼 좋은 회사에 입사하고, 능력 있는 선배들과 함께 많이 배우겠죠. 3. 그런 환경에 있으면 선배와 동기들 그리고 후배들과의 네트워크를 형성하기가 굉장히 용이해집니다. 4. 창업의 느낌이 오는 아이템이 있고, 뜻이 맞는 사람들끼리 모여서 실행할 수 있다고 판단됐을 때, 창업할 수 있습니다. 5. 잘 되면 해외로 영업을 나가거나 지사를 세우는 방법도 있겠죠.
아마 사람들 간의 네트워킹 방법은 잘하실 것 같아요. 멘토 역할을 맡으면서 이런저런 글들을 많이 받아보는데, 멘티님 글은 상대가 내용을 알아들을 수 있게끔 하면서 동시에 구체적으로 서술하려는 느낌이 많거든요. 일상생활에서도 상대를 배려하실 것 같은 느낌이에요. 창업 아이템이나 실행 방안은 아직 가까운 미래가 아닐뿐더러, 그때의 흐름을 읽어서 실행해야 하는 것이 맞을 테고요.
실력이 진로를 만듭니다
그럼 남은 건 프로그래밍을 잘하는 것입니다. 이 말인즉 지금 멘티님 상황에서 프로그래밍 능력을 키우는 것이 가장 좋은 방안이라고 저는 조언 드리고 싶어요. 삼성이나 SK 혹은 LG와 같은 대기업의 계열사에 들어가는 것과 네이버 혹은 다음 카카오같이 IT에 특화된 회사에 들어가는 것은 조금 다른 입사 전략을 가져야 합니다.
전자는 공모전과 같은 프로젝트 경험을 내세우는 게 좋고, 후자는 좀 더 이론에 치중하시는 게 유리할 것 같아요. 개인적으로 후자 쪽으로 가시는 것이 창업을 위한 네트워크 형성 면이나 학사 출신의 실력향상 면이나 유리하다고 생각합니다. 물론 대학원 출신이면서 연구에 관심이 있다면 전자가 좋습니다.
그럼 프로그래밍 이론은 어떻게 습득해야 할까요? 제가 생각하는 "프로그래밍을 잘한다"는 것은 두 가지 요건이 있습니다. 첫째는 결과물의 성능이 좋아야 하고, 둘째는 아름다운 코드를 짜는 능력입니다.
첫 번째로 말씀드린 결과물의 성능이 좋다는 말은, 결과물이 빠르게 동작하는가입니다. 데이터 구조의 기본은 물론 알고리즘의 기본이 있어야 가능한 일이지요.
두 번째로 말씀드린 아름다운 코드를 짠다는 말은, 누가 봐도 이해하기 쉬운 코드입니다. 가장 미시적인 단계에서는 코드가 (주석 없이 그 자체로) 말을 한다고 표현하기까지의 경지, 그리고 거시적인 단계에서는 수정이 용이한 탄탄한 프로그램 구조를 짤 수 있는 경지에 이르는 것이지요.
그리고 이 스킬은 현업에서 직접 고민하며 키우는 게 좋습니다. 말하는 코드를 짜기 위해선 객체지향에 대한 개념이 필요하고, 탄탄한 구조의 프로그램을 디자인할 수 있는 것은 여러 검증된 패턴을 응용할 수 있는 능력이 필요합니다. 하지만, 이 두 개는 직접 익힐 수 있기보다, 보다 더 능력 있는 개발자와 함께 일할 때나 그 사람이 작성한 코드를 봐야 비로소 깨닫는 것이 생깁니다.
그럼 첫 번째의 능력은 지금 기를 수 있는가에 대해 궁금해하실 텐데요. 네, 첫 번째 능력은 중요하고 지금 기를 수 있습니다. 이런 능력을 기를 수 있는 방법의 예로 문제를 하나 내볼게요. (직접 풀어보시고 아래로 스크롤을 내리셔도 좋아요)
1. 배열에 숫자들이 저장되어 있습니다. 2. 숫자 범위는 1부터 N까지인데, 하나의 숫자만 배열 안에 한 번 등장하고, 그 수를 제외한 나머지 숫자는 아예 안 나타나거나, 혹은 두 번씩만 배열 안에서 등장합니다. 3. 예시를 드리면 N이 5일 때, 배열은 [1, 5, 4, 1, 3, 5, 3] 와 같이 주어지는 거죠. 4. 이때, 한 번만 등장한 숫자가 무엇인지 알아내는 프로그램을 작성해 보세요.
생각할 수 있는 풀이는 정렬이 있겠죠. 정렬해서 앞에서부터 훑어가면 1개만 등장한 숫자를 찾을 수 있습니다. 하지만 정렬에 시간이 엄청 걸리겠죠.
그럼 더 나은 풀이는 뭐가 있을까요? N 크기의 배열을 새로 하나 생성하여, 처음 주어진 배열을 순서대로 훑으면서 새로 만든 배열에 나타난 숫자의 회수를 1씩 더해줍니다. 그럼 나중에 값이 1인 배열의 key를 찾으면 되겠죠.
이 방법은 첫 번째 방법보다 빠르지만, 새 배열을 만드는데 필요한 공간이 추가로 소모됩니다. 다른 생각해볼 수 있는 방법은 Hash도 있겠네요. 나온 값을 key로 하는 해쉬로 두 번째 방법과 똑같이 카운팅을 합니다. Hash도 충돌 때문에 시간이 지연될 수는 있지만 적어도 두 번째 방법보단 빠르겠네요.
자, 위의 예시와 비슷한 문제들을 풀면 첫 번째로 말씀드렸던 능력이 향상됩니다. 수학 문제를 푸는 것보다 재밌어요. 답을 보지 않고 풀고 나면 똑똑해졌다는 생각도 들고요. 위에 문제는 "프로그래밍 면접, 이렇게 준비한다 - 존 몽건 외 2명, 한빛미디어" 에 수록되어 있습니다. 저도 이 책으로 도움 많이 받았습니다. 책을 혹시 보시게 되면, 제가 위에 말씀드린 풀이 외에 훨씬 완벽한 풀이에 관해서도 설명되어 있으니, 한번 보시는 것도 추천해 드릴만 합니다.
만약 위의 문제가 어려우셨다면, "알고리즘" 과 "자료구조" 과목을 좀 더 파보시길 권해드립니다. IT 계열에 특화된 회사에서 입사시험 때 묻는 것도 이런 응용식의 문제거든요. 위의 문제가 어려우셨다 싶으면, 계속 휴학 상태로 공부를 하시는 것을 추천해 드립니다. 목표가 명확하신 만큼, 휴학 상태라 하더라도 마음을 충분히 다잡고 공부를 하실 수 있을 거라 생각해요.
휴학 중에 내세울 수 있는 프로그램 하나를 짜보는 것도 더없이 좋을 테고요. 사소한 것이어도 좋으니, 멘티님께 필요한 것을 구현해 보는 게 좋습니다. 나중에 어필하기도 쉽고요. 문제가 어렵지 않고 저 정도면 괜찮다 싶으시면 복학하시는 것도 좋을 것 같습니다.
꿈이 확실하면 미래는 열립니다
마지막으로, 현재 멘티님께서 최종적으로 무엇을 하고 싶은가를 좀 더 구체적으로 잡으신다면 앞으로 해야 할 것들이 더 선명하게 다가올 거요. 대학에서 전공을 선택했을 때, 미래에 자신이 할 수 있는 일이 엄청 좁아진 느낌이 들었을 거예요. 그 이유는 고등학교 때 생각해 본 미래가 또렷하지 않았으니, 미래에 자신이 할 수 있는 것 중에 선택해야 하는 폭이 좁아진 것으로 보인 거지요.
만약 첫 직장도 그러한 상태에서 들어간다면, 비슷한 느낌이 들게 될 것이에요. 하지만 만약 고등학교 때 프로그래머가 되고 싶은 사람이 컴퓨터 전공에 들어갔다면, 그 사람은 자신의 선택 폭이 좁아졌다고 생각하지 않고 미래가 더욱 뚜렷해졌다고 생각할 것이지요. 저는 멘티님의 첫 직장이 그런 직장이 되셨으면 좋겠습니다.
혹시나 제가 잘못 이해했거나, 빠뜨린 부분, 혹은 확실히 머리에 안 들어온다는 부분이 있으면 부담 갖지 말고 꼭 다시 말해주세요. 제 말이 무조건 맞을 수 없지만, 제 경험이 멘티님께 큰 도움이 되면 좋겠어요. 용기 내 고민을 나눠준 멘티님께 다시 응원을 보냅니다!