김진형교수의 SW정책 단상

profjkim.egloos.com

포토로그



외국계 IT회사에서 SW개발자 뽑는 방법 인력양성

최근 한 제자가 외국계 SW회사로 전직했다. 그 과정에서 프로그래밍 능력을 검증하는 방법이 우리 기업들에게 시사하는 바가 적지 않아서 그 내용을 밝힌다. 이렇게 정성드려 SW인재를 채용하니 자긍심을 느끼고 열심히 일하는 것이 아닐까?  우리기업들도 학벌보다는 실력으로 뽑으면 대학의 SW교육도 정상화할 수 있을 것이다. 프로그래밍 숙달안하고 설렁설렁 졸업하고 학벌만 보고 뽑는 대기업에서 인생을 게기고자하는 생각을 안하게 되겠지. 

반값 등록금이 사회 문제인데 공부 안하려면 비싼 돈내고 대학에 진학할 이유도 없고


참고로 이 제자는 소프트웨어+인공지능 R&D직이다. 따라서 인공지능 이야기가 자주 나온다.

-----------------------

면접은 두 번의 전화 인터뷰, 이메일 프로그래밍 인터뷰, 두 번의 온사이트 인터뷰로 이어졌습니다. 한 인터뷰를 마치고 다음 인터뷰를 진행하는데 1~2주 정도 시간이 걸렸습니다.

전화인터뷰1 -> 이메일 프로그래밍 인터뷰 -> 전화인터뷰2 -> 온사이트인터뷰1 -> 온사이트인터뷰2 의 순으로 진행되었습니다.


전화 인터뷰 1.

이력서 내용에 대한 질문이 있었습니다.(이전 회사에서 했던 일, 개발한 프로그램에 대한 질문, 석사 때 프로젝트에 대한 질문)

프로그래밍 언어, 객체 지향 개념에 대한 질문이 주로 나왔습니다.

객체 지향 프로그래밍의 장단점은 무엇이라 생각하는가? 동적 메모리 할당은 할당할 메모리 크기를 컴파일 타임에 알 수 없을 때 쓰는데, 그 외에 어떤 경우에 유용하게 쓸 수 있겠는가? interface는 꼭 필요할까? 싱글톤 구조의 단점은 무엇인가? 등 정답이 없는 문제가 주로 나왔습니다.


이메일 프로그래밍 인터뷰.

3가지 문제를 24시간 내에 풀어 제출하는 인터뷰였습니다. 문제는 sparse matrix를 효율적으로 구현하고, 왜 그렇게 구현했는지, 얼마나 효율적인지를 설명하는 문제, 주어진 xml 데이터 파일을 parsing하여 데이터를 효율적으로 insert, search하는 자료구조 및 gui 또는 cui 를 구현하는 문제, 마지막으로 주어진 데이터 파일을 읽어 clustering하는 알고리즘을 구현하는 문제였습니다. 

각각의 문제를 c++로 코딩했습니다. 구현할 때 선택한 자료구조와 알고리즘에 대해 왜 효율적인지,  다른 자료구조들과의 비교를 설명하여 제출하였습니다.


전화 인터뷰 2.

이메일 프로그래밍 인터뷰에 대한 질문이 나왔습니다. 이 문제는 ~~게 구현했던데 왜 그랬는가?

석사 때 했던 프로젝트들에 대한 질문이 다시 나왔고, pattern recognition에 관련된 질문이 나왔습니다.

디자인 패턴에 대한 질문도 나왔습니다. 알고 있는 패턴들에 대해 설명하라고 했습니다.


온사이트 인터뷰 1.

아침 10시~저녁 7시 까지 인터뷰를 했습니다. 

10시 30분 까지는 모든 연구원들 앞에서 제가 그동안 해왔던 일들에 대해 프레젠테이션 했습니다. 

10 30분부터 1시간~1시간 반 씩 1~2명의 엔지니어와 인터뷰를 진행했습니다. 모든 인터뷰는 코딩 문제, 석사 때 했던 프로젝트를 자세히 물어보는 경우와 머신러닝 알고리즘을 자세히 물어봤습니다.


온사이트 인터뷰 2.

온사이트 인터뷰1 후 일주일 뒤에 오후 3시 30분~6시 30분 까지 인터뷰를 했습니다.

