좋은 인터뷰 프로그래밍 프로젝트 [폐쇄]


26

잠재적 인 직원들에게 프로그래밍 능력을 평가할 수있는 소규모 프로그래밍 프로젝트를 찾고 있습니다. 이들은 곧바로 대학 밖에서 프로그래머가 될 것입니다. 몇 시간이 걸리는 프로젝트를 찾고 있는데, 그들은 인터뷰 후 답변을 이메일로 보냅니다.

한 가지 예는이 텍스트 단락을 취하여 알파벳 순으로 구성된 고유 단어 목록을 반환하는 것입니다. 각 단어 후에 단어가 몇 번이나 나타 났는지, 그리고 그 단어가 어떤 문장에 등장했는지 말해주십시오.

좋은 제안이 있습니까?


ACM 프로그래밍 콘테스트 질문. 여기 에서 해당 질문의 아카이브를 찾을 수 있습니다 .
whatsisname

1
이 프로그래밍 퍼즐 사이트가 흥미 롭습니까? programmers.stackexchange.com/questions/756/programming-puzzles/…
grokus

답변:


43

나는 오랫동안 단기간에 할 수있는 일이 그 사람에 대해 유용한 것을 말해 줄 수 없다고 결론을 내 렸습니다. 그러나 모든 좋은 후보자는 이미 작성한 개인적인 프로젝트를 가지고 있습니다. 그래서 저는 특정 과제를 "당신이 자랑스럽게 생각하고 자신의 이름을 찍을 수있는 코드를 제공합니다"로 대체했습니다.

그들의 프로젝트 선택 은 한 시간 이상의 작업을 말해줍니다. 그리고 더 많은 것을 배우기 위해 한 시간을 보낼 수 있습니다.


4
회사에서 인터뷰를하고 상당히 간단한 (15-20 줄) 기능을 받았으며 "이 기능은 무엇입니까?"라는 질문을받은 기억이 있습니다. 나는 그들에게 "누구도 잘못 알고 있습니까?"라고 물었습니다. 그들이 인터뷰 한 대다수의 사람들이 대답 할 수 없다고 들었습니다. 어쩌면 그것은 빠른 대안 일 것입니다 (코드를 작성할 수없는 코드를 읽을 수있는 사람은 모르지만 어쩌면 나는 잘못된 사람들을 만난 적이 없을 것입니다).
TMN

4
@ TMN-아, 우리도 약간합니다. 하지만 코드를 읽고 쓸 수 없습니다 사람들을 만난 .
pdr

@TMN 스스로 가르쳤 기 때문에 코드 를 읽는 것보다 코드 를 읽는 것이 훨씬 더 나은 시점 까지 코드를 읽는 데 많은 시간을 소비 했습니다. 그것은 가능하고 일어날 수 있습니다, 그것은 쓰기 능력을 키우는 데 시간과 연습이 필요합니다.
Jimmy Hoffa

27

나는이 정신 나간 쓰레기에 너무 지쳤다. 나는 그들을 떨어져 찢어, 코드 샘플에 대해 나에게 물었다 장소에서하고, 다음에서 예제 코드를 설명하라고 요청했습니다 자신 이 밖으로 금이 2 년짜리가 쓴 것처럼 보인다고 시스템. 모호한 정렬 알고리즘, 네트워크 서비스, GUI, 데이터 구조 (항상 트리 또는 링크 된 목록)를 구현하라는 요청을 받았습니다. 면접관이 생각하는 것에 대한 성가신 질문의 모든 맛은 프로그래밍의 가장 중요한 부분입니다.

결국 그것은 거의 쓸모가 없습니다. 직원을 평가하는 가장 좋은 방법은 30 일 동안 직원을 고용하고 직원이 업무를 얼마나 잘 수행하는지 확인하는 것입니다. 테스트 개발을 원할 때마다 시간을 보내십시오. 그리고 누군가가 매일 어떻게 작동하는지에 대해서는 알려주지 않습니다.


8
설명 된 bigtang과 같은 간단한 알고리즘을 코딩하는 것은 최소한 "마음의 게임"이 아닙니다. 이와 같은 일을 할 수있는 것은 인터뷰를하기위한 전제 조건이되어야합니다 (내 회사에도 있습니다). 그것은이다 매우 다른 종이에 좋아 보인다 후보를 선별하는 데 유용합니다. 내가하고 싶은 마지막 일은 문자열이 회문인지를 알려주는 함수를 작성할 수없는 사람을 인터뷰하는 데 시간을 보내는 것입니다. bigtang의 시험을 할 수없는 최고의 학교에서 온 CS 박사의 수에 놀랄 것입니다. 요컨대, 이와 같은 시험을 완료 할 수 있어야하지만 충분하지는 않습니다.
Jer

