오래되고 잘못된 프로그래밍 가정 [폐쇄]


281

나는 중학교 (그리고 아마도 선임) 소프트웨어 엔지니어가 만든 일반적인 오류와 잘못된 가정에 대해 연구하고 있습니다.

당신의 가장 오래된 가정은 결국 수정 되었습니까?

예를 들어 정수의 크기가 표준이 아니며 언어와 대상에 따라 다릅니다. 상태가 조금 당혹 스럽지만 거기에 있습니다.

솔직 해지십시오. 당신은 어떤 확고한 믿음을 가지고 있었으며 대략 얼마나 오랫동안 가정을 ​​유지 했습니까? 알고리즘, 언어, 프로그래밍 개념, 테스트 또는 프로그래밍, 프로그래밍 언어 또는 컴퓨터 과학에 관한 다른 것이 될 수 있습니다.


답변:


545

오랫동안 나는 다른 모든 사람들이 모든 프로그래밍 개념 (디자인 패턴, 최신 새로운 언어, 계산 복잡성, 람다 식, 당신이 그것을 명명)의 슈퍼 마스터리를 가지고 있다고 가정했습니다.

블로그, 스택 오버플로 및 프로그래밍 서적을 읽으면 항상 모든 프로그래머가 직관적으로 알아야 할 사항에 대해 내가 생각하는 것처럼 보였습니다.

나는 시간이 지남에 따라 내 지식을 단일 개인이 아닌 많은 사람들의 집단 지식과 효과적으로 비교하고 있다는 것을 깨달았습니다. 현실 세계의 대부분의 프로그래머는 자신의 업무를 수행하는 데 필요한 지식을 보유하고 있으며 약하거나 완전히 무지한 영역이 몇 개 이상 있습니다.


68
사실이야! 이것이이 시대의 문제입니다. 정보도 낙담합니다. 나는 몇 주 전에 내가 연구와 관련하여 내가 한 모든 일에서 완전히 패배 한 것처럼 느껴졌을 때이 계시를 받았다. IEEE Transactions에 논문을 게시 한 사람이 Google에서 일하거나, StackOverflow를 자랑하거나, 우수한 교수가되거나, 훌륭한 프로그래밍 블로그를 작성하는 사람과 반드시 ​​같은 기술을 보유하고 있지는 않습니다. 물론 최고의 사람들은 우리보다 기하 급수적으로 시원하지만, 당신이 모르는 모든 것을 알지 못합니다. 그러니 시원하게.
jbasko

40
또한 그 블로거들이 머리 위로 모든 것을 쓰지 않는다는 것을 이해하는 데 도움이됩니다. 훌륭한 블로거는 게시물을 작성하면서 주제를 연구하고 새로운 것을 배웁니다.
JohnFx

47
나는 읽고 배울 시간이없는 것들에 대해 매일 집착합니다. 그것은 때때로 끔찍한 죄책감을 느끼게합니다.
brad

9
@Zilupe : 아멘. 국제 컨퍼런스 논문과 저널을 몇 권 발간했습니다. 어떤 사람들의 눈에는 시원하게 들렸습니다. 논문을 출판하는 데 많은 노력이 필요하지 않다는 것을 알기 전까지는 말입니다. 우린 천재가 아니야 우리는 다른 사람들과 똑같습니다. 우리는 실수를 저지르고 쓰레기 종이를 출판합니다. 음, 소수의 실제 천재들을 제외하고는 ...
Hao Wooi Lim

4
+1 좋은 점이 있습니다. 나는 내가 유일한 사람이라고 생각했다.
Randell

308

사람들은 그들이 원하는 것을 알고있었습니다.

내가 사람들과 이야기 할 것이라고 생각한 가장 긴 시간 동안, 그들은 문제 나 작업 흐름을 설명 할 것이며 그것을 코드에 넣고 자동화 할 것입니다. 그들이 일어날 때마다 그들이 원하는 것은 실제로 그들이 원하는 것이 아니라는 것이 밝혀졌습니다.

편집 : 나는 대부분의 의견에 동의합니다. 이것은 기술적 답변이 아니며 질문자가 찾고 있던 것이 아닐 수도 있습니다. 프로그래밍에만 적용되지는 않습니다. 나는 그것이 나의 가장 오래 전의 가정이 아니라고 확신하지만, 내가 이것을하고있는 짧은 10 년 동안 내가 배운 가장 놀라운 것입니다. 나는 그것이 순전히 순진한 것이 확실하지만 내 두뇌가 연결되어있는 방식과 비즈니스 세계에 들어가기 전에 내가했던 가르침과 경험은 내가 대답 한 것을하고 있다고 믿게했다. 사람들의 문제를 해결하기 위해 코드와 컴퓨터를 사용할 수 있다는 것입니다.

이 대답은 프로그래머가 아닌 사람들이 내가 말하는 것에 대해 이해하고 돌보는 것에 대한 Robin의 대답과 비슷하다고 생각합니다. 민첩하고 반복적 인 대화식 프로세스로 비즈니스를 배우는 것입니다. 프로그래밍 코드 원숭이가되는 것과 소프트웨어 개발자가되는 것의 차이점을 배우는 것입니다. 그것은 둘 사이에 차이가 있으며 현장에서 실제로 훌륭하다는 것을 깨닫는 것입니다. 단순한 구문과 타이핑 속도가 아닙니다.

