Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Siguranță
  • Arta de a programa. „Arta programarii” - o recenzie a seriei de cărți legendare

Arta de a programa. „Arta programarii” - o recenzie a seriei de cărți legendare

Proiectul de scriere a cărții a fost început de autor în . Inițial s-a planificat lansarea lui într-un singur volum, dar volumul de material s-a dovedit a fi atât de mare încât numărul de volume a crescut la șapte. Primele trei volume au fost publicate destul de repede: volumul 1 în 1968, volumul 2 în 1969 și volumul 3 în 1973, urmată de o pauză până în februarie 2005, în care autorul a publicat prima parte a celui de-al patrulea volum. S-a decis să se lanseze părțile rămase ale volumului al patrulea aproximativ două pe an în numere separate, după care întregul volum al patrulea va fi publicat oficial. În perioada 2005-2009 au fost publicate numerele 0, 1, 2, 3 și 4, iar în 2011 a fost lansat volumul 4A, care cuprindea informații din aceste numere. Tot în 2005, a fost lansat și numărul 1, „MMIX - A RISC Computer for the New Millennium”, informații din care vor fi incluse în noua, a patra ediție a primului volum. Numărul 6 a fost publicat în 2015 Satisfiabilitatea, reprezentând treimea mijlocie a viitorului volum 4B.

Întrucât Knuth a considerat întotdeauna Arta de a programa ca fiind proiectul principal al vieții sale, s-a retras în 1993 cu intenția de a se concentra în întregime pe scrierea părților lipsă și a pune în ordine pe cele existente. El credea că va dura 20 de ani pentru a finaliza lucrarea.

