모두에게 인사드립니다 이번 주에 저는 프로그래밍에 관한 몇 권의 책을 읽는 것이 꽤 즐거웠습니다. 사실 프로그래밍을 배우는 가장 좋은 방법은 항상 책을 이용하는 것입니다. (저를 포함하여) 찾을 수 있는 모든 기사, 튜토리얼, 가이드는 단순한 것입니다. 해당 주제에 대한 실제 책과 비교할 때 참고할 점. 이제 우리는 "진짜" 책이 무엇인지 정의해야 합니다. 일반적으로 모든 책이 좋은 것은 아니며, 많은 책은 실제 가치보다 더 많은 비용이 들고 시간을 낭비할 수도 있기 때문입니다.
지난 몇 년 동안 내가 읽은 책 목록과 내가 추천 할 수있는 책 목록은 상당히 다양해졌지만 의심 할 여지없이 내가 좋아하는 책 중 일부는 특정 순서없이 다음과 같습니다.
- CEH 인증 윤리 해커 (Matt Walker).
- Python 시작 : Magnus Lie Hetland의 초보자에서 전문가로.
- 해킹 : Jon Erickson의 착취 기술.
- Massimo Banzi의 Arduino 시작하기.
- Cameron Newbam과 Bill Rosenblatt의 bash Shell 학습.
- Arnold Robbins, Elbert Hannah 및 Linda Lamb의 vi 및 vim 편집기 학습.
- Linux Kernel in a Nutshell by Greg Kroah-Hartman (Gentoo 개발자도).
- Jens Gustedt의 Modern C
- Chris Anley, John Heasman, Felix«FX»Linder 및 Gerardo Richarte의 Shellcoder 핸드북.
- Brian W. Kernighan 및 Dennis M. Ritchie (C 제작자)의 C 프로그래밍 언어
- Richard Stallman, Roland Pesch, Stan Shebs 등의 GDB를 사용한 디버깅
- 해킹 Linux 노출 : Pete Herzog, Marga Barceló, Rick Tucker, Andrea Barisani (다른 전 Gentoo 개발자), Thomas Bader, Simon Biles, Colby Clark, Raoul Chiesa, Pablo Endres를 포함한 대규모 ISECOM 연구원 그룹의 Linux 보안 비밀 및 솔루션 , Richard Feist, Andrea Ghirardini, Julian "HammerJammer"Ho, Marco Ivaldi, Dru Lavigne, Stephane Lo Presti, Christopher Low, Ty Miller, Armand Puccetti & et al.
- 운영 체제 : Dhananjay M. Dhamdhere의 개념 기반 접근 방식
- Scott Chacon 및 Ben Straub의 Pro Git
- 전문가 C 프로그래밍 : Peter Van Der Linden의 깊은 비밀.
나는 이 책들 각각에 대해 열광할 수 있지만 오늘은 목록의 마지막 책에서 일부 구절을 선택하겠습니다. 왜냐하면 이 일화 중 많은 부분이 나를 사로잡았으며 C와 프로그래밍의 복잡한 비밀을 더 잘 이해하는 데 도움이 되었기 때문입니다. 일반.
Unix 및 C
UNIX에 대해 이야기 할 때 역사는이 시스템의 기원과 오늘날까지이 시스템과 그 파생물 (Linux 포함) 개발에 가장 많이 사용되는 언어의 개발과 얽혀 있습니다. 그리고 흥미롭게도이 두 가지는 "실수"에서 태어났습니다.
멀티트릭스 운영 체제를 만들기 위해 Bell Laboratories, General Electric 및 MIT 자체를 통합 한 메가 프로젝트였습니다. 시스템은 많은 오류를 발생 시켰으며 시스템을 실질적으로 사용할 수 없게 만든 가장 중요한 성능 오류 중 하나라고 말했습니다. 우리는 1969 년에 대해 이야기하고 있으므로 그 당시의 하드웨어는 시스템 자체를 실행하는 데 필요한 양의 소프트웨어를 지원할 수 없었습니다.
두 명의 Bell 엔지니어가 PDP-1970 용으로 간단하고 빠르며 가벼운 운영 체제를 개발하기 시작한 것은 7 년이 되어서야였습니다. 전체 시스템이 작성되었습니다 어셈블러 그리고 불렀다 UNIX 패러디로 멀티트릭스 그는 몇 가지 일만하고 싶었지만 두 번째가 의미하는 엄청난 낭비 작업 대신 잘하고 싶었 기 때문입니다. 이제 이유를 이해할 수 있습니다. 시대 1 월 XNUMX 일 시작 1970. 나에게는 다소 흥미로운 사실이다. 그 당시에는 C 자체에 대한 이야기가 아직 없었습니다. 새로운 B Ritchie의 아이디어는 당시 이미 사용 된 B 언어에서 나왔기 때문입니다.
초기 C
수년 (1972-3)에 걸쳐 새로운 언어가 형성되기 시작한 이래로 C라는 용어가 사용되기 시작했으며,이 무렵에 또 다른 흥미로운 사실이 탄생했습니다. 많은 프로그래머와 프로그래머 농담에서 다음과 같이 말합니다.
프로그래머는 0이 아닌 1부터 계산을 시작한다는 것을 알고 있습니다.
글쎄, 이것은 전적으로 사실이 아닙니다. 이것이 오늘날까지 그렇게 간주되는 실제 이유는 생성 시 컴파일러 작성자가 다음을 사용하여 배열을 계산하는 것이 더 쉬웠기 때문입니다. 오프셋, 이들은 원점에서 원하는 목표까지 존재하는 거리를 나타냅니다.
array[8]=2;
요소가 9 요소 2가 저장될 메모리 공간에 도달하기 위해 배열에 8개의 단위가 추가되기 때문에 배열의 수는 2로 정의됩니다. C 이전에는 많은 언어가 C 덕분에 1부터 세기 시작했지만 이제는 거의 모든 언어가 다음으로 시작합니다. 0 따라서 이것이 프로그래머의 잘못이 아니라 오히려 컴파일러 작성자의 잘못입니다.
본 쉘
이 주제는 C와 직접적으로 관련이 없지만 여러 사람이 쉘 프로그래밍이 왜 그렇게 특이한 지 이해하는 데 도움이 될 수 있으며, 확실히 알고 싶어하는 주제입니다. Steve Bourne은 그 시즌에 Algol-68 용 컴파일러를 작성했습니다.이 언어는 키 ( {} )는 단어로 대체되므로 C에서 다음과 같이 정의 할 수 있습니다.
#define IF if(
#define THEN ){
#define ELSE }else{
#define FI };
이것들은 Algol이 이해하는 것의 몇 가지 예일뿐입니다.하지만 오늘날 쉘 프로그래밍에 적용하면 쉘에서 프로그램에 필요한 이유를 이해할 수 있습니다. fi 각각 if 정말 흥미롭습니다.
읽기 시작
특히 이들 중 많은 부분이 이미 사전 배경 지식이 필요한 프로그래밍 주제이기 때문에 책의 모든 세부 사항을 말할 수는 없지만, 그 과정에서 발견한 몇 가지 흥미로운 일화를 여러분과 공유하고 싶다고 생각했습니다. 할일 목록에 있는 일부 기사를 작업할 시간이 없었습니다. 이 최신 책들이 저를 사로잡고 매일 즐기고 있으며 무엇보다도 가능한 한 많이 이해하려고 노력하고 있기 때문입니다. 안녕하세요. 곧 더 많은 주제를 여러분과 공유할 수 있게 될 것입니다.