좋은 프로그래머가 되려면 디버깅 기술이 중요합니까?


24

다른 자질과 함께 프로그래머는 훌륭한 디버깅 기술이 필요합니까? 주어진 프로그램에서 오류를 찾을 수 없었지만 모든 퍼즐과 프로그램을 해결할 수있는 지원자가있는 경우 해당 직종에 대해 고려해야합니까?

편집 :-퍼즐은 정상적인 빨강, 파랑 및 빨강 파랑 공입니다. 프로그램은 배열에서 연속적인 k 영점을 찾는 것과 같습니다. 디버깅 프로그램은> =이어야하는 조건으로 인해 실패하지만 대신>입니다. 모든 것이 종이에 있습니다.


13
그는 프로그램을 실행할 수 있었습니까, 아니면 코드를 보면서 오류를 찾아야합니까?
Michael K

9
디버깅 할 수있는만큼만 코드를 작성할 수 있습니다. 두 사람은 내 책에 손을 잡고
Demian Kasier

3
어떤 사람들은 다른 사람들보다 더 낫습니다. 특히 스트레스가 많은 인터뷰에서 외국어 코드에서 오류를 발견하기가 어렵습니다.
leed25d

6
@Fanatic : 자신의 코드로만 작업하는 경우에만 해당됩니다. 내가 직장에서 수행하는 대부분의 디버깅은 다른 사람들의 오류를 파고 있습니다.
메이슨 휠러

3
@Manoj R, 같은 시간에 같은 문제를 찾을 수 있다고 확신하십니까? 신청자가 20 분 안에 종이에 문제를 찾지 못해서 그녀가 Google (예, Google을 망할 수 있음)과 몇 주 간의 실습으로 문제를 해결할 수 없을 것이라고 확신하십니까?
Job

답변:


37

예, 매우 중요합니다

해당 후보에 대해서는 디버그 할 코드 기반 x에 익숙하지 않을 수 있습니다.

일반적으로 필요한 것은 매우 논리적 인 방법 / 접근법 만 있으면되기 때문에 좋은 문제 해결사는 디버깅 할 수 있어야합니다.


1
프로그래밍, 디버깅에 대한 다른 기술은 경험과 함께 제공되며 재능과는 관련이 없습니다.
Pieter B

24

디버깅 할 수 없다면 프로그래머는 아니지만 거의 좋은 프로그래머는 아닙니다.

디버깅은 기술 능력뿐만 아니라 분석 능력과 사고 과정을 실제로 적용하는 실질적인 응용 프로그램입니다. 결과적으로 화이트 보드 나 인터뷰 질문보다 훨씬 유용하고 적절한 테스트라고 평가했습니다.

당신이 가진 직업이 하루 종일 이론적 질문에 답하는 것을 포함하지 않는다면, 당신이 가진 기술을 적용 할 수있는 사람이 필요합니다.

그래도 당신이해야 할 일은 디버깅 능력에 대한 공정한 테스트라는 것입니다. 실제 세계에서와 같은 방식으로 코드를 실행하고 중단 점을 지정할 수 있습니까? 어떤 종류의 오류입니까? 컴파일러가 선택하고 플래그를 지정하는 것입니까 (이 경우 절대로 알 필요가 없으므로 매우 무의미한 질문입니까)?

그것이 종이에 쓰여졌다면 그것은 기본적으로 상세한 읽기 시험일 뿐이며 그것은 일반적인 기술 인터뷰 질문보다 훨씬 더 추상적 인 기술이며, 나는 거의 쓸모가 없다고 주장합니다.


2
"디버깅 능력의 공정한 테스트였습니까?"에 +1-그렇지 않은 것 같습니다. 공정 검사 , 즉 자연, 정상적인 작업 환경에 넣어 (그들은 거의 산세 디버거 작동되지 않을 수 있습니다 고려) 디버거로 실행 가능한 코드를 포함했을 것이다.
doppelgreener

11

주요 고용 규칙 — 의심 할 여지없이 '아니요'라고 말합니다.

저렴하게 많은 새로운 코드를 구현해야한다면 그 사람을 얻을 수는 있지만 개인적으로 계속 검색 할 것입니다.


7
나는 몇 년 동안 많은 사람들을 고용했고, 내가 고용 한 거의 모든 "아마도"후보자를 후회했다.
JohnFx