YouTube enciclopedic

  • 1 / 5

    În calitate de expert recunoscut în proiectarea compilatorului, Knuth a început să scrie o carte despre proiectarea compilatorului în 1962. Curând și-a dat seama că domeniul de aplicare al materialului trebuia să fie mult mai larg. În iunie 1965, a terminat de scris prima versiune a ceea ce dorise inițial să publice ca o singură carte în douăsprezece secțiuni. Volumul textului scris de mână a fost de 3000 de pagini. Conform calculelor lui Knuth, acest volum ar fi trebuit să se încadreze în 600 de pagini de text tipărit, dar, după cum l-a informat editorul său, volum real ar avea 2000 de pagini. În acest sens, structura cărții a fost revizuită în favoarea mai multor volume, câte 1-2 secțiuni. De atunci, din cauza creșterii constante a materialului, s-a decis ca și al patrulea volum să fie împărțit în cărți separate: 4A, 4B, 4C și, eventual, 4D. Dar această împărțire, aparent, nu va fi definitivă, deoarece secțiunile 7.1 și 7.2.1 ocupă deja peste 650 de pagini în total.

    În 1976, Knuth a pregătit o a doua ediție a celui de-al doilea volum, care a necesitat reformulare. Dar designul tipografic (monotip) folosit în prima ediție nu mai era disponibil până la acel moment. Pentru a evita dezamăgiri similare în viitor, în 1977 Knuth a început să-și dezvolte propriul sistem tipografic tastarea computerului. Conform calculelor sale, lucrarea nu ar fi trebuit să dureze mai mult de șase luni, dar a durat aproximativ zece ani până să fie finalizată. Sistemul a fost numit TeX și este utilizat în prezent pentru aranjarea tuturor volumelor din The Art of Programming. În plus, TeX a devenit ulterior standardul de facto pentru scrierea de articole și monografii în științele naturii.

    Ca și celelalte cărți ale lui Knuth, Arta programarii este marcată de „marca sa comercială”: pentru fiecare eroare găsită în text, autorul plătește un dolar hexazecimal, adică 2,56 dolari (0x100 cenți, în baza 16). O alta trăsătură distinctivă Cartea conține o abundență de exerciții pentru implementare independentă, de diferite grade de dificultate, variind de la puzzle-uri simple„a se încălzi” și sfârșit probleme deschise. Dificultatea fiecărui exercițiu este evaluată pe o scară numerică de la 0 la 50. Astfel, în edițiile timpurii Ultima Teoremă a lui Fermat a fost cotată cu 50, dar în a treia ediție acest scor a fost „devalorizat” la 45, deoarece până atunci demonstrarea sa încetase. să fie o problemă deschisă.

    rezumat simboluri pentru volumul trei, 1978 „Sortarea și căutarea” (stânga - evaluare, dreapta - scurtă explicație)

    • Triunghi negru - Recomandat
    • M - Cu o părtinire matematică
    • VM - Necesită cunoștințe de „matematică superioară”
    • 00 - Necesită răspuns imediat
    • 10 - Simplu (timp de 1 minut)
    • 20 - Dificultate medie (timp de 15 min)
    • 30 - Dificultate crescută
    • 40 - Pentru „atelier de matematică”
    • 50 - Problemă de cercetare

    Planul original pentru scrierea cărții includea următoarea defalcare a materialului.

    • Volumul 1. Algoritmi de bază.
      • Capitolul 1. Concepte de bază.
      • Capitolul 2. Structuri informaţionale.
    • Volumul 2. Algoritmi seminumerici.
      • Capitolul 3. Numere aleatorii.
      • Capitolul 4. Aritmetica.
    • Volumul 3. Sortare și căutare.
      • Capitolul 5. Sortarea.
      • Capitolul 6. Căutare.
    • Volumul 4. Algoritmi combinatori.
      • Capitolul 7. Căutare combinatorie.
      • Capitolul 8. Recursiune.
    • Volumul 5. Algoritmi sintactici.
      • Capitolul 9. Căutare lexicografică.
      • Capitolul 10. Căutare sintactică.
    • Volumul 6. Teoria limbilor.
    • Volumul 7. Compilatoare.

    De fapt, această schemă a fost implementată până la cel de-al treilea volum inclusiv.

    ÎN în prezent A fost publicat volumul 4A, care conține primele secțiuni ale capitolului 7. Noile secțiuni sunt planificate să fie publicate inițial în numere separate (aproximativ 128 de pagini), aproximativ două numere pe an (numerele 0, 1, 2, 3 și 4 au fost publicate într-o manieră similară înainte de lansarea volumului 4A).

    Limbajul exemplu orientat către mașină

    Exemplele de programe date în carte folosesc un „asamblator MIX” proiectat să ruleze pe un computer MIX ipotetic. În cea de-a treia ediție, MIX-ul învechit a fost înlocuit cu MMIX, care are o arhitectură RISC cu drepturi depline. Există software care oferă emularea mașinii (M)MIX pe computere standard compatibile cu IBM. GNU Compiler Collection are capacitatea de a compila cod C/C++ pe arhitectura țintă MMIX.

    Mulți cititori sunt descurajați de faptul că se folosește limbajul nivel scăzut, dar Knuth consideră că alegerea sa este justificată, deoarece legătura cu arhitectura este necesară pentru a judeca cu precizie caracteristici ale algoritmului precum viteza, consumul de memorie etc. Ca urmare a acestei alegeri, totuși, publicul țintă se îngustează foarte mult. În plus, domeniul de aplicare al aplicației sale ca „carte de rețete” pentru programatori practicanți este limitat, dintre care mulți nu cunosc asamblare și, dacă o fac, nu au dorința de a traduce algoritmi de nivel scăzut din carte în limbi. nivel inalt. Multe ghiduri practice, în care același material este prezentat într-un mod mai popular, sunt publicate tocmai din acest motiv.

    Critică

    Principala trăsătură a monografiei lui Knuth, care o deosebește favorabil de alte cărți despre programare, este nivelul excepțional de ridicat de calitate a materialului și a prezentării academice, precum și profunzimea analizei problemelor luate în considerare. Datorită acestui fapt, a devenit un adevărat bestseller și o carte de referință pentru fiecare programator profesionist. Revista American Scientist a inclus The Art of Programming în lista sa cu cele mai bune 12 monografii fizice și matematice ale secolului al XX-lea, împreună cu lucrările lui Dirac despre mecanica cuantică, Einstein despre teoria relativității, Russell și Whitehead despre bazele matematicii, și alții câțiva.

    Coperta celei de-a treia ediții a primului volum al cărții conține un citat din Bill Gates: „Dacă te consideri cu adevărat bun programator..., citiți „Arta programării” (Knuth) ... Dacă puteți citi toată această lucrare, atunci cu siguranță ar trebui să-mi trimiteți CV-ul dvs.".

    Ediții

    Original

    Al treilea (actual)

    În ordinea crescătoare a numerelor de volum:

    • Volumul 1: Algoritmi fundamentali. Ediția a treia (Reading, Massachusetts: Addison-Wesley, 1997), xx+650pp. ISBN 0-201-89683-4
    • Volumul 1, fasciculul 1: MMIX - Un computer RISC pentru noul mileniu. (Addison-Wesley, 14 februarie 2005) ISBN 0-201-85392-2 (va fi în a patra ediție a volumului 1)
    • Volumul 2: Algoritmi semimerici. Ediția a treia (Reading, Massachusetts: Addison-Wesley, 1997), xiv+762pp. ISBN 0-201-89684-2
    • Volumul 3: Sortare și căutare. Ediția a doua (Reading, Massachusetts: Addison-Wesley, 1998), xiv+780pp.+foldout. ISBN 0-201-89685-0
    • Volumul 4A: Algoritmi combinatori, partea 1(Upper Saddle River, New Jersey: Addison-Wesley, 2011), xvi+883pp. ISBN 0-201-03804-8
    • Volumul 4, fasciculul 6: Satisfiabilitate. (Addison-Wesley Professional, 2015), xiii+310pp. ISBN 978-0-13-439760-3

    Anterior

    După data publicării:

    • Volumul 1, prima ediție, 1968. 634pp. ISBN 0-201-03801-3 .
    • Volumul 2, prima ediție, 1969, xi+624pp, ISBN 0-201-03802-1.
    • Volumul 3, prima ediție, 1973, xi+723pp+centerfold, ISBN 0-201-03803-X
    • Volumul 1, ediția a doua, 1973, xiii+634pp, ISBN 0-201-03809-9.
    • Volumul 2, ediția a doua, 1981, xiii+ 688pp. ISBN 0-201-03822-6 .
    • Volumul 4, fasciculul 2: generarea tuturor tuplurilor și permutărilor, (Addison-Wesley, 14 februarie 2005) v+127pp, ISBN 0-201-85393-0
    • Volumul 4, fasciculul 3: Generarea tuturor combinațiilor și partițiilor. (Addison-Wesley, 26 iulie 2005) vi+150pp, ISBN 0-201-85394-9
    • Volumul 4, Fascicul 4: Generarea tuturor arborilor - Istoria generației combinatorii, (Addison-Wesley, 6 februarie 2006) vi+120pp, ISBN 0-321-33570-8
    • Volumul 4, Fasciclul 0: Introducere în algoritmii combinatori și funcțiile booleene, (Addison-Wesley Professional, 28 aprilie 2008) vi+240pp, ISBN 0-321-53496-4
    • Volumul 4, Fascicul 1: Trucuri și tehnici pe biți; Diagrame binare de decizie(Addison-Wesley Professional, 27 martie 2009) viii+260pp,

    Există multe cărți pe piața globală a literaturii informatice concepute pentru a preda algoritmi de bază și utilizate în programare. Sunt destul de mulți și în mare măsură concurează între ei. Cu toate acestea, printre ei există o carte specială. Acesta este „Arta programării” în trei volume de D. E. Knuth, care este dincolo de orice competiție, este inclus în fondul de aur al literaturii mondiale despre informatică și este o carte de referință pentru aproape toți cei care sunt asociati cu programarea.

    Noi, în calitate de editori, vedem valoarea cărții în faptul că se urmărește nu atât predarea tehnicilor de programare, cât mai degrabă predarea, dacă se poate, „arta” programării, oferă o mulțime de rețete pentru îmbunătățirea programelor și , cel mai important, te învață cum să găsești singur aceste rețete.

    Nu este un secret pentru nimeni că programatorii noștri sunt printre cei mai calificați specialiști din lume. Ei reprezintă cu demnitate în străinătate școala națională de programare și informatică, care a adus o contribuție semnificativă la formarea fundamentelor fundamentale ale informaticii. Pentru a menține acest nivel și a merge mai departe, este necesar să se publice în timp util cărți în limba rusă care să reflecte principalele realizări mondiale în acest domeniu. „Arta programării” în trei volume de D. E. Knuth este una dintre aceste cărți.

    Suntem mândri că această carte clasică va fi adăugată bibliotecilor de programatori, profesori, studenți, liceeni și mulți alții și că, făcând acest lucru, vom contribui la o înțelegere mai profundă a fundamentelor informaticii. Suntem profund convinși că cartea „Arta programării” de D. E. Knuth este capabilă să aducă o persoană mai aproape de perfecțiune. Sperăm că publicarea noastră în limba rusă a acestei cărți minunate va confirma încă o dată că adevăratele valori nu devin depășite de-a lungul anilor.

    - Victor Shtonda, Gennady Petrikovets, Alexey Orlovich, editori

    Despre cartea „Arta programarii”

    Fiecare carte are propriul destin. Unele apar neobservate și la fel de imperceptibil dispar în fluxul timpului, devenind acoperite de praf pe rafturile bibliotecilor. Alții în anumită perioadă sunt solicitate în rândul unui cerc restrâns de specialiști până când sunt înlocuiți cu noi cărți de referință. Alții, care se ridică peste timp, au o influență puternică asupra dezvoltării tehnologice a societății. Nu există atât de multe cărți care se încadrează în această din urmă categorie. Apariția lor în lume este întotdeauna o sărbătoare. Anii trec, tehnologiile se schimbă, dar noile generații își recitesc paginile cu interes constant. Tocmai aceste cărți includ lucrarea în mai multe volume oferită cititorului de celebrul om de știință american Donald Erwin Knuth, „Arta programării”.

    Au trecut aproape 30 de ani de când această carte a fost publicată pentru prima dată în 1972 în Statele Unite. A fost tradus în majoritatea limbilor lumii, inclusiv în rusă. Până în prezent, în țările CSI, lucrarea în trei volume a lui D. E. Knuth a devenit o raritate bibliografică. În 1998, a fost publicată în SUA cea de-a treia ediție a „Arta programării”, care păstrează succesiunea de prezentare a materialului. Versiuni anterioare, dar lista de referințe a fost extinsă semnificativ, care include cele mai recente și mai importante rezultate, au fost adăugate noi exerciții și comentarii, iar inexactitățile au fost eliminate. Având în vedere popularitatea „Artei programarii” în întreaga lume, ar fi trebuit să ne așteptăm de mult la apariția unei noi ediții traduse în limba rusă, pe care o țineți în mână.

    Care este succesul „The Art of Programming” de D. E. Knuth?

    În primul rând, această carte este un manual excelent despre proiectarea și analiza algoritmilor de computer. Secțiunile sale pot fi incluse în multe cursuri universitare despre tehnologii de programare, teoria algoritmilor și matematică discretă. Cartea poate fi citită și de elevii de liceu familiarizați cu elementele de bază ale programării. Ca limbaj principal pentru înregistrarea algoritmilor, autorul a ales limbajul comenzilor mașinii unui ipotetic calculator universal AMESTECA. Acest lucru vă permite să construiți programe optime ținând cont de caracteristicile computerelor. Transferarea programelor MIX pe computere reale sau rescrierea lor în limbi de nivel înalt nu este deosebit de dificilă. Logica unui program este aproape întotdeauna explicată folosind diagrame bloc simple.

    În al doilea rând, materialul atent selectat inclus în carte include principalele clase fundamentale de algoritmi, care într-o formă sau alta se găsesc cel mai adesea în practica de programare.

    În al treilea rând, un factor important în succesul cărții lui D. E. Knuth este natura enciclopedică a prezentării. Profesorul Knuth are o capacitate unică de a urmări o problemă de la fundalul ei istoric până la starea curenta. Numeroase referiri la operele vechilor maeștri (până la antichitate), cuprinse în contextul modern, creează în cititor un sentiment aparte de implicare în dezvoltare istorica idei și metode științifice.

    În al patrulea rând, trebuie remarcată măiestria prezentării. Cartea este destinată unei game largi de cititori - de la studenți începători la programatori profesioniști. Toată lumea va fi interesată să învețe algoritmi de computer la propriul nivel. Materialul este autosuficient. Înțelegerea esenței metodelor nu necesită cunoașterea ramurilor speciale ale matematicii sau a tehnologiilor speciale de programare. Se poate urmări o anumită compoziție „muzicală” a intrigii (D. E. Knuth are acasă o orgă mică pe care o cântă).

    Lista componentelor succesului în Arta programarii poate fi continuată cu ușurință.

    Autorul acestor rânduri a urmat cursul „Arta programării”, așa cum a fost prezentat de profesorul Knuth în 1976-1977, în timpul unui stagiu la Universitatea Stanford. Apoi s-a format baza algoritmică a tehnologiilor de programare, la originea cărora a fost D. E. Knuth. Au fost multe discuții, seminarii și idei creative.

    Cărțile semnificative sunt întotdeauna legate de soarta autorului. Donald Erwin Knuth a început să lucreze la Arta programarii în 1962. Continuă până astăzi. Are o mulțime de planuri. Urmează noi volume din „Arta programării”, pe care cititorii le așteaptă cu nerăbdare.

    - Profesorul Anatoli Anisimov

    De la editorul de traduceri

    Au trecut aproximativ 25 de ani de la prima ediție a cărții „Arta programarii” de D. E. Knuth. Cu toate acestea, cartea nu numai că nu este depășită, dar rămâne totuși ghidul principal al artei de a programa, o carte din care se învață să înțeleagă esența și trăsăturile acestei arte.

    De-a lungul anilor Limba engleză A treia ediție a volumelor 1 și 2 a fost deja publicată, precum și a doua ediție a volumului 3. Autorul a făcut modificări semnificative și completări semnificative la acestea. Este suficient să spunem că numărul de exerciții aproape s-a dublat, iar multe dintre exercițiile incluse în edițiile anterioare (în special răspunsurile la acestea) au fost modificate. Multe capitole și secțiuni au fost completate și refăcute semnificativ, inexactitățile și greșelile de scriere au fost corectate, s-au adăugat numeroase referințe noi la literatură și s-au folosit rezultatele teoretice din ultimii ani.

    Capitolul 3 a fost transformat semnificativ, în special secțiunile 3.5 și 3.6, precum și secțiunile 4.5.2, 4.7, 5.1.4, 5.3, 5.4.9, 6.2.2, 6.4, 6.5 etc.

    Desigur, a apărut nevoia unei noi ediții a cărții.

    Traducerea se bazează pe a treia ediție a volumelor I și II și a doua ediție a volumului III. În plus, au fost luate în considerare completările și corecțiile oferite cu amabilitate de către autor.

    La traducere, am încercat să păstrăm stilul autorului, notația și modul de prezentare a materialului. În cele mai multe cazuri, au fost utilizați termeni adoptați în literatura științifică în limba rusă. Au fost furnizate echivalente în limba engleză acolo unde a fost necesar. Din multe motive, în special din cauza complexității unor secțiuni, Arta programarii este o carte provocatoare de citit. Unul dintre motivele care face cartea greu de înțeles este stilul de prezentare al autorului; Odată ce te obișnuiești cu asta, poți face lectura mult mai ușoară.

    Din cauza abundenței de material (adesea puțin interconectat), este imposibil să structurați cartea în așa fel încât diverse concepte și definiții să fie introduse imediat la prima mențiune a acestora. Prin urmare, capitolul 1 poate discuta fără referință concepte ale căror definiții stricte sunt date în volumul 3. De aceea este atât de important rolul indexului subiectului, fără de care înțelegerea cărții ar fi semnificativ dificilă. Sperăm că cititorul nu va fi surprins să găsească referiri la capitolele 7, 8 și următoarele care nu sunt incluse în cele trei volume propuse ale capitolului. Noi, împreună cu autorul, sperăm că ele vor fi publicate foarte curând și, bineînțeles, vor apărea imediat în traducere rusă ca o continuare a acestei publicații.

    De asemenea, ar trebui să acordați atenție notărilor nu întotdeauna standard utilizate de autor. La fel ca și definițiile, aceste denumiri pot apărea în volumul I și sunt introduse în al doilea. Prin urmare, fără un index de simboluri ar fi extrem de dificil să folosești cartea. De asemenea, aș dori să atrag atenția asupra intrării [A], unde A este o anumită afirmație. Această intrare se găsește în formule și uneori în text și denotă o valoare egală cu indicatorul A.

    - profesorul Yu. V. Kozachenko

    PREFAŢĂ

    Dragi cititori! Ți o carte în mâini,

    să publicăm ceea ce ne-ai cerut în mii de scrisori. A trebuit să petrecem ani de zile verificând și reverificând cu atenție un număr nesfârșit de rețete și selectând pentru tine cele mai bune, cele mai interesante, cele mai perfecte.

    Acum, fără nicio umbră de îndoială, putem spune că dacă urmați instrucțiunile, atunci fiecare fel de mâncare va ieși la fel de bun ca al nostru, chiar dacă nu ați gătit niciodată până acum.
    - Cartea de bucate a lui McCall (1963)

    PROCESUL de pregătire a programelor pentru un computer digital este o activitate foarte interesantă. Iar ideea nu este doar că se justifică din punct de vedere economic și științific; poate provoca, de asemenea, experiențe estetice, subiecte similare pe care indivizii creativi le experimentează atunci când scriu muzică sau poezie. Țineți în mâini primul volum al unei publicații în mai multe volume, al cărei scop este de a oferi cititorului o varietate de cunoștințe și abilități care alcătuiesc meșteșugul unui programator.

    Următoarele capitole nu sunt o introducere în programarea computerelor; Se presupune că aveți deja ceva experiență în acest domeniu. De fapt, cerințele pentru cititor sunt foarte simple; cu toate acestea, va dura timp și practică pentru ca un programator începător să înțeleagă ce calculator digital. Deci cititorul ar trebui să aibă:

    a) o anumită înțelegere a modului în care funcționează un computer cu program stocat digital; în acest caz, nu este necesar să înțelegeți electronica, principalul lucru este să înțelegeți cum pot fi stocate comenzile în memoria computerului și apoi executate secvențial;

    b) capacitatea de a formula o problemă în termeni clari și definiți; calculatorul de înțeles(calculatoarele nu au inteligența oamenilor, așa că fac exact ceea ce li se spune, nici mai mult, nici mai puțin; acesta este faptul care de obicei este cel mai greu de înțeles pentru utilizatorii începători);

    c) cunoașterea celor mai simple metode computerizate, precum organizarea buclelor (execuția repetată a unui anumit set de comenzi), precum și utilizarea subrutinelor și variabilelor cu indici;

    d) cunoașterea comunității termeni informatici, cum ar fi „memorie”, „registre”, „biți”, „virgula mobilă”, „depășire”, „software”; Majoritatea termenilor care nu sunt definiți în text sunt explicați în indexul de la sfârșitul fiecărui volum.

    Aceste patru condiții pot fi probabil combinate într-o singură cerință: cititorul trebuie să aibă experiență în scrierea și depanarea a cel puțin patru programe pentru cel puțin un computer.

    Am încercat să scriu aceste cărți în așa fel încât să poată servi mai multor scopuri diferite. În primul rând, sunt un manual de referință care reunește cunoștințele din mai multe domenii importante ale științei. În al doilea rând, ele pot fi folosite ca ajutoare de autoeducație și manuale de programare sau informatică pentru universități. În acest sens, am inclus în text un numar mare de exerciții și au oferit răspunsuri la majoritatea acestora. În plus, am încercat să mă concentrez pe fapte, în loc să „turn apă” și să mă angajez în raționamente generale.

    Acest volum în trei volume este destinat oricărei persoane cu un interes serios pentru computere, nu doar profesioniștilor. De fapt, unul dintre obiectivele mele principale a fost să fac tehnicile de programare mai accesibile oamenilor din alte domenii. De obicei, acești profesioniști obțin mari beneficii din utilizarea computerelor, dar nu își pot permite să piardă timpul căutând informațiile necesare, fragmente din care sunt împrăștiate în multe reviste tehnice.

    Tema acestor cărți poate fi formulată după cum urmează: „Analiză non-numerică”. Calculatoarele sunt de obicei asociate cu rezolvarea problemelor numerice, cum ar fi găsirea rădăcinilor unei ecuații, interpolarea numerică, integrarea etc. Dar în această carte în trei volume, astfel de subiecte nu sunt discutate (cu excepția cazului în care este necesar să se facă acest lucru în curs). a prezentării). Programarea numerică a computerelor este un domeniu extrem de interesant și în dezvoltare rapidă;

    s-au scris multe pe tema asta carti bune. Însă începând cu anii 1960, computerele au fost din ce în ce mai folosite pentru a rezolva probleme în care numerele joacă un rol secundar. Capacitatea computerului de a lua decizii mai degrabă decât de a executa doar trece acum în prim-plan. operatii aritmetice. Când se rezolvă probleme nenumerice, uneori sunt necesare adunarea și scăderea, dar înmulțirea și împărțirea sunt rareori necesare. Dar, desigur, chiar și cei care sunt preocupați în primul rând de numerice programare pe calculator, vor beneficia doar de studierea metodelor nenumerice, deoarece acestea formează și baza programelor numerice.

    Rezultatele cercetării în domeniul analizei non-numerice sunt împrăștiate în multe reviste tehnice. Scopul meu a fost să extrag din această cantitate mare de informații doar tehnici fundamentale care pot fi aplicate la o varietate de situații de programare. Am încercat să rezum informațiile selectate pentru a ajunge la ceea ce poate fi numit mai mult sau mai puțin „teorie” și, de asemenea, pentru a arăta cum să aplic această teorie la diferite probleme practice.

    Desigur, „analiza non-numerică” este un nume extrem de nefericit pentru acest domeniu al științei. Este nereușită în primul rând pentru că conține doar negația unui alt concept; ar fi mult mai bine să alegeți un termen mai semnificativ care să nu aibă prefixul „nu”. Denumirea „prelucrare a informațiilor” acoperă o zonă mai largă decât materialul discutat aici, iar „metode de programare” acoperă una mai restrânsă. Cred că pentru subiectul tratat în aceste cărți, numele cel mai potrivit este analiza algoritmilor, care poate fi descifrată ca „teoria proprietăților anumitor algoritmi de computer”.

    Setul complet de cărți, intitulat The Art of Programming, are următoarea structură de bază.

    Volumul 1. Algoritmi de bază

    Capitolul 1. Concepte de bază Capitolul 2. Structuri informaţionale

    Volumul 2. Algoritmi derivați

    Capitolul 3. Numerele aleatorii Capitolul 4. Aritmetica

    Volumul 3. Sortare și căutare

    Capitolul 5. Sortarea Capitolul 6. Căutarea

    Volumul 4. Algoritmi combinatori

    Capitolul 7. Căutare combinatorie Capitolul 8. Recursiune

    Volumul 5. Algoritmi sintactici

    Capitolul 9. Căutare lexicografică Capitolul 10. Analiza

    Volumul 4 acoperă un subiect foarte amplu, deci constă de fapt din trei cărți separate (Volumele 4A, 4B și 4C). Sunt planificate și două volume suplimentare pe teme mai specializate: Volumul 6, Teoria Limbilor (Capitolul 11) și Volumul 7, Compilatorii (Capitolul 12).

    Am început această lucrare în 1962 cu intenția de a scrie o singură carte care să cuprindă toate capitolele enumerate, dar în scurt timp mi-am dat seama că era necesar să luăm în considerare temele selectate în profunzime și nu doar să scot la suprafață. Rezultatul a fost un text atât de lung încât materialul din fiecare capitol a fost mai mult decât suficient pentru a fi studiat pe parcursul unui semestru universitar. Și a devenit clar că era necesar să se împartă materialul în mai multe volume separate. Știu că o carte care conține doar unul sau două capitole pare destul de ciudat, dar am decis să păstrez numerotarea inițială a capitolelor pentru a face referințele încrucișate mai ușoare. O versiune prescurtată a volumelor 1-5 este planificată pentru a servi ca referință mai generală și/sau manual pentru studenți; va conține cea mai mare parte a materialului din aceste volume, iar informațiile mai specializate vor fi omise. Ediția prescurtată va păstra aceeași numerotare a capitolelor ca și ediția completă.

    Volumul 1 poate fi considerat o „încrucișare” a setului complet de capitole, în sensul că conține informațiile de bază care sunt folosite în toate celelalte cărți. Pe de altă parte, volumele 2-5 pot fi citite independent unul de celălalt. Volumul 1 nu este doar o carte de referință care poate fi folosită ca ghid atunci când citiți celelalte volume; poate servi, de asemenea, ca manual universitar sau ghid de auto-educare pe tema structurilor de date (concentrare pe capitolul 2) sau matematică discretă (concentrare pe secțiunile 1.1, 1.2, 1.3.3 și 2.3.4) sau programarea limbajului de instrucție automată. (concentrați-vă pe secțiunile 1.3 și 1.4).

    Aceste capitole sunt scrise dintr-un punct de vedere diferit față de majoritatea cărților de programare moderne, adică nu am încercat să învăț cititorul cum să folosească software-ul altcuiva. În schimb, mi-am propus să învăț cititorul cum să-și scrie propriile programe de calitate superioară.

    Scopul meu inițial a fost să prezint cititorii în cercetarea științifică de ultimă oră în fiecare dintre domeniile de cunoaștere acoperite. Dar este foarte dificil să ții la curent cu o industrie care este profitabilă din punct de vedere economic; crestere rapida informatică mi-a făcut imposibil să-mi împlinesc visele. Figurat vorbind, m-am trezit pe malul unui ocean vast care conține zeci de mii de mici rezultate care au fost obținute de zeci de mii de oameni talentați din întreaga lume. Așa că a trebuit să-mi stabilesc un nou obiectiv – să mă concentrez pe metodele „clasice” care vor rămâne relevante timp de multe decenii și să le descriu cât mai bine, cât pot. În special, am încercat să urmăresc istoria fiecărui subiect și să pun o bază solidă pentru aceasta. dezvoltare ulterioară. Am încercat să folosesc o terminologie precisă în concordanță cu cea folosită în publicațiile contemporane și am încercat să raportez toate ideile de programare secvențială cunoscute care se disting prin simplitate și eleganță a formulării.

    Acum câteva cuvinte despre conținutul matematic al acestei publicații în mai multe volume. Materialul este prezentat în așa fel încât să fie destul de accesibil chiar și persoanelor cu studii medii; Ei vor putea să treacă peste fragmente mai complexe sau pur și simplu să le omite. În același timp, cei care sunt înclinați spre matematică vor putea învăța tehnici matematice interesante legate de matematica discretă. Această dualitate în prezentarea informațiilor a fost realizată, pe de o parte, prin atribuirea unui rating fiecărui exercițiu (astfel încât cititorul să poată distinge exercițiile complexe din punct de vedere matematic de cele simple), iar pe de altă parte, datorită organizării secțiunilor în care se formulează principalele rezultate matematice înaintea demonstraţiilor . Se propune fie să conduceți singuri probele ca exerciții (răspunsurile la care sunt date într-o secțiune separată), fie să le găsiți la sfârșitul secțiunii.

    Un cititor care este interesat în primul rând de programare, mai degrabă decât de matematică, poate dori să nu mai citească secțiunea de îndată ce materialul de matematică devine prea greu de înțeles. Pe de altă parte, cititorul de matematică va găsi multe pentru el însuși fapte interesante. Multe publicații matematice pe tema programarii au fost eronate, așa că unul dintre scopurile acestei cărți este de a oferi cititorului justificarea matematică corectă a subiectului. Și din moment ce mă consider un matematician, responsabilitatea mea directă este să prezint corect (în măsura în care pot) materialul din punct de vedere matematic.

    Pentru a citi cea mai mare parte a materialului matematic, o cunoaștere a matematicii elementare este suficientă, deoarece aproape tot restul teoriei este dezvoltată aici. Dar uneori am nevoie de teoreme mai profunde ale teoriei unei variabile complexe, teoria probabilității, teoria numerelor etc. În astfel de cazuri, mă refer la cărți care conțin o prezentare detaliată a acestor subiecte.

    Cea mai dificilă decizie pe care a trebuit să o iau în pregătirea acestor cărți a fost cum să le prezint. diverse metode. Beneficiile diagramelor de flux și ale descrierilor pas cu pas ale algoritmilor sunt bine cunoscute; aceste probleme sunt discutate în articolul „Computer-Drawn Flowcharts” din ACM Communications, Vol. 6 (septembrie 1963), paginile 555-563. Pentru a descrie orice algoritm computerizat, este necesar și un limbaj formal și precis. Așa că a trebuit să decid ce limbă să folosesc: una algebrică, cum ar fi ALGOL sau FORTRAN, sau una orientată pe mașină. Mulți dintre informaticienii de astăzi vor fi probabil în dezacord cu decizia mea de a folosi un limbaj orientat pe mașini, dar sunt convins că a fost alegerea potrivita. Există următoarele motive pentru aceasta.

    a) Programatorul este foarte influențat de limbajul în care sunt scrise programele. În prezent, tendința predominantă este de a alege cele mai simple, mai degrabă decât cele mai optime constructii de limbaj pentru un computer. Iar un programator care cunoaște un limbaj orientat spre mașină tinde să folosească mai mult metode eficienteși astfel creează programe mai bune.

    b) Toate programele de care avem nevoie scrise într-un limbaj orientat către mașină, cu rare excepții, vor avea dimensiuni reduse. Aceasta înseamnă că, dacă avem un computer cu putere de procesare minimă, nu vom avea probleme cu utilizarea unor astfel de programe.

    c) Limbile de nivel înalt nu sunt potrivite pentru a discuta despre detalii importante de nivel scăzut, cum ar fi comunicarea corutine, generarea de numere aleatorii, aritmetica de înaltă precizie și multe alte probleme asociate cu utilizare eficientă memorie.

    d) Oricine este interesat serios de computere ar trebui să aibă o bună cunoaștere a limbajului mașină, deoarece acesta este baza modului în care funcționează un computer.

    e) O oarecare cunoaștere a limbajului mașină este necesară în orice caz pentru a înțelege rezultatul programelor prezentate în multe dintre exemple.

    f) Noile limbi algebrice vin și ies la modă la fiecare cinci ani și ceva, în timp ce încerc să vorbesc despre „adevăruri eterne”.

    Pe de altă parte, recunosc că scrierea programelor în limbaje de nivel înalt și depanarea acestor programe este mult mai ușoară. De fapt, din 1970, eu însumi am folosit rar limbaj de mașină de nivel scăzut pentru propriile mele programe, deoarece computerele moderne au cantități mari de memorie și viteză mare. Dar pentru a rezolva multe dintre problemele discutate în această carte, cea mai mare valoare are arta de a programa. De exemplu, unele calcule combinatorii trebuie repetate de trilioane de ori și vom economisi aproximativ 11,6 zile de muncă prin reducerea timpului de calcul în bucla interioară cu doar o microsecundă. De asemenea, este logic să depuneți efort suplimentar pentru a scrie un program care va fi folosit de mai multe ori în fiecare zi pe multe computere, mai ales că programul trebuie scris o singură dată.

    Și dacă decideți să utilizați un limbaj orientat către mașină, ce limbă ar trebui să alegeți? Aș putea alege o limbă pentru o anumită mașină X, dar atunci cei care folosesc alt computer vor crede asta această carte scris doar având în vedere computerul X. Mai mult, mașina X probabil are multe trasaturi caracteristice, pentru care materialul din această carte este complet inaplicabil, dar mai trebuie prezentat. Și, în sfârșit, în doi ani, producătorul mașinii X va lansa mașina X+1 sau 10X și nimeni nu va mai fi interesat de computerul X.

    Pentru a rezolva această problemă, am încercat să dezvolt un computer „ideal” cu foarte reguli simple lucru (care poate fi studiat în, să zicem, doar o oră) și este foarte asemănător cu mașinile reale. Nu există niciun motiv ca un elev să evite să învețe caracteristicile diferitelor computere; După învățarea unei limbi, toate celelalte vor fi învățate mult mai ușor. În plus, un programator serios trebuie să fie pregătit să se ocupe de diferite limbaje de mașină în timpul activității sale. Prin urmare, există un singur dezavantaj în utilizarea unei mașini fictive - dificultatea de a rula programe scrise pentru aceasta. Din fericire, aceasta nu este cu adevărat o problemă, deoarece mulți voluntari și-au oferit serviciile pentru a scrie simulatoare ale mașinii ipotetice. Astfel de simulatoare sunt ideale pentru scopuri educaționale, iar lucrul cu ele este chiar mai ușor decât lucrul cu un computer real.

    Am încercat să fac link la cele mai bune lucrări vechi pe fiecare subiect, precum și să menționez lucrări noi. Când mă refer la sursele literare, am folosit abrevieri standard pentru titlurile periodice, cu excepția revistelor cel mai frecvent citate, pentru care au fost folosite următoarele abrevieri.

    CACM - Comunicări ale Asociației pentru Mașini de Calcul

    JACM - Jurnalul Asociației pentru Mașini de Calcul

    Sotr. J. - The Computer Journal (British Computer Society)

    Matematică. Sotr. - Matematica calculului

    AMM - American Mathematical Monthly

    SICOMP - SIAM Journal on Computing

    FOCS - Simpozion IEEE privind fundamentele informaticii

    SODA - Simpozion ACM-SIAM despre algoritmi discreti

    STOC - Simpozion ACM de Teoria Calculului

    Crelle - Journal fur die reine und angewandte Mathematik

    De exemplu, „CASM 6 (1963), 555-563” se referă la un jurnal referit într-un paragraf anterior al acestei prefețe. Am folosit și abrevierea „CMatA” pentru a face referire la cartea Matematică concretă, la care se face referire în introducerea la secțiunea 1.2.

    Majoritatea material tehnic Aceste cărți explică exercițiile. Dacă ideea unui exercițiu non-trivial nu mi-a aparținut, atunci am încercat să-i menționez autorul. Referințele la literatură sunt de obicei date în textul secțiunii sau în răspunsul la exercițiu. Dar, în multe cazuri, exercițiile se bazează pe materiale nepublicate care nu pot fi referite.

    Mulți oameni m-au ajutat de-a lungul anilor în timp ce lucram la aceste cărți, cărora le sunt recunoscător din suflet. În primul rând, vreau să-mi exprim recunoștința soției mele Jill pentru răbdarea ei nesfârșită, pentru pregătirea unor ilustrații și pentru ajutor constantîn toate. De asemenea, îi sunt recunoscător lui Floyd Robert W. pentru că a dedicat atât de mult timp în anii 1960 îmbunătățirii și aprofundării acestui material. Mii de alți oameni mi-au oferit și un ajutor neprețuit. Doar pentru a le enumera numele ar fi nevoie de o altă astfel de carte! Mulți dintre ei mi-au permis să folosesc lucrarea lor veche, nepublicată. Cercetarea mea de la Caltech și Universitatea Stanford a fost finanțată cu generozitate de National fundament științific(Fundația Națională de Știință) și Biroul de Cercetare Navală. Addison-Wesley a fost de mare ajutor și de sprijin de când am început să lucrez la proiect în 1962. Mi se pare că pentru toți acești oameni cea mai bună recunoștință este această publicație. Arată că contribuțiile lor au rezultat în cărți în care, sper, am putut să scriu ceea ce se așteptau ei.

    Prefață la cea de-a treia ediție

    După ce am petrecut zece ani dezvoltând sistemele de dactilografiere METAFONT și TEX, acum îmi pot realiza visul de a folosi aceste sisteme pentru a dactilografi. Arta de a programa. În cele din urmă, am reușit să introduc textul integral al acestei cărți în computerul meu personal și astfel să-l obțin versiune electronica, care vă va permite să faceți orice modificări în tehnologia de imprimare și afișare pe ecran în viitor. Acest mod de lucru mi-a permis să fac literalmente mii de îmbunătățiri; Am realizat ceea ce am visat atât de mult timp.

    În această nouă ediție am putut să examinez fiecare cuvânt al textului, încercând să păstrez entuziasmul tineresc al cercetării mele originale și, în același timp, să introduc o mai mare maturitate a judecății. Au fost adăugate zeci de exerciții noi, iar zeci de exerciții vechi au primit răspunsuri noi sau îmbunătățite.

    Astfel, lucrările la cartea „Arta programarii” continuă. De aceea, unele părți ale acestei cărți încep cu pictograma „În construcție” (acesta este un fel de scuze pentru faptul că datele furnizate nu sunt cele mai recente). Dosarele mele sunt pline de materiale importante pe care plănuiesc să le includ în cea de-a patra ediție finală, glorioasă, a volumului 1; probabil va fi lansat peste 15 ani. Dar mai întâi trebuie să termin volumele 4 și 5. Vreau să fie publicate de îndată ce sunt gata să fie publicate.

    O mare parte din munca grea în pregătirea acestei noi ediții a fost făcută de Phyllis Winkler și Silvio Levy, care au scris și editat cu experiență textul celei de-a doua ediții, și de Jeffrey Oldham, care a convertit aproape toate ilustrațiile originale în format METAP0ST. Am corectat toate erorile pe care cititorii alertează (Barry) le-au descoperit în a doua ediție (precum și erorile pe care, vai, nimeni nu le-a observat), și am încercat să evit introducerea de noi erori în noul material. Cu toate acestea, recunosc că mai rămân unele defecte și aș dori să le corectez cât mai curând posibil. Prin urmare, pentru fiecare greșeală de tipar*, precum și pentru o eroare legată de esența materialului prezentat sau de informațiile istorice oferite, voi plăti cu plăcere 2,56 USD primei persoane care îl găsește. Pe pagina Web a cărei adresă este dată pe spate Pagina titlu, conține o listă curentă a tuturor erorilor raportate mie**.

    * Aceasta se referă la originalul acestei publicații. - Aprox. ed.
    ** Au fost corectate erorile cunoscute la momentul pregătirii ediției rusești. -Aproximativ. ed.

    D.E.K.
    Stanford, California
    aprilie 1997

    Lumea s-a schimbat în ultimii douăzeci de ani.
    - Bill Gates (1995)


    CAPITOLUL 1. CONCEPTE DE BAZĂ............................................. ....... ... 27
    1.1. ALGORITMI.............................................................. .. ...... 27
    1.2. INTRODUCERE MATEMATICĂ............................................................. .... 37
    1.2.1. Inducția matematică................................... 38
    1.2.2. Numere, puteri și logaritmi.................................................. 49
    1.2.3. Sume și produse.................................................. .... 56
    1.2.4. Funcții întregi și teoria numerelor elementare......... 68
    1.2.5. Permutări și factoriali.................................... 75
    1.2.6. Coeficienți binomi.................................... 82
    1.2.7. Numere armonice.............................................................. ... 105
    1.2.8. numerele Fibonacci ................................................. .... 109
    1.2.9. Funcții de generare................................................ 118
    1.2.10. Analiza algoritmului.............................................. 127
    *1.2.11. Reprezentări asimptotice........................ 138
    *1.2.11.1. Simbol DESPRE .......................................... 138
    *1.2.11.2. Formula de însumare a lui Euler.................................. 143
    *1.2.11.3. Aplicarea formulelor asimptotice........................... 148
    1.3. AMESTECA ................................................. ....... ............ 156
    1.3.1. Descrierea MIX-ului ..................................... 156
    1.3.2. Limbajul de asamblare al computerului MIX ................................. 178
    1.3.3. Aplicarea la permutări................................... 198
    1.4. CATEVA TEHNICI FUNDAMENTALE DE PROGRAMARE................................................... 221
    1.4.1. Subrutine.................................................................. ....... 221
    1.4.2. Corutine.................................................................. ........ 229
    1.4.3. Programe pentru interpreți.................................................. ... 237
    1.4.3.1. Simulator MIX ...................................... 239
    *1.4.3.2. Programe de urmărire.................................. 248
    1.4.4. Intrare și ieșire............................................... ......... 251
    1.4.5. Istorie și bibliografie................................... 266

    CAPITOLUL 2. STRUCTURILE INFORMAȚIILOR............................................. ....... 271
    2.1. INTRODUCERE................................................. ....... .... 271
    2.2. LISTELE LINEARE.................................................. .... 277
    2.2.1. Stive, cozi și pachete .................................................. ...... 277
    2.2.2. Distribuție secvențială................................. 283
    2.2.3. Distribuție legată................................. 295
    2.2.4. Liste circulare.............................................. 315
    2.2.5. De două ori liste aferente................................ 322
    2.2.6. Matrice și liste ortogonale.............................................. 341
    2.3. COPACI ................................................. ..... 352
    2.3.1. Traversarea arborilor binari................................... 362
    2.3.2. Reprezentarea arborilor ca arbori binari........ 380
    2.3.3. Alte reprezentări ale arborilor........................... 395
    2.3.4. Proprietăţile matematice de bază ale arborilor.................. 410
    2.3.4.1. Copaci liberi................................. 410
    2.3.4.2. Arbore orientat........................ 420
    *2.3.4.3. Lema pe un copac infinit.................................... 431
    *2.3.4.4. Numărarea arborilor.................... 435
    2.3.4.5. Lungimea traseului.................................. 449
    *2.3.4.6. Istorie şi bibliografie........................ 456
    2.3.5. Liste și colectarea gunoiului .................................. 459
    2.4. STRUCTURI MULTI-CONECTATE............................................. ...... 476
    2.5. ALOCAREA DINAMICĂ A MEMORIEI.................................. 488
    2.6. ISTORIE ȘI BIBLIOGRAFIE ................................................................ 512

    RĂSPUNSURI LA EXERCIȚII................................................... ..... ...... 521

    ANEXA A. TABELE DE VALORI ALE UNOR CONSTANTE............................................ 683
    A.I. Constante de bază (zecimală) ............................................. ..... 683
    A.2. Constante de bază (octale) .................................. 684
    A.Z. Semnificațiile numerelor armonice, numerelor Bernoulli și numerelor Fibonacci...... 685

    ANEXA B. NOTAȚIA DE BAZĂ............................................. ....... 687

    INDEX SUBIECTUL ................................................ ............. 692

    27 decembrie 2011 la 13:32

    Arta de a programa?

    • Programare

    Îmi place să citesc articole despre programare care nu au o singură linie de cod în ele. Astfel de articole sunt grozave pentru a fi dezvoltate „în profunzime” și adesea oferă un motiv pentru a privi lucrurile de mult stabilite dintr-un unghi diferit. Prin urmare, cu riscul de a atrage mânia unei anumite secțiuni a publicului asupra karmei mele deja pipernicite, am decis totuși să public acest articol, în speranța că va oferi cuiva nu numai de gândit, ci și va ajuta să ia o idee. privire proaspătă asupra activităților lor.

    start

    S-a întâmplat ca la locul lor actual de muncă, programatorii să fie lăsați la dispoziție. Adică, desigur, codifică în beneficiul întreprinderii, dar complet necontrolat, până la lipsa unui tester banal. Termenii de referință, chiar și pentru programele „grele”, rareori depășesc volumul a trei coli A4 (dintre care una este semnătura tuturor celor implicați).

    Apelurile privind problemele software sunt trimise direct programatorilor. De când a început totul.

    Am observat că numărul de apeluri către colegul meu (o persoană care a lucrat în specialitatea sa și în această funcție anume de câțiva ani mai mult decât mine) este cu un ordin de mărime (fără exagerare) mai mare decât numărul de apeluri despre software-ul meu. . În același timp, apelurile sunt de obicei mai „grele”. Prevalența și intensitatea forței de muncă a produselor noastre sunt aproximativ aceleași.

    În timpul conversației, am devenit interesat de părerile colegilor mei despre programare, după care m-am uitat codurile sursă unele programe și totul a căzut la locul lor.

    Opus despre personalități creative

    Din diverse motive personale și de afaceri, comunic cu oameni creativi. Aceștia sunt în principal muzicieni și artiști de diferite genuri. Îi vizitez adesea în diverse medii - de la habitatele lor până la magazine și cafenele.

    Acasă, astfel de oameni au de obicei haos și dezordine creativă - de la o canapea pătată de vopsea și pereți ponostici până la aparate și vase de uz casnic cu aspect teribil.

    Acțiunile unor astfel de oameni au un anumit vector, dar parametrii săi sunt specificați nu prin numere în virgulă mobilă, ci prin direcția sud-sud-vest. Acest lucru se aplică nu numai pentru a merge la magazin (a cumpăra ceva dintr-o listă cu astfel de oameni este pur și simplu nerealist), ci și pentru orice în general, inclusiv pentru creativitate.

    Când lucrează la o lucrare, artistul/muzicianul pleacă de obicei de la acest „vector sud-sud-vest” - de la o anumită dispoziție, concept (născut intern sau emis de client, acesta este în în acest caz, nu atât de important). Rezultatul final, în cele mai multe cazuri, pare foarte vag. Pentru dreptate, observăm că aceasta este partea leului din plăcerea creativității - a face așa cum se face. Aceasta este, în esență, o încercare de a se „exprima”.

    Programatori creativi

    Să revenim la conversația despre programatori. În timpul conversației, a devenit clar că unii colegi, nu fără mândrie, vorbesc despre ei înșiși ca reprezentanți ai „profesiei creative”. În același timp, folosesc cu adevărat o abordare creativă („vector sud-sud-vest”) cu practică Set complet atribute. Ca urmare, apar module de conectivitate complet ciudată, clase cu o ierarhie „aici voi face o figură ca aceasta”, metodele sunt împărțite magic în „interesante” (bine concepute, cu o gestionare clară a erorilor - cum ar fi implementarea criptare și protocoale de rețea) și „neinteresant” (liste kilometrice de export de date, cu mult copy-paste).

    Tratarea erorilor se face așa cum se dovedește - aici verificăm valorile returnate, iar în următorul fișier avem mecanisme de tratare a excepțiilor. Aici folosim pointeri inteligente, acolo lucrăm direct. Și o grămadă de alte lucruri de genul ăsta.

    Ca urmare lucrări similare Rezultatul este un produs care este complet imprevizibil în comportament. Principala problemă a unuia dintre dezvoltatorii noștri este corectarea erorilor în versiune noua implică în mod constant apariția de noi erori în modulele deja aparent depanate și este deja nerealist să prevenim acest lucru fără a rescrie complet totul. Este foarte dificil să mențineți un astfel de produs - rafinarea celor mai de bază puncte necesită o meditație pe termen lung asupra codului în încercarea de a înțelege cum să o faceți, astfel încât totul să nu se prăbușească și, de preferință, fără a copia și lipi „creativitatea” existentă. ”.

    Morala acestei povești

    Programarea nu este o expresie a propriei persoane, indiferent de ceea ce ar pretinde juniorii romantici. Cod bun- este clar proiectat și construit conform anumite reguli document. Oricât de trist ar fi pentru unii, un programator este un robot care, în funcție de calitatea instrucțiunilor introduse în el, cu o eficiență diferită explică altui robot ce vor aceste mase de proteine ​​de la el. Nu există loc pentru creativitate în programare - de la denumirea fișierelor și variabilelor până la modele, totul este supus unei logici clare și are eficiență maximă. Drept urmare, pentru această eficiență, programatorul primește nu numai banii angajatorului, ci și liniște sufletească atunci când menține produsul și un sentiment de control asupra situației în cazul unor probleme cu programul.

    Chiar dacă programatorului nu i se oferă o specificație tehnică bine scrisă, el trebuie să își dea o înțelegere clară a ceea ce se va întâmpla în cele din urmă. Dacă există posibilitatea ca ceea ce a fost scris să fie profund modificat, cu atât mai bine - sarcinile de scriere a software-ului cu posibilitatea de modificare puternică sunt foarte interesante și deloc simple.

    Ei bine, în concluzie, fraza lui Steve McConnell - „Scrie codul ca și cum ar fi însoțit de un psihopat violent care știe unde locuiești.” Iar un psihopat probabil va fi foarte supărat dacă își rupe capul din cauza lipsei de logică și de ordine.

    Rezumatul cărții Arta programarii, volumele 1-3:
    Mulți oameni știu că programarea nu este doar o muncă mentală complexă, ci și un proces creativ. Autorul acestei cărți este Donald Erwin Knuth, profesor la Universitatea Stanford, care a scris multe cărți despre matematică și subiecte informatice. Omul de știință a devenit celebru datorită celebrei sale lucrări „Arta programării”, al cărei prim volum a fost publicat în urmă cu mai bine de 20 de ani. În cartea sa, Donald Knuth explică și analizează algoritmii de bază utilizați în programare. Aceasta este a treia ediție a celebrei serii de cărți „Arta programării”.

    Această versiune conține 3 volume din „Arta programarii”:

    Arta de a programa. Volumul 1. Algoritmi de bază.
    Arta de a programa. Volumul 2. Algoritmi seminumerici.
    Arta de a programa. Volumul 3. Sortare și căutare.

    Primul volum al seriei de cărți Arta programarii începe cu o descriere a conceptelor și metodelor de bază de programare. Autorul se concentrează apoi pe examinarea structurilor informaționale - reprezentarea informațiilor într-un computer, relațiile structurale dintre elementele de date și modul în care munca eficienta cu ei. Sunt date exemple de aplicații elementare pentru metode de simulare, calcul simbolic, metode numerice și metode de inginerie software. Față de ediția anterioară, s-au adăugat zeci de algoritmi simpli, dar în același timp foarte importanți. În conformitate cu tendinte moderne Secțiunea de introducere matematică a fost, de asemenea, revizuită semnificativ.

    Al doilea volum prezintă teoria algoritmilor numerici derivați. Capitolele separate includ o descriere a procesului de generare a numerelor aleatoare și a modalităților de lucru cu acestea într-un mediu de calcul. Autorul examinează conceptele fundamentale ale teoriei probabilităților în aplicare la sisteme de calcul, oferind cititorului algoritmi gata realizati programe de calculator. Merită o atenție specială metoda noua autorul generării numerelor aleatoare și o descriere a algoritmilor pentru calcularea serii formale de putere.

    A treia ediție a celui de-al treilea volum conține revizuire completă algoritmi clasici de sortare si cautare. Informațiile pe care le prezintă completează discuția despre structurile de date din volumul 1. Autorul examinează principiile construirii bazelor de date mari și mici, precum și a memoriei interne și externe. Cartea prezintă o selecție de algoritmi de computer testați cu atenție și oferă o analiză a eficacității acestora. În plus, o secțiune specială este dedicată metodelor optime de sortare și o descriere a noii teorii a permutării și a hashingului universal.

    Nume: Artele programarii - Volumul 1.

    Primul volum al seriei de cărți Arta programarii începe cu o descriere a conceptelor și metodelor de bază de programare. Autorul trece apoi la examinarea structurilor informaționale, reprezentarea informațiilor într-un computer, relațiile structurale dintre elementele de date și modalitățile de a lucra cu acestea în mod eficient. Sunt date exemple de aplicații elementare pentru metode de simulare, calcule simbolice, metode numerice și metode de dezvoltare software. Față de ediția anterioară, s-au adăugat zeci de algoritmi simpli, dar în același timp foarte importanți. În conformitate cu direcțiile moderne de cercetare, secțiunea de introducere matematică a fost revizuită semnificativ.

    Fiecare carte are propriul destin. Unele apar neobservate și la fel de imperceptibil dispar în fluxul timpului, devenind acoperite de praf pe rafturile bibliotecilor. Alții sunt căutați pentru o anumită perioadă în rândul unui cerc restrâns de specialiști, până când sunt înlocuiți cu noi cărți de referință. Alții, care se ridică peste timp, au o influență puternică asupra dezvoltării tehnologice a societății. Nu există atât de multe cărți care se încadrează în această din urmă categorie. Apariția lor în lume este întotdeauna o sărbătoare. Anii trec, tehnologiile se schimbă, dar noile generații își recitesc paginile cu interes constant. Lucrarea în mai multe volume oferită cititorului de celebrul om de știință american Donald Erwin Knuth, „Arta programarii”, aparține tocmai unor astfel de cărți.
    Care este succesul artei programarii de D. E. Knuth:
    În primul rând, această carte este un manual excelent despre proiectarea și analiza algoritmilor de computer. Secțiunile sale pot fi incluse în multe cursuri universitare despre tehnologii de programare, teoria algoritmilor și matematică discretă. Cartea poate fi citită și de elevii de liceu familiarizați cu elementele de bază ale programării. Autorul a ales limbajul de comandă al mașinii al ipoteticului computer universal MIX ca limbaj principal pentru algoritmii de înregistrare. Acest lucru vă permite să construiți programe optime ținând cont de caracteristicile computerelor. Transferarea programelor MIX pe computere reale sau rescrierea lor în limbi de nivel înalt nu este deosebit de dificilă. Logica unui program este aproape întotdeauna explicată folosind diagrame bloc simple.
    În al doilea rând, materialul atent selectat inclus în carte include principalele clase fundamentale de algoritmi, care într-o formă sau alta se găsesc cel mai adesea în practica de programare.
    În al treilea rând, un factor important în succesul cărții lui D. E. Knuth este natura enciclopedică a prezentării. Profesorul Knuth are o capacitate unică de a urmări o problemă de la istoricul ei până la starea ei actuală. Numeroase referiri la operele vechilor maeștri (până la antichitate), plasate într-un context modern, creează cititorului un sentiment aparte de implicare în dezvoltarea istorică a ideilor și metodelor științifice.

    Descărcare gratuită e-carte V format convenabil, urmăriți și citiți:
    Descarcă cartea Arta programarii - Volumul 1 - Knut D. E. - fileskachat.com, descărcare rapidă și gratuită.

    Descărcați djvu
    Mai jos puteți cumpăra această carte la cel mai bun preț cu reducere cu livrare în toată Rusia.

Cele mai bune articole pe această temă