Hälsningar till alla 🙂 dessa veckor har jag varit ganska underhållen att läsa några böcker om programmering, sanningen är att det bästa sättet att lära sig att programmera alltid är med en bok, vilken artikel, handledning, guide som man kan hitta (inklusive min) är bara riktmärken när man jämför dem med en riktig bok om ämnet. Nu måste vi också definiera vad en "riktig" bok är, eftersom inte alla böcker vanligtvis är bra, och många av dem kan till och med kosta mer än de verkligen är värda och slösa tid.
Under dessa år har listan över böcker som jag har läst och listan över böcker som jag kan rekommendera avvikit ganska mycket, men utan tvekan bland några av mina favoriter vi har (i ingen specifik ordning):
- CEH Certified Ethical Hacker av Matt Walker.
- Början av Python: Från nybörjare till professionell av Magnus Lie Hetland.
- Hacking: utnyttjandekonsten av Jon Erickson.
- Komma igång med Arduino av Massimo Banzi.
- Att lära sig bash-skalet av Cameron Newbam & Bill Rosenblatt.
- Lärande vi- och vim-redaktörerna av Arnold Robbins, Elbert Hannah & Linda Lamb.
- Linux Kernel in a Nutshell av Greg Kroah-Hartman (en Gentoo-utvecklare också).
- Modern C av Jens Gustedt
- Shellcoder's Handbook av Chris Anley, John Heasman, Felix «FX» Linder & Gerardo Richarte.
- C-programmeringsspråket av Brian W. Kernighan & Dennis M. Ritchie (skapare av C)
- Felsökning med GDB av Richard Stallman, Roland Pesch, Stan Shebs, et al.
- Hacking Linux Exposed: Linux Security Secrets and Solutions från en stor grupp ISECOM-forskare, inklusive Pete Herzog, Marga Barceló, Rick Tucker, Andrea Barisani (en annan före detta Gentoo-utvecklare), Thomas Bader, Simon Biles, Colby Clark, Raoul Chiesa , Pablo Endres, Richard Feist, Andrea Ghirardini, Julian "HammerJammer" Ho, Marco Ivaldi, Dru Lavigne, Stephane Lo Presti, Christopher Low, Ty Miller, Armand Puccetti & et al.
- Operativsystem: En konceptbaserad strategi av Dhananjay M. Dhamdhere
- Pro Git av Scott Chacon och Ben Straub
- Expert C-programmering: Djupa hemligheter av Peter Van Der Linden.
Jag kunde tala högt om var och en av dessa böcker, men idag tar vi några av passagen från den sista på listan, eftersom många av dessa anektoder har fängslat mig och hjälpt mig att bättre förstå några av de invecklade hemligheterna i C och programmering i allmänhet. 🙂
Unix och C
När vi pratar om UNIX är sammanflätad historia med ursprunget till detta system och utvecklingen av språket som fram till i dag är en av de mest använda i utvecklingen av det och dess derivat (inklusive Linux). Och märkligt nog är dessa två födda av ett "misstag".
Multiriker Det var ett megaprojekt som samlade Bell-laboratorier, General Electric och MIT för att skapa ett operativsystem. Detta system presenterade många fel och bland ett av de viktigaste prestandafel som gjorde systemet praktiskt taget oanvändbart. Vi pratar om år 1969, så den tidens hårdvara kunde inte stödja den mängd programvara som behövdes för att köra själva systemet.
Det var först 1970 som ett par Bell-ingenjörer började arbeta med ett enkelt, snabbt och lätt operativsystem för PDP-7. Hela systemet hade skrivits in Assemblerare och hade kallats UNIX som en parodi på Multiriker eftersom han bara ville göra få saker, men att göra det bra istället för det enorma bortkastade arbetet som det andra innebar. Nu kan du förstå varför Epok börjar den 1 januari 1970. 🙂 Ett ganska nyfiken faktum för mig. Vid den tiden var det fortfarande inget tal om ett C i sig, utan om ett Ny B eftersom Ritchies idéer kom från det redan använda B-språket på den tiden.
Tidigt C
Under åren (1972-3) började termen C användas sedan det nya språket började ta form, och omkring denna tid föds ett annat märkligt faktum, många programmerare och skämtare säger:
Programmerare vet att du börjar räkna från 0 istället för 1.
Tja, det här är inte helt sant 🙂 den verkliga anledningen till att detta betraktas så här till i dag är att det vid sammanställningen var enklare att beräkna en matris med kompilatorförfattare förskjutningar, dessa indikerar avståndet som finns från en utgångspunkt till det önskade målet, det är därför:
array[8]=2;
Det säger oss att elementet 9 av array definieras som 2, eftersom 8 enheter läggs till arrayen för att nå minnesutrymmet där element 2. kommer att lagras. Innan C började många språk räkna från 1, tack vare C, nu börjar nästan alla med 0 🙂 så det är inte programmerarens fel, men kompilatorns författares fel att det är så.
Bourne-skalet
Detta är ett ämne som, även om det inte är direkt relaterat till C, kan hjälpa mer än en att förstå varför Shell-programmering är så märklig, och det är verkligen nyfiken att veta. Steve Bourne skrev en kompilator för Algol-68 den säsongen, det här är ett språk där tangenterna ( {}
) ersätts av ord, så vi kan definiera det på följande sätt i C:
#define IF if(
#define THEN ){
#define ELSE }else{
#define FI };
Det här är bara några exempel på vad Algol förstår, men om vi tillämpar det på skalprogrammering idag kommer du att förstå varför i skal dina program kräver en fi
för varje if
🙂 verkligen intressant.
Börja läsa
Jag kan inte berätta alla detaljer i boken, särskilt eftersom många av dessa redan är programmeringsämnen som kräver en tidigare bakgrund för att förstås, men jag trodde att jag skulle dela med dig av några av de nyfikna anekdoterna som jag hittade på vägen 🙂 Jag har inte haft Dags att arbeta med några av de saker som har funnits på att göra-listan eftersom de här sista böckerna helt enkelt har fångat mig och jag njuter av dem varje dag och framför allt försöker förstå dem till fullo. Hälsningar och snart kan jag dela med dig av fler ämnen, hälsningar.
Din artikel har varit väldigt intressant för mig. Tack så mycket.
Mycket intressant som alltid.
Mycket intressant förtydligandena är bra.
Utmärkt
Intressant !!! Tack så mycket.
multics? det kommer inte att vara multics (https://en.wikipedia.org/wiki/Multics)
språk med index från 1 är en uppfinning av satan ...
Intressant anmärkning 🙂 Jag antar att någon gång i historien har båda termerna använts:
https://www.landley.net/history/mirror/collate/unix.htm
och uppenbarligen samma bok som är skriven i mitten av 90-talet.
Tack för förtydligandet 🙂 hälsningar
wa, vilken konstig sak, du har fått mig att tvivla, jag har tittat i en "köpt" kopia av Expert C-programmering: Djupa hemligheter och det kommer multics, det är första gången jag hör att multrics. Hur nyfiken, det påminner lite om trixkaninen
hahaha verkligen nyfiken, jag kollade min engelska kopia av djupa hemligheter, där står det också Multrics (för att du också hade fått mig att tvivla) ... kanske var det ett uttryck för tiden 😛
hälsningar
Bra bidrag
Intressant, men säkert, att Multrics beror på ett felavtryck, eftersom det ursprungliga namnet på det operativsystemet var Multics, och Unix kallades ursprungligen Unics, med hänvisning till det stora operativsystemet, så småningom och av fonetik, Unics se förvandlas till Unix, nu var du bara tvungen att nämna namnet på vem som anses vara författaren till Unix; Ken Thompson, legenden säger att både Thompson och Ritchie var i Bell Labs cafeteria och kommenterade sina projekt och det var att Ritchie föreslog Thomposon att han skulle skriva om sitt Unics med C-program, språket han hade skrivit ... och resten , är historia. 😉
Förresten, tidigare var alla program skrivna med maskinens instruktioner, vilket gjorde dem helt beroende av hårdvaran, innovationen hos C, förutom att göra det lättare att skriva program, var att språket var oberoende av hårdvaran som implementerade kompilatorer, en filosofi som många år senare skulle ta Java, i den meningen att programmen inte var beroende av operativsystemet, och lade till den berömda Java-maskinen.
Det dåliga med legender är att de snedvrider historien på fler sätt än en ... och de kan få dig att tänka att något händer när det inte är ... som det faktum i det befintliga samtalet mellan Thompson och Ritchie (som jag utelämnade efter behag) eftersom det leder till historiska och tekniska fel (C var inte före UNIX) ...
Och när det gäller den andra ... en annan legend som förvränger verkligheten, eftersom det före C fanns B, A, pascal, Ada, algol-60, PL / 1 och några fler som programmerade ordentligt (mycket annorlunda än församlingen och deras dialekter efter arkitektur som är beroende av processorns hårdvara) så att C inte "innoverade" i den meningen, han antog helt enkelt lösningar som redan fanns på andra språk och i slutändan blev det populärt snabbare och bättre än dessa ... Den enda delen Sanningen är att Java baserades på detta koncept för bärbarhet för att senare skapa sin virtuella maskin, men inte bara litade den på C för det, utan den följde andra modeller, annars skulle vi inte ha det objektorienterade programmeringsparadigmet i java ...
Jag kände att jag borde klargöra situationen för att alla som är mindre kunniga kan ta det som sant och sedan tro att det hände så här ... hälsningar 🙂
Som alltid är artikeln väldigt intressant, tack för bidraget.