10

개발자가 항상 깨끗한 코드를 작성하고 (절대적으로 불가능한) "그린 필드"프로젝트에서만 작업 할 수 없다면 (그렇지 않을 것입니다), 그렇습니다. 디버깅 기술은 절대적으로 필요합니다. 전혀. 나는 디버깅을 좋아하지 않는 개발자들과 경험을 가지고 있었기 때문에 게으르고 테스트를 위해 벽에 QA로 코드를 던졌습니다. 그러나 그 개발자들은 전혀 오래 가지 않습니다.

소프트웨어 개발은 ​​기술과 문제 해결 기술입니다. 이러한 문제에는 비즈니스 문제와 (및 다른 코드) 문제가 포함됩니다. 그런데 많은 유지 보수 프로젝트는 특히 버그 수정에 관한 것이므로 디버깅은 절대적으로 필수적인 기술입니다.


제가 추가하고 싶은 또 다른 것은 ... 인터뷰 과정의 일부로, 응시자는 응용 프로그램을 디버깅하고 몇 가지 작은 기능을 추가하는 연습을합니다. 이 프로세스의 모든 부분이 중요하게 동등하게 취급됩니다.
Mark Freedman

7

"인터뷰 질문"유형의 웹 사이트가 많이 있으며, 많은 질문과 퍼즐을 공부하는 것이 전적으로 가능합니다. 공부할 수없는 한 가지는 전에는 본 적이없는 코드를 디버깅하는 것입니다. 디버깅하는 방법을 알고 있거나 그렇지 않은 코드를 충분히 작성했습니다. 엔트리 레벨의 위치라면 후보자를 배제하지는 않지만 언어에 대한 경험이 있다고 주장하고 코드를 디버깅 할 수 없다면 확실히 붉은 깃발을 듭니다.


5

주니어 프로그래머와 시니어 프로그래머의 주요 차이점은 디버깅 기술입니다. 디버깅 기술은 실습과 경험으로 만 제공되는 것입니다.

예를 들어, Java 프로그램이 대화식 모드로 콘솔에서 제대로 작동하지만 동일한 입력에 Unix 파이프를 사용하려고하면 실패하는 이상한 버그를 생각해보십시오. 이전에이 문제가 발생한 경우 new Scanner(System.in)한 번만 호출 되는지 확인할 수 있습니다 . 버그는 파이프 될 때 버퍼를 소비하지만 대화 형 모드에서는 그렇지 않습니다. 상급 프로그래머가이 버그를 더 빨리 식별 할 것으로 기대합니다. 아마도 이전에 경험했거나 과거에 버퍼링과 관련하여 다른 문제가 있었기 때문일 수 있습니다.

퍼즐을 풀고 새로운 코드를 작성하는 것에 관해서는 경험이 중요하지만, 이것은 중급 프로그래머가 상급 프로그래머와 마찬가지로 또는 더 잘 수행 할 수있는 것입니다. 즉, 지능과 기술이 경험과 무관 한 더 큰 효과를 가질 수 있습니다.

새로운 아이디어를 가지고 팀 "젤"을 도울 수있는 주니어 프로그래머에게 투자 할 수있는 위치에 있다면, 새로운 코드를 작성하는 것이 좋을 것 같습니다. 상급 수준의 프로그래머를 찾고 있다면 디버깅 기술이 부족하다는 것이 중요한 경고 신호가 될 수 있습니다. 10 년의 경험이있을 경우 첫해에는 10 번 정도 경험할 수 있습니다.

부수적으로, 10 년의 경험이없는 디버깅에 더 능숙해질 수있는 방법이 있습니다. 나는 과학적 원리를 배우고 실패를 재현, 발견 및 수정하는 방법을 더 잘 이해하는 방법으로 Andres Zeller의 책인 Programs Fail : Systematic Debugging Guide를 추천 합니다.


따라서 디버깅은 실제로 수행 될 수 있으며 학습 할 수 있으며 후보를 선택할 때 많은 가중치를 부여해서는 안됩니다.
Manoj R

1
명확하게 말하면 : 선임 개발자에게는 무게가 무겁지만 주니어 개발자에게는 무게가 덜 나가야합니다. 예를 들어, 신입생 연도를 프로그래밍하기 시작한 대학 밖에서 누군가 디버깅하는 데 10 배가 더 걸릴 수 있습니다. 그러나 주니어 개발자들에게 투자해야 할 좋은 이유가 있습니다.
Macneil

