Գրագետ ծրագրավորում

Հեղինակ՝ Դոնալդ Է․ Կնուտ (Սթանֆորդ, Կալիֆորնիա․ Լեզվի և տեղեկատվության ուսուցման կենտրոն, 1992), xvi+368 էջ։
(ԼՏՈՒԿ Դասախոսական ծանոթագրություններ, թիվ 27)
ԳՄՍՀ՝ 0-937073-80-6
ճապոներեն թարգմանությունը՝ Մակոտո Արիսավայի, Bungeiteki ծրագրավորում (Տոկիո․ ASCII Կորպորացիա, 1994), 463 էջ։

Այս գիրքն առաջինն է ութ հատորների շարքում, որոնք ներառում են իմ հրապարակած աշխատանքների արխիվային ձևերը նոր նյութերի հետ միասին։

Գրագետ ծրագրավորումը մեթոդոլոգիա է, որը միավորում է ծրագրավորման որևէ լեզու փաստաթղթային որևէ լեզվի հետ՝ դրանով իսկ դարձնելով ծրագրերն ավելի հուսալի, ավելի շարժական, ավելի հեշտ պահպանվող և, թերևս, ավելի հաճելի գրելու համար, քան այն ծրագրերը, որոնք գրված են միայն բարձր մակարդակի լեզվով։ Հիմնական գաղափարն է վերաբերվել ծրագրին որպես գրական աշխատանքի՝ հասցեագրված մարդկանց, այլ ոչ թե ինչ-որ համակարգչի։ Ծրագիրը դիտվում է նաև որպես հիպերտեքստային փաստաթուղթ՝ ավելի շուտ Համաշխարհային սարդոստայնի նման (World Wide Web, WWW)։ (Իսկապես, ես օգտագործում էի «Web» բառն այս նպատակով դեռ շատ վաղուց, մինչև CERN-ը կխլեր այն։) Այս գիրքն էսսեների ժողովածու է, որը ներառում է իմ վաղ աշխատությունները հարակից թեմաների վերաբերյալ, ինչպիսին է կառուցվածքային ծրագրավորումը, ինչպես նաև «Համակարգչային ամսագրում» հոդվածը, որը ինքնին տվեց Գրագետ ծրագրավորման մեկնարկը։ Հոդվածները վերանայվել են, ընդարձակվել և հասցվել մինչև մեր օրերը։

Բովանդակության ցանկ․

  1. Համակարգչային ծրագրավորումը որպես արվեստ [P68]
  2. Կառուցվածքային ծրագրավորում՝ «go to» հայտարարություններով [P67]
  3. Կառուցվածքային ծրագիր՝ գեներացնելու համար բոլոր տոպոլոգիական դասավորումները [P65]
  4. Գրագետ ծրագրավորում [P109]
  5. Ծրագրավորման մարգարիտները․ Սեմպլիրացում [Q78]
  6. Ծրագրավորման մարգարիտները, շարունակություն․ Ընդհանուր բառեր [Q79]
  7. Ինչպե՞ս WEB կարդալ [«TeX․ Ծրագիրը»-ից]
  8. TeX և METAFONT ծրագրերի համար հատվածներ [«Համակարգիչները և գրաշարությունը»-ից,  հատորներ Բ և Դ]
  9. Մաթեմատիկական գրություն [«Մաթեմատիկական գրություն»-ից]
  10. TeX-ի սխալները [P124]
  11. TeX-ի սխալների տեղեկամատյանը [P124, նոր նյութի հետ]
  12. CWEB-ի օրինակ [նախկինում երբեք չի տպագրվել]
  13. Հետագա ընթերցանություն․ Գրագետ ծրագրավորման համապարփակ մատենագրություն [նախկինում երբեք չի տպագրվել]

(Այս ցանկում նշված համարները, ինչպես P68-ը և Q78-ը, վերաբերում են իմ հրապարակումների ցանկի համապատասխան աշխատություններին։)

Հասանելի են ինչպես հրատարակչի (CSLI), այնպես և դիստրիբյուտորի (Չիկագոյի Մամուլի համալսարան) կողմից:

1992 թ․ այս գիրքն ստացավ Արտադրողականության մրցանակ «Համակարգչային լեզու» ("Computer Language" magazine) ամսագրի կողմից, որը շնորհվում է այն արտադրանքներին, որոնք նշանակալիորեն մեծացնում են ծրագրավորողների արտադրողականությունը։

Գրագետ ծրագրավորման համառոտ նկարագրությունը Քրիս Լիի կողմից։

Մեթ Ֆարրը գովազդեց Գրագետ ծրագրավորումը, երբ 2013 թ․ ստացավ իր Օսկարը Գրեգ Համֆրեյի և Փաթ Հանրահանի հետ։

Վրիպակներ

