멘토지원
파트너스
현직자 클래스
멘토 찾기
Best 질문답변
오픈소스를 몰라도, 당신은 프로그래머가 적성이다.
Amazon · Software Development Engineer
약 6년 전
💬 멘티의 질문
안녕하세요. 멘토님! H 대학교 4학년에 재학 중인 학생입니다. 취업전선이 코앞에 와있는데 기업 컨택은 커녕 아직 직무에 대해 많은 고민을 하고 있습니다. 그러던 와중에 '소셜멘토링 잇다'를 방금 알게 되었고요.

 여러 멘토님들을 보다가 저에게 가장 맞는 멘토님이신 것 같아 질문을 드리게 되었습니다. 먼저 제 고민을 정리해 보겠습니다. 상황을 설명해 드리기 위해 다소 내용이 길어지게 된 점 미리 양해 부탁드립니다.
 Ⓒalexandru acea

1. 제대 후 복학한 이래로 S/W개발 분야에 관심이 생기긴 했는데요. 개발직 근로 환경이 좋지 못하다는 얘기도 있는 데다, 인터넷의 오픈소스를 잘 활용하지 못하는 저를 보면서 적성에 맞지 않는다는 판단이 들었습니다. 그래서 학기 중에만 열심히 공부했을 뿐(평점은 3점 후반대 유지), 따로 코딩에 흥미를 붙이지 못하고 지냈습니다.
 
그러던 와중에 졸업을 앞두고 안드로이드와 서버 통신 관련한 졸업작품을 하나 만들었습니다. 또 3학년 말에 스타트업 인턴 근무를 나간 적도 있는데, 여기서도 간단하지만 그와 유사한 서버-안드로이드 간의 코딩을 하기도 했었습니다. 이런 경험을 하고 나니 서버 분야에 관심 많이 생겼고 시스템 엔지니어가 되고 싶다는 꿈을 갖게 되었습니다.
 
그래서 취업 전에 지금부터라도 부족한 코딩에 전념해보고자 1년 휴학을 계획하고 있습니다. 경험을 쌓을 수 있다면 열정페이라도 좋고, 기업에서 혼나면서라도 배우고 싶습니다. 아니면 공모전에 도전하는 방법, 학원을 다니는 방법 또는 인턴을 한 번 더 해보는 방법 등도 고민하고 있습니다. 어떻게 하는 게 좋을까요?

2. 국내 S/W 개발 직무가 전반적으로 적은 연봉에 근로 시간이 긴 경우가 많다는 선배들의 말에 고민이 많이 생깁니다. 대기업 쪽 입사를 바라본다면 제가 내세울 만한 기술을 갖추기 힘들 것 같고, 스타트업 기업 입사를 생각한다면 또 프로그래밍 실력이 좋지 않은 제게 너무 큰 부담과 책임감이 안겨질 것 같아 망설여집니다.
 
그래서 조언을 구할 수 있는 개발자가 어느 정도 있는 중소기업 입사를 생각하고 있습니다. 이후에 최대한으로 열정을 바쳐 시스템 엔지니어로써 경력을 쌓아가려고 하는데 멘토님의 생각이 궁금합니다.
 ⒸUfaBizPhoto

프로그래밍에 크게 자신감이 없다 보니 입사한 후에 제게 주어진 업무를 잘할 수 있을까라는 막연한 걱정이 앞서서 여쭈게 된 질문입니다.

3. 프로그래밍이 적성이 맞지 않는 것 같아 고민입니다. 기존에 숙지하고 있는 지식을 이용해서 코딩을 하는 것에는 흥미도 있고 작업도 큰 어려움 없이 하는데요. 오픈소스같이 인터넷을 찾아가며 잘 알지 못하는 생소한 개념으로 코딩을 할 때는 작업이 너무 더딥니다. 그러다 보니 내 적성이 아닌가 하는 생각이 많이 듭니다.
 
4. 프로그래밍을 잘하려면 '프로그래밍을 많이 해 봐야 한다'라는 공식은 알고 있지만, 그 외에 프로그래밍 실력을 향상시키는 데 도움이 될 만한 노하우가 있을까요? 프로그래밍 정말 잘하고 싶습니다.
 