5

환경에 따라 다릅니다. 하루 종일 sodoku와 다른 퍼즐을 연주한다면 좋은 후보가 될 것입니다.

그러나 때로는 코드에 버그가 있거나 항상 예상대로 정확하게 작동하지 않는 경우 문제 해결에 능숙한 사람을 얻는 것이 좋습니다.

프로그래머가 무엇을해야하는지에 대한 이상적인 것이 아니라 필요한 것을 고용하십시오.


3

다른 자질과 함께 프로그래머는 훌륭한 디버깅 기술이 필요합니까?

예.

코드 디버깅은 문제 해결의 일부입니다. 완벽한 코드를 작성하고 버그가없는 개발자를 본 적이 없습니다. 개발자는 자신의 코드를 디버깅하거나 다른 사람의 코드를 디버깅합니다. 필수품입니다.

내가 그를 직업으로 고려해야 할까?

아마도, 그것은 달려 있습니다.

지원자가 인터뷰에서 다른 모든 퍼즐과 프로그램을 완료 할 수 있었다면 인터뷰에서 프로그램을 디버깅 할 수없는 것은 아마도 거래를 중단해서는 안됩니다. 인터뷰의 깊이와 호흡에 달려 있습니다.

위치에 얼마나 많은 디버깅이 필요합니까? 많은 경우 신청자가 디버깅 질문에 얼마나 잘 대답 할 수 있는지에 더 많은 가중치를 부여해야합니다. 그러나 디버깅 질문이 하나만 언급되었다고 언급했기 때문에 실제로는 그렇지 않습니다.


2
+1 디버그를 반복하는 것이 필요하지만 인터뷰 중에는 문제를 해결하지 않습니다.
Gaurav

3

프로그래머에게 좋은 디버깅 기술이 필요합니까?

예. 즉, 많은 사람들이 종이의 코드가 이상하고 생소한 경험을한다는 점에서 인터뷰 (즉, 퀴즈 / 테스트 스타일)의 방법론을 완벽하지는 않습니다 (좋아요, 결함이 있음).

디버깅 은 답이나 결과 (예 : 실수 ) 가 아닌 프로세스 이기 때문에 후보 디버깅 능력을 평가하는 더 좋은 방법으로 대화식 대화 나 토론을 사용하는 것이 좋습니다. 대부분의 사람들은 비공식적 인 임시 디버깅 시스템을 사용하지만, 좋은 후보자들은 일반적으로 비슷한 패턴을 가지고 시스템이나 가정 및 요구 사항을 이해하고 문제를 분리하고 (종종 나누고 정복 함) 체계적으로 비교합니다. 하여 요구 사항 코드 및 예상 평가 입력 / 출력, A는보다는 다짜고짜 한 번 우연히 작동 될 때까지 여러 사항을 변경.

또한 인터뷰 중에 퍼즐 문제에 대해 특히 서면 형식으로 후보자에게 참조 프레임 워크에 대한 올바른 가정이없는 것처럼 예약을 표현합니다 ( 트릭) 퍼즐이 풀리지 않을 수 있습니다. 즉, 많은 인터뷰 퍼즐은 하나의 올바른 길로 어려움을 겪는 반면, 인생은 복잡하고 가장 창의적인 사고는 특정 미리 조리 된 퍼즐로 해결할 수없는 문제를 해결하기 위해 놀랍도록 참신한 접근 방식을 취하는 사람들입니다. . 모든 트럼펫 연주자가 재즈 연주를 기대하는 것과 같습니다. 이것은 비 대립적 (압력은 창의력을 혼란스럽게 할 수 있음) 대화 형 토론으로 질문을함으로써 관리 할 수 ​​있습니다. 다시 한번, 좋은 생각 과정이 표현되는 것을 보는 것은 부차적 인 대답입니다. 당신은 그들에게 큰 소리로 생각하라고 요구할 것입니다. 그러나 이것은 내 경험에서 더 생산적인 경향이 있습니다.