Այս գրքի առաջին հրատարակության մեջ եղած վրիպակների շտկումների ցանկի համար դուք կարող եք ներբեռնել կամ վրիպակների ֆայլը հասարակ TeX ձևաչափով (8812 բայթ), կամ վրիպակների ֆայլը DVI ձևաչափով (10816 բայթ), կամ էլ վրիպակների ֆայլը խտացված PostScript ձևաչափով (34478 բայթ)։ Վերջին ֆայլերը գեներացվել են TeX ֆայլի կողմից և վերջին անգամ նորացվել 2004 թ․ հունիսի 12-ին։ Առաջին երկու հրատարակություններում եղած վրիպակների մեծ մասը շտկված են երրորդ հրատարակությունում, սակայն մի քանի աննշան վրիպակներ են գտնվել չորրորդ հրատարակության (1998 թ․), հինգերորդ հրատարակության (2008 թ․) կամ վեցերորդ հրատարակության (2013 թ․) սրատես ընթերցողների կողմից:

էջ xiii, տող 8
փոխել «Eisenstadt»-ը «Eisenstat»-ի
էջ 19, տող 11
փոխել «1904»-ը «1903»-ի
էջ 26, տող 8 ներքևից
փոխել «+6»-ը «+1»-ի
էջ 26, տող 5 ներքևից
փոխել «11n+21»-ը «12n+19»-ի
էջ 26, տող 2 ներքևից
փոխել «21%»-ը «14%»-ի
էջ 39, տող 14 ներքևից
փոխել «Eisenstadt»-ը «Eisenstat»-ի (2 անգամ)
էջ 44, տող 5
փոխել «step 1 until»-ը «step 1 until»-ի
էջ 46, տող 1
փոխել «Eisenstadt»-ը «Eisenstat»-ի
էջ 47, տող 13 ներքևից
փոխել «a repeat loop»-ը «a repeat loop»-ի
էջ 50, տող 7
փոխել «repeat:»-ը «repeat;»-ի
էջեր 51, 52, 53, 53, 56, 57
փոխել «integer t; value t;»-ը «value t; integer t;»-ի
էջ 57, տող 11 ներքևից
փոխել «$n>0$»-ը «$n≥0$»-ի
էջ 58, տող 5
փոխել «average, will»-ը «average will»-ի
էջ 60, տողեր 3, 4, 5
փոխել «all the elements … greater than -ը «only elements that are less than or equal to some given value v; the right part A[j+1]…A[n] will contain only elements that are greater than or equal to v»-ի
էջ 67, տող 11
փոխել «j;»-ը «j:»-ի
էջ 67, տող 14
փոխել «1;»-ը «1; fi;»-ի
էջ 74, տող 24
փոխել «j;»-ը «j:»-ի
էջ 80, փոխարինել ներքևի տողը 6 տողերով․
not found: $m\gets\r1$ 2 $a$
     $\r4\gets1$ 1 $a$
     to update$ 1 $a$
found: $\r4\gets B[\r1]$ 2 $1-a$
     $\r4\gets\r4+1$ 1 $1-a$