이상입니다. 직무에 대한 고민이 너무 많아서 주절주절 써 내려갔는데 의미 전달이 잘 되었으면 좋겠습니다. 바쁘신 와중에 끝까지 읽어주셔서 너무 감사합니다. 짧게라도 답장 주시면 너무 큰 도움이 될 것 같습니다. 답변 기다릴게요!

💬 홍성모 멘토의 답변
먼저 어려운 고민을 안고 계시는 것 같아, 위로의 말씀을 드리고 싶네요. 대신 남들과 달리 방향성을 고민한다는 것에 대해서는 잘하고 있다는 말씀을 백번 천번 드리고 싶습니다.
 
제 주위만 봐도 프로그래밍에 관심 있어 하던 사람들이, ‘일반적으로 좋은 기업이라 불리는’ 회사로 들어가서 후회하기도 하고 혹은 그저 그런 개발자가 되는 경우도 간혹 있거든요.
 Ⓒjcomp

물론 이런 사람들의 비율이 크진 않습니다만, 자신이 그리고 그리던 목표를 접는 것만큼이나 허무하고 맥 빠지는 일은 없을 거예요. 생산적인 고민이고, 또 꿈이 있는 사람만이 가질 수 있는 고민이라는 걸 다시 한번 말씀드리고 싶습니다.
 
하고 계신 고민을 간단하게 요약해봤어요.
1. 휴학에 대한 고민
2. 앞으로의 진로 고민 (대기업 / 중소기업 / 스타트업)
3. 프로그래밍이 적성에 부합하는가 (오픈소스 사용이 어렵다)
4. 프로그래밍을 잘하고 싶은데 어떻게 해야 하는가
로 정리해 답변해 드리면 잘 전달될 것 같아요.

 

기본 실력 있는 당신, 학원은 비추예요

첫 번째로 휴학 고민에 대한 제 생각은 이래요. 정확하게 멘티님의 실력을 가늠할 수는 없습니다만, 경험을 적어주신 부분을 참고하여 조언드리자면 다른 4학년 재학생에 비해 결코 뒤처지지 않는 실력을 가지고 있다고 말씀드리고 싶네요.
 
그런 의미에서 고민하고 계신 ‘인턴 / 공모전 / 학원’ 중에 ‘학원’은 선택지에서 제외시키세요. 저도 한때 학원에 가서 C++언어를 배운 적이 있었는데, 샘플 코드를 주고 그대로 타이핑을 하여 실행을 해보는 것이 주된 수업 내용이었습니다. 

설명도 깊지 않고, "OOO 구문은 이와 같은 일을 합니다." 정도랄까요? 그래서 저는 학원을 추천드리고 싶진 않습니다. (강남에 B컴퓨터학원이라고 있다는데요. 여기는 직장인분들도 간간이 보인다는 지인의 말이 있었지만, 저는 여기도 회의적이에요.)
 Ⓒpexels


하고 싶은 분야가 뚜렷하다면 선택은 공모전

남은 건 인턴 혹은 공모전인데, 하시고 싶은 분야가 뚜렷할수록 공모전을 추천드리고 싶어요. 공모전은 인턴과 달리 주제에 제한이 없어서 하고 싶은 쪽으로 해볼 수 있거든요.
 
또한, 서버 프로그래밍 같은 뚜렷한 목표 분야를 가지고 있는 것은 좋습니다. 물론 단순히 목표를 가지고 있다는 것만으로는 다른 사람과 차별성이 있다고 하긴 어렵죠. 

하지만 직접 공모전에 자발적으로 참여하여 성과물을 냄으로써, 단순히 희망에 그치는 것이 아닌 경쟁력도 있다라는 것을 어필할 수 있습니다. 추가로 나중에 취업 면접에서 멘티님 본인의 스토리를 내세우기도 한결 수월해지고요.
 

자유도 대신 현업 경험 원한다면, 인턴이 제격

인턴은 공모전에 비해 자유도가 좀 떨어집니다. 인턴은 기업에서 배정해주는 대로 가야 하고, 인턴 경험에 따라 앞으로 일하게 될 분야가 많이 달라질 수 있거든요. 대신 현업에 더 가깝게 체험을 할 수 있기 때문에, 실제 일어나는 문제, 돌발 상황을 간접 경험할 수 있습니다. (아무래도 인턴은 부담을 덜 주는 만큼 직접 경험은 힘들긴 합니다.) 자신이 몰랐던 분야에 눈을 떠 흥미를 느낄 수도 있고요.
 