Zeller 's Why Programs Fail을 읽거나 평가 하지는 않았지만 Agans의 디버깅 을 짧고 빠른 읽기로 권장 하여 임시 디버깅 프로세스를보다 체계적이고 구체적이며 체계적인 노력으로 강화하여 도움이 될 수 있습니다. 디버깅에 더 효율적입니다. 또한 사본을 인쇄하여 큐비클이나 해결 방법 인 디버깅 규칙 포스터에 걸어 놓아도 나쁜 일이 제대로 보이지 않는 경우를 대비 한 완벽한 알림입니다. 나는 나쁜 날이 거의 없으며 글씨가 아니라면 정신적으로 따르려고 노력하여 적극적으로 디버깅 (읽기 : 혼란스럽게 머리를 긁음 ) 시간을 덜 소비 합니다.


좋은 대답입니다. 나는 가장 간단한 버그 수정을 검색하는 데 문자 그대로 며칠을 보냈으며 문자 그대로 몇 분 안에 까다로운 버그를 수정했습니다. 좋은 개발자는 합리적인 전략을 가지고 있어야합니다. 그리고 그것은 응용 프로그램에 많이 의존합니다. 많은 인쇄 / 로그 문을 넣거나 기호가있는 버전을 실행할 때 앱에 문제가 없다고 가정하십시오. 그럼 뭐야? 신청자는 최소한 어떤 종류의 일관된 전략을 분명히 표현할 수 있어야합니다.
SnoopDougieDoug

2

프로그래머가 아무리 실수해도 실수하지 않는 한 디버깅이 필수적이라고 말하고 싶습니다. 나는 그것이 불가능하다는 것을 확신하지는 못하지만, 현재 인기있는 언어와 도구로는 그것을 상상할 수 없습니다.

나는 인터뷰에서 그 자리에 있다는 개념을 싫어한다. 응시자가 긴장한 (그리고 그렇지 않은) 경우, 프로그래머로서 빈 용기를 그릴 수 있으며, 그러한 문제를 일상적으로 처리 할 수 ​​있습니다. 그런 다음 잘 알려진 인터뷰 나 복잡한 과학 테스트 문제라면 응시자는 결과를 알 수 있지만 새로운 문제를 통해 자신의 길을 생각할 수는 없습니다. 또한 응시자가 언어에 익숙하지 않으면 어려움을 겪어야합니다. 훌륭한 프로그래머는 자신이 무엇을 입력해야하는지 알고 있으며, 두뇌는 코드를 읽는 동안 단축키를 사용하기 때문에 많은 버그가 어렵다. 의도가 무엇인지 알기 때문에 검사에서 사용해야했던 = where ==의 C 스타일 사용을 찾을 수 없으며 뇌가 그것을 읽는 구문 분석 단축키를 사용합니다.


1

프로그래밍 문제 해결 및 문제 해결의 좋은 부분은 증상이나 불일치뿐만 아니라 핵심 문제를 알아야합니다. 디버깅은 핵심 문제를 식별하는 기술입니다.

  • 핵심 문제를 식별
  • 흐름을보다 잘 시각화

그리고 더 많은.


1

나는 오류를 지적하고 그 사람이 어떤 반응을 보 였는지 상황에 조금 더 덧붙일 것입니다. 그들은 "D' oh! 나는 바보, 너무 바보 같은 ..."유형에 대해 지나치게 극적입니까, "예, 친구, 캠프"에 지나치게 냉담하거나 그들이 해결해야 할 것을 엉망으로 만들었 음을 나타내는 사과 나 발언이 잘못 되었습니까? 미래 상황에서 고려해야 할 것.

적시에 디버깅 하는 것은 훌륭한 기술입니다. 이것은 누군가에게 문제가 해결 될 때 문제를 해결하는 것과는 조금 다릅니다. 때로는 시스템을 절약하기 위해 적극적인 조치가 취해 져야합니다. 대부분의 회사는 회사가 사용하는 회계 소프트웨어의 버그를 수정하는 동안 몇 주 동안 판매가 중단되는 것을 원치 않을 것입니다.


1

디버깅은 중요한 기술입니다. 실제로 문제 해결이 핵심 기술이라고 더 말할 것입니다. 누군가 문제를 정의하는 방법 (요청할 사용자 정보 및 볼 로그 포함), 재현 방법, 문제를 진단하는 데 사용할 수있는 데이터 소스 및 디버깅 방법 및 문제 해결 방법을 알아야합니다. 다른 것을 깨지 않고. 그러나 인터뷰 중에 결정하는 것은 어렵다.

