"면접 시험"질문에 관해서는 종종 FizzBuzz의 주제가 등장합니다. 도있다 코딩 호러 그것에 대해 포스트.
이제 이와 같은 사이트를 귀찮게하면 FizzBuzz를 사소한 것보다 쉽게 찾을 수있는 프로그래머의 인구 통계에있을 가능성이 적습니다.
그러나 프로그래머의 99 %가이 문제로 어려움을 겪는다는 것이 사실입니까?
정말?
이것을 뒷받침하는 증거는 무엇입니까?
일부 실제 사례는이 질문에 대답하는 데 매우 도움이됩니다.
"면접 시험"질문에 관해서는 종종 FizzBuzz의 주제가 등장합니다. 도있다 코딩 호러 그것에 대해 포스트.
이제 이와 같은 사이트를 귀찮게하면 FizzBuzz를 사소한 것보다 쉽게 찾을 수있는 프로그래머의 인구 통계에있을 가능성이 적습니다.
그러나 프로그래머의 99 %가이 문제로 어려움을 겪는다는 것이 사실입니까?
정말?
이것을 뒷받침하는 증거는 무엇입니까?
일부 실제 사례는이 질문에 대답하는 데 매우 도움이됩니다.
답변:
99 %? 아닙니다. 상당한 비율입니까? 예. 사람들을 직접 인터뷰 한 경험에서 나는 이것을 증언 할 수있다. 그것은 당신에게 무의미 해 보일지 모르지만 프로그래밍 분야에는 수년 동안 다소 위조되고 비 입장 직위에 지원 하고이 실패한 사람들이 많이 있습니다.
당신이 그것을 쉽게 해결할 수는 있지만, 당신은 그런 정신적 일을하도록 요청 받았다는 것에 대해 큰 정적을 제시합니다. 팀이된다는 것은 때때로 즐기지 않아도되는 일을해야한다는 것을 의미합니다. 우리가 함께 일하기 전에 방망이에서 벗어난 경우, 내가 요청한 일을하는 것보다 특별한 지위를 주장하는 것이 최선이라고 생각합니다.
나는 당신의 솔루션이 얼마나 우아 해야하는지 신경 쓰지 않지만 화이트 보드에서 찌르는 것을보고 그것을 통해 길을 말하는 것은 당신이 적어도 찌르기를 기꺼이 취하고 있음을 보여줍니다 . 당신이 분개하고 "코드 몽키가 아니라 문제 해결사입니다!" 그러면 못을 쓰러 뜨릴 것입니다.
나는 인터뷰 대상자들에게 시도를 시작하기를 거부했다. 단순히 거절하십시오. 아뇨 하지 않습니다. 한두 가지 더 정중 한 질문을하고 시간을 내 주셔서 감사하고 인터뷰를 마무리합니다.
나는 이것을 관리자와 개발자라고 말합니다.
직업을 신청하는 (그리고 그것을 얻지 못하는) 프로그래머의 99 %가 어려움을 겪을 수 있다고 생각합니다. 그러나 생산적으로 업무를 수행하는 프로그래머의 99 %는 아닙니다.
이것이 현대 구직 과정의 본질입니다. 신청하는 많은 사람들이 자격이 없습니다.
그 코딩 호러 게시물은 오늘날 우리가 컴퓨터 과학을 가르치는 방식에 대해서도 이야기합니다. 과거에는 (특히 MIT) 재귀와 같은 개념을 이해해야하는 Lisp와 같은 것을 배워야했습니다.
요즘 사람들은 Java가 산업에서 널리 사용되기 때문에 Java를 배우고 있으며, 초점은 심도있는 프로그래밍 사고가 아닌 구문으로 옮겨졌습니다. 나는 자바를 싫어하지 않는다. 사실, 나는 이것이 이상적인 최초의 프로그래밍 언어라고 생각합니다. 그러나 나는 강사들이 깊은 프로그래밍 원칙을 가르치는 것을 보지 못했습니다.
나는 이것을 말하기 싫어하지만
프로그래밍 질문에 대답하지 못한 주된 이유는 답변자보다는 질문자의 잘못 때문입니다.
일정한 시간에 실행되는 특정 컬렉션 검색 알고리즘을 만드는 방법에 대한 질문을받은 한 인터뷰를 분명히 기억할 수 있습니다 (컬렉션에있는 항목 수에 관계없이 동일한 조회 수). 나는 포기하기 전에 20 분 동안 울렸다가 넘어졌다. 그때 인터뷰를하는이 천재는 답을 거의 일정하게 유지했지만 여전히 일정하지 않은 것으로 설명했다. "0의 답을 줘"라고 말하고 0.1을 받아들이는 것과 같습니다.
짧은 인터뷰에서 누군가 인터뷰 할 때 다음 기준을 충족시키지 못하는 질문을하는 경우가 너무 많다는 것입니다.
진지하게 (1), 사람들에게 인터뷰에서 구두로 코드를 작성하도록 요구하는 것은 어리석은 일이라고 생각합니다.
진심으로 (2), 사람들에게 코드 작성을 요구하지 않고 인터뷰하는 것도 바보라고 생각합니다.
진지하게 (3), 당신은 그들에게 "숙제"를 주거나, 그들에게 코드 샘플을 가져 오도록 요청하거나, 그들에게 작업을 위해 랩톱과 몇 가지 질문과 조용한 사무실을 제공해야합니다. 그런 다음 그들이 일하는 동안 혼자 내버려 두십시오. 나는 일반적으로 후자의 접근 방식을 사용하여 외부 도움 (치트)을 얻는 능력을 제한하고 시간 상자를 사용할 수 있습니다.
int? result; for (int i = 0; i < int.MaxValue; i++) { T item = (i < array.Length) ? array[i] : someDummyItem; if (item == whatWereLookingFor) result = i; } return result;
FizzBuzz에서 검색하기 만하면됩니다. 그것에 블로그 포스트의 거대한 물결이있었습니다. 일반적으로 블로거는 "[일부 언어로 작성하라고 사람들에게 말했고 다음과 같은 실수가 있습니다."라고 말하면서 몇 가지 함정을 열거했습니다. 재미는 사람들이 "[다른 언어]에서는 사소한 것입니다."라고 말하는 주석에서 시작됩니다. 다음 주석은 그 첫 번째 버그에서 항상 버그를 찾습니다. 아주 좋은 개발자들이 어떤 언어로든 처음에는 제대로 이해하지 못하는 것 같습니다. 일부 오류 :
제가 채용 할 때, 사람들에게 저를 위해 화이트 보드에 코드를 작성해달라고 요청합니다. 복잡한 곳 근처 (아무것도 복잡하지 않다고 생각합니다) 근처에는 아무 것도없고 많은 후보자들이 완전히 실패했습니다. 나는 vb 스타일의 If, Then, End If를 작성하지만 중괄호도 (안전하다고 생각할 수 있음) 작성하거나 C #을 작성하고 (먼저 C #?를 요구하지만) 어디서나 세미콜론이 하나도없는 것을 의미합니다. 논리 오류로 시작하지 마십시오!
나는 당신이 언급 한 Coding Horror 기사를 읽었으며, 제 의견은 Jeff가 옳다는 것입니다 ...하지만 그가 마지막으로 인터뷰 한 시간은 언제입니까?
인터뷰를 할 때는 대개 스트레스를 많이받으며, 이론적 인 질문에 답해야합니다 (지식, 구글, 선명하지 않음, 스트레스로 인해 어려움을 겪는 기억 만). 테스트에서도 마찬가지입니다. 스트레스는 도움이되지 않습니다.
누군가가 어떤 직책에 적합한 지 알 수있는 유일한 방법은 잠시 동안 그와 함께 일하는 것입니다 ... 100 명 중 마지막 10 명 (어쩌면 더 많음)을 고용하십시오. 고용하다???
고용주는 모듈러스에 대해 알고있는 코드 원숭이가 아니라 문제 해결사를 고용해야합니다.
"한동안 모든 지원자"를 테스트 할 수 없으므로 인터뷰를해야합니다. 그렇기 때문에 질문에 문제를 집중시키고 (문제 해결) 과거 참조 확인을 수행합니다.
제 생각에는 FizzBuzz는 개발자가 성장을 유지하기를 원하는 회사에게는 위험합니다.
저는 최근에 50 명 이상의 프로그래머와 인터뷰를하면서 주로 PHP와 함께 일할 고위직을 맡았습니다.
스크리닝 시험에서 피즈 버즈 문제를 일으켰습니다. 대부분 자신을 즐겁게하고 10 개의 좋은 질문을 원했고 9 개만 있었기 때문입니다. 저의 의도는 당시 사람들에게 인터뷰 질문에도 재미있게 놀 수 있다는 것을 보여주었습니다.
지원자 중 80 %가 문제를 해결했지만 계수 연산자를 사용하지 않았습니다.
지원자의 15 %가 문제를 해결할 수 없습니다.
출원인의 5 %가 모듈러스 연산자를 사용하여 문제를 해결했습니다.
샘플링이 상당히 제한되어 있지만 (한 국가의 지원자 50 명) 다음과 같이 말할 수 있습니다.
그 중 95 %가 CS 커리큘럼에서 BS 이상을 지니고 있습니다 (여기의 대학들은 CS 사운드를 더욱 화려하게 만들어 경쟁합니다).
나는 정말로 놀랐다. 글쎄, .. 두려워하지만 놀랐습니다. 나는 문제가 너무 대중화 되었기 때문에 결과를 재현하는 것에 가까이 접근하지 않았다고 생각했다. 이것은 저의 지원자 중 5 %가 수퍼 프로그래머가 아닐 수도 있지만 적어도 프로그래밍 관련 블로그를 읽는다는 것을 보여줍니다.
x - (x/y)*y
?
마지막 채용 과정에서 나는 0을 가진 3 명의 건설 노동자를 가졌습니다. 저는 제로를 반복합니다. 프로그래밍 교육이나 경험은 소프트웨어 개발자 직책에 적용됩니다. * 그래서 그것은 배럴의 바닥입니다. 기술의 정규 분포를 가정하면 평균 기술 수준이 얼마나 낮을 지, 심지어 '평균 이상'(응모자 중)이 여전히 상대적으로 나빠지는 것을 알 수 있습니다.
이제 프로그래밍 능력이있는 것으로 보이는 지원자 만 fizzbuzzing하고 있다면 다음과 같은 것을 알 수 있습니다.
또한 내가 본 일부 '피즈 버즈'질문은 도메인별로 다릅니다. 언어 / 프레임 워크 x를 사용하여 몇 년 동안 (그래서 z는 x를 사용한 경험) 점진적으로 개발할 수 있으며 특정 부분 (예 : UI 구성 요소 개발에 대해 잘 모르는 라이브러리 개발자)을 경험하지 않아도됩니다.
마찬가지로, 많은 개발자들이 요즘 유지 관리 개발을 수행하므로 일부 영역에서는 아키텍처 / 디자인 기술이 약할 수 있습니다.
99 %가 정확한지 확실하지 않지만 IME는 여전히 꽤 높습니다. 적어도 80 % 범위에 있습니다.
* 아니요, 우리는 이러한 응용 프로그램에 전화를 걸거나 다시 보지도 않았습니다.
네 진짜로 요. 아마도 99 %는 아니지만 여전히 꽤 높습니다. 나는 인턴쉽과 풀 타임 채용을 위해 컴퓨터 과학 학생들을 인터뷰했습니다. 한 대학에서 약 25 명의 학생들을 인터뷰했습니다. 우리는 학생들이 이야기했기 때문에 같은 질문을하지 말라고 들었습니다. 첫 번째 질문에 대답 할 수있는 25 명 중 3 명 또는 4 명의 학생 만 구할 수 있기 때문에 나는 그것이 중요하지 않다는 것을 빨리 알게되었습니다. "strcmp 쓰기"
두 문자열을 비교하는 함수를 작성하도록 요청했습니다. 함수를 사용하여 사전에 대한 단어를 정렬 할 수 있습니다. 함수를 작성하는 방법은 물론 두 단어를 비교하는 방법을 이해하지 못한 학생들의 수에 놀랄 것입니다. 이 학생들 중 일부는 CSc에서 A를 모두 받았다고 주장했습니다.
문제는 프로그래밍이 매우 어렵다는 것입니다. 많은 사람들이 프로그래밍 방법을 알고 있다고 생각하지만 그렇지 않습니다.
몇 가지 생각 :
그들의 프로그램에 버그가 있지만 분명히 올바른 아이디어를 가지고 있다면 누군가를 상대하지 않을 것입니다. 디버깅은 프로그래밍의 일부입니다.
많은 사람들이 자신이 할 수없는 일을 신청하는 것이 슬픈 일이라고 생각합니다. 경제에 문제가있는 것 같습니다.
사람들에게 나쁜 질문을하는 것은 정말 쉽습니다. 여기서 "올바른"대답은 면접관이 대답하는 것입니다.
이 테스트는 내가 고용 할 수있는 프로그래머에 대해 알고 싶은 몇 가지 사항을 아주 잘 다룹니다.
마지막 요점을 자세히 설명하기 위해, 피즈 버즈에 대한 수많은 솔루션이 있습니다. 가독성을 원하십니까? 속도? 짧음? 프로그램 작성을 빨리 끝내려고합니까? 프로그래머가이 간단한 문제를 어떻게 공격하는지는 매우 분명합니다. 프로그래머가 솔루션을 선택하여 끝까지 볼 수 없다면이 사람이 실제 작업을 수행하는 방법에 대해 무엇을 알려줍니까?
FizzBuzz가 피하는 데 도움이되기를 희망하는 두 가지 유형의 사람들이 있습니다.
어느 경우이든, 나는 완벽한 구현에 대해 정말로 신경 쓰지 않습니다. 개발자 작업을 신청하는 사람들과 함께해야 할 테스트는 그들이 전혀 프로그래밍 할 수 있다는 것입니다.
즉, 나는 현재 몇 가지 이유로 특정 테스트를 방해하지 않을 것입니다. 처음에는 매우 잘 알려져 있으며 위의 그룹 중 하나가 빨리 시도해 볼 수 있습니다. 둘째, 나는 프로그래머가 아닌 사람들을 데려 오기 전에 스티브 Yegge의 전화 화면 질문 을 사용하여 프로그래머가 아닌 사람들을 선별 하는 것을 선호합니다 . 직업을 진지하게 받아들이고 인터뷰를 보증하는 개발자의 상위 1 %. 마찬가지로 누군가가 여기 또는 너무 좋은 담당자를 가지고 있다면 나는 그들을 인터뷰하는 경향이 있습니다.
개발자가 작업을 함께 복사하여 붙여넣고 코드를 작성하지 않으려 고 노력하는 "9에서 열까지"를 볼 때까지 개발자가 FizzBuzz를 코딩 할 수 없다고 믿기가 어렵습니다. 수석 개발자 중 한 명이 3 년 동안 "경험"을 갖고 C # 개발자에게 사전을 사용하는 방법을 가르치는 것을 들었을 때 나는 그것을 믿을 수 없었습니다. 인터페이스? 디자인 패턴? 스타우트? 야니? 내 리드는 YAGNI에 대해 들어 본 적이 없습니다! 이 사람들이 모르는 것이 놀랍습니다.
나는 지금 그것을 믿는다. 또한 너무 많은 개발자가 충분하다고 생각합니다.
왜 그렇게 인기있는 질문인지에 대한 답은 한 가지 이상의 답변 방법이 있기 때문이며, 응시자가 선택한 방법에 따라 코딩 방법에 대한 통찰력을 줄 수 있습니다. Stack Overflow에 10K 담당자가있는 경우 여기에서 훌륭한 예를 볼 수 있습니다 .
99 % 통계에 대해서는 해당 숫자의 출처를 확인하십시오. 아마 편향되어있을 것입니다. 첫 번째 직업을 위해 인터뷰하는 초급 프로그래머를 기반으로한다면, 특히 대다수의 후보자가 대학에서 곧 나올 경우 가능하다는 것을 알 수 있습니다. 나는 실제로 100 문 조건을 그 문제에 대한 해결책으로 쓸 것이라고 생각할 수 있습니다.
프로그래머의 99 %가 프로그래밍 할 수 없거나 간단한 코딩 테스트를 과장하여 해결할 수 없다는 진술을 발견했습니다. FizzBuzz 테스트의 경우, 이전에이 문제가 발생하여 모듈로 연산자로 쉽게 해결할 수 있거나 이전에 발생하지 않았으며 어려움을 겪을 수 있습니다. 면접관에게 프로그래밍 기술에 대해 아무 것도 알려주지 않습니다.
인터뷰에서 많은 프로그래머들에게 문제가 된 것은 분명히 기술 면접 방법의 본질에 있다고 생각합니다. 면접관은 지원자가 언어 구조, 세부 사항 및 데이터 구조, 하드웨어 아키텍처, 디자인 패턴 등의 계산 복잡성을 암기하고 즉시 재현 할 수 있기를 기대합니다. 컴퓨터 과학 / 소프트웨어 공학 분야는 광대합니다. 모든 것을 암기하는 것은 불가능하고 무의미합니다.
실제 세계에서 핵심은 사용자에게 할당 된 프로그래밍 / 디자인 문제를 이해하고 문제 해결 방법 (IDE, 맨 페이지, 서적, Google 등)을 찾을 수있는 위치를 아는 것입니다. 그러나 이것은 면접관이 테스트하지 않은 것입니다.
나는 여전히 비교적 주니어 프로그래머입니다 (약 2 년 동안 돈을 위해 코딩하고 약 2 년 전에 부수적으로 전문적인 능력으로 코딩했습니다). 그래서 충분한 양의 소금을 사용하십시오.
대기업 프로젝트의 코더에 대한 첫 번째 화면을 사용한 경험이 있습니다 (프로젝트가 끝났다는 것을 알고 있지만 어쨌든 지불하고 싶었습니다). 회사에서 채용을하는 유일한 프로그래머로서 이력서를 검토하고 지원자를 심사하는 임무를 받았습니다.
이것은 정부 프로젝트를위한 것이므로 아마도 가장 재능있는 지원자를 모으지 않았을 수도 있지만 실제로 코드가 표시된 github 계정을 가진 사람이나 포트폴리오를 가진 사람으로부터 하나의 응용 프로그램을받지 못했기 때문에 fizzbuzz ( 문자 그대로 정확한 문제)) 프로그램을 작성할 수있는 것처럼 보이는 사람에게 첫 번째 단계입니다.
나는 그것이 어리 석다는 것을 알았지 만 작동 코드를보고 싶었다는 의사 사과로 머리말을 썼다.
결과 : 나는 실제로 정확한 하나의 응답을 얻지 못했습니다. 인터넷의 답변 양을 고려하면 눈에 띄는 것입니다. 아무도 표절을 귀찮게하지 않았습니다. 우리는 이전에 실패했던 프로젝트의 이전 반복 작업을 한 사람들을 고용해야했습니다.
정부 소프트웨어 / 계약이 어떻게 조여 졌는가에 대한 운동의 초기 충격과 실망 후, 나는 내 자신의 기술에 대해 훨씬 더 나은 느낌을 얻었습니까?
편집 : 정확하지 않다는 것은 하나 이상의 오류 (즉, 99가 아닌 100을 통해 요청) 또는 쉬운 고침 인 다른 무고한 버그를 의미하지 않습니다. 나는 작동하지 않거나, 실행 / 컴파일 / 등을하지 않거나 문제가 읽히지 않고 이해되지 않았 음을 분명히 보여 주었으며, 중요한 부분은 응용 프로그램을 철회했으며 다른 코드를 보내지 않았습니다.