적은 코드를 작성하는 방법


12

내가 개발하고 싶은 품질은 더 간결한 코드를 작성하는 것입니다. 적어도 내 의견으로는 더 간결하게 작성하면 코드에 버그를 추가 할 수있는 기회가 적습니다. 다른 코드를 읽는 것이 더 쉽습니다.

내 질문은 그것이 경험과 함께 제공되는 것이거나 그 품질을 개발하기 위해 명시 적으로 할 수있는 것입니까?


6
경향을

1
매크로, 매크로, 매크로에 대한 필수 포인터 : paulgraham.com/avg.html
vemv

무의미한 프로그래밍 스타일을 채택하여 매우 간결하고 읽기 쉬운 코드를 생성 할 수 있습니다. 무의미한 프로그래밍은 기능을 적용하여 프로그래밍하는 것입니다. map, filter, concat, fold / reduce / inject / [목록 catamorphism의 다른 이름 삽입] 등과 같은 고차 함수를 광범위하게 사용하여이를 인식 할 수 있습니다.
dan_waterworth

2
-1 : 변장의 자기 축하 인 것 같습니다.
Jim G.

아직 읽을 수있는 포인트 프리 코드를 보지 못했습니다. 중요한 도서관에는 없습니다.
Simon Bergot

답변:


12

전체적으로 시간과 경험이 함께 제공되는 것이지만, 더 간결한 언어로 작업하면 일반 품질의 작업 언어로 품질이 향상 될 수 있습니다.

확실히 1 ~ 2 년 후에 루비와 함께 일한 후에 C #이 훨씬 더 많은 것을 알았습니다. 함수형 프로그래밍을 더 잘 이해하려면 (진정한 야망) 아마도 더 많은 것을 취할 것이라고 생각합니다.

또한 같은 두 줄을 두 번 이상 자신의 방법으로 분할하는 경우 도움이 될 수있는 몇 가지 지침이 있습니다. 그것은 간단한 지침이지만 코드 라인과 잘라 내기 및 붙여 넣기 프로그래밍을 빠르게 줄이며, 우리 대부분은 때때로 유죄입니다.

상속을 이해하면 부모 클래스에 공통 기능을 제공하여 다른 장소에서 동일한 코드를 반복하여 절약 할 수 있습니다. 이것은 원칙적으로 명백하지만 사람들이 실제로 놓치는 일이 종종 있습니다.

응용 프로그램에서 적은 코드를 작성 하는 것과 코드 를 적게 사용 하는 것에는 차이가있을 수 있습니다. 때로는 코드 생성을 사용하여 반복하지 않아도되므로 몇 줄의 코드 만 작성하면 다른 코드가 많이 생성됩니다. -그것은 당신에게 많은 레버리지를 줄 수 있습니다. Rails 또는 Entity Framework와 같은 도구가 얼마나 유용한 지 파악하기 위해이 점에서 수행하는 작업을 살펴보십시오. 그래도 그 필요성에 대해 분명히하고 자신의 코드 생성을 롤링하는 것에 대해 두 번, 세 번, 네 번 생각하십시오-야 그니 지옥에 빠질 수 있습니다.

언어, API 및 도구를 이해하십시오. 다시 이것은 명백한 것처럼 보이지만 수년 동안 API에서 상속 받았거나 언어 기능을 사용하여 몇 시간 동안 읽는 것을 깨닫게되었습니다. 내가 작업하고있는 API에 대한 설명서를 사용하면 나중에 코딩하거나 디버깅하는 데 많은 시간이 절약됩니다. 마찬가지로, 작업하는 대부분의 플랫폼에는 결정 성이 있습니다. 예상대로 작동하는 방법을 배우면 인생이 훨씬 쉬워집니다. 작업중인 플랫폼에 대한 최소 저항 방향을 찾는 데 시간을 투자하면 작업을 훨씬 더 잘 수행 할 수 있습니다.

무언가 더 좋은 방법이 있는지 궁금하다면, 아마도 더 좋은 방법이 있는지 알아내는 것이 좋습니다.


그렇습니다. 제 생각에는 개인용 단선 기능의 유일한 이유는

