프로그래머가 아닌 친구와 이야기 할 때 나는 "아름다운 코드"라는 개념을 언급했고 그 의미를 이해하고 싶었지만 문맥.
어쨌든 모든 코드가 누군가에게 횡설수설처럼 보일 때 어떤 코드를 다른 코드보다 더 아름답게 만드는 이유를 어떻게 설명 할 수 있습니까? 비유도 유용 할 수 있습니다.
프로그래머가 아닌 친구와 이야기 할 때 나는 "아름다운 코드"라는 개념을 언급했고 그 의미를 이해하고 싶었지만 문맥.
어쨌든 모든 코드가 누군가에게 횡설수설처럼 보일 때 어떤 코드를 다른 코드보다 더 아름답게 만드는 이유를 어떻게 설명 할 수 있습니까? 비유도 유용 할 수 있습니다.
답변:
언어 유추
가장 좋아하는 이야기를 생각해보십시오. 아마 아름답게 쓰여졌을 것입니다. 영어를 사용하지 않는 사람에게는 이해하지 못하거나 왜 아름다운지 이해하기 때문에 그 아름다움을 떨어 뜨리지 않습니다.
건축 비유
거칠게 지어진 집을 생각해보십시오. 그것은 분명히 벽돌로 지어진 문과 창문이 있습니다. 기초가 불충분 한 한쪽 구석에 박격포가 갈라졌습니다. 그리고 아무도 존재하지 않는 2 층으로 이어지는 계단이 왜 있는지 이해할 수 없습니다. 화장실은 배기 팬이없는 주방 옆에 지어졌으며 우세한 바람이 집안의 나머지 부분을 통해 불쾌한 늪지 냄새를 날릴 수 있도록 배치되었습니다. 열린 벽난로의 굴뚝은 나무에서 5cm 떨어져있어 불을 붙일 수 있습니다.
모든 것이 있어야하는 집과는 대조적으로 유지 보수가 적고 완벽하게 단열되어 겨울에는 약간의 태양열이 따뜻하게 유지되고 환기에서 에너지가 회수되므로 신선한 공기와 쾌적한 온도를 모두 누릴 수 있습니다. 무시할만한 전력 요금. 불에 타지 않도록 불연성 재료로 제작되었습니다. 9.0 지진과 F5 토네이도를 견뎌 낼 것입니다. 다른 집보다 30 % 나 더 비싸지 만 5 년 안에 그 차액을 지불 할 것입니다. 그리고 그것은 미적으로 유쾌합니다.
GUI는 집의 외형과 같습니다. 사용자는 아름다운 집을 감상 할 수있는 것처럼 GUI에서 아름다움을 인식 할 수 있습니다. 그러나 더 중요한 것은 아마도 집과 프로그램 모두에서 디자인의 진정한 아름다움은 처음에는 눈에 보이지 않지만 관계없이 중요하거나 좋은 것입니다.
차에 대해 생각해보십시오.
우리 대부분은 차를보고 몸만 볼 수 있습니다. 누군가 딩을 수리하고 차에 새로운 페인트 작업을하면 훨씬 더 아름답게 보일 것입니다. 기본적으로 같은 차이지만 그것이 우리가 보는 전부입니다.
정비공이 차를 열고 엔진을 봅니다. 그들은 그 엔진이 얼마나 좋은지 봅니다. 그들은 모든 것이 쉽게 접근하고 유지하며 작업 할 수 있도록 마련된 것을 본다. 그들은 부품을보고 얼마나 잘 설계되었는지 알고 있습니다. 숙련 된 정비공에게는 잘 정비 된 고품질 자동차 엔진이 아름다움이됩니다. 무엇이 아름답게 만드는지 설명 할 수는 없지만, 아름다움에 대한 개념은 유지 보수 비용 절감, 자동차 수명 연장 및 성능 향상으로 이어질 수 있습니다. 당신이 그것을 볼 수는 없지만이 모든 것이 그 차의 가치를 더합니다.
웹 사이트 나 응용 프로그램을 보면 대부분의 사람들이 자동차를 보는 것처럼 웹 사이트를보고 있습니다. 코드를 볼 때 정비공이 자동차 엔진을 보는 것처럼 코드를보고 있습니다. 내가하는 것처럼 그 코드의 아름다움을 결코 경험할 수는 없으며 말 그대로 당신에게는 보이지 않습니다. 그러나 그 아름다움은 기계공의 아름다움과 마찬가지로 중요합니다. 소프트웨어가 얼마나 잘 실행되는지, 어떤 종류의 문제가 있는지, 소프트웨어를 얼마나 쉽게 개선 할 수 있는지 등을 결정합니다. 이 모든 것을 볼 수는 없지만 소프트웨어의 가치를 더합니다.
존재하는 모든 코드가 필요하며 설명이 필요하지 않습니다.
나는시를 언급 할 것이다 :
잘 쓰여진시는 같은 주제에 대해 잘못 번역 된 매뉴얼의 추출물과는 다른 느낌을 가지고 있습니다.
코딩 문제는 개념화에 관한 것이므로 아름다운 코드는 문제의 놀라운 개념화를 나타냅니다.
예를 들어, 우리는 하나의 문제가 기존의 해결 된 문제로 축소되어 문제 자체 의 성격에 대한 통찰력 을 빌릴 수있을 때 좋아합니다 .
때때로 문제의 재 개념화가 그렇게 쉽게 보일 수 있습니다. 우리 는 어려운 작업을 단순화하는 간단한 트릭이 필요한 우아한 솔루션에 대해 이야기 합니다.
나에게 Quicksort는 아름다운 예입니다. 배열에서 임의의 요소를 선택한 다음 배열의 다른 모든 요소를 비교합니다. 숫자가 그보다 작 으면 더미 A에 넣으십시오. 숫자가 그보다 크면 더미 B에 넣으십시오. 이제 삼각형 부등식으로 더미 A의 요소를 더미 B의 요소와 비교할 필요가 없습니다. A와 B의 되풀이가 완료되었습니다 .
잭슨 폴락 (Jackson Pollock) 그림은 어떤 사람들에게는 아름답고 다른 사람들에게는 횡설수설의 예입니다.
좋은 코드의 일부 측면은 다음과 같습니다.
나의 겸손하고 개인적인 의견으로는, 아름다운 코드는 좋은 소설 책과 같습니다.
모두가 자신의 역할을 알고있는 린 평균 회사와 같으며 누가 무엇을 잘하는지 알아 내기가 쉽고 노력의 중복이 없습니다.
대
평범함이 우호적 인 사무실 공간, 세 명의 관리자는 TPS 보고서에 대해 벌레보다 더 나은 조치를 취할 수 없습니다.! @ # $ ing FAX MACHINE Never Works! 직원은 일주일에 약 15 분의 실제 작업을 수행 할 수 있습니다. 누군가가 그를 해고하는 것을 잊었 기 때문에 직원은 더 이상 기술적으로 일하지 않을 수도 있습니다 (아무도 효율적으로 일하지 않으며 그들이 무엇을하려고하는지 평가하기가 어렵 기 때문에 실제로 말하기가 어렵습니다). 그리고 실제적인 일을하려면 누군가가 실제로 문제를 해결하지 않더라도 이력서에 대해 잘 읽고 생각할 수있는 터무니없이 복잡한 시스템을 탐색해야합니다.