프로그래밍 : 컴퓨터 심리학

우리 모두는 사용자로서, 관리자로서 또는 프로그래머 그 자체로서 프로그래밍과 밀접하게 관련되어 있다고 생각하지만 궁극적으로 시간이 지남에 따라 우리 삶과 더 연결될 것입니다.

이 기사에서 (내가 만들 계획 인 작은 시리즈의 시작), 저는 수년에 걸쳐 프로그래밍에 관해 제가 발견한 몇 가지 개념을 여러분과 공유하고 싶습니다. 나는 극도로 기술적인 내용을 설명하려는 것이 아닙니다. 그 이유는 나중에 설명하겠습니다. 하지만 내가 의도하는 것은 그들이 내 눈으로 세상을 보게 하는 것이고, 그들이 그 모습을 좋아한다면 조금 더 깊이 파고들어야 할 것입니다 

자세한 내용을 살펴보기 전에 먼저 가장 간단한 점부터 짚고 넘어가겠습니다.

기술 포스트를하지 않는 이유는 무엇입니까?

글을 읽은 사람들을 위해 최고의 리눅스 명령, 이 접근법의 원인에 대해 조금 알게 될 것입니다. 기술은 항상 변화하고 있으며 오늘 글을 작성하고 게시물이 호평을 받으면 항상 정보를 업데이트해야 합니다. 오늘날 가장 일반적인 언어에서 유일하게 확실한 것은 변화입니다. 이것으로 나는 (프로그래머가 나를 옳다는 것을 증명할 수 있습니다.) 프레임워크는 항상 코어에서 성장하고 변경됩니다. 이는 버그가 발생하기 때문이며 일부는 단순하다고 간주될 수 있습니다. 버그, 다른 사람은 취약점. 이것이 바로 오늘날 특정 언어에 대한 게시물을 작성하면 아마도 몇 달, 길어야 1~2년 정도의 유용성을 보장받을 수 있는 이유입니다. 그러나 그런 생각은 아닙니다. 

전기가 중요하다

가장 낮은 소프트웨어 프로그래밍 언어에 대해 약간의 연구를 수행 한 사람들은 모든 것이 전기로 거슬러 올라간다는 것을 알 것입니다. 과거에는 프로그래밍이 하드웨어 수준에서 수행되었는데, 이는 오래된 시계, 계산기 및 기타 많은 장치가 다음과 같은 방식으로 프로그래밍하여 운명을 완수 할 수 있음을 의미합니다. 하드웨어.

문제

하드웨어 프로그래밍을 변경하는 것은 비용이 많이 들고 복잡합니다  (적어도 그들은 나에게 그렇게 말했어요  ). 이것이 바로 하드웨어로 가능했던 모든 것을 할 수 있도록 몇 가지 명령을 제공하기 위해 실제로 해당 하드웨어 계층을 추상화하는 프로세서가 등장한 이유입니다. 소프트웨어.

프로세서

오늘날의 프로세서에는 다음과 같은 제한된 수의 기능이 있습니다. 인트 루치 온 많은 책에서. 이를 통해 하드웨어가 실행할 수 있는 가장 기본적인 기능을 수행할 수 있으며 장비의 메모리를 통해 정보를 동원할 수 있습니다.

등록

레지스터는 프로세서가 커널에서 작업을 수행할 수 있도록 정보를 저장하는 공간으로, 아키텍처에 따라 크기와 순서가 다를 수 있지만 간단히 말해서 레지스터의 기능은 다음을 나타내는 데이터를 저장하는 것입니다. 프로세서는 다음 작업 유형 중 하나입니다. 데이터 이동, 산술 및 논리, 제어 흐름. 이러한 유형의 기능으로 모든 것을 요약할 수 있습니다.

바이너리

프로세서는 바이너리 수준에서 작동합니다. 즉, 01 . 여기서 흥미로운 사실 ​​GNU / Linux 권한을 기억하십니까? 음,프로세서가 실제로 이러한 권한을 어떻게 인식하는지 궁금한 적이 있습니까?? 단순  바이너리. 가장 낮은 수준에서 프로세서는 권한을 0과 1의 시퀀스로 이해하므로 우리가 형성하는 XNUMX진수는 다음과 같은 값을 갖습니다. 실행을 위해 2 읽기용, 쓰기용 4개. 바이너리를 읽는 방법을 아는 사람들은 다음을 이해할 것입니다.

111100101111

그룹에 대한 읽기, 쓰기 및 실행 권한을 부여합니다. 다른 사람들 그룹을 위해 공연과 독서를하는 동안 그룹 파일 소유자는 읽기 전용입니다. 가장 궁금하신 분들을 위해 마지막 1개의 XNUMX은 다음을 활성화합니다. setguid, setuidsticky bit. 바이너리가 무엇인지 모른다면 다른 게시물에서 설명할 수 있고, setuid, setgid 및 스티키 비트를 모른다면 숙제에 맡기겠습니다.  하지만 다른 경우에는 다른 곳에서 설명할 수도 있습니다. 필요한.

호기심이 부를 때 ...