편집 :이 답변은 이제이 답변에 사람들을 화나게하는 커뮤니티 위키입니다.


9
또는 이전에 원하는 것을보고 원하는 것을 변경하십시오. 사람들은 마음을 바꾸는 것을 좋아합니다. 알아요, 저는 사람들입니다.
J. Polfer

13
당신은 그들이 원하는 것이 아니라 그들이 요구 한 것을주었습니다.
브렌트 바이 슬리

47
논란의 여지가없는 답이 너무 많이 투표되는 이유는 무엇입니까?!
nes1983

39
와. 누군가 포옹이 필요한 것 같습니다.
bzlm 2016 년

24
내 사람들 @ 불평, 스택 오버플로 담당자는 경쟁이 아닙니다. 답변을 즐겼다면 공감하십시오. 질투심이 많으므로 먼저 게시하지 않았습니다.
Dmitri Farkov가

292

성능 문제가 프로파일 링없이 어디에 있는지 알고


10
이것이 조기 최적화가 너무 일반적인 이유라고 생각합니다.
Hao Wooi Lim

10
+1 와우, 누군가가 사소하거나 주제가 아닌 답변을 포함 시켰습니다.
Mark Rogers

3
조기 최적화에 도움이되는 태블릿이 있습니다.
AndyM

232

함수 / 메소드에서 하나의 종료 점이 있어야합니다.


91
뛰어난 실현; 필요한만큼 자주 종료하십시오. 더 이상 기능을 계속 이해하지 못하는 즉시 기능에서 벗어나야합니다. 이렇게하면 메서드를 제대로 실행하는 데 필요한 전제 조건 일 때 깊이 중첩 된 조건을 피함으로써 복잡성을 줄이고 가독성을 높일 수 있습니다. 메모리 관리 및 사용 / 완료와 같은 리소스 구성이있는 현대 언어에서는 방법의 끝까지 독단적으로 계속하는 것은 의미가 없습니다.
Triynko

24
그런데 누가 이걸 생각 해냈어요? 그것은 프로그래밍 도시의 전설과 같습니다.
brad

49
다른 사람들의 코드를 디버깅 해야하는 사람들이 이것을 생각해 냈습니다.
gatorfax

23
나는 일반적으로 개최되지만 잘못된 생각은 오해에 근거한다고 생각합니다. 함수를 종료하면 항상 같은 지점으로 돌아와야 합니다. BASIC과 같은 언어에서는이를 적용하지 않는 중요한 규칙이었습니다. 예를 들어 GOTO 대신 GOSUB를 사용해야한다는 규칙이있었습니다. 메소드를 호출하는 C # 또는 Java와 같은 언어에서는 자동입니다. 그러나 자동이기 때문에 논리적 "단일 리턴 투 포인트"에서 무의미한 "단일 종료 포인트"로 변형 된 것 같습니다.
Ryan Lundy

35
리소스를 수동으로 해제해야하는 C와 같은 언어에서. 여러 개의 출구 지점이 리소스를 유출시킬 수있는 좋은 기회였습니다. IMO는 종종 더 이상 이탈 지점을 알지 못하거나 진술의 중간에 있기 때문에 예외가있는 언어로는 지적 할 필요가 없습니다. -이 언어에서 "가독성을위한 구조"만 남아 있습니다.
peterchen

228

프로그래머가 아닌 사람들은 내가 말하는 것을 이해합니다.


243
이해 / 관리 ..
nickf

8
나는 아직도 이것을
가끔씩

3
어머나, 나는 아직 이것을 배우지 않을까 걱정된다!
thatismatt

3
그래, 때때로 나는 청중을 잊고 저를 쳐다 보는 그들의 얼굴에 텅 빈 표정으로 사람들의 무리로 끝납니다, 사람들이 관심을 보일 때 그것은 좋네요
Petey B

3
이것은 직업에 대한 나의 가장 큰 좌절입니다.
Andres Jaan Tack

219

그 버그없는 소프트웨어가 가능했습니다.


35
NASA가 거의 관리했지만 +1
Patrick McDonald

55
그렇습니다. 그러나 "거의"비용은 수백만 달러입니다.)
Jem

15
@Triynko의 "가능한"및 @JaredPar의 "가능한"은 동일하지 않습니다. 이론과 실제는 이론상 동일 할 수 있지만 실제로는 매우 다릅니다.
wilhelmtell

13
@Joseph, 문제의 일부는 사람들이 Hello World 프로그램에 버그가 없다고 생각한다는 것입니다. 그들은 아니다. 대부분의 경우 printf에서 오류를 확인하거나 다른 IO 시도 실패를 설명하지 않습니다.
JaredPar

9
@RussellH, 아니오. 반환 값을 지정하지 못하면 결과 프로세스가 임의의 가비지 메모리를 반환합니다.
JaredPar

