"완벽한 프로그래머의 증후군"을 깰 수있는 방법


16

나는 그런 식으로 느끼는 유일한 사람이 아닐 것입니다. 그러나 나는“완벽한 프로그래머의 신드롬”이라고 부르는 경향이 있습니다. 많은 사람들이 말하는 것은 완벽 주의자와 동일하지만이 경우에는 프로그래밍 영역에 있습니다. 그러나 프로그래밍 영역은 이러한 증후군에 약간 문제가 있습니다.

프로그래밍 할 때 자신의 코드가 가장 우수하고 모범 사례를 따르는 깨끗하고 좋은 코드라는 확신이 들지 않거나 자신이 없다고 느낀 적이 있습니까? 따라야 할 규칙이 너무 많아서 어떻게 든 압도당하는 느낌이 듭니다. 나는 물론 규칙을 따르고 싶지 않다는 것이 아니라 나는 프로그래머이고 나는 프로그래밍을 좋아한다. 나는 이것을 예술로보고 규칙을 따라야한다. 그러나 나는 그것을 좋아한다. 나는 내가하고 싶은 일이 올바른 방향으로 가고 있다는 느낌을 갖기 위해 규칙을 따르는 것을 좋아한다. 모범 사례 및 올바른 코드와 관련하여

조직의 부족일까요? 어쩌면 경험이 부족할까요? 연습 부족? 다른 사람이 지적 할 수있는 것이 부족할 수도 있습니다. 어떻게 든 그 증후군을 제거 할 수있는 방법이 있습니까?


1
이 질문은 개인 배경에 대해 조금만 아는 것만으로도 대답 할 수 있지만, 너무 빨리 현지화 될 수 있습니다. Tao Of Programming 을 시작하는 것이 좋습니다.
back2dos

나는 거기에 동의하지 않습니다 .. 나는 배경이 무엇이든이 방법으로 느낄 수있는 모든 사람들이 다소 다른 정도이지만 여전히 믿습니다.
Rushino

2
모든 사람이 같은 증상을 경험할 수 있지만 원인은 실제로 다양하므로 "치료"를합니다.
back2dos

완벽한 프로그래머는 없습니다. 당신은 자신의 능력을 향상시키기 위해 추진력과 욕구가있는 경험 있고 세부적인 것을 찾을 수 있습니다. -당신은 "go Getters"라고 부를 수 있습니다 ...
Yusubov

"나는 규칙을 따라야한다"... 그리고 당신의 문제가 있습니다. "모범 사례"는 규칙이 아니며 집단 경험을 바탕으로 한 제안입니다. 당신이 그들을 깨지지 않는 규칙으로 취급한다면, 나는 당신의 스트레스의 근원을 볼 수 있습니다.
GrandmasterB

답변:


21

우선 순위를 정하십시오 . 먼저 첫 번째 것들. 중요한 것에 집중하십시오.

우선 순위는 다를 수 있지만 일반적으로 다음 사항에주의해야합니다.

  • 올바른 코드
  • 유지 보수 가능한 코드
  • 깨끗한 코드
  • 간단하고 우아한 코드
  • 효율적인 코드

아마 그 순서대로. 그러나 첫 번째 요점이 가장 중요합니다. 그것이 없으면 코드는 쓸모가 없습니다. 제대로 작동하지 않는 프로그램으로 무엇을합니까?

작동하도록하십시오. 다른 모든 것은 해결해야 할 문제를 해결하는 데 거의 관련이 없습니다. 물론 나도 이것으로 고통 받고 있습니다. 내가 배운 것은 효과가 있는 솔루션에만 집중하는 것 입니다. 충분합니다. 이는 작업의 99 %입니다.

좋은 코드 같은 것을 생각하고 싶을 수도 있습니다 . 무엇입니까? 어떤 종류의 사람들이 그것을 씁니까? 좋은 코드 를 작성하는 방법 ? 매우 간단합니다. 작동하는 코드를 작성하십시오 . 작업 코드는 좋은 코드입니다. 다른 모든 것은 나중에옵니다.

물론 전문가, 팀 환경에서 코드를 작성할 때 명확하고 읽기 쉬운 코드와 유지 관리 가능한 코드가 점점 중요 해지고 있습니다. 그러나 여전히 첫 번째 과제는 그것이 작동하게하고 그것에 집중하는 것입니다. 그래야만 필요한 경우 정제 및 리팩토링을 시작할 수 있습니다.

코드 정확성이 매우 중요하다는 것은 종종 명백하지만, 코드를 작성할 때 그 중요성을 모두 수용하지는 못합니다. 우리는 모서리를 자르고 조기 최적화를 사용 하며 작업 코드를 작성 하기 전에도 우아한 코드 를 작성 하려고 합니다 . 처음부터 완벽을 추구하는 것은 인간의 본성이지만 프로그래밍 및 소프트웨어 개발은 ​​반복적 인 프로세스이며 우선 순위가 있습니다. 따라서 다시 작동하게하고 나중에 다른 모든 것에 대해 걱정하십시오. 올바른 코드의 중요성을 이해 하고이를 위해 노력하십시오.