글쎄, 당신이 여기에서 나를 팔로우했다면 당신의 호기심은 당신에게 많은 질문을 하기 시작할 것입니다. 내가 대답하고 싶은 첫 번째 질문(그리고 아마도 내가 이미 많이 쓰고 있기 때문에 이 게시물이 내가 할 수 있는 유일한 질문)은 : 호출이 동일하다면 프로그램이 왜 그렇게 다른가요?

심리학

프로그래밍은 마음을 읽는 법을 배우는 기술입니다.  저는 얼마 전에 읽은 Edsger Dijkstra의 말을 인용하면서 이 섹션을 시작하고 싶습니다.

디버깅이 버그를 제거하는 과정이라면 프로그래밍은 버그를 도입하는 과정이어야 합니다.

그리고 나는 이 모든 것을 설명하는 더 좋은 방법을 찾을 수 없습니다.  프로그래밍이 오류를 유발하는 기술인 이유는 무엇입니까? 이 순간에는 한 명 이상이 묻습니다. 대답은 간단합니다. 왜냐하면 우리의 마음은 인간이고 인간은 실수를 하기 때문입니다.  그것은 우리의 본성에 있으며, 인간이 지구상에 존재하는 한 거기에 있을 것입니다.

컴퓨터는 틀리지 않습니다

실수를 저지르는 것은 우리이고, 팀은 항상 우리가 그들에게 말한 것을 재현하는 것으로 제한할 것입니다. 그래서 다른 C 책에서 다음과 같은 내용을 읽은 적이 있습니다.

C는 거친 언어이고 그것으로 많은 것을 할 수 있지만, 당신이 원하거나 그렇게 하라고 하면 발에 총을 쏘는 것을 결코 멈추지 않을 것입니다.

이것은 다소 흥미로운 사실입니다.  그렇게 낮은 수준에서 작업할 때 수행되는 많은 작업이 파괴적일 수 있기 때문에 약간 더 높은 수준의 언어에서는 발생하지 않는 일이 발생합니다. 오류 방지 계층이 오래되었기 때문입니다. .

모든 것이 심리학입니다

모든 언어, 프레임워크, 프로그래머는 일종의 철학을 존중하고 따르며, 그렇지 않다면 매우 유망한 미래가 없습니다. UNIX 및 파생 제품에서 작업하는 사람들은 아마도 오래된 문구를 알고 있을 것입니다.

한 가지만하고 아주 잘하십시오.

이 철학은 커널과 같은 일부 프로젝트, 한 가지 일만 수행하는 상당히 작은 기능이지만 최선을 다해 수행하는 프로젝트에서 따르는 것입니다.

우리가 다른 언어로 가면 각각은 기능과 목적을 갖게 될 것입니다. 일부는 더 허용적이고 다른 일부는 더 제한적이지만 모두 자신의 사고 방식을 따릅니다.

마음을 읽는 법 배우기

프로그래머들 사이에는 동일한 문제를 해결하는 방법이 수백 가지가 있다는 꽤 흔한 말이 있습니다. 이는 사실이지만 이 측면에는 훨씬 더 깊은 내용이 있습니다. 소스 코드를 읽으면 다른 사람의 마음뿐만 아니라 그것을 작성한 프로그래머의 마음도 읽을 수 있습니다. 일종의 심오한 가상 일기장입니다  개발자의 마음을 깊이 알 수 있으며, 대규모 프로젝트의 경우 시간이 지남에 따라 그들의 논리적이고 비판적인 사고가 어떻게 성장했는지 확인할 수 있습니다. 최선의 길을 발견해야 했던 사람들에게서 가장 좋은 길을 배울 수 있기 때문에 뭔가 특별하고 어린 아이들의 마음에 큰 자양분을 공급해 주는 것 

일관성있게

많은 프로그래머와 전문가들은 우리가 안전 지대, 사실이지만 특정 프로세스 및 형식을 유지하는 데 필요한 것 이상입니다. 이것은 설명하기 간단합니다. 우리의 마음은 반복적이고 구조를 존중합니다. 매일 같은 방식으로 코드를 작성하면 짧은 시간에 양식에 대한 생각을 멈추고 집중할 수 있습니다. 배경. 이것은 당신이 볼 수 있습니다 논리 대신 프로그램의 언어 구문. 이것이 제가 배우는 것을 고려하는 이유입니다. 개념들 항상 배우는 것보다 더 중요합니다 양식. 이것은 개인적인 의견이지만, 이 글을 다 읽고 나면 내가 왜 이렇게 생각하는지 이해할 수 있기를 바랍니다.  게다가 이 말은 C, Java, Javascript, Python, Ruby, PHP 및 다른 사람들  개념을 알고 있으면 코드 작성이 더 쉬워집니다.

요약하면

글쎄, 이것은 프로그래밍 기술에 대해 다르게 생각하는 데 도움이 되고 아마도 수백 번 작성한 코드를 실행할 수 있는 개념을 탐구하도록 유도하는 시리즈의 첫 번째 단계입니다. 그것이 실제로 무엇을 하는지에 대해 생각하는 것을 멈추지 않았습니다. 그리고 아직 프로그래밍을 시작하지 않았지만 알아야 할 정말 중요한 것이 무엇인지 우선 순위를 정하고 싶은 분들을 위해  감사합니다