특정 프로그래밍 언어에서 전문 지식 수준을 결정하기 위해 어떤 메트릭을 사용할 수 있는지

StackOverflow https://stackoverflow.com/questions/539694

  •  22-08-2019
  •  | 
  •  

문제

나는 사람이 특정 언어로 얼마나 잘 프로그래밍 할 수 있는지를 처리하는 데 사용되는 원시 (또는 복합체) 메트릭에서 흥미 롭습니다.

시나리오 : George는 몇 가지 프로그래밍 언어를 알고 "foobar"를 배우고 싶어하지만 "Foobar"에서 합리적인 경험이 언제 있는지 알고 싶습니다.

나는 LOC (line of code) 메트릭보다 더 넓은 것에서 정말 흥미 롭습니다.

이 질문에 대한 나의 희망은 엔지니어가 다른 사람들의 프로그래밍 언어 경험을 어떻게 정량화하고 이것이 기계적으로 측정 될 수 있는지 이해하는 것입니다.

미리 감사드립니다!

도움이 되었습니까?

해결책

이전 두 포스터에 대한 답변으로 ~이다 사람이 특정 언어로 얼마나 잘 프로그래밍 할 수 있는지를 처리하는 방법 : 누군가가 영어, 수학, 음악, 의학 또는 미술을 잘 알고있는 방법을 테스트 할 수 있습니다. 그래서 프로그래밍 언어의 특별한 점은 무엇입니까?

OP에 대한 답변으로 테스트는 다음을 평가해야한다고 생각합니다.

  • 얼마나 잘 프로그래밍 할 수 있는지
  • 프로그래밍 언어를 얼마나 잘 사용할 수 있는지

따라서 메트릭은 다음과 같습니다.

  1. 사람의 프로그래밍의 장점은 무엇입니까 (그리고 버그가없고, 유지 관리 가능, 빠른/쓰기, 빨리 실행되며, 사용자 요구 사항을 충족하는 등의 다양한 차원이 있습니다)?

  2. 그 사람은 좋은 프로그래밍을하기 위해 문제의 프로그래밍 언어의 적절한/관용 기능을 사용합니까?

그러나 시험을 '기계적'으로 만드는 것은 어려울 것입니다. 제가 아는 대부분의 시험은 인간 검사관이 등급을 매겼습니다. 프로그래밍의 경우 테스트의 일부는 기계적으로 등급으로 등급을 매길 수 있지만 (예 : "실행됩니까?") 일부 ( "이해할 수 있고 관용적입니까?")는 혜택을받을 수 있으며 다른 인간이 더 잘 판단됩니다. 프로그래머.

다른 팁

내 의견으로는 특정 언어에 대한 전문 지식의 가장 좋은 지표는 당신이 얼마나 생산적인지입니다.

생산성은 얼마나 빨리 일할 수 있는지가 아니라 중요한 것은 버그가 적고 나중에 리팩토링/재 작업이 거의 필요하지 않습니다.

예를 들어, 두 가지 언어를 사용하면 비슷한 수준의 경험이 있고 (평행 한 우주에서) 둘 다 동일한 시스템을 구축하면 시스템을 더 빠르고 적은 결함/디자인 결함으로 구축하는 언어를 말할 것입니다. 당신이 더 많은 전문 지식을 가지고있는 언어입니다.

죄송합니다. "어려운"지표가 아니 었습니다. 더 실용적인 접근법입니다.

나는 이것이 "기계적으로 측정"될 수 있다고 믿지 않는다. 나는 생각 그래도 이것에 대해 많이.

매달려 ...

프로그램의 "LOC"조차도 논쟁의 여지가있는 주제입니다! (우리는 고양이의 출력에 대해 이야기하고 있습니까?

LOC 비교가 얼마나 무의미한지를 깨달을 때까지 다른 메트릭이 얼마나 무의미한지를 깨닫게 될 희망은 없습니다.

그것은 큰 정확도로 거의 측정되지 않는 다소 질적 인 것입니다. "아인슈타인이 얼마나 똑똑 했는가?"라고 묻는 것과 같습니다. 인증은 하나 (그리고 합리적으로 철저한) 정량적 지표이지만, 많은 채용 담당자가 발견 한 것처럼 "좋은 프로그래머"를 식별하는 데 크게 부족합니다.

당신은 궁극적으로 무엇을 달성하려고합니까? 일반적인 프로그래밍 적성은 일부 상황에서 언어 전문 지식보다 더 중요 할 수 있습니다.

당신이 언어에 초점을 맞추고 있다면 프로젝트 오일러 그 언어를 사용하는 것은 진행 상황을 추적하는 방법 일 수 있습니다.

그 언어로 복잡한 문제를 디버깅하는 데 얼마나 능숙한 지.

과거에 작업 한 프로젝트, 그들이 직면 한 어려운 문제 및 해결 방법에 대해 물어보십시오. 그들이 사용한 디버깅 기술에 대해 물어보십시오. 당신은 당신이들을 수있는 것에 놀랄 것입니다. 그리고 당신은 새로운 것을 배울 수도 있습니다 ;-) ;-)