소위 좋은 관행 이 많이 있지만 , 상식이 가장 중요하다고 생각합니다. 관행이 언제, 어디서 적용해야하는지에 대해 생각하십시오. 그래도 모든 모범 사례를 충족 시키려고 노력하지 마십시오. 개인적인 경험을 대체하거나 대체 할 수는 없습니다. 읽은 책의 수가 많거나 세미나에 참석했는지 여부에 관계없이 일반적인 함정을 피할 수 없습니다. 중요한 것은 일을하고, 일을 올바르게하고, 즐겁게 할 때마다 가능하면 배우는 것입니다.


9
최상의 최적화는 프로그램을 비 작동 상태에서 작동 상태로 전환하는 것입니다.
deadalnix

1
@deadalnix 완벽한 조언! 모든 코드에서 매우 간단하고 명백하지만 사실입니다.
zxcdw

7
+1. 나는 퍼팅 생각 하는데요 유지 보수를 위의 올바른 . 유지 관리 가능한 코드의 모든 품질을 유지 한 후에는 코드를 올바르게 작성하는 것이 합리적인 노력의 문제입니다.)
back2dos

1
EFficient는 모든 것보다 뛰어나야하지만 데이터베이스 코드와 우아함을 말하는 경우에는 정확해야합니다. 좋은 SQL 코드 (개발자가 아닌 데이터베이스에 적합)는 거의 우아하지 않습니다. 일을 수행하는 비효율적 인 방법이 알려져 있으며 정기적으로 사용하기 시작하면 유지 관리가 어렵거나 이해하기가 어렵지 않습니다.
HLGEM

2
@HLGEM 실제로, 특정 분야에서는 우선 순위가 완전히 역전 될 수 있습니다. 예를 들어 때로는 극단적 인 크기와 속도 제한 (데모 신 제품)으로 작성된 어셈블리 엔지니어 코드를 작성하고 리버스 엔지니어링합니다. 이러한 상황에서 프로그램의 정확성조차도 의문의 여지가 있습니다. 오작동하는 많은 코드 조각이 매우 잘 작동하는 것으로 나타났습니다 (예를 들어 잘못된 코드를 기반으로 한 아름다운 시각 및 오디오 인공물).
zxcdw 2016 년

6

이 문제를 피하는 가장 간단한 방법은 상처를 입는 것만 바꾸는 것입니다. 일부 변경 사항으로 인해 더 나은 결과를 얻을 수 있다고 생각하더라도 정확하고 읽기 쉽고 유지 보수가 가능한 코드를 연마하지 마십시오. 그러나 일단 목적을 불명확 한 변수 또는 이해하기에 너무 긴 함수에 대해 무언가를 바꾸고 스터 블하려고하면이를 수정하십시오. 더 빨리

그렇다고해서 처음에는 깨끗하고 깔끔한 코드를 만들려고 노력해서는 안된다는 의미는 아니지만, 다른 방법으로 입증되지 않는 한 첫 시도는 "충분히 좋은"것으로 간주해야합니다.


+1이 부분이 마음에 듭니다. "다른 방법으로 입증되지 않는 한 첫 시도는"충분히 좋습니다 "."
Rushino

두 번째로 찬성. 확실히 황금 조언!
zxcdw

4

이것에 대한 최선의 해결책은 모든 모범 사례와 코드 청결 규칙이 자신을 위해 존재하지 않으며 코드 자체도 존재하지 않는다는 것을 상기시키는 것입니다.

결국, 다른 무엇보다 중요한 것은 소프트웨어가 작동 하고 사용될 수 있다는 것입니다. 그리고 당신이 그것을 끝내지 않으면 그것은 일어나지 않을 것입니다.

나는 코딩을 예술과 비교하는 것을 좋아하지 않지만 이와 관련하여 효과가 있습니다. 예술가 ( 특히 작가 )는 종종 완벽하지 않은 무언가가 있기 때문에 조각 작업을 계속하고 싶어합니다. 그러나 출판이 무기한 지연되어 어떤 사람 이 작품 을 감상 하지 못하게 할 때 어떤 가치가 완전 합니까?


2

가장 중요한 것은 코드가 항상 변경 될 것이며 항상 개선의 여지가 있다는 것입니다. 완벽한 코드는 없습니다. 오늘날 작업하는 클래스 라이브러리는 6 개월이 지나면 매우 달라집니다. 새로운 기술을 배우거나 자신에게 가장 적합한 패턴을 찾으십시오. 코드를 쉽게 유지 관리하고 읽을 수 있으면 좋을 것입니다. 이상적으로는 나중에 도로에서 리팩토링하기 쉽도록 단위 테스트를 수행하는 것이 이상적입니다.

