프로그래머가 아닌 사람에게“아름다운 코드”를 어떻게 설명 할 수 있습니까? [닫은]


44

프로그래머가 아닌 친구와 이야기 할 때 나는 "아름다운 코드"라는 개념을 언급했고 그 의미를 이해하고 싶었지만 문맥.

어쨌든 모든 코드가 누군가에게 횡설수설처럼 보일 때 어떤 코드를 다른 코드보다 더 아름답게 만드는 이유를 어떻게 설명 할 수 있습니까? 비유도 유용 할 수 있습니다.


12
코드를 보여주지 않고 프로그래머 에게 아름다운 코드를 설명 할 수 있습니까 ? 설명 자체는 예술입니다.
kojiro

9
우리가 여기서 좋은 아이디어를 생각 해낼 수 있다면, 나는 비 수학자에게 아름다운 증거를 묘사하기 위해 그것을 사용할 수 있습니다.
David Thornley

아름다운 코드는 작업을 올바르게 수행하면서 더 단순하고 적은 아이디어를 사용하는 코드 일 수 있습니다. 아이러니하게도 간단한 아이디어를 찾는 이전의 작업은 복잡한 일이 될 수 있으며, 우리는 그것을 감탄합니다. 죄송합니다. 다른 사람에게 더 자연스럽게 설명 할 수있는 방법을 찾을 수 없습니다.
LatinSuD

IDE 코드를 Comic Sans로 설정하면 아름다운 코드입니다. 한숨
커크 브로드 허스트

답변:


88

언어 유추

가장 좋아하는 이야기를 생각해보십시오. 아마 아름답게 쓰여졌을 것입니다. 영어를 사용하지 않는 사람에게는 이해하지 못하거나 왜 아름다운지 이해하기 때문에 그 아름다움을 떨어 뜨리지 않습니다.

건축 비유

거칠게 지어진 집을 생각해보십시오. 그것은 분명히 벽돌로 지어진 문과 창문이 있습니다. 기초가 불충분 한 한쪽 구석에 박격포가 갈라졌습니다. 그리고 아무도 존재하지 않는 2 층으로 이어지는 계단이 왜 있는지 이해할 수 없습니다. 화장실은 배기 팬이없는 주방 옆에 지어졌으며 우세한 바람이 집안의 나머지 부분을 통해 불쾌한 늪지 냄새를 날릴 수 있도록 배치되었습니다. 열린 벽난로의 굴뚝은 나무에서 5cm 떨어져있어 불을 붙일 수 있습니다.

모든 것이 있어야하는 집과는 대조적으로 유지 보수가 적고 완벽하게 단열되어 겨울에는 약간의 태양열이 따뜻하게 유지되고 환기에서 에너지가 회수되므로 신선한 공기와 쾌적한 온도를 모두 누릴 수 있습니다. 무시할만한 전력 요금. 불에 타지 않도록 불연성 재료로 제작되었습니다. 9.0 지진과 F5 토네이도를 견뎌 낼 것입니다. 다른 집보다 30 % 나 더 비싸지 만 5 년 안에 그 차액을 지불 할 것입니다. 그리고 그것은 미적으로 유쾌합니다.

GUI는 집의 외형과 같습니다. 사용자는 아름다운 집을 감상 할 수있는 것처럼 GUI에서 아름다움을 인식 할 수 있습니다. 그러나 더 중요한 것은 아마도 집과 프로그램 모두에서 디자인의 진정한 아름다움은 처음에는 눈에 보이지 않지만 관계없이 중요하거나 좋은 것입니다.


19
그 건축 비유는 완벽합니다!
다니엘 밴더 스 루이스

1
+1 @ user21007 : 오래 전부터 저는 거대한 사이트의 정보 아키텍트였습니다. 모두가 건축 비유와 작동하고 올바르게 느끼는 시스템의 개념을 얻습니다.
blunders

1
GUI가있는 제품과 유사합니다. 프레임 워크와 라이브러리에는 좋지 않습니다.
Den

1
종류의이 고라 생각 나게 : youtube.com/watch?v=p9tjs-6wbsI
JohnL

