Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Sigurnost
  • Umijeće programiranja. “Umijeće programiranja” - prikaz legendarnog serijala knjiga

Umijeće programiranja. “Umijeće programiranja” - prikaz legendarnog serijala knjiga

Projekt pisanja knjige autor je započeo godine. U početku je planirano da se objavi u jednom svesku, ali se pokazalo da je količina materijala tolika da je broj svezaka povećan na sedam. Prva tri sveska objavljena su prilično brzo: 1. svezak 1968., 2. svezak 1969. i 3. svezak 1973., nakon čega je uslijedila pauza do veljače 2005. godine, u kojoj je autor objavio prvi dio četvrtog sveska. Odlučeno je da se preostali dijelovi četvrtog sveska izdaju otprilike dva puta godišnje u zasebnim brojevima, nakon čega bi cijeli četvrti svezak bio službeno objavljen. Tijekom 2005.-2009. objavljeni su brojevi 0, 1, 2, 3 i 4, a 2011. godine izašao je svezak 4A koji je uključivao informacije iz tih brojeva. Također 2005. godine izdano je izdanje 1, “MMIX - RISC računalo za novo tisućljeće,” čiji će podaci biti uključeni u novo, četvrto izdanje prvog toma. Broj 6 izašao je 2015. godine Zadovoljivost, koji predstavlja srednju trećinu nadolazećeg sveska 4B.

Budući da je Knuth uvijek smatrao Umijeće programiranja glavnim projektom svog života, povukao se 1993. s namjerom da se potpuno usredotoči na pisanje dijelova koji nedostaju i sređivanje postojećih. Vjerovao je da će za dovršetak posla biti potrebno 20 godina.