많은 장소에는 자신의 분야에 슈퍼 스타 인 사람 또는 두 사람이 있습니다. 다른 사람들은 프로그램에 무엇이 잘못되었는지 알 수 없을 때가는 사람입니다. 나는 당신이 찾고있는 사람이라고 생각합니다 :-)

프로그래밍 언어를 가진 시설로는 충분하지 않습니다. 필요한 것은 특정 플랫폼에있는 부분적인 라이브러리 제품군의 맥락에서 프로그래밍 언어를 가진 시설입니다.

  • Windows 32 비트의 Winapi에서 C ++
  • Linux의 KDE에서 C ++
  • Nokia S60 전화의 Symbian의 C ++
  • C# Windows의 MS .NET에서
  • Linux의 모노에 C#

그러한 맥락에서, 대상 플랫폼에서 대상 언어를 사용하는 역량 측정은 다음과 같습니다.

  • 공통 패턴을 간결하고 강력하게 표현하는 능력.
  • 레이스 조건과 같은 일반적인 버그이지만 미묘한 버그를 디버깅하는 기능.

프로그래머를위한 벤치 마크 연습 제품군을 개발할 수 있습니다. 또한 중요한 샘플을 이용할 수있게되면 벨 곡선을 결정할 수도 있습니다. 이런 것들을 준비하는 데 문자 그대로 몇 년이 걸리고 빠르게 쓸모 없게 될 것입니다. 이것 (그리고 일반적인 압박감)은 조직이 귀찮게하지 않는 이유입니다.

또한 "도구 메이커"및 "도구 사용자"모드 모두에서 사람들을 등급으로 비롯해야합니다. 도구 제조업체는 훨씬 높은 수준의 역량을 가진 사람들이지만 종종 원숭이 작업에 적합하지 않으며 실제로 도구 사용자를 원합니다.

남자

질문에 접근하는 몇 가지 방법이 있습니다.

1) 특정 언어를 요구하는 특정 직책에 대한 후보자를 인터뷰하는 경우 후보자를 비교하는 유일한 조치는 '이 사람 이이 언어로 글을 얼마나 오래 쓰고 있는가?'입니다. 그것은 완벽하지 않습니다 - 그것은 그다지 좋지는 않지만 현실입니다. 후보자에게 문제, 컴퓨터 및 컴파일러가 다른 조치가없는 지점에서 테스트 할 수있는 컴파일러를 제공하지 않는 한. 그런 다음 대부분의 프로그래머 유형은 "누군가가 당신을보고있는"시나리오에서 잘하지 않습니다.

2) 나는 당신의 질문이 '언어로 언제 나 자신을 특별하게 부를 수 있습니까?'라고 더 많이 해석합니다. 이를 위해 나는 비 원어민 언어를 배우는 수준을 언급 할 것입니다. 첫 번째 수준은 무엇이든 말하거나 이해하기 위해 사전 (책)에서 단어/문구를 찾아야한다는 것입니다. 두 번째 수준은 신뢰할 수 있고 잘 짜여진 사전에서 가끔 조회하면서 언어 (또는 읽기 코드)를 듣는 것을 이해할 수 있다는 것입니다. 3 단계 가끔 조회만으로 말할 수 있습니다 (또는 코드를 작성); 네 번째 수준은 당신이 언어로 꿈꾸는 곳입니다. 그리고 최종 수준은 바보 원어민이 당신이 원어민이라고 생각하는 곳입니다 (프로그래밍에서 다른 전문가들은 당신이 언어 구문을 개발하는 데 도움이되었다고 생각할 것입니다).