199

해당 개인 멤버 변수는 클래스가 아닌 인스턴스 전용이었습니다.


192
나는 지금까지 그 가정을 지켰습니다.
TheMissingLINQ 2016 년

9
등호를 작성할 때 @ebrown 나는 보통) (이 유용한 방법 찾기
데이브 웹이

12
그들은 루비에 있습니다.
Mike Kucera

17
이것은 나에게 매우 정상적 이므로이 답변은 내가 처음 읽은 몇 번 이해되지 않았습니다. 이제 다른 방법으로 혼란을 줄 수 있도록 Ruby를 배우고 싶습니다. :)
jmucchiello

16
@Kiewic 클래스 내에 myVar라는 전용 멤버 변수가 있으면 other가이 클래스의 인스턴스 인 경우 코드에서 other.myVar를 직접 참조 할 수 있습니다. "비공개"이기 때문에 클래스 내부에서도 other.getMyVar ()를 사용해야한다고 가정했습니다.
Dave Webb

166

정적 타이핑이 여전히 키보드에 있다고 생각했습니다.


53
진심으로, 이로 인해 긴 하루 일과가 끝날 무렵 웃게되었습니다. : P
Olivier Tremblay

5
++ 좋은 웃음. 내 (기술이 아닌) 남편이 생각 해낼 것 같은 소리.
jess

11
+1! 오리 타이핑도 타이핑과 관련이 있다고 생각했습니다. 아니면 오리. 아니면 둘다.
SqlACID 2016 년

162

개발을 시작하기 전에 문제를 완전히 이해할 수 있습니다.


32
이 친구는 "문제를 완전히 이해할 수 있습니다." 그러나 사실입니다. 그리고 이해하기 어렵거나 받아들이 기 어려운 개념입니다.
KarlP

4
문제를 "완전히"이해할 수는 없지만 개발을 시작하기 전에 반드시 어느 정도 문제를 이해해야합니다. bit.ly/kLXgL
OscarRyz

때때로 문제를 이해하기 위해 개발을 시작해야합니다. 그리고 / 또는 문제는 발전할수록 변화합니다.
Evan Plaice

158

똑똑한 사람들은 항상 나보다 똑똑합니다.

실수를 할 때 스스로를 이길 수 있으며 종종 자멸을 거부한다고합니다. 나는 많은 개발자들을 경외감으로 바라 보았고 종종 X 에서 나보다 더 많은 것을 알았 기 때문에 나보다 더 많이 알고 있다고 생각했습니다 .

계속해서 경험을 쌓고 더 많은 사람들을 만나면서, 종종 특정 주제에 대해 저보다 더 많은 것을 알고 있지만, 반드시 나 / 당신보다 똑똑 하지는 않다는 것을 깨닫기 시작했습니다 .

이야기의 교훈 : 식탁에 가져올 수있는 것을 과소 평가하지 마십시오.


좋은 것! 현재 .NET 개발에 대해 많은 것을 알고있는 동료와 함께 일하고 있습니다. 고객이 원하는 것을 이해하는 것이 더 낫다는 것을 깨닫기 위해 시간을 냈습니다.
Treb

58
다른 한편으로, 나는 다른 사람들보다 더 많이 알고 있습니다. 그들은 단지 다른 것들을 알고 있음이 밝혀졌습니다. 다른 도덕 : 다른 사람이 테이블에 가져올 수있는 것을 과소 평가하지 마십시오.
thursdaysgeek

1
여기에 그 오래된 "다른 사람들에게해라"라는 것이 또 있습니다. 저는 새로운 문구를 만들고 있습니다 : 테크 bulying ~ 당신이 어떤 것을 알고 있기 때문에 우월하다고 느끼는 상태. @seealso : smartass.
corlettk

1
훌륭한 관찰 – 내 버전은 더 부정적이다. "누구나 지금 바보짓을한다". "보조 비트를 뒤집지 마십시오"와 관련이 있습니다.
peterchen

2
어리석은 사람들이 당신보다 똑똑 할 때만 걱정하면됩니다.
브래드 길버트

131

가장 오랫동안 나는 나쁜 프로그래밍이 프린지에서 일어난 일이라고 생각했다. 올바르게 일을하는 것이 표준이었다. 나는 요즘 순진하지 않다.


30
내가 나쁜 프로그램 중 하나에 의해 끝날 때까지 나쁜 프로그래밍은 다른 프로그래머에 의해서만 수행되었다고 생각했었다. 이제 나는 일을 올바르게한다! (이번에 나를 믿습니까?)
Jared Updike

2
전적으로. " 이런 일은 절대 일어나지 않습니다 "에서 " 직업을 제외하고는 절대 일어나지 않습니다 "에서 "모든 곳에 나쁜 코드가 있습니다"로 갔습니다 .
Ryan Lundy

1
해킹이 표준입니다. 엔지니어링은 진정한 역량의 범위입니다. 소프트웨어 엔지니어를 만나면 알려 드리겠습니다.
corlettk