Enciklopedijski YouTube

  • 1 / 5

    Kao priznati stručnjak za dizajn kompilatora, Knuth je 1962. počeo pisati knjigu o dizajnu prevoditelja. Ubrzo je shvatio da opseg materijala mora biti puno širi. U lipnju 1965. dovršio je pisanje prve verzije onoga što je prvotno želio objaviti kao jednu knjigu u dvanaest dijelova. Opseg rukopisnog teksta bio je 3000 stranica. Prema Knuthovim izračunima, ovaj je svezak trebao stati u 600 stranica tiskanog teksta, ali, kako ga je obavijestio njegov izdavač, stvarni volumen bilo bi 2000 stranica. S tim u vezi, struktura knjige je revidirana u korist nekoliko tomova, svaki od 1-2 odjeljka. Od tada, zbog stalnog porasta materijala, odlučeno je da se i četvrti svezak podijeli u zasebne knjige: 4A, 4B, 4C i eventualno 4D. No, ova podjela, po svemu sudeći, neće biti konačna, budući da odjeljci 7.1 i 7.2.1 već ukupno zauzimaju više od 650 stranica.

    Godine 1976. Knuth je pripremio drugo izdanje drugog sveska, koji je zahtijevao ponovno slaganje. Ali tipografski dizajn (monotipija) korišten u prvom izdanju do tada više nije bio dostupan. Kako bi izbjegao slična razočaranja u budućnosti, 1977. Knuth je počeo razvijati vlastiti tipografski sustav kompjutersko tipkanje. Prema njegovim izračunima, radovi su trebali trajati najviše šest mjeseci, no do završetka je trebalo proći desetak godina. Sustav je nazvan TeX i trenutno se koristi za raspored svih svezaka Umijeća programiranja. Osim toga, TeX je kasnije postao de facto standard za pisanje članaka i monografija u prirodnim znanostima.

    Kao i druge Knuthove knjige, Umijeće programiranja obilježeno je njegovim "zaštitnim znakom": za svaku grešku pronađenu u tekstu autor plaća jedan heksadecimalni dolar, odnosno 2,56 dolara (0x100 centi, u bazi 16). Još razlikovna značajka Knjiga sadrži obilje vježbi za samostalnu izvedbu, različitih stupnjeva težine, u rasponu od jednostavne zagonetke"za zagrijavanje" i kraj otvoreni problemi. Težina svake vježbe ocjenjuje se na brojčanoj ljestvici od 0 do 50. Tako je u prvim izdanjima Fermatov posljednji teorem bio ocijenjen s 50, no u trećem izdanju ta je ocjena “devalvirana” na 45, budući da je do tada njegov dokaz prestao biti otvoren problem.

    Sažetak simboli za treći svezak, 1978. "Razvrstavanje i pretraživanje" (lijevo - ocjena, desno - kratko objašnjenje)

    • Crni trokut - Preporučeno
    • M - S matematičkom pristranošću
    • VM - Zahtijeva poznavanje “više matematike”
    • 00 - Zahtijeva hitan odgovor
    • 10 - Jednostavno (1 minutu)
    • 20 - srednje težine (za 15 min)
    • 30 - Povećana težina
    • 40 - Za “matematičku radionicu”
    • 50 - Problem istraživanja

    Izvorni plan za pisanje knjige uključivao je sljedeću raščlambu materijala.

    • Svezak 1. Osnovni algoritmi.
      • Poglavlje 1. Osnovni pojmovi.
      • Poglavlje 2. Informacijske strukture.
    • Svezak 2. Polunumerički algoritmi.
      • Poglavlje 3. Slučajni brojevi.
      • Poglavlje 4. Aritmetika.
    • Svezak 3. Razvrstavanje i pretraživanje.
      • Poglavlje 5. Razvrstavanje.
      • Poglavlje 6. Pretraga.
    • Svezak 4. Kombinatorski algoritmi.
      • Poglavlje 7. Kombinatorno pretraživanje.
      • Poglavlje 8. Rekurzija.
    • Svezak 5. Sintaktički algoritmi.
      • Poglavlje 9. Leksikografsko pretraživanje.
      • Poglavlje 10. Sintaktičko pretraživanje.
    • Svezak 6. Teorija jezika.
    • Svezak 7. Sastavljači.

    Zapravo, ova se shema provodila do i uključujući treći svezak.

    U trenutno Objavljen je svezak 4A, koji sadrži prve odjeljke 7. poglavlja. Planirano je da se nove rubrike u početku izdaju u zasebnim brojevima (oko 128 stranica), otprilike dva broja godišnje (brojevi 0, 1, 2, 3 i 4 objavljeni su na sličan način prije izlaska sveska 4A).

    Strojno orijentirani primjer jezika

    Primjeri programa dani u knjizi koriste "MIX asembler" dizajniran za rad na hipotetskom MIX računalu. U trećem izdanju, zastarjeli MIX zamijenjen je MMIX-om, koji ima potpunu RISC arhitekturu. Postoji softver koji omogućuje emulaciju (M)MIX stroja na standardnim IBM-kompatibilnim računalima. GNU Compiler Collection ima mogućnost kompajliranja C/C++ koda na ciljnoj MMIX arhitekturi.

    Mnoge čitatelje odbija činjenica da se koristi jezik niska razina, ali Knuth smatra svoj izbor opravdanim, budući da je veza s arhitekturom neophodna kako bi se točno procijenile karakteristike algoritma kao što su brzina, potrošnja memorije, itd. Kao rezultat ovog izbora, međutim, ciljanu publiku jako sužava. Osim toga, opseg njegove primjene kao “knjige recepata” za programere praktičare je ograničen, od kojih mnogi ne znaju asembler, a ako znaju, nemaju želju prevoditi algoritme niske razine iz knjige na jezike visoka razina. Mnogi praktični vodiči, u kojima se isto gradivo prezentira na popularniji način, objavljuju se upravo iz tog razloga.

    Kritika

    Glavna značajka Knuthove monografije, koja je izdvaja od drugih knjiga o programiranju, je iznimno visoka razina kvalitete materijala i akademske prezentacije, kao i dubina analize problematike koja se razmatra. Zahvaljujući tome, postao je pravi bestseler i referentna knjiga za svakog profesionalnog programera. Američki časopis Scientist uvrstio je The Art of Programming na popis 12 najboljih fizikalnih i matematičkih monografija 20. stoljeća, uz radove Diraca o kvantnoj mehanici, Einsteina o teoriji relativnosti, Russella i Whiteheada o temeljima matematike, i nekoliko drugih.

    Naslovnica trećeg izdanja prvog toma knjige sadrži citat Billa Gatesa: „Ako se stvarno smatraš dobar programer..., pročitajte “Umijeće programiranja” (Knuth) ... Ako možete pročitati cijeli ovaj rad, onda bi mi svakako trebali poslati svoj životopis".

    Izdanja

    Izvornik

    Treći (trenutni)

    Uzlaznim redoslijedom brojeva volumena:

    • Svezak 1: Temeljni algoritmi. Treće izdanje (Reading, Massachusetts: Addison-Wesley, 1997), xx+650 str. ISBN 0-201-89683-4
    • Svezak 1, Svezak 1: MMIX - RISC računalo za novo tisućljeće. (Addison-Wesley, 14. veljače 2005.) ISBN 0-201-85392-2 (bit će u četvrtom izdanju sveska 1)
    • Svezak 2: Seminumerički algoritmi. Treće izdanje (Reading, Massachusetts: Addison-Wesley, 1997.), xiv+762 str. ISBN 0-201-89684-2
    • Svezak 3: Razvrstavanje i pretraživanje. Drugo izdanje (Reading, Massachusetts: Addison-Wesley, 1998.), xiv+780 str.+preklop. ISBN 0-201-89685-0
    • Svezak 4A: Kombinatorni algoritmi, 1. dio(Upper Saddle River, New Jersey: Addison-Wesley, 2011), xvi+883 str. ISBN 0-201-03804-8
    • Svezak 4, Svezak 6: Zadovoljivost. (Addison-Wesley Professional, 2015), xiii+310 str. ISBN 978-0-13-439760-3

    Prethodno

    Po datumu objave:

    • Svezak 1, prvo izdanje, 1968. 634str. ISBN 0-201-03801-3.
    • Svezak 2, prvo izdanje, 1969., xi+624pp, ISBN 0-201-03802-1.
    • Svezak 3, prvo izdanje, 1973., xi+723pp+centerfold, ISBN 0-201-03803-X
    • Svezak 1, drugo izdanje, 1973., xiii+634pp, ISBN 0-201-03809-9.
    • Svezak 2, drugo izdanje, 1981., xiii+ 688 str. ISBN 0-201-03822-6.
    • Svezak 4, Svezak 2: Generiranje svih torki i permutacija, (Addison-Wesley, 14. veljače 2005.) v+127 str, ISBN 0-201-85393-0
    • Svezak 4, Svezak 3: Generiranje svih kombinacija i particija. (Addison-Wesley, 26. srpnja 2005.) vi+150 str, ISBN 0-201-85394-9
    • Svezak 4, Svezak 4: Generiranje svih stabala - Povijest kombinatorne generacije, (Addison-Wesley, 6. veljače 2006.) vi+120pp, ISBN 0-321-33570-8
    • Svezak 4, Svezak 0: Uvod u kombinatorne algoritme i Booleove funkcije, (Addison-Wesley Professional, 28. travnja 2008.) vi+240pp, ISBN 0-321-53496-4
    • Svezak 4, Svezak 1: Bitovi trikovi i tehnike; Binarni dijagrami odlučivanja(Addison-Wesley Professional, 27. ožujka 2009.) viii+260 str,

    Na svjetskom tržištu računalne literature postoji mnogo knjiga namijenjenih podučavanju osnovnih algoritama i korištenih u programiranju. Ima ih dosta i uvelike se natječu jedni s drugima. Međutim, među njima postoji posebna knjiga. Riječ je o trotomnoj “Umjetnosti programiranja” D. E. Knuta, koja stoji izvan svake konkurencije, uvrštena je u zlatni fond svjetske literature o informatici i referentna je knjiga za gotovo sve koji imaju veze s programiranjem.

    Mi, kao izdavači, vidimo vrijednost knjige u tome što nije toliko namijenjena podučavanju tehnikama programiranja, već podučavanju, ako je moguće, “umjetnosti” programiranja, nudi puno recepata za poboljšanje programa i , što je najvažnije, uči vas kako sami pronaći te recepte.

    Nije tajna da su naši programeri jedni od najkvalificiranijih stručnjaka na svijetu. Oni dostojno predstavljaju domaću školu programiranja i računarstva u inozemstvu koja je dala značajan doprinos u formiranju temeljnih temelja računarstva. Da bi se održala ova razina i krenulo naprijed, potrebno je na vrijeme objavljivati ​​knjige na ruskom jeziku koje odražavaju glavna svjetska dostignuća u ovoj oblasti. Trotomna “Umjetnost programiranja” D. E. Knuta jedna je od takvih knjiga.

    Ponosni smo što će ova klasična knjiga biti dodana u biblioteke programera, nastavnika, studenata, srednjoškolaca i mnogih drugih, te što ćemo na taj način doprinijeti dubljem razumijevanju osnova računalne znanosti. Duboko smo uvjereni da je knjiga “Umijeće programiranja” D. E. Knuth-a sposobna dovesti čovjeka bliže savršenstvu. Nadamo se da će naše izdanje ove prekrasne knjige na ruskom još jednom potvrditi da prave vrijednosti ne zastarijevaju tijekom godina.

    - Victor Shtonda, Gennady Petrikovets, Alexey Orlovich, izdavači

    O knjizi "Umijeće programiranja"

    Svaka knjiga ima svoju sudbinu. Neki se pojavljuju neprimjetno i jednako tako neprimjetno nestaju u struji vremena, prekrivajući se prašinom na policama knjižnica. Drugi unutra određeno razdoblje su traženi među uskim krugom stručnjaka sve dok ih ne zamijene nove referentne knjige. Drugi pak, izdižući se iznad vremena, snažno utječu na tehnološki razvoj društva. Nema toliko knjiga koje spadaju u potonju kategoriju. Njihova pojava na svijetu uvijek je praznik. Godine prolaze, tehnologije se mijenjaju, ali nove generacije iznova čitaju njihove stranice sa stalnim zanimanjem. Upravo te knjige uključuju višetomno djelo poznatog američkog znanstvenika Donalda Erwina Knutha koje čitatelju nudi “Umijeće programiranja”.

    Prošlo je gotovo 30 godina otkako je ova knjiga prvi put objavljena 1972. godine u Sjedinjenim Državama. Preveden je na većinu svjetskih jezika, uključujući i ruski. Do danas je u zemljama ZND-a trotomni rad D. E. Knutha postao bibliografska rijetkost. Godine 1998. u SAD-u je objavljeno treće izdanje “Umijeća programiranja” koje zadržava redoslijed prezentacije materijala. prethodne verzije, no značajno je proširena lista literature koja uključuje najnovije i najvažnije rezultate, dodane su nove vježbe i komentari te su otklonjene netočnosti. S obzirom na popularnost “Umijeća programiranja” u cijelom svijetu, trebalo je odavno očekivati ​​pojavu novog prevedenog izdanja na ruski jezik, koje držite u rukama.

    Kakav je uspjeh "Umijeća programiranja" D. E. Knuta?

    Prvo, ova je knjiga izvrstan udžbenik o dizajnu i analizi računalnih algoritama. Njegovi dijelovi mogu se uključiti u mnoge sveučilišne tečajeve o tehnologijama programiranja, teoriji algoritama i diskretnoj matematici. Knjigu mogu čitati i srednjoškolci koji su upoznati s osnovama programiranja. Kao glavni jezik za snimanje algoritama autor je odabrao jezik strojnih naredbi hipotetskog univerzalno računalo MIJEŠATI. To vam omogućuje izradu optimalnih programa uzimajući u obzir karakteristike računala. Prijenos MIX programa na stvarna računala ili njihovo ponovno pisanje na jezicima visoke razine nije osobito teško. Logika programa se gotovo uvijek objašnjava korištenjem jednostavnih blok dijagrama.

    Drugo, pažljivo odabrani materijal uključen u knjigu uključuje glavne temeljne klase algoritama, koji se u ovom ili onom obliku najčešće nalaze u programerskoj praksi.

    Treće, važan čimbenik uspjeha knjige D. E. Knuta je enciklopedijska priroda prezentacije. Profesor Knuth ima jedinstvenu sposobnost da prati problem od njegove povijesne pozadine do Trenutna država. Brojne reference na djela starih majstora (sve do antike), sadržane u modernom kontekstu, stvaraju kod čitatelja poseban osjećaj uključenosti u povijesni razvoj znanstvene ideje i metode.

    Četvrto, treba istaknuti majstorstvo prezentacije. Knjiga je namijenjena širokom krugu čitatelja - od studenata početnika do profesionalnih programera. Svatko će biti zainteresiran za učenje računalnih algoritama na vlastitoj razini. Materijal je sam sebi dovoljan. Za razumijevanje suštine metoda nije potrebno poznavanje posebnih grana matematike ili posebnih programskih tehnologija. Može se pratiti određena “glazbena” kompozicija radnje (D. E. Knuth kod kuće ima male orgulje na kojima svira).

    Popis komponenti uspjeha u Umijeću programiranja može se lako nastaviti.

    Autor ovih redaka pohađao je kolegij “Umijeće programiranja” kako ga je izlagao profesor Knuth 1976.-1977. tijekom stažiranja na Sveučilištu Stanford. Tada je nastala algoritamska osnova tehnologija programiranja, u čijem je ishodištu bio D. E. Knuth. Bilo je mnogo rasprava, seminara i kreativnih ideja.

    Značajne knjige uvijek su povezane sa sudbinom autora. Donald Erwin Knuth započeo je rad na Umijeću programiranja 1962. To traje do danas. Ima puno planova. Pred nama su novi tomovi “Umijeća programiranja” koje čitatelji željno iščekuju.

    - Profesor Anatolij Anisimov

    Od urednika prijevoda

    Prošlo je oko 25 godina od prvog izdanja knjige “Umijeće programiranja” D. E. Knuta. Ipak, knjiga ne samo da nije zastarjela, već je i dalje glavni vodič kroz umjetnost programiranja, knjiga iz koje se uči razumjeti bit i značajke ove umjetnosti.

    Tijekom godina Engleski jezik Već je izašlo treće izdanje 1. i 2. sveska, kao i drugo izdanje 3. sveska. Autor je u njih napravio značajne izmjene i značajne dopune. Dovoljno je reći da se broj vježbi gotovo udvostručio, a mnoge vježbe u prijašnjim izdanjima (osobito odgovori na njih) su izmijenjene. Mnoga su poglavlja i odjeljci značajno dopunjeni i prerađeni, ispravljene su netočnosti i tipfeleri, dodane su brojne nove reference na literaturu, a korišteni su teorijski rezultati posljednjih godina.

    Poglavlje 3 je značajno transformirano, posebno odjeljci 3.5 i 3.6, kao i odjeljci 4.5.2, 4.7, 5.1.4, 5.3, 5.4.9, 6.2.2, 6.4, 6.5 itd.

    Naravno, ukazala se potreba za novim izdanjem knjige.

    Prijevod se temelji na trećem izdanju 1. i 2. sveska i drugom izdanju 3. sveska. Uz to su uzeti u obzir dodaci i ispravci koje je ljubazno ustupio autor.

    Prilikom prevođenja nastojali smo sačuvati autorov stil, zapis i način prezentacije materijala. U većini slučajeva korišteni su termini usvojeni u znanstvenoj literaturi na ruskom jeziku. Engleski ekvivalenti navedeni su tamo gdje je bilo potrebno. Iz mnogo razloga, osobito zbog složenosti nekih odjeljaka, Umijeće programiranja je knjiga izazovna za čitanje. Jedan od razloga zašto je knjiga teška za razumijevanje je autorov stil izlaganja; Nakon što se naviknete, čitanje će vam biti znatno lakše.

    Zbog obilja materijala (često malo međusobno povezanog), knjigu je nemoguće strukturirati na način da se različiti pojmovi i definicije uvode odmah pri prvom spomenu. Stoga se u 1. poglavlju mogu raspravljati o konceptima bez referenci čije su stroge definicije dane u 3. svesku. Zato je tako važna uloga predmetnog kazala bez kojeg bi razumijevanje knjige bilo znatno otežano. Nadamo se da se čitatelj neće iznenaditi kad pronađe reference na poglavlja 7, 8 i ona koja slijede koja nisu uključena u predložena tri sveska poglavlja. Mi se, zajedno s autorom, nadamo da će biti objavljeni vrlo brzo i, naravno, odmah će se pojaviti u ruskom prijevodu kao nastavak ove publikacije.

    Treba obratiti pozornost i na ne uvijek standardne oznake koje koristi autor. Kao i definicije, ove se oznake mogu pojaviti u 1. svesku, a uvode se u 2. svesku. Stoga bi bez kazala simbola bilo izuzetno teško koristiti se knjigom. Također bih želio skrenuti pozornost na unos [A], gdje je A određena izjava. Ovaj unos se nalazi u formulama, a ponekad iu tekstu, i označava vrijednost jednaku indikatoru A.

    - Profesor Yu. V. Kozachenko

    PREDGOVOR

    Poštovani čitatelji! Držiš knjigu u rukama,

    da objavimo što ste nas molili u tisućama pisama. Morali smo provesti godine pažljivo provjeravajući i ponovno provjeravajući beskrajan broj recepata i birajući za vas najbolje, najzanimljivije, najsavršenije.

    Sada, bez imalo sumnje, možemo reći da će, ako slijedite upute, svako jelo ispasti jednako dobro kao naše, čak i ako nikada prije niste kuhali.
    - McCallova kuharica (1963.)

    PROCES pripreme programa za digitalno računalo vrlo je uzbudljiva aktivnost. I nije stvar samo u tome da se opravdava s ekonomskog i znanstvenog gledišta; također može uzrokovati estetske doživljaje, slične teme koje kreativni pojedinci doživljavaju pišući glazbu ili poeziju. U rukama držite prvi svezak višetomne publikacije čija je svrha čitatelju pružiti niz znanja i vještina koje čine programerski zanat.

    Sljedeća poglavlja nisu uvod u računalno programiranje; Pretpostavlja se da već imate iskustva u ovom području. Zapravo, zahtjevi za čitatelja vrlo su jednostavni; međutim, trebat će vremena i prakse da programer početnik shvati što digitalno računalo. Dakle, čitatelj bi trebao imati:

    a) određeno razumijevanje načina rada računala s digitalnim pohranjenim programom; u ovom slučaju, nije potrebno razumjeti elektroniku, glavna stvar je razumjeti kako se naredbe mogu pohraniti u memoriju računala, a zatim izvršiti sekvencijalno;

    b) sposobnost jasnog i definiranog iznošenja problema, kompjuterski razumljivo(računala nemaju inteligenciju ljudi, pa rade točno ono što im se kaže, ni više ni manje; to je činjenica koju je korisnicima početnicima obično najteže razumjeti);

    c) poznavanje najjednostavnijih računalne metode, kao što je organizacija petlji (ponovljeno izvršavanje određenog skupa naredbi), kao i korištenje potprograma i varijabli s indeksima;

    d) poznavanje zajedničkih računalni pojmovi, kao što su "memorija", "registri", "bitovi", "pokretni zarez", "preljev", "softver"; Većina pojmova koji nisu definirani u tekstu objašnjeni su u indeksu na kraju svakog sveska.

    Ova četiri uvjeta vjerojatno se mogu spojiti u jedan zahtjev: čitatelj mora imati iskustva u pisanju i otklanjanju pogrešaka u najmanje četiri programa za najmanje jedno računalo.

    Pokušao sam napisati ove knjige na takav način da mogu poslužiti u nekoliko različitih svrha. Prvo, oni su referentni priručnik koji objedinjuje znanja iz nekoliko važnih područja znanosti. Drugo, mogu se koristiti kao pomoćna sredstva za samoobrazovanje i udžbenici programiranja ili informatike za sveučilišta. S tim u vezi, uključio sam u tekst veliki broj vježbe i dao odgovore na većinu njih. Osim toga, nastojao sam se usredotočiti na činjenice, umjesto da “nalijevam vodu” i bavim se općim rezoniranjem.

    Ovaj trodijelni svezak namijenjen je svima koji se ozbiljno zanimaju za računala, a ne samo profesionalcima. Zapravo, jedan od mojih glavnih ciljeva bio je učiniti tehnike programiranja dostupnijima ljudima iz drugih područja. Tipično, ovi profesionalci imaju velike koristi od korištenja računala, ali ne mogu si priuštiti gubljenje vremena na traženje potrebnih informacija, čiji su dijelovi razbacani po mnogim tehničkim časopisima.

    Tema ovih knjiga može se formulirati na sljedeći način: "Nenumerička analiza". Računala se obično povezuju s rješavanjem numeričkih problema, kao što su pronalaženje korijena jednadžbe, numerička interpolacija, integracija itd. Ali u ovoj trotomnoj knjizi takve se teme ne raspravljaju (osim kada je to potrebno učiniti u tečaju prezentacije). Numeričko računalno programiranje iznimno je zanimljivo i brzo razvijajuće područje;

    dosta je napisano na ovu temu dobre knjige. No od 1960-ih računala se sve više koriste za rješavanje problema u kojima brojevi igraju sporednu ulogu. Sposobnost računala da donosi odluke umjesto da ih samo izvršava sada dolazi do izražaja. aritmetičke operacije. Pri rješavanju nenumeričkih problema ponekad su potrebni zbrajanje i oduzimanje, ali rijetko su potrebni množenje i dijeljenje. Ali, naravno, i oni koji se primarno bave numeričkim računalno programiranje, samo će imati koristi od proučavanja nenumeričkih metoda, jer one također čine osnovu numeričkih programa.

    Rezultati istraživanja u području nenumeričke analize razasuti su po mnogim tehničkim časopisima. Moj je cilj bio izvući iz ove goleme količine informacija samo temeljne tehnike koje se mogu primijeniti na razne situacije programiranja. Pokušao sam sažeti odabrane informacije kako bih došao do onoga što se manje-više može nazvati "teorijom" i također pokazati kako tu teoriju primijeniti na razne praktične probleme.

    Naravno, “nenumerička analiza” krajnje je nesretan naziv za ovo područje znanosti. Neuspješan je prvenstveno zato što sadrži samo negaciju drugog pojma; bilo bi puno bolje odabrati smisleniji pojam koji nema prefiks “ne”. Naziv "obrada informacija" pokriva šire područje od materijala koji se ovdje raspravlja, a "metode programiranja" pokriva uže. Vjerujem da je za temu obrađenu u ovim knjigama najprikladniji naziv analiza algoritama, što se može dešifrirati kao “teorija svojstava određenih računalnih algoritama”.

    Kompletan skup knjiga pod naslovom Umijeće programiranja ima sljedeću osnovnu strukturu.

    Svezak 1. Osnovni algoritmi

    Poglavlje 1. Osnovni koncepti Poglavlje 2. Informacijske strukture

    Svezak 2. Izvedeni algoritmi

    Poglavlje 3. Nasumični brojevi Poglavlje 4. Aritmetika

    Svezak 3. Razvrstavanje i pretraživanje

    Poglavlje 5. Razvrstavanje Poglavlje 6. Pretraživanje

    Svezak 4. Kombinatorski algoritmi

    Poglavlje 7. Kombinatorno pretraživanje Poglavlje 8. Rekurzija

    Svezak 5. Sintaktički algoritmi

    Poglavlje 9. Leksikografsko pretraživanje Poglavlje 10. Raščlanjivanje

    Svezak 4 pokriva vrlo široku temu, tako da se zapravo sastoji od tri zasebne knjige (svezci 4A, 4B i 4C). Planirana su i dva dodatna sveska o specijaliziranijim temama: Svezak 6, Teorija jezika (11. poglavlje) i 7. svezak, Prevoditelji (12. poglavlje).

    Započeo sam ovaj rad 1962. godine s namjerom da napišem jednu knjigu koja će sadržavati sva navedena poglavlja, ali sam ubrzo shvatio da je potrebno dublje razmotriti odabrane teme, a ne samo preletjeti površinu. Rezultat je bio toliko dugačak tekst da je materijala u svakom poglavlju bilo više nego dovoljno za proučavanje tijekom jednog sveučilišnog semestra. I postalo je jasno da je materijal potrebno podijeliti u nekoliko zasebnih svezaka. Znam da knjiga koja sadrži samo jedno ili dva poglavlja izgleda prilično čudno, ali odlučio sam zadržati izvorno numeriranje poglavlja kako bih olakšao unakrsno referenciranje. Planirano je da skraćena verzija svezaka 1-5 služi kao općenitija referenca i/ili udžbenik za studente; sadržavat će većinu materijala u ovim svezacima, a više specijaliziranih informacija bit će izostavljeno. Skraćeno izdanje zadržat će istu numeraciju poglavlja kao i puno izdanje.

    Svezak 1 može se smatrati "crossoverom" kompletnog skupa poglavlja, u smislu da sadrži osnovne informacije koje se koriste u svim ostalim knjigama. S druge strane, svesci 2-5 mogu se čitati neovisno jedan o drugom. Svezak 1 nije samo referentna knjiga koja se koristi kao vodič pri čitanju ostalih svezaka; također može poslužiti kao sveučilišni udžbenik ili vodič za samoobrazovanje na temu struktura podataka (fokus na Poglavlje 2) ili diskretne matematike (fokus na Odjeljke 1.1, 1.2, 1.3.3 i 2.3.4), ili programiranje jezika strojnih instrukcija (usredotočite se na odjeljke 1.3 i 1.4).

    Ova su poglavlja napisana s drugačijeg stajališta od većine modernih knjiga o programiranju, to jest, nisam pokušao naučiti čitatelja kako koristiti tuđi softver. Umjesto toga, cilj mi je naučiti čitatelja kako napisati vlastite programe više kvalitete.

    Moj početni cilj bio je upoznati čitatelje s vrhunskim znanstvenim istraživanjima u svakom od obuhvaćenih područja znanja. Ali vrlo je teško biti u tijeku s industrijom koja je ekonomski isplativa; brz rast informatika onemogućilo mi je da ostvarim svoje snove. Slikovito rečeno, našao sam se na obali golemog oceana koji sadrži desetke tisuća malih rezultata do kojih su došli deseci tisuća talentiranih ljudi diljem svijeta. Stoga sam si morao postaviti novi cilj - usredotočiti se na "klasične" metode koje će ostati relevantne desetljećima i opisati ih najbolje što mogu i najbolje što mogu. Posebno sam pokušao pratiti povijest svake teme i postaviti čvrste temelje za nju. daljnji razvoj. Pokušao sam koristiti preciznu terminologiju u skladu s onom koja se koristi u suvremenim publikacijama i pokušao sam prikazati sve poznate ideje sekvencijalnog programiranja koje se odlikuju jednostavnošću i elegancijom formulacije.

    Sada nekoliko riječi o matematičkom sadržaju ove višetomne publikacije. Gradivo je prezentirano tako da je sasvim dostupno i osobama sa srednjom stručnom spremom; Moći će preletjeti složenije fragmente ili ih jednostavno preskočiti. Istovremeno, oni koji su matematički skloni moći će naučiti zanimljive matematičke tehnike vezane uz diskretnu matematiku. Ova dvojnost u prezentaciji informacija postignuta je, s jedne strane, ocjenjivanjem svake vježbe (kako bi čitatelj mogao razlikovati matematički složene vježbe od jednostavnih), as druge strane, zahvaljujući organizaciji odjeljaka u gdje su glavni matematički rezultati formulirani prije dokaza. Predlaže se ili da sami izvedete dokaze kao vježbe (čiji su odgovori dati u posebnom odjeljku) ili ih pronađete na kraju odjeljka.

    Čitatelj kojeg prvenstveno zanima programiranje, a ne matematika, možda će htjeti prestati čitati odjeljak čim matematički materijal postane pretežak za razumijevanje. S druge strane, čitatelj matematike pronaći će mnogo toga za sebe Zanimljivosti. Mnoge matematičke publikacije na temu programiranja bile su pogrešne, pa je jedan od ciljeva ove knjige čitatelju pružiti ispravno matematičko obrazloženje za predmet. A budući da se smatram matematičarem, moja izravna odgovornost je da ispravno (koliko mogu) prezentiram gradivo s matematičkog gledišta.

    Za čitanje većine matematičkog materijala sasvim je dovoljno poznavanje elementarne matematike, budući da se gotovo sva ostala teorija ovdje razvija. Ali ponekad su mi potrebni dublji teoremi teorije kompleksne varijable, teorije vjerojatnosti, teorije brojeva itd. U takvim slučajevima upućujem na knjige koje sadrže detaljan prikaz tih tema.

    Najteža odluka koju sam morala donijeti pripremajući ove knjige bila je kako ih predstaviti. razne metode. Dobro su poznate prednosti dijagrama toka i opisa algoritama korak po korak; ova pitanja su razmatrana u članku "Računalno nacrtani dijagrami toka" u ACM Communications, Vol. 6 (rujan 1963.), stranice 555-563. Da bi se opisao bilo koji računalni algoritam, također je potreban formalan i precizan jezik. Stoga sam morao odlučiti koji ću jezik koristiti: algebarski, poput ALGOL ili FORTRAN, ili strojno orijentirani. Mnogi današnji računalni znanstvenici vjerojatno se neće složiti s mojom odlukom da koristim strojno orijentirani jezik, ali uvjeren sam da je pravi izbor. Za to postoje sljedeći razlozi.

    a) Programer je pod velikim utjecajem jezika na kojem su programi napisani. Trenutačno je prevladavajuća tendencija odabira najjednostavnijih, a ne najoptimalnijih jezičnih konstrukcija za računalo. A programer koji poznaje strojno orijentirani jezik ima tendenciju koristiti više učinkovite metode te tako stvara bolje programe.

    b) Svi programi koje trebamo napisani na strojno orijentiranom jeziku, uz rijetke iznimke, bit će male veličine. To znači da ako imamo računalo s minimalnom procesorskom snagom, nećemo imati problema s korištenjem takvih programa.

    c) Jezici visoke razine nisu prikladni za raspravu o važnim detaljima niske razine kao što su korutinska komunikacija, generiranje slučajnih brojeva, aritmetika visoke preciznosti i mnogi drugi problemi povezani s učinkovitu upotrebu memorija.

    d) Svatko tko je ozbiljno zainteresiran za računala trebao bi dobro poznavati strojni jezik jer je to osnova rada računala.

    e) Nešto znanja o strojnom jeziku potrebno je u svakom slučaju za razumijevanje izlaza programa danih u mnogim primjerima.

    f) Novi algebarski jezici dolaze i izlaze iz mode svakih pet godina, dok ja pokušavam govoriti o "vječnim istinama".

    S druge strane, priznajem da je pisanje programa na jezicima visoke razine i otklanjanje pogrešaka u tim programima puno lakše. Zapravo, od 1970. godine, ja sam rijetko koristio strojni jezik niske razine za svoje vlastite programe, budući da moderna računala imaju veliku količinu memorije i veliku brzinu. Ali da bismo riješili mnoge probleme o kojima se govori u ovoj knjizi, najveća vrijednost posjeduje umjetnost programiranja. Na primjer, neke kombinatorne izračune potrebno je ponoviti trilijune puta, a mi ćemo uštedjeti otprilike 11,6 dana rada smanjenjem vremena izračuna u unutarnjoj petlji za samo jednu mikrosekundu. Isto tako, ima smisla uložiti dodatni napor da se napiše program koji će se koristiti mnogo puta svaki dan na mnogim računalima, pogotovo zato što program treba napisati samo jednom.

    A ako odlučite koristiti strojno orijentirani jezik, koji biste jezik trebali izabrati? Mogao bih odabrati jezik za određeni stroj X, ali onda će to misliti oni koji koriste drugo računalo ova knjiga napisano samo imajući na umu računalo X. Štoviše, stroj X vjerojatno ima puno karakteristične značajke, za što je građa ove knjige potpuno neprimjenjiva, ali ju ipak treba iznijeti. I konačno, za dvije godine proizvođač stroja X izbacit će stroj X+1 ili 10X i više nitko neće biti zainteresiran za računalo X.

    Kako bih riješio ovaj problem, pokušao sam razviti "idealno" računalo s vrlo jednostavna pravila rad (koji se može proučiti za, recimo, samo sat vremena) i vrlo je sličan pravim strojevima. Nema razloga da učenik izbjegava učenje karakteristika raznih računala; Nakon što naučite jedan jezik, svi ostali će se naučiti puno lakše. Osim toga, ozbiljan programer mora biti spreman nositi se s različitim strojnim jezicima tijekom svog rada. Stoga postoji samo jedan nedostatak korištenja fiktivnog stroja - poteškoće u pokretanju programa napisanih za njega. Srećom, to zapravo i nije problem jer su mnogi dobrovoljci dobrovoljno ponudili svoje usluge za pisanje simulatora hipotetskog stroja. Takvi simulatori idealni su za obrazovne svrhe, a rad s njima čak je lakši od rada s pravim računalom.

    Pokušao sam se povezati s najboljim starim radovima o svakoj temi, kao i spomenuti novi rad. Kad govorim o literarnim izvorima, koristio sam standardne kratice za naslove časopisa, s izuzetkom najčešće citiranih časopisa, za koje su korištene sljedeće kratice.

    CACM - Komunikacije Udruge za računalne strojeve

    JACM - časopis Udruge za računalne strojeve

    Sotr. J. - The Computer Journal (Britansko računalno društvo)

    matematika Sotr. - Matematika računanja

    AMM - Američki matematički mjesečnik

    SICOMP - SIAM časopis o računarstvu

    FOCS - IEEE simpozij o temeljima računalne znanosti

    SODA - ACM-SIAM Simpozij o diskretnim algoritmima

    STOC - ACM Simpozij o teoriji računalstva

    Crelle - Journal fur die reine und angewandte Mathematik

    Na primjer, "CASM 6 (1963), 555-563" odnosi se na časopis naveden u prethodnom paragrafu ovog predgovora. Također sam upotrijebio kraticu "CMatA" za referiranje na knjigu Concrete Mathematics, koja se spominje u uvodu odjeljka 1.2.

    Većina tehnički materijal Ove knjige objašnjavaju vježbe. Ako ideja o ne-trivijalnoj vježbi nije pripadala meni, onda sam pokušao spomenuti njezina autora. Upućivanje na literaturu obično se navodi u tekstu odjeljka ili u odgovoru na vježbu. Ali u mnogim slučajevima vježbe se temelje na neobjavljenim materijalima na koje se ne može pozivati.

    Tijekom godina rada na ovim knjigama pomogli su mi mnogi ljudi, kojima sam od srca zahvalan. Prije svega, želim izraziti svoju zahvalnost svojoj supruzi Jill na njenom beskrajnom strpljenju, na pripremi nekih ilustracija i na stalna pomoć u svemu. Također sam zahvalan Floydu Robertu W. što je 1960-ih posvetio toliko vremena poboljšanju i produbljivanju ovog materijala. Tisuće drugih ljudi također su mi pružile neprocjenjivu pomoć. Samo da se navedu njihova imena bila bi potrebna još jedna takva knjiga! Mnogi od njih ljubazno su mi dopustili da koristim njihov stari, neobjavljeni rad. Moje istraživanje na Caltechu i Sveučilištu Stanford velikodušno je financirao National znanstveno utemeljenje(National Science Foundation) i Ured za pomorska istraživanja. Addison-Wesley mi je bio od velike pomoći i podrške otkad sam počeo raditi na projektu 1962. Čini mi se da je za sve te ljude najbolja zahvalnost ova publikacija. To pokazuje da su njihovi doprinosi rezultirali knjigama u kojima sam, nadam se, uspio napisati ono što su očekivali.

    Predgovor trećem izdanju

    Nakon što sam proveo deset godina razvijajući METAFONT i TEX računalne sustave za tipkanje, sada mogu ostvariti svoj san o korištenju ovih sustava za tipkanje knjiga. Umijeće programiranja. Napokon sam uspio unijeti cijeli tekst ove knjige u svoje osobno računalo i tako ga dobiti elektronska verzija, što će vam omogućiti bilo kakve promjene u tehnologiji ispisa i prikaza na ekranu u budućnosti. Ovakav način rada mi je omogućio doslovno tisuće poboljšanja; Postigao sam ono o čemu sam tako dugo sanjao.

    U ovom novom izdanju uspio sam ispitati svaku riječ teksta, nastojeći zadržati mladenački entuzijazam svog izvornog istraživanja i u isto vrijeme uvesti veću zrelost prosuđivanja. Dodani su deseci novih vježbi, a deseci starih dobili su nove ili poboljšane odgovore.

    Tako se nastavlja rad na knjizi “Umijeće programiranja”. Zbog toga neki dijelovi ove knjige počinju ikonom “U izradi” (ovo je svojevrsna isprika što navedeni podaci nisu najnoviji). Moje su mape prepune važnih materijala koje planiram uključiti u konačno, slavno četvrto izdanje 1. sveska; vjerojatno će izaći za 15 godina. Ali prvo moram dovršiti tomove 4 i 5. Želim da budu objavljeni čim budu spremni za tisak.

    Velik dio teškog posla u pripremi ovog novog izdanja obavili su Phyllis Winkler i Silvio Levy, koji su stručno otkucali i uredili tekst drugog izdanja, te Jeffrey Oldham, koji je pretvorio gotovo sve originalne ilustracije u METAP0ST format. Ispravio sam sve pogreške koje su upozoravajući čitatelji (Barry) otkrili u drugom izdanju (kao i pogreške koje, nažalost, nitko nije primijetio), i pokušao izbjeći unošenje novih pogrešaka u novi materijal. Ipak, priznajem da su neki nedostaci ipak ostali, te bih ih želio što prije ispraviti. Stoga ću za svaku tiskarsku pogrešku*, kao i pogrešku vezanu uz suštinu prezentiranog materijala ili uz dane povijesne informacije, rado platiti 2,56 dolara onome tko to prvi pronađe. Na web stranici čija je adresa navedena na poleđini Naslovnica, sadrži trenutni popis svih pogrešaka koje su mi prijavljene**.

    * Ovo se odnosi na izvornik ove publikacije. - Cca. izd.
    ** Ispravljene su pogreške poznate u vrijeme pripreme ruskog izdanja. -Cca. izd.

    D.E.K.
    Stanford, Kalifornija
    travnja 1997

    Svijet se promijenio u proteklih dvadeset godina.
    - Bill Gates (1995.)


    POGLAVLJE 1. OSNOVNI POJMOVI.................................................. ......... 27
    1.1. ALGORITMI................................................. .. ...... 27
    1.2. MATEMATIČKI UVOD................................................ .... 37
    1.2.1. Matematička indukcija.................................. 38
    1.2.2. Brojevi, potencije i logaritmi..................................... 49
    1.2.3. Zbrojevi i umnošci..................................................... .... 56
    1.2.4. Cjelobrojne funkcije i elementarna teorija brojeva......... 68
    1.2.5. Permutacije i faktorijeli..................................... 75
    1.2.6. Binomni koeficijenti.................................. 82
    1.2.7. Harmonijski brojevi................................................. ... 105
    1.2.8. Fibonaccijevi brojevi................................................. .... 109
    1.2.9. Generirajuće funkcije.................................................. 118
    1.2.10. Analiza algoritma............................................. 127
    *1.2.11. Asimptotski prikazi........................ 138
    *1.2.11.1. Simbol OKO .......................................... 138
    *1.2.11.2. Eulerova formula zbrajanja.................................. 143
    *1.2.11.3. Primjena asimptotskih formula.......................... 148
    1.3. MIJEŠATI ................................................. ......... 156
    1.3.1. Opis MIX-a ..................................... 156
    1.3.2. MIX računalni asemblerski jezik ..................................... 178
    1.3.3. Primjena na permutacije................................. 198
    1.4. NEKE TEMELJNE TEHNIKE PROGRAMIRANJA.................................. 221
    1.4.1. Potprogrami ................................................. ....... 221
    1.4.2. Korutine................................................. ......... 229
    1.4.3. Programi tumača..................................................... ... 237
    1.4.3.1. MIX Simulator ..................................... 239
    *1.4.3.2. Programi praćenja................................................. 248
    1.4.4. Ulaz i izlaz..................................................... ......... 251
    1.4.5. Povijest i bibliografija.................................. 266

    POGLAVLJE 2. INFORMACIJSKE STRUKTURE.................................................. ....... 271
    2.1. UVOD................................................. ....... .... 271
    2.2. LINEARNE LISTE................................................. .... 277
    2.2.1. Hrpe, redovi čekanja i špilovi .............................................. ...... 277
    2.2.2. Sekvencijalna distribucija........................ 283
    2.2.3. Povezana distribucija..................................... 295
    2.2.4. Kružne liste.................................................. 315
    2.2.5. Dvaput povezane liste................................ 322
    2.2.6. Nizovi i ortogonalne liste................................................. 341
    2.3. DRVEĆE................................................. ..... 352
    2.3.1. Prelaženje binarnih stabala.................................. 362
    2.3.2. Predstavljanje stabala kao binarnih stabala........ 380
    2.3.3. Ostali prikazi drveća............................. 395
    2.3.4. Osnovna matematička svojstva stabala.......................... 410
    2.3.4.1. Slobodna stabla.................................. 410
    2.3.4.2. Orijentirana stabla........................ 420
    *2.3.4.3. Lema o beskonačnom stablu.................................. 431
    *2.3.4.4. Nabrajanje stabala............................ 435
    2.3.4.5. Duljina puta.................................................. 449
    *2.3.4.6. Povijest i bibliografija............................ 456
    2.3.5. Popisi i odvoz smeća ................................. 459
    2.4. VIŠE POVEZANE STRUKTURE.................................................. ...... 476
    2.5. DINAMIČKA DODJELA MEMORIJE.................................. 488
    2.6. POVIJEST I BIBLIOGRAFIJA..................................................... 512

    ODGOVORI NA VJEŽBE............................................. ..... 521

    DODATAK A. TABLICE VRIJEDNOSTI NEKIH KONSTANTI.................................. 683
    A.I. Osnovne konstante (decimalne) ............................................. ..... 683
    A.2. Osnovne konstante (oktalne) .................................... 684
    A.Z. Značenja harmonijskih brojeva, Bernoullijevih brojeva i Fibonaccijevih brojeva...... 685

    DODATAK B. OSNOVNE NOTACIJE.................................................. ....... 687

    KAZALO PREDMETA................................................. ............. 692

    27. prosinca 2011. u 13:32

    Umijeće programiranja?

    • Programiranje

    Volim čitati članke o programiranju koji nemaju niti jednu liniju koda. Takvi članci su izvrsni za razvijanje “u dubinu” i često daju razlog da se davno postavljene stvari pogledaju iz drugog kuta. Stoga sam, uz rizik da navučem gnjev određenog dijela javnosti na svoju ionako zakržljalu karmu, ipak odlučio objaviti ovaj članak, u nadi da će nekome dati ne samo povoda za razmišljanje, već i pomoći da se zauzme svjež pogled na njihove aktivnosti.

    Početak

    Dogodilo se da su programeri na trenutnom radnom mjestu prepušteni sami sebi. To je, naravno, kodiraju za dobrobit poduzeća, ali potpuno nekontrolirano, do točke nepostojanja banalnog testera. Projektni zadatak, čak i za “teške” programe, rijetko prelazi opseg od tri A4 lista (od kojih je jedan potpis svih uključenih).

    Pozivi vezani uz probleme sa softverom šalju se izravno programerima. Od kada je sve ovo počelo.

    Primijetio sam da je broj poziva mom kolegi (osobi koja radi po svojoj specijalnosti i na ovom položaju nekoliko godina dulje od mene) za red veličine (bez pretjerivanja) veći od broja poziva u vezi mog softvera . U isto vrijeme, pozivi su obično “teški”. Rasprostranjenost i radni intenzitet naših proizvoda približno su isti.

    Tijekom razgovora zainteresirao sam se za stavove svojih kolega o programiranju, nakon čega sam pogledao izvorni kodovi neki programi, i sve je došlo na svoje mjesto.

    Opus o kreativnim ličnostima

    Iz raznih osobnih i poslovnih razloga komuniciram s kreativnim ljudima. To su uglavnom glazbenici i umjetnici raznih žanrova. Često ih posjećujem u raznim sredinama - od njihovih staništa do trgovina i kafića.

    Takvi ljudi kod kuće obično imaju kaos i kreativni nered - od farbane sofe i otrcanih zidova do užasnih kućanskih aparata i posuđa.

    Radnje takvih ljudi imaju određeni vektor, ali njegovi parametri nisu određeni brojevima s pomičnim zarezom, već smjerom jug-jugozapad. To se ne odnosi samo na odlazak u trgovinu (kupiti nešto s popisa kod takvih ljudi jednostavno je nerealno), već na sve općenito, uključujući kreativnost.

    Radeći na djelu, umjetnik/glazbenik obično polazi upravo od tog “jugo-jugozapadnog vektora” - od određenog raspoloženja, koncepta (interno rođenog ili izdanog od strane naručitelja, to je u u ovom slučaju nije toliko važno). Krajnji rezultat se u većini slučajeva čini vrlo nejasnim. Iskreno radi, napominjemo da je ovo lavovski udio u užitku kreativnosti - raditi kako se radi. Ovo je, u biti, pokušaj "izražavanja sebe".

    Kreativni programeri

    Vratimo se razgovoru o programerima. Tijekom razgovora postalo je jasno da neke kolege, ne bez ponosa, za sebe govore kao o predstavnicima “kreativne profesije”. U isto vrijeme, oni stvarno koriste kreativan pristup ("jug-jugo-zapad vektor") s praktičnim cijeli set atributi. Kao rezultat toga pojavljuju se moduli potpuno čudne povezanosti, klase s hijerarhijom “evo ja ću napraviti ovakvu figuru”, metode se magično dijele na “zanimljive” (dobro razvijene, s jasnim rukovanjem greškama - poput implementacije šifriranje i mrežni protokoli) i “nezanimljivo” (kilometarske liste izvoza podataka, s puno copy-pastea).

    Rukovanje pogreškama se radi kako se ispostavilo - ovdje provjeravamo povratne vrijednosti, au sljedećoj datoteci imamo mehanizme za rukovanje iznimkama. Ovdje koristimo pametne pokazivače, tamo radimo izravno. I još hrpa takvih stvari.

    Kao rezultat slična djela Rezultat je proizvod koji se ponaša potpuno nepredvidivo. Glavni problem jednog od naših programera je ispravljanje grešaka u nova verzija stalno uključuje pojavu novih pogrešaka u već naizgled otklonjenim modulima, a već je nerealno spriječiti to bez potpunog ponovnog pisanja svega. Vrlo je teško održavati takav proizvod - usavršavanje najosnovnijih točaka zahtijeva dugotrajnu meditaciju na kodu u pokušaju razumijevanja kako to učiniti tako da se sve ne uruši, a po mogućnosti bez kopiranja i lijepljenja postojeće "kreativnosti" ”.

    Moral ove priče

    Programiranje nije izražavanje samog sebe, ma što romantično nastrojeni juniori tvrdili. Dobar kod- jasno je dizajniran i izgrađen prema određena pravila dokument. Koliko god to nekima bilo tužno, programer je robot koji, ovisno o kvaliteti uputa koje mu se daju, s različitom učinkovitošću objašnjava drugom robotu što te proteinske mase žele od njega. U programiranju nema mjesta kreativnosti - od imenovanja datoteka i varijabli do uzoraka, sve je podređeno jasnoj logici i ima maksimalnu učinkovitost. Kao rezultat toga, za ovu učinkovitost programer dobiva ne samo novac poslodavca, već i mir pri održavanju proizvoda i osjećaj kontrole nad situacijom u slučaju problema s programom.

    Čak i ako programer ne dobije dobro napisanu tehničku specifikaciju, mora si dati jasan uvid u to što će se na kraju dogoditi. Ako postoji mogućnost da se napisano mora dubinski modificirati, tim bolje - zadaci pisanja softvera s mogućnošću jake modifikacije vrlo su uzbudljivi i nimalo jednostavni.

    Pa, na kraju, fraza Stevea McConnella - "Pišite kod kao da bi ga pratio nasilni psihopat koji zna gdje živite." A psihopat će se vjerojatno jako naljutiti ako razbije glavu zbog nelogičnosti i nesređenosti.

    Sažetak knjige Umijeće programiranja, svesci 1-3:
    Mnogi ljudi znaju da programiranje nije samo složen mentalni rad, već i kreativan proces. Autor ove knjige je Donald Erwin Knuth, profesor na Sveučilištu Stanford, koji je autor mnogih knjiga o matematici i računalnim temama. Znanstvenik je postao poznat zahvaljujući svom poznatom djelu "Umijeće programiranja", čiji je prvi tom objavljen prije više od 20 godina. Donald Knuth u svojoj knjizi objašnjava i analizira osnovne algoritme koji se koriste u programiranju. Ovo je treće izdanje poznate serije knjiga "Umijeće programiranja".

    Ovo izdanje sadrži 3 sveska knjige “Umijeće programiranja”:

    Umijeće programiranja. Svezak 1. Osnovni algoritmi.
    Umijeće programiranja. Svezak 2. Polunumerički algoritmi.
    Umijeće programiranja. Svezak 3. Razvrstavanje i pretraživanje.

    Prvi svezak serije knjiga Umijeće programiranja počinje opisom osnovnih koncepata i metoda programiranja. Autor se potom usredotočuje na ispitivanje informacijskih struktura—predstavljanje informacija unutar računala, strukturne odnose između podatkovnih elemenata i kako učinkovit rad sa njima. Dani su primjeri elementarnih primjena metoda simulacije, simboličkog računanja, numeričkih metoda i metoda programskog inženjerstva. U usporedbi s prethodnim izdanjem, dodani su deseci jednostavnih, ali u isto vrijeme vrlo važnih algoritama. U skladu s moderni trendovi Matematički uvodni dio također je značajno revidiran.

    Drugi svezak predstavlja teoriju izvedenih numeričkih algoritama. Zasebna poglavlja uključuju opis procesa generiranja slučajnih brojeva i načina rada s njima u računalnom okruženju. Autor ispituje temeljne koncepte teorije vjerojatnosti u primjeni na računalni sustavi, pružajući čitatelju gotove algoritme računalni programi. Zaslužuje posebnu pažnju nova metoda autor generiranja slučajnih brojeva i opisa algoritama za izračunavanje formalnih potencijskih redova.

    Treće izdanje trećeg sveska sadrži puni pregled klasični algoritmi sortiranja i pretraživanja. Informacije koje predstavlja nadopunjuju raspravu o strukturama podataka u 1. svesku. Autor ispituje principe konstruiranja velikih i malih baza podataka te unutarnje i vanjske memorije. Knjiga predstavlja izbor pažljivo testiranih računalnih algoritama i daje analizu njihove učinkovitosti. Osim toga, poseban odjeljak posvećen je optimalnim metodama sortiranja i opisu nove teorije permutacije i univerzalnog raspršivanja.

    Ime: Umjetnost programiranja - svezak 1.

    Prvi svezak serije knjiga Umijeće programiranja počinje opisom osnovnih koncepata i metoda programiranja. Autor zatim prelazi na ispitivanje informacijskih struktura, reprezentacije informacija unutar računala, strukturnih odnosa između podatkovnih elemenata i načina za učinkovit rad s njima. Dati su primjeri elementarnih primjena metoda simulacije, simboličkih proračuna, numeričkih metoda i metoda razvoja softvera. U usporedbi s prethodnim izdanjem, dodani su deseci jednostavnih, ali u isto vrijeme vrlo važnih algoritama. Sukladno suvremenim pravcima istraživanja, dio matematičkog uvoda značajno je revidiran.

    Svaka knjiga ima svoju sudbinu. Neki se pojavljuju neprimjetno i jednako tako neprimjetno nestaju u struji vremena, prekrivajući se prašinom na policama knjižnica. Drugi su traženi određeno vrijeme u uskom krugu stručnjaka, dok ih ne zamijene nove referentne knjige. Drugi pak, izdižući se iznad vremena, snažno utječu na tehnološki razvoj društva. Nema toliko knjiga koje spadaju u potonju kategoriju. Njihova pojava na svijetu uvijek je praznik. Godine prolaze, tehnologije se mijenjaju, ali nove generacije iznova čitaju njihove stranice sa stalnim zanimanjem. Višetomno djelo koje čitatelju nudi poznati američki znanstvenik Donald Erwin Knuth, “Umijeće programiranja”, pripada upravo takvim knjigama.
    Kakav je uspjeh Umijeća programiranja D. E. Knuta:
    Prvo, ova je knjiga izvrstan udžbenik o dizajnu i analizi računalnih algoritama. Njegovi dijelovi mogu se uključiti u mnoge sveučilišne tečajeve o tehnologijama programiranja, teoriji algoritama i diskretnoj matematici. Knjigu mogu čitati i srednjoškolci koji su upoznati s osnovama programiranja. Kao glavni jezik za snimanje algoritama autor je odabrao strojni naredbeni jezik hipotetskog univerzalnog računala MIX. To vam omogućuje izradu optimalnih programa uzimajući u obzir karakteristike računala. Prijenos MIX programa na stvarna računala ili njihovo ponovno pisanje na jezicima visoke razine nije osobito teško. Logika programa se gotovo uvijek objašnjava korištenjem jednostavnih blok dijagrama.
    Drugo, pažljivo odabrani materijal uključen u knjigu uključuje glavne temeljne klase algoritama, koji se u ovom ili onom obliku najčešće nalaze u programerskoj praksi.
    Treće, važan čimbenik uspjeha knjige D. E. Knuta je enciklopedijska priroda prezentacije. Profesor Knuth ima jedinstvenu sposobnost pratiti problem od njegove povijesne pozadine do trenutnog stanja. Brojna pozivanja na djela starih majstora (sve do antike), smještena u suvremeni kontekst, kod čitatelja stvaraju poseban osjećaj uključenosti u povijesni razvoj znanstvenih ideja i metoda.

    Besplatno preuzimanje e-knjiga V prikladan format, gledajte i čitajte:
    Preuzmite knjigu Umijeće programiranja - Svezak 1 - Knut D. E. - fileskachat.com, brzo i besplatno preuzimanje.

    Preuzmite djvu
    U nastavku možete kupiti ovu knjigu po najpovoljnijoj cijeni uz popust s dostavom u cijeloj Rusiji.

Najbolji članci na temu