이것은 당신이 프로그래머가 얼마나 좋은지를 결정하는 데 도움이되지 않습니다. 사전에서 단어를 찾지 않고 영어를 아는 것처럼 "당신이 얼마나 좋은 일을하는지"주관적이고 아무것도 없습니다. 프로그래밍에 능숙한 사람들은 당신이 그들에게 제공하는 모든 언어에서는 좋은 언어로 특정 언어로하십시오.

"합리적인 양의 경험"이라는 문구는 고려중인 언어와 해당 언어가 사용될 수있는 것에 달려 있습니다.

메트릭은 측정 결과입니다. Stevens (Wikipedia : 측정 수준 참조)는 측정에서 공칭 (라벨 할당), 서수 할당 (순위 할당), 간격 (측정 순서) 및 비율 (비 관찰 제로 시작점)을 사용한다고 제안했습니다. . LOC는 비율 측정입니다. 완벽하지는 않지만 LOC는 언어로 얼마나 많은 경험을 가지고 있는지, 소프트웨어 산업의 정량화 가능한 가치와 비교할 수있는 관련성 있고 객관적인 숫자라고 생각합니다. 그러나 이것은 의문을 제기합니다. 이러한 산업 가치는 어디에서 왔습니까?

개인적으로, 나는 "George"는 프로젝트를 설계, 구현 및 테스트했을 때 합리적인 경험을 가지고 있다는 것을 알게 될 것입니다. 필요할 경우 자신의 가정용 컴퓨터에서 자신의 개인 시간을 선택했을 것입니다. 예 : 데이터베이스, 비즈니스 응용 프로그램, 웹 페이지, GUI 테스트 도구 등.

채용 관리자의 관점에서, 나는 프로그래머에게 언어에 얼마나 좋은지 물어 보면서 시작했지만 이것은 지표가 아닙니다. 나는 항상 프로그램을 작성하는 사람을 측정하는 가장 좋은 방법은 프로그래머에게 미리 생각하고 주어진 시간에 5 분 내에 해결 된 몇 가지 작은 프로그래밍 문제를 제공하는 것입니다. 나는 면접 에서이 일이 나에게 이루어진 것에 반대하지 않았다. 몇 가지 메트릭이 있습니다. 프로그래머가 문제를 해결할 수 있었습니까 (예 또는 아니오 - 공칭)? 시간이 얼마나 걸렸습니까 (분 - 비율)? 문제 해결에 대한 그들의 접근법 (선, 공정, 가난한 - 서수)? 당신은 코드를 작성하는 사람의 능력뿐만 아니라 문제 해결에 대한 행동, 문제를 해결하는 동안 묻는 질문, 압력 하에서 일할 수있는 능력, 질문과 같은 몇 가지 주관적인 것들을 관찰 할 수 있습니다. "품질"관점에서 비해 사람들은 측정되는 것을 좋아하지 않는다는 것을 기억하십시오.

그래도 나는 McCabe Cyclomatic Metric 주기적 복잡성 또는 코드 블록 당 유용한 주석 금액 또는 두 연속 테스트 사이에 기록 된 평균 코드 양.

나는 그런 것이 없다는 것을 알고 있습니다. 나는 경험을 정량화하는 방법이나 "합리적인"의미에 대한 컨언스가 있다고 생각하지 않습니다. 어쩌면 나는 무언가를 배울 것입니다. 그러나 내가한다면 그것은 큰 놀라움이 될 것입니다.

이것 적절할 수 있습니다.

디버그 기능을 테스트하는 것은 내가 겪은 간단한 프로그래밍 문제를 목표로하는 테스트보다 프로그래밍 기술의보다 정확한 게이지라는 것을 알았습니다. 언급 된 (또는 경우에 따라) 오해가있는 합리적인 크기의 클래스 또는 기능의 출처를 감안할 때, 시험관이 문제를 찾을 수 있습니까?

글쎄, 그들은 면접에서 그것을 시도합니다. 메트릭은 없지만 질문과 퀴즈를 통해 개인의 능력을 평가할 수 있습니다.

wtf/s * loc, 작은 것이 가장 좋습니다.

아무것도 없습니다. 전문 지식은 다른 사람과 관련하여 주관적으로 판단되거나 세부 사항에 대해 테스트 될 수 있습니다 (자체 수준의 부정확성이 있음)

보다 코드 메트릭에 대한 매력은 무엇입니까? 자세한 내용은

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top