회사 인터뷰를 보자. 개발자의 경우 하루정도 인터뷰 한다. 한국에서는 여러 명의 면접관이 한 명의 지원자를 앉혀 놓고 여러가지 질문을 하며 동시에 관찰을 한다.
미국은 일대일로 면접을 진행한다. 지원자로서는 한국에서는 한 시간 정도의 인터뷰만 잘 넘기면 된다. 미국은 그게 안된다
중략
인터뷰의 핵심은 문제 해결 능력이다. 문제를 전개하고 정의하고 협의하고 풀어나가는 능력이다.
한국에서 개인적으로 인터뷰할 기회가 생기면
"숫자 3개를 정렬" 하는 문제를 낸다.
아무 질문없이 문제를 그대로 풀어오면 빵점이다. 문제 자체를 정의하지도 않은 상태에서 자기 멋대로 풀어온 것이다. 이런 스타일의 개발자는 회사에서 가장 큰 문제아다.
지원자가 문제를 미리 알고 있다고 해도 아무 상관 없다. 어차피 일 년 동안 풀어도 못푸는 문제이기 때문이다. 지금까지 이 문제에서 필자의 기준에 합격한 국내 개발자는 거의 없었다. 어차피 국내에서는 실리콘밸리 수준의 문제 해결 능력을 가지고 있기가 어렵기 때문에 기대하지도 않는다. 기준에 모자라더라도 그 중에서 상대적으로 나은 개발자를 뽑을 수 밖에 없다. 이 문제를 풀 때 프로그래밍 언어는 상관하지 않는다. 시험에서 연필로 쓰나 볼펜으로 쓰나 상관하지 않는 것이나 같다. 언어 프로그래밍 능력은 금방 배울 수 있는 것이기 때문이다. 객체지향을 이해하는 것이 중요한 것이지 C++이나 Java 같은 언어를 잘 알아야 하는 것은 아니다.
먼저 국내 개발자들의 예를 보자.
그냥 3개 숫자 정렬하는 소스코드를 막 쓰기 시작한다.
물론 자기가 가장 자신있는 프로그래밍 언어를 사용한다. 나를 어떻게 생각하는 지 모르겠는데 내가 그걸 몰라서 풀어보라고 할 리는 없다. 즉 물어보는 사람의 의도를 파악해 보려는 생각은 하지도 않고 늘 정해진 문제를 풀 듯이 그냥 알고리듬 생각해 내기에 바쁘다. 숫자 3개 정렬하는 알고리듬이 복잡해야 얼마나 복잡하겠는가? 삼척동자도 다 아는 것이다. 바로 국내 교육의 병폐가 여기서 확연히 드러나는 것이다. 필자는 국내 회사에 가서 개발자들과 일을 할 때도 이런 문제가 보통 심각한 문제가 아니라는 것을 느낀다.
문제를 해결하기 위해 필요한 전제조건이 문제를 찾아내고 정확히 정의하는 능력이다. 이 능력은 학원가서 배울 수 있는 것도 아니고 주입식 위주의 교육 환경에서 쌓여온 무의식의 축적이기 때문에 장기적인 교육환경의 변화를 필요로 한다. 하여튼 국내 교육의 결과로 그런 능력은 없다 치고 알고리듬이라도 제대로 쓰면 가장 기본적인 논리력은 인정해 준다. 그런데 이것도 헤매지 않고 적어내는 사람도 많지 않다.
필자가 풀라고 한 "3개 숫자의 정렬"이란 문장으로서 문제가 확실히 정의되었다고 보는가? 아직도 그렇게 생각한다면 국내 소프트웨어 업계가 성숙하지 않았다는 구체적인 증거이다. 그럼 실리콘밸리의 회사의 인터뷰에서 벌어지는 대화를 시뮬레이션 해보자.
면접관: 숫자 3개 정렬하는 문제를 풀어보세요
지원자: 숫자 3개만 정렬할 것인가요? 4개, 5개, 혹은 많은 숫자를 정렬할 필요가 있나요?
면접관: 나중에는 숫자가 늘어날 겁니다.
지원자: 오름차 순, 내림차 순을 선택할 필요가 있나요?
면접관: 예
지원자: 숫자가 정수인가요, 실수인가요?
면점관: 두 가지를 다 사용합니다.
지원자: 정수일 경우 최대와 최소범위가 무엇인지요?
면접관: 최대가 큽니다. 30자리 숫자 입니다. 최고는 마이너스로 10자리 정도 됩니다.
지원자: 실수일 경우는 어떤가요?
면접관: 소수점 이하 20자리 까지 정확해야 합니다.
지원자: 이 프로그램이 독립적인 프로그램인가요? Function으로 제공해야 합니까?
면접자: 둘 다 필요합니다.
지원자: 어떤 응용프로그램이 사용하려고 하는 건가요?
면접관: 우주 관제 센터에서 사용할 것입니다.
지원자: 이 프로그램을 사용할 운영환경이 무엇입니까?
면접자: IBM 메인프레임 입니다.
지원자: 이 프로그램을 얼마나 자주 호출합니까?
면접자: 1초에 1억번 정도 호출됩니다.
지원자: 속도 때문에 소숫점 20자리를 계산하기는 불가능 할 것 같습니다.
면접자: 메모리는 충분히 늘릴 수 있으니까 어떤 알고리듬을 써야 속도가 가장 빠를까요?
지원자: 일단은 O(N log N) 인 알고리듬이 빠르겠지만 정렬해야 하는 숫자가 천 개, 만 개가 될 것이 아니라면 별 차이는 없으니까 중요한 것은 Function을 부를 때 숫자가 30자리나 되니까 parameter로 넘기지 말고 pointer로 넘기거나 Global 변수로 접근 하는 것이 어떨까요?
면접관: 그렇게 하면 객체지형적인 측면에서 어떤 문제가 있을까요?
.............
지금까지 보았지만 이 문제 정의는 아직 끝나려면 멀었다. 이런 대화가 1시간을 진행된다고 생각해 보자. 지원자가 가지고 있는 모든 지식이 나타난다. 국내 개발자들에게 풀라고 하면 그냥 답 적어내겠다고 하는 것과는 워낙 접근 방법이 다르니 비교할 수 조차 없다. 이런 인터뷰를 여러 명하고 하루 종일 하면 실력이 다 드러난다. 다른 면접관하고 얘기를 하면 또 완전히 다른 방향으로 간다. 그래서 문제를 안다고 해도 미리 공부해 갈 수도 없다. 사실은 대화 중에 면접관도 많은 것을 배운다. 지원자에게 많이 배울수록 감동받고 "저 사람은 꼭 고용해야 합니다" 라는 평가서를 적을 것이다. 이런 상호존중이 바로 회사에서 가장 중요한 것이다. 그룹으로 협업하면서 문제를 해결하는 능력인 것이다. 실리콘밸리의 개발자들은 이런 식의 사고방식이 익숙해져 있기 때문에 추상적인 문제가 주어져도 협업하면서 구체적으로 정의하며 문제를 해결해 나간다. 어차피 벼락치기 한다고 인터뷰 준비가 될 것도 아니기 때문에 평소 실력으로 편안하게 인터뷰에 임하면 된다.
이런 인터뷰 과정을 거쳐 입사를 하게 되면 한국 회사에서는 상상도 하지 못할 일이 다음날 벌어진다. 실제 업무를 하는 것이다. 교육은 없다. 필자가 대학 졸업 때부터 많은 미국 회사를 다녔지만 교육을 시킨 회사는 하나도 없었다. 그 다음날 부터 일을 시키는 것이다. 문제 해결 능력이 있는 사람들을 뽑았다면 당연히 자기가 해결해야 할 문제를 발견하고 정의하고 해결할 수가 있어야 한다. 물론 그러기 위한 기본적인 기반시스템은 갖추고 있어야 하는 것은 회사의 책임이다. 국내회사는 이런 기본 시스템도 갖추고 있지 않은 것이 산 넘어 산이다. 또 다른 방대한 주제이므로 여기서는 넘어간다. 그래서 국내 소프트웨어 개발자들의 화려한 이력서가 아무런 의미가 없다. 사상누각인 것이다. 대부분의 이력서에는 많은 프로그래밍 언어, 플랫폼, 방법론, UML같은 도구를 자랑스럽게 적어 놓는다. 미국 회사 인터뷰때는 그런 것은 별로 보지도 않는다. 다 보조적인 도구에 불과한 것 뿐이다
- dc official App
글 ㅈㄴ기네 ㅋㅋㅋ
문제는 숫자3개를 정렬하시오 지원자 면접자 문답보셈ㄷㄷ - dc App
문제를 물어물어 알고있는거 탈탈털어버리는 식 ㅎㄷㄷ 스님들이 저렇게묻는데 고승들 - dc App
근데 우리나라에서는 저렇게 꼬치꼬치 캐물으면 두세번째 물음 이후론 그냥 "빨리 쳐 풀어왓!" 이래버리지않을까싶은데.. 대기업은 다를려나?
와 질문이 정말 쓰레기네. ㅋㅋㅋ 3개의 숫자를 정렬하라고 하면 바로 푸는 이유는 널리 알려진 전형적인 문제이기 때문일 뿐임. 저런 면접관 안 걸리길 바라는 수밖에. 면접은 상호 평가임.
포프TV 포프도 어느 북미기업 면접썰에 트럼프카드 정렬하는거 묻는다는데 저런식이였음 - dc App
나는 개떡같이 말해도 너는 찰떡같이 알아서 내 어려움을 해결해 주렴 이라는 태도... 문제은행화 되고 있지.
문제를 분석하는지 보는거라니까 저기 예시가 지나친감이 있긴하다만 - dc App
ㅇㅇ 뭐... 내가 좀 흥분했는데 저런 질문들이 객관적인 평가 요소를 담보하기보단 그냥 답정너인 경우가 많아서 내가 불만이 좀 많은가봐. 뭐 차라리 3개 숫자 정렬 이런 건 변수가 적어서 그럴 염려는 적겠다.
잘 읽었음. 상당히 감명깊고 유익한 글 같은데
어차피 국내에서는 실리콘밸리 수준의 문제 해결 능력을 가지고 있기가 어렵기 때문에 기대하지도 않는다. 이 문자 너무 슬플다 ㅋㅋ...
좋은 글이네요.. 국내 개발자들은 "전 애자일 방법론도 써봤고요 TDD도 했으며 웹 풀스택에 이것도 해봤고 저것도 해봤고..." 이런 말들을 자랑스럽다는 듯이 하곤 합니다. 마치 대학에 가기 위해 생기부를 채우듯이 말이에요 이런 친구들에게 "그 프로젝트에 그것을 도입한 이유를 설명해보세요."와 같은 질문들을 하면 의사결정 과정은 생략 - dc App
하고 그나마 나오는 말은 장단점 정도를 답할 거예요 이 글은 정말로 중요한 것이 무엇인지를 말해주고 있어요 잘 읽었습니다! - dc App
상위 1% 한편으로 맞는 말이면서도 끝도 없이 늘어나는 requirements와 정렬분야세계최고수준초고수
근데 이건 크래킹 코딩인터뷰인가 그 책만 읽어봐도 아는 내용 아님? 그 책 안에서는 별의별 조건 다 제시하고 그 루트로 갈 경우 이런거 제시할 수 있다 나오는데 우리나라 면접하곤 다르지 ㅋㅋㅋㅋ
한국조직에서 저 지랄하고 있으면 ㄹㅇ 은따당할거 같은데
하라는거나 하지 말 존나많네
직원 교육도 하기 싫어서 상위 1프로 pm급 인재들 개발자로 후려쳐서 쓴다는건데 실리콘밸리라고 빨아주는거보소ㅋㅋㅋ 저기서 실리콘밸리를 가산디지털단지 프갤정보통신 같은거로 바꾸면 댓글 다 헬조센 IT 수준ㅉㅉ 니가 선택한 2400이다 악깡버 ㅇㅈㄹ로 도배됨 ㅋㅋ
대신 실리콘벨리는 액수가 다르잖음
숫자가 30자리나 되니까 parameter로 넘기지 말고 pointer로 넘기거나 Global 변수로 접근 하는 것이 어떨까요? 이게 뭔말이야?
메모리낭비 방지한다고
꺼져 난 2400이야
소공 조그만 해봐도 당연히 분석이 제일 힘든데
실제로 외국계 인터뷰는 다 저런식이다 외국계 가고싶은 프붕이들은 좆밥 플젝이나 그만하고 CTCI 책이나 사서 10회독 할것
애초에 지시하는걸 개병신새끼마냥한건데? 풀어보라 하면 당연히풀고말지 ㅋㅋ
이거 관련한 유명한 문제가 비행기 내부를 탁구공으로 채우면 탁구공이 얼마나 들어갈까요 하는 면접문제인데 사실 이건 답을 원하는 것이 아닌 답에 가까워지는 과정을 보기위한 질문이란 것 그럼 이때 지원자는 다양한 질문들을 물어봐야 하는데 비행기 면적, 탁구공의 크기등을 먼저 물어보고 탁구공은 반드시 구 모양을 띄고있어야 하는지, 비행기 내부에 사람들이 있는지, 비행기 의자는 없앨 수 있는지, 기장실도 포함인지, 객석칸이 아닌 화물칸도 포함인지 등등 ㅈㄴ 추상적인 문제가 주어졌을 때 어떻게 해야 구체화되는지 그 과정을 보고 뽑는거임. 이런 문제는 면접자들도 답 모르는데 그냥 내보는거라 함
저딴게 pc주의 사고방식의 문제해결론이란걸 생각해보는 애새끼가 없는게 개탄스럽다..ㅉㅉ 원 글쓴이도 뭐가 문제인지 고찰해본적이 없으니 저런 상황을 갓 아메리카라는 식으로 받아들이는 건 더 공포다
그 한국회사가 실리콘밸리급 보상을 안주니까 - dc App
학교 다닐때나 사회에서 저런식으로 꼬치꼬치 물어봤다가 혼났던 경험 이후론 단순하게 해석하는게 미덕인줄 알았는데..하아..
숫자 세 개를 정렬하라는 것에서 오름차순이냐 내림차순이냐 물어보는거부터가 엄청 큰 차이인듯
몇년전에 삼성 창의성 면접 저런식으로 하던데, 미세먼지를 줄이기 위해 인공 강우를 얼마나 내리게 하는게 좋을까요? 그런 인공 강우의 문제점은 어떻게 해결하나요? 시골에 사람이 적은 곳에도 인공 강우를 내리는게 좋을까요? 마스크는 어떤가요 이런 식으로 흘러갔던거 같음
이 댓글은 게시물 작성자가 삭제하였습니다.
동명이인이였누
얼마줄건데 실리콘밸리급 월급 줄거냐고
원글어디갔노?
내가 젤 잘하는건데ㅋㅋㅋ 이런 면접하는 회사가 어딧냐 대체
저건 씨발 예의 의 문제도 없잖아있음 - whatever we can do it
구현하고서 차차 바꿔가면서 질문해도 되는건데 - whatever we can do it
무작정 구현하면 아웃이지랄하니까 - whatever we can do it
댓글 수준이 이렇게 극명하게 갈리는 글은 오랜만에 본다 ㅋㅋ