3
@ corlettk : 원숭이 코딩이 표준이라는 것을 의미합니까? 해킹은 예술, 당신이 생각하는 수준의 예술 수준입니다.
hasen

2
@Hasen : 아니요, 해킹은 비 숙련 적으로 나무로 도끼를 가져 가서 실제 계획이없는 미친 공황에서 작은 조각을 끌고 나무가 마침내 머리에 떨어질 때까지 피 묻은 큰 혼란을 만드는 것과 유사합니다. "핵 (hack)"은 "상업적 성공을 얻기 위해 평범하고 평범한 작업을하는 사람"입니다. 왜 컴퓨터 분야가 "기술"을 의미하도록 "해킹"을 바꾼 이유는 알 수 없습니다.
Lawrence Dol

113

나는 최대한 추상화로 나아가 야한다고 생각했다. 너무 많은 기능이 서로 얽혀 있기 때문에 이것으로 헤드 메이저에 부딪쳤다.

이제는 가능한 한 간단하고 분리 된 상태로 유지하려고합니다. 추상적 인 것을 만들기 위해 리팩토링하는 것은 내가 어떻게 추상해야 하는지를 예측하는 것보다 훨씬 쉽습니다.

따라서 나는 모든 것을 지배하는 프레임 워크를 개발하는 것에서 작업을 수행하는 기능의 스 니펫으로 옮겼다. 내가 순진하게 내가 다음 큰 것을 개발하는 사람이 될 것이라고 생각했을 때를 제외하고는 뒤돌아 보지 않았습니다.


26
분리됨 = 참 추상화. 자체 요약은 ... 조기 최적화입니다.
Jared Updike

1
이것은 성능 조정에서 찾은 것과 함께 진행됩니다. 여러 계층의 추상화가있는 멋진 프로그램이있을 수 있습니다. 그러면 워크로드가 무거워지고 항상 비용이 많이 드는 것 (모든 추상화)을 추측합니다. 컴퓨터는 추상화가 아닌 명령어를 실행합니다.
Mike Dunlavey가

5
추상화 및 일반화는 강력한 도구이며, 슬프게도 하나의 구현으로 추상 사용 사례를 일반화하는 데 사용됩니다. 재미있는 점은 구현을 변경해야 할 때마다 추상화와 일반화도 변경해야한다는 것입니다.
KarlP

나는 Jared에 전적으로 동의한다. 만약 당신이 "단순하고 분리 된"상태에 도달했다면, 당신은 진정한 추상화를 이루었다. 인터페이스와 팩토리 등으로 추상화하지 않은 경우 어떻게 분리 할 수 ​​있습니까? "type = this이면이 작업을 수행하거나 type이 다른 코드 인 경우"를 제거하지 않으면 어떻게 간단 할 수 있습니까?
Richard Anthony Hein

여기도 마찬가지입니다. 스파게티 코드를 만들기 전에 추상화에 대해 배웠다고 생각 합니다. 그들은 일들이 코드가 스파게티 경우에도 수행하고하는 방법을 가르쳤다해야 다음 OO와 추상화에 대한 정보를 가르친다.
hasen

103

그 여자들은 컴퓨터 프로그래머를 섹시하게 생각합니다 ...


70
잠시만 요???
Çağdaş Tekin 2016 년

4
그는 그에게 .. 좋아, 나는 오늘의 나머지 시간 동안 내 미소를 지킬 무언가를 찾고 있었다. 내가 찾은 것 같아 !!! :)
OscarRyz

17
-! "나에게 몇 가지 예외를 던져 ... 그래, 내가 방법을 알려 우, 아기 네, '하면하는 것은'말 ': P
cwap

5
뭐? 프로그래머는 부자입니까? 언제 이런 일이 일어 났습니까?
Filip Navara

3
일부 여성 (적절한 종류)은 통찰력있는 지능적인 사람들에게 끌립니다. 프로토 타입 목 수염과 소시지 장을 빼고 프로그래머의 일반적인 특징입니다. 자아상 / 위생에 대한 약간의 관심과 극단적 인 스포츠의 스릴 / 흥분에 뿌려져 나아갈 수 있습니다.
Evan Plaice

100

소프트웨어의 품질은 더 큰 판매로 이어질 것입니다. 때로는 그렇지는 않지만 항상 그렇지는 않습니다.


37
소프트웨어 판매? 즉 1999 그래서
bzlm

요즘은 구독 기반 웹 사이트가 많이 있습니다 ...
cgp

11
마이크로 소프트는 확실히 그것을 죽인다.
Bill Martin

이걸 정말 사랑해야 해.
박사.

18
소프트웨어의 품질 / 성능 향상이 기능으로 간주되기를 바랍니다.
Tom Leys

82

모든 언어가 (대부분) 동등하게 만들어졌습니다.

오랫동안 선택한 언어가 실제로 개발 과정의 어려움과 프로젝트 성공의 잠재력에 큰 차이를 만들지 않는다고 생각했습니다. 이것은 사실이 아닙니다.

업무에 적합한 언어를 선택하는 것은 다른 단일 프로젝트 결정만큼 중요합니다.


