6 천재가 아닌 실천으로 해결된 기술 면접 문제

이 글은 요세프 파체코가 쓴 Triplebyte blog에 처음 등장했다.Joseph는 소프트웨어 엔지니어로 백엔드에서 저급 시스템으로 이동하는 등 각 방면에 대해 1400여 차례의 기술 인터뷰를 진행했다.그는 네가 생각할 수 있는 모든 괴벽, 트림, 그리고 유일무이한 힘을 보았고, 그가 배운 엔지니어의 성장을 돕는 것을 나누고 싶었다.
기술 면접은 단지 당신의 지식과 경험에 관한 것이 아니다.그들은 진정한 차선의 상황에서 당신의 특정 기술을 보여 줍니다.

Related: The best, worst, and most interesting moments from my marathon month of technical interviews


기술 면접 자체가 면접을 통과하는 데 필요한 기능과 관련이 있다는 얘기다.응시자들은 준비를 할 때 종종 구체적인 지식 격차에 관심을 가지지만, 어떤 사람들은 자신의 지식에 대해 자신감을 가지면 전혀 준비를 하지 않는다.그들이 깨닫지 못한 것은 지원자들이 실천이 부족해서 실패하는 빈도가 그들이 필요로 하는 공사 기능이 부족해서 실패하는 빈도만큼 높다는 것이다.다음은 기술면접의 6가지 특징으로 대부분(전부가 아니라면)은 실천을 통해 해결된다. 경험과 지식을 제외한다.

1. 인공시간 스트레스


면접에서 느끼는 시간적 스트레스는 업무 중에 느끼는 시간적 스트레스와 판이하게 다르다.물론 당신은 긴장된 마지막 기한이나 하루 안에 많은 화재를 진압하는 것에 익숙해졌을 것이다.그러나 꼬박 30분이나 45분 안에 문제를 해결해 달라는 경우는 드물다.즉, 문제는 계획된 시간이 시작되기 전에 세부 사항에 대해 아는 것이 매우 적거나 아무것도 없었다는 것이다.그리고 타이머가 시간을 재기 시작하면 이 새로운 문제를 설명하는 파일을 받을 수 있습니다.이 점에서 모든 영향을 신속하게 소화하고 시간이 끝날 때 갑자기 멈추기 전에 해결해야 한다.이것은 내가 현실 세계에서 했던 모든 일과 다르다. 나는 이것이 우리 대다수 사람들에게 똑같다고 생각한다.
만약 네가 경험이 없는 상황에서 이런 상황에 빠진다면, 너는 질식할 수도 있다.이 과정은 문제 자체가 당신의 운전실에 있어도 불안하고 방향을 잃게 할 것이다.그러나 이런 상황에 반복적으로 노출되면 어떤 관건적인 습관이 뿌리 깊게 박히기 시작한다.결국 당신은 타이머가 시작되자마자 신속하게 행동을 취하고 문제를 효과적으로 해결할 수 있는 전략을 이용하며 제한된 시간 범위에 적응하는 간편하고 빠른 방식을 취하는 것을 발견하게 될 것이다.면접에서 처음 해보고 싶은 일이 아니라 준비를 하는 것은 반복적인 접촉의 기능일 뿐이다.

2. 인위적인 문제


이와 관련된 것은 기술 면접에서 당신이 해결해야 할 문제는 왕왕 당신이 업무 중에 해결해야 할 문제와 크게 다르다.이 문제들을 발명하는 유일한 목적은 일부 회사들이 어느 시점에 어떤 이유로 공교롭게 중시하는 기술을 시험하는 것이다.따라서 문제의 전제는 인위적인 디자인의 맛이 있고 수요는 임의로 보일 수 있으며 인위적인 시간 제약에 적응하기 위해 범위는 확정하기 어렵다.
예를 들어 이렇게 기능이 적은 단말기에 워드프로세서를 만들어야 한다면 최종 결과는 그것을 사용하려는 모든 사람에게 완전히 쓸모가 없다고 상상해 보세요.마찬가지로 아무도 원하지 않는 너무 간단한 게임을 실현하는 것을 상상해 보자.단지 이렇게 무의미한 문제는 때때로 우리를 순환에 빠뜨릴 수 있지만, 진정으로 의미 있는 현실 세계의 문제는 그렇지 않다.