@Jer +1 마지막으로 프로그래머와 인터뷰를했을 때 8 명 중 6 명은 가장 기본적인 작업 (Google 및 SO 포함)을 완료 할 수 없었습니다. 30 일은 물론이고 5 분 동안 실제 코드베이스 근처에 두는 방법은 없습니다.
Julia Hayward

2
@JuliaHayward : 누구나 웹 / 문서에 액세스하여 프로젝트를 완료 할 수있을 것으로 기대합니다. 다양한 종류의 기술을 기억하거나 매일의 업무 수행에 중요한 것을 잘못 가정하여 누군가가 인터넷에 액세스 하지 않고도 유행어를 던지고 분류 알고리즘을 모호하게 할 때 문제가 발생 합니다.
Satanicpuppy

12

누군가가 자신의 시간에 실용적인 프로젝트를 수행 할 수 있다고해서 반드시 프로젝트를 수행하는 것이 반드시 그런 것은 아닙니다.

모든 사람은 인터뷰를 위해 일찍 도착합니다 (적어도 그래야합니다). 우리는 그들을 볼 준비가 될 때까지 작업 할 수있는 '기다리는 동안'시트를 가지고 있습니다. 여기에는 주로 우리가 사용하는 언어로 지원자 지식을 테스트하는 8 가지 질문이 있습니다.

우리는 모든 사람이 컴퓨터 앞에서 문제를 해결할 수 있기 때문에 정답을 찾지 않습니다. 우리는 프로세스를 찾고 있습니다. 그들은 심지어 질문을 시도하고, 어떻게 답변을 얻습니까?

우리가 면접에 들어 오면 우리는 그들과 함께 인터뷰를하고 그들이 가질 수있는 질문에 대답 할 수 있습니다. 또한 그들이 어떻게 답을 얻었는지 물어볼 수 있습니다.

이전 연구와 결합하여 후보자를 걸러내는 가장 좋은 방법입니다.

2016/06/15 업데이트

우리는 개발자를 고용하는 방식에서 프로세스를 크게 변경했습니다.

1 단계 : 7 개의 질문을하는 15 분 전화 인터뷰. 처음 2 개는 "가장 재미난 것은 무엇입니까?"입니다. (프로그래밍 관련 필요는 없음) 및 "자유로운 시간에 재미있게 코딩하는 것은 무엇입니까?".

2 단계 : 자신의 시간에 완료하는 미니 프로젝트. 그런 다음 그들과 화면 공유를하고 그들이 만든 것을 보여줍니다. 화면 공유 중에도 프로젝트를 두 번 변경 한 다음 프로젝트를 통해 작업하고 작동하게하는 것을 볼 수 있습니다.

3 단계 : 직접 인터뷰.

이 과정을 통해 문화 적응을 바로 파악할 수 있습니다 (1 단계). 그들이 일을하고 실제로 대화를 나눌 수 있다면 (2 단계). 마지막으로, 값이 우리가 찾고있는 것과 일치하는지 확인하십시오 (3 단계).


1
이것은 일종의 훌륭합니다. 나는 그것을 좋아한다!
davidhaskins

3
비록 많은 인터뷰에서 사소한 것으로 바뀌었지만. 이 특정 sysntax에 얽매이지 않고 큰 이해를 얻지 않도록주의하십시오. 특히 그들이 약간의 재능이나 관심을 가지고 있다고 주장되는 경우. 결과는 내가 그들을 위해 일하고 싶지 않았고 그것이 상호적임을 확신했습니다.
John Nicholas

"누군가가 자신의 시간에 실용적인 프로젝트를하도록 허용한다고해서 반드시 그 일을하는 사람이라는 것을 의미하지는 않습니다."-사실, 나는 아직 인터뷰에 참여하고 그들이 작성한 코드에 대해 질문을받을만큼 용감한 사람을 만나지 않았습니다. 쓰지 않았다. 이런 일이 발생하면 인터뷰와 보호 관찰을 거치지 않을 것이지만 나는 나의 접근 방식을 재고 할 수도 있습니다.
pdr

