코드 배후의 목적이인지 오버 헤드를 줄이기 위해 '아이디 오마 틱'인가?


22

코드를 작성하는 방식을 이해하기 어렵게 만드는 사람에게 설명하려고 노력 중이며 리 팩터하면 쉽게 읽을 수 있습니다. 내가 운전하고있는이 스타일의 코드를 일반적으로 '아이디 오 매틱'코드라고합니다.

그러나 관용구 라는 문구 는 도덕적 정확성의 짐을 가져옵니다 . 이는 사람들이 코딩 스타일을 바꾸도록 유도하는 큰 동기가 아닙니다. 이 말을하는 더 긍정적 인 방법은 일반적인 스타일을 따르는 코드 이지만 무리의 정신 추론으로 비판적인 사상가에게 있습니다.

사람들이 코드를 변경하도록 동기를 부여하는 방식으로이 아이디어를 설명하는 방법은 다음과 같습니다.

  • 독자의인지 오버 헤드를 줄일 수있는 방식으로 코드 작성
  • 의도를 이해하기 쉽게 만드는 코드 (예 :이 벡터는 무엇입니까?)

(제쳐두고, 나는 첫 번째 출판 이전에 책 관용어가 관용어 Clojure라는 제목을 가지고 있다는 것을 알고 있습니다. ).

내 질문은 : 코드 뒤의 목적이인지 오버 헤드를 줄이기 위해 '아이디 오마 틱'인가?


코드를 읽는 것에 대한 나의 일반적인 의견은 적어도 두 개의 컴파일러에 대한 코드를 작성한다는 것입니다. 자신을 포함하여 나중에 코드를 읽어야하는 다른 사람들. Ant, Make 또는 IDE를 통해 실행되는 프로세스. 첫 번째가 더 중요합니다.

답변:


19

첫째, "아이디 오 매틱"이라는 용어에 어떤 종류의 "도덕적 정확성"이 있는지 확신 할 수 없습니다. 일반 사전의 정의는 단순히

특정 언어 또는 방언의 특성 또는 특징 : 관용 프랑스어.

그렇습니다. 관용적 코드는 일반적으로 프로젝트가 필요로하는 표준 라이브러리 및 타사 라이브러리가 (가상적으로) 모든 관용적 인 인터페이스 정의에서인지 오버 헤드를 줄입니다.

그러나 판매 포인트로서인지 오버 헤드를 줄이는 것이 당신에게 어떤 일을하는지에 초점을 맞출 것입니다. 프로그래머가 고유 한 스타일로 작성된 코드를 풀려고 시도하지 않고 실수로 인해 미묘한 부분을 찾아 내거나 에지 케이스를 잘못 처리하지 않기 때문에 실수를 쉽게 발견 할 수 있습니다. 다른 사람의 코드를 쉽게 검토 할 수 있으므로 팀은 구문에 대해 논쟁하기보다는 실제 문제를 식별하는 실제 검토를 수행 할 가능성이 높아집니다.

인지 오버 헤드를 줄이는 것 외에도 관용적 코드는 일반적으로 더 효율적인 코드입니다. 특정 언어로 된 대부분의 관용구는 언어가 특정 방식으로 문제에 접근하도록 설계 되었기 때문에 진화합니다. 사용중인 컴파일러 또는 인터프리터는 최적화를 관용적 코드에 중점을 둡니다. 예를 들어 재귀가 코드 조각을 구성하는 관용적 인 언어를 사용하는 경우 컴파일러에서 꼬리 재귀를 구현할 수 있습니다. 재귀가 관용적이지 않은 언어를 사용하면 그 가능성이 훨씬 줄어 듭니다. 테일 재귀를 모든 곳에서 구현할 수는 없지만 대부분의 컴파일러 작성자는 일반적으로 발생하지 않는 작업에 집중하지 않을 것입니다.


1
당신의 대답은 상당히 합리적입니다. 파리, 몬트리올, 코트 디부 아르에서 온 관용어? 코드는 그렇게 다르지 않습니다. 커뮤니티가없는 관용구는 없습니다. 몬트리올처럼 들리면 파리에서 약간의 '인지 과부하'가 발생할 수 있습니다. 아마도 세상은 항상 올바른 방법이 있다고 생각하는 사람들 (Python?)과 Vive la différence를 말하는 사람들로 나뉘어 질 것입니다! (자바 스크립트?) 이제 컴파일러가 더 효율적으로 찾는 Javascript 관용구를 작성하려면 모두 minifier / uglifier처럼 작성합시다!
joshp

