본문 바로가기

Develop/코딩인터뷰

프로그래밍 면접 이렇게 준비한다

반응형

프로그래밍 면접 이렇게 준비한다

구직을 시작하기 전에

구직을 하기 전에, 스스로가 어떠한 업무를 원하는지 제발 파악해봐라. 지원하고자 하는 업무와 지원한 업무가 불일치하면 합격하기 어려운 건 당연하다.

어떤 스타일의 개발자인지 점검해볼 수 있는 질문 목록

  • 나는 시스템 프로그래머일까, 애플리케이션 개발자일까?
  • 나는 사용자 인터페이스 코딩을 좋아하는가?
  • 나는 디버깅에 능숙한가?
  • 나는 테스팅을 좋아하는가?
  • 나는 아키텍트인가, 코더인가?

프로그래밍 외 질문 목록

  • 나는 관리업무에 흥미를 느끼고 있을까?
  • 대기업에서 일하는 편이 더 나을까, 중소기업에서 일하는 편이 더 나을까?
  • 오픈 소스 프로젝트를 좋아하는가?
  • 장기 프로젝트를 선호하는가, 단기 프로젝트를 선호하는가?

스스로에게 질문하고 답하면서 개발자로서의 정체성을 확립해서 구직을 하는 편이 전문적인 경력을 쌓는데 유리하고 지원한 업무에 대한 만족을 높일 수 있다. 학생이라면, 지원하고자 하는 업무가 무엇인지 파악하고 정확한 방향을 잡아 업무에 필요한 역량을 채워갈 수 있다.

근무조건 협상

회사의 제안을 그 자리에서 협상도 없이 받아 들이지 말자! 일단, 회사의 제안을 차분하게 검토할 시간을 가져야 한다. 계약서의 내용도 확인해야 하며 서로 계약내용에 대해 엇갈리게 이해하는 부분이 없는지 체크해야만 한다. 또, 채용 조건 중에 마음에 안 드는 부분이 있다면 협상을 시도해야 한다. 회사에서 어떤 채용 조건을 제시하든 대부분의 경우에 조정이 가능한 사안이다. 지원자가 긴장해서 쉽게 간과하는 것은 회사도 나름의 이익계산을 통해 지원자에게 입사제안을 한다는 사실이다. 회사도 지원자도 계약을 체결하는 동등한 입장이다. 그러므로, 협상을 시도하는 것은 당연한 권리이며 은혜를 모르는 건방진 시도가 아니다. 합리적인 요구를 했다는 이유만으로 입사 결정이 취소되는 일은 거의 없다. 합리적인 요구만으로 입사 제안을 취소했다면 지원자를 업신여기는 기업일 수 있으니, 차라리 입사하지 않는 편이 이롭다. 입사 제안을 거절할 때도 정중하게 거절의사를 전달해야 나중에 이직할 때 이야기해볼 여지가 생긴다.

프로그래밍 문제 접근법


면접자가 코딩문제를 통해 가늠하고자 하는 바는 지원자가 코딩을 할 수 있는지, 코딩 실력이 어느 정도 되는지를 가늠하는 것이다. 코딩 문제는 주로 한 시간 정도 안에 풀 수 있는 수준으로 제출된다. 문제를 듣자마자 정답이 떠오르는 문제보다 고민할 만한 문제가 출제된다. 누구나 풀 수 있다면 변별력이 없기 때문에 면접에 나오는 문제는 원래 어렵다. 답이 바로 보이지 않는 상황에서 문제를 어떤 식으로 해결하는지를 살펴보기 위해 내는 문제들도 있으니 너무 긴장하지 않아도 된다. 그래서인지, 면접에 나오는 문제에는 특별한 트릭이나 언어에서 자주 쓰이지 않는 기능들을 필요로 하는 것들이 많다.


문제를 더 쉽게 해결할 수 있는 다른 아이디어가 떠올라도 면접관이 낸 문제 자체를 함부로 바꾸지는 않아야 한다. 면접관이 문제를 낸 의도에 어긋날 수 있기 때문이다. 새로운 아이디어는 설명만 하도록 하자. 상황에 따른 제약 조건 내에서 주어진 일을 처리하는 능력도 매우 중요한 능력 가운데 하나다.


면접을 하러 가기 전에 자신이 사용할 언어의 사용법 및 문법을 제대로 숙지해야 한다. 사용가능하면서 정확하고 깔끔한 코드를 만들기 위해 최선을 다해야 한다.


면접관이 정말로 원하는 것은 지원자가 문제를 푸는 각 단계를 어떻게 진행하는지 평가하는 것이다. 지원자가 자신의 능력으로 문제를 풀어나가는 동안 보여주는 사고력과 문제 해결 능력이 중요하다. 면접관이 힌트를 제공하기도 한다. 이때, 힌트를 가지고 어떻게 문제를 해결해 나가는지 과정을 상세히 보여주려고 노력해야 한다. 각 단계를 차근차근히 밟아나가면서 각 단계를 해결하는 사고 과정을 정리해서 대답해야 한다. 또한, 프로그래밍에 대한 지식 전반을 보여주기 위해 문제와 연관된 다른 내용을 언급하면서, 논리적인 사고 능력을 갖추고 있으면서 컴퓨터에 대한 지식도 출중하고 의사소통에 능하다는 것을 보여줘야 한다.


문제를 받았을 때, 바로 해결방법을 생각하기 보다 문제를 완벽하기 이해하기 위해 고민해라.

문제해결을 위한 기본단계

  1. 면접관에게 질문하면서 문제를 확실히 이해한다.
  2. 암산으로 계산가능한 간단한 예시를 시도해 본다.
  3. 문제해결에 적용할 알고리즘과 자료구조를 탐색한다.
  4. 구현 방법을 정리하고 나서 면접관에게 풀이를 설명한다.
  5. 실질적인 코딩을 할 때도 각 단계를 설명한다.
  6. 필요하다면 인터넷에서 찾을 수 있는 자료를 질문한다.
  7. 코드를 완성하고 나면 바로 몇 가지 예를 시도해보고 맞는지 확인한다.
  8. 모든 오류 및 특수 상황, 특히 경계 조건을 확인한다.

문제를 풀다가 막히는 경우

  • 예시를 다시 검토해본다.
  • 다른 자료구조나 알고리즘을 시도해본다.
  • 언어에서 그리 많이 쓰이지 않는 기능 또는 고급 기능을 고려해 보자.

코드를 완성하고 끝이 아니라, 스스로 짠 코드의 성능을 분석해야 한다. 빅오분석법을 활용하여 코드의 알고리즘 성능을 추정해본다. 또한, 메모리 사용 용량도 분석해야 한다. 코드의 장점과 단점 및 특정상황에서 코드의 성능변화를 설명할 수 있다면 코드 최적화에 대한 지식이 있음을 면접관에게 보여줄 수 있다.

반응형

'Develop > 코딩인터뷰' 카테고리의 다른 글

[코딩인터뷰] 문제 4.7  (0) 2018.02.10
[코딩인터뷰] 문제 4.6  (0) 2018.02.10
[코딩인터뷰] 문제 4.5  (0) 2018.02.10
[코딩인터뷰] 문제 4.4  (0) 2018.01.22
[코딩인터뷰] 문제 4.3  (0) 2018.01.22