13
올바른 라이브러리를 선택하는 것이 중요하다고 생각합니다. 너무 언어와 라이브러리 사이에 1 대 1 대응이 ... 종종있다 발생
케빈 몬트 로즈

7
그러나 두 프로그래밍 언어가 모두 Turing을 완료하면 차이점은 무엇입니까? 어느 언어로든 프로그램을 작성할 수 있습니다! ;)
Bill the Lizard

8
어떤 언어를 사용할 것인지가 실제로 프로젝트를 수행 할 사람보다 덜 중요하다는 결정에 동의하지 않습니다. 다른 많은 중요한 결정의 한 예일뿐입니다.
Boris Terzic

13
BrainFu **는 파이썬만큼 완벽합니다.
hasen

9
튜링 완성 언어가 어떻게 든 똑같이 적용 가능하다는 것은 일반적인 오해입니다. 튜링의 완전한 언어는 튜링 머신이 할 수있는 모든 것을 계산할 수 있습니다 (그리고 종종 다른 방법도 암시합니다). 성능과 관련된 의미는 전혀 없습니다. 한 언어에서 선형 시간이 걸리는 작업은 다른 언어에서 기하 급수적으로 시간이 많이 걸리며 여전히 튜링 완료일 수 있습니다. 이론적으로 계산 가능한 것과 실제로 실현 가능한 것에는 큰 차이가 있습니다.
TrayMan

81

주석 / 코드 비율이 크면 좋습니다.

코드가 자체 문서화되어야한다는 것을 깨닫는 데 시간이 걸렸습니다. 물론, 여기에 주석이 있으며 코드를 명확하게 만들 수 없거나 무언가가 수행되는 중요한 이유가있는 경우 도움이됩니다. 그러나 일반적으로 변수의 이름을 바꾸는 데 주석을 쓰는 것이 좋습니다. 더 깨끗하고 명확하며 주석은 코드와 "동기화되지 않습니다".


1
동의 javadoc의 코멘트 (또는 동급)을 제외한 ... 실제 코드.
corlettk

11
+1, 내가 10 개의 라인 함수를 작성하는 데 사용한 논문부터 시작하지 마십시오
wds

또한 assert () 문은 전제 조건 / 사후 조건을 문서화하는 것보다 낫습니다. .NET 4 코드 계약도 자동으로 문서화 할 수 있습니다!
Robert Fraser

66

그 프로그래밍은 불가능합니다.

농담이 아니라, 나는 항상 프로그래밍이 배우는 것이 불가능하다고 생각했고 나는 항상 그것을 멀리했습니다. 코드가 가까워지면 이해할 수 없었습니다.

그러던 어느 날 나는 그냥 기초 초보자 튜토리얼을 읽고 거기서부터 일했습니다. 그리고 오늘 저는 프로그래머로 일하고 매 순간마다 사랑합니다.

덧붙여서, 나는 프로그래밍이 쉽지 않다고 생각하고, 도전적이고, 더 배우는 것을 좋아하고 프로그래밍 문제를 해결하는 것보다 더 재미있는 것은 없습니다.


7
아멘! 그러나 옥상 에서이 견해를 선포하지 마십시오. 우리는 모든 사람 이 프로그래밍이 재미 있다는 것을 알기를 원하지 않습니다 . ;); P
Peter Perháč

9
MasterPeter : 질문을 할 때 담당자를 늘릴 수있는 더 많은 사료를 제공 할 것입니다.
TheTXI

4
나는 프로그래밍 제대로하기 어렵다고 말할 것이다 . 그러나 그것은 가능합니다.
Steve S

4
@Olafur : 왜 질문이 위키가되고 싶습니까?
gnovice

2
이것은 내 경험을 정확하게 반영합니다. 나는 빨리 지금 시작 좋겠 : P
Skilldrick

65

"On Error Resume Next"는 일종의 오류 처리였습니다.


6
vbscript (esp. asp)에서는 오류가 실제로 발생했는지 여부를 신중하게 확인하고 상당히 많은 양의기도와 함께 사용할 수있는 유일한 "오류 처리"옵션이었습니다.
flatline

2
그래 ... 그것은 일종의 ... 단지 우리가 떠나서 기쁘다
Matthew Whited

6
잘?! 하지만 그것은. On Error Resume Next로 오류 처리 블록을 시작하고 무언가를 시도한 다음 If (err.number <> 0)
jpinto3912

이것이 시도 캐치와 동등한 유일한 vbscript입니까?
James

-1 : 일종의 오류 처리입니다. 그다지 우아하지 않습니다.
JohnFx

64

이 프로그래밍 소프트웨어는 더 높은 수학을위한 강력한 토대가 필요합니다.

코딩을 시작하기 몇 년 전에 저는 항상 좋은 프로그래머가 되려면 고급 대수학, 기하학, 미적분학, 삼각법 등을 잘해야한다고 들었습니다.

10 년 후 저는 8 학년생이 할 수 없었던 일을 한 번만해야했습니다.