@남자. 동의합니다. "아, 쉼표를 잊어 버렸습니다". 내가 언급했듯이 그것은 접근 방식과 언어를 이해하는지에 대한 이해를 얻는 것입니다. 그들이 그들의 것을 알면 분명히 더 큰 것들로 넘어갑니다.
RDL

2
@RDL, 대부분의 인터뷰 과정은 우리가 찾고있는 개발자에게는 재미 있고 나머지는 지옥에 가깝도록 설계되었습니다. 당신은 어떻게 좋은 개발자가 도전에 저항 할 수 없는지 알고 있습니다.
pdr

4

Jon Jagger 의 환상적인 Cyber-Dojo 를 확인하십시오 .

이 일을 위해 설계된 웹 기반 통합 환경의 의도적 연습테스트 기반 개발 및 팀 역학에 대한 학습. 작은 프로그래밍 작업 (카타)이 많으며 Python 및 Ruby에서 Java 및 C ++에 이르기까지 다양한 언어를 지원합니다.

생산성을 위해 설계된 IDE와 달리 코드 완성, 구문 강조 또는 자동 리팩토링이 없으므로 인터뷰 대상자가 이러한 작업없이 수행 할 수있는 작업을 확인할 수 있습니다.

가장 좋은 점은 카타를 한 후에 돌아가서 각 카타의 빨강 / 녹색 진행 상황을 볼 수 있습니다 (또는 TDD * 8 '을하지 않으면 아닐 수도 있습니다). 모든 컴파일 / 테스트는 테스트 결과와 함께 변경 사항을 git 저장소에 커밋합니다.

인터뷰 코딩 테스트에 이것을 사용하면 문제를 해결할 수있는 후보자뿐만 아니라 외부 요인에 의해 제한되지 않을 때 문제 해결에 대한 접근 방식 프로세스 에 대해 많은 것을 알 수 있다고 생각 합니다. 응시자가 원하는 시간.

자신의 CyberDojo 서버를 원한다면 전체 프로젝트 를 github에서 찾을 수 있으며 거기에 연결된 턴키 Linux 어플라이언스 가상 머신도 있습니다. 즉, 이미 VMware 플레이어 또는 VirtualBox가 설치되어 있다고 가정하면 몇 분 동안 기기를 다운로드하십시오!


3

나는 이것을 한 회사와 만 인터뷰했습니다. 그들은 6 개 또는 7 개의 문제에 대한 질문지를 주었다. 지침은 각 문제를 해결하는 방법을 만드는 것입니다.

작업의 한 부분은 코드를 재사용 할 수 있다는 것을 인식하는 것이 었습니다. 문제는 다른 솔루션의 코드를 사용할 수 있습니다. 또한 순차적이지 않았습니다. 예를 들어, 질문 3은 질문 5에 사용 된 방법을 사용하여 작성할 수 있습니다.

나는 그런 것을 시도하는 것이 좋습니다.

질문은? Project Euler 사이트 의 시작 질문 중 일부 는 좋습니다.

그들이 어떻게 프로젝트를 구성 할 수 있는지 알고 싶다면 간단한 게임을 시도해 볼 수도 있습니다.

또는 무언가를 제안하지 않으려면 최종 프로젝트에서 코드로 보내달라고 요청하십시오.


3

사람들에게 프로젝트를 완료하도록 요청하려면 특정 기술 세트를 염두에두고 평가하고 해당 기술을 테스트 할 프로젝트를 설계해야합니다.

한 가지 예는이 텍스트 단락을 취하여 알파벳 순으로 구성된 고유 단어 목록을 반환하는 것입니다. 각 단어 후에 단어가 몇 번이나 나타 났는지, 그리고 그 단어가 어떤 문장에 등장했는지 말해주십시오.

이 질문으로 무엇을 찾고 있습니까? 이 문제를 해결하는 방법은 몇 가지가 있으며 각 방법은 답변을 작성한 사람에 대해 무엇을 알려줍니까? 이 질문에 대한 효과적인 답변으로 입증 된 기술이 비즈니스에 가장 중요한 기술과 동일합니까?

이 질문에 대한 답변을 원하지 않습니다. 후보자 그룹을 프로세스에 적용하기 전에 답변에 대해 생각하기를 바랍니다. 어떤 기술을 찾고 있는지 알고 있다면 그 기술을 찾기위한 질문을 만드는 것이 어렵지 않습니다. 평가하기 위해 설계된 것이 무엇인지 완전히 이해하지 않고 다른 사람의 질문을 사용하면 실제로 자신을 속이고 모든 시간을 낭비하는 것입니다.


시간을 낭비해서 죄송합니다.
bigtang

1
@ bigtang, 전혀 그렇지 않습니다. 위의 내용이 불분명 한 경우 죄송합니다. 어떻게 할 수 있는지 알 수 있습니다.하지만 제 목표는 새로운 채용에서 찾고있는 기술을 기반으로 자신의 프로젝트를 만드는 사례를 만드는 것이 었습니다. 거의 모든 것을 사용하여 작은 프로젝트를 만들 수 있지만 인터뷰 대상자와 인터뷰 대상자 모두에게 가치가 있으려면 요구 사항은 가장 중요하게 생각하는 기술에 의해 결정되어야합니다.
Caleb

첫 번째 문장을 완전히 삭제했습니다 (각각 괜찮은 프로젝트를 내놓을만큼 영리하지 않은 경우, 후보자의 제출물을 평가할만큼 영리하다고 생각하는 이유는 무엇입니까? "). 가치와 조금 무모 해 보였음
Michael Durrant

0

한 가지 예는이 텍스트 단락을 취하여 알파벳 순으로 구성된 고유 단어 목록을 반환하는 것입니다. 각 단어 후에 단어가 몇 번이나 나타 났는지, 그리고 그 단어가 어떤 문장에 등장했는지 말해주십시오.

어떤 언어로 쓸까요? 그들이 C에 중점을 둔 학교에서 나왔다면 Python / Perl / Ruby 등을 가르치는 학교 나 Java 또는 C #을 쓰는 것만 큼 빠르지는 않습니다. 그럼에도 불구하고, 그것은 좋은 작은 테스트입니다.

인터뷰 중에 실제로 더 쉬운 것을 제안합니다. 트릭 질문이 없습니다. 나는 이것에 TMN을 사용하고 있습니다. 그들에게 기본 작업을 수행하고 그들이 무엇을하는지 묻는 다른 기능을 제공하십시오 (다른 사람들의 코드 읽기). 그런 다음 원하는 언어로 작성하는 몇 가지 기본 작업 (<20 줄)을 제공하십시오. 엔트리 레벨 위치에서 코딩 할 수 있는지 아닌지를 엔트리 레벨이 알기에 충분해야합니다. 인터뷰 및 GPA와 함께 알아야 할 사항에 대한 좋은 아이디어를 제공해야합니다.


1
중요한 언어를 찾지 못했습니다. 의사 코드로도 수행 할 수 있습니다. 주요 직원은 추정 직원이 "들어가서"문제 해결의 좋은 징후를 보이는지 확인하는 것입니다.
Jonas Byström

솔직히 split () 및 arrays / lists (push / add)가있는 언어는 사소한 것입니다. C 프로그래머가 split ()과리스트를 '가정'하도록 허용하면 사소 해집니다 :-)
ChuckCottrill

-1

해당 언어의 디자인 패러다임을 사용하여 원하는 언어에 대해 Conway의 게임 게임을 구현하게하십시오 .

Java 또는 C # Conway의 Game of Life는 객체 지향적이어야하고, LISP 또는 F #은 기능적이어야합니다.


2
이 작업을 완료하는 데 얼마나 걸립니까?
Job

전체 OO 구현을 완료하는 데 약 4 시간이 걸리지 만 지금은 12 번 정도했습니다. 그들이 어떻게 생각하고 얼마나 멀리 있는지 (그리고 테스트 가능한 코드 작성 여부)를보고 싶다면 그보다 적은 시간을주십시오. 직접 방문한다면 45 분을주고 그들이 얼마나 멀리 떨어져 있는지 그리고 그들이 행한 길을 선택한 이유를보십시오. 그것은 당신이 그들이 미리 잃어 버리지 않도록 미리 알고 싶어하는 문제 중 하나입니다. 심지어 스스로 시도해보십시오. 프로그래머에 대해 많은 것을 보여줍니다.
George Stocker

8
후보자에게 Conway의 Game of Life 시험을 작성하여 최근에 대학에 진학했는지 또는 그 문제를 작성하고 연구했는지 테스트합니다. @George Stocker는 12 번 작성 했으므로 고용하게됩니다. 삶의 게임은 실제 개발 작업과 얼마나 관련이 있습니까?
ChuckCottrill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.