고맙게도 V8이 나왔을 때 디자이너들은 더 이상 인공적인 마이크로 벤치 마크 게임을하지 않기로 결정했고, 현실적이고, 잘 설계되고, 잘 설계된 관용적 코드를 시뮬레이션하는 벤치 마크를 만들었고 다른 벤더들은 이제 그에 따라 행동했습니다. 이로 인해 성능 게임에서 역할이 역전되었습니다. 컴파일러 작성자가 쉬운 작업을 수행 할 수 있도록 프로그래머가 성능 코드를 작성하기 전에는 이제 컴파일러 작성자가 성능을 위해 컴파일러를 설계해야합니다. 프로그래머가 쉽게 일할 수 있도록해야합니다.
Jörg W Mittag

좋은 붉은 청어, 그러나 언어는 지리적 한계를 공유하지만 컴퓨터 언어는 그렇지 않습니다. 그래서 당신의 요점은 조금 무섭습니다. Python 대 JavaScript를 Parisian 대 Montreal 방언과 비교하는 것은 말할 것도 없습니다. (누가 더 많은 범죄, 파이썬 프로그래머 또는 몬트리올 주민을 맡을 지 잘 모르겠습니까?; D).
Marco

10

관용구에 도덕적 의미가 있다는 아이디어를 어디서 얻었는지 잘 모르겠습니다. 숙어는 단지 사물을 표현하는 방법입니다. 그것들은 개별 단어 나 구보다 규모가 큰 패턴입니다.

내가 늑대에게 울부 짖어 야한다고 말하면, 잘 알려진 독일 관용어 라 할지라도 내가 무슨 뜻인지 알지 못할 것입니다. OTOH가 로마에있을 때 로마인이하는 것처럼 말하면 올바른 영어 관용구를 사용했기 때문에 내가 말하는 내용을 즉시 알게 될 것입니다.

컴퓨터 언어도 다르지 않습니다.

실제로 프로그래밍 세계에서 "이디엄"의 다른 이름은 "구현 패턴"입니다. 이것은 크리스토퍼 알렉산더 건축가 (비트 앤 바이트가 아닌 벽돌과 박격포)에서 나온 패턴 아이디어와 관련이 있습니다. 대부분의 프로그래머는 디자인 패턴에 대해 알고 있고, 일부 는 디자인 패턴보다 규모가 아키텍처 패턴에 대해서도 알고 있습니다. 숙어는 디자인 패턴보다 작은 규모의 패턴입니다.


5

대부분의 언어는 의도적으로 특정 스타일에 적합합니다. 그 스타일로 작성된 코드는 관용적입니다. 런타임 환경 선택이 사용 가능한 언어 선택 범위를 좁힌다는 사실을 지나친 경우, 현재 문제가 특정 언어 관용구로 표현하기 쉽기 때문에 언어를 선택해야합니다.

대부분의 사람들은 그것을 얻지 못합니다. 예를 들어, 많은 Java 프로그래머는 JavaScript를 작성해야 할 때 (Java를 작성하고 상호 컴파일 할 수 있음) 동일한 스타일을 유지하려고 노력하고 어느 정도 성공합니다 (JavaScript에서 Java- 아이디 오닉 인 코드 작성- 그러나 그들은 항상 JavaScript와 싸우는 느낌을 가질 것입니다. 특정 기능이 없거나 모방하기 어려운 경우.

관용적 코드가 좋습니다. 외부인에게는 어렵지만 배울 수 있습니다. 궁극적으로 코드는 몇 년 동안 유지되어야하므로 기본 프로그램이 평범한 방식으로 표현 될 수있는 관용구 내에서 언어를 찾을 수 있다면 이것이 바로 당신이해야 할 일입니다.

관용구 (또는 기본 언어 기능)의 남용과 같은 것이 분명히 있음을 분명히하겠습니다. C ++ 템플릿을 사용하여 컴파일 타임에 응용 프로그램 논리의 중요한 부분을 실행하거나 완전한 Lisp 프로그램이 실제 문제를 실제로 예측할 수없는 방식으로 전개하는 매크로를 호출하는 경우 간단한 문제에 대한 Java 솔루션이 FizzBuzzEnterpriseEdition 의 비율 ... 당신이 잘못하고 있습니다.

사람들은 코드를 쉽게 읽을 수 있어야한다고 말합니다. 그것은 진실의 절반에 불과합니다. 이해하기 쉬워야하며 추론하기도 쉬워야합니다. 이를 위해서는 추상화를 적절히 사용해야합니다. 대부분의 경우와 마찬가지로 올바른 균형을 유지하는 것이 중요합니다.


FizzBuzzEnterpriseEdition 링크에만 +1을 줄 수 있으면 좋겠습니다 ... :-D
cmaster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.