4
나는 과거에 그 언어 비유를 많이 사용했습니다. "이 못생긴 코드로 작업하고 있습니다 ..." "잠깐, 못생긴 게 무슨 뜻입니까?" "u 참조, 그 글을
좋아

28

차에 대해 생각해보십시오.

우리 대부분은 차를보고 몸만 볼 수 있습니다. 누군가 딩을 수리하고 차에 새로운 페인트 작업을하면 훨씬 더 아름답게 보일 것입니다. 기본적으로 같은 차이지만 그것이 우리가 보는 전부입니다.

정비공이 차를 열고 엔진을 봅니다. 그들은 그 엔진이 얼마나 좋은지 봅니다. 그들은 모든 것이 쉽게 접근하고 유지하며 작업 할 수 있도록 마련된 것을 본다. 그들은 부품을보고 얼마나 잘 설계되었는지 알고 있습니다. 숙련 된 정비공에게는 잘 정비 된 고품질 자동차 엔진이 아름다움이됩니다. 무엇이 아름답게 만드는지 설명 할 수는 없지만, 아름다움에 대한 개념은 유지 보수 비용 절감, 자동차 수명 연장 및 성능 향상으로 이어질 수 있습니다. 당신이 그것을 볼 수는 없지만이 모든 것이 그 차의 가치를 더합니다.

웹 사이트 나 응용 프로그램을 보면 대부분의 사람들이 자동차를 보는 ​​것처럼 웹 사이트를보고 있습니다. 코드를 볼 때 정비공이 자동차 엔진을 보는 것처럼 코드를보고 있습니다. 내가하는 것처럼 그 코드의 아름다움을 결코 경험할 수는 없으며 말 그대로 당신에게는 보이지 않습니다. 그러나 그 아름다움은 기계공의 아름다움과 마찬가지로 중요합니다. 소프트웨어가 얼마나 잘 실행되는지, 어떤 종류의 문제가 있는지, 소프트웨어를 얼마나 쉽게 개선 할 수 있는지 등을 결정합니다. 이 모든 것을 볼 수는 없지만 소프트웨어의 가치를 더합니다.


11

존재하는 모든 코드가 필요하며 설명이 필요하지 않습니다.


2
@zdan : 나는 그것을 아름답게 찾는 사람들이 필요한 지식을 가지고 있다고해서 반박합니다. (따라서 보는 사람의 눈에) 게다가, 영리한! = 아름다운 IMO.
Steven Evers

2
@zdan : 그렇게 많은 설명이 필요할 때는 "아름다운 코드"가 아니라 "영리한 핵"입니다.
메이슨 휠러

1
FFT는 매우 똑똑한 해킹이지만 아름답게 부를 방법은 없습니다.
Kyte

1
나는 대부분 SnOrfus에 동의합니다. 그러나 나에게는 아름다운 코드가 필요하고 충분하며 자명해야 할뿐만 아니라 주관적으로 완벽하고 가벼워 야합니다. 나는 많은 코드가 SnOrfus에 의해 노출 된 기준을 충족시킬 수 있다고 생각하지만 다른 방법으로는 꽤 번거 롭거나 불완전하다고 느낍니다. 나는 그런 코드를 아름답게 부릅니다.
asoundmove 2

1
나는 "무엇이 본질적으로 줄었지만 더 이상은 없다"는 생각이 올바른 방향에 있다고 생각합니다. 그러나 유지 관리 할 수없고 작업에 대해 잘못된 언어로 작성된 내용도이 정의에 적합합니다. 또한 설명이 필요하지 않기 때문에 정의에 맞는 대부분의 작업도 사소한 것이어야합니다. "Hello World"가 아름답다고 생각하지 않습니다.
user21007

5

나는시를 언급 할 것이다 :

잘 쓰여진시는 같은 주제에 대해 잘못 번역 된 매뉴얼의 추출물과는 다른 느낌을 가지고 있습니다.


이것은 나의 생각이기도하지만 모두가시를 좋아하거나 이해하는 것은 아닙니다. 좋은 노래와 나쁜 노래의 음악도 염두에 두었지만, 꽤 주관적이기도합니다.
PSU