5
매우 사실입니다. 대부분의 경우 수학 전문가 일 필요는 없습니다. 내가 고급 수학을 정말로 알아야하는 유일한 시간은 취미로 3D 프로그래밍을 할 때였습니다. 사실, 고등학교 때 3D 프로그래밍이 실제로 삼각대 및 예비 수업에서 더 나은 관심을 기울 이도록 영감을주었습니다. 그 외에는 매우 기본적인 수학 만 있으면됩니다.
Steve Wortham

29
정보가 잘못되었다고 생각합니다. 물론, 훌륭한 프로그래머 가 되려면 실제로 더 높은 수준의 수학을 사용할 필요는 없지만 특정 컴퓨터 과학 개념을 실제로 이해하고 적용하려면 8 학년 이상의 수학이 필요합니다.
hbw

12
저는 수학에 중점을 두는 것이 비판적 사고 기술과 문제 해결을 매일 컴퓨터 프로그래밍에 사용할 수있는 것으로 가르치는 것이 아니라고 생각합니다.
Zack

14
고급 수학을 이해하는 데 필요한 추상화는 소프트웨어를 만드는 데 필요한 추상화와 매우 유사합니다.
OscarRyz

6
나는 문법에 크게 놀라지 않기 때문에 수학의 기초가 강하면 함수형 프로그래밍 개념을 이해하기가 훨씬 쉽다고 생각합니다. 익숙해 보인다. C #에 새로운 기능적 프로그래밍 개념을 보여주기 위해 간단한 수학 함수를 사용하는 실수를했습니다. 어떤 사람들은 그것이 너무 복잡하다고 즉시 선언했습니다.
Richard Anthony Hein

63

어셈블리 언어에서 == 다시 쓰기 최적화.

내가 실제로 어셈블리를 이해했을 때 (BASIC에서 나온) 코드를 더 빨리 실행시키는 유일한 방법은 어셈블리에서 다시 작성하는 것 같았습니다. 컴파일러가 최적화, 특히 분기 예측 등이있는 CPU에서 매우 능숙하다는 사실을 깨닫기 위해 꽤 많은 시간을 보냈습니다. 인간이 합리적인 시간에 할 수있는 것보다 더 나은 작업을 수행 할 수 있습니다. 또한 알고리즘을 최적화하는 데 시간을 투자하면 높은 언어에서 낮은 언어로 변환하는 데 시간을 보내는 것보다 더 나은 결과를 얻을 수 있습니다. 또한 조기 최적화는 모든 악의 근원입니다 ...


8
픽과 찌르지는 친구 :)입니다
마태 복음 회칠 한

4
나쁜 길로 빠져 버린 사람! 판사에게 말해봐!
Shalom Craimer

1
여기에는 복잡성 이론이 등장합니다. 어셈블리는 일반적으로 미세 최적화입니다. 알고리즘의 시간 복잡성을 줄이면 속도를 얻을 수 있습니다.
PeteT 2009

@ scraimer : 여기에 당신을보고 멋진, 난 결코 그것을 기대하지 않았다 ;-)
Robert S. Barnes

@ Matthew- "Peek and Poke는 당신의 친구입니다 :)": ** 최고의 질투 나는 처음으로 쓰지 않았습니다.
FastAl

63
  • 회사 경영진은 코드의 품질에 관심을 갖습니다.
  • 줄이 적을수록 좋습니다.

2
그들은 신경 쓰지 만 예술가 기술과 노동자 기술을 결합해야합니다. 모든 알고리즘은 예술 작품이 될 수 없습니다. 그것의 일부는 더러워 질 것이므로 "덜 사용 된"을 재사용하십시오. 이전 80/20 규칙을 기억하십시오. 프로그램의 80 %가 시간의 20 %를 사용합니다. 따라서 코드의 20 %에 80 %를 집중하고 진정한 예술 작품을 만드십시오! : OP
BerggreenDK

71
줄이 적을수록 좋습니다! Java를 언어로 싫어하는 이유 중 하나는 모든 작업을 수행하는 데 많은 코드 줄이 필요하기 때문입니다. 줄이 적을수록 코드 변경이 더 쉬워집니다.
Claudiu

7
줄 수를 줄이려면 제거 할 대상에 따라 다릅니다. 적은 수의 줄로 코드를 읽을 수 있다면 좋습니다. 그러나 코드를 악화시키는 코드 줄 수를 줄이는 방법은 많이 있습니다.
Herms 2016 년

2
사람들이 "더 적은 라인이 더 낫다"라는 사고 방식을 체인화 된 메소드 호출 7로 깊이 생각할 때를 제외하고 그들 중 하나가 널 포인터를 던질 때 그것이 무엇인지 전혀 알 수 없습니다. 또는 너무 많은 작업을 한 줄로 압축하여 길이가 150 자이며 4 개의 작업을 수행합니다. 이로 인해 읽기가 어렵고 디버그하기가 더 어려워 지지만 실행 중에 더 빠르지도 않고 메모리를 적게 사용하지도 않습니다.
Trampas Kirk

17
줄이)))))로 끝나고 Lisp를 작성하지 않는 경우 줄이 너무 적습니다.

58

