아름다운 코드는 무엇입니까? [닫은]


30

나는 종종 개발자들이 아름다운 코드를 작성해야한다는 것을 읽지 만 초보자 인 경우 아름다운 코드가 무엇인지 어떻게 인식하지 못하는가?

중요한 질문은 : 아름다운 코드를 작성하는 방법과 코드 품질을 향상시키기위한 실용적인 습관은 무엇입니까? , 내가 작성한 코드를 아름답게 만들기 위해 무엇을 신경 써야합니까?



4
그것은 단지 말의 그림 일뿐입니다. 아름다움은 보는 사람의 눈에 있으며, 그 너머에는 문제를 해결하기 위해 텍스트 파일에 넣은 지시 사항의 명확성 및 사용자 또는 다른 사람이 쉽게 그것을 수정하고 유지할 수있는 내용이 있습니다. 미래. 그 외에도 코드가 얼마나 더 아름답게 표현되는지는 들여 쓰기, 모듈 구조, 복잡성, 쉬운 가독성과 동시에 효율성, 명명 규칙 등 전적으로 사용자에게 달려 있습니다.
bad_keypoints

Beautiful Code : Leading Programmers 를 읽는 데 관심이있을 것입니다 .
UncleZeiv

답변:


55

"아름다움은 눈의 판단에 의해 산다".

즉, 대부분의 프로그래머는 아름다운 코드가 선명도와 투명성, 우아함, 효율성 및 미학 사이의 균형을 보여 준다는 데 동의 할 것입니다.

  • 명확성과 투명성 : 명확성은 독자가 코드의 기능을 쉽게 추론 할 수 있습니다. 투명한 코드는 보이는 것처럼 작동합니다. 코드가 한 가지 일을하는 것처럼 보이지만 실제로 다른 것 (또는 다른 것)을하는 경우 투명하지 않습니다. 오해의 소지가 있습니다.

  • 우아함 : 대부분의 알고리즘을 구현하는 방법은 여러 가지가 있지만 일부 방법은 서투른 반면 다른 방법은 깔끔하고 우아합니다. 간결함은 종종 우아함을 더하지만 과도한 간결함은 선명도를 떨어 뜨릴 수 있습니다.

  • 효율성 : 불필요한 리소스 사용 (예 : CPU 시간, 메모리 및 I / O) 방지

  • 미학 : 눈에 편합니다. 이것은 매우 주관적입니다. 그것은 주로 스타일로 귀착됩니다. 중요한 고려 사항 중 하나는 일관된 스타일을 유지하는 것 입니다. 예를 들어 들여 쓰기 스타일을 변경하는 코드는보기 흉합니다.


11
아름다운 설명, +1
koenmetsu

2
나는 "효율"을 꺼낼 것입니다. 엄격한 의미에서 그것은 긍정적이지만 목록에 포함시키는 것은 잘못 오도 할 수 있습니다. 그것은 일반적으로 다른 것들의 부산물이며 코딩 할 때 2 차적인 관심사가되어야합니다. 주된 이유는 대부분 컴파일러가 어두운 마법을 사용한 후에 만 ​​나타납니다.
DPM

@Jubbat 실제로-때로는 가장 효율적인 솔루션이 실제로 매우 추악한 코드로 이어집니다. (예 : 고전 빠른 역 제곱근 기능)
대럴 호프만