update: $B[\r1]\gets\r4$ 2 1
էջ 86, տող 10
փոխել «Eisenstadt»-ը «Eisenstat»-ի
էջ 92, տող 20
փոխել «$\ne\{x_1,\ldots,x_k\}$ which have»-ը «$\notin\{x_1,\ldots,x_k}$ that have»-ի
էջ 92, տող 10 ներքևից
փոխել «integer k; value k;»-ը «value k; integer k;»-ի
էջ 93, տող 18 ներքևից
փոխել «$q=y_{r-1},y_{r-2},\ldots,y_1$»-ը «$q=y_{r-1}$, $y_{r-2}$, \dots, $y_1$»-ի
էջ 94, տող 11
փոխել «[1 : n]»-ը «[0 : n]»-ի (2 անգամ)
էջ 135, հղում [10]
այս հղումը պետք է լինի նույնը, ինչ հղում [61]-ը էջ 86-ի վրա
էջ 159, տող 14
ավելացնել «count[0] ← 0;» արտահայտությունը (համաձայնեցնելով էջ 164-ի հետ)
էջ 195, 111-րդ և 117-րդ բաժինների միջև
դնել բազմակետ (երեք ուղղահայաց կետեր)՝ ինչպես 16-րդ և 95-րդ բաժինների միջև էջ 186-ի վրա
էջ 276, տող 6 ներքևից
փոխել «class L»-ը «class L or class R»-ի
էջ 280, տող 13 ներքևից
փոխել «97»-ը «65»-ի
էջ 288, տող 2 ներքևից
փոխել «$\theta_2$»-ը «$\theta_0$»-ի
էջեր 294—338
(Մի քանի մուտքեր այս տեղեկամատյանում խմբագրվել են մյուսների հետ կապված ոճի հետևողականության համար)
էջ 349, տողեր 9 և 10
փոխել «Praktis- che»-ը «Prak- tische»-ի
էջ 354, տող 8 ներքևից
փոխել «labrea»-ը «ftp.cs»-ի
էջ 355, տող 12
փոխել «labrea»-ը «ftp.cs»-ի
էջ 358, նոր կետ մատենագիտության համար
Կլաուս Թուլլ, «PubliC \TeX-ի վիրտուալ հիշողության կառավարում», {\sl TUGboat\/ \bf10},1 (ապրիլ 1989), 15—22։
էջ 361, ձախ սյունակ
փոխել «Macdonald»-ը «MacDonald»-ի Coxeter մուտքում
էջ 361, ձախ սյունակ
փոխել «x»-ը «xii»-ի CWEB մուտքում
էջ 361, աջ սյունակ
փոխել «Eisenstadt, Stanley C.»-ը «Eisenstat, Stanley Charles»-ի
էջ 362, ձախ սյունակ
Գութ, Ալան Հարվեյ, 337։
էջ 362, աջ սյունակ
փոխել «Nicolass»-ը «Nicolaas»-ի Habermann-ի մուտքում
էջ 363, աջ սյունակ
ավելացնել էջ 322-ը Ֆրանկ Լիանգի համար հղումներին
էջ 364, ձախ սյունակ
փոխել «Marneffe, Pierre-Arnoul de»-ը «Marneffe, Pierre-Arnoul Frédéric Guy Donat de»-ի
էջ 366, ձախ սյունակ
փոխել «Rustin, Randall»-ը «Rustin, Randall Dennis»-ի
էջ 366, ձախ սյունակ
Սքերլիս, Ուիլյամ Լուիս, 322։
էջ 367, ձախ սյունակ
փոխել «Thull, Klaus, 357.»-ը «Thull, Klaus, 358.»-ի
էջ 368, ձախ սյունակ
փոխել «139»-ը «xii, 139»-ի WEB-ի մուտքում

Բացի այդ, մի քանի վրիպակներ են, ցավոք, ներկայացվել 2013 թ․-ի հրատարակության կազմի վրա, այն է․ «deer»-ը պետք է լինի «decr», և պատճենի մի քանի այլ  տարրեր պետք է կամ շեղագրվեն, կամ հանվեն շեղագրումից։

Հուսամ՝ 2013 թ․-ի տարբերակը վրիպակներից զերծ է։ Բայց (ավա՜ղ) այդպես չէ։ Այնուամենայնիվ՝ ես մեծ երախտագիտությամբ 0x$1.00 ($2.56) կավանդադնեմ այն առաջին մարդու հաշվեհամարին, ով կգտնի և կհաղորդի ցանկացած բան, որը սխալ է մնում տեխնիկապես, պատմական, տպագրական կամ քաղաքական առումով։ Խնդրում եմ՝ ուղարկեք առաջարկվող ուղղումները knuth-bug@cs.stanford.edu էլ․ հասցեին կամ փոստային նամակ ուղարկեք Պրոֆ․ Դ․ Կնուտին հետևյալ հասցեով՝ Համակարգչային գիտությունների բաժին, Gates Building 4B, Սթանֆորդի համալսարան, Սթանֆորդ, Կալիֆորնիա 94305-9045, ԱՄՆ։  Ամեն դեպքում, խնդրում եմ, գրեք նաև ձեր փոստի հասցեն, որպեսզի ես կարողանամ ավանդադրման պաշտոնական հավաստագիրն ուղարկել՝ ի նշան երախտագիտության ցանկացած բարելավման համար, որին դուք նպաստում եք։

Հնարավոր է, ես չկարողանամ կարդալ ձեր հաղորդագրությունը շատ ամիսներ շարունակ, քանի որ ես ինտենսիվորեն աշխատում եմ «Համակարգչային ծրագրավորման արվեստը» աշխատության վրա։ Այնուամենայնիվ՝ խոստանում եմ, որ ժամանակի ընթացքում կպատասխանեմ ձեզ։

ԷԼԵԿՏՐՈՆԱՅԻՆ ՆԱՄԱԿ ՉՈՒՂԱՐԿԵԼ KNUTH-BUG-ԻՆ՝ ԲԱՑԱՌՈՒԹՅԱՄԲ ՄԻԱՅՆ ԳՐՔԵՐՈՒՄ ԱՌԿԱ ՎՐԻՊԱԿՆԵՐԻ ՄԱՍԻՆ ՀԱՂՈՐԴԵԼԻՍ։ Իսկ եթե դուք վրիպակի մասին հաղորդում եք էլ․ փոստով, խնդրում եմ, մի՛ կցեք որևէ բան․ ձեր հաղորդագրութունՆ ընթերցելի կլինի brand-X օպերացիոն համակարգերում։

source: http://www-cs-faculty.stanford.edu/~knuth/lp.html