날짜의 연도 요소를 2 자리 숫자로 저장하는 것이 전체 세대의 개발자를 괴롭힌 가정이라고 말하고 싶습니다. Y2K 에 날려 간 돈 은 꽤 끔찍했습니다.


1
이것은 CW이지만 그것이 중요하지 않은
유일한 투표입니다

4
IIRC 일부 시스템은 60 년대와 70 년대에 메모리를 적게 사용했기 때문에 한 자리 만 사용했습니다. "196_"과 "197_"이 미리 인쇄 된 용지 형식도 보았습니다.
일부

3
여전히 200_의 양식이 표시되고 201_이 인쇄 된 양식이있을 수 있습니다.
Macha

5
슬픈 부분은 ... Unix는 2038 년에 2 라운드를 가질 것입니다
Evan Plaice

4
@ 빌리 머신 아키텍처가 변경되었다고해서 데이터 형식이 의미하는 것은 아닙니다. 2 자리수의 해상도를 int 형식으로 저장하면 바이트 (8 비트) 날짜 형식이되지만 2k의 수많은 32 비트 하드웨어 아키텍처 시스템에 영향을 미칩니다. 이것은 저수준 하드웨어 사용자가 데이터 형식을 지정하지 못하게하는 이유 중 하나입니다. 그들은 먼 미래에 예정된 SNAFU가있을 것이라는 지식으로 조금만 꼬집습니다.
Evan Plaice

57

삽입 / 버블 정렬 이외의 것은 매우 단순한 마법이었습니다.


하하, 나는 집에 가까워 질 때이 것을 좋아한다. n 제곱 시간보다 빠르게 정렬 ?? 불가능하다!
Ross

재귀와 분할 및 정복에 대한 강한 느낌을 가지면 가장 간단하고 명백한 정렬 알고리즘이 얼마나 놀랍습니다. 그때까지는 대부분 흑 마법처럼 느껴집니다.
Brian

74
나는 알고리즘을 정렬하는 연구원입니다! 그리고 그들은 여전히 ​​어두운 마법처럼 느껴집니다.
SPWorley

14
나는 한때 프로그램에 길고 복잡한 코드 줄을 가지고 있었고 그것을 깨뜨 리거나 설명하기를 원하지 않았습니다 (복잡한 조명 공식이었습니다). 그래서 한 줄에 넣고 #define ' 그것은 DARK_MAGICK이되어야하며, 유일한 설명은 다크 매직 크의 비밀을 밝히지 않으려한다는 경고였다
Alex

2
보고 소트는 그 중에서도 가장 신비한 것입니다.
Alex Beardsley

50

이 XML은 실제로 상호 운용 가능하고 사람이 읽을 수있는 데이터 형식입니다.


7
XML은 만병 통치약은 아니지만 관계형 데이터를 단일 csv 파일로 압축하려는 응용 프로그램을 정기적으로 보던 시절로 돌아가고 싶지 않습니다.
Tony Edgecombe

4
상호 운용 가능한 구문인데, 의심 할 여지가 없습니다. 그 구문은 종종 솔루션에서 가장 중요하지 않은 측면입니다.
Simon Gibbs

2
+1, 위시리스트에도 작고 빠르게 추가 할 수 있습니다.
MarkJ 2016 년

1
문서가 없으면 나사 고정 된 csv 및 고정 길이에 비해 사실이지만 개선되었습니다.
PeteT

7
XML을 데이터 형식으로 가져오고 문자 인코딩을 올바르게 처리하기 위해 XML을 좋아합니다. 그러나 때로는 XML을 사용하여 수행되는 작업이 싫습니다 .
Joachim Sauer

48

그 C ++은 다른 모든 언어보다 본질적으로 우수했습니다.

이것은 대학에서 2 년 전에 친구에게서 받았습니다. 나는 창피하게 오랫동안 그것을 지켰다 (지금은 얼굴이 붉어지고있다). 내가 2 년 정도 일한 후에야 균열이 무엇인지 알 수 있습니다.

아무도 완벽하지 않으며 항상 개선의 여지가 있습니다.


5
"더 나은"것은 당신에게 증오보다 적은 의견을 가져올 것입니다. 그러나 나는 그것이 가장 빠르게 실행되고 유연하며 장애물이없는 것 중 하나라고 말하고 싶습니다. 또한 청소년이 제대로 학습하는 데 필요한 것은 단지 동일한 앱을 어느 정도 수행 할 수 있다는 것입니다. (Java 또는 C #을 사용하여 추가 톤 또는 2 개의 발전 석탄이 필요하지만).
jpinto3912

@ JP : 나는 선택한 단어에 만족합니다 :)
Binary Worrier 8:21의

비즈니스 애플리케이션 세계에서는 생산성이 더 중요합니다. 물론, C ++이 필요한 틈새가 있으며 유일한 옵션입니다.
Shaw

7
저는 C ++ 프로그래머가 겪는 문제보다 C ++ 프로그래머가 겪는 문제가 훨씬 복잡하기 때문에 항상 C ++이 ANSI ANSI보다 나쁘다고 가정했습니다.
Nosredna