연구소장과의 인터뷰에서는 저의 석사 때 프로젝트와 석사 논문에 대해 영어로 설명하였습니다. 공인된 영어 성적표는 요구하지 않고 연구소장과의 영어 면접으로 어학 평가를 하였습니다.

이후 엔지니어 2명 씩 각각 한시간씩 인터뷰를 진행하였습니다. 온사이트 인터뷰1과 마찬가지로 주로 코딩문제, 석사 논문, 머신러닝 이론에 관한 질문이 이어졌습니다.


제가 받았던 프로그래밍 문제 들 중 일부를 예로 적어보겠습니다. 다음과 같은 식으로 진행되었습니다. (대화 사이사이에는 생각하고 칠판에 적어보는 등의 시간적 텀이 많았습니다)


면접관: 동전이 다음과 같이 있다. 이 동전들의 조합으로 주어진 금액을 만들 수 있는 최소한의 동전 개수는 몇개인가?

: 이 문제는 greedy하게 풀 수 있는지 보고 없으면 DP를 해야 할 것 같다

면접관: 어떻게 greedy하게 풀 수 있는지를 판별할 수 있겠는가?

: 음 ~~게 하면 될 것 같다.

면접관: 그 경우에는 ~~~하면 안되지 않은가?

: 아 그렇구나. 그럼 ~~~~해야 할 것 같다. 그럼 이 문제는 DP를 해야한다.

면접관: 그럼 DP알고리즘을 칠판에 적어보라

: (칠판에 알고리즘 적음)

면접관: optimal인가? 아닌 것 같다. 그렇게 모든 케이스를 계산하지 않아도 될 것 같다.

: 아 그런 것 같다. 주어진 동전들에 대해서만 계산하면 될 것 같다. ~~~게 고치겠다.

면접관: ok


면접관: 다음과 같은 2차원 배열이 있다. 각 배열의 원소는 integer이다. 이 배열의 앞과 끝은 서로 만난다. 이 배열을 한바퀴 돌아 제자리로 오는 데 integer들의 합이 가장 작게 드는 경로를 어떻게 찾겠는가?

:(example을 칠판에 그려서 해봄)

: 이 문제는 우선 평면화 한 다음 뒤에서 부터 거꾸로 접근해야 할 것 같다. 뒤에서 부터 풀면 앞의 경로와 상관없이 현재의 지점에서의 optimal을 구해나갈 수 있을 것 같다.

면접관: 예를 들어 설명해 보라. 어떠한 식으로 계산해 나가면 되는가?

: (칠판에 예를 들어 설명)

면접관: psudo 코드로 적어보라. 어떻게 하면 메모리 사용을 optimal하게 할 수 있겠는가?

: 뒤에서부터 구해나가기 때문에 현재의 지점보아 앞쪽의 배열들은 메모리에  올리지 않아도 될 것 같다. 결국 바로 이전 열과 현재의 열만 있으면 계산을 할 수 있다.

면접관: 맞다. 그런데 ~~~게 하면 더 적은 메모리가 필요하지 않은가?

: 아..맞다.


면접관: 다음과 같은 2차원 배열이 있다. 각 배열의 원소는 binary 값이다. 배열의 원소가 이루는 가장 큰 사각형을 찾으려면 어떻게 해야하는가?

: (방법이 떠오르지 않아서 칠판에 이리저리 example그려가며 한참 고민하다가)incremental하게 하면 될 것 같긴 한데 잘 안되고 있다..

면접관: 단순한게 접근하면 좋을 것 같다. 만약 1차원 배열이라면 어떻게 하겠는가?

: 그때는 이렇게 한 쪽 끝에서 시작해서 연속된 값들을 counting 하겠다.

면접관: 그것을 2차원으로 확대하면 어떻게 되겠는가?

: (또 한참 고민)단순 확대는 안되고 ~~~~~게 한 행씩 증가시키면서 계산하겠다.

면접관: 그 방법은 처음 보는 방법이다. time complexity가 어떻게 되나?

: 음…~~~ 하므로 ~~~정도 될 것 같다.

면접관: 아닌 것 같다. 정확히 분석해보자(라고 하면서 면접관들끼리 분석)

: (저 혼자 계속 분석) ~~~~~하므로 내 분석이 맞는 것 같다.

면접관: 알고리즘의 핵심 루프 부분을 코드로 적어보라

: (칠판에 적음)~~~~게 하면 ~~~~게 된다.

