프로그래밍의 첫 번째 원칙을 무엇이라고 생각하십니까?


59

나는 항상 "이것의 첫 번째 원칙은 무엇입니까?" 기본적인 것 (예 : 프로그래밍)을 배운 후 영감을주는 질문 인 IMO는 무엇보다 배후에서 가장 중요한 원칙, 특히 프로그래밍과 같은 기술에 대해 생각하게 할 수 있습니다.

그렇다면 프로그래밍의 첫 번째 원칙은 무엇이라고 생각하십니까? 나중에 아래에 답변을 드리겠습니다.


파이트 클럽에 대해서는 이야기하지 않습니다.
Job

답변:


97
  1. 키스-간단한 바보 유지
  2. 건조-스스로 반복하지 마십시오
  3. YAGNI-넌 필요 없어

KISS는 단순하게 유지해야합니다. 똑똑하고 확장 가능한 디자인을하지 않았기 때문에 코드의 큰 덩어리를 다시 작성해야 할 때 이에 동의하게됩니다. :)

8
나는 KISS가 "간단하고 멍청하게 유지해야한다"고 생각합니다.
Dennis C

실제로이 두 방법에 대한 블로그 게시물에 일하고 있어요 프로그래머의 마음에 가장 가까이와 사랑이 동시에 그들이 자주 모순 어법의 약간은 시간이 다른에 대해 하나를 선택해야합니다 방법

10
나는 또한 YAGNI를 추가 할 것입니다.

3
@Programmin Tool-나는 "멍청한"것이 불필요한 것이라고 생각하지 않습니다. 나는 그것이 "똑똑한"경향이 있고 이것이 불필요한 복잡성으로 나타난다 고 생각한다. 내가 알다시피, "멍청한"은 우리가 처음에 "똑똑하다"라고 생각하는 것을 일반적으로 기억하지 못하도록함으로써 이러한 경향을 상기시켜줍니다.
codekaizen

37

해당 코드를 유지 관리해야하는 것처럼 코드를 작성하십시오.


이것은 매우 실용적인 휴리스틱입니다. 3x :)

19
도끼를 휘두르는 사이코 패스가 유지해야하는 것처럼 코드를 작성하십시오. FTFY.
세미콜론 잊혀진

10
그리고 도끼를 휘두르는 정신병자는 당신이 사는 곳을 알고 있습니다.
CAD bloke

2
.. 그리고 그는 방금 도끼를 날카롭게했습니다 ...
Roalt

1
... 그리고 그는 당신 옆에서 일하고 있습니다.
Broken_Window

29

가능한 한 게 으르십시오.


2
다시 말하지만 IMO. 이것은 분명히 "느슨한"게으른 양이 얼마나 게으른 지 궁금하다.

이는 펄의 참조 "게으름, 성급함과 오만함"입니다

우리는 다른 종류의 게으름에 대해 이야기하고 있습니까? "게으른"Bob은 "코드가 엉

2
너무 일반적입니다. 그 유추에 따르면 모든 변수와 함수는 1 글자가됩니다. 왜냐하면 의미있는 것을 입력하기에는 너무 게으 르기 때문입니다. 그러나 그것을 유지해야한다고 가정하면 가능한 한 쉽게 유지 관리하기 쉽기 때문에 아마도 정확할 것입니다.
Kyle Ballard

3
@Kyle : 예, 그게 요점입니다. "진정한 게으름"은 현재뿐만 아니라 미래에도 가장 쉬운 일입니다. 어떤 일을 제대로하는 것과 같은 것으로 판명되었습니다. 지금 더 적은 일을하고 나중에 더 많은 일을한다면, 당신은 "가능한 한 게으르지"않을 것입니다 :)

23

젠, 파트 I : 프로그래밍은 길이 아니라 길일뿐입니다.

프로그래밍은 컴퓨터에게해야 할 일을 가르치는 기술 일뿐입니다. 빠르고 안정적인 소프트웨어를 성공적으로 만들려면 알고리즘, 모범 사례 및 프로그래밍 (언어)에 반드시 연결되지 않은 다른 모든 항목을 알아야합니다.

젠, 파트 II : 급한 경우 천천히 걷는다. 정말로 서두르면 우회하십시오.

어리석게 들리지만 나중에 실제로 문제를 일으킬 수있는 타협에 빠지지 마십시오. 나는 규칙을 얻었다 : 만약 당신이 프로그램의 핵심이라면, 가능한 한 정확하고 훌륭하게 노력하십시오. 소프트웨어에 깊이있는 핵심 방법을 사용하는 경우 코딩 속도를 높이십시오. 이 두 가지 이상을 코딩하는 경우 조금 더 조잡해질 수도 있습니다.

설계 오류는 찾기 및 / 또는 수정하기가 가장 어렵고, 다음 단계는 모든 사람이 의존하는 부품의 프로그래밍 오류와 "실제 소프트웨어 부품"입니다. 프로젝트가 끝날 때 디자인 오류를 수정 해야하는 경우 음, 좋지 않습니다 ... ;-)

