noe oshchushchenie, chto vydayushchiesya proekty sozdayutsya vydayushchimisya arhitektorami. Vo vnov' voznikshej kul'ture est' vozmozhnost' voznagrazhdat' "zvezd" sootvetstvenno ih vkladu. V klassicheskoj industrii social'naya politika firm i ih principy oplaty truda vsegda eto zatrudnyali. Neudivitel'no poetomu, chto mnogie zvezdy novogo pokoleniya byli vtyanuty v orbitu paketnoj industrii. Pokupaj i sozdavaj: korobochnye produkty v kachestve komponentov Radikal'no uluchshit' ustojchivost' programmnyh produktov i proizvoditel'nost' truda pri ih sozdanii mozhno, lish' podnyavshis' na odin uroven' i izgotavlivaya programmy iz modulej ili ob®ektov. Osobenno mnogoobeshchayushchej tendenciej stanovitsya ispol'zovanie rynochnyh paketov v kachestve platform, na kotoryh sozdayutsya bolee bogatye i specializirovannye produkty. Sistema upravleniya dvizheniem gruzovikov sozdaetsya s pomoshch'yu korobochnoj bazy dannyh i kommunikacionnogo paketa, takzhe kak i informacionnaya sistema dlya studentov. Ob®yavleniya v zhurnalah predlagayut sotni stekov dlya Hypercard, specializirovannyh shablonov dlya Excel, desyatki special'nyh funkcij na Pascal dlya MiniCad ili funkcij na AutoLisp dlya AutoCad. Metaprogrammirovanie. Steki dlya Hypercard, specializirovannye shablony dlya Excel, funkcii dlya MiniCad chasto nazyvayut metaprogrammirovaniem, sozdaniem novogo sloya, prisposablivayushchego funkcii k nuzhdam opredelennoj gruppy pol'zovatelej paketa. Ideya metaprogrammirovaniya ne nova, ona vernulas' i poluchila svoe nazvanie. V nachale 60-h mnogie proizvoditeli komp'yuterov i vychislitel'nye centry bol'shih informacionno-upravlyayushchih sistem obrazovyvali nebol'shie gruppy specialistov, sozdavavshih celye yazyki prikladnogo programmirovaniya s pomoshch'yu makrosov, napisannyh na assemblere. V vychislitel'nom centre Eastman Kodak byl sozdan yazyk prikladnogo programmirovaniya na baze makroassemblera dlya IBM 7080. Analogichno, v telekommunikacionnoj programme Queued Telecommunications Access Method dlya IBM OS/360 mozhno bylo na mnogih stranicah koda, napisannogo predpolozhitel'no na yazyke makroassemblera, ne najti ni odnoj komandy mashinnogo urovnya. Sejchas bloki, sozdavaemye metaprogrammistom, znachitel'no bol'she, chem togdashnie makroopredeleniya. Takoe razvitie vtorichnogo rynka ochen' obnadezhivaet: poka my zhdali vozniknoveniya aktivnogo rynka klassov C++, nezametno voznik rynok metaprogramm mnogokratnogo ispol'zovaniya. |to dejstvitel'no nastuplenie na sushchnost'. Poskol'ku na srednego programmista informacionno-upravlyayushchih sistem fenomen razrabotki na osnove paketov eshche ne okazal vozdejstviya, on poka ne ochen' zamechaem programmnoj inzheneriej. Tem ne menee, eto napravlenie budet bystro razvivat'sya, poskol'ku zatragivaet sushchnost' modelirovaniya konceptual'nyh konstrukcij. Korobochnyj paket predostavlyaet bol'shoj funkcional'nyj modul' so slozhnym, no tochnym interfejsom, a ego vnutrennyuyu konceptual'nuyu strukturu vovse ne trebuetsya proektirovat'. Programmnye produkty s funkciyami vysokogo urovnya, takie kak Excel i 4th Dimension, dejstvitel'no yavlyayutsya bol'shimi modulyami, no sluzhat ponyatnymi, dokumentirovannymi, otlazhennymi modulyami, s pomoshch'yu kotoryh mozhno sozdavat' zakaznye sistemy. Razrabotchiki prilozhenij sleduyushchego urovnya poluchayut bogatstvo funkcij, sokrashchenie vremeni razrabotki, otlazhennye komponenty, uluchshennuyu dokumentaciyu i rezko snizhennuyu cenu. Slozhnost', konechno, v tom, chto korobochnye pakety razrabotany kak samostoyatel'nye ob®ekty, funkcii i interfejsy kotoryh metaprogrammisty ne mogut izmenit'. Krome togo, bolee sushchestvenno to, chto razrabotchiki korobochnyh paketov, kazhetsya, ne slishkom stremyatsya sdelat' svoi produkty prigodnymi v kachestve modulej bolee krupnyh sistem. Dumayu, chto takoe ponimanie neverno, i sushchestvuet neudovletvorennyj rynok dlya paketov, sposobstvuyushchih ispol'zovaniyu metaprogrammirovaniya. Tak chto zhe trebuetsya? Mozhno vydelit' chetyre urovnya pol'zovatelej korobochnyh produktov: - Pol'zovatel' kak takovoj, prosto ispol'zuyushchij prilozhenie i udovletvorennyj funkciyami i interfejsom, predostavlennymi razrabotchikami. - Metaprogrammist, stroyashchij shablony i funkcii poverh otdel'nogo prilozheniya s ispol'zovaniem imeyushchihsya interfejsov, glavnym obrazom, dlya obespecheniya truda konechnogo pol'zovatelya. - Razrabotchik vneshnih funkcij, vvodyashchij v prilozhenie dopolnitel'nye funkcii. |to, po suti, novye primitivy yazyka prikladnogo programmirovaniya, obrashchayushchiesya k otdel'nym modulyam, napisannym na yazyke obshchego naznacheniya. Neobhodima vozmozhnost' interfejsa etih novyh funkcij s prilozheniem cherez perehvatyvaemye komandy, obratnye vyzovy ili peregruzhaemye funkcii. - Metaprogrammist, ispol'zuyushchij odno i, v osobennosti, neskol'ko prilozhenij v kachestve komponentov bolee krupnoj sistemy. |to pol'zovatel', ch'i nuzhdy segodnya slabo udovletvoryayutsya. |to tot vid ispol'zovaniya, kotoryj obeshchaet naibol'shij rost proizvoditel'nosti pri sozdanii novyh prilozhenij. Dlya etogo poslednego tipa pol'zovatelej korobochnyj produkt dolzhen imet' dopolnitel'nyj dokumentirovannyj interfejs - interfejs metaprogrammirovaniya. On dolzhen predostavlyat' neskol'ko vozmozhnostej. Prezhde vsego, metaprogramma dolzhna upravlyat' ansamblem prilozhenij, nesmotrya na to, chto kazhdoe prilozhenie, kak pravilo, schitaet, chto upravlyaet samim soboj. |tot ansambl' dolzhen upravlyat' interfejsom pol'zovatelya, hotya obychno samo prilozhenie schitaet, chto delaet eto. Ansambl' dolzhen byt' v sostoyanii vyzvat' lyubuyu funkciyu prilozheniya, kak esli by ego komandnaya stroka ishodila ot pol'zovatelya. Vyhodnye dannyh prilozheniya dolzhny peredavat'sya emu, a ne na ekran, prichem v vide logicheskih blokov podhodyashchih tipov dannyh, a ne tekstovoj stroki, kotoruyu nuzhno otobrazit'. V nekotoryh prilozheniyah, naprimer, FoxPro, est' dyrochki, pozvolyayushchie peredat' komandnuyu stroku, no vozvrashchayutsya skudnye i nerazobrannye dannye. Takaya dyrochka - zaplatka na skoruyu ruku, v to vremya kak trebuetsya obshchee prorabotannoe reshenie. Bol'shie vozmozhnosti dalo by nalichie yazyka scenariev dlya upravleniya vzaimodejstviem prilozhenij, vhodyashchih v ansambl'. Takogo roda funkcii vpervye predostavila Unix s pomoshch'yu kanalov i standarta fajlov v formate ASCII-strok. Segodnya neplohim resheniem yavlyaetsya AppleScript. Sostoyanie i budushchee programmnoj inzhenerii Odnazhdy ya poprosil Dzhima Ferrella (Jim Ferrell), predsedatelya himiko- tehnologicheskogo fakul'teta universiteta shtata Severnaya Karolina povedat' o razvitii himicheskih tehnologij vne svyazi s himiej, na chto on ekspromtom vydal mne zamechatel'nyj rasskaz, prodolzhavshijsya chas, nachinaya s sushchestvovavshih s antichnyh vremen razlichnyh proizvodstvennyh processov dlya mnogih produktov - ot stali do hleba i parfyumernyh izdelij. On rasskazal, kak professor Artur D. Littl (Arthur D. Little) v 1918 godu osnoval v MTI fakul'tet prikladnoj himii dlya issledovaniya, razrabotki i obucheniya obshchim fundamental'nym tehnologiyam vseh processov. Snachala byli prakticheskie pravila, zatem empiricheskie nomogrammy, zatem recepty proektirovaniya otdel'nyh komponentov, zatem matematicheskie modeli rasprostraneniya tepla, mass, kolichestva dvizheniya v otdel'nyh emkostyah. Po hodu rasskaza Ferrella ya porazilsya obiliyu parallelej mezhdu razrabotkoj himicheskih tehnologij i razvitiem programmnyh tehnologij, proishodivshim pochti polveka spustya. Parnas utverzhdaet, chto ya voobshche pishu o "programmnoj inzhenerii". On protivopostavlyaet programmotehniku kak nauku elektrotehniku i schitaet, chto nazyvat' nashe zanyatie inzheneriej samonadeyanno. Vozmozhno, on prav v tom, chto eta oblast' nikogda ne stanet inzhenernoj disciplinoj s takoj tochnoj i vseohvatyvayushchej osnovoj, kakaya est' u elektrotehniki. V konce koncov, programmnaya inzheneriya, podobno himicheskoj tehnologii, zanyata nelinejnymi zadachami uvelicheniya masshtabov do promyshlennyh processov i, podobno organizacii promyshlennogo proizvodstva, postoyanno stavitsya v tupik slozhnostyami chelovecheskogo povedeniya. Tem ne menee harakter i vremennye ramki razvitiya himicheskoj tehnologii privodyat menya k mysli, chto programmnaya inzheneriya v vozraste 27 let ne stol'ko beznadezhna, skol'ko yavlyaetsya nezreloj, kakoj himicheskaya promyshlennost' byla v 1945 godu. Lish' posle Vtoroj mirovoj vojny himiki-tehnologi real'no obratilis' k vzaimosvyazannym potochnym sistemam s zamknutym ciklom. Segodnya harakternye zadachi programmnoj inzhenerii zvuchat tochno tak zhe, kak oni izlozheny v glave 1: - Kak proektirovat' i stroit' programmy, obrazuyushchie sistemy. - Kak proektirovat' i stroit' programmy i sistemy, yavlyayushchiesya nadezhnym, otlazhennym, dokumentirovannym i soprovozhdaemym produktom. - Kak osushchestvlyat' intellektual'nyj kontrol' v usloviyah bol'shoj slozhnosti. V smolyanoj yame programmnoj inzhenerii eshche dolgo pridetsya vyaznut'. Mozhno ozhidat', chto chelovechestvo prodolzhit opyty s sistemami kak vnutri, tak i za predelami nashih vozmozhnostej. Programmnye sistemy yavlyayutsya, vozmozhno, naibolee zaputannymi chelovecheskimi tvoreniyami. |to slozhnoe remeslo trebuet nepreryvno razvivat' etu disciplinu, uchit'sya sozdavat' iz bolee krupnyh blokov, nailuchshim obrazom ispol'zovat' novye instrumenty, staratel'no osvaivat' oprobovannye metody upravleniya inzheneriej, shchedro ispol'zovat' zdravyj smysl i smirenno soznavat' svoyu podverzhennost' oshibkam i ogranichennost' nashih vozmozhnostej. |pilog Pyat'desyat let udivleniya, voshishcheniya i radostiV moej pamyati vse eshche zhivy udivlenie i vostorg, s kotorym ya - mne togda bylo 13 let - chital otchet ot 7 avgusta 1944 goda ob osvyashchenii komp'yutera Mark I, arhitektorom kotorogo byl Govard Ajken (Howard Aiken), a proektirovshchikami - inzhenery Kler Lejk (Clair D. Lake), Bendzhamin Durfi (B. M. Durfee) i Frensis Gamil'ton (F. E. Hamilton). Takoj zhe vyzyvayushchej oshchushchenie chuda byla stat'ya Vannevara Busha (Vannevar Bush) "That We May Think" v aprel'skom 1945 goda nomere "Atlantic Monthly", v kotoroj on predlozhil organizovat' znaniya v vide ogromnoj gipertekstovoj pautiny i obespechit' pol'zovatelej mashinami dlya perehodov po sushchestvuyushchim ssylkam i sozdaniya novyh associativnyh sledov. Novyj tolchok moya strast' k komp'yuteram poluchila v 1952 godu, kogda, rabotaya letom na IBM v |dinkote, shtat N'yu-Jork, ya poluchil prakticheskij opyt programmirovaniya dlya IBM 604 i formal'noe obuchenie programmirovaniyu dlya IBM 701, ih pervoj mashiny s hranimoj programmoj. Aspirantura u Ajkena i Iversona v Garvarde sdelala real'nost'yu moi mechty o professii, i ya svyazal s nej vsyu svoyu zhizn'. Nemnogim Bog daet pravo zarabatyvat' na zhizn' tem, chem oni s radost'yu zanimalis' by po sobstvennoj vole, po uvlecheniyu. YA blagodaren sud'be. Dlya cheloveka, vlyublennogo v komp'yutery, trudno bylo by pridumat' inoe vremya, kogda tak radostno bylo zhit'. Ot mehanicheskih ustrojstv do vakuumnyh lamp, tranzistorov i integral'nyh shem shlo burnoe razvitie tehnologii. Pervyj komp'yuter, na kotorom ya rabotal srazu posle vypuska iz Garvarda, byl superkomp'yuter IBM Stretch. |tot komp'yuter carstvoval nad mirom kak samyj bystryj s 1961 po 1964 gody; bylo izgotovleno 9 ekzemplyarov. Moj segodnyashnij Macintosh Powerbook ne tol'ko bystree, s bol'shej pamyat'yu i bol'shim diskom, no i v tysyachu raz deshevle (v pyat' tysyach raz deshevle s uchetom inflyacii). My byli svidetelyami togo, kak poocheredno proizoshli komp'yuternaya revolyuciya, revolyuciya elektronnyh komp'yuterov, revolyuciya minikomp'yuterov i revolyuciya mikrokomp'yuterov, v rezul'tate kazhdoj iz kotoryh komp'yuterov stanovilos' na poryadki bol'she. Oblast' svyazannyh s komp'yuterami znanij preterpela vzryv, kak i sootvetstvuyushchaya tehnologiya. Buduchi aspirantom v seredine 50-h, ya mog prochest' vse zhurnaly i trudy konferencij. YA mog ostavat'sya na sovremennom urovne vo vsej nauchnoj discipline. Segodnya zhe mne v moej intellektual'noj zhizni prihoditsya s sozhaleniem rasstavat'sya s interesami to v odnoj, to v drugoj podoblasti, poskol'ku kolichestvo dokumentov prevysilo vsyakuyu vozmozhnost' spravit'sya s nimi. Massa interesov, massa zamechatel'nyh vozmozhnostej dlya ucheby, issledovanij, razmyshlenij. CHudesnoe zatrudnenie! Ne tol'ko konca ne vidno, no i shag ne zamedlyaetsya. V budushchem nas ozhidayut mnogie radosti. Primechaniya i ssylki Glava 1 1. A. P. Ershov polagaet, chto eto ne tol'ko pechal', no otchasti i radost'. A. P. Ershov. Aesthetics and the human factor in programming // CACM. 1972. Vol. 15, N 7. July. P. 501-505 Glava 2 1. V. A. Vysockij iz Bell Telephone Laboratories schitaet, chto bol'shoj proekt mozhet vyderzhat' do 30% prirosta chisla sotrudnikov v god. Pri bol'shem uvelichenii zatrudnyaetsya i dazhe podavlyaetsya razvitie vazhnoj neformal'noj struktury i ee kommunikacionnyh svyazej, o chem govoritsya v glave 7. F. Dzh. Korbato iz MTI otmechaet, chto v dlitel'nom proekte sleduet ozhidat' ezhegodnoj smeny 20% sotrudnikov, i novye rabotniki dolzhny kak poluchit' tehnicheskuyu podgotovku, tak i vlit'sya v formal'nuyu strukturu. 2. CH. Portman iz International Computers Limited govorit: "Esli vse rabotaet i ob®edineno v sistemu, znachit, ostalos' raboty na chetyre mesyaca". Nekotorye drugie sposoby raspredeleniya grafika privedeny v stat'e: Wolverton R. W. The cost of developing large-scale software // IEEE Trans. on Computers. 1974. Vol. C-23, N 6. June. P. 615-636. 3. Risunkami 2.5-2.8 ya obyazan Dzherri Ogdinu, kotoryj, citiruya moj primer iz bolee rannej publikacii etoj glavy, znachitel'no uluchshil illyustracii. Ogdin, J. L. The Mongolian hordes versus superprogrammer // Infosystems. 1972. Dec. P. 20-23. Glava 3 1. Sackman H., Erikson W. J., Grant E. E. Exploratory experimentation studies comparing online and offline programming performance // CACM. 1968. Vol. 11, N 1. Jan. P. 3-11. 2. Mills H. Chief programmer team, principles, and procedures // IBM Federal Systems Division Report FSC 71-5108. Gaithersburg, Md., 1971. 3. Baker F. T. Chief programmer team management of production programming // IBM Sys. J. 1972. Vol. 11, N 1. Glava 4 1. Eschapasse M. Reims Cathedral, Caisse Nationale des Monuments Histiriques. Paris, 1967. 2. Brooks F. P. Architectural Philosophy // Buchholz W. (Ed.). Planning a Computer System. New York: McGraw-Hill, 1962. 3. Blaauw G. A. Hardware requirements for the fourth generation // Gruenberger F. (ed.). Fourth Generation Computers. Englewood Cliffs, N. J.: Prentice-Hall, 1970. 4. Brooks F. P., Iverson K. E. Automatic Data Processing, System/360 Edition. New York: Wiley, 1969. Ch. 5. 5. Glegg G. L. The Design of Design. Cambridge : Cambridge Univ. Press, 1969: "Na pervyj vzglyad kazhetsya, chto mysl' o tom, chtoby nalozhit' na tvorcheskij um kakie-to pravila ili principy, skoree pomeshaet emu, chem okazhet pomoshch', no na praktike eto sovershenno neverno. Disciplinirovannoe myshlenie skoree koncentriruet vdohnovenie, chem podavlyaet ego". 6. Conway R. W. The PL/C Compiler // Proceedings of a Conf. on Definition and Implementation of Universal Programming Languages. Stuttgard, 1970. 7. Horoshee obsuzhdenie neobhodimosti programmnyh tehnologij sm.: Reynolds C. H. Whats wrong with computer programming management? // Weinwurm G. F. (Ed.). On the Management of Computer Programming. Philadelphia : Auerbach, 1971. P. 35-42. Glava 5 1. Strachey C. Review of Planning a Computer System // Comp. J. 1962. Vol. 5, N 2. July. P. 152-153. 2. |to otnositsya tol'ko k upravlyayushchim programmam. Nekotorye brigady, razrabatyvayushchie kompilyatory dlya proekta OS/360, sozdavali uzhe svoj tretij ili chetvertyj produkt, i otlichnoe kachestvo ih produktov eto podtverzhdaet. 3. Shell D. L. The Share 709 system: a cooperative effort; Greenwald I. D., Kane M. The Share 709 system: programming and modification; Boehm E. M., Steel T. B., Jr. The Share 709 system: machine implementation of symbolic programming. Vse stat'i // JACM. 1959. Vol. 6, N 2. Apr. P. 123-140. Glava 6 1. Neustadt R. E. Presidential Power. New York: Wiley, 1960. Ch. 2. 2. Backus J. W. The syntax and semantics of the proposed international algebraic language // Proc. Intl. Conf. Inf. Proc. UNESCO, Paris, 1959 // Oldenbourg R., Munich and Butterworth. (Eds.). London. Krome togo, celaya podborka statej na etu temu soderzhitsya v: Steel T. B., Jr. (Ed.). Formal Language Description Languages for Computer Programming. Amsterdam: North Holland, 1966. 3. Lucas P., Walk K. On the formal description of PL/I // Annual Review in Automatic Programming Language. New York: Wiley, 1962. Ch. 2. P. 2. 4. Iverson K. E. A Programming Language. New York: Wiley, 1962. Ch. 2. 5. Falkoff A. D., Iverson K. E., Sussenguth E. H. A formal description of System/360 // IBM Systems Journal. 1964. Vol. 3, N 3. P. 198-261. 6. Bell C. G., Newell A. Computer Structures. New York: McGraw-Hill, 1970. P. 120- 136, 517-541. 7. Bell C. G. CHastnoe soobshchenie. Glava 7 1. Parnas D. L. Information distribution aspects of design methodology. Carnegie- Mellon Univ., Dept. Of Computer Science Technical Report. 1971. February. 2. Copyright 1939, 1940 Street & Smith Publications; Copyright 1950, 1967 Roberta A. Hajnlajna (Robert A. Heinlein). Publikuetsya po soglasheniyu s Spectrum Literary Agency. Glava 8 1. Sackman H., Erikson W. J., Grant E. E. Exploratory experimentation studies comparing online and offline programming performance // CACM. 1968. Vol. 11, N 1. Jan. P. 3-11. 2. Nanus B., Farr L. Some cost contributors to large-scale programs // AFIPS Proc. SJCC. Spring 1964. Vol. 25. P. 239-248. 3. Weinwurm G. F. Research in the management of computer programming // Report SP-2059, System Development Corp. Santa Monica, 1965. 4. Morin L. H. Estimation of resources for computer programming projects // M. S. thesis. Chapel Hill: Univ. Of North Carolina, 1974. 5. Portman C. CHastnoe soobshchenie. 6. V neopublikovannom issledovanii 1964 goda, kotoroe provel E. F. Bardain, pokazano, chto programmisty produktivno ispol'zuyut 27% rabochego vremeni. (Procitirovano v: Mayer D. B., Stalnaker A. W. Selection and evaluation of computer personnel // Proc. 23d ACM Conf., 1968. P. 661.) 7. Aron J. CHastnoe soobshchenie. 8. Doklad, sdelannyj na soveshchanii i vklyuchennyj v AFIPS Proceedings. 9. Wolverton R. W. The cost of developing large-scale software // IEEE Trans. On Computers. 1974. Vol. C-23, N 6. June. P. 615-636. V etoj nedavnej vazhnoj stat'e soderzhatsya dannye po mnogim voprosam, obsuzhdaemym v etoj glave, takzhe podtverzhdayushchie vyvody o proizvoditel'nosti truda. 10. Corbato F. J. Sensitive issues in the design of multi-use systems // Lekciya na otkrytii Tehnologicheskogo centra elektronnoj obrabotki dannyh kompanii Honeywell, 1968. 11. W. M. Taliaffero takzhe soobshchaet o postoyannoj proivoditel'nosti 2400 operatorov v god na assmblere, Fortran i Cobol. Sm.: Modularity. The key to system growth potential // Software. 1971. Vol. 1, N 3. July. P. 245-257. 12. V otchete Report TM-3225, Management Handbook for Estimation of Computer Programming Costs (Nelson E. A. iz System Development Corp.) govoritsya o roste proizvoditel'nosti 3:1 pri ispol'zovanii yazyka vysokogo urovnya (str. 66-67), hotya dispersiya vysoka. Glava 9 1. Brooks F. P., Iverson K. E. Automatic Data Processing, System/360 Edition. New York: Wiley, 1969. Ch. 6. 2. Knuth D. E. The Art of Computer Programming. Vols. 1-3. Reading, Mass.: Addison-Wesley, 1968. ff. Glava 10 1. Conway M. E. How do committees invent? // Datamation. 1968. Vol. 14, N 4. Apr. P. 28-31. Glava 11 1. Rech' v Ogletorpskom universitete 22 maya 1932 goda. 2. Pouchitel'nyj otchet ob opyte ispol'zovaniya MULTICS dlya sozdaniya dvuh sistem imeetsya v: Corbaty F. J., Saltzer J. H., Clingen C. T. MULTICS - the first seven years // AFIPS Proc SJCC. 1972. Vol. 40. P. 571-583. 3. Cosgrove J. Needed: a new planning framework // Datamation. 1971. Vol. 17, N 23. Dec. P. 37-39. 4. Izmenenie proekta - slozhnaya problema, i zdes' ya ee chrezmerno uproshchayu. Sm.: Saltzer J. H. Evolutionary design of complex systems // Eckman D. (Ed.). Systems : Research and Design. New York : Wiley, 1961. Vse zhe, kogda vse skazano i sdelano, ya sovetuyu sozdat' opytnuyu sistemu, kotoruyu planiruetsya vybrosit'. 5. Campbell E. Report to the AEC Computer Information Meeting. 1970. Dec. |to yavlenie obsuzhdaetsya takzhe v: Ordin J. L. Designing reliable software // Datamation. 1972. Vol. 18, N 7. July. P. 71-78. Mneniya moih opytnyh znakomyh delyatsya primerno na ravnye chasti v otnoshenii togo, opuskaetsya li krivaya v konce. 6. Lehman M., Belady L. Programming systems dynamics. Predstavleno na ACM SIGOPS Third Symposium on Operating Systems Principles v oktyabre 1971 g. 7. Lewis C. S. Mere Christianity. New York : Macmillan, 1960. P. 54. Glava 12 1. Sm. takzhe: Pomeroy J. W. A guide to programming tools and techniques // IBM Sys. J. 1972. Vol. 11, N 3. P. 234-254. 166 2. Landy B., Needham R. M. Software engineering techniques used in the development of the Cambridge Multiple-Access System // Software. 1971. Vol. 1, N 2. Apr. P. 167-173. 3. Corbato F. J. PL/I as a tool for system programming // Datamation. 1969. Vol. 15, N 5. May. P. 68-76. 4. Hopkins M. Problems of PL/I for system programming // IBM Research Report RC 3489. 1971, August 5. Yorktown Heights, N. Y. 5. Corbato F. J., Saltzer J. H., Clingen C. T. MULTICS - the first seven years // AFIPS Proc SJCC. 1972. Vol. 40. P. 571-582. "Lish' okolo poludyuzhiny kuskov, napisannyh na PL/I, byli pereprogrammirovany na mashinnom yazyke, chtoby vyzhat' maksimal'nuyu skorost'. Neskol'ko programm, pervonachal'no napisannyh na mashinnom yazyke, byli perepisany na PL/I, chtoby oblegchit' ih soprovozhdenie." 6. Citiruyu stat'yu Korbato (ssylka 3 nastoyashchej glavy): "PL/I uzhe est', a al'ternativy poka ne provereny". Odnako sovershenno protivopolozhnyj i obosnovannyj vzglyad predstavlen v Henricksen J. O., Merwin R. E. Programming language efficiency in real-time software systems // AFIPS Proc SJCC. 1972. Vol. 40. P. 155-161. 7. Ne vse s etim soglasny. Garlan Millz otmechaet v chastnom soobshchenii: "Opyt nachinaet podskazyvat' mne, chto v promyshlennom programmirovanii za terminal nuzhno posadit' sekretarya. Programmirovanie sleduet sdelat' bolee obshchestvennym zanyatiem pri obshchem rassmotrenii uchastnikov komandy, a ne chastnym zanyatiem". 8. Yarr J. Programming Experience for the Number 1 Electronic Switching System. Doklad na SJCC 1969 g. Glava 13 1. Vyssotsky V. A. Common sense in designing testable software. Lekciya na simpoziume po metodam otladki komp'yuternyh programm, Chapel Hill, N. C., 1972. Bol'shaya chast' lekcii soderzhitsya v Hetzel W. C. (Ed.). Program Test Methods. Englewood Cliffs, N. J. : Prentice-Hall, 1972. P. 41-47. 2. Wirth N. Program development by stepwise refinement // CACM. 1971. Vol. 14, N 4. Apr. P. 221-227. Sm. takzhe: Mills H. Top-down programming in large systems // Rustin R. (Ed.). Debugging Techniques in Large Systems. Englewood Cliffs, N. J. : Prentice-Hall, 1971. P. 41-55; Baker F. T. System quality through structured programming // AFIPS Proc FJCC. 1972. Vol. 41-I. P. 339-343. 3. Dahl O. J., Dijkstra E. W., Hoare C. A. R. Structured programming. London ; New York : Academic Press, 1972. V etoj knige soderzhitsya naibolee polnoe izlozhenie. Sm. takzhe osnovopolagayushchee pis'mo Dejkstry: GOTO statement considered harmful // CACM. 1968. Vol. 11, N 3. March. P. 147-148. 4. Bohm C., Jacopini A. Flow diagrams, Turing machines, and languages with only two formation rules // CACM. 1966. Vol. 9, N 5. May. P. 366-371. 5. Codd E. F., Lowry E. S., McDonough E., Scalzi C. A. Multiprogramming STRETCH: Feasibility considerations // CACM. 1959. Vol. 2, N 11. Nov. P. 13-17. 6. Strachey C. Time sharing in large fast computers // Proc. Int. Conf. On Info. Processing. 1959, June. UNESCO. P. 336-341. Sm. takzhe zamechaniya Kodda na str. 341, gde on soobshchaet o hode raboty, podobnoj predlozhennoj v stat'e Strejchi. 7. Corbato F. J., Merwin-Daggett M., Daley R. C. An experimental time-sharing system // AFIPS Proc SJCC. 1962. Vol. 2. P. 335-344. Perepechatano v: Rosen S. Programming Systems and Languages. New York : McGraw-Hill, 1967. P. 683- 698. 8. Gold M. M. A methodology for evaluating time-shared computer system usage. Ph. D. dissertation. Carngie-Mellon University, 1967. P. 100. 9. Gruenberger F. Program testing and validating // Datamation. 1968. Vol. 14, N 7. July. P. 39-47. 10. Ralston A. Introduction to Programming and Computer Science. New York : McGraw-Hill, 1971. P. 237-244. 11. Brooks F. P., Iverson K. E. Automatic Data Processing, System/360 Edition. New York : Wiley, 1969, P. 296-299. 12. Problemy razrabotki specifikacij, sozdaniya i testirovaniya sistem horosho izlozheny Trapnelom F. M. v: Trapnell F. M. A systematic approach to the development of system programs // AFIPS Proc SJCC. 1969. Vol. 34. P. 411-418. 13. Dlya sistemy real'nogo vremeni potrebuetsya model' okruzheniya. Sm., naprimer: Ginzberg M. G. Notes on testing real-time system programs // IBM Sys. J. 1965. Vol. 4, N 1. P. 58-72. 14. Lehman M., Belady L. Programming systems dynamics. Predstavleno v oktyabre 1971 g. na ACM SIGOPS Third Symposium on Operating Systems Priciples. Glava 14 1. Sm.: Reynolds C. H. Whats wrong with computer programming management? // Weinwurm G. F. (Ed.). On the Management of Computer Programming. Philadelphia : Auerbach, 1971. P. 35-42. 2. King W. R., Wilson T. A. Subjective time estimates in critical path planning - a preliminary analysis // Mgt. Sci. 1967. Vol. 13, N 5. Jan. P. 307-320; King W. R., Witterrongel M., Hezel K. D. On the analysis of critical path time estimating behavior // Mgt. Sci. 1967. Vol. 14, N 1. Sept. P. 79-84. 3. Bolee podrobnoe obsuzhdenie sm. Brooks F. P., Iverson K. E. Automatic Data Processing, System/360 Edition. New York : Wiley, 1969. P. 428-230. 4. CHastnoe soobshchenie. Glava 15 1. Goldsteine H. H., Neumann J. von. Planning and coding problems for en electronic computing instrument. Part II. Vol. 1. Otchet, podgotovlennyj dlya U.S. Army Ordinance Department, 1947. Perepechatano v: Neumann J. von. Collected Works // Taub A. H. (Ed.). Vol. V. New York : Macmillan. P. 80-151. 2. CHastnoe soobshchenie, 1957. Dokazatel'stvo opublikovano v: Iverson K. E. The use of APL in Teaching. Yorktown, N.Y. : IBM Corp., 1969. 3. Drugoj spisok priemov dlya PL/I opublikovan v: Walter A. B., Bohl M. From better to best - tips for good programming // Software Age. 1969. Vol. 3, N 11. Nov. P. 46-50. |ti zhe priemy mozhno ispol'zovat' v Algol i dazhe Fortran. U D. E. Langa iz universiteta shtata Kolorado est' napisannaya na Fortran programma formatirovaniya pod nazvaniem STYLE, s pomoshch'yu kotoroj mozhno poluchit' takoj rezul'tat. Sm. takzhe: McCracken D. D., Weinberg G. M. How to write a readable FORTRAN program // Datamation. 1972. Vol. 18, N 10. Oct. P 73-77. Glava 16 1. Ocherk, ozaglavlennyj "No Silver Bullet", vzyat iz: Information Processing 1986, the Proceedings of the IFIP Tenth World Computing Conference pod redakciej H.-J. Kuglera, 1986, str. 1069-1076. Perepechatano s lyubeznogo razresheniya IFIP i Elsevier Science B. V., Amsterdam, Niderlandy. 2. Parnas D. L. Designing software for ease of extension and contraction // IEEE Trans on SE. 1979. Vol. 5, N 2. March. P. 128-138. 3. Booch G. Object-oriented design // Software Engineering with Ada. Menlo Park, Calif. : Benjamin/Cummings, 1983. 4. Special Issue on Artificial Intelligence and Software Engineering // Mostow J. (Ed.). IEEE Trans. on SE. 1985. Vol. 11, N 11. Nov. 5. Parnas D. L. Software aspects of strategic defense systems // Communications of the ACM. 1985. Vol. 28, N 12. Dec. P. 1326-1335. Sm. takzhe: American Scientist. 1985. Vol. 73, N 5. Sept.-Oct. P. 432-440. 6. Balzer R. A 15-year perspective on automatic programming v Mostow, cit. soch. 7. Mostow, sm. primechanie 4. 8. Parnas, 1985, sm. primechanie 5. 9. Raeder G. A survey of current graphical programming techniques // Grafton R. B., Ichikawa T. (Eds.). Special Issue on Visual Programming // Computer. 1985. Vol. 18, N 8. Aug. P. 11-25. 10. Tema obsuzhdaetsya v glave 15 nastoyashchej knigi. 11. Mills H. Top-down programming in large systems // Rustin R. (Ed.). Debugging Techniques in Large Systems. Englewood Cliffs, N. J. : Prentice-Hall, 1971. 12. Boehm B. W. A spiral model of software development and enhancement // Computer. 1985. Vol. 20, N 5. May, P. 43-57. Glava 17 Material, citiruemyj bez ssylki, vzyat iz chastnyh soobshchenij. 1. Brooks F. P. No silver bullet - essence and accidents of software engineering // Kugler H. J. (Ed.). Information Processing 86. Amsterdam : Elsevier Science, North Holland, 1986. P. 1069-1076. 2. Brooks F. P. No silver bullet - essence and accidents of software engineering // Computer. 1987. Vol. 20, N 4. Apr. P. 10-19. 3. Neskol'ko pisem v otvet poyavilis' v iyul'skom 1987 goda vypuske "Computer". Osobenno priyatno zametit', chto v to vremya kak "SPN" ne poluchila nagrad, Bryus M. Skvirski (Bruce M. Skwiersky) poluchil nagradu za luchshij obzor, opublikovannyj v "Computer Reviews" v 1988 godu. V redakcionnoj stat'e E. A. Vajsa v "Computer Reviews" (iyun', 1988) na s. 283-284 ob®yavlyaetsya o nagrade i perepechatyvaetsya obzor Skvirski. V obzore est' sushchestvennaya oshibka: vmesto "shestikratno" dolzhno byt' "106". 4. "Po Aristotelyu i filosofii sholastikov, akcidenciya est' kachestvo, kotoroe prinadlezhit veshchi ne blagodarya ee vazhnoj ili sushchestvennoj prirode, a voznikaet v nej v rezul'tate dejstviya inyh prichin". Websters New International Dictionary of the English Language, 2d ed., Springfield, Mass. : G. C. Merriam, 1960. 5. Sayers D. L. The Mind of the Market. New York : Harcourt, Brace, 1941. 6. Glass R. L., Conger S. A. Research software talks : Intellectual or clerical? // Information or Management. 1992. Vol. 23, N 4. Avtory soobshchayut, chto razrabotka tehnicheskih trebovanij k programmnomu obespecheniyu na 80% intellektual'naya i na 20% - kancelyarskaya rabota. Fjelstadt i Hamlen (1979) poluchili fakticheski takie zhe rezul'taty dlya podderzhki prikladnyh programm. Mne neizvestny popytki izmenit' etu dolyu dlya vsej zadachi ot nachala do konca. 7. Herzberg F., Mausner B., Sayderman B. B. The Motivation to Work. 2nd ed. London : Wiley, 1959. 8. Cox B. J. There is a silver bullet // Byte. 1990. Oct. P. 209-218. 169 9. Harel D. Biting the silver bullet : Toward a brighter future for system development // Computer. 1992. Jan. P. 8-20. 10. Parnas D. L. Software aspects of strategic defense systems // Communication of the ACM. 1985. Vol. 28, N 12. Dec. P. 1326-1335. 11. Turski W. M. And no philosophers stone, either // Kugler H. J. (Ed.). Information Processing 86. Amsterdam : Elsevier Science, North Holland, 1986. P. 1077-1080. 12. Glass R. L., Conger S. A. Research software tasks : Intellectual or clerical? // Information and Management, 1992. Vol. 23, N 4. P. 183-192. 13. Review of Electronic Digital Computers, Proceedings of a Joint AIEEIRE Computer Conference (Philadelphia, Dec. 10-12, 1951). New York : American Institute of Electrical Engineers. P. 13-20. 14. Ibid. Pp. 36, 68, 71, 97. 15. Proceedings of the Eastern Joint Computer Conference (Washington, Dec. 8-10, 1953). New York : Institute of Electrical Engineers. P. 45-47. 16. Proceedings of the 1955 Western Joint Computer Conference (Los Angeles, March 1-3, 1955). New York : Institute of Electrical Engineers. 17. Everett R. R., Zraket C. A., Bennington H. D. SAGE - a data processing system for air defense // Proceedings of the Eastern Joint Computer Conference (Washington, Dec. 11-13, 1957). New York : Institute of Electrical Engineers. 18. Harel D., Lachover H., Haamad A., Pnueli A., Politi M., Sherman R., Shtul-Traurig A. Statemate: A working environment for the development of complex reactive systems // IEEE Trans. on SE. 1990. Vol. 16, N 4. P. 403-444. 19. Jones C. Assessment and Control of Software Risks. Engltwood Cliffs, N. J. : Prentice-Hall, 1994. P. 619. 20. Coqui H. Corporate survival : The software dimension. Focus 89, Cannes, 1989. 21. Coggins J. M. Designing C++ libraries // C++ Journal. 1990. Vol. 1, N 1. June. P. 25-32. 22. V budushchem vremeni. Mne neizvestny kakie-libo soobshcheniya o rezul'tatah pyatogo ispol'zovaniya. 23. Jones, sm. primech. 19. P. 604. 24. Huang Weigiao. Industrializing software production // Proceedings ACM 1988 Computer Science Conference. 1988. Atlanta. Boyus', chto pri takoj organizacii budet nedostatochnyj lichnyj professional'nyj rost. 25. Ves' sentyabr'skij 1994 goda nomer IEEE Software posvyashchen povtornomu ispol'zovaniyu. 26. Jones, sm. primech. 19. P. 323. 27. Jones, sm. primech. 19. P. 329. 28. Yourdon E. Decline and Fall of the American Programmer. Englewood Cliffs, N. J. : Yourdon Press, 1992. P. 221. 29. Glass R. L. Glass (kolonka) // System Development. 1988. Jan. P. 4-5. Glava 18 1. Boehm B. W. Software Engineering Economics. Englewood Cliffs, N. J. : Prentice- Hall, 1981. P. 81-84. 2. McCarthy J. 21 Rules for Delivering Great Software on Time // Software World USA Conference, Washington (Sept. 1994). Glava 19 Material, citiruemyj bez ssylki, vzyat iz chastnyh soobshchenij. 1. Po etoj boleznennoj teme sm. takzhe: Niklaus Wirth. A plea for lean software // Computer. 1995. Vol. 28, N 2. Feb. P. 64-68. 2. Coleman D. Word 6.0 packs in features; update slowed by baggage // MacWeek. 1994. Vol. 8, N 38. Sept. 26. P. 1. 3. Opublikovano mnogo obzorov chastotnyh harakteristik komand mashinnogo yazyka i yazyka programmirovaniya, sdelannyh posle vypuska. Sm., naprimer: Hennessy J., Patterson D. Computer Architecture. |ti chastotnye dannye ochen' polezny dlya sozdaniya posleduyushchih produktov, hotya nikogda v tochnosti ne primenimy. Mne neizvestny publikacii ocenok, poluchennyh do razrabotki produkta, a tem bolee - sravnenij apriornyh dannyh s aposteriornymi. Ken Bruks polagaet, chto doski ob®yavlenij v Internete predostavlyayut teper' deshevyj sposob zaprosit' dannye u predpolagaemyh pol'zovatelej novogo produkta, dazhe nesmotrya na to chto otvechayut tol'ko zhelayushchie. 4. Conklin J., Begeman M. gIBIS : A hypertext Tool for Exploratory Policy Descussion // ACM Transactions on Office Information Systems. 1988. Oct. P. 303-331. 5. Englebart D., English W. A research center for augmenting human intellect // AFIPS Conference Proceedings, Fall Joint Computer Conference. San Francisco (Dec. 9-11, 1968). P. 395-410. 6. Apple Computer, Inc. Macintosh Human Interface Guidelines. Reading, Mass. : Addison-Wesley, 1992. 7. Kazhetsya, shina Apple Desk Top Bus mogla by apparatno podderzhivat' dve myshi, no operacionnaya sistema takoj vozmozhnosti ne predostavlyaet. 8. Royce W. W. Managing the development of large software systems: Concepts and techniques // Proceedings, WESCON (Aug., 1970). Perepechatano v ICSE 9 Proceedings. Ni Rojs, ni drugie ne schitali, chto mozhno zavershit' process razrabotki, ne peresmatrivaya nachal'nyh dokumentov. Model' byla predlozhena v kachestve ideal'noj. Sm.: Parnas D. L., Clements P. C. A rational design process : How and why to fake it // IEEE Transactions on Software Engineering. 1986. Vol. SE-12, N 2. Feb. P. 251-257. 9. V rezul'tate znachitel'noj pererabotki DOD-STD-2167 poyavilsya DOD-STD- 2167A (1988), kotoryj dopuskaet novye modeli, naprimer spiral'nuyu, no ne obyazyvaet bolee k ih primeneniyu. K sozhaleniyu, MILSPECS, na kotoryj ssylaetsya 2167A, i privedennye v kachestve illyustracii primery po- prezhnemu, kak soobshchaet Bem, ispol'zuyut kaskadnuyu shemu. Special'naya gruppa nauchnogo soveta po oborone pod rukovodstvom Larri Druffela i Dzhordzha Hejlmejera v otchete 1994 goda "Report of the DSB task force on acquiring defense software commercially" rekomendovala povsemestnoe ispol'zovanie novyh modelej. 10. Mills H. Top-down programming in large systems // Rustin R. (Ed.). Debugging Techniques in Large Systems. Englewood Cliffs, N. J. : Prentice-Hall, 1971. 11. Parnas D. L. On the design and development of program families // IEEE Trans. on Software Engineering. 1976. Vol. SE-2, N 1. March, P. 1-9; Parnas D. L. Designing software for ease of extension and construction // IEEE Trans. on Software Engineering. 1979. Vol. SE-5, N 2. March. P. 128-138. 12. Harel D. Biting the silver bullet // Computer. 1992. Jan. P. 8-20. 13. Sleduyushchie stat'i yavlyayutsya osnovopolagayushchimi v voprose skrytiya dannyh: Parnas D. L. Information distribution aspects of design methodology // Carnegie- Mellon Univ., Dept. Of Computer Science Technical Report. 1971. Feb.; Parnas D. L. A technique for software module specification with examples // Comm. ACM. 1972. Vol. 5, N 5. May. P. 330-336; Parnas D. L. (1972). On the criteria to be used in decomprosing systems into modules // Comm. ACM. 1972. Vol. 5, N 12. Dec. P. 1053-1058. 14. Ideyu ob®ektov pervonachal'no nabrosali Hoare i Dijkstra, no pervoe i naibolee vazhnoe razvitie oni poluchili v yazyke Simula-67, kotoryj razrabotali Dahl i Nygaard. 15. Boehm B. W. Software Engineering Economics. Englewood Cliffs, N. J. : Prentice- Hall, 1981. P. 83-94; 470-472. 16. Abdel-Hamid T., Madnick S. Software Project Dynamics : An Integrated Approach. Ch. 19 // Model enhancement and Brookss law. Englewood Cliffs, N. J. : Prentice- Hall, 1991. 17. Stutzke R. D. A mathematical expression of Brookss Law // Ninth International Forum on COCOMO and Cost Modeling. Los Angeles, 1994. 18. DeMarco T., Lister T. Peopleware : Productive Projects and Teams. New York : Dorset House, 1987. 19. Pius XI. Encyclical Quadragesimo Anno // Ihm, Claudia Carlen. (Ed.). The Papal Encyclicals 1903-1939. Raleigh, N. C. : McGrath. P. 428. 20. Schumacher E. F. Small Is Beautiful : Economics as if People Mattered. Perennian Library Edition. New York : Harper and Row, 1973. P. 244. 21. Schumacher, sm. primech. 20. P. 34. 22. Navodyashchij na mysli nastennyj plakat glasit: "Svoboda pechati prinadlezhit tomu, u kogo on [komp'yuter] est'". 23. Bush V. That we may think // Atlantic Monthly. 1945. Vol. 176, N 1. Apr. P. 101- 108. 24. Ken Tompson iz Bell Labs, sozdatel' Unix, davno ponyal znachenie bol'shogo ekrana dlya programmista. On pridumal, kak na svoyu primitivnuyu elektronnuyu trubku Tektronix vyvodit' 120 strochek teksta v dve kolonki. On de