원래 질문
나는 이미 회사의 컴퓨터 과학자들과 일부 테스터들과 프로젝트 관리자들과 인터뷰를했다. 이제 R & D 부서 내 연구 그룹의 공석을 채워야합니다 (부록 : “연구”는 연구 프로젝트에서 소프트웨어를 사용하여 대학, 다른 회사, 연구소와 함께 전문 도메인 / 시장 틈새 시장의 문제를 해결하려고 함을 의미합니다. 컴퓨터 과학 연구가 아니라 P = NP 문제를 해결하지 않을 것입니다).
이제 우리는 컴퓨터 과학 수업을 한 적이없는 화학 석사 (CV에 많은 물리학을 가지고 있음)를 가진 사람을 초대했습니다. 나는 이미 지역 대학의 커리어 시절에 30 분 정도 그와 이야기를 나 the으며 그 남자가 똑똑하다는 데는 의심의 여지가 없습니다. 또한 그의 점수는 우수하고 그는 구별을 가지고 졸업했다. 그의 BSc를 위해 그는 Mathematica에서 자신에게 프로그래밍을 가르쳐야했고 그가 프로그래밍을 많이 좋아한다고 믿었습니다. 또한 그는 석사 학위 논문을 위해 Mathematica로 구현 된 자신의 소프트웨어를 사용하여 이해할 수없는 물리 화학 문제를 해결했습니다. GUI와 8,000 LoC의 눈에 띄는 크기가 포함되어 있습니다. 그는 우리 연구 그룹에서하고있는 일에 매우 매료되어 정직하게 말해서 우리 같은 중소기업이 좋은 사람을 얻는 것이 매우 어렵다고 생각합니다. 또한 프로젝트 제안서 작성, 보고서 작성, 프레젠테이션 등을 도와 줄 수 있기 때문에 그를 고용하는 데 매우 관심이 있습니다. 그는 아마도 우리 팀에도 적합 할 것입니다.
남은 유일한 질문은 프로젝트에서 소프트웨어 구현을 수행하는 데 필요한 프로그래밍 기술을 얻을 수 있는지 어떻게 확인할 수 있습니까?
물론 나는 그에게 무엇이 있는지 물어볼 것입니다. 그것은 프로그래밍에 대해 그를 매료시킵니다. 또한 자연 과학 소프트웨어를 어떻게 작성하고 어떻게 구성했는지 물어볼 것입니다. 그가 필요한 소프트웨어 개발에 대한 기술과 정보를 어떻게 얻었는지 물어볼 것입니다. 하지만 더 물어볼 게 있나요? 좀 더 구체적인 것? 그에게 Mathematica 솔루션을 설명하도록 요청해야합니까?
명확하게 : 특정 언어 또는 기술 스택에 대한 지식을 찾고 있지 않습니다. 우리는 제품 개발 분야의 .NET 상점이지만 연구 프로젝트를위한 자유로운 선택을 원합니다. 저는 메타 역량이 실제로 필요한 것을 배울 수있는 것에 관심이 있습니다.
나는이 질문이 대답하기 쉽고 개방적이지 않기를 바란다. 나는 직업에 대한 추가적인 프로그래밍 기술 을 얻는 능력을 점검하는 기본 방법이 있는지 알고 싶기 때문이다 . 분명하지 않은 내용이 있으면 의견을 남겨 주시고 내 질문을 개선하겠습니다.
2011-12-01까지의 답변을 반영하여 업데이트
어떤 대답을 받았으며 왜
답변 해 주셔서 감사합니다. 대부분 도움이되었으므로 많이 찬성했습니다. Tom Squires의 답변 이 가장 많은 표를 얻었 지만 Goulash 왕자 의 답변 을 받아 들일 것 입니다. 물론 Tom은 객관적으로 정확하지만 Prince의 대답은 나에게 더 도움 이 되며 대답을 수락하는 기준 이라는 FAQ를 다시 확인했습니다 .
인터뷰 중에 물어볼 내용
-
Chris Burt-Brown이 언급 한 The Camel Has Two Humps 의 예와 같은 간단한 과제를 설명해 드리겠습니다.
-
그래픽 표기법으로 고급 제어 흐름을 설명해달라고 요청합니다.
-
수학 예제를 사용하여 재귀에 대한 그의 이해를 확인하겠습니다.
-
그가 선택한 알고리즘을 자연어로 설명하도록하겠습니다.
-
그의 Mathematica 솔루션을 설명하도록하겠습니다. 특히 그의 절차 모델, 도구 사용, 코드 및 소프트웨어의 구조화 및 다른 추상화 계층을 요구할 것입니다.
-
그의 동기를 확인하기 위해 그의 소프트웨어 개발 매력을 물어볼 것입니다.
-
엔터프라이즈 소프트웨어 개발에 대해 배우는 것이 무엇인지 알고 있는지 물어볼 것입니다. 특히 나는 MSc 혼자서 일한 후에 이것에 대해 많이 알지 못하기 때문에 토론을 팀 작업, 페어 프로그래밍, TDD의 방향으로 바꾸고 싶습니다.
긴 인터뷰가 될 것 같습니다.)
인터뷰 후 업데이트 2011-12-09
다시 한 번 좋은 답변에 감사드립니다. 그는 비행 색상으로 인터뷰를 통과했습니다. 나는 지원자에게 더 이상 만족하지 않았습니다. 그의 Mathematica 솔루션은 꽤 잘 구성된 것 같습니다. 그는 이것이 고차 함수를 어디에 사용했는지 설명 할 수 있었지만, 이것들이 이것과 같은 것을 알지 못했습니다. 그는 수학 기반의 재귀 질문뿐만 아니라 The Camel Has Two Humps의 간단한 과제 및 제어 흐름에 대해서도 대답했습니다.. 그가 일부 알고리즘을 설명 할 때 비선형 피팅에 대해 많은 것을 배웠습니다.) 그는 솔직히 말해서 지금까지 모르는 전문 소프트웨어 개발에 대해 배울 수 있다고 보장 할 수는 없습니다. 그러나 그는 자신도 새로운 개념을 배우는 데 항상 능숙했으며 실제로 소프트웨어 개발에 관심이 있다고 믿습니다. 그는 또한 프로젝트의 기술 스택을 요청했으며, 우선 적용하여 집에서 살펴볼 것입니다. 그는 페어 프로그래밍과 팀 작업에 대해서도 궁금했습니다. 이제 고용 계약이 체결되기를 바랍니다.
답변
몇 년 전 물리학 박사 학위를 받았지만 코딩 경험이 거의 없었기 때문에 (Fortran의 학부 과정에), 나는 여기에 매우 편견이 있습니다. 분명히 그것은 개발중인 소프트웨어의 유형에 달려 있지만, 내 관점은 코딩 기술은 반 정도의 과학 / 문제 해결 능력을 가진 사람이 쉽게 선택할 수 있다는 것입니다. 나는 컴퓨터 과학을 공부 한 평생 프로그래머들에게 모욕적 인 의도는 아닙니다 : 물론 멀티 스레딩과 매우 낮은 수준의 아키텍처를 마스터하기 위해 진지한 훈련을받는 기술적 인 측면이 있습니다. 채우려는 위치가 아닙니다.
현재 직책에 대한 기술 인터뷰에서 저는 상당히 복잡한 수학 문제에 직면하여이를 해결하기위한 프로그램을 설계하도록 요청했습니다. 일단 구현되면 문제를 해결하는 알고리즘을 작성하는 것이 강조되었습니다. 내 솔루션을 설명하기 위해 단어를 사용하여 정답을 작성할 수는 있지만 원하는 경우 원하는 언어로 코드를 작성할 수 있습니다. 테스트는 문제 해결 능력과 “프로그래머처럼 생각할 수 있는지”에 대한 것이 었습니다. 분명히 동등한 능력을 가진 후보자가 있고 직접 코딩 경험이 더 많은 사람이라면, 그는 정상에 나왔을 것입니다.
결론은 : 당신이 그를 달성하고자하는 이상에 대한 것이 아니라, 당신이 그를 고용하고있는 기술에 대한 후보를 검사합니다.
답변
그가 필요한 프로그래밍 기술을 얻을 수 있는지 어떻게 확인할 수 있습니까?
당신은 할 수 없습니다 . 아직 가지고 있지 않은 기술을 정확하게 테스트하는 것은 불가능합니다. 그의 지성과 태도에 따라 판단을해야합니다. 궁극적으로 항상 위험이 될 것입니다.
개인적 경험에서 나는 과학에서 프로그래밍으로 전환하는 것이 매우 가능하다고 말할 수 있습니다. 둘 다 기본적으로 복잡한 퍼즐을 풀기 위해 두뇌를 사용합니다.
답변
이 백서를 확인하는 2 차 자료가 없으므로 보증 할 수 없지만
낙타에는 두 개의 혹이 있습니다
http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf
우리는 프로그래밍 적성에 대한 테스트를 찾았습니다. 우리는 학생들이 프로그래밍 언어와 매우 정확하게 접촉하기 전에, 그리고 몇 주 노출 후 동일한 도구로 극도로 정확하게 테스트함으로써 성공 또는 실패를 예측할 수 있습니다.
답변
그가 필요한 프로그래밍 기술을 얻을 수 있는지 어떻게 확인할 수 있습니까?
매우 간단합니다. 그에게 기술을 줘.
자, 그것은 매우 만족스러운 답변은 아니지만 자세히 설명하겠습니다.
나는 토목 공학에서 3 년간 일한 후 프로그래밍을 시작했습니다. 그것은 응용 물리학과 수학 에서 꽤 견고한 배경입니다 . CS 학위가 제공하는 이론적 인 수학은 아니지만 가치가 있습니다. 엔지니어링 경험에서 얻은 것은 문제 해결 에 대한 탄탄한 배경이었습니다 . 수학 배경을 가진 사람은 이미 문제에 대한 해결책에 대해 이야기 할 때 우아함 의 개념을 높이 평가합니다 . 그들은 6 페이지의 치킨 스크래치를 가져 와서 제출을위한 우아한 반 페이지 증명으로 변환하는 데 시간을 보냈기 때문에 이미 리팩토링 교육을 받았습니다.
물리학을 공부 한 사람은 기본 프레임 워크의 솔루션을 함께 결합하는 직관적 인 접근 방식을 개발했습니다.
그리고이 기술 이외의 프로그래밍은 무엇입니까? -언어, 숙어, 패턴 및 프레임 워크. 이것들은 가르치기 쉽다. 할 수없는 문제를 해결하는 것입니다. 이러한 영역에서 교육을 제공 할 수 있다면 훌륭한 개발자가 될 것입니다.
그러면 질문은 “얼마나 빨리 그 사람의 속도에 도달 할 때까지 기다릴 수 있습니까?”
tl; dr; 타이핑을 가르 칠 수 있습니다. 똑똑하게 가르 칠 수 없습니다.
답변
재료 과학 학사 학위를 받았지만 소프트웨어 개발 분야에서 모든 경력을 쌓았습니다.
후보자가 기본 프로그래밍 및 알고리즘에 문제가 없을 것이라고 제안하지만보다 “엔지니어링”유형 요구 사항에 대해서는 몇 가지 지침이 필요할 수 있습니다. 즉, 500 줄 기능이없고 효과적으로 테스트하고 효율성을 설계하는 그의 코드를 잘 구성해야합니다.
이것의 대부분은 가르쳐 질 수 있지만, 이것을 확인하기 위해 몇 가지 질문을 디자인하고 싶을 수도 있습니다.
답변
또한 그는 석사 학위 논문을 위해 Mathematica로 구현 된 자신의 소프트웨어를 사용하여 이해할 수없는 물리 화학 문제를 해결했습니다. GUI와 8,000 LoC의 눈에 띄는 크기가 포함되어 있습니다.
후보자가 이미 프로그래밍 방법을 알고있는 것처럼 들립니다. 전용 개발자만큼 경험이 많지 않을 수도 있지만 사소한 양의 작업을 완료 해야하는 명백한 프로젝트가 있습니다. 따라서, 상점에서 사용하는 언어와 다른 언어를 사용하는 개발자와 동일한 방식으로 후보를 인터뷰 할 수 있습니다.
- 핵심 역량 -응시자는 기본 프로그래밍 논리, 흐름 제어, 기본 데이터 구조를 이해합니다.
- 고급 역량 -응시자는 객체 지향 프로그래밍 및 디자인, 고급 데이터 구조, 인터페이스, 추상 클래스 등을 이해합니다.
- 문제 해결 능력 -문제가 주어지면 응시자는 확실한 문제 해결 능력을 보여줍니다.
Mathematica가 사용하는 언어는 상당히 발전되어 있으며 Mathematica 용 소프트웨어를 작성하는 데 능숙한 사람은 다른 영역에서 상당히 유능해야합니다. 따라서 해당 경험에 중점을두고 코딩 경험의 기초로 사용하는 것이 인터뷰에 접근하는 좋은 방법이 될 수 있습니다.
답변
항공 우주 공학 대학원생이 프로그래머로 말하면 자연 과학에서 프로그래밍으로 도약 할 수 있습니다. 그러나 문제를 해결할 수 있다고해서 코드를 작성하는 능력과 항상 관련이있는 것은 아닙니다. 당신은 이것을 깨닫는 것 같고 그것은 좋은 것입니다.
나에게 그가 파악하도록하는 가장 중요한 개념은 제어 흐름 과 재귀 (그리고 일반적으로 이것의 일부로서 반복)이다. 후보자를 고용하기 전에, 매우 똑똑한 사람이라도 문제를 해결하기 위해 평범한 단어 알고리즘을 작성할 수 있는지 확인하십시오. 그가 그 평범한 단어 알고리즘을 취하여 적어도 의사 코드로 바꿀 수 있는지 확인하십시오. 당신은 그가 다형성의 개념을 적어도 이해할 수 있는지 알아볼 수도 있지만, 이것이이 상황에서 필요한 지식인지는 확실하지 않습니다.
Mathematica / MatLab /의 과학 문제를 해결할 수있는 능력도주의하십시오. 좋은 코드를 작성할 수있는 것은 아닙니다. 그것은 단지 그가 if / else 문장과 같은 기본적인 (때로는 매우 기본적인) 프로그래밍 원칙을 적용 할 수 있다는 것을 의미합니다. 좋은 프로그래머가되는 법을 배우는 것은 일반적으로이 단계에서 누군가에게 개인적이고 고용주의 헌신을 가져옵니다. 경고 : 저는 종이 봉지에서 자신의 길을 프로그래밍 할 수없고 기본 언어 기본 사항을 정직하게 파악할 수없는 훌륭한 엔지니어 인 매우 지능적인 사람들을 만났습니다.
개인적인 경험
나는 학교에서 공학 학위와 약간의 프로그래밍 경험을 가지고 학교를 졸업했습니다. 나는 매우 소량의 C, 꽤 많은 MatLab 및 일부 VB + Access로 작업했습니다. VB.NET 샵에서 프로그래머로서 정말로 유용 해지기까지 약 3 개월의 공부가 필요했습니다. 완전히 능숙 해지는 데 9 개월이 더 걸렸습니다. 그러나, 나는 자신감을 가지고 문제 해결 능력이 내가 직장에서 만난 다른 프로그래머의 99 %보다 우수하다고 말할 수있다. 저의 고용주들은 저를 더욱 귀중한 자산 중 하나로 생각했습니다.
결론
위험 / 보상 제안이지만 종종 순수한 문제 해결 기술을 가진 사람을 고용하면 프로그래밍 개념을 배울 수 있고 프로그래밍을 확장하는 데 시간을 투자 할 수있는 한 장기적으로 돈을 지불 할 수 있습니다 지식. 그러나 나는 그가 당신에게 직업을 제공하기 전에 최소한 프로그래밍의 기본에 대한 기본적인 이해를 가지고 있어야한다고 확신합니다. 내 경험상,이 시점에 도달하면 훨씬 더 나아갈 수 있습니다.