젠, 파트 III : 네 길을 알아, 네오.

환경, 도구 및 매일 의존하는 것들을 알고 그것이 당신을 위해 작동하도록 정렬하십시오. 프로그래밍 "환경"을 너무 자연스럽게 사용하여 생각조차하지 않는 것이 가장 좋습니다. 일을 끝내야한다면 "멋진 새 물건"을 소개하지 말고 일을하십시오. 이 물건들은 새로운 프로젝트에서, 즉 준비하고 사용할 시간이있을 때 소개 될 수 있습니다.


어, 그리고 다시 : 나는 프로그래밍에 대해 이야기하면서 Zen 땅에 착륙했습니다 :)

@part III-돈을받지 않으면 "멋진 새 물건"을 추가하지 마십시오!
Jason

매트릭스 참조의 경우 +1 나는 좋은 사람 (

19

KISS (간단하고 멍청하게 유지).

실제로 "단순을 어떻게 정의합니까?"라는 질문을 실제로 간청합니다. 또한 "현재 어떤 일이 너무 간단한가?" 그렇기 때문에 프로그래밍의 첫 번째 원칙 만 알고 있으면 훌륭한 프로그래머가 될 수 없습니다.


나는 이것이 너무 일반적인 규칙이라고 생각합니다. "정말 간단하게 어떻게 정의합니까?"라는 질문을 제기합니다.

3
그리고 만약 당신이 바보라면, 그것이 단순한 지 어떻게 알 것입니까?
Steven A. Lowe

좋은 예입니다, Steven :)

1
"그래서 프로그래밍의 첫 번째 원리 만 알고 있으면 좋은 프로그래머가 될 수 없습니다."

1
@Dima : 네 말이 맞아, 나는 품질과 단순성 (이 경우 적어도)은 정의 할 수 없지만, 우리의 눈이 훈련되면 그것을 볼 때 그것을 알고 있습니다.
Adriano Varoli 광장

18

조기 최적화는 모든 악의 근원입니다. -도널드 크 누스


구현 또는 설계 여부.

16

바퀴를 재발 명하지 마십시오.


휠을 재발 명해야하는지 여부에 관한 질문에 대한 정답은 항상 "의존"입니다. 따라서 "바퀴를 재발 명하지 마십시오"는 지금까지만 진행되었습니다. 대부분의 경우 좋은 휴리스틱으로 사용되지만 항상 그런 것은 아닙니다.

5
일부 "바퀴"는 재창조되어야합니다.

던롭에게 알려주세요. 그는 공압 타이어를 발명했습니다. 휠을 재발 명하지 않으면 우리는 꽤 울퉁불퉁합니다.
Kibbee

3
어떻습니까 : 혜택이 비용 가치가있는 경우에만 휠을 재발 명하십시오
e.James

16

먼저 문제를 이해하십시오!


아, 마침내이 사람을 가진 사람. 당신은 ca 키스, yagni, 당신이 원하는 모든 건조. 아무것도 프로그래밍하지 않으면 쓸모가 없습니다.

@ e-satis : 그래, 내가 처음 대답했을 때 내가 생각한 것. 나는 모든 대답을 스크롤하고 놀랍게도 아무도 전에 게시하지 않았습니다.
OscarRyz 2016 년

좋은 대답입니다. 프로그래머가 문제의 전체 요구 사항을 제대로 이해하지 못하면 시간과 시간이 낭비됩니다.
Steve Wortham

문제는 : 문제를 이해한다는 것을 어떻게 알 수 있습니까?
CamelCamelCamel

13

YAGNI-당신은 그것을 필요로하지 않습니다 . YAGNI의 기본 개념은 잠재적 인 기능이 아닌 요구 사항에 맞게 프로그래밍하는 것입니다. 전제 조건은 프로그래밍해야 할 사항을 유지함으로써 (다른 것들 중에서) 코드 부풀림을 줄이고, 복잡성을 줄이며, 기능 충돌을 피하고, 수행 할 수있는 작업 (및 수행 방법)에 대한 제한을 줄입니다. 미래.

모듈 식 디자인과 함께 작동한다고 가정합니다. 기존 코드를 다시 디자인하지 않고도 향후 기능을 보강 할 수 있습니다.


12

프로그래밍하지 않을 때 알기.


이것은 무엇을 의미 하는가?

그리고 언제입니까?

때로는 솔루션을 코딩하는 것만이 아니라 사용자 문제를 다르게 다루어야하는 경우가 있습니다.

인간의 판단과 의사 결정은 모든 것의 일부입니다. 때로는 판단을 자동화하려는 데 아무런 의미가 없습니다.
S.Lott

1
즉, 선반 응용 프로그램, 구성 요소 또는 라이브러리를 구매하여 많은 프로그래밍 문제를보다 저렴하고시기 적절하게 해결할 수 있습니다.
Gordon Bell