코드를 완벽하게 보이게하고 생각할 수있는 모든 표준을 따르기 쉽습니다. 그것은 우리 모두에게 일어난다. 몇 주 전에 작성한 코드를 살펴보면 변경 작업을 생각하게됩니다. 여기에 속성을 추가하고 거기에 메소드를 리 팩터하십시오. 그리고 프로젝트가 끝날 때 일어나는 것 같습니다. 그러나 당신이 너무 싸서 결국 쇼 토핑 버그를 만들 수 있습니다. 나는 내 경력에서 두 번 일찍 그 일을했습니다. 오전 3시의 버그 수정 세션으로 인해 그 문제가 해결되었습니다.


1

다른 방법으로 해보십시오.

"무엇을 더 잘할 수 있을까?" "나를 화나게하는 것"을 찾으십시오. 아무것도 할 때까지.


4
"책은 더 이상 추가 할 수 없을 때가 아니라 책에서 아무것도 제거 할 수 없을 때 끝납니다." -코드 완성
Jonathan

실제로 Saint-Exupéry의 역설입니다. 코드 완성보다 코드 안정성이 떨어지는 방법이 재미 있습니다.
scrwtp 2018 년

1

프로그래머로서 당신의 임무는 코드를 생성하는 것입니다. 모범 사례의 목적은 이해하기 쉽고 기억할 수있게하여 생산 속도를 높이는 것입니다. 이러한 관행을 고수하는 것이 실제로 일을 끝내는 데 방해가된다면, 당신은 무언가 잘못하고있는 것입니다. 최대한 빨리 코드를 작성하기 만하면,이를 수행 할 수 있도록 실습이 발전해야합니다.


동의하지 않습니다. 프로그래머로서 당신의 임무는 문제를 해결하는 것입니다. 너무 많은 프로그래머가 문제를보고 "해당 솔루션을 코딩 할 수 있습니다"라고 말하고 이미 존재 하는 솔루션을 찾지 않습니다 . 가장 좋은 솔루션은 작성하지 않아도되는 솔루션입니다. 즉, 솔루션을 코딩해야하는 프로그래머는 요구 사항을 충족해야합니다. 요구 사항이 변경 될 때 ( if 가 아니라 when ) 요구 사항을 충족하는 코드를 쉽게 변경할 수 있도록 모범 사례가 존재합니다 .
KeithS

1

작동하고 깨끗하게 만들고 SOLID로 만들고 성능을 발휘하십시오.

처음 세 가지는 누구나 타임 라인에 SOLID 코드를 작성하는 방법이 궁금 할 때마다 배우자에게 주어지는 속담입니다. 코드를 처음 작성할 때는 간단하게 작동해야하므로해야 할 일을하고 화려하지 않아야합니다. 처음으로 한 줄의 코드를 다시 방문하면 더 이상 일회성이 아니므로 코드를 정리하여 코드를 더 읽기 쉽고 유지 관리하기 쉽도록해야합니다. 커서가 세 번째 줄에 들어가면 아마도 큰 문제 일 것입니다. SOLID 방법론을 따르고, 의존성을 추상화하고, 패턴을 구현하고, 일반적으로 코드를 더 쉽게 플러그인하거나 연결하기 위해 리팩터링해야합니다 향후 향상을 위해.

코드의 우아함은 프로그래머가 기회를 발견 할 때 달성되며, 일반적으로 이전 단계를 수행하면서 코드의 가독성 및 유지 관리 성을 단순화, 정리 및 일반적으로 개선하는 기능입니다. 최대화 해야 것이 아닙니다 .

수행 코드는 거의 항상 메모리 관리 언어 (Java, .NET 제품군, 대부분의 기능 언어 등)에서 가장 중요하지 않습니다. 이러한 환경에서, 목표는 작성하는 것입니다 정확한 코드, (여기에 "올바른"모든 예상되는 경우에 예상되는 결과를 생성으로 정의를 하고이해할 수 있고 잘 구조화되어 유지 관리가 가능하며 성능이 부차적입니다 (보통 올바른 코드에서 어느 정도 진행될 것임). 모든 경우에, 알고리즘은 "충분히"좋은 성능을 발휘합니다. "조기 최적화는 모든 악의 근원"입니다. 모르는 최적화는 시간을 낭비하고 코드를 난독 처리하며 일반적으로 진행을 막는 것 이상을 수행하지 않습니다. 먼저 작동해야합니다. 일단 작동하면 실행하고 얼마나 빨리 작동하는지 확인해야합니다. 속도가 충분히 빠르지 않은 경우 (게시 된 요구 사항 인 일부 벤치 마크에서 정의한대로), 향상 될 때까지 개선 한 다음 중지 합니다.


0

프로그래밍에 대해 실용적이어야합니다. 그렇습니다. 우리 모두는 옳은 일을 좋아하지만 일생 동안 소프트웨어를 연마하는 것이 아니라 작동하는 소프트웨어를 제공하는 것에 대한 대가를받습니다.

취해야 할 접근 방식은 직업 생활에서 "완료"하는 것입니다. 전달하고 계속하십시오. 개인 프로젝트에 대한 완벽을 저장하십시오.


나는 이해하지만 우리는 이것을 "흑백"이라고 생각할 수 없다.
Rushino 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.