면접관: 그런 것 같다. 새로운 solution이다. 우리가 알고 있는 방법과 비슷한 성능을 낼 것 같다. 우리가 알고 있는 건 ~~~~~~한 방법이다.

: 그 방법은 별도의 메모리가 필요해서 비효율적일 것 같다.

면접관: 배열을 그대로 보존하지 않아도 된다면 inplace로 수행하면 된다.

: 아 알겠다


면접관: 1024 dimension의 데이터가 1000명의 사용자로부터 매초 실시간 날라오고, 이것을 매 초 clustering해야한다. 네트워크 시스템을 어떻게 구축하겠는가? 클러스터링 알고리즘은 어떤 것을 쓰겠는가?

: 사용자들의 물리적 위치를 알아야 할 것 같다. 또한 문제나 데이터에 대한 사전 정보가 있어야 clustering 알고리즘을 결정하는 데 도움이 될 것 같다. 또한 클러스터링 성능이 중요한 지, 지연 없이 매 초 클러스터링이 완료되는 것이 중요한 지 문제를 명확히 해야 할 것 같다.

면접관: 사용자들은 크게 10개의 위치에 분산되어 있다. 가장 중요한 건 지연 없이 효율적으로 클러스터링 하는 것이다. 그렇다고 클러스터링 성능이 너무 나빠선 안된다.

: 사람들이 10개의 위치에 나뉘어 있어도 결국 모든 데이터를 한 번에 클러스터링 해야 한다면 한 곳의 서버로 모든 데이터를 모아야 하는데, 그러한 상황에서는 각 10개의 위치에서 클러스터링 성능에 영향을 최소한으로 미치도록 데이터의 디멘젼을 줄이던가, 아니면 서버에서 클러스터링을 빠르게 할 수 있도록 시간 복잡도가 낮은 알고리즘을 써야 할 것 같다. ~~~한 알고리즘으로 디멘젼을 줄이던가 ~~~한 간단한 클러스터링을 해야할 것 같다.

면접관: 각 지역별로 클러스터링을 한다면 어떻겠는가? 데이터에 gps정보가 있다고 가정하라.

: 각 지역 별로 클러스터링을 한다면 각 사용자의 실시간으로 변하는 위치에 맞추어 최단거리, 또는 가장 빠른 속도를 내는 지역 서버를 찾을 수 있도록 하는 설계가 필요하다. 지역 서버들의 정보를 미리 가지고 있고 현재 위치에서 가장 적절한 서버를 선택해야 한다. 결국 지역 서버를 선택하는 과정이 1차 클러스터링 과정이 될 수 있을 것 같다. 서버가 정해지면 그 서버에서 해당하는 데이터들을 클러스터링하면 된다. 

면접관: 각 지역마다 클러스터 개수를 안다면 어떠한 알고리즘을 쓰겠는가?

: 음…문제의 특성마다 다를 것 같다. 클러스터 개수를 안다면 여러 클러스터링 알고리즘이 효율적으로 동작할 수 있다. 문제의 특성에 따라 기존 알고리즘을 사용하던가 자신만의 적절한 distance와 error를 정해야 한다.

면접관: 그렇다면 문제의 특성은 ~~~~

: 그렇다면 ~~~~

면접관: 다음 질문으로...


이 외에도 여러 문제가 있었는데 진행되는 방식은 비슷했습니다. 문제에 대해 제가 어떻게 접근하는지 계속 설명하고, 면접관들은 피드백이나 힌트를 주고, 제 생각이나 방법을 justify하고, 그것을 코드로 적어보고 하는 식이었습니다.

면접을 겪어본 인상은 "사람을 철저하게 검증한다"라는 것이었습니다. 전화면접 2시간, 이메일 면접, 이틀에 걸친 온사이트 면접을 통해 좋든 싫든 제가 알고 있는 것, 코딩하는 스타일, 생각하는 법 등이 다 드러나게 됩니다. 학력, 배경을 전혀 보지 않는지는 모르겠습니다만(서류 심사를 어떻게 하는지는 모르겠습니다) 실제 면접에서는 실력만 보는 것 같습니다. 제 석사 전공이 인공지능이라 관련 이론 질문이 나왔는데, 인공지능이나 머신러닝을 전공하지 않은 순수 소프트웨어 인력들에게는 코딩 관련 질문만 하는 것 같습니다.


핑백

