다른 자질과 함께 프로그래머는 훌륭한 디버깅 기술이 필요합니까? 주어진 프로그램에서 오류를 찾을 수 없었지만 모든 퍼즐과 프로그램을 해결할 수있는 지원자가있는 경우 해당 직종에 대해 고려해야합니까?
편집 :-퍼즐은 정상적인 빨강, 파랑 및 빨강 파랑 공입니다. 프로그램은 배열에서 연속적인 k 영점을 찾는 것과 같습니다. 디버깅 프로그램은> =이어야하는 조건으로 인해 실패하지만 대신>입니다. 모든 것이 종이에 있습니다.
다른 자질과 함께 프로그래머는 훌륭한 디버깅 기술이 필요합니까? 주어진 프로그램에서 오류를 찾을 수 없었지만 모든 퍼즐과 프로그램을 해결할 수있는 지원자가있는 경우 해당 직종에 대해 고려해야합니까?
편집 :-퍼즐은 정상적인 빨강, 파랑 및 빨강 파랑 공입니다. 프로그램은 배열에서 연속적인 k 영점을 찾는 것과 같습니다. 디버깅 프로그램은> =이어야하는 조건으로 인해 실패하지만 대신>입니다. 모든 것이 종이에 있습니다.
답변:
디버깅 할 수 없다면 프로그래머는 아니지만 거의 좋은 프로그래머는 아닙니다.
디버깅은 기술 능력뿐만 아니라 분석 능력과 사고 과정을 실제로 적용하는 실질적인 응용 프로그램입니다. 결과적으로 화이트 보드 나 인터뷰 질문보다 훨씬 유용하고 적절한 테스트라고 평가했습니다.
당신이 가진 직업이 하루 종일 이론적 질문에 답하는 것을 포함하지 않는다면, 당신이 가진 기술을 적용 할 수있는 사람이 필요합니다.
그래도 당신이해야 할 일은 디버깅 능력에 대한 공정한 테스트라는 것입니다. 실제 세계에서와 같은 방식으로 코드를 실행하고 중단 점을 지정할 수 있습니까? 어떤 종류의 오류입니까? 컴파일러가 선택하고 플래그를 지정하는 것입니까 (이 경우 절대로 알 필요가 없으므로 매우 무의미한 질문입니까)?
그것이 종이에 쓰여졌다면 그것은 기본적으로 상세한 읽기 시험일 뿐이며 그것은 일반적인 기술 인터뷰 질문보다 훨씬 더 추상적 인 기술이며, 나는 거의 쓸모가 없다고 주장합니다.
개발자가 항상 깨끗한 코드를 작성하고 (절대적으로 불가능한) "그린 필드"프로젝트에서만 작업 할 수 없다면 (그렇지 않을 것입니다), 그렇습니다. 디버깅 기술은 절대적으로 필요합니다. 전혀. 나는 디버깅을 좋아하지 않는 개발자들과 경험을 가지고 있었기 때문에 게으르고 테스트를 위해 벽에 QA로 코드를 던졌습니다. 그러나 그 개발자들은 전혀 오래 가지 않습니다.
소프트웨어 개발은 기술과 문제 해결 기술입니다. 이러한 문제에는 비즈니스 문제와 (및 다른 코드) 문제가 포함됩니다. 그런데 많은 유지 보수 프로젝트는 특히 버그 수정에 관한 것이므로 디버깅은 절대적으로 필수적인 기술입니다.
주니어 프로그래머와 시니어 프로그래머의 주요 차이점은 디버깅 기술입니다. 디버깅 기술은 실습과 경험으로 만 제공되는 것입니다.
예를 들어, Java 프로그램이 대화식 모드로 콘솔에서 제대로 작동하지만 동일한 입력에 Unix 파이프를 사용하려고하면 실패하는 이상한 버그를 생각해보십시오. 이전에이 문제가 발생한 경우 new Scanner(System.in)
한 번만 호출 되는지 확인할 수 있습니다 . 버그는 파이프 될 때 버퍼를 소비하지만 대화 형 모드에서는 그렇지 않습니다. 상급 프로그래머가이 버그를 더 빨리 식별 할 것으로 기대합니다. 아마도 이전에 경험했거나 과거에 버퍼링과 관련하여 다른 문제가 있었기 때문일 수 있습니다.
퍼즐을 풀고 새로운 코드를 작성하는 것에 관해서는 경험이 중요하지만, 이것은 중급 프로그래머가 상급 프로그래머와 마찬가지로 또는 더 잘 수행 할 수있는 것입니다. 즉, 지능과 기술이 경험과 무관 한 더 큰 효과를 가질 수 있습니다.
새로운 아이디어를 가지고 팀 "젤"을 도울 수있는 주니어 프로그래머에게 투자 할 수있는 위치에 있다면, 새로운 코드를 작성하는 것이 좋을 것 같습니다. 상급 수준의 프로그래머를 찾고 있다면 디버깅 기술이 부족하다는 것이 중요한 경고 신호가 될 수 있습니다. 10 년의 경험이있을 경우 첫해에는 10 번 정도 경험할 수 있습니다.
부수적으로, 10 년의 경험이없는 디버깅에 더 능숙해질 수있는 방법이 있습니다. 나는 과학적 원리를 배우고 실패를 재현, 발견 및 수정하는 방법을 더 잘 이해하는 방법으로 Andres Zeller의 책인 Programs Fail : Systematic Debugging Guide를 추천 합니다.
다른 자질과 함께 프로그래머는 훌륭한 디버깅 기술이 필요합니까?
예.
코드 디버깅은 문제 해결의 일부입니다. 완벽한 코드를 작성하고 버그가없는 개발자를 본 적이 없습니다. 개발자는 자신의 코드를 디버깅하거나 다른 사람의 코드를 디버깅합니다. 필수품입니다.
내가 그를 직업으로 고려해야 할까?
아마도, 그것은 달려 있습니다.
지원자가 인터뷰에서 다른 모든 퍼즐과 프로그램을 완료 할 수 있었다면 인터뷰에서 프로그램을 디버깅 할 수없는 것은 아마도 거래를 중단해서는 안됩니다. 인터뷰의 깊이와 호흡에 달려 있습니다.
위치에 얼마나 많은 디버깅이 필요합니까? 많은 경우 신청자가 디버깅 질문에 얼마나 잘 대답 할 수 있는지에 더 많은 가중치를 부여해야합니다. 그러나 디버깅 질문이 하나만 언급되었다고 언급했기 때문에 실제로는 그렇지 않습니다.
프로그래머에게 좋은 디버깅 기술이 필요합니까?
예. 즉, 많은 사람들이 종이의 코드가 이상하고 생소한 경험을한다는 점에서 인터뷰 (즉, 퀴즈 / 테스트 스타일)의 방법론을 완벽하지는 않습니다 (좋아요, 결함이 있음).
디버깅 은 답이나 결과 (예 : 실수 ) 가 아닌 프로세스 이기 때문에 후보 디버깅 능력을 평가하는 더 좋은 방법으로 대화식 대화 나 토론을 사용하는 것이 좋습니다. 대부분의 사람들은 비공식적 인 임시 디버깅 시스템을 사용하지만, 좋은 후보자들은 일반적으로 비슷한 패턴을 가지고 시스템이나 가정 및 요구 사항을 이해하고 문제를 분리하고 (종종 나누고 정복 함) 체계적으로 비교합니다. 하여 요구 사항 코드 및 예상 평가 입력 / 출력, A는보다는 다짜고짜 한 번 우연히 작동 될 때까지 여러 사항을 변경.
또한 인터뷰 중에 퍼즐 문제에 대해 특히 서면 형식으로 후보자에게 참조 프레임 워크에 대한 올바른 가정이없는 것처럼 예약을 표현합니다 ( 트릭) 퍼즐이 풀리지 않을 수 있습니다. 즉, 많은 인터뷰 퍼즐은 하나의 올바른 길로 어려움을 겪는 반면, 인생은 복잡하고 가장 창의적인 사고는 특정 미리 조리 된 퍼즐로 해결할 수없는 문제를 해결하기 위해 놀랍도록 참신한 접근 방식을 취하는 사람들입니다. . 모든 트럼펫 연주자가 재즈 연주를 기대하는 것과 같습니다. 이것은 비 대립적 (압력은 창의력을 혼란스럽게 할 수 있음) 대화 형 토론으로 질문을함으로써 관리 할 수 있습니다. 다시 한번, 좋은 생각 과정이 표현되는 것을 보는 것은 부차적 인 대답입니다. 당신은 그들에게 큰 소리로 생각하라고 요구할 것입니다. 그러나 이것은 내 경험에서 더 생산적인 경향이 있습니다.
Zeller 's Why Programs Fail을 읽거나 평가 하지는 않았지만 Agans의 디버깅 을 짧고 빠른 읽기로 권장 하여 임시 디버깅 프로세스를보다 체계적이고 구체적이며 체계적인 노력으로 강화하여 도움이 될 수 있습니다. 디버깅에 더 효율적입니다. 또한 사본을 인쇄하여 큐비클이나 해결 방법 인 디버깅 규칙 포스터에 걸어 놓아도 나쁜 일이 제대로 보이지 않는 경우를 대비 한 완벽한 알림입니다. 나는 나쁜 날이 거의 없으며 글씨가 아니라면 정신적으로 따르려고 노력하여 적극적으로 디버깅 (읽기 : 혼란스럽게 머리를 긁음 ) 시간을 덜 소비 합니다.
프로그래머가 아무리 실수해도 실수하지 않는 한 디버깅이 필수적이라고 말하고 싶습니다. 나는 그것이 불가능하다는 것을 확신하지는 못하지만, 현재 인기있는 언어와 도구로는 그것을 상상할 수 없습니다.
나는 인터뷰에서 그 자리에 있다는 개념을 싫어한다. 응시자가 긴장한 (그리고 그렇지 않은) 경우, 프로그래머로서 빈 용기를 그릴 수 있으며, 그러한 문제를 일상적으로 처리 할 수 있습니다. 그런 다음 잘 알려진 인터뷰 나 복잡한 과학 테스트 문제라면 응시자는 결과를 알 수 있지만 새로운 문제를 통해 자신의 길을 생각할 수는 없습니다. 또한 응시자가 언어에 익숙하지 않으면 어려움을 겪어야합니다. 훌륭한 프로그래머는 자신이 무엇을 입력해야하는지 알고 있으며, 두뇌는 코드를 읽는 동안 단축키를 사용하기 때문에 많은 버그가 어렵다. 의도가 무엇인지 알기 때문에 검사에서 사용해야했던 = where ==의 C 스타일 사용을 찾을 수 없으며 뇌가 그것을 읽는 구문 분석 단축키를 사용합니다.
프로그래밍 문제 해결 및 문제 해결의 좋은 부분은 증상이나 불일치뿐만 아니라 핵심 문제를 알아야합니다. 디버깅은 핵심 문제를 식별하는 기술입니다.
그리고 더 많은.
나는 오류를 지적하고 그 사람이 어떤 반응을 보 였는지 상황에 조금 더 덧붙일 것입니다. 그들은 "D' oh! 나는 바보, 너무 바보 같은 ..."유형에 대해 지나치게 극적입니까, "예, 친구, 캠프"에 지나치게 냉담하거나 그들이 해결해야 할 것을 엉망으로 만들었 음을 나타내는 사과 나 발언이 잘못 되었습니까? 미래 상황에서 고려해야 할 것.
적시에 디버깅 하는 것은 훌륭한 기술입니다. 이것은 누군가에게 문제가 해결 될 때 문제를 해결하는 것과는 조금 다릅니다. 때로는 시스템을 절약하기 위해 적극적인 조치가 취해 져야합니다. 대부분의 회사는 회사가 사용하는 회계 소프트웨어의 버그를 수정하는 동안 몇 주 동안 판매가 중단되는 것을 원치 않을 것입니다.
디버깅은 중요한 기술입니다. 실제로 문제 해결이 핵심 기술이라고 더 말할 것입니다. 누군가 문제를 정의하는 방법 (요청할 사용자 정보 및 볼 로그 포함), 재현 방법, 문제를 진단하는 데 사용할 수있는 데이터 소스 및 디버깅 방법 및 문제 해결 방법을 알아야합니다. 다른 것을 깨지 않고. 그러나 인터뷰 중에 결정하는 것은 어렵다.
나는 그에게 찾아야 할 실질적인 문제와 사용 가능한 도구를 사용할 수있는 기회를 주었고, 문제를 찾기 위해 어떤 단계를 밟았는지 또는 할당 된 시간 내에 문제를 찾을 수 없다면 그가 무엇을 할 수 있는지 물어볼 것입니다. 실제로 문제를 다소 체계적으로 공격하고 디버거와 Google보다 툴킷에 더 많은 도구를 가지고있는 사람을 찾고 있습니다 (주니어 수준에서는 최소한 두 가지를 모두 시도 해야하는 경우 (생각할 수없는 사람) 이 두 가지를 시도해보십시오. 적어도 적어도 나는 그에게 기회를 얻지 못할 것입니다.
나는 퍼즐에 대한 답 (물론 전혀 묻지 않을 것)이나 시연 된 프로그래밍 기술보다 문제 해결 기술에 더 많은 비중을 둘 것이다. 좋은 코드를 작성하거나 필요한 수정을 할 수없는 문제를 잘 해결할 수있는 개발자는 거의 보지 못했습니다. 나는 "일하는"제품을 얻기 위해 코드를 함께 묶을 수있는 많은 사람들을 보았지만 그들의 삶에 의존한다면 문제를 해결할 수 없었습니다. 대부분 그들이하지 않기 때문에; 실제로 그들이하고있는 일을 이해하지 못하거나 해결하려는 문제를 이해하지 못합니다. 좋은 문제 해결사는 증상뿐만 아니라 실제 문제를 식별하는 방법을 알고 있습니다. 그런 사람들은 새로운 개발에 대한 문제를 정의하기 위해 어떤 질문을 해야하는지 알고 있습니다.
디버깅은 소프트웨어에서 특정 테스트를 수행하고 버그가 발견 된 후 발생하는 소프트웨어 개발 단계입니다. 소프트웨어에서 버그를 검색하고 수정하는 행위입니다. 많은 경우에, 버그를 찾는 데는 보통 버그를 수정하는 데 더 많은 시간이 필요합니다.
컴퓨터 응용 프로그램 / 시스템에 내재 된 버그 (취약점)를 제거하는 프로세스입니다. 이 작업을 수행하지 않으면 해커가 버그를 이용하고 다양한 악의적 활동을 수행 할 수 있습니다.
1)이 취약점을 공개하여 개발자 및 공급 업체의 수익, 비즈니스 및 명성을 잃을 수 있습니다.
2) 웜은 악용 될 수있는 취약한 시스템을 검색하여 해당 서버에 자신을 복사합니다. 예. 2003 년 1 월 Slammer Worm은 MS SQL Server의 취약점을 이용했습니다.
3) 웜이 언급 된 곳에서는 어떻게 바이러스를 잊을 수 있습니까? 바이러스는 개발자가 음란 노출의 주요 목적을 위해 프로그램에 존재하는 버그를 이용하여 잃게됩니다 ...
4) 그리고 프로그램이 제대로 디버깅되지 않으면 소비자는 돈의 가치를 얻지 못하면 절대 지키지 않을 것입니다. 이 경우 더러운 작업을 수행하기 위해 해커가 필요하지 않습니다. 좋은 대중을 신뢰할 수도 있습니다.