1
사실, 다른 언어보다 나은 언어는 Common Lisp입니다. C ++는 나쁘지 않습니다.
David Thornley

47

나는 프로그램을 만드는 것이 수업에서 배운 것과 똑같을 것이라고 생각했다. 당신은 한 무리의 사람들과 함께 앉아, 문제를 해결하고, 해결책을 제시하는 등을 겪었다. 대신 현실 세계는 "여기 내 문제는 해결이 필요합니다. "10 분 후에 다른 솔루션을 얻게되므로 솔루션을 효율적으로 계획 할 시간이 없습니다.


24
나는 그것이 생명이라고 생각합니다.
Robin Day

9
흠 .. 그 회사를 구제 할 시간이야. ..
jpinto3912

8
@ jpinto3912 : 아니요. 다음 회사도 삶의 일부가 될 것입니다 (이전 의견 참조).
Treb

42

CS 클래스에 도입되었을 때 주류 디자인 패턴 이 훌륭 하다고 생각했습니다 . 나는 그 전에 취미로 약 8 년을 프로그래밍했으며, 좋은 추상화를 만드는 방법에 대한 확실한 이해가 없었습니다.

디자인 패턴은 마술처럼 느껴졌습니다. 정말 깔끔한 일을 할 수 있습니다. 나중에 나는 기능 프로그래밍 (Mozart / Oz, OCaml, 나중에 Scala, Haskell 및 Clojure를 통해)을 발견 한 후, 언어가 충분히 표현되지 않았기 때문에 많은 패턴이 단순한 판금이거나 추가적인 복잡함을 이해했습니다.

물론 거의 항상 어떤 종류의 패턴이 있지만 표현 언어에서는 더 높은 수준에 있습니다. 이제 Java로 전문적인 코딩을 해 왔으며 패턴 일치 및 고차 함수 대신 방문자 또는 명령 패턴과 같은 규칙을 사용해야 할 때 고통을 느낍니다.


"언어가 충분히 표현력이 없었기 때문에 많은 패턴이 단순한 판금이거나 추가적인 복잡성이었습니다." 표현력은 단순히 언어로 배선 된 상용구 코드입니다.
알 수 없음

4
사실은 아니지만 고차 함수의 경우와 같이 프로그래머의 기능을 제한하는 대신 일류 제품을 사용하는 것이 어떻게 상용화되어 있습니까? 리스프는 이것의 아름다운 예입니다.
egaga

38

처음 몇 년 동안 나는 프로그래밍하지 않았지만 1Kbyte는 기술적으로 1000이 아닌 1024 바이트라는 것을 알지 못했습니다. 데이터 파일의 크기가 내가 예상 한 것에서 약간 벗어난 것처럼 보였기 때문에 항상 조금 당황했습니다. 있다.


114
하드 드라이브 제조업체는 여전히 관심
Michael Myers

10
@mmyers 하드 드라이브 마케팅 담당자를 의미한다고 생각하십니까? 아니면 드라이브가 실제로 그렇게 구성되어 있습니까?
Instantsoup

16
키비 싫어하는 걸 그만해 MeBi와 KiBi는 적어도 unbambiguobus입니다.
bzlm 2016 년

21
킬로 (Kilo)는 1000, 메가 (Mega)는 1000000, 기가 (Giga)는 1000000000을 의미합니다. 드라이브 제조업체가 아닌 RAM 및 OS 제조업체입니다.
마크 랜섬

39
아무도 안 할거야? 진심이야? 좋아, 내가 할께 ... xkcd.com/394
Erik Forbes

36

그 상태는 다음과 같이 확인됩니다.

if (condition1 && condition2 && condition3)

지정되지 않은 순서로 수행됩니다 ...


15
어떤 언어로? C / C ++, Java 및 Python과 같은 언어는 조건이 왼쪽에서 오른쪽으로 평가되고 거짓을 리턴하는 첫 번째 조건에서 평가가 중지되도록합니다. 랑 게이지 사양의 일부입니다. 나는 대부분의 다른 언어들도 같은 보증을한다고 가정한다.
클린트 밀러

44
@Clint : 예, "잘못된 것으로 판명되었습니다."
bzlm 2016 년

그래, 이건 멋지다. if (myList! = null && myList.Count> = 0) {w stuff ();}와 같은 wrint 재료를 훨씬 쉽게 만듭니다.
Zack

4
실제로 이것은 언어에 따라 다르며 &는 모든 조건 (단축키 아님)을 평가합니다. 그리고 많은 사람들이 AndAlso (&&) 대신 VB에서 And (&)를 사용하는 것을 보았습니다
Lucas

2
. . . 사실 당신이 루카스의 코멘트 재 AndAlso를 사용도하지 않는 VB.net에서 충돌합니다
이진 걱정이 많은 사람에게

35

혼자서 수행하면 프로그래밍 속도가 빨라지고 향상됩니다.


그러나 코드를 제외하고는 Pair- Programming :-)만큼 못생긴 것입니다.
Egg

33
그것은 모두 다른 사람에 달려 있습니다. =)
JohnFx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.