덧글

  • MTS 2012/07/04 03:35 # 삭제 답글

    좋은 글이군요, 교수님. 한가지 덧붙이자면 인터뷰할때 인성도 많이 봅니다. 저도 보스톤에서 12년째 SW 엔지니어로 코딩을 하고 있습니다. 특히 경기 불안으로 인해서 고용이 많이 줄어들면서 엔지니어 한명이 담당해야할 코딩의 양이 많이 늘어나고 그러다 보니까 팀원간 혹은 다른 팀과의 기술적 혹은 인간적 마찰이 가끔 발생합니다. 저는 그래서 엔지니어들 인터뷰할때 인성을 많이 체크합니다. 과연 이 사람이 팀원들과 잘 어울릴지.. 가르쳐 놓으니까 몇년후에 다른 회사로 가버리는걸 아닐지... 한국은 어떨찌 모르지만 미국에서는 한직장에서 5년 이하의 경력은 사실 그 분야의 전문가로 인정하지 않는 분위기입니다. 전 그래서 엔지니어의 인성도 중요시 생각합니다. 좋은글 잘읽었습니다.
  • 글쎄.. 2012/07/11 23:22 # 삭제 답글

    저건 특이한 경우도..
    미국에선 학벌안가리고뽑았어도
    구글코리아도 한국에선 sky만 뽑았잖아요
  • 알고 싶습니다 2012/07/16 23:30 # 삭제 답글

    아...저런(인공지능빼고요) 질문에 대답 할 수 있을라면 공부를 해야겠지요?
    컴공에 가면 대답을 할 수 있는 건가요?
    제가 아는 컴공과 애들은 저보다도 모르는 것들이 많던데 저런질문에 대답을 할수 없을꺼 같은데요
    이런걸 배울수 있는 대학이 어디 없나요?
    기초적인 것부터 탄탄하게 알려주는 그런곳은 없겠조 ㅠㅠ
    아.. 생활비만 아니라면 정말 몇년은 더공부해보고 싶내요 ㅠㅠ
  • 꿈꾸는교수 2013/03/01 23:09 # 답글

    "구글코리아도 한국에선 sky만 뽑았잖아요" 에 대하여.

    SKY만 뽑은 것이 아니라 뽑이보니 SKY가 되었겠지요. SKY라고 안 봅을 수는 없잖아요.
    SKY보다 더 우수하면 왜 안 뽑겠어요.
  • Kyu 2013/03/07 15:16 # 삭제 답글

    아직도 게시물은 도 간단한 초보자 초보자에 대한. 5 월 님이 연장 에게 작은 다음 다음 시간에서?게시물에 대한 | 감사합니다 당신에게 감사합니다.
  • 정존 2013/04/16 09:13 # 삭제 답글

    좋은 글입니다.
    면접 방식이 국내와는 다르군요.
    인성관련해서는 어떤식으로 외국에서 생각하는지도 궁금하군요.
  • app 2013/04/16 10:25 # 삭제 답글

    1
  • 잔망스러운 얼음요새 2014/01/23 12:06 # 답글

    Interesting post and thanks for sharing. Some things in here I have not thought about before. Thanks for making such a cool post.
    http://muhamadbahrululum.blogspot.com/
    http://muhamadbahrululum.blogspot.com/2013/11/MobilSedanCorolla.html
  • 잔망스러운 얼음요새 2014/03/04 15:34 # 답글

  • 잔망스러운 얼음요새 2014/03/04 15:35 # 답글

  • 잔망스러운 얼음요새 2014/06/22 09:48 # 답글

  • 2014/10/16 15:53 # 삭제 답글

    이 블로그는 내가 귀하의 게시물을 공부 사랑 환상적입니다. 좋은 그림을 계속! 당신은 많은 사람들이 당신이 크게 그들을 도울 수있는,이 정보를 라운드 사냥하고, 인식하고 있습니다.
  • 2014/10/19 03:09 # 삭제 답글

    이 포럼은 정말 좋은 정보입니다!
  • pastikan 2015/09/16 11:47 # 삭제 답글

    please include me..

    http://nugrapos.com
  • 라운드 2015/11/17 00:01 # 삭제 답글

    하의 게시물을 공부 사랑 환상적입니다. 좋은 그림을 계속! 당신은 많은 사람들이 당신이 크게 그들을 도울 수있는,이 정보를 라운드 사냥하고, 인식하고 있습니다.
댓글 입력 영역