추가로 조심스럽게 한 말씀 더 드리자면요. 공모전에서 좋은 프로그램을 만드신다면, 입상을 하지 못하시더라도 인턴을 하신 것에 비해 더 플러스적인 요소가 될 수 있습니다. 반대의 경우, 공모전이 인턴 경험에 비해 약한 임팩트가 될 수 있어요.)
 ⒸPixabay


목표가 있는 휴학은 옳다

말이 길었습니다만, 저는 목표가 있다면 휴학에 대해 찬성하는 입장입니다. 대신 꾸준함을 가지고 초심을 잃지 않으셔야 해요. 잘할 수 있을지 모르겠다라고 하신다면, 자신을 믿으세요. 인생에서 하는 일 중에, 처음 계획했던 대로 흘러가는 일은 없습니다. 그때마다 주저앉고 싶으시지만, 나중에 후회하지 않을 만큼 도전해보면 중간목표지점까지 해내실 거라 믿어요.
 
두 번째로 해 주신 진로 고민에 대해서는 세 경우로 나눠서 말씀드릴게요.
 

대기업 *SI는 코딩으로 클 수 없어요

보통 대기업이라 칭하면 S 사, L 사 같은 곳의 SI를 말하는 것으로 알고 있습니다. 이런 곳의 부서는 개발도 하긴 하는데, 외주를 주고 관리/감독을 하는 곳도 많아요. 이런 부서를 개인이 피해서 선택할 수 있을지 잘은 모르겠습니다만, 프로그래밍을 하는 부서도 코딩을 하기에 썩 좋은 환경이 아니라고 말씀드리고 싶어요. 만약 기업 선택에 있어서 페이가 중요한 부분을 차지한다면 고려해보시는 것도 좋겠지만, 그게 아니라면 저와 주변 사람들은 말릴 거예요.
 

스타트업, 혼자라면 NO 선배 있다면 OK

스타트업은 신입을 뽑는 경우가 거의 없다고 봐요. 종종 있긴 한데, 저의 시선으로 보면 그런 곳은 실력향상이 좀 어렵습니다. 신입을 채용하는 대부분 스타트업의 경우, 아이디어는 가지고 있는데 개발자가 필요해서 큰 고민 없이 "졸업생 정도면 되겠지" 하고 채용하는 경우가 많거든요. 그런 곳은 경험의 기회는 많지만, 성장의 기회와는 좀 다른 의미가 될 자리라 생각합니다. 스타트업 중에 시니어 개발자(이전에 경력이 3년 이상 있는 사람)가 두 명 이상 있는 곳이면 오히려 좋은 기회일 거예요. 그런 곳이 있다면 잘 살펴보고 가시면 될 것 같습니다.
 Ⓒunsplash


중소기업, 개발자-IT 중심 회사라면 좋은 선택

중소기업에 가장 초점을 맞추고 계신 것 같은데, 제가 중소기업은 주변에도 경험한 사람이 없어서 정확한 말씀은 드리기 어렵겠네요. 제 경우를 좀 말씀드리면, 저는 N 사로 바로 입사를 하였는데, 개발자 중심의 회사다 보니 굉장히 많은 도움이 되고 있습니다. 좋은 사수를 만나 처음에 정석대로 배우는 게 다른 기업에서는 어려운데, 어느 정도 규모가 있는 IT회사에서는 그게 가능하거든요. 이런 기회를 잡을 수 있을 정도의 규모라면 저는 좋은 것 같습니다. 추가로 IT 중심의 회사라면, 찬성입니다.
 

오픈소스 모른다고 미리 걱정 마세요

그다음 질문에서는 프로그래밍이 적성에 맞는지를 많이 걱정하셨죠? 네, 자신 있게 멘티님의 적성에 부합한다고 말씀드릴 수 있습니다. 저도 4학년, 아니 졸업 때까지도 오픈소스에 대해 하나도 몰랐습니다. 주위에서 친구들이 프로젝트 발표할 때 오픈소스를 뭐 써서 어떻게 구현했다 하면 진짜 대단하다라는 생각밖에 안 들었어요.
 
