기본 수준 :
가장 단순하고 가장 기본적인 수준에서 사물을 살펴 보겠습니다.
수학의 경우 :
2 + 3 = 5
나는 아주 어렸을 때에 대해 배웠습니다. 가장 기본적인 요소 인 2 개의 객체와 3 개의 객체를 볼 수 있습니다. 큰.
컴퓨터 프로그래밍의 경우 대부분의 사람들은 고급 언어를 사용하는 경향이 있습니다. 일부 고급 언어는 C와 같은 하위 고급 언어 중 하나로 "컴파일"될 수 있습니다. 그런 다음 C를 어셈블리 언어로 번역 할 수 있습니다. 그런 다음 어셈블리 언어는 기계 코드로 변환됩니다. 많은 사람들이 복잡성이 끝났다고 생각하지만, 그렇지 않습니다. 최신 CPU는 머신 코드를 명령으로 사용하지만 실제로는 "마이크로 코드"를 실행하여 해당 명령을 실행합니다.
이것은 가장 기본적인 구조 (가장 단순한 구조를 다루는 것)에서 하드웨어에 내장되어 있고 대부분의 프로그래머가 직접 사용하지 않거나 업데이트하지 않는 마이크로 코드를 다루고 있음을 의미합니다. 실제로, 대부분의 프로그래머는 마이크로 코드 (마이크로 코드보다 0 레벨 높음)를 건드리지 않을뿐만 아니라 대부분의 프로그래머는 머신 코드 (마이크로 코드보다 1 레벨 높음) 또는 어셈블리 (마이크로 코드보다 2 레벨 높음)를 건드리지 않습니다 ( 아마도 대학에서 약간의 정식 훈련을 제외하고). 대부분의 프로그래머는 3 단계 이상의 시간을 보냅니다.
또한 우리가 의회 (일반적으로 사람들이 얻는 수준이 낮은 수준)를 살펴보면, 각 단계는 일반적으로 훈련을 받고 그 단계를 해석 할 자원이있는 사람들이 이해할 수 있습니다. 이런 의미에서 어셈블리는 고급 언어보다 훨씬 간단합니다. 그러나 어셈블리는 매우 간단하여 복잡한 작업이나 평범한 작업을 수행하는 것이 매우 지루합니다. 고급 언어는 우리를 자유롭게 해줍니다.
"역 엔지니어링"에 관한 법률에서 판사는 이론적으로 코드를 한 번에 1 바이트 씩 처리 할 수 있다고하더라도 현대 프로그램에는 수백만 바이트가 포함되므로 일부 코드 (예 : 코드 사본)는 이러한 코드에 대해서만 작성해야한다고 선언했습니다. 실현 가능한 노력. (따라서 내부 개발은 저작권법의 일반화 된 "사본 없음"규칙을 위반하는 것으로 간주되지 않았습니다.) (저는 무단 세가 제네시스 카트리지를 만드는 것을 생각하고 있지만 게임 지니 사건에서 언급 된 것을 생각하고있을 수 있습니다. )
현대화:
286을위한 코드를 실행합니까? 아니면 64 비트 코드를 실행합니까?
수학은 수천 년 동안 거슬러 올라가는 기본을 사용합니다. 컴퓨터를 사용하는 사람들은 일반적으로 20 년 전의 투자가 쓸모없는 자원 낭비라고 생각합니다. 즉, 수학을 훨씬 더 철저히 테스트 할 수 있습니다.
사용 된 도구의 표준 :
나는 (나보다 더 공식적인 컴퓨터 프로그래밍 교육을받은 친구에 의해) C 사양을 충족시키는 버그가없는 C 컴파일러 같은 것은 없다는 것을 배웠다. C 언어는 기본적으로 스택 목적으로 무한 메모리를 사용할 가능성을 가정하기 때문입니다. 분명히, 사람들이 본질적으로 좀 더 유한 한 실제 기계로 작동하는 사용 가능한 컴파일러를 만들려고 할 때 그러한 불가능한 요구 사항을 벗어나야했습니다.
실제로 Windows Script Host의 JScript를 사용하면 객체를 사용하여 많은 것을 얻을 수 있음을 알았습니다. (새 코드를 작성하는 데 필요한 도구 세트가 최신 버전의 Microsoft Windows에 내장되어 있기 때문에 환경이 마음에 듭니다.)이 환경을 사용할 때 때로는 개체의 작동 방식에 대해 쉽게 찾을 수있는 설명서가없는 것을 발견했습니다. 그러나 객체를 사용하면 매우 유익하므로 어쨌든 그렇게합니다. 그래서 내가 할 일은 코드를 작성하는 것입니다. 호넷의 둥지로 버그가있을 수 있으며, 샌드 박스가있는 환경에서 효과를 볼 수 있고 상호 작용하면서 객체의 동작에 대해 배울 수 있습니다.
다른 경우에는 때때로 개체의 동작을 파악한 후에 만 개체 (운영 체제와 함께 제공됨)에 버그가 있으며 Microsoft가 의도적으로 결정한 것으로 알려진 문제는 해결되지 않음을 알게되었습니다. .
이러한 시나리오에서 나는 정기적으로 (1 년에 두 번) 정기적으로 새 릴리스를 작성하는 마스터 프로그래머가 만든 OpenBSD를 10 년 이상 유명한 "원격 홀 2 개"로 신뢰합니까? (심지어 심각한 문제에 대한 정오표도 있습니다.) 아닙니다. Microsoft Windows를 사용하는 컴퓨터를 사람들에게 제공하는 비즈니스를 지원하는 비즈니스를 위해 일하고 있기 때문에 이러한 고품질의 제품에 의존하지 않으므로 코드가 작동해야합니다.
실용성 / 사용 가능성은 사람들이 유용하다고 생각하는 플랫폼에서 작업해야하며, 보안이 매우 나쁜 플랫폼입니다 (동일한 회사의 제품이 훨씬 더 악화 된 밀레니엄 초기부터 대폭 개선 되었음에도 불구하고). .
요약
컴퓨터 프로그래밍에 오류가 발생하기 쉬운 이유는 여러 가지가 있으며 이는 컴퓨터 사용자 커뮤니티에서 받아들입니다. 실제로 대부분의 코드는 오류없는 노력을 허용하지 않는 환경에서 작성됩니다. (보안 프로토콜 개발과 같은 일부 예외는 이와 관련하여 조금 더 많은 노력을 기울일 수 있습니다.) 더 많은 돈을 투자하기를 원하지 않는 기업의 일반적인 생각과 고객을 행복하게 만드는 인공 마감일을 놓치는 것의 영향은 다음과 같습니다. 너무 많은 시간을 소비하면 상황이 10 년 안에 크게 변하기 때문에 쓸모없는 플랫폼을 사용하게 될 것입니다.
어쨌든, 나는 strlen과 strcpy에 대한 소스 코드를 보았을 때 매우 유용하고 인기있는 기능이 얼마나 짧은 지 놀랐습니다. 예를 들어, strlen은 "int strlen (char * x) {char y = x; ( (y ++)); return (yx) -1;}" 과 같은 것일 수 있습니다 .
그러나 일반적인 컴퓨터 프로그램은 그보다 훨씬 길다. 또한 많은 현대적인 프로그래밍은 덜 철저하게 테스트되거나 버그가있는 것으로 알려진 다른 코드를 사용합니다. 오늘날의 시스템은 "낮은 수준으로 처리되는 세부 사항"으로 많은 미세한 부분을 손으로 흔드는 것을 제외하고는 쉽게 생각할 수있는 것보다 훨씬 정교합니다.
이 필수 복잡성과 복잡하고 잘못된 시스템으로 작업 할 때의 확실성으로 인해 컴퓨터 프로그래밍은 사물이 훨씬 간단한 수준으로 내려 오는 경향이있는 많은 수학보다 검증하기 위해 많은 하드웨어를 만듭니다.
수학으로 사물을 분해하면 아이들이 이해할 수있는 개별 조각에 도달하게됩니다. 대부분의 사람들은 수학을 신뢰합니다. 적어도 기본 산술 (또는 적어도 카운팅).
실제로 컴퓨터 프로그래밍을 분석하여 실제로 어떤 일이 일어나고 있는지 확인하면 결국 전자적으로 실행되는 깨진 표준 및 코드의 깨진 구현으로 끝나게되고 실제 구현은 대부분의 대학 교육을받은 컴퓨터 과학자들이하는 마이크로 코드보다 한 단계 아래에 있습니다. 감히 만지지 마십시오 (그들이 알고 있다면).
나는 버그가없는 코드를 작성할 수 있다는 개념에 반대하는 대학 또는 최근 졸업생의 일부 프로그래머와 이야기했습니다. 그들은 가능성을 기록했으며 인상적인 예 (내가 보여줄 수있는)가 설득력있는 주장이라는 것을 인정하지만, 그러한 샘플을 대표적 드문 우연한 것으로 간주하고 여전히 셀 수있는 가능성을 무시합니다. 더 높은 표준을 갖는 데 (수학에서 볼 수있는 훨씬 더 신뢰할 수있는 기초와는 훨씬 다른 태도입니다.)