이와 유사하게 당신은 학술성과 추상성이 매우 강한 문제에 자주 부딪힐 수 있다. 설령 그것이 기술적으로 실제적으로 응용된다 하더라도 사람들로 하여금 가식적이라고 느끼게 할 것이다.Here's an example Gayle Laakmann McDowell에서 가장 인기 있는 기술 면접 준비 자료 중 하나Cracking the Coding Interview:

Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures?


지금 이것은 아마도 일부 사람들이 현실 세계에서 하고 싶은 일일 것이다.문제는 그들이 문제를 제기할 때 아무도 이 상하문을 언급하지 않기 때문에 당신은 즉시 추상에 들어가 계속 전진해야 한다는 것이다.적응하는 데 시간이 좀 걸릴 거예요.
봐라, 현실 세계에서 문제는 의미가 있다.이러한 문제를 해결하는 것은 실제 업무 문제를 해결하고 실제 수요를 가진 실제 사용자의 환경에서 발생하기 위해서이다.그것들의 범위는 일관된 가치 창조의 큰 그림에 의미 있게 박혀 있다.이 모든 것이 그들에게 면접 문제에 부족한 생활을 주었다.
너는 아마도 진실한 문제를 해결하는 무당일 것이다. 그러나 면접식 문제에서는 조금도 소홀히 하지 않는다.나는 내가 처음으로 면접을 본 것을 기억한다.나의 뇌는 몇 분 동안 항의한 후에야 나는 왜 누군가가 나에게 이런 문제를 해결하라고 요구하는지 알게 되었다.그러나 그때가 되자 나는 이 문제를 완성할 기회가 급격히 떨어졌다.이런 상황을 피하는 유일한 방법은 자신을 충분한 문제에 노출시켜 제2의 천성으로 만드는 것이다.그들은 매우 구체적인 풍격과 구조를 가지고 있다. 일단 당신이 이해하면 통상적으로 인위적인 상황에서 제기된 문제를 신속하게 완성하는 기초가 될 것이다.

3. 인코딩 환경이 어색하다


당신은 모바일 기기에서 전자메일을 보냈다가 낙담하여 포기하고 다시 노트북에서 받았습니까?이론적으로, 영어 작가로서, 네가 타자를 칠 수 있다면, 너는 마땅히 똑같이 자신을 훌륭하게 표현할 수 있어야 한다. 그렇지?틀렸어만약 당신이 전체 사이즈의 키보드에서 모든 긴 형식의 교류를 하는 것에 익숙하다면, 당신의 전체 직업 생활은 습관적인 근육 기억으로 마찰이 없는 상황에서 사상이 흐르도록 허용한다.
분명히 같은 원칙도 코드에 적용된다.만약 특정한 환경에 익숙하다면, 다른 환경에서 코드를 작성하기가 매우 어렵다.그러나 일부 면접은 서로 다른 설비와 IDE를 필요로 할 뿐만 아니라, 엔지니어가 매번 코드를 작성하지 않는 방식으로 코드를 작성하도록 한다. 화이트보드에 표시를 하는 것이다.마찬가지로, 당신이 인코딩하고 있는 내용을 파악했을 수도 있지만, 새로운 환경을 체험해 본 적이 없다면, 마찰을 겪게 될 것이다. 이것은 당신을 게임에서 완전히 퇴출시킬 수도 있다.면접을 보기 전에 새로운 환경을 알아야 한다. 이것 역시 연습 문제일 뿐이다.

4. 새로운 언어로 생각하기


