본문 바로가기
IT 공부/공부하며 알게된 사실들

개발자의 문제 해결 역량이란? (feat. 구글 면접 시뮬레이션)

by exdus3156 2023. 11. 8.
 
글로벌 소프트웨어를 말하다, 지혜
『글로벌 소프트웨어를 말하다, 지혜』는 소프트웨어에 대한 근본적인 이해와 통찰력인 지혜를 통해 글로벌 소프트웨어로 나아갈 수 있도록 안내한 책이다. 소프트웨어를 꿈꾸는 대학생들과 취업준비생, 소프트웨어 개발자, 글로벌 소프트웨어를 만들고 싶어하는 회사의 CEO, CTO, 경영진 등에게 글로벌 소프트웨어를 개발하는 데 필요한 ‘지혜’가 무엇인지 일깨워준다. 이 책은 이야기 형식으로 구성되어 있어 쉽고 재미있게 읽을 수 있고, 실리콘밸리의 소프트웨어 회사와 국내 소프트웨어 회사의 차이점과 그 이유를 짚어주며, 오래도록 개발자로 살아남을 수 있는 길을 제시한다.
저자
김익환
출판
한빛미디어
출판일
2014.06.05

 

<글로벌 소프트웨어를 말하다>라는 책에서 구글의 면접 시뮬레이션에 대해 저자가 상상한 간략한 대화 예시가 있다. 이것을 읽고 내가 얼마나 문제 해결 역량이 떨어지는지 반성하게 되는 계기가 되었다. 이를 소개하려 한다.

 

문제는 다음과 같다. 

 

숫자 3개를 정렬하는 방법은?

 

면접관과 지원자의 대화는 아래처럼 흘러간다. 문제 해결 역량이 뛰어난 지원생의 경우다. 면접관은 A, 지원자는 B로 표기했다.

 

A : 숫자 3개를 정렬해보세요.
B : 숫자 3개만 정렬한 것인가요? 혹은 더 많은 숫자를 정렬할 필요가 생기나요?
A : 나중에는 숫자가 늘어날 것입니다.
B : 정렬 조건은 고정되었나요? 혹은 오름차순, 내림차순 등 정렬 방식을 선택해야 하나요?
A : 선택해야 합니다.
B : 숫자가 정수인가요? 아니면 실수인가요?
A : 두 가지 모두 사용합니다.
B : 정수일 경우 범위가 어떻게 되나요?
A : 최대 30자리 정수입니다. 최소는 마이너스로 10자리 정도 됩니다.
B : 실수는 어떤가요?
A : 소수점 이하 20자리까지 정확해야 합니다.
B : 이 프로그램이 독립적인 응용 프로그램인가요? 아니면 Function으로 제공하는 것입니까?
A : 둘 다 필요합니다.
B : 그러면 응용프로그램은 누가 사용하려는 것인가요?
A : 우주관제센터입니다.
B : 이 프로그램은 어떤 운영환경에서 사용됩니까?
A : IBM 메인프레임입니다.
B : 이 프로그램을 얼마나 자주 호출합니까?
A : 1초에 1억번 호출합니다.
B : 그렇다면 소수점 20자리를 계산하기는 불가능해 보입니다.
A : 메모리는 늘릴 수 있어요. 어떤 알고리즘을 써야 빠를까요?
B : 정렬이면 O(N logN) 시간복잡도가 빠르지만, 정렬해야 하는 숫자가 만 개를 넘는 수준이 아니라면 별 차이는 없을 것 같습니다. 중요한 것은 해당 Function을 호출할 때 숫자가 최대 30자리나 되니까 인자로 그대로 넘기지 말고 pointer나 글로벌 변수로 접근하는 것이 좋을 것 같습니다.
A : 그렇게 하면 객체지향 설계적인 측면에서 어떤 문제가 있을까요? 

(...)

 

책에 따르면, 이런 대화가 최소 1시간은 넘게 걸린다고 한다. 이런 인터뷰를 일대일로 몇 시간을 하고, 다시 다른 면접관과도 여러 번 인터뷰를 하기 때문에 실력이 드러날 수 밖에 없다. 따라서 알고리즘 문제를 책을 사서 주구장창 코딩한다고 면접에서 좋은 평가를 받는다 할 수 없는 것이다. 벼락치기는 불가능하다.