이러한 기능을 더 많이 사용했기 때문에 클래스의 코드 줄 수가 눈에 띄게 떨어졌으며 훨씬 깔끔하고 명확 해 보입니다.
glenatron

약간의 모순, 더 많은 기능이지만 줄 수는 적은 것 같지만 코드에서도 같은 추세를 볼 수 있습니다 .. 그것에 대해 생각해야합니다 ....

따를 수있는 이러한 지침이 더 있습니까? 마치 나와 같은 젊은 개발자에게 도움이 될 것 같습니다.
stuartmclark

@stuartmclark-나는 당신이 다른 곳에서 듣지 못할 것이 너무 많지 않다고 생각하지만 몇 가지를 더 추가했습니다.
glenatron

16

적은 코드를 작성하는 좋은 방법 중 하나 는 휠을 다시 발명하지 않고 가능한 경우 기존 소프트웨어 구성 요소를 사용하는 것입니다.

사람들이 왜 자신의 ORM, 자체 로깅 엔진, 자신의 UI 구성 요소 또는 자신의 모든 작업을 수행했는지 물었을 때 얻을 수있는 일반적인 대답은 다음과 같습니다.

그러나 우리는 더 낫다

나는이 진술이 대부분의 경우에 맞다고 생각하지만 ROI 에 대한 부정적인 영향 은 대부분의 경우 매우 높습니다. 엄마는 최고의 요리를 잘합니까? 그러나 엄마에게 집에 와서 매일 준비 해달라고 요청할 수는 없습니다.

그렇기 때문에 개발자가 자신의 선택에 따른 재정적 영향에 관심을 가져야한다고 생각합니다. 그들 중 일부는 다음과 같습니다.

  • 구성 요소를 빌드하는 데 추가 작업이 필요합니다
  • 신규 이민자가 배울 수있는 추가 작업
  • 그것을 유지하기 위해 엄청난 추가 작업

이러한 구성 요소 공급 업체는 직접 구축, 유지 관리 및 개선하기 위해 지불 한 금액의 일부를 위해 근무하는 확장 된 팀이라고 생각합니다.

자아 만족을 극대화하기 위해 노력하는 것보다 회사 전체가 ROI 를 극대화하는 것이 좋습니다.


1
나는 몇 년 전 자신의 파일 경로 클래스가 Win, Unix 및 Apples 형식 사이에서 파일 경로를 변환 할 수 있다고 썼다. 우리는 창문 만 사용했습니다. 아마 규칙도 확인되지 않습니다 그 일 미래 지향적

때로는 주어진 프레임 워크에 대한 지식이 부족하기 때문입니다. .NET으로 작업을 시작할 때 나만의 경로 클래스를

나는 엄마의 스파게티를 선호했지만 항아리에 든 재료는 충분했습니다. 이것은 실제로 요구 사항을 담당하는 사람들에게 귀결됩니다. 이들이 85 % 솔루션에 만족하지 않으면 선택의 여지가 없습니다.
JeffO

우리 엄마는 스파게티를 훨씬 잘합니다.

1
"바퀴 재발 명을 피하십시오"를위한 인터넷. 내가 개발 한 가장 중요한 기술 중 하나는 누군가 이미 해결 한 문제를 식별 할 수 있다는 것입니다. 아마도 간과했을 수도있는 프린지 케이스를 처리함으로써 나 자신보다 더 나은 솔루션을 제공 할뿐만 아니라 실제로 해결해야 할 문제를 해결할 수있게 해줍니다. .
BlairHippo

5

제 생각에는 몇 가지 방법으로 더 적은 코드를 작성할 수 있습니다.

  • 당신은 그것을 필요로하지 않습니다 . 아직 필요하지 않은 것을 코딩하지 마십시오. 요구 사항 만 코딩하십시오. 이런 식으로 우리는 작성하는 데 필요한 코드를 줄입니다.

  • 스스로 반복하지 마십시오 . CMS, 프레임 워크 또는 타사 라이브러리를 사용하는 것이 DRY 원칙을 적용하는 한 가지 방법이라고 생각합니다.

  • 추상화 . 마지막으로 추상화 프로그래밍은 코드를 크게 줄일 수 있습니다. 코드를 추상화하면 코드를 재사용 할 수있는 가능성이 높아 지므로 중복성이 줄어 듭니다.


