나는 종종 개발자들이 아름다운 코드를 작성해야한다는 것을 읽지 만 초보자 인 경우 아름다운 코드가 무엇인지 어떻게 인식하지 못하는가?
중요한 질문은 : 아름다운 코드를 작성하는 방법과 코드 품질을 향상시키기위한 실용적인 습관은 무엇입니까? , 내가 작성한 코드를 아름답게 만들기 위해 무엇을 신경 써야합니까?
나는 종종 개발자들이 아름다운 코드를 작성해야한다는 것을 읽지 만 초보자 인 경우 아름다운 코드가 무엇인지 어떻게 인식하지 못하는가?
중요한 질문은 : 아름다운 코드를 작성하는 방법과 코드 품질을 향상시키기위한 실용적인 습관은 무엇입니까? , 내가 작성한 코드를 아름답게 만들기 위해 무엇을 신경 써야합니까?
답변:
"아름다움은 눈의 판단에 의해 산다".
즉, 대부분의 프로그래머는 아름다운 코드가 선명도와 투명성, 우아함, 효율성 및 미학 사이의 균형을 보여 준다는 데 동의 할 것입니다.
명확성과 투명성 : 명확성은 독자가 코드의 기능을 쉽게 추론 할 수 있습니다. 투명한 코드는 보이는 것처럼 작동합니다. 코드가 한 가지 일을하는 것처럼 보이지만 실제로 다른 것 (또는 다른 것)을하는 경우 투명하지 않습니다. 오해의 소지가 있습니다.
우아함 : 대부분의 알고리즘을 구현하는 방법은 여러 가지가 있지만 일부 방법은 서투른 반면 다른 방법은 깔끔하고 우아합니다. 간결함은 종종 우아함을 더하지만 과도한 간결함은 선명도를 떨어 뜨릴 수 있습니다.
효율성 : 불필요한 리소스 사용 (예 : CPU 시간, 메모리 및 I / O) 방지
미학 : 눈에 편합니다. 이것은 매우 주관적입니다. 그것은 주로 스타일로 귀착됩니다. 중요한 고려 사항 중 하나는 일관된 스타일을 유지하는 것 입니다. 예를 들어 들여 쓰기 스타일을 변경하는 코드는보기 흉합니다.
아름다운 코드가 다음과 같다고 사람들이 당신을 속이게하지 마십시오.
그렇지 않기 때문입니다. 이와 같은 코드는 귀엽고 한 눈에 볼만한 가치가 있지만 해결하려는 코드 종류는 아닙니다.
그리고 당신은 다양한 람다 또는 온라인에 대해 읽은 것을 상속하는 멋진 재귀 메타 템플릿 템플릿 정적 다형성을 알고 있습니까? 혁신적이고 멋진 트릭을 사용해야 할 분명한 이유없이 뛰어 넘기를 원할 수도 있습니다. 그러나 언어의 경계를 넓히는 코드는 아름답 지 않습니다.
그들은 섹시하다 .
재미 있지만 스스로에게 물어보십시오.이 언어의 해부학을 탐구하는 데 시간을 보내고 싶습니까, 아니면 언어와 함께 일하고 아름다운 것을 만들고 싶습니까? 결국, 프로그래밍 언어는 단지 만드는 도구 일뿐입니다.
그렇다면 아름다운 코드는 무엇입니까?
아름다운 코드 = 유지 보수 가능한 코드. 그게 다야!
그것이 공식입니다!
무언가를 쓸 수 있다면 몇 개월 후에 다시 돌아와서 계속 발전해 나가면 아름답습니다. 1 년 후 기능을 추가하고 기존 기능을 조정하고 비교적 쉽게 작업을 수행 할 수 있다는 것을 알고 있다면, 그것은 아름답습니다. 다른 사람들이 코드베이스에 들어서서 물건이 정리되어 무슨 일이 일어나고 있는지 빠르게 알아낼 수 있다면 머리카락이 많아지고 아름답습니다.
그래서 당신이 물어보고 싶은 실제 질문은 "유지 보수가 더 쉬운 코드를 어떻게 작성합니까?" 나는 그것이 더 큰 질문이며, 그것은 매우 창조적 인 훈련입니다. 코드를 계속 작성하되 이번에는 더 아름답을지 묻지 않습니다. 유지 관리가 더 쉬운 지 자문 해보십시오.
나는 이것을 "아름다운 강령"이 객관적이거나 특히 유용한 용어가 아니라는 점을 취한다. 그리고 우리는 그것을 정의하려고 시도해서는 안됩니다.
영어 단어 "beauty"의 일반적인 사전 정의는 다음과 같습니다.
(출처 http://dictionary.com )
공통점은 "아름다움"이 미적으로 기쁘게하는 것입니다. "아름다움은 보는 사람의 눈에있다"라는 말에서 알 수 있듯이 그것은 반드시 주관적 이다.
우리는 "beauty"라는 단어를 코드에 적용 할 수 있으며, 명백한 의미는 코드가 "미학적으로 기쁘다"는 것입니다.
그러나 "아름다운 코드"는 (다른 답변에서 제안한) 특정 속성 세트를 가지고 있다고 말하면 미적으로 기쁘게 하는 명백한 의미의 모순입니다 . 미학은 사람들이 개인을 어떻게 인식 하는지에 관한 것입니다.
또는 다른 말로하면, 누군가 내가 아름답다고 생각 해야하는 것을 말하거나 사람들, 예술 작품 또는 ... 코드에서 누군가에게 말하는 것에 대해 모호한 것이 있습니다.
내가 생각하기에 아름다운 코드는 내가 아름답다고 생각하는 코드입니다. 그것은 주관적이고 개인이며, 그냥 그대로 두십시오.
여기 내 조언이 있습니다.
프로그래머가 아닌 사람에게 "아름다운 코드"를 어떻게 설명 할 수 있습니까?에 대한 답변을 살펴보십시오 . 그들이 어떤 특징에 초점을 맞추고 있는지보십시오. 그런 다음 Code Complete 와 같은 책을 집어 읽고 더 나은 코드를 작성하는 방법에 대한 조언을 얻으십시오.
어느 시점에서 그것은 "이것은 못 생겼다." 직접적인 미적 반응이 될 것입니다. 그리고 그것을 보면 프로그래머처럼 코드를보고 있다는 것을 알 수 있으며, 더보기 좋은 코드가 무엇인지 알기 때문에 추악함을 볼 수 있습니다.
아름다운 코드에 대해 자주 읽는다고해서 코드를 작성하는 사람들이 동일한 정의를 갖는 것은 아닙니다. 안타깝게도 귀하의 질문으로 판단하여 처음부터 그것을 정의하는 데 귀찮은 것처럼 보이지 않습니다.
나에게 아름다운 코드는 :
표현 적이 지 않은 간결한 코드는 암호가 될 수 있으며 간결하지 않은 표현 코드는 부풀어지고 지루한 경향이 있으므로 둘 다 필요합니다.
아름다움은 코드를 아름답게 만드는 것의 일부로 유지 관리 성을 포함하지 않을 것입니다. 아름다움은 당신이 행동하는 것이 아니라보고 읽고 읽는 것입니다. 그러나 다시 그것은 내 개인적인 견해입니다.
아름다운 코드라는 용어는 매우 모호하고 추상적 인 용어입니다. 그것이 무엇을 의미하는지, 그리고 그것이 무엇을 의미하는지 이해하기는 쉽지만 결코 부차적 인 목표 이상으로 여겨져서는 안됩니다.
그것은 많은 코드 커버리지 메트릭을 상기시킵니다. 당신이 충분히 높은 숫자를 얻을 때 당신은 휴식을 취하고 다른 것으로 갈 수 있습니다. 커버리지가 약 80 % 인 코드베이스를 사용하는 것은 훌륭하지만 방탄은 아니지만 차가워지고 다른 일을하기에 충분합니다. 40 %의 적용 범위를 갖는 것은 매우 무섭기 때문에 그 수를 올리는 것이 좋습니다.
요점은 코드 범위가 숫자가 적을 때만 실제로 의미가 있다는 것입니다. 따라서 낮게 두지 마십시오. 적용 범위가 특정 지점으로 올라가면 다른 것으로 이동하십시오.
마찬가지로 아름다운 코드도 훌륭합니다. 좋은 코드가 있다면, 다른 것으로 넘어가십시오. 그것에 대해 너무 강조하지 마십시오. 당신은 결코 그 100 % 점수에 도달하지 않을 것이고, 만약 당신이 그렇게한다면, 그것이 읽은 것, 모양에 너무 집중하고 그것이하는 것, 또는 그것이하는 방식에 너무 집중하지 않았 음을 알게 될 것입니다 . 따라서 합당한 점수를 얻은 다음 중단하십시오.
그러나 코드가 모호한 경우, 스파게티 코드가 복잡하고 혼란 스러우면 실제로 파일을 열어야하는 경우 주석이나 문서 등이 없으면 수정하십시오. 그리고 최대한 빨리해라.
시간이 지남에 따라 코드베이스가 일반적으로 더 깨끗하고 일반적으로 더 밝고 일반적으로 더 아름답고 덜 중요하게 사용할 수 있습니다. 아름다운 코드를 작성하는 것은 한 단계 프로세스가 아닙니다.
마법 철학은 없습니다. 1000 개의 작은 단계가 모두 함께 이루어졌으며,이 코드는 코드가 아름답게 보이는 것과는 아무런 관련이없는 구체적인 목적으로 사용됩니다. 그러나 당신이 그것들을 모두 함께 제공 할 때, 그것들은 그 부분의 합으로 아름다운 코드를 형성합니다. 볼트론처럼. 아니면 선장 행성.
나는 여기에 대한 답변에 실제로 동의하지만, 기술적으로 덜 접근하면 아름다운 코드는 잘 정립되고 정확한 아직 간단한 언어를 통해 드러나는 문제에 대한 저자의 생각의 명확성을 표현한다고 말할 것입니다.
저에게있어 아름다운 코드를 보는 것은 예술 작품을 보는 것과 매우 흡사합니다. 제작자의 의도를 보여주는 새로운 세부 사항을 보는 것뿐만 아니라 각기 다른 부분이 어떻게 구현되어 각기 많은 질문에 대한 답을 얻은 다음 마지막으로, 어떻게 존재가 자연 법칙처럼 느껴져서 장엄하고 감동적이며 아름답다는 경외의 말로만 묘사 될 수 있도록 모든 것이 조화를 이룹니다.
따라서 프로그래머로서의 경력에서 당신은 다른 사람들이 지식이 부족하기 때문에 이해할 수없는 아름다운 코드를 발견하거나 너무 많은 아름다움으로 인해 더 이상 주목할만한 것을 찾지 못할 수도 있습니다.)
아름다운 코드는 달리 언급 된 것처럼 실용적 인 특성을 모두 가지고 있습니다.
세 가지 기준이 있습니다.