나는 그에게 찾아야 할 실질적인 문제와 사용 가능한 도구를 사용할 수있는 기회를 주었고, 문제를 찾기 위해 어떤 단계를 밟았는지 또는 할당 된 시간 내에 문제를 찾을 수 없다면 그가 무엇을 할 수 있는지 물어볼 것입니다. 실제로 문제를 다소 체계적으로 공격하고 디버거와 Google보다 툴킷에 더 많은 도구를 가지고있는 사람을 찾고 있습니다 (주니어 수준에서는 최소한 두 가지를 모두 시도 해야하는 경우 (생각할 수없는 사람) 이 두 가지를 시도해보십시오. 적어도 적어도 나는 그에게 기회를 얻지 못할 것입니다.

나는 퍼즐에 대한 답 (물론 전혀 묻지 않을 것)이나 시연 된 프로그래밍 기술보다 문제 해결 기술에 더 많은 비중을 둘 것이다. 좋은 코드를 작성하거나 필요한 수정을 할 수없는 문제를 잘 해결할 수있는 개발자는 거의 보지 못했습니다. 나는 "일하는"제품을 얻기 위해 코드를 함께 묶을 수있는 많은 사람들을 보았지만 그들의 삶에 의존한다면 문제를 해결할 수 없었습니다. 대부분 그들이하지 않기 때문에; 실제로 그들이하고있는 일을 이해하지 못하거나 해결하려는 문제를 이해하지 못합니다. 좋은 문제 해결사는 증상뿐만 아니라 실제 문제를 식별하는 방법을 알고 있습니다. 그런 사람들은 새로운 개발에 대한 문제를 정의하기 위해 어떤 질문을 해야하는지 알고 있습니다.


1

모든 직업에 4-5 개의 핵심 기술이 있으며 프로그래밍도 다르지 않습니다. 전문가 수준에서는 모든 주요 기본 기술에 능숙해야합니다. 5 개 중 4 개가 있으면 여전히 보류됩니다.

고객을 제시하고, 설득하고, 표현하고, 자격을 부여 할 수 있지만 거래를 성사시킬 수없는 영업 사원을 상상할 수 있습니까? 그들은 거기 있고 당신은 당신의 영업 팀에 그들을 원하지 않습니다.

디버깅은 프로그래머가 없어서는 안될 핵심 기술입니다.


0

최소한의 디버깅이 필요한 코딩 스타일이 있습니다. 3 줄의 코드로 끝나면 코드를 실행하고 테스트하여 종종 두 가지 변수를 인쇄합니다. 원치 않는 결과 또는 동작이 발생하는 경우 디버깅 대신 코드에 많은 덤프를 넣었습니다. 실제 디버거를 매우 드물게 사용합니다. 이상하지만 사실입니다.


0

디버깅은 소프트웨어에서 특정 테스트를 수행하고 버그가 발견 된 후 발생하는 소프트웨어 개발 단계입니다. 소프트웨어에서 버그를 검색하고 수정하는 행위입니다. 많은 경우에, 버그를 찾는 데는 보통 버그를 수정하는 데 더 많은 시간이 필요합니다.

컴퓨터 응용 프로그램 / 시스템에 내재 된 버그 (취약점)를 제거하는 프로세스입니다. 이 작업을 수행하지 않으면 해커가 버그를 이용하고 다양한 악의적 활동을 수행 할 수 있습니다.

1)이 취약점을 공개하여 개발자 및 공급 업체의 수익, 비즈니스 및 명성을 잃을 수 있습니다.

2) 웜은 악용 될 수있는 취약한 시스템을 검색하여 해당 서버에 자신을 복사합니다. 예. 2003 년 1 월 Slammer Worm은 MS SQL Server의 취약점을 이용했습니다.

3) 웜이 언급 된 곳에서는 어떻게 바이러스를 잊을 수 있습니까? 바이러스는 개발자가 음란 노출의 주요 목적을 위해 프로그램에 존재하는 버그를 이용하여 잃게됩니다 ...

4) 그리고 프로그램이 제대로 디버깅되지 않으면 소비자는 돈의 가치를 얻지 못하면 절대 지키지 않을 것입니다. 이 경우 더러운 작업을 수행하기 위해 해커가 필요하지 않습니다. 좋은 대중을 신뢰할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.