실제 기업에 가면 어떻게 될까요? 오픈소스 쓰는 곳도 물론 있습니다. 하지만 신입이 바로 오픈소스를 써야 하는 경우는 적어요. 그리고 오픈소스를 쓰기 힘들어하는 사람 많습니다. 대부분 사람들이 다 같은 상황이니, 그 부분에 대해선 미리 걱정하지 않으셔도 됩니다.
 
그럼 오픈소스를 안 쓸까요? 네, 안 쓰는 부서가 더 많습니다. 그런데 쓰는 부서로 갈 수도 있죠. 그렇다고 오픈소스 쓰는 법을 미리 알아야 하는 것도 아닙니다. 필요할 때 검색해서 찾아서 쓰는 경우도 있지만, 대부분은 시스템에 잘 들어가서 동작하고 있는 오픈소스의 겉면만 보게 됩니다. 그 프로그램이 하는 일은 사수분이 가르쳐주시기 때문에, 오픈소스 쓰는 법에 대해 미리 고민하지 않으셔도 돼요.
 Ⓒpexels


흥미가 있다면 적성에 맞는 거다

그렇다면 제가 생각하는 프로그래밍이 적성인 사람은 무엇인지 궁금해하실 수 있을 텐데요, 제 개인적인 생각입니다만 프로그래밍에 흥미가 있는 사람이면 충분합니다. 흥미만 있다면, 방법을 습득해서 무언가를 해내는 것은 말 그대로 시간문제라서요.
 
흥미가 있는 사람은, 시간만 주어지면 프로그램이 동작하게끔 어떻게든 아는 것을 쥐어짜서 해냅니다. (보통 이렇게 한계까지 쥐어짤 때, 오픈소스도 어쩔 수 없이 보게 되고, 프로그래밍 실력도 늘더라고요.) 나아가 만든 것에 만족하지 못하고, 버벅이는 현상에 대해 개선점을 찾아 나가려 합니다. 이 모든 것은 흥미만 있으면 가능한 일이고, 흥미가 없는 사람은 "이 정도면 뭐" 하는 생각으로 일찍이 타협합니다.
 
(그렇다고 안 되는 것을 계속 잡고 있으면 흥미가 당연히 떨어지니까요. 해보는 데까지 해봤는데 안 되면 스트레스받지 마시고 타협하세요. 실력은 다른 흥미로운 프로젝트에서 스트레스 안 받고 얼마든지 더 늘릴 수 있습니다.)
 

프로그래머라면 갖춰야 할 두 가지

마지막 질문은 프로그램을 잘할 수 있는 방법이었죠? 제가 생각하는 ‘프로그래밍을 잘한다’는 것에는 두 가지 요건이 있습니다. 첫째는 결과물의 성능이 좋아야 한다는 것이고, 둘째는 아름다운 코드를 짜는 능력입니다.
 
첫 번째로 말씀드린 결과물의 성능이 좋다는 말은, 바꿔말하면 결과물이 빠르게 동작하는가입니다. 데이터 구조의 기본+알고리즘의 기본이 있어야 가능한 일이지요. 두 번째로 말씀드린 아름다운 코드를 짠다는 말은, 누가 봐도 이해하기 쉬운 코드를 말하죠. 가장 미시적인 단계에서는 코드가 (주석 없이 그 자체로) 말을 한다고 표현하기까지의 경지, 그리고 거시적인 단계에서는 수정이 용이한 탄탄한 프로그램 구조를 짤 수 있는 경지에 이르는 것이지요.
 
방금 말씀드린 두 번째 스킬은 현업에서 직접 고민하며 키우는 게 좋습니다. 말하는 코드를 짜기 위해선 객체지향에 대한 개념이 필요하고, 탄탄한 구조의 프로그램을 디자인할 수 있으려면 여러 검증된 패턴을 응용하는 능력이 필요합니다. 하지만, 이 두 개는 직접 자신 스스로 익힐 수 있다기보다, 보다 더 능력 있는 개발자와 함께 일할 때나 그 사람이 작성한 코드를 봐야 비로소 깨닫는 것이 생깁니다.
 ⒸNegative Space


프로그래밍 실력, 당장 기를 수 있어요