@DarrelHoffman 맞아요. 효율성과 나머지 부분뿐만 아니라 좋은 코드를 정의하는 더 많은 변수에 의해서도 타협은 사실이지만 ( "Code Complete"에는 이에 대한 자세한 설명이 있습니다. 불행히도 아마도 시작 부분에 가까운 책
DPM

@ Jubat : 나는 효율성이 일반적으로 이차적 인 문제라는 데 동의하지만, 여전히 그것이 아름다움 방정식에 영향을 미친다고 생각합니다.
Igby Largeman

20

아름다운 코드가 다음과 같다고 사람들이 당신을 속이게하지 마십시오.

  • 영리한 알고리즘
  • 몰래 언어 기능
  • 가장 적은 양의 키 스트로크로 문제 해결

그렇지 않기 때문입니다. 이와 같은 코드는 귀엽고 한 눈에 볼만한 가치가 있지만 해결하려는 코드 종류는 아닙니다.

그리고 당신은 다양한 람다 또는 온라인에 대해 읽은 것을 상속하는 멋진 재귀 메타 템플릿 템플릿 정적 다형성을 알고 있습니까? 혁신적이고 멋진 트릭을 사용해야 할 분명한 이유없이 뛰어 넘기를 원할 수도 있습니다. 그러나 언어의 경계를 넓히는 코드는 아름답 지 않습니다.

그들은 섹시하다 .
재미 있지만 스스로에게 물어보십시오.이 언어의 해부학을 탐구하는 데 시간을 보내고 싶습니까, 아니면 언어와 함께 일하고 아름다운 것을 만들고 싶습니까? 결국, 프로그래밍 언어는 단지 만드는 도구 일뿐입니다.


그렇다면 아름다운 코드는 무엇입니까?

아름다운 코드 = 유지 보수 가능한 코드. 그게 다야!
그것이 공식입니다!

무언가를 쓸 수 있다면 몇 개월 후에 다시 돌아와서 계속 발전해 나가면 아름답습니다. 1 년 후 기능을 추가하고 기존 기능을 조정하고 비교적 쉽게 작업을 수행 할 수 있다는 것을 알고 있다면, 그것은 아름답습니다. 다른 사람들이 코드베이스에 들어서서 물건이 정리되어 무슨 일이 일어나고 있는지 빠르게 알아낼 수 있다면 머리카락이 많아지고 아름답습니다.

그래서 당신이 물어보고 싶은 실제 질문은 "유지 보수가 더 쉬운 코드를 어떻게 작성합니까?" 나는 그것이 더 큰 질문이며, 그것은 매우 창조적 인 훈련입니다. 코드를 계속 작성하되 이번에는 더 아름답을지 묻지 않습니다. 유지 관리가 더 쉬운 지 자문 해보십시오.


4
제기 한 문제를 해결하기 위해 c2.com/cgi/wiki?KillYourDarlings
jk에

4

나는 이것을 "아름다운 강령"이 객관적이거나 특히 유용한 용어가 아니라는 점을 취한다. 그리고 우리는 그것을 정의하려고 시도해서는 안됩니다.


영어 단어 "beauty"의 일반적인 사전 정의는 다음과 같습니다.

  • "1. 감각을 기뻐하고 마음을 기쁘게하는 사람의 모든 특성 또는 사물의 조합"
  • "1. 마음이나 감각에 강한 미적 즐거움이나 깊은 만족감을주는 사람이나 사물에 존재하는 질."
  • "1. 마음이나 감각에 즐거움을주고 품질이나 형태의 조화, 예술적 우수성, 진실성 및 독창성과 같은 특성과 관련된 품질"

(출처 http://dictionary.com )

공통점은 "아름다움"이 미적으로 기쁘게하는 것입니다. "아름다움은 보는 사람의 눈에있다"라는 말에서 알 수 있듯이 그것은 반드시 주관적 이다.


우리는 "beauty"라는 단어를 코드에 적용 할 수 있으며, 명백한 의미는 코드가 "미학적으로 기쁘다"는 것입니다.

그러나 "아름다운 코드"는 (다른 답변에서 제안한) 특정 속성 세트를 가지고 있다고 말하면 미적으로 기쁘게 하는 명백한 의미의 모순입니다 . 미학은 사람들이 개인을 어떻게 인식 하는지에 관한 것입니다.

또는 다른 말로하면, 누군가 내가 아름답다고 생각 해야하는 것을 말하거나 사람들, 예술 작품 또는 ... 코드에서 누군가에게 말하는 것에 대해 모호한 것이 있습니다.

내가 생각하기에 아름다운 코드는 내가 아름답다고 생각하는 코드입니다. 그것은 주관적이고 개인이며, 그냥 그대로 두십시오.


2

여기 내 조언이 있습니다.

프로그래머가 아닌 사람에게 "아름다운 코드"를 어떻게 설명 할 수 있습니까?에 대한 답변을 살펴보십시오 . 그들이 어떤 특징에 초점을 맞추고 있는지보십시오. 그런 다음 Code Complete 와 같은 책을 집어 읽고 더 나은 코드를 작성하는 방법에 대한 조언을 얻으십시오.

어느 시점에서 그것은 "이것은 못 생겼다." 직접적인 미적 반응이 될 것입니다. 그리고 그것을 보면 프로그래머처럼 코드를보고 있다는 것을 알 수 있으며, 더보기 좋은 코드가 무엇인지 알기 때문에 추악함을 볼 수 있습니다.


1

아름다운 코드에 대해 자주 읽는다고해서 코드를 작성하는 사람들이 동일한 정의를 갖는 것은 아닙니다. 안타깝게도 귀하의 질문으로 판단하여 처음부터 그것을 정의하는 데 귀찮은 것처럼 보이지 않습니다.

나에게 아름다운 코드는 :

  • 나타내는
  • 간결한

표현 적이 지 않은 간결한 코드는 암호가 될 수 있으며 간결하지 않은 표현 코드는 부풀어지고 지루한 경향이 있으므로 둘 다 필요합니다.

아름다움은 코드를 아름답게 만드는 것의 일부로 유지 관리 성을 포함하지 않을 것입니다. 아름다움은 당신이 행동하는 것이 아니라보고 읽고 읽는 것입니다. 그러나 다시 그것은 내 개인적인 견해입니다.


0

아름다운 코드라는 용어는 매우 모호하고 추상적 인 용어입니다. 그것이 무엇을 의미하는지, 그리고 그것이 무엇을 의미하는지 이해하기는 쉽지만 결코 부차적 인 목표 이상으로 여겨져서는 안됩니다.

그것은 많은 코드 커버리지 메트릭을 상기시킵니다. 당신이 충분히 높은 숫자를 얻을 때 당신은 휴식을 취하고 다른 것으로 갈 수 있습니다. 커버리지가 약 80 % 인 코드베이스를 사용하는 것은 훌륭하지만 방탄은 아니지만 차가워지고 다른 일을하기에 충분합니다. 40 %의 적용 범위를 갖는 것은 매우 무섭기 때문에 그 수를 올리는 것이 좋습니다.

요점은 코드 범위가 숫자가 적을 때만 실제로 의미가 있다는 것입니다. 따라서 낮게 두지 마십시오. 적용 범위가 특정 지점으로 올라가면 다른 것으로 이동하십시오.

마찬가지로 아름다운 코드도 훌륭합니다. 좋은 코드가 있다면, 다른 것으로 넘어가십시오. 그것에 대해 너무 강조하지 마십시오. 당신은 결코 그 100 % 점수에 도달하지 않을 것이고, 만약 당신이 그렇게한다면, 그것이 읽은 것, 모양에 너무 집중하고 그것이하는 것, 또는 그것이하는 방식에 너무 집중하지 않았 음을 알게 될 것입니다 . 따라서 합당한 점수를 얻은 다음 중단하십시오.

그러나 코드가 모호한 경우, 스파게티 코드가 복잡하고 혼란 스러우면 실제로 파일을 열어야하는 경우 주석이나 문서 등이 없으면 수정하십시오. 그리고 최대한 빨리해라.

시간이 지남에 따라 코드베이스가 일반적으로 더 깨끗하고 일반적으로 더 밝고 일반적으로 더 아름답고 덜 중요하게 사용할 수 있습니다. 아름다운 코드를 작성하는 것은 한 단계 프로세스가 아닙니다.

마법 철학은 없습니다. 1000 개의 작은 단계가 모두 함께 이루어졌으며,이 코드는 코드가 아름답게 보이는 것과는 아무런 관련이없는 구체적인 목적으로 사용됩니다. 그러나 당신이 그것들을 모두 함께 제공 할 때, 그것들은 그 부분의 합으로 아름다운 코드를 형성합니다. 볼트론처럼. 아니면 선장 행성.


0

나는 여기에 대한 답변에 실제로 동의하지만, 기술적으로 덜 접근하면 아름다운 코드는 잘 정립되고 정확한 아직 간단한 언어를 통해 드러나는 문제에 대한 저자의 생각의 명확성을 표현한다고 말할 것입니다.

저에게있어 아름다운 코드를 보는 것은 예술 작품을 보는 것과 매우 흡사합니다. 제작자의 의도를 보여주는 새로운 세부 사항을 보는 것뿐만 아니라 각기 다른 부분이 어떻게 구현되어 각기 많은 질문에 대한 답을 얻은 다음 마지막으로, 어떻게 존재가 자연 법칙처럼 느껴져서 장엄하고 감동적이며 아름답다는 경외의 말로만 묘사 될 수 있도록 모든 것이 조화를 이룹니다.

따라서 프로그래머로서의 경력에서 당신은 다른 사람들이 지식이 부족하기 때문에 이해할 수없는 아름다운 코드를 발견하거나 너무 많은 아름다움으로 인해 더 이상 주목할만한 것을 찾지 못할 수도 있습니다.)

아름다운 코드는 달리 언급 된 것처럼 실용적 인 특성을 모두 가지고 있습니다.


0

세 가지 기준이 있습니다.

  • 단순 : 최소한 사람이 읽을 수 있어야합니다. 예를 들어, 많은 줄을 가진 솔루션에 대해 O (1)에서 작동하는 코드를 작성할 수 있지만 몇 줄로 0 (n)으로 해결되는 코드를 선호합니다. 극단적 인 상황에서는 변경 될 수 있지만 처음에는 단순성이 중요합니다.
  • 재사용 가능 : 코드는 재사용 가능해야하지만 덮어 쓰지 않아야합니다. 작업이 필요한 경우 몇 년 후에 사용할 수있는 방법을 정의해야합니다.
  • 들여 쓰기 : 아마도 이것이 당신에게는 문제가되지 않지만 초보자 수준에서는 이것이 가장 먼저 해결되어야합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.