3

프로그래밍 언어에 대한 이해를 넘어서, 나는 문제에 대한 이해와 좋은 해결책을 찾는 것이 그것과 관련이 있다고 생각합니다. 대부분의 문제에는 많은 해결책이 있지만 모든 문제가 최적의 것은 아닙니다. 다른 도로를 통해 도시 A에서 도시 B로 운전할 수 있습니다. 하나는 두 시간이 걸리고 다른 하나는 두 배가 걸릴 수 있습니다. 프로그래밍에서도 마찬가지입니다. 언어를 잘 아는 사람도 있지만, 두 페이지의 코드를 사용하는 솔루션이 나올 수도 있지만 다른 사람은 코드 크기의 1/4로 구현할 수있는 솔루션을 찾아 낼 것입니다. 나는 수년에 걸쳐 이것을 많이 보았다.

문제를 잘 이해하고 있는지 확인하십시오. 그것을 분석하고, 해결책을 제시하고, 장단점을 평가하십시오. (물론 " 's'가있는 해결책은 문제마다 크게 다를 수 있습니다. 일반적으로 여기에서 말하면됩니다.) 그런 다음 선택한 해결책의 구현이 있습니다. 언어 (및 해당되는 경우 프레임 워크)에 대한 이해가 시작됩니다.


솔루션 준비와 솔루션 프로그래밍에 얼마나 많은 시간을 소비합니까?

물론 문제에 따라 다릅니다. 나는 여기서 이야기하고 있지 않다. 코딩하기 전에 약간의 시간을 투자하면 대개 돈을 지불합니다. 장기적으로 솔루션에서 유지 관리하기에 이상 적이기 때문에 실제로 보낸 시간에 관한 것이 아닙니다. 나는 crappy 솔루션을위한 crappy 코드를 만들 수있다. 누구나 할 수있다.
MetalMikester

1

프로그래밍의 전체 기술은 이것에 불과하다고 말할 수 있습니다.

명확성과 간결성에 중점을 둔 언어 (예 : Haskell, Scheme, Python) 또는 Factor 및 기타 연결 언어와 같은 더 복잡한 패러다임 을 공부할 수 있지만 궁극적으로 학습을 위해 선택할 수있는 모든 것은 더 짧은 글쓰기에 기여해야합니다. 적은 중복 코드.


1

다른 모든 고난과 마찬가지로 문제가 있음을 인정하지 않으면 해결책을 찾지 않을 것입니다. 적은 코드의 모양을 알게되면 경험이 중요한 요소가됩니다. 코드를 다시 방문 할 때 코드를 재사용하거나 더 적은 코드로 리팩터링 할 수 있는지 판별해야합니다. Microsoft는 Windows 2000에서 두 번 스풀링하지 않아 인쇄 속도를 향상시킬 수있었습니다 (Microsoft 직원의 무료 데모 중 하나에서 인용).


따라서 코드를 다시 작성하고 코드를 적게 쓰는 방법이나 Piet가 말한 것처럼 terser 코드를 처리하기 위해 리팩터링해야합니까?

2
@ Gorgen-시간이 있거나 한 시간 전에 작성한 코드를 보면 가능합니다. 때로는 SO에서 예제를 발견하면 돌아가서 자신의 코드를 변경하라는 메시지가 표시 될 수 있습니다.
JeffO

0
  1. 오래 된 바람 코드로 돌아가십시오.
  2. 버전 관리하에두고
  3. 새로운 버그를 도입하지 않을 것이라는 희망을 갖기 위해 몇 가지 테스트를 작성하십시오.
  4. 고쳐 쓰기.

임의로 반복하십시오. 그리고 지옥에 오신 것을 환영합니다.


-2

테스트 주도 개발이 도움이 될 수 있습니다. 이를 사용하여 해당 테스트를 통과하는 데 필요한 최소 코드 만 작성하십시오.


이러한 맥락에서 최소값 은 길이가 아니라 기능 측면에서 의미합니다.
vemv
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.