우리 모두는 사용자로서, 관리자로서 또는 프로그래머 그 자체로서 프로그래밍과 밀접하게 관련되어 있다고 생각하지만 궁극적으로 시간이 지남에 따라 우리 삶과 더 연결될 것입니다.
이 기사에서 (내가 만들 계획 인 작은 시리즈의 시작), 저는 수년에 걸쳐 프로그래밍에 관해 제가 발견한 몇 가지 개념을 여러분과 공유하고 싶습니다. 나는 극도로 기술적인 내용을 설명하려는 것이 아닙니다. 그 이유는 나중에 설명하겠습니다. 하지만 내가 의도하는 것은 그들이 내 눈으로 세상을 보게 하는 것이고, 그들이 그 모습을 좋아한다면 조금 더 깊이 파고들어야 할 것입니다
자세한 내용을 살펴보기 전에 먼저 가장 간단한 점부터 짚고 넘어가겠습니다.
기술 포스트를하지 않는 이유는 무엇입니까?
글을 읽은 사람들을 위해 최고의 리눅스 명령, 이 접근법의 원인에 대해 조금 알게 될 것입니다. 기술은 항상 변화하고 있으며 오늘 글을 작성하고 게시물이 호평을 받으면 항상 정보를 업데이트해야 합니다. 오늘날 가장 일반적인 언어에서 유일하게 확실한 것은 변화입니다. 이것으로 나는 (프로그래머가 나를 옳다는 것을 증명할 수 있습니다.) 프레임워크는 항상 코어에서 성장하고 변경됩니다. 이는 버그가 발생하기 때문이며 일부는 단순하다고 간주될 수 있습니다. 버그, 다른 사람은 취약점. 이것이 바로 오늘날 특정 언어에 대한 게시물을 작성하면 아마도 몇 달, 길어야 1~2년 정도의 유용성을 보장받을 수 있는 이유입니다. 그러나 그런 생각은 아닙니다.
전기가 중요하다
가장 낮은 소프트웨어 프로그래밍 언어에 대해 약간의 연구를 수행 한 사람들은 모든 것이 전기로 거슬러 올라간다는 것을 알 것입니다. 과거에는 프로그래밍이 하드웨어 수준에서 수행되었는데, 이는 오래된 시계, 계산기 및 기타 많은 장치가 다음과 같은 방식으로 프로그래밍하여 운명을 완수 할 수 있음을 의미합니다. 하드웨어.
문제
하드웨어 프로그래밍을 변경하는 것은 비용이 많이 들고 복잡합니다 (적어도 그들은 나에게 그렇게 말했어요 ). 이것이 바로 하드웨어로 가능했던 모든 것을 할 수 있도록 몇 가지 명령을 제공하기 위해 실제로 해당 하드웨어 계층을 추상화하는 프로세서가 등장한 이유입니다. 소프트웨어.
프로세서
오늘날의 프로세서에는 다음과 같은 제한된 수의 기능이 있습니다. 인트 루치 온 많은 책에서. 이를 통해 하드웨어가 실행할 수 있는 가장 기본적인 기능을 수행할 수 있으며 장비의 메모리를 통해 정보를 동원할 수 있습니다.
등록
레지스터는 프로세서가 커널에서 작업을 수행할 수 있도록 정보를 저장하는 공간으로, 아키텍처에 따라 크기와 순서가 다를 수 있지만 간단히 말해서 레지스터의 기능은 다음을 나타내는 데이터를 저장하는 것입니다. 프로세서는 다음 작업 유형 중 하나입니다. 데이터 이동, 산술 및 논리, 제어 흐름. 이러한 유형의 기능으로 모든 것을 요약할 수 있습니다.
바이너리
프로세서는 바이너리 수준에서 작동합니다. 즉, 0시 1 . 여기서 흥미로운 사실 GNU / Linux 권한을 기억하십니까? 음,프로세서가 실제로 이러한 권한을 어떻게 인식하는지 궁금한 적이 있습니까?? 단순 바이너리. 가장 낮은 수준에서 프로세서는 권한을 0과 1의 시퀀스로 이해하므로 우리가 형성하는 XNUMX진수는 다음과 같은 값을 갖습니다. 1 실행을 위해 2 읽기용, 쓰기용 4개. 바이너리를 읽는 방법을 아는 사람들은 다음을 이해할 것입니다.
111100101111
그룹에 대한 읽기, 쓰기 및 실행 권한을 부여합니다. 다른 사람들 그룹을 위해 공연과 독서를하는 동안 그룹 파일 소유자는 읽기 전용입니다. 가장 궁금하신 분들을 위해 마지막 1개의 XNUMX은 다음을 활성화합니다. setguid, setuid 과 sticky bit. 바이너리가 무엇인지 모른다면 다른 게시물에서 설명할 수 있고, setuid, setgid 및 스티키 비트를 모른다면 숙제에 맡기겠습니다. 하지만 다른 경우에는 다른 곳에서 설명할 수도 있습니다. 필요한.
호기심이 부를 때 ...
글쎄, 당신이 여기에서 나를 팔로우했다면 당신의 호기심은 당신에게 많은 질문을 하기 시작할 것입니다. 내가 대답하고 싶은 첫 번째 질문(그리고 아마도 내가 이미 많이 쓰고 있기 때문에 이 게시물이 내가 할 수 있는 유일한 질문)은 : 호출이 동일하다면 프로그램이 왜 그렇게 다른가요?
심리학
프로그래밍은 마음을 읽는 법을 배우는 기술입니다. 저는 얼마 전에 읽은 Edsger Dijkstra의 말을 인용하면서 이 섹션을 시작하고 싶습니다.
디버깅이 버그를 제거하는 과정이라면 프로그래밍은 버그를 도입하는 과정이어야 합니다.
그리고 나는 이 모든 것을 설명하는 더 좋은 방법을 찾을 수 없습니다. 프로그래밍이 오류를 유발하는 기술인 이유는 무엇입니까? 이 순간에는 한 명 이상이 묻습니다. 대답은 간단합니다. 왜냐하면 우리의 마음은 인간이고 인간은 실수를 하기 때문입니다. 그것은 우리의 본성에 있으며, 인간이 지구상에 존재하는 한 거기에 있을 것입니다.
컴퓨터는 틀리지 않습니다
실수를 저지르는 것은 우리이고, 팀은 항상 우리가 그들에게 말한 것을 재현하는 것으로 제한할 것입니다. 그래서 다른 C 책에서 다음과 같은 내용을 읽은 적이 있습니다.
C는 거친 언어이고 그것으로 많은 것을 할 수 있지만, 당신이 원하거나 그렇게 하라고 하면 발에 총을 쏘는 것을 결코 멈추지 않을 것입니다.
이것은 다소 흥미로운 사실입니다. 그렇게 낮은 수준에서 작업할 때 수행되는 많은 작업이 파괴적일 수 있기 때문에 약간 더 높은 수준의 언어에서는 발생하지 않는 일이 발생합니다. 오류 방지 계층이 오래되었기 때문입니다. .
모든 것이 심리학입니다
모든 언어, 프레임워크, 프로그래머는 일종의 철학을 존중하고 따르며, 그렇지 않다면 매우 유망한 미래가 없습니다. UNIX 및 파생 제품에서 작업하는 사람들은 아마도 오래된 문구를 알고 있을 것입니다.
한 가지만하고 아주 잘하십시오.
이 철학은 커널과 같은 일부 프로젝트, 한 가지 일만 수행하는 상당히 작은 기능이지만 최선을 다해 수행하는 프로젝트에서 따르는 것입니다.
우리가 다른 언어로 가면 각각은 기능과 목적을 갖게 될 것입니다. 일부는 더 허용적이고 다른 일부는 더 제한적이지만 모두 자신의 사고 방식을 따릅니다.
마음을 읽는 법 배우기
프로그래머들 사이에는 동일한 문제를 해결하는 방법이 수백 가지가 있다는 꽤 흔한 말이 있습니다. 이는 사실이지만 이 측면에는 훨씬 더 깊은 내용이 있습니다. 소스 코드를 읽으면 다른 사람의 마음뿐만 아니라 그것을 작성한 프로그래머의 마음도 읽을 수 있습니다. 일종의 심오한 가상 일기장입니다 개발자의 마음을 깊이 알 수 있으며, 대규모 프로젝트의 경우 시간이 지남에 따라 그들의 논리적이고 비판적인 사고가 어떻게 성장했는지 확인할 수 있습니다. 최선의 길을 발견해야 했던 사람들에게서 가장 좋은 길을 배울 수 있기 때문에 뭔가 특별하고 어린 아이들의 마음에 큰 자양분을 공급해 주는 것
일관성있게
많은 프로그래머와 전문가들은 우리가 안전 지대, 사실이지만 특정 프로세스 및 형식을 유지하는 데 필요한 것 이상입니다. 이것은 설명하기 간단합니다. 우리의 마음은 반복적이고 구조를 존중합니다. 매일 같은 방식으로 코드를 작성하면 짧은 시간에 양식에 대한 생각을 멈추고 집중할 수 있습니다. 배경. 이것은 당신이 볼 수 있습니다 논리 대신 프로그램의 언어 구문. 이것이 제가 배우는 것을 고려하는 이유입니다. 개념들 항상 배우는 것보다 더 중요합니다 양식. 이것은 개인적인 의견이지만, 이 글을 다 읽고 나면 내가 왜 이렇게 생각하는지 이해할 수 있기를 바랍니다. 게다가 이 말은 C, Java, Javascript, Python, Ruby, PHP 및 다른 사람들 개념을 알고 있으면 코드 작성이 더 쉬워집니다.
요약하면
글쎄, 이것은 프로그래밍 기술에 대해 다르게 생각하는 데 도움이 되고 아마도 수백 번 작성한 코드를 실행할 수 있는 개념을 탐구하도록 유도하는 시리즈의 첫 번째 단계입니다. 그것이 실제로 무엇을 하는지에 대해 생각하는 것을 멈추지 않았습니다. 그리고 아직 프로그래밍을 시작하지 않았지만 알아야 할 정말 중요한 것이 무엇인지 우선 순위를 정하고 싶은 분들을 위해 감사합니다