네가 가장 자주 사용하는 프로그래밍 언어는 반드시 네가 면접에서 사용하는 언어가 아니다.어떤 면접은 후보자에게 유한한 선택을 제공하거나 아예 선택을 하지 않는다.나는 심지어 면접에서 입사 지원자들이 업무 중에 자주 사용하는 언어가 아니라 다양한 언어를 할 수 있는지 확인하기 위해 한 가지 언어를 사용하도록 요구하는 것을 본 적이 있다.설령 네가 어떤 언어를 선택할 수 있다 하더라도, C++로 프로그래밍을 자주 하는 많은 엔지니어들은 더욱 유연하고 표현력 있는 언어(예를 들어Python)로 인터뷰를 진행할 것이다.
public void load_data() throws IOException {
    let url = URL(string: "...");
    File file = new File("...")
    std::*cout* << "This code is an abomination." << std::endl'
    ...
}
만약 당신이 현재 매일 사용하는 언어를 제외한 다른 언어를 사용할 기회가 있다면, 면접 전에 이 언어를 대량으로 연습해야 한다.네가 계속 사용하는 언어를 좋아하든지 말든.나는 몇몇 엔지니어들을 본 적이 있다. 그들이 지난번에 Python을 사용한 것은 단지 몇 달 전이었다. 그것을 그들의 현재 언어와 혼동하여 어떻게 매우 기본적인 일을 하는지 잊어버렸다.만약 당신이 대량의 연습을 통해 면접 전에 사용하는 언어의 사고방식에 들어가지 않는다면, 당신은 심각한 문제에 직면하게 될 것이다.

5. 기술 개념 표현


코드에서 기술 지식을 응용하는 것은 명확하게 표현할 수 있는 것과 다르다.비록 우리는 언어를 사용하여 새로운 기술 개념을 배우지만, 그것들은 각양각색의 방식을 가지고 있으며, 그것들은 최종적으로 업무 이해에 융합되어 유용한 정도에 이를 것이다.따라서 어떤 화제나 다른 화제에서 합법적인 전문가인 후보자는 면접에서 혀가 굳어지는 것을 발견할 수 있다(전혀 긴장하지 않는다).이것은 그들이 한 주제나 다른 주제를 전면적으로 해석하기 위해 문자를 찾지 못했기 때문이다.따라서 유한한 시간과 판단의 눈높이에서 그들은 기술 어휘를 강요적으로 남용하고 개념을 난잡하게 나타내며 실제 상황보다 지식이 부족해 보인다.
해결 방법은 네가 말을 연습할 수 있는 또 다른 엔지니어를 찾는 것이다.완전하고 일관된 서술로 기술 개념을 해석해 보자.그리고 그들이 피드백을 해서 이것이 의미가 있는지, 그리고 당신이 모든 기초를 포괄했는지 설명하도록 허락한다.

6. 관중을 위한 공연


아마도 기술 면접에서 가장 짜증나는 특징 중 하나는 코드를 생각하고 작성하며 질문에 대답하는 것이다. 한 명 혹은 여러 명이 당신의 일거수일투족을 자세히 검사하도록 하는 것이다.가장 좋은 경우 주의력을 분산시킬 수도 있고, 최악의 경우 강한 초조감을 불러일으킬 수도 있다.면접 연습을 거의 하지 않는 지원자들은 이 점을 경기를 포기하게 하는 가장 큰 요인 중 하나로 삼는다.지금은 이런 난감함에서 완전히 벗어나기 어려울 수도 있지만 연습은 확실히 영향을 줄일 수 있다. 적어도 미묘한 수준이다.너는 초조함을 느낄 수도 있지만, 적어도 너는 이미 익숙해졌다.너는 약간의 걱정을 할 수 있지만, 적어도 너는 처음으로 그런 걱정을 느낀 적이 없다.우리가 하는 일이 많을수록, 그것은 불쾌하더라도 기대와 정상으로 여겨진다.따라서 가능한 한 많이 시도해 보자. 동료와 면접 환경을 재창조하든지, 불필요할 때 진정한 면접을 하든지, 이 요소가 결과에 미치는 불리한 영향을 천천히 없앨 것이다.
Triplebyte는 엔지니어가 그들의 기술 기술을 평가하고 전시하며 그들에게 대량의 기회를 제공하도록 도와준다.시작할 수 있습니다here.

좋은 웹페이지 즐겨찾기