그럼 첫 번째의 능력은 지금 기를 수 있는가에 대해 궁금해하실 텐데요. 네, 첫 번째 능력은 중요할 뿐만 아니라 지금 기를 수도 있습니다. 이런 능력을 기를 수 있는 방법의 예로 문제를 하나 내드릴게요. (직접 풀어보시고 아래로 스크롤을 내리셔도 좋아요.)
 
문제 예시) 배열에 숫자들이 저장되어 있습니다. 숫자 범위는 1부터 N까지인데, 하나의 숫자만 배열 안에 한 번 등장하고, 그 수를 제외한 나머지 숫자는 아예 안 나타나거나, 혹은 두 번씩만 배열 안에서 등장합니다. 예시를 드리면 N이 5일 때, 배열은 [1, 5, 4, 1, 3, 5, 3]과 같이 주어지는 거죠. 이때, 한 번만 등장한 숫자가 무엇인지 알아내는 프로그램을 작성해 보세요.
 
생각할 수 있는 풀이는 정렬이 있겠죠. 정렬해서 앞에서부터 훑어가면 1개만 등장한 숫자를 찾을 수 있습니다. 하지만 정렬에 시간이 엄청 걸리겠죠.
 
그럼 더 나은 풀이는 뭐가 있을까요? N크기의 배열을 새로 하나 생성하여, 처음 주어진 배열을 순서대로 훑으면서 새로 만든 배열에 나타난 숫자의 회수를 1씩 더해줍니다. 그럼 나중에 값이 1인 배열의 key를 찾으면 되겠죠. 이 방법은 첫 번째 방법보다 빠르지만, 새 배열을 만드는 데 필요한 공간이 추가로 소모됩니다.
 
다른 생각해 볼 수 있는 방법은 Hash도 있겠네요. 나온 값을 key로 하는 Hash로 두 번째 방법과 똑같이 카운팅을 합니다. Hash도 충돌 때문에 시간이 지연될 수는 있지만 적어도 두 번째 방법보단 빠르겠네요.
 
자, 위의 예시와 비슷한 문제들을 풀면 첫 번째로 말씀드렸던 결과물 성능이 좋아지게 만드는 능력이 향상됩니다. 수학 문제를 푸는 것보다 재밌어요. 답을 보지 않고 풀고 나면 똑똑해졌다는 생각도 들고요. 위의 문제는 "프로그래밍 면접, 이렇게 준비한다" 에 수록되어 있습니다. 저도 이 책으로 도움 많이 받았습니다. 책을 혹시 보시게 되면, 제가 위에 말씀드린 풀이 외에 훨씬 완벽한 풀이에 관해서도 설명되어 있으니 한번 보시는 것도 추천드립니다.
 Ⓒunsplash


좋은 코드를 짜는 사람 = 좋은 프로그래머

다시 한번 말씀드리지만, 오픈소스 사용을 잘한다는 것은 프로그래밍을 잘한다 와는 별개의 문제입니다. 저 중 둘 다 잘할 수도 있고 하나만 잘할 수도 있어요. 지금 멘티님처럼 현재 현업에서 경험을 쌓기 이전인 경우에는, 같은 문제를 두고 남들보다 더 성능 좋은 코드를 짤 수 있는 사람이 프로그래밍을 잘하는 사람입니다. (포텐셜을 늘리는 방법이라고 표현할 수 있겠네요.)
 
혹시나 제가 잘못 이해했거나, 빠뜨린 부분, 혹은 확실히 머리에 안 들어온다는 부분이 있으면 부담갖지 말고 꼭 다시 말해주세요. 제 말이 무조건 맞을 수 없지만, 제 경험이 멘티님께 큰 도움이 되면 좋겠어요. 그래서 최대한 구체적으로 알려드리고 싶어요. 용기 내어 고민을 나눠준 멘티님께 다시 응원을 보냅니다!
 


*SI : System Integration(시스템 구축)의 약자. 전산시스템을 필요로 하는 곳으로부터 하청을 받아, 시스템의 기획, 개발, 유지보수, 운영 등을 대신해 주는 업종.

홍성모 멘토
Amazon · Software Development Engineer
IT개발/데이터
“행운은 준비가 기회를 만나는 것이다.”
여태 많이 답답하셨죠?
어떤 내용이든 편하게 연락주세요 :)
여러분의 작은 용기, 큰 결심을 응원합니다 !
같은 직무를 다룬 글
인기 있는 글
연구/설계
약 6년 전