ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래밍 면접 이렇게 준비한다 - 1. 소통방법
    프로그래밍/방법론 2014. 6. 12. 19:10
    반응형

    1.  어떤 언어를 사용할 것인가?

      C#, 자바, C++과 같은 주류 언어를 제대로 쓸 수 있는 정도면 별 문제가 없지만, C언어를 잘 익혀두면 상황에따라서 유용하게 써먹을 수도 있다.

      C++프로그래밍을 마지막으로 건드려본 지 몇 년 정도 지났다면 적당한 C++ 레퍼런스 가이드를 하나 펼쳐서 중요한 내용들을 곱씹어보도록 하자.


    2. 소통이 핵심이다.

      면접 시에 최고의 코드를 짤 수 있어야한다. 정확하고 깔끔한 코드를 만들기 위해 최선을 다해야 한다. 그러기 위해선 많은 연습이 필요하다.

      문제를 풀어나가는 동안 보여주는 사고력과 문제 해결 능력 또한 매우 중요하다.

      이미 전에 풀어봐서 아는 문제가 나오더라도 무턱대고 바로 답을 말해버리는 일은 없어야 한다. 각 단계를 차근차근히 밟아나가면서 각 단계를 해결하는 사고 과정을 정리해서 대답해야 한다.

      논리적인 사고 능력을 갖추고 있으면서 컴퓨터에 대한 지식도 출중하고 의사소통에도 능하다는 것을 보여줘야 한다. 


    3. 문제 해결

    1) 문제를 확실히 이해한다.

      문제를 풀기 시작한 후에 무작정 코드부터 작성하는 일은 금물이다. 우선 문제를 완벽하게 이해하는 것이 중요하다. 제대로 된 알고리즘을 만들었다는 확신이 서면 그 내용을 분명하게 설명하자. 코드 작성은 가장 마지막에 할 일이다.

    2) 일단 문제를 이해하고 나면 간단한 예를 시도해본다.

      답을 바로 알 수 없는 경우에는 이런 방법이 특히 더 유용하다.

    3) 문제 풀이에 사용할 알고리즘과 자료구조에 초첨을 맞춘다.

      물론 시간도 많이 걸리고, 몇 가지 예를 더 생각해 봐야 할 수도 있다. 원래 그런게 당연하다. 이 단계에서는 면접관과의 의사소통이 중요하다. 화이트보드만 멍하니 보면서 한참 동안 말없이 있으면 면접관 입장에서는 지원자가 열심히 머리를 굴리고 있는 건지 아니면 어찌해야 할바를 몰라서 가만히 있는 건지 알아낼 길이 없다. 계속해서 면접관에게 지금 무엇을 하고 있는지 얘기하자. 

      예를 들어, "값을 배열에 저장하고 정렬을 할 수 있을지 생각해보고 있는데, 배열에 있는 원소는 값을 기준으로 빨리 찾아낼 수가 없기 때문에 별로 좋지 않을 것 같네요." 같은 식으로 얘기하면 된다. 이런식으로 답하다보면 면접관이 힌트를 줄 수 있다.

      문제를 풀다 보면 시간이 오래 걸릴 수도 있고, 그렇다 보면 정확한 풀이를 생각해내지 못한 상태에서 코딩을 바로 시작하고 싶은 유혹이 들 수도 있다. 하지만 그런 유혹을 잘 극복해야 한다. 문제에 대해서 오랫동안 생각해서 한 번에 제대로 된 코드를 짜는 사람과 무턱대고 달려들어서 코딩하면서 계속 에러만 내고 지금 뭘 하는지 파악도 안 되는 사람 가운데 어떤 사람하고 더 일하고 싶은 마음이 생길지 입장 바꿔 생각해보자. 당연히 전자 쪽이 더 나을 것이다.

    4) 알고리즘과 구현 방법을 알아내고 나면 면접관에게 풀이를 설명한다.

      이렇게 하면 지원자가 코딩을 시작하기 전에 면접관이 풀이에 대해 어느 정도 평가를 해 볼 수 있다. "안 되는 건 아닌 것 같은데, 분명 더 효율적인 풀이법이 있을 것 같네요." 같은 응답도 자주 나온다. 어느 쪽이든, 코딩으로 넘어갈지 알고리즘을 다시 살펴봐야 할지에 대해 아주 중요한 정보를 얻을 수 있다는 것은 분명하다.

    5) 코딩을 할 때도 뭘 하고 있는지 설명한다.

      "여기에서는 배열을 전부 0으로 초기화합니다." 같은 식으로 설명을 할 수 있다. 이런 식으로 설명을 해 주면 면접관 입장에서 코드를 더 쉽게 따라갈 수 있다.

     * 풀이에 대한 코드를 작성하기 전에, 그리고 작성하는 도중에도 계속해서 설명을 하자. 끊임 없이 떠들자.

    6) 필요하다면 질문을 한다.

      레퍼런스에서 찾을 수 있을 법한 내용이라면 면접관한테  질문을 해도 큰 감점 사유가 되진 않는다.

    7) 코드를 완성하고 나면 바로 몇 가지 예를 시도해보고 맞는지 확인한다.

      이렇게 하면 자기가 만든 코드가 적어도 자기가 시도해 본 예에 대해서느 ㄴ제대로 작동한다는 것을 분명하게 보여줄 수 있다.

    8) 모든 오류 및 특수 상황, 특히 경계 조건을 확인한다.

      프로그래밍을 하다 보면 오류나 특수 상황을 무시하는 경우가 종종 있다. 면접 과정에서 그런 조건들을 빼먹는다는 것을 실제 일을 할 때도 그렇게 할 가능성이 있음을 뜻한다. 오류 및 특수 상황을 제대로 커버하면 면접관에게도 좋은 인상을 남길 수 있고 문제를 올바르게 푸는 데도 도움이 된다.


    4. 문제를 풀다가 막히는 경우

      흔히 일어나는 일이며, 이것 자체도 면접의 중요한 부분이라고 할 수 있다. 면접관은 문제에 대한 답을 바로 알아낼 수 없는 경우에 지원자가 어떤 식으로 반응하는지를 살펴보고 싶어 하게 마련이다. 만약 문제를 풀다가 갑자기 막히게 됐을 때 포기하거나 좌절하는 것은 최악의 대응책이다. 계속해서 문제에 대해 관심을 갖고 문제를 풀려고 시도하는 모습을 보이자.

    1) 예를 다시 따져본다. 

      시도해 보았던 특정 예를 일반적인 경우로 확장시켜보자. 그래도 무제가 안 풀리면 특정 예를 다시 따져 본다. 특정 예에서 일반적인 예로 확장해보고, 여기에서 풀이를 도출해보자.

    2) 다른 자료 구조를 시도해 본다.

      연결 리스트, 배열, 해시 테이블, 이진 검색 트리 같은 다양한 자료 구조를 써 보자. 익숙하지 않은 자료 구조가 주어졌다면 그 자료 구조와 자신이 알고 있는 자료 구조 사이에서 비슷한 점을 찾아보자.

    3) 언어에서 그리 많이 쓰이지 않는 기능 또는 고급 기능을 고려해 보자.

      때때로 그런 기능을 활용하는 것이 문제 풀이의 핵심이 되는 경우도 있다.

     * 면접에서 다루는 코딩은 대체로 짧은 편이다. 코드가 너무 길어지면 엉뚱한 방향으로 가고 있는 건 아닐지 생각해보자.


    반응형
Designed by Tistory.