무엇입니까 ... 25 인터페이스 + 25 클래스는 모두 추상 클래스에서 상속됩니까? 방금 빨간 바퀴 손수레를 원했습니다. 어쩌면 닭일 수도 있습니다.
Erik Reppen

5

코딩 문제는 개념화에 관한 것이므로 아름다운 코드는 문제의 놀라운 개념화를 나타냅니다.

예를 들어, 우리는 하나의 문제가 기존의 해결 된 문제로 축소되어 문제 자체성격에 대한 통찰력 을 빌릴 수있을 때 좋아합니다 .

때때로 문제의 재 개념화가 그렇게 쉽게 보일 수 있습니다. 우리 는 어려운 작업을 단순화하는 간단한 트릭이 필요한 우아한 솔루션에 대해 이야기 합니다.

나에게 Quicksort는 아름다운 예입니다. 배열에서 임의의 요소를 선택한 다음 배열의 다른 모든 요소를 ​​비교합니다. 숫자가 그보다 작 으면 더미 A에 넣으십시오. 숫자가 그보다 크면 더미 B에 넣으십시오. 이제 삼각형 부등식으로 더미 A의 요소를 더미 B의 요소와 비교할 필요가 없습니다. A와 B의 되풀이가 완료되었습니다 .


5

나에게 이것을 상기시킨다 :

http://imgs.xkcd.com/comics/lisp.jpg

출처 : XKCD-LISP


5
특히 호버 텍스트가 누락 된 경우 링크로 사용하는 것이 좋습니다.
user151019

1
이 경우 호버 텍스트는 농담의 절반입니다.

4

완벽한 코드는 종종 상충되는 목표를 동시에 만족시켜야하기 때문에 사소한 코드는 완벽 할 수 없습니다. 따라서 아름다운 코드는 현재 수행중인 작업에 대한 모든 중요한 속성의 균형을 완벽하게 유지하며 대부분 생각할 수있는 것보다이 모든 것을 동시에 만족시키는 데 더 가깝습니다. 특별한 순서는 없습니다 :

  • 가독성
  • 간결
  • 능률
  • 적응성
  • 명시 성
  • 견고성
  • 안전 / 바보 방지
  • 완전성
  • 일관성
  • 사용 편의성 (API)

2

잭슨 폴락 (Jackson Pollock) 그림은 어떤 사람들에게는 아름답고 다른 사람들에게는 횡설수설의 예입니다.


흠 ... 느낌이 없어요.
동적

프로그래밍은 예술 (또는 그 문제에 대한 과학)보다 더 정교합니다. 내가 두드리는 것도 아닙니다.
Erik Reppen 2016 년

1

사람이 수학에 정통한 경우, 나는 아름다운 코드를 문제에 대한 우아한 해결책과 비교하는 것을 좋아합니다.


1

좋은 코드의 일부 측면은 다음과 같습니다.

  1. 그것은 모두 같은 방향을 가리키는 많은 작은 세부 사항가지고 있습니다.
  2. 그것은 구조 에서 일관되며 , 모든 부분은 동일한 패턴을 따릅니다.
  3. 그러나 그것은 반복되지 않고 모든 부분이 다릅니다.
  4. 또한 잘못된 것으로 간주되는 동작허용하지 않습니다
  5. 그것은 갖는 상이한 상태 중 가장 작은 번호를
  6. 함수 프로토 타입을 읽음으로써 코드 의 전체 동작이해할 수 있습니다
  7. 부작용없습니다
  8. 그것의 실행은 중지 보장
  9. 그것은 모든 고급 기능을 사용하지 않는 프로그래밍 언어에서 사용할 수를
  10. 그것은 너무 복잡하지 가 해결 문제의 복잡성에 비해
  11. 이없는 오류 또는에서 정의되지 않은 동작
  12. 여러 공급 업체의 컴파일러 로 컴파일수 있습니다.
  13. 그것은이 없습니다 종속성 사용하지 않는 코드를

0

나에게 언어는 나의 도구이다.

다른 장인들과 마찬가지로 저는 도구가 박하 상태 인 것을 선호합니다.

개념의 명확성, 유지 보수성 및 가독성과 관련하여 코드의 상태가 우수합니다. 코드가 더 좋습니다.

