단순성이 항상 가독성을 향상 시킵니까?
나는 아마도 약간의 논쟁으로, 절대로 그렇지 않다고 말할 것이다 .
퍼블릭 인터페이스에서 200 개의 멤버 함수를 가진 클래스를 나에게 전달할 수 있으며, 가장 인간이 읽을 수있는 퍼블릭 인터페이스 일 수 있습니다. 그러한 코드와 그 문서를 우연히 읽는 것은 기쁨 일 것입니다. 그러나 가독성에도 불구하고 이러한 함수가 서로 상호 작용하는 방식에 관심이 있고 오용으로 인해 까다로운 에지 사례를 조심해야하기 때문에 "간단한"이라고 부르지 않습니다.
사람의 실수를 방지하고 코드의 유지 관리 성을 향상시키는 측면에서 "가독성"이 가장 중요하지 않기 때문에 200 개까지 읽기가 쉽지 않은 20 개의 멤버 함수가있는 클래스를 선호합니다. 우리는 그것을 바꿀 수 있습니다.
그러나 이것은 모두 "단순성"에 대한 우리의 개인적 정의에 달려 있습니다. "가독성은"일반적으로 변화하지 않는 그 누군가가 우리 단순한 인간의 나머지 부분을 잊고, 예를 들어, 매우 "읽기"가 될 정규식 고려하는 것이 너무 많은 전문 지식과 실력을 인수하지 않는 한, 우리 사이에 격렬하게.
간단
오래 전에 "단순함"이 "가능한 한 읽기 쉬운"을 의미한다고 생각했던 시간이있었습니다. 그래서 많은 편의 기능으로 C 코드를 작성하여 구문을 개선하고 가능한 한 쉽게 읽고 쓸 수 있도록 노력했습니다.
결과적으로 매우 크고 풍부하며 높은 수준의 라이브러리를 설계하여 모든 자연스런 인간 사고에 대한 함수를 모델링하려고 시도했습니다. 도우미는 도우미를 돕는 도우미는 모두 클라이언트 코드를보다 읽기 쉬운 구문으로 만듭니다. 내가 작성한 코드는 가장 "읽기 쉬운"코드 일 수도 있지만 가장 "관리 불가능한"코드 나 "복잡한"코드이기도합니다.
리스프
그러나 나는 90 년대 중반 (후발 자)에 LISP와 짧은 열정을 가지고있었습니다. 그것은 "단순성"에 대한 나의 모든 생각을 바꾸었다.
LISP는 가장 읽기 쉬운 언어 가 아닙니다 . 중첩 된 괄호의 보트로드로 재귀 함수를 호출하는 동안 CDR과 CAR을 추출하는 것이 매우 "판독 가능"하다고 아무도 생각하지 않습니다.
그럼에도 불구하고, 내 두뇌가 언어의 이상한 구문과 일을하는 완전히 재귀적인 방식으로 둘러 싸이려고 애 쓰고 난 후에, 그것은 단순성에 대한 나의 생각을 영구적으로 바꾸었다.
내가 LISP에서 작성한 코드로 찾은 것은 더 이상 미묘한 오류를 일으키지 않았다는 것입니다. 미묘하고 예상치 못한 부작용으로 기능이 수행하고 누락 된 것을 오해하지 않았습니다. 나는 일반적으로 변경하고 올바른 프로그램을 작성하는 데 더 쉬운 시간을 보냈습니다.
LISP 후, 단순함은 미니멀리즘, 대칭, 유연성, 부작용 감소, 무한하지만 다양한 방식으로 결합되는 더 유연한 기능에 관한 것이되었습니다.
가장 안정적인 코드는 존재하지 않는 코드라는 사고 방식에 감사하게되었습니다. 그것은 조잡한 척도이지만, 수량에 기초한 코드의 신뢰성에 대한 가능성을 보는 경향이 있습니다. 최대한의 구문 적 편의성과 가독성을 찾는 것은 그 양을 크게 증가시키는 경향이 있습니다.
미니멀리즘
LISP 마인드가 내장되어있어 미니멀리즘 API를 선호하게되었습니다. 나는 "편리한"헬퍼의 보트로드를 제공하고 코드를 "읽기"쉽지만 잠재적으로 넘어갈 수있는 것보다 덜 편리하고 잠재력이 더 적은 읽기 쉽지만 신뢰성이 높고 유연한 기능을 갖춘 라이브러리를 선호합니다. 이러한 수천 가지 기능 중 하나의 기능에 대한 오해로 인한 불안정성과 놀라움에 대한 더 많은 문제.
안전
LISP의 또 다른 점은 안전이었습니다. 그것은 최소한의 부작용과 순수한 기능을 장려했으며, 언어로 읽고 쓰는 어려움이 10 초 후에 발견 할 수있는 명백한 실수를 증가 시켰지만 더 이상 미묘한 실수를하는 것을 보지 못했습니다.
순수한 함수와 불변의 상태는 다음과 같은 구문에도 불구하고 내가 감당할 수있을 때마다 나에게 더 좋아졌습니다.
sword = sharpen(sword)
...보다 생각이 덜 간단하고 인간의 생각과 분리되어 있습니다.
sharpen(sword)
가독성 vs. 간단
다시, LISP는 가장 "읽기 쉬운"언어가 아닙니다. 많은 논리를 작은 코드 섹션 (한 줄에 여러 사람이 생각할 수 있음)으로 묶을 수 있습니다. "가독성"에 대해 한 줄에 한 사람의 생각을 이상적으로 선호하는 경향이 있지만 반드시 "단순성"에 대한 것은 아닙니다.
이러한 "간단한"정의에서는 때때로 "단순한"이 실제로 "읽기 쉬운"과 다소 경쟁 할 수 있습니다. 이것은 인터페이스 디자인 관점에서 더 많은 것을 고려하고 있습니다.
간단한 인터페이스는 사용하기에 훨씬 적은 것을 배워야하며, 미니멀리즘의 결과로 잠재적으로 더 큰 신뢰성과 문제를 안게됩니다. 주제에 대한 포괄적 인 문서는 방대한 양의 책이 아니라 소책자에 적합 할 수 있습니다. 그럼에도 불구하고 좀 더 성가신 작업이 필요하고 읽을 수없는 코드가 생성 될 수 있습니다.
"간단하게"는 시스템의 기능을 폭넓게 이해하는 능력을 향상시킵니다. "읽을 수있는"기능은 각 작은 코드 줄을 자연 언어와 생각에 연결하는 능력을 향상 시키며, 특히 언어에 능숙하지 않은 경우 한 줄의 코드가 무엇을하는지 이해하는 속도를 높일 수 있습니다.
정규식은 내가 "매우 간단한"것으로 간주하는 예입니다. 개인적인 취향으로는 "너무 단순하고 읽을 수 없습니다". 이러한 극단 사이에는 균형 잡힌 행동이 있지만 정규 표현식은 정의 할 때 LISP와 같은 단순성 품질을 가지고 있습니다 : 미니멀리즘, 대칭, 놀라운 유연성, 신뢰성 등. 정규식의 문제는 너무 간단하여 내가 유창하게 될 것이라고 생각하지 않는 시점까지 너무 읽을 수 없게되었습니다 (내 두뇌는 그렇게 작동하지 않으며 정규식 코드를 유창하게 작성할 수있는 사람들을 부러워합니다).
어쨌든, 그것은 "단순성"에 대한 나의 정의이며, 그것은 "가독성"과 완전히 독립적이며 때로는 다른 것을 방해 할 수있어보다 "구문 적으로 편리"하고 읽을 수 있지만 더 큰 라이브러리 또는 불편하고 읽기 쉽지는 않지만 더 작은 라이브러리입니다. 나는 가독성에 대한 약간의 비용과 더 자연스러운 인간 구문 (그러나 정규 표현식의 시점이 아닌)에서도 미니멀리즘에 대한 강한 선호를 가지고, 진정한 "이해의 편의성"과 진정한 "유지 보수성"우선 순위를 발견했다. . YMMV.