11

커피 입력, 코드 출력


3
내 경우에 차 =)

"Coffee In, Code + 많은 수의 휴식 시간과 같은 +1 흠?" :) 나는 커피와 차를 모두 사랑하고, 두 가지 방법으로 스윙합니다.
Darknight

10

테스트하지 않은 경우 고장입니다.


동의합니다

7

소프트웨어 설계를 구성하는 두 가지 방법이 있습니다. 한 가지 방법은 간단하게 결함이 없도록하고, 다른 방법은 너무 복잡하게하여 명백한 결함이없는 것입니다. 첫 번째 방법은 훨씬 더 어렵다.

-찰스 안토니 리차드 호 아레


6
  1. 원인과 결과 구분 (컴퓨터 작업)

  2. 사실과 의견 구분 (사람과의 협력)

  3. 가능한 한 단순하지만 단순하지는 않습니다 (디자인).



5
  1. 프로그램이 왜 누군가를 행복하게 하는지 이해하십시오 . (이 사람은 당신이 될 수 있습니다.)
  2. 필요한 모든 복잡성을 더 이상 포착하지 못하는 비즈니스 도메인 의 개념적 모델을 개발하십시오 .
  3. 필요한 모든 복잡성을 더 이상 포착하지 않는 소프트웨어 아키텍처 의 개념 모델을 개발하십시오 .
  4. 다른 모든 복잡성을 무자비 하게 유지하십시오.

잘했다! couldnt 더 동의
Antony

5

제 생각에는 가장 중요한 원칙은 좋은 추상화 를 만들어서 복잡성줄이는 것입니다 .

여기에는

  • 해결해야 할 문제를 이해하고
  • 적절한 솔루션을 설계하고
  • 그것을 구현,
  • 바람직하게는 코드를 이해하고 유지 보수 할 수있는 방식으로

피할 수없는 추가적인 복잡성을 피하기 위해 추상화 생성을 중단하고 구현 기술 (예 : 데이터베이스 시스템, 프로그래밍 언어)의 기본 속성으로 내려가는 지점을 결정합니다.


4

청중을 염두에두고 프로그램하십시오. 따라서 귀하가 작성하는 내용이 귀 하나 다른 사람이 읽거나 유지하지 않을 것이라고 가정하지 마십시오.

이에 대한 추론 : 변수와 ​​함수 및 클래스의 이름을 잘 지정하여 해결하려는 문제를 이해하고 있음을 증명하십시오!


4

테스트에서 보여줄 때까지 작동하지 않습니다.


6
사실이 아닙니다. 작동하고 테스트되지 않은 수많은 코드를 작성했습니다! : D

1
"나는 그것을 테스트하지 않았다, 나는 그것이 옳다는 것을 증명했다":)
Daniel Daranas

4

먼저 생각하고 나중에 코드를 작성하십시오.

당신이 생각하는 것만 큼 똑똑한 곳은 없습니다. 질문. 동료를 소중히 여기는 법을 배우십시오.

디버깅 할 때 첫 번째 대답은 거의 항상 틀릴 것입니다.

던지기 위해 쓰는 코드는 훨씬 더 큰 프로세스의 초석이되는 경향이 있습니다. 우연히 쓰여진 것을 남겨 두지 마십시오.


3

다른 간접 계층으로 모든 문제를 해결할 수 있습니다.


실제로, 너무 많은 간접적 인 지시는 그 자체가 확인되고 해결되기를 기다리는 문제입니다. 그래서 ..

또 다른 간접 계층에 의해 해결되었습니다! =)
Erik Forbes

이상하게도 그 사실입니다. 봄을 봐 ...


3

원칙 : 소프트웨어는 지식 포착 입니다.

결과 : 지식 표현을위한 많은 기술이 모두 추상화에 있습니다. 계층, 계층, 캡슐화, 우려 분리를 제공합니다.

프로 시저 표현에 대한 많은 기술은 모두 Sequence , Choice , Repetition에 있습니다.



3

코드를 유지할 사람이 당신이 사는 곳을 알고있는 정신병 연쇄 살인범처럼 항상 코드를 작성하십시오

또한 프로그래밍에 대한 모든 것을 알고 있다고 생각하지 말고 계속 학습하십시오.


2

나는 디지털 전자 공학을 공부하면서 프로그래밍에 들어갔 기 때문에 프로그래밍의 첫 번째 원칙은 기본 로직 게이트 (또는 xor가 암시하지 않음)라고 생각합니다.



2

쓰레기 수거-쓰레기 수거 데이터가 좋지 않은 경우 사용자 인터페이스가 얼마나 좋은지는 중요하지 않습니다.


2

DRY, 다른 모든 것들이 스폰됩니다. KISS는 광기 수준에 소프트웨어 우아함을 추구하지 않도록 균형 잡기의 다른 끝입니다.


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