따라서 잘 작성된 코드를 읽는 것은 잘 만들어진 도구로 도구 상자를 여는 것과 같습니다.

나는이 비유를 몇 차례 성공했다. 특히 실용적이거나 예술적인 배경을 가진 사람들은 이런 식으로 깨끗하고 아름다운 코드의 개념을 이해하는 것 같습니다.


0

나는 그것이 무엇을 따라 생각 아름다운 코드에 의해 의미한다.

나에게, 코드는 읽을 수있을 때 아름답다. 평신도는 프로그래밍 개념과 관련하여 발생할 수있는 문제 외에도 최소한 코드가 무엇을하고 있는지 이해하고 이해할 수 있습니다.

다른 답변들에서 논의했듯이 코드는 몇 가지 간단한 개념을 결합하여 복잡한 기능을 달성한다는 점에서 아름답습니다. 프로그래머가 아닌 사람에게 어떤 종류의 비유가 가장 좋은지 잘 모르는 것은 평신도에 달려 있습니다. NeoCube 와 같은 퍼즐 장난감이 오릅니다 .


0

나의 겸손하고 개인적인 의견으로는, 아름다운 코드는 좋은 소설 책과 같습니다.

  • 처음부터 끝까지 읽을 수 있습니다. 현재 페이지를 이해하기 위해 책의 다음 페이지로 건너 뛸 필요는 없습니다.
  • 그것은 항상 같은 말을하고 있다면 불필요한 반복이 없습니다 / 책은 다소 둔합니다.
  • 각 부분의 의도는 거의 항상 분명합니다. (시 / 코드 골프 xD가 아닌 한) 책을 읽기 위해 항상 옆에 사전을 둘 필요는 없습니다.
  • 저렴한 크기와 복잡성 (모듈, 함수, 문장 등)의 하부 구조로 구성되어 있으며 너무 많은 '중첩'/ 장, 단락 및 문장의 균형이 맞지 않습니다. 너무 많은 수준의 문장 종속 등을 사용하지 않습니다.
  • 그것은 적절한 조판을 가진 책처럼 미학적 방식으로 (눈에 잘 띄게, 올바르게 구분 된 블록 등) 눈에 즐겁습니다.

0

모두가 자신의 역할을 알고있는 린 평균 회사와 같으며 누가 무엇을 잘하는지 알아 내기가 쉽고 노력의 중복이 없습니다.

평범함이 우호적 인 사무실 공간, 세 명의 관리자는 TPS 보고서에 대해 벌레보다 더 나은 조치를 취할 수 없습니다.! @ # $ ing FAX MACHINE Never Works! 직원은 일주일에 약 15 분의 실제 작업을 수행 할 수 있습니다. 누군가가 그를 해고하는 것을 잊었 기 때문에 직원은 더 이상 기술적으로 일하지 않을 수도 있습니다 (아무도 효율적으로 일하지 않으며 그들이 무엇을하려고하는지 평가하기가 어렵 기 때문에 실제로 말하기가 어렵습니다). 그리고 실제적인 일을하려면 누군가가 실제로 문제를 해결하지 않더라도 이력서에 대해 잘 읽고 생각할 수있는 터무니없이 복잡한 시스템을 탐색해야합니다.


-1

"아름다운 코드"는없고 "우아한 알고리즘"과 "우아한 디자인"이 있습니다. 프로그래머가 아닌 사람도 디자인을 이해할 수 있습니다.

나는 "아름다운 코드"에 대해 논쟁하는 프로그래머를 싫어합니다. 어떤 방법 으로든 인터프리터 나 컴파일러가 어떻게 그것을 소화하고 기계가 무엇을하는지 알지 못하기 때문에 아이들에게 어떻게 엄마를 보여주는 지 더 알 수 있습니다 그의 이야기는 훌륭하지만 실제로는 그렇지 않습니다.


-1

좋은 사진이 왜 좋은지 사람들에게 설명해 주시겠습니까? 아뇨. 당신은 그들에게 그림을 보여줍니다. 가장 좋은 방법은 정말 우아하고 아름답고 완벽한 작은 코드를 보여주는 것입니다 (조 평균이 코딩 한 방법과 비교).

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