Ocenite etot tekst:


---------------------------------------------------------------
     THE MYTHICAL MAN-MONTH
     (Essays on Software Engineering)
     ADDISON-WESLEY PUBLISHING COMPANY READING 1975

     Copyright  (c)   1975  by  Acldison-Wesley   Publishing  Company,  Inc.
Philippines;  Copyright  1975  by  Addison-Wesley Publishing  Company,  Inc.
Copvrisht (c) 1972 by Frederick P. Brooks, Jr.
     OCR, formating: Jek , Alex Buloichik
---------------------------------------------------------------




     Posvyashchenie izdaniya 1975 goda
     Posvyashchaetsya  dvoim lyudyam,  blagodarya  kotorym  moi gody  v  IBM  byli
osobenno nasyshchennymi: Tomasu  Dzh.  Uotsonu Mladshemu, ch'e glubokoe vnimanie k
lyudyam  po-prezhnemu  oshchushchaetsya v  ego firme,  i Bobu  O.  |vansu, ch'e  smeloe
rukovodstvo prevratilo rabotu v priklyuchenie.
     Posvyashchenie izdaniya 1995 goda
     Posvyashchaetsya Nensi, Bozh'emu daru dlya menya.
     Predislovie k izdaniyu 1995 goda
     K moemu  udivleniyu i udovol'stviyu, "Mificheskij cheloveko-mesyac" ostaetsya
populyarnym  cherez 20 let posle vyhoda.  Tirazh prevysil 250 000  ekzemplyarov.
Menya chasto  sprashivayut, kakie  iz ocenok  i  rekomendacij, izlozhennyh v 1975
godu, ya po- prezhnemu schitayu vernymi, a kakie preterpeli izmeneniya, i  v  chem
imenno. Nesmotrya  na to,  chto  v moih  lekciyah  etot vopros vremya ot vremeni
zatragivaetsya, ya davno zhdu vozmozhnosti izlozhit' ego v pechatnom vide.
     Piter   Gordon   (Peter   Gordon),   yavlyayushchijsya   sejchas   sovladel'cem
izdatel'stva Addison-Wesley,  terpelivo i s  pol'zoj sotrudnichaet so mnoj  s
1980  goda.  On  predlozhil  podgotovit'  yubilejnoe  izdanie.  My  reshili  ne
ispravlyat' original, a perepechatat' ego v neprikosnovennosti, za isklyucheniem
obychnyh opechatok, i dopolnit' myslyami, voznikshimi v bolee pozdnee vremya.
     V  glave 16 perepechatyvaetsya stat'ya "Serebryanoj  puli net:  sushchnost'  i
akcidenciya v  programmnoj  inzhenerii", opublikovannaya  IFIPS  (Mezhdunarodnaya
federaciya  obshchestv  po   obrabotke  informacii)  v  1986  godu  i  yavivshayasya
rezul'tatom  opyta,  poluchennogo  mnoyu vo  vremya  rukovodstva  issledovaniem
ispol'zovaniya  programmnogo obespecheniya  v  voennyh oblastyah, provodivshegosya
Voennym komitetom po  nauke. Moi soavtory po etomu issledovaniyu, a takzhe nash
ispolnitel'nyj sekretar' Robert L. Patrik, okazali mne neocenimoe sodejstvie
v moem  vozvrashchenii k krupnym prakticheskim programmnym proektam. Stat'ya byla
perepechatana  v  izdanii  IEEE  "Computer"  v 1987 godu, blagodarya  kotoromu
poluchila shirokuyu izvestnost'.
     Stat'ya "Serebryanoj puli net" byla  derzkoj. V  nej predrekalos', chto  v
techenie   blizhajshego  desyatiletiya  ne  vozniknet  metodov  programmirovaniya,
ispol'zovanie    kotoryh    pozvolit    na    poryadok    velichin    povysit'
proizvoditel'nost' razrabotki  programmnogo obespecheniya  pri  prochih  ravnyh
usloviyah.  Do   konca   etogo  desyatiletiya  ostalsya  god,  i,   pohozhe,  moe
predskazanie  sbylos'. Stat'ya  vyzvala bolee  ozhivlennuyu diskussiyu v pechati,
chem "Mificheskij  cheloveko-mesyac", poetomu  v glave  17 soderzhatsya  otvety na
nekotorye  iz  opublikovannyh  kriticheskih  zamechanij,  a  takzhe  utochnyayutsya
vzglyady, izlozhennye v 1986 godu.
     Pri  podgotovke retrospektivnogo  analiza i utochneniya knigi "Mificheskij
cheloveko-mesyac"  ya byl udivlen  tem, kak malo soderzhavshihsya v nej  zayavlenij
podverglos'  kritike  -  kak  iz  chisla  dokazannyh,   tak  i  oprovergnutyh
posleduyushchim  opytom  i  issledovaniyami  v  oblasti  razrabotki  programmnogo
obespecheniya.  Mne  pokazalos'  poleznym  sistematizirovat' eti  zayavleniya  v
chistom vide, bez  soputstvuyushchih dokazatel'stv i  dannyh.  YA vklyuchil  v knigu
etot ocherk v kachestve glavy  18, nadeyas', chto eti chistye utverzhdeniya vyzovut
poisk  argumentov i faktov dlya dokazatel'stva,  oproverzheniya, peresmotra ili
utochneniya.
     Glava  19   sobstvenno   i  predstavlyaet   soboj  popytku  peresmotret'
iznachal'nye utverzhdeniya. Sleduet predupredit' chitatelya, chto izlagaemye novye
vzglyady  daleko  ne v toj mere  podkrepleny "boevym opytom", kak  eto bylo v
pervoj  chasti  knigi.  Delo  v  tom, chto  v  poslednee  vremya  ya  rabotal  v
universitetskoj srede,  a  ne  v  promyshlennosti, i  nad  nebol'shimi,  a  ne
krupnomasshtabnymi    proektami.   S   1986    goda   ya   zanimayus'    tol'ko
prepodavatel'skoj   deyatel'nost'yu   v   oblasti    razrabotki   programmnogo
obespecheniya, no ne issledovaniyami v nej. Moya issledovatel'skaya rabota bol'she
kasaetsya virtual'nyh sred i ih primenenij.
     Pri  podgotovke  dannoj retrospektivy  ya  pointeresovalsya  sovremennymi
vzglyadami   svoih   druzej,   kotorye  prakticheski   zanimayutsya  razrabotkoj
programmnogo obespecheniya.  V chislo teh, pered  kem ya v dolgu  za  gotovnost'
podelit'sya  svoimi  vzglyadami, sdelat' poleznye zamechaniya k  pervonachal'nomu
tekstu i usovershenstvovat'  moe obrazovanie, vhodyat Barri Bem (Barry Boehm),
Ken  Bruks  (Ken  Brooks),  Dik Kejs  (Dick  Case),  Dzhejms  Koggins  (James
Coggins),  Tom Demarko (Tom  DeMarco),  Dzhim  Makkarti (Jim McCarthy), Devid
Parnas  (David Parnas),  |rl  Uiler (Earl Wheeler) i  |dvard Jordon  (Edward
Yordon).  Fej  Uard  (Fay  Ward)  prekrasno  vypolnila  tehnicheskuyu  rabotu,
svyazannuyu s izdaniem novyh glav.
     YA blagodaren  moim  kollegam iz Gruppy po  programmnomu obespecheniyu dlya
voennyh celej Voennogo komiteta po nauke  Gordonu Bellu (Gordon Bell), Bryusu
B'yukenenu (Bruce  Buchanan),  Riku  Hejz-Rotu (Rick  Hayes-Roth)  i osobenno
Devidu  Parnasu - za ih plodotvornye idei, a Rebeke Birli (Rebekah Bierly) -
za  podgotovku  k  pechati  stat'i, opublikovannoj  v dannoj knige v kachestve
glavy 16. Analiz problem programmirovaniya v  kategoriyah "sushchnost'" (essence)
i   "akcidenciya"   (accident)   vozniklo  blagodarya  Nensi   Grinvud  Bruks,
ispol'zovavshej  takoj analiz v  stat'e  ob obuchenii igre  na skripke metodom
Suzuki.
     Obychai izdatel'stva Addison-Wesley  ne pozvolili mne  v  predislovii  k
izdaniyu 1975 goda vyrazit'  blagodarnost' ego sotrudnikam  za sygrannuyu  imi
vazhnuyu rol'. Sleduet osobenno otmetit' vklad dvuh  chelovek: Normana Stentona
(Norman  Stenton), yavlyavshegosya  otvetstvennym redaktorom,  i Gerberta  Bouza
(Herbert  Boes),  byvshego hudozhestvennym  redaktorom.  Bouz  sozdal  izyashchnyj
stil',  osobo  otmechennyj  odnim  iz recenzentov: "shirokie polya i tvorcheskoe
ispol'zovanie shriftov i komponovki materiala". CHto eshche vazhnee, on dal vazhnyj
sovet pomestit' v nachale kazhdoj glavy svoyu kartinku. (V to vremya u menya byli
tol'ko kartinki Smolyanyh yam  i Rejmskogo  sobora.) CHtoby najti vse kartinki,
mne potrebovalsya celyj god, no ya beskonechno blagodaren za sovet.
     Soli  Deo  gloria - Bogu  edinomu  slava! F. P.  B.,  Jr.  CHapel  Hill,
Severnaya Karolina
     Mart 1995
     Predislovie k pervomu izdaniyu
     Vo   mnogih  otnosheniyah   upravlenie  bol'shim  proektom   razrabotki
programmnogo obespecheniya  analogichno lyubomu  drugomu  krupnomu nachinaniyu - v
bol'shej  mere, chem obychno schitayut programmisty. Odnako vo  mnogih otnosheniyah
imeet otlichiya -  v  bol'shej  mere,  chem obychno predpolagayut professional'nye
menedzhery. Idet process  nakopleniya professional'nyh znanij v  etoj oblasti.
Sostoyalos'   neskol'ko  konferencij,  zasedanij   na   konferenciyah   AFIPS,
opublikovano  neskol'ko knig i  statej. No znaniya  eshche ne  oformilis'  v tom
vide,  kogda  ih  mozhno sistematicheski  izlozhit'  v  uchebnike. Tem ne menee,
predstavlyaetsya  umestnym  predlozhit'  etu   nebol'shuyu   po   ob®emu   knigu,
otrazhayushchuyu, v osnovnom, moi lichnye vzglyady.
     Moe professional'noe stanovlenie v vychislitel'noj tehnike pervonachal'no
bylo svyazano s programmirovaniem,  odnako v  period 1956-1963  godov,  kogda
razrabatyvalis' avtonomnye upravlyayushchie programmy i yazyki  vysokogo urovnya, ya
zanimalsya, v  osnovnom,  arhitekturoj komp'yuterov. Kogda v 1964 godu ya  stal
menedzherom proekta razrabotki  Operating System/360,  to obnaruzhil,  chto mir
programmirovaniya  sovershenno izmenilsya  blagodarya  uspeham,  dostignutym  za
neskol'ko poslednih let.
     Rukovodstvo razrabotkoj  OS/360 bylo  ochen' pouchitel'nym, hotya i polnym
rasstrojstv.  Komande  razrabotchikov, v  tom  chisle  smenivshemu  menya F.  M.
Trapnellu (F. M.  Trapnell), mozhno  mnogim gordit'sya. Sistema soderzhit mnogo
otlichnyh  reshenij v konstrukcii i funkcionirovanii,  i ej  udalos'  poluchit'
shirokoe  rasprostranenie.  Nekotorye  idei,  v pervuyu  ochered',  organizaciya
vvoda/vyvoda, nezavisimaya  ot ustrojstv,  i upravlenie vneshnimi bibliotekami
stali tehnicheskimi novinkami, nyne shiroko  ispol'zuemymi. Sejchas eta sistema
vpolne nadezhna, dostatochno proizvoditel'na i ves'ma gibka.
     Odnako  proekt  nel'zya  nazvat'  vpolne uspeshnym. Vsyakomu  pol'zovatelyu
OS/360 bystro stanovitsya yasno, naskol'ko luchshe mogla by byt' sistema. Oshibki
proektirovaniya i realizacii osobenno zametny v upravlyayushchej programme, a ne v
kompilyatorah  yazykov.  Bol'shaya  chast'  etih  proschetov  otnositsya  k periodu
1964-65 godov i potomu dolzhna byt' otnesena na moj schet. Bolee togo, sistema
vyshla s  zaderzhkoj, potrebovala bol'she pamyati, chem predpolagalos', stoimost'
razrabotki v neskol'ko  raz prevysila  zaplanirovannuyu, i  pervye  neskol'ko
versij funkcionirovali ne slishkom udachno.
     Pokinuv v 1965 godu IBM i pridya v CHepel Hill, kak eto i predpolagalos',
ya vozglavil  razrabotku OS/360  i  stal  analizirovat' opyt etoj razrabotki,
chtoby  izvlech'  uroki  tehnologicheskih  reshenij   i   administrirovaniya.   V
chastnosti,  ya  hotel   ponyat',   pochemu   stol'  razlichnym   okazalsya   opyt
administrirovaniya  pri  razrabotke  apparatnoj  chasti  System/360,  s  odnoj
storony,  i  sozdanii  operacionnoj  sistemy OS/360  - s  drugoj. |ta  kniga
yavlyaetsya zapozdalym otvetom na voprosy  Toma Uotsona otnositel'no  trudnosti
upravleniya razrabotkoj programm.
     V reshenii etoj zadachi ya poluchil bol'shuyu pol'zu ot dlitel'nogo obshcheniya s
R. P. Kejsom (R. P. Case), pomoshchnikom menedzhera proekta v 1964-65  godah,  i
F. M. Trapnellom, menedzherom proekta v 1965-68  godah. YA obsudil svoi vyvody
s  menedzherami  drugih krupnyh programmnyh  proektov, v  tom  chisle  F.  Dzh.
Korbato (F. J. Corbato) iz  MTI, Dzhonom Harrom (John Harr) i V. Vysockim (V.
Vyssotsky)  iz Bell  Telephone  Laboratories,  CHarl'zom  Portmanom  (Charles
Portman)   iz   International  Computers   Limited,   A.   P.   Ershovym   iz
Vychislitel'nogo  centra Sibirskogo otdeleniya Akademii nauk SSSR, a  takzhe A.
M. P'etrasanta (A. M. Pietrasanta) iz IBM.
     Sobstvennye  moi   vyvody   soderzhatsya   v   sleduyushchih  nizhe   ocherkah,
prednaznachennyh professional'nym programmistam, professional'nym  menedzheram
i osobenno professional'nym menedzheram v programmirovanii.
     Hotya kniga napisana kak  otdel'nye ocherki, u nee est' central'naya tema,
izlagaemaya  v  glavah  2-7.  Vkratce  moe  mnenie  zaklyuchaetsya  v  tom,  chto
trudnosti,  ispytyvaemye  pri upravlenii  krupnymi  programmnymi  proektami,
inogo  roda,  nezheli  pri upravlenii  nebol'shimi  proektami, chto  svyazano  s
problemami  razdeleniya   truda.  YA  schitayu  vazhnejshej   zadachej   sohranenie
konceptual'noj  celostnosti  samogo  produkta.  V  etih  glavah  obsuzhdayutsya
trudnosti, voznikayushchie na puti k etomu edinstvu, i sposoby ih preodoleniya. V
glavah, sleduyushchih za nimi, obsuzhdayutsya drugie aspekty upravleniya razrabotkoj
programmnogo obespecheniya.
     Imeyushchayasya  po  etoj  teme  literatura  ne  slishkom  bogata,  no  ves'ma
raspylena.  Poetomu  ya postaralsya  vklyuchit'  ssylki na  literaturu,  kotorye
pomogut  osvetit'  otdel'nye voprosy i  otoshlyut zainteresovannogo chitatelya k
drugim  poleznym  rabotam.  Rukopis'  knigi  prochli  mnogie  moi  druz'ya,  i
nekotorye iz  nih sdelali  prostrannye i poleznye zamechaniya.  V teh sluchayah,
kogda, nesmotrya na cennost', oni ne vpolne vpisyvalis' v tekst, ya vklyuchal ih
v primechaniya.
     Poskol'ku eta kniga predstavlyaet  soboj sbornik  ocherkov, a  ne  edinyj
tekst,  vse ssylki  i  primechaniya vyneseny v konec,  i  chitatelyu  pri pervom
chtenii mozhno ih propustit'.
     YA gluboko  priznatelen miss Sare |lizabet Mur (Sara  Elizabeth  Moore),
misteru  Devidu  Vagneru (David Wagner) i  missis  Rebekke  Berris  (Rebecca
Burris) za  pomoshch' v podgotovke dannoj rukopisi, a  takzhe professoru Dzhozefu
Slounu (Joseph C. Sloane) za sovety v otnoshenii illyustracij.
     F. P. B., Jr.
     CHepel Hill, Severnaya Karolina
     Oktyabr' 1974




    Glava 1. Smolyanaya yama

Een Schip op bet strand is een baken in zee. [Korabl' na meli - moryaku mayak.] GOLLANDSKAYA POSLOVICA Samaya yarkaya scena doistoricheskih vremen - bor'ba ogromnyh zhivotnyh so smert'yu v smolyanyh yamah. Voobrazhenie predstavlyaet dinozavrov, mamontov i sablezubyh tigrov, pytayushchihsya vysvobodit'sya iz smoly. CHem otchayannej bor'ba, tem sil'nee zatyagivaet smola, i kak by ni byl silen ili lovok zver', v konechnom itoge emu ugotovana gibel'. Takoj smolyanoj yamoj v poslednee desyatiletie bylo programmirovanie bol'shih sistem: v nej sginul ne odin bol'shoj i sil'nyj zver'. Po bol'shej chasti eto proishodilo v oblasti sistem, gde malo komu udalos' realizovat' specifikacii, ulozhit'sya v grafik i byudzhet. Bol'shie i malye, massivnye i zhilistye - odna za drugoj eti komandy uvyazli v smole. Kazalos', nichto v otdel'nosti ne vyzyvaet trudnostej - odnu lapu vsegda mozhno vytashchit'. No nakoplenie dejstvuyushchih odnovremenno i vzaimovliyayushchih faktorov vse bolee i bolee zamedlyaet dvizhenie. Vyzyvaet udivlenie nepriyatnost' voznikshej problemy, i raspoznat' ee sushchnost' nelegko. No nuzhno eto sdelat', esli my sobiraemsya reshit' ee. Poetomu nachnem s opredeleniya togo, chto takoe sistemnoe programmirovanie, i kakie radosti i pechali ono tait. Sistemnyj programmnyj produkt Vremya ot vremeni mozhno prochest' v gazete o tom, kak v pereoborudovannom garazhe para programmistov sdelala zamechatel'nuyu programmu, ostavivshuyu pozadi razrabotki bol'shih komand. I kazhdyj programmist ohotno verit v eti skazki, poskol'ku znaet, chto mozhet sozdat' lyubuyu programmu so skorost'yu, znachitel'no prevyshayushchej te 1000 operatorov v god, kotorye, po soobshcheniyam, pishut programmisty v promyshlennyh brigadah. Pochemu zhe do sih por vse professional'nye brigady programmistov ne zameneny oderzhimymi duetami iz garazhej? Nuzhno posmotret' na to, chto, sobstvenno, proizvoditsya. V levom verhnem uglu risunka 1.1 nahoditsya programma. Ona yavlyaetsya zavershennym produktom, prigodnym dlya zapuska svoim avtorom na sisteme, na kotoroj byla razrabotana. V garazhah obychno proizvoditsya takoj produkt, i eto - tot ob®ekt, posredstvom kotorogo otdel'nyj programmist ocenivaet svoyu proizvoditel'nost'. Est' dva sposoba, kotorymi programmu mozhno prevratit' v bolee poleznyj, no i bolee dorogoj ob®ekt. |ti dva sposoba predstavleny po krayam risunka. Pri peremeshchenii vniz cherez gorizontal'nuyu granicu programma prevrashchaetsya v programmnyj produkt. |to programma, kotoruyu lyuboj chelovek mozhet zapuskat', testirovat', ispravlyat' i razvivat'. Ona mozhet ispol'zovat'sya v razlichnyh operacionnyh sredah i so mnogimi naborami dannyh. CHtoby stat' obshcheupotrebitel'nym programmnym produktom, programma dolzhna byt' napisana v obobshchennom stile. V chastnosti, diapazon i vid vhodnyh dannyh dolzhny byt' nastol'ko obobshchennymi, naskol'ko eto dopuskaetsya bazovym algoritmom. Zatem programmu nuzhno tshchatel'no protestirovat', chtoby byt' uverennym v ee nadezhnosti. Dlya etogo nuzhno podgotovit' dostatochnoe kolichestvo kontrol'nyh primerov dlya proverki diapazona dopustimyh znachenij vhodnyh dannyh i opredeleniya ego granic, obrabotat' eti primery i zafiksirovat' rezul'taty. Nakonec, razvitie programmy v programmnyj produkt trebuet sozdaniya podrobnoj dokumentacii, s pomoshch'yu kotoroj kazhdyj mog by ispol'zovat' ee, delat' ispravleniya i rasshiryat'. YA pol'zuyus' prakticheskim pravilom, soglasno kotoromu programmnyj produkt stoit, po men'shej mere, vtroe dorozhe, chem prosto otlazhennaya programma s takoj zhe funkcional'nost'yu. Ris. 1.1 |volyuciya sistemnogo programmnogo produkta Pri peresechenii vertikal'noj granicy programma stanovitsya komponentom programmnogo kompleksa. Poslednij predstavlyaet soboj nabor vzaimodejstvuyushchih programm, soglasovannyh po funkciyam i formatam, i vkupe sostavlyayushchih polnoe sredstvo dlya resheniya bol'shih zadach. CHtoby stat' chast'yu programmnogo kompleksa, sintaksis i semantika vvoda i vyvoda programmy dolzhny udovletvoryat' tochno opredelennym interfejsam. Programma dolzhna byt' takzhe sproektirovana takim obrazom, chtoby ispol'zovat' zaranee ogovorennyj byudzhet resursov - ob®em pamyati, ustrojstva vvoda/vyvoda, processornoe vremya. Nakonec, programmu nuzhno protestirovat' vmeste s prochimi sistemnymi komponentami vo vseh sochetaniyah, kotorye mogut vstretit'sya. |to testirovanie mozhet okazat'sya bol'shim po ob®emu, poskol'ku kolichestvo testiruemyh sluchaev rastet eksponencial'no. Ono takzhe zanimaet mnogo vremeni, tak kak skrytye oshibki vyyavlyayutsya pri neozhidannyh vzaimodejstviyah otlazhivaemyh komponentov. Komponent programmnogo kompleksa stoit, po krajnej mere, vtroe dorozhe, chem avtonomnaya programma s temi zhe funkciyami. Stoimost' mozhet uvelichit'sya, esli v sisteme mnogo komponentov. V pravom nizhnem uglu risunka 1.1 nahoditsya sistemnyj programmnyj produkt. Ot obychnoj programmy on otlichaetsya vo vseh perechislennyh vyshe otnosheniyah. I stoit, sootvetstvenno, v desyat' raz dorozhe. No eto dejstvitel'no poleznyj ob®ekt, kotoryj yavlyaetsya cel'yu bol'shinstva sistemnyh programmnyh proektov. Radosti professii Pochemu zanimat'sya programmirovaniem interesno? Kakimi radostyami voznagrazhdayutsya te, kto im zanimaetsya? Vo-pervyh, eto prosto radost', poluchaemaya pri sozdanii chego-libo svoimi rukami. Kak rebenok raduetsya, delaya kulichiki iz peska, tak i vzroslyj poluchaet udovol'stvie, sozdavaya kakie-libo veshchi, osobenno esli sam ih i pridumal. YA dumayu, chto etot vostorg - otrazhenie vostorga Gospoda, tvoryashchego mir, vostorga, proyavlyayushchegosya v individual'nosti i novizne kazhdogo listochka i kazhdoj snezhinki. Vo-vtoryh, eto udovol'stvie sozdavat' veshchi, kotorye mogut byt' polezny drugim lyudyam. Gluboko v dushe my ispytyvaem potrebnost' v tom, chtoby drugie ispol'zovali rezul'taty nashego truda i schitali ih poleznymi. V etom otnoshenii programmnaya sistema po svoej suti - to zhe, chto i izgotovlennaya rebenkom podstavka dlya karandashej "pape v podarok". V-tret'ih, eto ocharovanie sozdaniya slozhnyh golovolomnyh ob®ektov, sostoyashchih iz vzaimodejstvuyushchih dvizhushchihsya chastej i nablyudeniya za ih rabotoj, krug za krugom demonstriruyushchej rezul'taty iznachal'no zalozhennyh principov. Komp'yuter s rabotayushchej na nem programmoj obladaet dovedennym do vysshego predela ocharovaniem igornogo ili muzykal'nogo avtomata. V-chetvertyh, eto radost', poluchaemaya ot neizmennogo uznavaniya novogo, proistekayushchego iz nepovtorimoj prirody zadachi. V tom ili inom otnoshenii zadacha vsegda stavitsya po-novomu, i tot, kto ee reshaet, poluchaet novye znaniya - libo prakticheskie, libo teoreticheskie, libo te i drugie vmeste. Nakonec, naslazhdenie dostavlyaet rabota so stol' podatlivym materialom. Programmist, podobno poetu, rabotaet pochti neposredstvenno s chistoj mysl'yu. On stroit svoi zamki v vozduhe i iz vozduha, tvorya siloj voobrazheniya. Trudno najti drugoj material, ispol'zuemyj v tvorchestve, kotoryj stol' zhe gibok, prost dlya shlifovki ili pererabotki i dostupen dlya voploshcheniya grandioznyh zamyslov. (Kak my pozdnee uvidim, takaya podatlivost' tait svoi problemy.) Odnako programmnaya konstrukciya, v otlichie ot poeticheskih tvorenij, real'na, v tom smysle, chto ona dvizhetsya i rabotaet, proizvodya vidimye rezul'taty, kotorye otdelimy ot samoj konstrukcii. Ona pechataet rezul'taty, risuet kartinki, proizvodit zvuki, privodit v dvizhenie rychagi. V nashe vremya osushchestvilos' volshebstvo mifa i legendy. S klaviatury vvoditsya vernoe zaklinanie, i ekran monitora ozhivaet, pokazyvaya to, chego nikogda ne bylo i ne moglo byt'. Takim obrazom, programmirovanie dostavlyaet udovol'stvie, poskol'ku otvechaet glubokoj vnutrennej potrebnosti v tvorchestve i udovletvoryaet chuvstvennye potrebnosti, kotorye est' u vseh nas. Pechali professii Ne vse, odnako, v radost', i esli predvidet' prisushchie etomu remeslu ogorcheniya, to oni legche perenosyatsya. Vo-pervyh, neobhodima bezoshibochnaya tochnost' dejstvij. V etom otnoshenii komp'yuter takzhe napominaet volshebstvo. Odin nevernyj znak, odna pauza v zaklinanii, i chudo ne sostoyalos'. CHeloveku nesvojstvenno sovershenstvo, i ono yavlyaetsya neobhodimym lish' v nemnogih sferah ego deyatel'nosti. Mne kazhetsya, chto pri osvoenii programmirovaniya trudnee vsego privyknut' k trebovaniyu sovershenstva.1 Krome togo, postanovka zadach, obespechenie resursami i predostavlenie informacii osushchestvlyaetsya drugimi lyud'mi. Redko udaetsya kontrolirovat' usloviya raboty i dazhe ee celi. Na yazyke administrirovaniya eto oznachaet, chto polnomochiya nizhe otvetstvennosti. Vprochem, pohozhe, chto v lyuboj rabote, gde dolzhen byt' poluchen rezul'tat, formal'naya vlast' nikogda ne soizmerima s otvetstvennost'yu. Na praktike fakticheskaya (v protivopolozhnost' formal'noj) vlast' priobretaetsya v rezul'tate uspeshnogo vypolneniya zadach. Zavisimost' ot drugih imeet osobenno nepriyatnuyu sistemnomu programmistu storonu. On nahoditsya v zavisimosti ot programm, napisannyh drugimi lyud'mi, i eti programmy zachastuyu ploho sproektirovany, slabo napisany, polucheny v nepolnom vide (bez ishodnogo teksta i kontrol'nyh primerov) i ploho dokumentirovany. Poetomu programmistu prihoditsya tratit' mnogie chasy na izuchenie i ispravlenie veshchej, kotorye, v ideale, dolzhny byt' polnymi, dostupnymi i godnymi k ispol'zovaniyu. Sleduyushchij "minus" svyazan s tem, razrabotka grandioznyh idej - eto udovol'stvie, a poisk parshivyh malen'kih "zhuchkov" - eto vsego lish' rabota. V kazhdom tvorcheskom dele byvayut uzhasnye periody odnoobraznogo i kropotlivogo truda, i programmirovanie ne yavlyaetsya isklyucheniem. Dalee okazyvaetsya, chto pri otladke programmy shodimost' yavlyaetsya linejnoj, esli ne huzhe, hotya mozhno bylo predpolagat' nekoe kvadratichnoe priblizhenie k okonchaniyu. V itoge otladka prodolzhaetsya dolgo, prichem na poisk poslednih bolee slozhnyh oshibok uhodit bol'she vremeni, chem na otyskanie pervyh. Poslednyaya gorest', a chasto i poslednyaya kaplya, - to, chto produkt, na kotoryj bylo polozheno stol'ko truda, okazyvaetsya ustarevshim v moment ego zaversheniya (ili dazhe ran'she). Kollegi i konkurenty uzhe s pylom rabotayut nad novymi i luchshimi ideyami. I unichtozhenie ploda vashej mysli uzhe ne tol'ko zadumano, no i zaplanirovano. Na samom dele polozhenie obychno luchshe, chem kazhetsya. V to vremya kak vash produkt uzhe zavershen, etot novyj i luchshij produkt, kak pravilo, otsutstvuet na rynke, o nem lish' mnogo razgovorov, i dlya ego razrabotki potrebuyutsya mesyacy. Nastoyashchij tigr ne para bumazhnomu, esli trebuetsya real'noe ispol'zovanie. Real'noe sushchestvovanie imeet preimushchestva. Konechno, tehnologicheskaya osnova razrabotki vsegda razvivaetsya. Kak tol'ko razrabotka proekta zakonchena, on stanovitsya ustarevshim v smysle zalozhennyh v nem koncepcij. No dlya osushchestvleniya real'nogo proekta neobhodimo razbienie na stadii i urovni. Sudit' o tom, yavlyaetsya li nekaya realizaciya ustarevshej, mozhno lish' sravnivaya ee s drugimi sushchestvuyushchimi realizaciyami, a ne s nerealizovannymi ideyami. Trudnost' i cel' sostoyat v tom, chtoby najti real'nye resheniya dlya real'nyh zadach v ustanovlennye sroki, ispol'zuya imeyushchiesya resursy. Takovo programmirovanie - i smolyanaya yama, v kotoroj uvyazli mnogie proekty, i tvorchestvo so svoimi radostyami i pechalyami. Dlya mnogih radosti znachat gorazdo bol'she, chem pechali. Dlya nih i napisana eta kniga v popytke prolozhit' kakie-to mostki cherez eto boloto.

    Glava 2. |tot mificheskij "cheloveko-mesyac"

CHtoby prigotovit' vkusnuyu pishchu, trebuetsya vremya. Esli vam prishlos' zhdat', to lish' potomu, chto my hotim luchshe obsluzhit' vas i dostavit' vam udovol'stvie. MENYU RESTORANA "ANTUAN" VNXYU-ORLEANE Programmnye proekty chashche provalivayutsya iz-za nehvatki kalendarnogo vremeni, chem po vsem ostal'nym prichinam vmeste vzyatym. Pochemu eta prichina neudach stol' rasprostranena? Vo-pervyh, slabo razvity nashi metody ocenok. V sushchnosti, oni otrazhayut molchalivoe i sovershenno nevernoe predpolozhenie, chto vse budet idti horosho. Vo-vtoryh, nashi metody ocenki oshibochno putayut dostignutyj progress s zatrachennymi usiliyami, neyavno dopuskaya, chto skorost' vypolneniya proekta proporcional'na kolichestvu zanyatyh v nem sotrudnikov. V-tret'ih, poskol'ku menedzhery programmnyh proektov ne uvereny v svoih ocenkah, im chasto nedostaet vezhlivogo upryamstva, kak u shef-povara restorana "Antuan". V-chetvertyh, vypolnenie grafika rabot slabo kontroliruetsya. Tipovye oprobovannye v drugih inzhenernyh disciplinah metody schitayutsya radikal'nymi novovvedeniyami pri razrabotke programmnogo obespecheniya. V-pyatyh, pri obnaruzhenii otstavaniya ot grafika estestvennoj i obshcheprinyatoj reakciej yavlyaetsya uvelichenie chisla razrabotchikov. |to vse ravno, chto tushit' plamya benzinom. V rezul'tate dela idut znachitel'no huzhe. CHem sil'nee plamya, tem bol'she nuzhno benzina, i v itoge etot put' privodit k katastrofe. Kontrol' vypolneniya grafika budet predmetom otdel'nogo razgovora. Rassmotrim bolee podrobno ostal'nye aspekty problemy. Optimizm Vse programmisty - optimisty. Vozmozhno, eta sovremennaya raznovidnost' koldovstva osobenno privlekatel'na dlya teh, kto verit v heppi-endy i dobryh fej. Vozmozhno, sotni neudach ottalkivayut vseh, krome teh, kto privyk sosredotochivat'sya na konechnoj celi. A mozhet byt', delo vsego lish' v tom, chto komp'yutery i programmisty molody, a molodosti svojstven optimizm. Kak by to ni bylo, v rezul'tate odno: "Na etot raz ona tochno pojdet!" Ili : "YA tol'ko chto vyyavil poslednyuyu oshibku!" Itak, v osnove planirovaniya razrabotki programm lezhit lozhnoe dopushchenie, chto vse budet horosho, t.e. kazhdaya zadacha zajmet stol'ko vremeni, skol'ko "dolzhna" zanyat'. Glubokij optimizm programmistov zasluzhivaet bolee ser'eznogo izucheniya. Doroti Sejers (Dorothy Cayers) v svoej prevoshodnoj knige "Razum tvorca" ("The Mind of the Maker") vydelyaet v tvorcheskoj deyatel'nosti tri stadii: zamysel, realizaciyu, vzaimodejstvie. Sootvetstvenno, kniga, komp'yuter ili programma snachala voznikayut kak ideal'noe postroenie, sushchestvuyushchee ne vo vremeni i prostranstve, a lish' v mozgu svoego sozdatelya. Realizaciya zhe vo vremeni i prostranstve proishodit s pomoshch'yu pera, chernil, bumagi, libo - provodov, kremniya i ferrita. Tvorenie budet zaversheno, kogda kto-libo prochtet knigu, vospol'zuetsya komp'yuterom ili zapustit programmu, tem samym vstupiv vo vzaimodejstvie s razumom ih sozdatelya. |to opisanie ispol'zuemoe Sejers dlya osveshcheniya ne tol'ko tvorcheskoj deyatel'nosti cheloveka, no i hristianskogo dogmata Troicy, pomozhet nam v nashej tekushchej zadache. Dlya cheloveka, kotoryj chto-to sozdaet, nepolnota i protivorechivost' idej vyyavlyayutsya tol'ko pri ih realizacii. Poetomu dlya teoretika izlozhenie na bumage, eksperimentirovanie, izgotovlenie yavlyaetsya neot®emlemymi chastyami tvorcheskogo processa. Vo mnogih vidah tvorcheskoj deyatel'nost' material s trudom poddaetsya obrabotke. Derevo koletsya, kraski pachkayutsya, elektricheskie cepi "zvenyat". |ti fizicheskie ogranicheniya suzhayut krug idej, kotorye mogut byt' vyrazheny, a takzhe sozdayut neozhidannye trudnosti pri realizacii. Realizaciya, takim obrazom, trebuet sil i vremeni kak iz-za fizicheskogo materiala, tak i vvidu neadekvatnosti osnovopolagayushchih idej. Bol'shuyu chast' zatrudnenij pri realizacii my sklonny ob®yasnyat' nedostatkami fizicheskogo materiala, poskol'ku on "chuzhd" nam - v otlichie ot idej, kotorymi my gordimsya. Pri sozdanii zhe programm my imeem delo s chrezmerno podatlivym materialom. Programmist osushchestvlyaet svoi postroeniya na osnove chistogo myshleniya - ponyatij i ochen' gibkih ih predstavlenij. Poskol'ku material stol' podatliv, my ne ozhidaem trudnostej pri realizacii, otsyuda i nash glubokij optimizm. Iz-za oshibochnosti nashih idej voznikayut oshibki v programmah. Sledovatel'no, nash optimizm ne imeet opravdaniya. Dlya otdel'noj zadachi dopushchenie, chto vse bude horosho, okazyvaet na grafik rabot veroyatnostnyj effekt. Vse mozhet dejstvitel'no idti po planu, poskol'ku est' nekotoroe raspredelenie veroyatnosti dlya vozmozhnoj zaderzhki i sushchestvuet konechnaya veroyatnost' togo, chto zaderzhki ne budet. Odnako bol'shoj programmnyj proekt sostoit iz mnozhestva zadach, chast' iz kotoryh mozhet byt' nachata tol'ko posle okonchaniya drugih. Veroyatnost' togo, chto vse zadachi budut zaversheny v srok, beskonechno mala. CHeloveko-mesyac Vtoraya oshibka rassuzhdenij zaklyuchena v samoj edinice izmereniya, ispol'zuemoj pri ocenivanii i planirovanii: cheloveko-mesyac. Stoimost' dejstvitel'no izmeryaetsya kak proizvedeniya chisla zanyatyh na kolichestvo zatrachennyh mesyacev. No ne dostignutyj rezul'tat. Poetomu ispol'zovanie cheloveko-mesyaca kak edinicy izmereniya ob®ema raboty yavlyaetsya opasnym zabluzhdeniem. Ris. 2.1 Zavisimost' vremeni ot chisla zanyatyh - polnost'yu razdelimaya zadacha CHislo zanyatyh i chislo mesyacev yavlyayutsya vzaimozamenyaemymi velichinami lish' togda, kogda zadachu mozhno raspredelit' sredi ryada rabotnikov, kotorye ne imeyut mezhdu soboj vzaimosvyazi (ris. 2.1). |to verno, kogda zhnut pshenicu ili sobirayut hlopok, no v sistemnom programmirovanii eto daleko ne tak. Ris. 2.2 Zavisimost' vremeni ot chisla zanyatyh - nerazdelimaya zadacha Esli zadachu nel'zya razbit' na chasti, poskol'ku sushchestvuyut ogranicheniya na posledovatel'nost' vypolneniya etapov, to uvelichenie zatrat ne okazyvaet vliyaniya na grafik (ris. 2.2). CHtoby rodit' rebenka trebuetsya devyat' mesyacev nezavisimo ot togo, skol'ko zhenshchin privlecheno k resheniyu dannoj zadachi. Mnogie zadachi programmirovaniya otnosyatsya k etomu tipu, poskol'ku otladka po svoej suti nosit posledovatel'nyj harakter. Ris. 2.3 Zavisimost' vremeni ot chisla zanyatyh - razdelimaya zadacha, trebuyushchaya obmena dannymi Dlya zadach, kotorye mogut byt' razbity na chasti, no trebuyut obmena dannymi mezhdu podzadachami, zatraty na obmen dannymi dolzhny byt' dobavleny k obshchemu ob®emu neobhodimyh rabot. Poetomu dostizhimyj nailuchshij rezul'tat okazyvaetsya neskol'ko huzhe, chem prostoe sootvetstvie chisla zanyatyh i kolichestva mesyacev (ris. 2.3). Dopolnitel'naya nagruzka sostoit iz dvuh chastej - obucheniya i obmena dannymi. Kazhdogo rabotnika nuzhno obuchit' tehnologii, celyam proekta, obshchej strategii i planu raboty. |to obuchenie nel'zya razbit' na chasti, poetomu dannaya chast' zatrat izmenyaetsya linejno v zavisimosti ot chisla zanyatyh. Ris. 2.4 Zavisimost' vremeni ot chisla zanyatyh - zadacha so slozhnymi vzaimosvyazyami S obmenom dannymi delo obstoit huzhe. Esli vse chasti zadaniya dolzhny byt' otdel'no skoordinirovany mezhdu soboj, to zatraty vozrastayut kak n(n-2)/2. Dlya treh rabotnikov trebuetsya vtroe bol'she poparnogo obshcheniya, chem dlya dvuh, dlya chetyreh - vshestero. Esli pomimo etogo voznikaet neobhodimost' v soveshchaniyah treh, chetyreh i t.d. rabotnikov dlya sovmestnogo resheniya voprosov, polozhenie stanovitsya eshche huzhe. Dopolnitel'nye zatraty na obmen dannymi mogut polnost'yu obescenit' rezul'tat drobleniya ishodnoj zadachi i privesti k polozheniyu, opisyvaemomu risunkom 2.4. Poskol'ku sozdanie programmnogo produkta yavlyaetsya po suti sistemnym proektom - praktikoj slozhnyh vzaimosvyazej, zatraty na obmen dannymi veliki i bystro nachinayut preobladat' nad sokrashcheniem srokov, dostigaemym v rezul'tate razbieniya zadachi na bolee melkie podzadachi. V etom sluchae privlechenie dopolnitel'nyh rabotnikov ne sokrashchaet, a udlinyaet grafik rabot. Sistemnoe testirovanie Iz vseh elementov grafika rabot naibol'shemu vozdejstviyu so storony ogranichenij na posledovatel'nost' vypolneniya dejstvij podverzheny otladka komponentov i sistemnoe testirovanie. Krome togo, zatraty vremeni zavisyat ot kolichestva vyyavlennyh oshibok i ot togo, naskol'ko oni "skrytye". Teoreticheski, oshibok byt' ne dolzhno. Iz-za svoego optimizma my obychno sklonny nedoocenivat' dejstvitel'noe kolichestvo oshibok. Poetomu v programmirovanii priderzhivat'sya grafikov rabot obychno trudnee vsego pri otladke. V techenie ryada let pri planirovanii razrabotki programmnogo obespecheniya ya pol'zuyus' sleduyushchim empiricheskim pravilom: 1/3 - planirovanie, 1/6 - napisanie programm, 1/4 - testirovanie komponentov i predvaritel'noe sistemnoe testirovanie, 1/4 - sistemnoe testirovanie pri nalichii vseh komponentov. |to pravilo imeet neskol'ko vazhnyh razlichij s obshcheprinyatym planirovaniem: 1. Na planirovanie otvoditsya bol'she vremeni, chem obychno. I vse ravno etogo vremeni edva dostatochno dlya razrabotki podrobnyh i nadezhnyh tehnicheskih uslovij i nedostatochno dlya provedeniya issledovatel'skih rabot ili poiska novejshih tehnologij. 2. Polovina grafika rabot, otvedennaya na otladku zakonchennogo koda, znachitel'no vyshe normy. 3. Ta chast', kotoruyu legko ocenit', t.e. napisanie koda, zanimaet vsego odnu shestuyu obshchego vremeni. Izuchaya proekty, grafik kotoryh byl sostavlen tradicionnym obrazom, ya obnaruzhil, chto nemnogie iz nih otvodili po grafiku polovinu vremeni na otladku, no na praktike v bol'shinstve sluchaev tratili na nee polovinu fakticheskogo vremeni. Mnogie proekty ukladyvalis' v grafik na vseh etapah, isklyuchaya sistemnoe testirovanie.2 Osobenno katastroficheskie posledstviya mozhet imet' nedostatok vremeni dlya sistemnogo testirovaniya. Poskol'ku zaderzhka proishodit v konechnoj chasti grafika, nikto ne podozrevaet o tom, chto grafik nahoditsya pod ugrozoj sryva vplot' do dnya sdachi produkta. Plohie vesti, poluchennye pozdno i bez preduprezhdeniya, obeskurazhivayut klientov i menedzherov. Bolee togo, zaderzhka na etom etape imeet osobenno tyazhelye material'nye i psihologicheskie posledstviya. Proekt osushchestvlyaetsya pri polnoj ukomplektovannosti rabotnikami i maksimal'nyh finansovyh izderzhkah. CHto vazhnee, programmnoe obespechenie dolzhno obespechit' podderzhku drugoj delovoj aktivnosti (postavki komp'yuterov, zapuska novyh proizvodstvennyh moshchnostej i t.p.), i svyazannye s zaderzhkoj vtorichnye izderzhki ochen' vysoki. Na praktike eti vtorichnye izderzhki mogut byt' vyshe, chem vse prochie. Poetomu ochen' vazhno v iznachal'nom grafike rabot otvesti dostatochno vremeni dlya sistemnogo testirovaniya. Robost' v ocenkah Dlya programmista, kak i dlya povara, davlenie so storony hozyaina mozhet opredelyat' zaplanirovannyj srok zaversheniya zadachi, no ne mozhet opredelyat' vremya ee fakticheskogo zaversheniya. Omlet, obeshchannyj cherez dve minuty, mozhet uspeshno zharit'sya, no esli cherez dve minuty on ne gotov, to u klienta est' dve vozmozhnosti: zhdat' eshche ili s®est' ego syrym. Tot zhe vybor vstaet i pered zakazchikom programmnogo obespecheniya. U povara est' eshche odna vozmozhnost': dobavit' zharu. V rezul'tate omlet chasto okazyvaetsya beznadezhno isporchennym: gorelym s odnogo kraya i syrym - s drugogo. YA ne dumayu, chto u menedzherov programmnyh produktov men'she hrabrosti ili tverdosti, chem u povarov ili drugih menedzherov v inzhenernyh oblastyah. No lipovye grafiki, nacelennye na zhelatel'nuyu hozyainu datu, vstrechayutsya zdes' znachitel'no chashche, chem v lyubyh drugih inzhenernyh oblastyah. Ochen' tyazhelo, riskuya poteryat' rabochee mesto, s energiej i lyubeznost'yu otstaivat' srok, kotoryj opredelen bez primeneniya kakih-libo kolichestvennyh metodov pri nedostatke dannyh i podkreplen, v osnovnom, intuiciej menedzhera. Ochevidno, neobhodimo sdelat' dve veshchi. My dolzhny poluchit' i sdelat' obshchedostupnymi chislennye dannye, harakterizuyushchie proizvoditel'nost', chastotu programmnyh oshibok, metody ocenki i t.d. Vsya otrasl' mozhet tol'ko vyigrat' ot opublikovaniya takih dannyh. Poka metody ocenivaniya ne poluchat bolee prochnoj osnovy, menedzheram ostaetsya tol'ko muzhat'sya i zashchishchat' svoi prognozy, utverzhdaya, chto polagat'sya na ih slabuyu intuiciyu vse zhe luchshe, chem osnovyvat'sya na odnih zhelaniyah. Dejstviya pri sryve grafika CHto delayut, kogda vazhnyj programmnyj proekt nachinaet otstavat' ot grafika? Estestvenno, dobavlyayut lyudej. Kak pokazyvayut risunki 2.1-2.4, eto ne vsegda pomogaet. Rassmotrim primer.3 Predpolozhim, chto trudoemkost' zadachi ocenivaetsya v 12 cheloveko-mesyacev, i tri cheloveka dolzhny vypolnit' ee za 4 mesyaca, prichem v konce kazhdogo mesyaca imeyutsya chetyre kontrol'nye tochki A, B, C i D, v kotoryh mozhno proizvesti izmereniya (ris. 2.5). Ris. 2.5 Predpolozhim teper', chto pervaya kontrol'naya tochka byla dostignuta lish' po istechenii dvuh mesyacev. Kakie al'ternativy imeyutsya u menedzhera? 1. Dopustim, chto neobhodimo soblyusti srok vypolneniya zadachi, i oshibochno ocenena byla tol'ko pervaya chast' zadachi, t.e. risunok 2.6 verno otrazhaet polozhenie. Znachit, ostaetsya 9 cheloveko-mesyacev trudozatrat i dva mesyaca, poetomu ponadobitsya 4½ cheloveka, i k troim imeyushchimsya nuzhno dobavit' eshche dvoih. Ris. 2.6 2. Dopustim, chto neobhodimo soblyusti srok vypolneniya zadachi, i odinakovo zanizhena byla vsya ocenka , t.e. polozhenie sootvetstvuet risunku 2.7. Znachit, ostaetsya 18 cheloveko-mesyacev trudozatrat i dva mesyaca, poetomu ponadobitsya 9 chelovek. K troim imeyushchimsya nuzhno dobavit' eshche shesteryh. Ris. 2.7 3. Izmenit' grafik. Mne nravitsya zamechanie, sdelannoe P. Faggom (P. Fagg), opytnym inzhenerom po vychislitel'noj tehnike: "Malen'kih zaderzhek ne byvaet". |to oznachaet, chto v novom grafike dolzhno byt' dostatochno vremeni, chtoby rabota byla ispolnena tshchatel'no i polnost'yu, i ne prishlos' by vnov' peredelyvat' grafik. 4. Sokratit' zadachu. Na praktike etim vsegda i konchaetsya, kogda komanda obnaruzhivaet, chto ne ukladyvaetsya v grafik. Kogda ochen' vysoki vtorichnye izderzhki, eto edinstvennoe, chto mozhno sdelat'. Menedzheru predostavlyaetsya vozmozhnost' oficial'no i akkuratno sokratit' zadachu, izmenit' grafik, libo nablyudat', kak zadacha molcha urezaetsya pri pospeshnom izmenenii proekta i nepolnom testirovanii. V pervyh dvuh sluchayah nastaivat' na tom, chtoby zadacha v neizmennom vide byla vypolnena za chetyre mesyaca, chrevato katastrofoj. Rassmotrim, k primeru, vosstanovitel'nyj effekt pervoj al'ternativy (ris. 2.8). Dvoe novyh rabotnikov, kakimi by znayushchimi oni ni byli, i kak by bystro ne udalos' ih najti, dolzhny izuchit' zadachu s pomoshch'yu odnogo iz opytnyh razrabotchikov. Esli dlya etogo potrebuetsya mesyac, to 3 cheloveko-mesyaca budut potracheny na rabotu, kotoraya ne uchityvaetsya v ishodnoj ocenke. Krome togo, zadacha, razbitaya pervonachal'no na tri potoka, dolzhna byt' teper' perekroena na pyat' chastej. Poetomu chast' uzhe sdelannoj raboty budet poteryana, a sistemnoe testirovanie nuzhno budet prodlit'. V rezul'tate v konce tret'ego mesyaca ostanetsya raboty sushchestvenno bol'she, chem na 7 cheloveko-mesyacev, a v rasporyazhenii budet 5 podgotovlennyh chelovek i odin mesyac. Soglasno risunku 2.8 produkt budet zapazdyvat' tak zhe, kak esli by ni odnogo cheloveka ne bylo dobavleno (sm. ris. 2.6). Esli rasschityvat' upravit'sya za chetyre mesyaca s uchetom tol'ko vremeni obucheniya, no ne pereraspredeleniya zadach i dopolnitel'nogo sistemnogo testirovaniya, to v konce vtorogo mesyaca potrebuetsya dobavit' 4, a ne 2 cheloveka. CHtoby kompensirovat' vozdejstvie pereraspredeleniya zadach i sistemnogo testirovaniya, potrebuyutsya eshche novye lyudi. Teper', odnako, komanda sostoit ne iz 3, a, po krajnej mere, 7 chelovek, i takie voprosy, kak organizaciya komandy i raspredelenie zadach priobretayut novyj kachestvennyj uroven'. Obratite vnimanie, chto k koncu tret'ego mesyaca delo vyglyadit ves'ma mrachno. Nesmotrya na vse administrativnye usiliya kontrol'naya tochka, namechennaya na 1 marta, ne dostignuta. Voznikaet sil'nyj soblazn povtorit' cikl, dobaviv eshche lyudej. |to bezumnoe reshenie. Ris. 2.8 V predshestvuyushchih rassuzhdeniyah predpolagalos', chto tol'ko pervaya kontrol'naya tochka byla neverno rasschitana. Esli 1 marta sdelat' konservativnoe predpolozhenie, chto ves' grafik byl izlishne optimistichen, kak otrazheno na risunke 2.7, trebuetsya dobavit' 6 chelovek k ishodnoj zadache. Raschet vozdejstviya obucheniya, pereraspredeleniya zadach i sistemnogo testirovaniya predostavlyaetsya sdelat' chitatelyu v kachestve uprazhneniya. Net somnenij, chto pri popytke ulozhit'sya v srok v itoge poluchitsya hudshij produkt, chem pri izmenenii grafika i sohranenii pervonachal'nyh troih chelovek bez usileniya. Krajne uproshchaya, sformuliruem Zakon Bruksa: Esli proekt ne ukladyvaetsya v sroki, to dobavlenie rabochej sily zaderzhit ego eshche bol'she. |to razvenchivaet mif o cheloveko-mesyace. Prodolzhitel'nost' osushchestvleniya proekta zavisit ot ogranichenij, nakladyvaemyh posledovatel'nost'yu rabot. Maksimal'noe kolichestvo razrabotchikov zavisit ot chisla nezavisimyh podzadach. |ti dve velichiny pozvolyayut poluchit' grafik rabot, v kotorom budet men'she zanyatyh razrabotchikov i bol'she mesyacev. (Edinstvennaya opasnost' zaklyuchaetsya v vozmozhnom ustarevanii produkta.) Nel'zya, odnako, sostavit' rabotayushchie grafiki, v kotoryh zanyato bol'she lyudej i trebuetsya men'she vremeni. Programmnye proekty chashche provalivayutsya iz-za nehvatki kalendarnogo vremeni, chem po vsem ostal'nym prichinam vmeste vzyatym.

    Glava 3. Opracionnaya brigada

|ti issledovaniya vyyavili bol'shie individual'nye razlichiya v proizvoditel'nosti mezhdu luchshimi i hudshimi rabotnikami, chasto na poryadok velichin. SAKMAN, |RIKSON I GRANT1 Na vstrechah komp'yuternyh specialistov mozhno postoyanno slyshat' utverzhdeniya molodyh menedzherov programmnyh proektov, chto im predpochtitel'nej nebol'shie deyatel'nye komandy pervoklassnyh specialistov, chem proekty, v kotoryh uchastvuyut sotni programmistov, chto podrazumevaet ih srednij uroven'. I vsem nam tozhe. Takoe naivnoe predstavlenie al'ternativ uhodit ot resheniya slozhnoj zadachi - kak sozdavat' bol'shie sistemy v razumnye sroki? Rassmotrim etot vopros bolee podrobno so vseh storon. Problema Menedzhery programmnyh proektov davno ponyali, chto horoshie i plohie programmisty ochen' sil'no razlichayutsya mezhdu soboj po proizvoditel'nosti. Odnako real'no izmerennye velichiny porazitel'ny. V odnom iz issledovanij Sakman (Sackman), |rikson (Erikson) i Grant (Grant) izmeryali proizvoditel'nost' truda v gruppe opytnyh programmistov. Vnutri odnoj lish' etoj gruppy sootnoshenie mezhdu luchshimi i hudshimi rezul'tatami sostavilo primerno 10:1 po proizvoditel'nosti truda i 5:1 po skorosti raboty programm i trebuemoj dlya nih pamyati! Koroche, programmist, zarabatyvayushchij 20 tysyach dollarov v god, mozhet byt' v desyat' raz produktivnee programmista, zarabatyvayushchego 10 tysyach dollarov. Pravda, vozmozhno i obratnoe. Poluchennye dannye ne vyyavili kakoj-libo korrelyacii mezhdu stazhem raboty i proizvoditel'nost'yu. (YA ne uveren, chto eto vsegda spravedlivo.) Vyshe ya dokazal, chto samo chislo razrabotchikov, dejstviya kotoryh nuzhno soglasovyvat', okazyvaet vliyanie na stoimost' proekta, poskol'ku znachitel'naya chast' izderzhek vyzvana neobhodimost'yu obshcheniya i ustraneniya otricatel'nyh posledstvij razobshchennosti (sistemnaya otladka). |to takzhe navodit na mysl', chto zhelatel'no razrabatyvat' sistemy vozmozhno men'shim chislom lyudej. Dejstvitel'no, opyt razrabotki bol'shih programmnyh sistem, kak pravilo, pokazyvaet, chto podhod s pozicij gruboj sily vlechet udorozhanie, zamedlennost', neeffektivnost', a sozdavaemye v rezul'tate sistemy ne yavlyayutsya konceptual'no celostnymi. Spisok, illyustriruyushchij eto, beskonechen: OS/360, Exec 8, Scop 6600, Multics, TSS, SAGE i drugie. Vyvod prost: esli nad proektom rabotayut 200 chelovek, vklyuchaya menedzherov, yavlyayushchihsya naibolee znayushchimi i opytnymi programmistami, uvol'te 175 bojcov, i pust' menedzhery snova zajmutsya programmirovaniem. Davajte rassmotrim eto reshenie. S odnoj storony, emu ne udaetsya priblizit'sya k idealu nebol'shoj aktivnoj komandy, v kotoroj, po obshchemu priznaniyu, dolzhno byt' ne bolee 10 chelovek. Poetomu razmer brigady predpolagaet nalichie kak minimum dvuh urovnej upravleniya, ili okolo pyati menedzherov. Potrebuyutsya dopolnitel'ny finansovye rashody, sotrudniki, mesto dlya raboty, sekretari i operatory mashin. S drugoj storony, ishodnaya komanda iz 200 chelovek imela chislennost', nedostatochnuyu dlya sozdaniya dejstvitel'no krupnyh sistem metodom gruboj sily. Rassmotrim, k primeru, OS/360. Odno vremya v ee sozdanii bylo zanyato bol'she 1000 chelovek - programmistov, sostavitelej dokumentacii, operatorov, klerkov, sekretarej, menedzherov, vspomogatel'nyh grupp i t.d. S 1963 po 1966 god na ee proektirovanie, realizaciyu i napisanie dokumentacii bylo zatracheno, veroyatno, okolo 5000 cheloveko-let. Esli by strogo soblyudalas' proporciya mezhdu kolichestvom zanyatyh i prodolzhitel'nost'yu rabot, nashej predpolagaemoj komande iz dvuhsot chelovek potrebovalos' by 25 let, chtoby dovesti produkt do segodnyashnego urovnya! V etom i sostoit iz®yan idei malen'koj aktivnoj komandy: dlya sozdaniya po- nastoyashchemu krupnyh sistem ej potrebuetsya slishkom mnogo vremeni. Posmotrim, kak razrabotka OS/360 osushchestvlyalas' by malen'koj aktivnoj komandoj, dopustim, iz 10 chelovek. Polozhim, chto oni v sem' raz bolee produktivny srednih programmistov (chto daleko ot istiny). Dopustim, chto umen'shenie ob®ema obshcheniya blagodarya malochislennosti komandy pozvolilo eshche v sem' raz povysit' proizvoditel'nost'. Dopustim, chto na protyazhenii vsego proekta rabotaet odna i ta zhe komanda. Takim obrazom, 5000/(10*7*7)=10, t.e. rabotu v 5000 cheloveko-let oni vypolnyat za 10 let. Budet li produkt predstavlyat' interes cherez 10 let posle nachala razrabotki ili ustareet blagodarya stremitel'nomu razvitiyu programmnyh tehnologij? Dilemma predstavlyaetsya zhestokoj. Dlya effektivnosti i konceptual'noj celostnosti predpochtitel'nee, chtoby proektirovanie i sozdanie sistemy osushchestvili neskol'ko svetlyh golov. Odnako dlya bol'shih sistem zhelatel'no postavit' pod ruzh'e znachitel'nyj kontingent, chtoby produkt mog uvidet' svet vovremya. Kak mozhno primirit' eti dva zhelaniya? Predlozhenie Millza Predlozhenie Harlana Millza daet svezhee i tvorcheskoe reshenie2,3. Millz predlozhil, chtoby na kazhdom uchastke raboty byla komanda razrabotchikov, organizovannaya napodobie brigady hirurgov, a ne myasnikov. Imeetsya v vidu, chto ne kazhdyj uchastnik gruppy budet vrezat'sya v zadachu, no rezat' budet odin, a ostal'nye okazyvat' emu vsevozmozhnuyu podderzhku, povyshaya ego proizvoditel'nost' i plodotvornost'. Pri nekotorom razmyshlenii yasno, chto eta ideya privedet k zhelaemomu, esli ee udastsya osushchestvit'. Lish' neskol'ko golov zanyato proektirovaniem i razrabotkoj, i v to zhe vremya mnogo rabotnikov nahoditsya na podhvate. Budet li takaya organizaciya rabotat'? Kto igraet rol' anesteziologov i operacionnyh sester v gruppe programmistov, a kak osushchestvlyaetsya razdelenie truda? CHtoby narisovat' kartinu raboty takoj komandy s vklyucheniem vseh myslimyh vidov podderzhki, ya pozvolyu sebe vol'noe obrashchenie k metaforam. Hirurg. Millz nazyvaet ego glavnym programmistom. On lichno opredelyaet tehnicheskie usloviya na funkcional'nost' i ekspluatacionnye harakteristiki programmy, proektiruet ee, pishet kod, otlazhivaet ego i sostavlyaet dokumentaciyu. On pishet na yazyke strukturnogo programmirovaniya, takom kak PL/I, i imeet pryamoj dostup k komp'yuternoj sisteme, na kotoroj ne tol'ko proizvoditsya otladka, no i sohranyayutsya razlichnye versii ego programm s vozmozhnost'yu legkoj modifikacii fajlov, a takzhe osushchestvlyaet redaktirovanie dokumentacii. On dolzhen obladat' bol'shim talantom, stazhem raboty svyshe desyati let i sushchestvennymi znaniyami v sistemnyh i prikladnyh oblastyah, budto prikladnaya matematika, obrabotka delovyh dannyh ili chto-libo inoe. Vtoroj pilot. |to vtoroe "ya" hirurga, mozhet vypolnyat' lyubuyu ego rabotu, no menee opyten. Ego glavnaya zadacha - uchastvovat' v proektirovanii, gde on dolzhen dumat', obsuzhdat' i ocenivat'. Hirurg ispytyvaet na nem svoi idei, no ne svyazan ego predlozheniyami. CHasto vtoroj pilot predstavlyaet svoyu brigadu pri obsuzhdenii s drugimi gruppami funkcij i interfejsa. On horosho znaet ves' kod programmy. On issleduet vozmozhnosti al'ternativnyh strategij programmirovaniya. On, ochevidno, podstrahovyvaet na sluchaj kakoj-libo bedy s hirurgom. On mozhet dazhe zanimat'sya napisaniem koda, no ne neset otvetstvennosti za kakuyu-libo ego chast'. Administrator. Hirurg - nachal'nik, i emu prinadlezhit poslednee slovo v otnoshenii personala, pribavok k zhalovan'yu, pomeshchenij i t.p., no na eti dela on dolzhen tratit' kak mozhno men'she vremeni. Poetomu emu neobhodim professional'nyj administrator, zabotoj kotorogo budut den'gi, lyudi, pomeshcheniya, mashiny, i kotoryj budet kontaktirovat' s administrativnym mehanizmom organizacii v celom. Bejker schitaet, chto na polnyj rabochij den' administrator dolzhen privlekat'sya lish' v sluchae, kogda otnosheniya s zakazchikom opredelyayut sushchestvennye yuridicheskie, kontraktnye, otchetnye ili finansovye trebovaniya k proektu. V ostal'nyh sluchayah odin administrator mozhet obsluzhivat' dve komandy. Redaktor. Obyazannost' razrabotki dokumentacii lezhit na hirurge. CHtoby ona byla maksimal'no ponyatna, on dolzhen pisat' ee sam. |to otnositsya k opisaniyam, prednaznachennyh kak dlya vneshnego, tak i dlya vnutrennego ispol'zovaniya. Zadacha redaktora - vzyat' sozdannyj hirurgom chernovik ili zapis' pod diktovku, kriticheski pererabotat', snabdit' ssylkami i bibliografiej, prorabotat' neskol'ko versij i obespechit' publikaciyu. Dva sekretarya. Administratoru i redaktoru nuzhny sekretari. Sekretar' administratora obrabatyvaet perepisku, svyazannuyu s proektom, a takzhe dokumenty, ne otnosyashchiesya k produktu. Deloproizvoditel'. On otvechaet za registraciyu vseh tehnicheskih dannyh brigady v biblioteke programmnogo produkta. On imeet sekretarskuyu podgotovku i neset otvetstvennost' za vse fajly, prednaznachennye kak dlya mashiny, tak i dlya chteniya. Vse dannye dlya vvoda v komp'yuter postupayut deloproizvoditelyu, kotoryj registriruet ih ili vvodit pri neobhodimosti s klaviatury. Listingi vyvoda takzhe postupayut k nemu dlya registracii i hraneniya. Rezul'taty samyh svezhih progonov vseh modelej zanosyatsya v zhurnal rezul'tatov, a predydushchie hranyatsya v hronologicheskom poryadke v arhive. ZHiznenno vazhnym dlya koncepcii Millza yavlyaetsya prevrashchenie programmirovaniya "iz lichnogo iskusstva v obshchestvennuyu deyatel'nost'" putem predostavleniya rezul'tatov vseh progonov vsem chlenam komandy i opredeleniya vseh programm i dannyh, kak obshchej sobstvennosti komandy, a ne ch'ej-to lichnoj. Osobye obyazannosti, vozlagaemye na deloproizvoditelya, osvobozhdayut aktivnyh programmistov ot rutinnyh rabot, sistematiziruyut i obespechivayut nadlezhashchee vypolnenie teh rutinnyh operacij, kotorymi chasto prenebregayut, i priblizhayut glavnoe, dlya chego rabotaet komanda - ee programmnyj produkt. YAsno, chto predlozhennaya koncepciya predpolagaet progon paketnyh zadanij. Esli ispol'zuyutsya interaktivnye terminaly, v osobennosti bez vozmozhnosti pechati, funkcii deloproizvoditelya ne sokrashchayutsya, no preterpevayut izmeneniya. V etom sluchae on vedet uchet vseh izmenenij, vnosimyh v obshchij ekzemplyar programmy iz lichnyh kopij, osushchestvlyaet progon vseh paketnyh zadanij i so svoego terminala osushchestvlyaet kontrol' celostnosti i rabotosposobnosti uvelichivayushchegosya v razmerah produkta. Instrumental'shchik. Blagodarya vozmozhnosti v lyuboe vremya redaktirovat' fajly i teksty i pol'zovat'sya sluzhboj interaktivnoj otladki komande redko trebuetsya svoya vychislitel'naya mashina i gruppa obsluzhivayushchego personala. No dostup k etim sluzhbam dolzhen osushchestvlyat'sya s bezuslovnoj bystrotoj i nadezhnost'yu. Tol'ko hirurg mozhet reshat', udovletvoryaet li ego rabota imeyushchihsya sluzhb. Emu neobhodim instrumental'shchik, otvetstvennyj za obespechenie dostupa k osnovnym sluzhbam, a takzhe za sozdanie, podderzhku i obnovlenie special'nyh instrumentov - v osnovnom, interaktivnyh sluzhb, kotorye trebuyutsya ego komande. U kazhdoj komandy dolzhen byt' svoj instrumental'shchik, nezavisimo ot kachestva i nadezhnosti imeyushchihsya centralizovannyh sluzhb, i ego delo obespechit' vsem neobhodimym ili zhelatel'nym instrumentom svoego hirurga, a ne drugie komandy. Instrumental'shchik obychno pishet specializirovannye utility, katalogizirovannye procedury, makrobiblioteki. Otladchik. Hirurgu potrebuetsya nabor podhodyashchih kontrol'nyh primerov dlya otladki napisannyh im fragmentov koda, a zatem i vsej programmy. Otladchik yavlyaetsya, takim obrazom, kak protivnikom, razrabatyvayushchim kontrol'nye primery dlya sistemnogo testirovaniya, ishodya iz funkcional'nyh specifikacij, tak i pomoshchnikom, gotovyashchim dannye dlya ezhednevnoj otladki. On takzhe obychno planiruet posledovatel'nost' testirovaniya i sozdanie sredy dlya testirovaniya komponentov. YAzykoved. Vskore posle poyavleniya Algol obnaruzhilos', chto v bol'shinstve vychislitel'nyh centrov est' odin-dva cheloveka, porazhayushchih svoim vladeniem tonkostyami yazyka programmirovaniya. |ti eksperty okazyvayutsya ochen' poleznymi, i s nimi chasto sovetuyutsya. Zdes' trebuetsya inoj talant, chem u hirurga, kotoryj yavlyaetsya preimushchestvenno sistemnym proektirovshchikom i myslit predstavleniyami. YAzykoved mozhet najti effektivnye sposoby ispol'zovaniya yazyka dlya resheniya slozhnyh, neyasnyh i hitroumnyh zadach. Inogda emu trebuetsya provesti nebol'shoe issledovanie (dva-tri dnya) dlya nahozhdeniya udachnoj tehnologii. Odin yazykoved mozhet rabotat' s dvumya ili tremya hirurgami. Vot takim obrazom 10 chelovek mogut vypolnyat' horosho differencirovannye i specializirovannye roli v komande programmistov, organizovannoj po obrazcu operacionnoj brigady. Kak eto rabotaet Sozdannaya nami brigada mozhet dostich' zhelaemoj celi neskol'kimi sposobami. Nad zadachej trudyatsya desyat' chelovek, sem' iz kotoryh professionaly, no sistema yavlyaetsya produktom odnogo uma, po krajnej mere dvuh, dejstvuyushchih uno animo (kak odno celoe). Obratite osoboe vnimanie na razlichie mezhdu gruppoj iz dvuh programmistov s obychnoj organizaciej i gruppoj tipa "hirurg - vtoroj pilot". Vo-pervyh, v obychnoj brigade rabotniki delyat zadachu mezhdu soboj, i kazhdyj iz nih otvechaet za zamysel i voploshchenie nekotoroj chasti. V operacionnoj brigade i hirurg, i vtoroj pilot nahodyatsya v vedenii vsego proekta i vsego programmnogo koda. |to sberigaet zatraty na raspredelenie pamyati, dostup k diskam i t.p., a takzhe obespechivaet konceptual'nuyu celostnost' produkta. Vo-vtoryh, v obychnoj brigade partnery ravny, i neizbezhnye raznoglasiya dolzhny razreshat'sya putem peregovorov ili kompromissov. Poskol'ku zadacha i resursy razdeleny, raznoglasiya otnosyatsya k obshchej strategii i interfejsam, no k nim primeshivaetsya i protivopolozhnost' interesov, naprimer, ch'yu pamyat' ispol'zovat' dlya bufera. V hirurgicheskoj brigade razlichij interesov net, a raznoglasiya edinolichno reshayutsya hirurgom. |ti dva razlichiya - otsutstvie razbieniya zadachi i otnoshenie podchinennosti - pozvolyayut hirurgicheskoj brigade dejstvovat' uno animo. Krome togo, reshayushchee vliyanie na effektivnost' okazyvaet specializaciya funkcij ostal'nyh chlenov brigady, tak kak v rezul'tate osushchestvima znachitel'no bolee prostaya shema kontaktov mezhdu sotrudnikami, kotoraya pokazana na risunke 3.1. V stat'e Bejkera3 soobshchaetsya ob odnoj proverke takoj koncepcii brigady, provedennoj v ogranichennom masshtabe. Kak i predskazyvalos', rezul'taty okazalis' velikolepnymi. Masshtabirovanie Do sih por vse bylo horosho. Problema, odnako, sostoit v tom, kak sozdavat' produkty, na kotorye sejchas uhodit ne 20 ili 30, a 5000 cheloveko-let. Brigada iz 10 chelovek mozhet byt' effektivna vne zavisimosti ot svoej organizacii, esli zadacha celikom nahoditsya v ee kompetencii. No kak ispol'zovat' ideyu operacionnoj brigady v zadachah, dlya vypolneniya kotoryh privlekayutsya sotni lyudej? Uspeh pri masshtabirovanii obuslovlivaetsya korennym uluchsheniem konceptual'nogo edinstva kazhdogo uchastka, ved' kolichestvo proektirovshchikov umen'shilos' v sem' raz. Poetomu mozhno privlech' k rabote nad zadachej 200 chelovek, i neobhodimost' koordinacii umstvennyh usilij potrebuetsya vsego dlya 20 iz nih - hirurgov. Ris. 3.1 Shema kontaktov mezhdu sotrudnikami v brigade iz 10 chelovek Odnako zadacha koordinacii trebuet ispol'zovaniya osobyh metodov, obsuzhdaemyh v posleduyushchih glavah. Poka dostatochno skazat', chto vsya sistema v celom dolzhna obladat' konceptual'nym edinstvom, i neobhodim sistemnyj arhitektor, chtoby proektirovat' ee celikom, v nishodyashchem napravlenii. Dlya togo chtoby etoj rabotoj mozhno bylo upravlyat', neobhodimo provesti strogoe razgranichenie arhitektury i voploshcheniya, i sistemnyj arhitektor dolzhen dobrosovestno posvyatit' sebya razrabotke arhitektury. Opyt pokazyvaet, chto takoe raspredelenie rolej i takie metody osushchestvimy i okazyvayutsya ves'ma rezul'tativnymi.

    Glava 4. Aristokratiya, demokratiya i sistemnoe proektirovanie

|tot velichestvennyj hram yavlyaetsya vydayushchimsya proizvedeniem iskusstva. V principah, kotorye on izlagaet, net ni suhosti, ni besporyadka... |to vershina stilya, trud hudozhnikov, kotorye ponyali i vosprinyali vse dostizheniya svoih predshestvennikov, v sovershenstve vladeya tehnikoj svoego veka, no pol'zovalis' ej, izbegaya neskromnogo pokaza ili neobosnovannoj demonstracii masterstva. Nesomnenno, zamysel obshchego plana zdaniya prinadlezhit dOrbe, i te, kto ego smenil, priderzhivalis' etogo plana, po krajnej mere, v sushchestvennyh chertah. |to odna iz prichin udivitel'noj garmonichnosti i edinstva zdaniya. PUTEVODITELX PO REJMSKOMU SOBORU 1 Konceptual'noe edinstvo U bol'shinstva evropejskih soborov chasti, postroennye raznymi pokoleniyami stroitelej, imeyut razlichiya v planirovke i arhitekturnom stile. Bolee pozdnie stroiteli ispytyvali soblazn "uluchshit'" proekt svoih predshestvennikov, chtoby otrazit' novye veyaniya mody i svoi lichnye vkusy. V itoge mirnyj normannskij transept sozdaet konflikt s primykayushchim k nemu voznosyashchimsya v vys' goticheskim nefom, i rezul'tat stol' zhe sluzhit voshvaleniyu slavy Gospodnej, skol' i gordyni stroitelej. Arhitekturnoe edinstvo Rejmskogo sobora nahoditsya v pryamoj protivopolozhnosti s takim smesheniem stilej. Istochnikom napolnyayushchej zritelya radosti sluzhat kak cel'nost' konstrukcii, tak i otdel'nye obrazcy sovershenstva. Kak skazano v putevoditele, cel'nost' byla dostignuta blagodarya samootrecheniyu vos'mi pokolenij stroitelej sobora, pozhertvovavshih svoimi ideyami radi chistoty obshchego zamysla. To chto poluchilos' v rezul'tate, sluzhit voshvaleniyu ne tol'ko slavy Gospodnej, no i Ego mogushchestva, sposobnogo spasti greshnyh lyudej ot ih gordyni. Hotya na sozdanie programmnyh sistem ne uhodyat veka, v bol'shinstve svoem oni demonstriruyut men'shuyu soglasovannost' koncepcij, chem v lyubom sobore. Obychno eto proishodit ne ottogo, chto glavnye proektirovshchiki smenyayut drug druga, a potomu, chto proekt rasshcheplyaetsya na ryad zadach, vypolnyaemyh raznymi razrabotchikami. YA ubezhden, chto konceptual'naya celostnost' yavlyaetsya vazhnejshej harakteristikoj sistemnogo proekta. Luchshe ubrat' iz sistemy otdel'nye neobychnye vozmozhnosti i usovershenstvovaniya i realizovat' edinyj nabor konstruktivnyh idej, chem osnastit' ee mnogimi horoshimi, no nevzaimosvyazannymi i nesoglasovannymi ideyami. V etoj i dvuh posleduyushchih glavah my izuchim sledstviya etoj koncepcii dlya proektirovaniya programmnyh sistem: - Kak dostich' konceptual'noj celostnosti? - Ne budet li eto trebovanie prichinoj raskola na elitu, aristokraticheskij klass arhitektorov - s odnoj storony, i tolpy plebeev-ispolnitelej, ch'i tvorcheskie talanty i idei podavlyayutsya, - s drugoj? - Kak uderzhat' arhitektorov ot vitaniya v oblakah i razrabotki nesushchestvennyh ili chrezmerno dorogih specifikacij? - Kak dobit'sya togo, chtoby lyubaya meloch' iz sozdannoj arhitektorom specifikacii doshla do ispolnitelya, byla im pravil'no ponyata i tochno vnedrena v produkt? Dostizhenie konceptual'noj celostnosti Naznachenie sistemy programmirovaniya - oblegchit' ispol'zovanie komp'yutera. Dlya etogo postavlyayutsya yazyki i razlichnye sredstva, yavlyayushchiesya, po suti, programmami, vyzyvaemymi i upravlyaemymi vozmozhnostyami yazyka. No eti sredstva stoyat deneg: ob®em vneshnego opisaniya sistemy programmirovaniya v desyat'- dvadcat' raz bol'she opisaniya sobstvenno vychislitel'noj sistemy. Pol'zovatelyu okazyvaetsya znachitel'no proshche zadat' lyubuyu vybrannuyu funkciyu, no vybor ochen' velik, i nuzhno pomnit' znachitel'no bol'she variantov i formatov. Ispol'zovanie oblegchaetsya, tol'ko esli vyigrysh vremeni pri zadanii funkcii prevyshaet vremya, potrachennoe na obuchenie, zapominanie i poisk rukovodstv. Sovremennye sistemy programmirovaniya dayut takoj vyigrysh, no pohozhe, chto v poslednie gody otnoshenie vyigrysha k zatratam umen'shilos' v rezul'tate dobavleniya vse bolee i bolee slozhnyh funkcij. YA chasto vspominayu, kak legko bylo ispol'zovat' IBM 650, dazhe bez assemblera ili voobshche kakih-libo programm. Poskol'ku cel'yu proektirovaniya yavlyaetsya prostota ispol'zovaniya, okonchatel'nuyu ocenku proekta sistemy daet dostignutoe otnoshenie funkcional'nosti k slozhnosti koncepcij. Ni funkcional'nost', ni prostota v otdel'nosti ne yavlyayutsya priznakami horoshego proekta. |to obstoyatel'stvo chasto nepravil'no ponimaetsya. Operating System/360 prevoznositsya svoimi sozdatelyami, kak luchshaya iz kogda-libo sozdannyh, poskol'ku neosporimo, chto v nej bol'she funkcij. Funkcii, a ne prostota vsegda sluzhili kriteriem prevoshodstva ee sozdatelej. S drugoj storony, sozdateli sistemy s razdeleniem vremeni dlya PDP-10 prevoznosyat ee prevoshodstvo vvidu prostoty i nemnogochislennosti polozhennyh v osnovu idej. Odnako po vsem merkam ee funkcional'nost' nizhe po klassu, chem OS/360. Esli v kachestve kriteriya opredelena prostota ispol'zovaniya, stanovitsya ochevidnoj nesbalansirovannost' etih sistem, dostigayushchih celi lish' napolovinu. Odnako dlya nekotorogo zadannogo urovnya funkcional'nosti luchshej okazyvaetsya ta sistema, v kotoroj mozhno rabotat' s naibol'shej prostotoj i neposredstvennost'yu. Prostota - eto eshche ne vse. YAzyk TRAC, sozdannyj Muerom, i Algol 68 dostigayut prostoty, esli kolichestvenno izmeryat' ee chislom otdel'nyh elementarnyh ponyatij. Neposredstvennost', odnako, ne harakterna dlya nih. CHtoby vyrazit' svoi namereniya, chasto trebuetsya sochetat' bazovye sredstva slozhnym i neozhidannym obrazom. Nedostatochno izuchit' bazovye elementy i pravila ih kombinirovaniya, nuzhno izuchit' eshche idiomaticheskoe ispol'zovanie, celuyu oblast' znanij o tom, kak na praktike kombinirovat' elementy. Prostota i neposredstvennost' proistekayut iz konceptual'noj celostnosti. Vo vseh chastyah dolzhny najti otrazhenie edinaya filosofiya i edinoobraznye proporcii mezhdu zhelaemymi celyami. V kazhdoj chasti dolzhny takzhe ispol'zovat'sya odinakovyj sintaksis i shodnye semanticheskie oboznacheniya. Takim obrazom, prostota ispol'zovaniya trebuet edinstva proekta, konceptual'noj celostnosti. Aristokratiya i demokratiya Konceptual'naya celostnost', v svoyu ochered', trebuet, chtoby proekt ishodil ot odnogo razrabotchika, ili nebol'shogo chisla ih, dejstvuyushchih soglasovanno i v unison. S drugoj storony, napryazhennost' grafika trebuet privlecheniya bol'shogo chisla rabotnikov. Est' dva metoda razresheniya etoj dilemmy. Pervyj sostoit v tshchatel'nom razdelenii truda mezhdu arhitekturoj i ispolneniem. Vtoroj - novyj sposob organizacii brigad programmistov-ispolnitelej, obsuzhdavshijsya v predydushchej glave. 31 Otdelenie razrabotki arhitektury ot realizacii yavlyaetsya effektivnym sposobom dostizheniya konceptual'noj celostnosti pri rabote nad ochen' bol'shimi proektami. YA lichno byl svidetelem uspeshnogo ego primeneniya pri sozdanii IBM komp'yutera Stretch i serii produktov System/360. No on ne srabotal pri razrabotke Operating System/360, poskol'ku nedostatochno primenyalsya. Pod arhitekturoj sistemy ya ponimayu polnuyu i podrobnuyu specifikaciyu interfejsa pol'zovatelya. Dlya komp'yutera eto rukovodstvo po programmirovaniyu. Dlya kompilyatora eto rukovodstvo po yazyku. Dlya upravlyayushchej programmy eto rukovodstvo po odnomu ili neskol'kim yazykam, ispol'zuemym dlya vyzova ee funkcij. Dlya sistemy v celom - eto nabor vseh rukovodstv, k kotorym dolzhen obrashchat'sya pol'zovatel' pri rabote. Arhitektor sistemy, kak i arhitektor zdaniya, yavlyaetsya predstavitelem pol'zovatelya. Ego zadacha - ispol'zovat' vse svoi professional'nye i tehnicheskie znaniya isklyuchitel'no v interesah pol'zovatelya, a ne prodavca, izgotovitelya i t.p.2 Arhitektura i razrabotka dolzhny byt' tshchatel'no razdeleny. Kak skazal Blau (Blaauw), "arhitektura govorit, chto dolzhno proizojti, a razrabotka - kak sdelat', chtoby eto proizoshlo".3 V kachestve prostogo primera on privodit chasy, arhitektura kotoryh sostoit iz ciferblata, strelok i zavodnoj golovki. Rebenok, osvoivshij eto arhitekturu, s odinakovoj legkost'yu mozhet uznat' vremya i po ruchnym chasam, i po chasam na kolokol'ne. Ispolnenie zhe i ego realizaciya opisyvayut, chto proishodit vnutri: peredacha usilij i upravlenie tochnost'yu kazhdym iz mnogih mehanizmov. K primeru, v System/360 odna i ta zhe arhitektura komp'yutera sovershenno po- raznomu realizovana primerno v devyati modelyah. Obratnym obrazom, odna i ta zhe realizaciya potoka dannyh, pamyati i mikroprogramm iz Model 30 ispol'zovalas' v raznoe vremya v chetyreh razlichnyh arhitekturah: System/360, mul'tipleksnom kanale s podklyucheniem do 224 logicheski nezavisimyh podkanalov, selektornom kanale i komp'yutere 1401.4 Takie zhe razlichiya mozhno provodit' v otnoshenii sistem programmirovaniya. Sushchestvuet standart dlya Fortran IV. |to arhitektura, ispol'zuemaya vo mnogih kompilyatorah. V ramkah etoj arhitektury vozmozhny raznye realizacii: tekst v operativnoj pamyati ili kompilyator, bystraya ili optimiziruyushchaya, sintaksicheskaya ili ad hoc. Analogichno, lyuboj yazyk assemblera ili yazyk upravleniya zadaniyami dopuskaet mnogie realizacii assemblera ili planirovshchika. Teper' my mozhem zanyat'sya ves'ma chuvstvitel'nym voprosom bor'by aristokratii i demokratii. Ne stali li arhitektory novoj aristokratiej, intellektual'noj elitoj, prizvannoj raz®yasnit' bednym bezglasnym ispolnitelyam, chto oni dolzhny delat'? Ne zahvatila li eta elita vsyu tvorcheskuyu deyatel'nost', sdelav ispolnitelej lish' zubchikami v mehanizme? Ne okazhetsya li, chto bolee sovershennyj produkt mozhno poluchit', ispol'zuya idei vsej brigady i ispoveduya filosofiyu demokratii, a ne ogranichivaya krug razrabotchikov neskol'kimi licami? Proshche vsego otvetit' na poslednij vopros. YA, razumeetsya, ne stanu utverzhdat', chto horoshie arhitekturnye idei mogut voznikat' tol'ko u arhitektorov. CHasto svezhaya ideya ishodit ot ispolnitelya ili pol'zovatelya. Odnako ves' lichnyj opyt ubezhdaet menya, i ya pytalsya eto pokazat', chto prostotu pol'zovaniya sistemoj opredelyaet ee konceptual'naya celostnost'. Dostojnye vnimaniya funkcii i idei, kotorye ne ob®edinyayutsya s osnovnymi koncepciyami sistemy, luchshe ostavit' v storone. Esli takih vazhnyh, no nesovmestimyh idej poyavlyaetsya slishkom mnogo, vykidyvayut vsyu sistema i nachinayut razrabotku celostnoj sistemy snachala, osnovyvaya ee na inyh osnovopolagayushchih koncepciyah. CHto kasaetsya obvinenij v aristokratizme, to otvet i polozhitel'nyj, i otricatel'nyj. Polozhitel'nyj, potomu chto dejstvitel'no dolzhno byt' neskol'ko arhitektorov, ch'i rezul'taty zhivut dol'she, chem otdel'nye realizacii, i arhitektor nahoditsya v fokuse sil, kotorye on v konechnom itoge dolzhen ispol'zovat' v interesah pol'zovatelya. Esli vy hotite, chtoby sistema obladala konceptual'noj celostnost'yu, to rukovodstvo koncepciyami dolzhen vzyat' kto-to odin. |to aristokratizm, kotoryj ne nuzhdaetsya v izvineniyah. Otvet otricatel'nyj, poskol'ku razrabotka proekta trebuet ne men'she tvorchestva, chem zadanie vneshnih specifikacij. |to tozhe tvorcheskaya rabota, no drugogo haraktera. Razrabotka proekta dlya zadannoj arhitektury trebuet i dopuskaet stol'ko zhe tvorcheskoj deyatel'nosti, novyh idej, izobretatel'nosti, kak i proekt vneshnih specifikacij. Prakticheski, koefficient stoimost'/effektivnost' sozdannogo produkta bol'she zavisit ot ispolnitelya, a prostota ego ispol'zovaniya - ot arhitektora. Est' massa primerov, podskazannyh drugimi iskusstvami i remeslami, kotorye podvodyat k mneniyu, chto disciplina idet na pol'zu. Dejstvitel'no, aforizm hudozhnika glasit, chto "forma osvobozhdaet". Samye uzhasny stroeniya - eto te, byudzhet kotoryh byl slishkom velik dlya postavlennyh celej. Tvorcheskuyu aktivnost' Baha edva li mogla podavlyat' neobhodimost' ezhenedel'naya neobhodimost' izgotavlivat' kantatu opredelennogo vida. YA uveren, chto arhitektura komp'yutera Stretch stala by luchshe, esli by na nee nalozhili bolee zhestkie ogranicheniya; tak, ogranicheniya, nalozhennye byudzhetom na System/360 Model 30, po moemu mneniyu, prinesli lish' pol'zu arhitekture Model 75. Analogichno, ya schitayu, chto poluchenie arhitektury izvne usilivaet, a ne podavlyaet tvorcheskuyu aktivnost' gruppy ispolnitelej. Oni srazu sosredotochivayutsya na toj chasti zadachi, kotoroj nikto ne zanimalsya, i v rezul'tate izobretatel'nost' b'et klyuchom. V ne ogranichivaemoj gruppe bol'shaya chast' obdumyvaniya i obsuzhdeniya posvyashchena arhitekturnym resheniyam v ushcherb realizacii.5 |tot mnogokratno nablyudavshijsya mnoj effekt podtverdil R. U. Konvej (R. W. Conway), ch'ya gruppa razrabotala v Kornel'skom universitete kompilyator PL/C dlya yazyka PL/I. On govorit: "V konechnom itoge my reshili realizovat' yazyk bez izmenenij i usovershenstvovanij, poskol'ku obsuzhdenie yazyka otnyalo by u nas vse sily."6 CHem zanyat'sya razrabotchiku, poka on vynuzhden zhdat'? Ochen' nepriyatno sovershit' oshibku stoimost'yu v million dollarov, no zato ona nadolgo zapominaetsya. YA otchetlivo pomnyu tot den', kogda my prinyali reshenie o tom, kak prakticheski organizovat' sostavlenie vneshnih specifikacij dlya OS/360. Menedzher po arhitekture, menedzher po realizacii upravlyayushchej programmy i ya prorabatyvali plan, grafik i razdelenie obyazannostej. U menedzhera po arhitekture bylo 10 horoshih specialistov. On utverzhdal, chto oni v sostoyanii napisat' specifikacii i sdelat' eto dolzhnym obrazom. |to dolzhno bylo zanyat' 10 mesyacev - na tri bol'she, chem otvodilos' po grafiku. U menedzhera po realizacii upravlyayushchej programmy bylo 150 chelovek. On zayavlyal, chto oni mogut podgotovit' specifikacii, pri etom gruppa arhitektorov vypolnyala by koordiniruyushchie funkcii. Obeshchalos', chto eto budet sdelano horosho i praktichno, s soblyudeniem srokov. Bolee togo, esli ostavit' specifikacii gruppe arhitektorov, ego 150 chelovek v techenie desyati mesyacev budut bit' baklushi. Na eto menedzher po arhitekture vozrazil, chto esli ya sdelayu otvetstvennoj za napisanie specifikacij gruppu upravlyayushchej programmy, to rezul'tata v srok ne budet: on vse ravno zaderzhitsya na tri mesyaca, no po kachestvu budet mnogo huzhe. Tak ono i okazalos' v dejstvitel'nosti. On okazalsya prav v oboih punktah. Krome togo, iz-za otsutstviya konceptual'noj celostnosti sozdanie i vnesenie izmenenij v sistemu okazalis' znachitel'no bolee dorogostoyashchimi, i, po moim ocenkam, otladka udlinilas' na god. Konechno, mnogie faktory povliyali na prinyatie etogo oshibochnogo resheniya, no opredelyayushchimi byli zhelanie ulozhit'sya v grafik i stremlenie zanyat' rabotoj etih 150 chelovek. Penie etih siren tait smertel'nye opasnosti, kotorye ya i hochu sejchas pokazat'. Kogda predlagaetsya, chtoby vse vneshnie specifikacii dlya komp'yuternoj ili programmnoj sistemy byli sostavleny nebol'shoj komandoj arhitektorov, ispolniteli vydvigayut tri vozrazheniya: - Specifikacii budut peregruzheny funkciyami i ne budut uchityvat' prakticheskih zatrat na realizaciyu. - Arhitektory poluchat vse radosti tvorchestva i zablokiruyut izobretatel'nost' ispolnitelej. - Mnogochislennym ispolnitelyam pridetsya ozhidat' v prazdnosti, poka specifikacii projdut cherez uzkoe gorlyshko komandy arhitektorov. Pervoe vozrazhenie otrazhaet real'nuyu opasnost' i budet rassmotreno v sleduyushchej glave. Ostal'nye dva yavlyayutsya chistym zabluzhdeniem. Kak my videli vyshe, razrabotka takzhe yavlyaetsya v vysshej stepeni tvorcheskoj deyatel'nost'yu. Vozmozhnost' proyavit' tvorchestvo i izobretatel'nost' pri razrabotke neznachitel'no ogranichivaetsya neobhodimost'yu rabotat' v ramkah zadannyh vneshnih specifikacij, i takaya disciplina mozhet dazhe usilit' stepen' tvorchestva. |to, nesomnenno, verno dlya proekta v celom. Poslednee vozrazhenie kasaetsya planirovaniya vremennyh ramok i etapov. Proshche vsego vozderzhat'sya ot najma ispolnitelej do zaversheniya raboty nad specifikaciyami. Kogda vozdvigaetsya zdanie, tak i postupayut. Odnako pri sozdanii komp'yuternyh sistem tempy vyshe, i zhelatel'no uplotnit' grafik rabot. V kakoj mere razrabotka specifikacij i razrabotka mogut perekryvat'sya? Kak otmechaet Blau, vsyu programmu sozdaniya sostavlyayut tri otdel'nye stadii: arhitektura, razrabotka i realizaciya. Okazyvaetsya, chto na praktike ih mozhno nachinat' parallel'no i prodolzhat' odnovremenno. Naprimer, pri proektirovanii komp'yuterov proektirovshchik mozhet pristupat' k rabote, imeya otnositel'no obshchie dopushcheniya v otnoshenii rukovodstva pol'zovatelya, neskol'ko bolee yasnye idei otnositel'no tehnologii i vpolne opredelennye zadachi po stoimosti i rabochim harakteristikam. On mozhet nachat' proektirovanie potokov dannyh, upravlyayushchih posledovatel'nostej, obshchih idej komponovki i t.d. On razrabatyvaet ili adaptiruet neobhodimyj instrumentarij, osobenno sistemu vedeniya ucheta, v tom chisle sistemu avtomatizacii proektirovaniya. V to zhe vremya na urovne realizacii nuzhno sproektirovat', usovershenstvovat' i opisat' mikroshemy, platy, kabeli, karkasy, bloki pitaniya i ustrojstva pamyati. |ta rabota protekaet parallel'no s arhitekturoj i razrabotkoj. To zhe samoe spravedlivo pri sozdanii programmnyh sistem. Zadolgo do zaversheniya vneshnih specifikacij proektirovshchik mozhet najti sebe dostatochno raboty. On mozhet pristupit' k delu, osnovyvayas' na grubom priblizhenii funkcional'nosti sistemy, kotoraya v konechnom itoge budet voploshchena vo vneshnih specifikaciyah. U nego dolzhny byt' yasno opredelennye celi v otnoshenii pamyati i vremennyh parametrov. On dolzhen izuchit' konfiguraciyu sistemy, na kotoroj budet vypolnyat'sya ego produkt. Zatem on mozhet nachat' opredelenie granic modulej, struktur tablic, raschleneniya na prohody ili stadii algoritmov i vsevozmozhnyh instrumental'nyh sredstv. Nekotoroe vremya on dolzhen takzhe posvyatit' obshcheniyu s arhitektorom. V to zhe vremya dostatochno raboty i na urovne realizacii. U programmirovaniya svoya tehnologiya. Esli mashina novaya, mnogo truda trebuyut soglasheniya po podprogrammam, tehnologiya raboty s supervizorom, algoritmy poiska i sortirovki.7 Konceptual'naya celostnost' trebuet, chtoby sistema otrazhala edinuyu filosofiyu, i tehnicheskie usloviya, v tom vide, v kotorom oni budut vidny pol'zovatelyu, proistekali ot malogo chisla avtorov. |to ne oznachaet, chto sproektirovannaya takim obrazom sistema sozdaetsya dol'she, poskol'ku ispol'zuetsya dejstvitel'noe razdelenie truda na arhitekturu, razrabotku i realizaciyu. Opyt pokazyvaet obratnoe: cel'naya sistema prodvigaetsya bystree i trebuet men'she vremeni dlya otladki. V rezul'tate shiroko rasprostranennoe gorizontal'noe razdelenie truda znachitel'no sokrashchaetsya za schet vertikal'nogo razdeleniya, chto vlechet rezkoe umen'shenie obmena informaciej i uluchshenie konceptual'noj celostnosti.

    Glava 5. |ffekt vtoroj sistemy

Adde parvum parvo magnus acervus erit. [Skladyvaj maloe s malym, i poluchish' bol'shuyu kuchu.] OVIDIJ Esli otvetstvennost' za specifikaciyu funkcij otdelit' ot otvetstvennosti za bystroe sozdanie nedorogogo produkta, to chem sderzhat' izobretatel'skij entuziazm arhitektora? Principial'noe reshenie - obespechenie vsestoronnego, tshchatel'nogo i dobrozhelatel'no obmena informaciej mezhdu arhitektorom i razrabotchikom. Odnako imeyutsya i bolee tonkie resheniya, kotorye zasluzhivayut vnimaniya. Disciplina vzaimodejstviya dlya arhitektora Arhitektor, stroyashchij zdanie, dejstvuet v ramkah smety, ispol'zuya metody ocenki, kotorye v posleduyushchem podtverzhdayutsya ili korrektiruyutsya zayavkami podryadchikov. CHasto sluchaetsya, chto vse predlozheniya vyhodyat za ramki smety. Togda arhitektor peresmatrivaet svoi ocenki v storonu uvelicheniya smety, a proekt - v storonu sokrashcheniya, i cikl povtoryaetsya. Inogda on predlagaet podryadchikam sposoby udeshevleniya realizacii ego proekta v sravnenii s izbrannymi imi sposobami. Shodnye processy proishodyat s arhitektorom komp'yuternyh ili programmnyh sistem. Odnako u nego est' to preimushchestvo, chto predlozheniya podryadchika mozhno poluchit' na rannih stadiyah proektirovaniya, chasto - v lyuboj moment. Nedostatkom obychno yavlyaetsya to, chto rabota idet s edinstvennym podryadchikom, kotoryj mozhet menyat' cenu v zavisimosti ot stepeni svoej udovletvorennosti proektom. Na praktike, process obshcheniya, nachatyj na rannih etapah i prodolzhayushchijsya nepreryvno, mozhet dat' arhitektoru vernuyu ocenku stoimosti, a razrabotchiku - uverennost' v proekte, ne snimaya pri etom chetkogo razgranicheniya sfer otvetstvennosti. U arhitektora, kogda on stalkivaetsya s nepriemlemo vysokoj stoimost'yu, est' dva vyhoda: sokratit' proekt ili vozdejstvovat' na stoimost', predlagaya bolee deshevye sposoby realizacii. Vtoroj sposob neizbezhno vyzyvaet emocii, ved' arhitektor osparivaet to, kak stroitel' spravlyaetsya so svoim delom. CHtoby uspeshno spravit'sya s etim, arhitektoru neobhodimo: - pomnit', chto otvetstvennost' za izobretatel'nost' i tvorchestvo, proyavlyaemye pri realizacii, neset stroitel', poetomu arhitektor predlagaet, a ne trebuet; - vsegda byt' gotovym predlozhit' nekotoryj sposob realizacii svoih zamyslov i byt' gotovym soglasit'sya s lyubym drugim sposobom, pozvolyayushchim reshit' zadachu ne huzhe; - vydvigaya takie predlozheniya, dejstvovat' bez shuma i oglaski; - ne rasschityvat' na priznatel'nost' za sdelannye predlozheniya. Obychno razrabotchik pariruet predlozheniem izmenenij v arhitekture. CHasto on prav - realizaciya kakoj-nibud' malosushchestvennoj detali mozhet okazat'sya neozhidanno dorogostoyashchej. Samodisciplina - effekt vtoroj sistemy Pervyj proekt arhitektora stremitsya k skromnosti i yasnosti. Arhitektor ponimaet, chto ne znaet, chem zanimaetsya, poetomu on zanimaetsya etim so staraniem i samoogranicheniem. Pri rabote nad pervym proektom emu postoyanno prihodyat v golovu to odni, to drugie "ukrasheniya". Oni otkladyvayutsya v storonu dlya ispol'zovaniya "v sleduyushchij raz". V konce koncov, pervaya sistema zakonchena, i arhitektor, s tverdoj uverennost'yu v sebe i prodemonstrirovannym osvoeniem etogo klassa sistem, gotov k sozdaniyu novogo proekta. |ta vtoraya sistema tait naibol'shie opasnosti dlya proektirovshchika. Pri rabote nad tret'ej i posleduyushchimi sistemami zakreplyaetsya poluchennyj ranee opyt v otnoshenii obshchih harakteristik takih sistem, a razlichiya mezhdu nimi vyyavlyayut te chasti opyta, kotorye nosyat chastnyj harakter i ne mogut byt' obobshcheny. Obshchaya tendenciya zaklyuchaetsya v peregruzhennosti proekta vtoroj sistemy ideyami i ukrashatel'stvami, blagorazumno otlozhennymi v storonu pri rabote nad pervym proektom. V rezul'tate poluchaetsya, govorya slovami Ovidiya, "bol'shaya kucha". Rassmotrim, naprimer, arhitekturu IBM 709, voploshchennuyu pozdnee v mashine 7090. |to - modernizaciya, vtorya sistema dlya ochen' uspeshnoj i horosho skroennoj sistemy 704. Nabor komand byl nastol'ko bogat i izobilen, chto regulyarno ispol'zovalas' primerno lish' polovina ego. Rassmotrim v kachestve bolee sil'nogo primera arhitekturu, razrabotku i dazhe realizaciyu komp'yutera Stretch, kotorye dali vyhod sderzhivayushchimsya izobretatel'skim stremleniyam mnogih lyudej, dlya bol'shinstva kotoryh eto bylo vtoraya sistema. Vot chto pishet v svoem obzore Strejchi (Strachey): U menya sozdalos' vpechatlenie, chto nekotorym obrazom Stretch yavlyaet soboj okonchanie opredelennogo napravleniya razrabotok. Kak i nekotorye rannie komp'yuternye programmy, eta sistema chrezvychajno izobretatel'na, chrezvychajno slozhna i ochen' effektivna, no v to zhe vremya yavlyaetsya syroj, rastochitel'noj i neizyashchnoj, ostavlyaya oshchushchenie, chto eti veshchi mozhno delat' luchshim obrazom.1 Operating System/360 byla vtoroj sistemoj dlya bol'shinstva svoih proektirovshchikov. Gruppy proektirovshchikov prishli posle raboty nad diskovoj operacionnoj sistemoj 1410-7010, operacionnoj sistemoj Stretch, sistemoj real'nogo vremeni Project Mercury i IBSYS dlya 7090. Edva li kto-to iz nih imel opyt raboty nad dvumya predshestvuyushchimi operacionnymi sistemami. Poetomu OS/360 yavlyaetsya yarkim primerom effekta vtoroj sistemy, analogom Stretch v iskusstve programmirovaniya, k kotoromu v polnoj mere primenimy i pohvaly, i upreki privedennoj kritiki Strejchi. Naprimer, v OS/360 otvoditsya 26 bajt dlya rezidentnoj procedury preobrazovaniya daty, chtoby pravil'no obrabatyvat' 31 dekabrya v visokosnom godu (kogda eto 366-j den'). |to mozhno bylo ostavit' operatoru. |ffekt vtoroj sistemy imeet i drugoe proyavlenie, krome prostogo ukrashatel'stva funkciyami. |to - sklonnost' k usovershenstvovaniyu metodov, samo sushchestvovanie kotoryh stalo anahronizmom blagodarya izmeneniyam v bazovyh principah sistemy. OS/360 soderzhit mnogochislennye primery, podtverzhdayushchie eto. Rassmotrim redaktor svyazej, prednaznachennyj dlya zagruzki nezavisimo skompilirovannyh programm i razresheniya ih perekrestnyh ssylok. Pomimo etoj osnovnoj funkcii on takzhe upravlyaet programmnymi overleyami. |to odno iz luchshih kogda-libo sozdannyh sredstv raboty s overleyami. Ono pozvolyaet sozdavat' overlejnuyu strukturu vneshnim obrazom pri redaktirovanii svyazej, ne trogaya ishodnogo koda. Ono pozvolyaet izmenyat' strukturu overleev bez perekompilyacii pri kazhdom progone. Ono predostavlyaet bogatyj vybor poleznyh opcij i vozmozhnostej. V izvestnom smysle, eto zavershayushchij itog mnogoletnej razrabotki tehnologii staticheskih overleev. I v to zhe vremya eto poslednij i sovershennejshij dinozavr, poskol'ku vhodit v sistemu, v kotoroj mnogoprogrammnost' yavlyaetsya obychnym rezhimom, a dinamicheskoe raspredelenie pamyati - bazovym principom. |to vstupaet v pryamoj konflikt s ponyatiem ispol'zovaniya staticheskih overleev. Neskol'ko luchshe rabotala by sistema, esli by usiliya, potrachennye na upravlenie overleyami, byli perenapravleny na to, chtoby uskorit' rabotu sredstv podderzhki dinamicheskogo raspredeleniya pamyati i perekrestnyh ssylok! Bolee togo, redaktor svyazej trebuet tak mnogo pamyati, i sam soderzhit stol'ko overleev, chto dazhe pri ispol'zovanii tol'ko dlya redaktirovaniya bez upravleniya overleyami ustupaet v skorosti bol'shinstvu sistemnyh kompilyatorov. Ironiya sostoit v tom, chto naznachenie redaktora svyazej - izbezhat' povtornoj kompilyacii. Kak u kon'kobezhca korpus okazyvaetsya vperedi nog, tak i usovershenstvovaniya prodolzhalis', poka ne vyshli daleko za ramki sistemnyh principov. Drugim primerom etoj tendencii yavlyaetsya otladchik TESTRAN. |to sovershennyj paketnyj otladchik, predostavlyayushchij dejstvitel'no elegantnye sredstva polucheniya mgnovennyh snimkov i dampov pamyati. V nem ispol'zuetsya ponyatie upravlyayushchih razdelov i iskusnaya tehnologiya generacii, pozvolyayushchie osushchestvlyat' izbiratel'nuyu trassirovku i poluchenie mgnovennyh snimkov bez dopolnitel'nyh rashodov na interpretaciyu ili rekompilyaciyu. Zdes' pyshnym cvetom rascveli vpechatlyayushchie koncepcii operacionnoj sistemy Share Operating System3 dlya modeli 709. Mezhdu tem ustarela sama ideya paketnoj otladki bez rekompilyacii. Glavnyj vyzov byl broshen interaktivnym vychislitel'nym sistemam s interpretatorami yazykov programmirovaniya i poshagovymi kompilyatorami. No dazhe v sistemah s paketnoj obrabotkoj poyavlenie kompilyatorov s bystroj kompilyaciej i medlennym vypolneniem sdelalo bolee predpochtitel'noj tehnologiyu otladki na urovne ishodnogo koda i polucheniya mgnovennyh snimkov. Naskol'ko luchshe okazalas' by sistema, esli by sily, potrachennye na proekt TESTRAN, byli perenapravleny na uskorennoe sozdanie luchshih sredstv dlya interaktivnoj raboty i bystroj kompilyacii! Eshche odin primer - planirovshchik, predostavlyayushchij dejstvitel'no otlichnye vozmozhnosti dlya upravleniya potokom fiksirovannyh paketov zadanij. Na praktike etot planirovshchik yavlyaetsya usovershenstvovannoj, uluchshennoj i nadelennoj raznymi ukrasheniyami vtoroj sistemoj, kotoroj predshestvovala diskovaya operacionnaya sistema 1410-7010 - sistema paketnoj obrabotki, ne yavlyayushchayasya mnogoprogrammnoj, za isklyucheniem vvoda-vyvoda, i prednaznachennoj, glavnym obrazom, dlya delovyh prilozhenij. V etom kachestve planirovshchik OS/360 horosh. No na nego pochti nikakogo vliyaniya ne okazali potrebnosti OS/360 v udalennom vvode zadanij, mnogoprogrammnosti i rezidentnom razmeshchenii interaktivnyh podsistem. I dejstvitel'no, proekt planirovshchika zatrudnyaet reshenie etih zadach. Kak arhitektoru izbezhat' effekta vtoroj sistemy? Ochevidno, propustit' svoyu vtoruyu sistemu on ne mozhet. No on mozhet otdavat' sebe otchet v osobyh opasnostyah, kotorym ona ego podvergaet, i proyavit' dopolnitel'nuyu samodisciplinu, chtoby izbezhat' funkcional'nogo ukrashatel'stva i sohraneniya funkcij, nuzhda v kotoryh otpala vvidu izmenenij v principah i celyah. Poryadok, sposobnyj otkryt' arhitektoru glaza, zaklyuchaetsya v tom, chtoby prisvoit' chislennoe znachenie kazhdoj, pust' maloj, funkcii: harakteristika x dolzhna obojtis' ne bolee chem v m bajtov pamyati i n mikrosekund na odin vyzov. |ti velichiny dolzhny sluzhit' rukovodstvom pri prinyatii nachal'nyh reshenij, a takzhe napominaniem i rukovodstvom pri realizacii. Kak menedzheru proekta izbezhat' effekta vtoroj sistemy? Nastaivat' na tom, chtoby ego starshij arhitektor imel opyt razrabotki hotya by dvuh sistem. Krome togo, buduchi osvedomlennym o vozmozhnyh opasnostyah, on mozhet pred®yavlyat' neobhodimye trebovaniya dlya togo, chtoby v detal'nom proekte nashli polnoe otrazhenie ideologicheskih koncepcij i celi.

    Glava 6. Donesti slovo

On syadet zdes' i budet rasporyazhat'sya: "Sdelajte eto! Sdelajte to!" A delo i s mesta ne sdvinetsya. GARRI S. TRUMEN. "O PREZIDENTSKOJ VLASTI"1 Kak menedzheru, imeya opytnyh disciplinirovannyh arhitektorov i dostatochnoe chislo ispolnitelej, dobit'sya togo, chtoby vse uslyshali, ponyali i vypolnili resheniya arhitektora? Kak gruppe iz 10 arhitektorov podderzhivat' konceptual'nuyu celostnost' sistemy, nad kotoroj truditsya 1000 chelovek? Dlya dostizheniya etogo pri osushchestvlenii programmy proektirovaniya apparatnoj chasti System/360 byla razrabotana celaya tehnologiya, kotoraya v ravnoj stepeni primenima dlya proektov sozdaniya programmnogo obespecheniya. Pis'mennye specifikacii - rukovodstvo Rukovodstvo, ili pis'mennaya dokumentaciya, yavlyaetsya neobhodimym, hotya i ne dostatochnym, instrumentom. Rukovodstvo yavlyaetsya vneshnej specifikaciej produkta. V nem raspisany vse podrobnosti togo, chto vidit pol'zovatel', i potomu ono yavlyaetsya glavnym produktom, kotoryj sozdaet arhitektor. Ego podgotovka idet krugami, sobiraya zamechaniya pol'zovatelej i razrabotchikov o nedostatkah proekta, zatrudnyayushchih ispol'zovanie ili realizaciyu. Dlya udobstva razrabotchikov neobhodimo kvantovat' izmeneniya: soglasno opredelennym v grafike datam vypuskat' ocherednye versii. Instrukciya dolzhna ne tol'ko opisyvat' vse, chto vidit pol'zovatel', v tom chisle vse interfejsy, no i vozderzhivat'sya ot opisaniya togo, chego pol'zovatel' ne vidit. Poslednee - zabota razrabotchika, i zdes' svoboda ego reshenij ne dolzhna byt' ogranichena. Arhitektor vsegda dolzhen byt' gotov pokazat' primer realizacii lyuboj opisannoj im funkcii, no on ne dolzhen pytat'sya navyazyvat' opredelennuyu realizaciyu. Stil' dolzhen byt' tochnym, polnym i ochen' podrobnym. Pol'zovatel' chasto obrashchaetsya k otdel'nomu opredeleniyu, poetomu vo vseh iz nih dolzhny byt' povtoreny vse sushchestvennye elementy, i vse oni dolzhny byt' soglasovany drug s drugom. Po etoj prichine instrukcii chasto skuchno chitat', no tochnost' imeet prioritet pered uvlekatel'nost'yu. Edinstvo "Principov raboty System/360" proistekaet iz togo, chto u nih bylo lish' dva avtora: Dzherri Blau i Andris Padega. Avtorami idej yavlyayutsya poryadka desyati chelovek, no esli trebuetsya soblyusti soglasovannost' opisaniya i produkta, otlivku reshenij v prozaicheskie specifikacii dolzhny osushchestvlyat' ne bolee dvuh chelovek. Dlya napisaniya opredeleniya trebuetsya prinyat' massu mini-reshenij, kotorye ne stol' vazhny, chtoby vynosit' ih na vseobshchee obsuzhdenie. Dlya System/360 primerom sluzhat podrobnosti togo, kak posle kazhdoj operacii ustanavlivaetsya kod usloviya. Odnako zadacha vseobshchej soglasovannosti takih mini- reshenij ne yavlyaetsya trivial'noj. Dumayu, chto luchshij vidennyj mnoj obrazec rukovodstva - eto napisannoe Blau prilozhenie k "Principam raboty System/360". V nem tshchatel'no i tochno opisany granicy sovmestimosti System/360. Dano opredelenie sovmestimosti, predpisyvaetsya, k chemu nuzhno stremit'sya, i perechisleny te oblasti vneshnih proyavlenij, gde arhitektura namerenno molchit, i gde rezul'taty, poluchennye na raznyh modelyah, mogut otlichat'sya mezhdu soboj, gde raznye ekzemplyary odnoj modeli mogut dat' razlichnye rezul'taty i dazhe odin i tot zhe ekzemplyar mozhet davat' razlichiya posle konstruktivnyh izmenenij. |to uroven' tochnosti, k kotoromu stremyatsya sostaviteli rukovodstv. Oni dolzhny odinakovo opisyvat' kak to, chto mozhno delat', tak i to, chto delat' nel'zya. Formal'nye opredeleniya Anglijskij yazyk, kak i lyuboj drugoj estestvennyj yazyk, po svoej prirode ne yavlyaetsya tochnym instrumentom, prigodnym dlya takih opisanij. Poetomu sostavitel' rukovodstva dolzhen derzhat' v uzde sebya i svoj yazyk, chtoby dostich' neobhodimoj strogosti. Privlekatel'na vozmozhnost' ispol'zovaniya dlya takih opredelenij formal'nyh oboznachenij. V konce koncov, cel'yu yavlyaetsya tochnost', chto obuslovlivaet pravo formal'nyh oboznachenij na zhizn'. Rassmotrim dostoinstva i slabosti formal'nyh opredelenij. Kak otmechalos', formal'nye opredeleniya yavlyayutsya tochnymi. Oni tyagoteyut k polnote: probely zametnee, a potomu skoree vosstanavlivayutsya. Ih nedostatok - trudnost' ponimaniya. Na anglijskom yazyke mozhno opisat' strukturnye principy, ochertit' struktury po etapam ili po urovnyam i privesti primery. Legko otmetit' isklyucheniya i podcherknut' protivopolozhnosti. Eshche vazhnee, chto mozhno ob®yasnit' prichiny. Predlagavshiesya do sih por formal'nye opredeleniya vyzyvali voshishchenie svoej elegantnost'yu i uverennost' v ih tochnosti. No oni trebovali tekstual'nyh poyasnenij dlya oblegcheniya izucheniya svoego soderzhaniya. Po etoj prichine ya polagayu, chto v budushchem specifikacii budut sostoyat' kak iz formal'nyh, tak i iz tekstovyh opisanij. Drevnee izrechenie preduprezhdaet o tom, chto v more nel'zya vyhodit' s dvumya hronometrami: nuzhno vzyat' odin ili tri. To zhe, ochevidno, primenimo i k tekstovym i formal'nym opredeleniyam. Esli imeyutsya oba vida, to odin dolzhen byt' standartom, a drugoj - proizvodnym opisaniem, o chem dolzhno byt' pryamo ukazano. Osnovnym standartom mozhet byt' lyuboj iz nih. V Algol 68 v kachestve standarta vybrano formal'noe opredelenie, a tekstovye opredeleniya yavlyayutsya opisatel'nymi. V PL/I standartom yavlyaetsya tekst, a formal'noe opredelenie - proizvodnym. V System/360 takzhe v kachestve standarta prinyat tekst, a proizvodnymi yavlyayutsya formal'nye opisaniya. Est' mnogo sredstv sozdaniya formal'nyh opredelenij. Dlya opredeleniya yazykov chasto ispol'zuetsya forma Bekusa-Naura, po kotoroj est' bogataya literatura.2 V formal'nom opisanii PL/I ispol'zuyutsya novye oboznacheniya abstraktnogo sintaksisa, nadlezhashchim obrazom opisannye.3 APL Iversona byl ispol'zovan dlya opisaniya mashin, v chastnosti, IBM 70904 i System/360.7 Bell i N'yuell predlozhili novye notacii dlya opisaniya kak konfiguracij, tak i mashin, i proillyustrirovali ih na neskol'kih mashinah, vklyuchaya DEC PDP-8,6 70906 i System/360.7 Pochti vse formal'nye opredeleniya okazalis' prigodnymi dlya voploshcheniya ili opisaniya apparatnyh sredstv ili programmnyh sistem, vneshnie specifikacii kotoryh oni reglamentiruyut. Sintaksis mozhno opisat' bez etogo, no semantika obychno opredelyaetsya s pomoshch'yu programmy, vypolnyayushchej opredelyaemuyu operaciyu. Konechno, eto yavlyaetsya realizaciej i v etom kachestve pereopredelyaet arhitekturu. Poetomu nuzhno ukazat', chto formal'noe opredelenie otnositsya tol'ko k vneshnim specifikaciyam, i ob®yasnit', chto imi yavlyaetsya. Ne tol'ko formal'noe opredelenie yavlyaetsya realizaciej, no i realizaciya mozhet sluzhit' formal'nym opredeleniem. Kogda byli sozdany pervye sovmestimye komp'yutery, ispol'zovalas' imenno eta tehnologiya. Novaya mashina dolzhna byla sootvetstvovat' imeyushchejsya. Rukovodstvo tumanno v nekotoryh mestah? Zadajte vopros mashine! Sozdavalas' testovaya programma dlya vyyasneniya povedeniya, i novaya mashina stroilas' tak, chtoby dostigalos' sootvetstvie. Programmnaya model' apparatnoj ili programmnoj sistemy mozhet ispol'zovat'sya tochno takim zhe obrazom. |to - realizaciya. Ona rabotaet. Poetomu vse voprosy, svyazannye s opredeleniem, mogut byt' resheny putem proverki. Ispol'zovanie realizacii v kachestve opredeleniya imeet nekotorye preimushchestva. Vse problemy mozhno odnoznachno reshit' putem eksperimenta. Diskussij ne trebuetsya, poetomu otvet poluchaetsya bystro. Otvet mozhet byt' skol' ugodno tochnym i, po opredeleniyu, vsegda yavlyaetsya pravil'nym. S drugoj storony, est' znachitel'noe kolichestvo nedostatkov. Realizaciya mozhet pereopredelyat' dazhe vneshnie specifikacii. Dazhe pri oshibochnom sintaksise vsegda poluchaetsya nekotoryj rezul'tat; v kontroliruemoj sisteme etot rezul'tat yavlyaetsya ukazaniem na oshibku i nichem bol'she. V nekontroliruemoj sisteme mogut vozniknut' lyubye pobochnye effekty i byt' ispol'zovany programmistami. Kogda my, naprimer, emulirovali IBM 1401 na System/360, vyyavilos' 30 razlichnyh "kur'ezov" - pobochnyh effektov predpolozhitel'no nezakonnyh operacij, kotorye shiroko ispol'zovalis' i dolzhny byli byt' priznany chast'yu opredeleniya. Realizaciya v kachestve opredeleniya vozobladala. Ona ne tol'ko govorila o tom, chto dolzhna delat' mashina, no i mnogoe skazala o tom, kak mashina ne dolzhna byla eto delat'. Krome togo, na pronicatel'nye voprosy realizaciya inogda daet neozhidannye otvety, i opredelenie de-fakto chasto okazyvaetsya neizyashchnym v etih osobyh sluchayah potomu, chto nad nimi nikogda ne zadumyvalis'. Kopirovanie etoj neelegantnosti v drugoj realizacii chasto okazyvaetsya zamedlyayushchim ili dorogostoyashchim. Naprimer, v nekotoryh mashinah v registre mnozhimogo posle umnozheniya ostaetsya musor. Tochnaya priroda etogo musora stanovitsya chast'yu opredeleniya de-fakto, odnako ego kopirovanie mozhet pomeshat' ispol'zovaniyu bolee bystrogo algoritma umnozheniya. Nakonec, ispol'zovanie realizacii v kachestve formal'nogo opredeleniya mozhet sozdat' neyasnost', kakoe iz opisanij - tekstovoe ili formal'noe - v dejstvitel'nosti yavlyaetsya standartom. |to otnositsya osobenno k programmnym modelyam. Sleduet takzhe vozderzhivat'sya ot vneseniya izmenenij v realizaciyu, poka ona sluzhit v kachestve standarta. Pryamoe vklyuchenie U arhitektorov programmnyh sistem est' chudesnyj metod rasprostraneniya i vnedreniya opredelenij. On osobenno polezen pri ustanovlenii esli ne semantiki, to sintaksisa mezhmodul'nyh interfejsov. |tot priem sostoit v sozdanii ob®yavlenij peredavaemyh parametrov ili sovmestno ispol'zuemoj pamyati i trebovanii vklyucheniya etih ob®yavlenij pri operaciyah vremeni kompilyacii (makros ili %INCLUDE v PL/I). Esli, krome togo, vse ssylki na interfejs proishodyat tol'ko po simvolicheskim imenam, ob®yavleniya mozhno menyat', dobavlyaya ili vstavlyaya novye imena i lish' zanovo kompiliruya, no ne izmenyaya ispol'zuyushchuyu ego programmu. Konferencii i sudy Net nuzhdy govorit' o tom, chto soveshchaniya neobhodimy. Sotni chastnyh konsul'tacij dolzhny dopolnyat'sya krupnymi i bolee formal'nymi sobraniyami. My priznali poleznymi dva urovnya takih sobranij. Pervyj - eto ezhenedel'naya konferenciya vseh arhitektorov vmeste s oficial'nymi predstavitelyami razrabotchikov apparatnoj i programmnoj chasti i sotrudnikami marketinga prodolzhitel'nost'yu v polovinu rabochego dnya pod predsedatel'stvom glavnogo arhitektora sistemy. Predlagat' zadachi i izmeneniya mozhno vsem, no obychno predlozheniya rasprostranyayutsya v pis'mennom vide do soveshchaniya. Obychno novaya zadacha nekotoroe vremya obsuzhdaetsya. Upor delaetsya na tvorcheskoj storone, a ne prosto na prinyatii resheniya. Gruppa pytaetsya predlozhit' neskol'ko reshenij problemy, zatem ryad predlozhennyh reshenij peredaetsya odnomu ili neskol'kim arhitektoram dlya razrabotki podrobnyh i tochno sformulirovannyh predlozhenij po vneseniyu izmenenij v rukovodstvo. Podrobnye predlozheniya ob izmeneniyah zatem vynosyatsya dlya prinyatiya resheniya. Predlozheniya tshchatel'no izuchayutsya ispolnitelyami i pol'zovatelyami, i vyyasnyayutsya vse "za" i "protiv". Esli voznikaet vseobshchee soglasie, vse v poryadke. V protivnom sluchae reshenie prinimaet glavnyj arhitektor. Vedetsya protokol, i resheniya formal'no, operativno i shiroko rasprostranyayutsya. Resheniya ezhenedel'nyh konferencij dayut bystrye rezul'taty i pozvolyayut prodolzhit' rabotu. Esli kto-to ochen' nedovolen, dopuskaetsya nemedlennaya apellyaciya k menedzheru proekta, no eto proishodit ochen' redko. Plodotvornost' etih soveshchanij obuslovlena neskol'kimi prichinami: 1. Odna i ta zhe gruppa - arhitektory, razrabotchiki i ispolniteli - na protyazhenii mesyacev vstrechayutsya mezhdu soboj kazhduyu nedelyu. Ne trebuetsya vremeni, chtoby vvesti lyudej v kurs dela. 2. Gruppa sostoit iz predpriimchivyh, sposobnyh, horosho osvedomlennyh v voprosah i gluboko zainteresovannyh v konechnom rezul'tate lyudej. Nikto ne uchastvuet s "soveshchatel'nym" golosom. Vse upolnomocheny prinimat' na sebya obyazatel'stva. 3. Pri vozniknovenii problem resheniya ishchutsya kak vnutri, tak i vne ochevidnyh granic. 4. Blagodarya formalizmu pis'mennyh predlozhenij sosredotochivaetsya vnimanie, trebuetsya prinyatie resheniya i ustranyaetsya nesoglasovannost', svojstvennaya chernovym resheniyam komissij. 5. Otkrytoe predostavlenie prava prinyatiya resheniya glavnomu arhitektoru pomogaet izbezhat' poiska kompromissov i zaderzhek. So vremenem vyyasnyaetsya, chto nekotorye resheniya ne v polnoj mere vypolnyayutsya. Tot ili inoj iz uchastnikov tak i ne prinyal vsej dushoj kakuyu-libo meloch'. Drugie resheniya porodili nepredvidennye problemy, i ezhenedel'noe soveshchanie otkazyvaetsya povtorno ih rassmatrivat'. Tak voznikaet hvost iz melkih vozrazhenij, otkrytyh tem ili razdrazheniya. Dlya ih uregulirovaniya my provodim ezhegodnye "sessii verhovnogo suda", obychno prodolzhayushchiesya dve nedeli. (Esli by ya provodil ih sejchas, to delal by eto raz v polgoda.) |ti sessii provodilis' nakanune vazhnyh dat okonchatel'nogo prinyatiya razdelov rukovodstva. Prisutstvovali ne tol'ko predstaviteli programmistov i proektirovshchikov po arhitekture, no i menedzhery programmnyh, marketingovyh i realizacionnyh proektov. Predsedatel'stvoval menedzher proekta System/360. Povestka raboty vklyuchala obychno okolo 200 punktov, v osnovnom melkih, perechislennyh v razveshannyh po komnate spiskah. Zaslushivalis' vse storony i prinimalis' resheniya. Blagodarya chudu komp'yuternoj verstki (i prevoshodnoj rabote sotrudnikov) kazhdoe utro kazhdyj uchastnik obnaruzhival na svoem rabochem meste ispravlennoe rukovodstvo, v kotoroe byli vneseny resheniya, prinyatye nakanune. |ti "osennie festivali" byli polezny ne tol'ko dlya peresmotra reshenij, no i dlya togo, chtoby oni byli prinyaty. Kazhdyj byl uslyshan, kazhdyj prinimal uchastie, kazhdyj luchshe ponimal slozhnye ogranicheniya i vzaimosvyazi mezhdu resheniyami. Mnozhestvennye realizacii U arhitektorov System/360 bylo dva pochti besprecedentnyh preimushchestva: dostatochno vremeni dlya tshchatel'noj raboty i takoe zhe politicheskoe vliyanie, kak u proektirovshchikov. Nalichie vremeni bylo obespecheno grafikom po novoj tehnologii; politicheskoe ravenstvo proishodilo blagodarya odnovremennomu sozdaniyu neskol'kih realizacij. Neobhodimost' ih strogoj sovmestimosti luchshe vsego sposobstvovala ispolneniyu specifikacij. V bol'shinstve komp'yuternyh proektov nastupaet den', kogda okazyvaetsya, chto mashina i rukovodstvo po ee ispol'zovaniyu ne soglasuyutsya. V posleduyushchem konflikte obychno proigryvaet rukovodstvo, poskol'ku ego mozhno izmenit' znachitel'no bystree i men'shej cenoj, chem mashinu. Odnako eto ne tak, esli sushchestvuet neskol'ko realizacij. Togda vremennye i finansovye izderzhki, svyazannye s ispravleniem mashiny s oshibkami, mogut byt' nizhe, chem svyazannye s peredelkoj mashin, verno sledovavshih rukovodstvu. |to zamechanie mozhno s pol'zoj primenit' pri opredelenii yazyka programmirovaniya. Mozhno s uverennost'yu utverzhdat', chto rano ili pozdno potrebuetsya sozdat' neskol'ko interpretatorov ili kompilyatorov dlya raznyh celej. Opredelenie budet yasnee, a disciplina bolee krepkoj, esli iznachal'no stroyatsya kak minimum dve realizacii. ZHurnal registracii telefonnyh razgovorov Kakimi by tochnymi ne byli specifikacii, po hodu proektirovaniya voznikaet neschetnoe mnozhestvo voprosov kasatel'no interpretacii arhitektury. Ochevidno, mnogie iz etih voprosov trebuyut bolee yasnogo izlozheniya v tekste. Prochie prosto otrazhayut nepravil'noe ponimanie. Vazhno, chtoby ozadachennye ispolniteli zvonili otvetstvennym arhitektoram i zadavali voprosy, a ne prodolzhali rabotu na osnovanii dogadok. Vazhno takzhe ponimat', chto otvety na takie voprosy yavlyayutsya avtoritetnymi zayavleniyami arhitektorov i dolzhny dovodit'sya do vseh. Poleznym mehanizmom yavlyaetsya vedenie arhitektorom zhurnala registracii telefonnyh razgovorov, v kotoryj im zanosyatsya vse voprosy i otvety. Kazhduyu nedelyu zhurnaly neskol'kih arhitektorov ob®edinyayutsya voedino, razmnozhayutsya i raspredelyayutsya sredi pol'zovatelej i ispolnitelej. Nesmotrya na svoyu neformal'nost', takoj mehanizm yavlyaetsya i bystrym, i ponyatnym. Testirovanie produkta Luchshij drug menedzhera proekta - ego postoyannyj protivnik, nezavisimaya organizaciya, testiruyushchaya produkt. Gruppa proveryaet sootvetstvie mashin i produktov specifikaciyam i vystupaet posobnikom d'yavola, ukazyvaya na vse zamechennye defekty i nesootvetstviya. Kazhdoj organizacii, vedushchej razrabotki, nuzhna takaya nezavisimaya gruppa tehnicheskogo audita, kotoraya dolzhna byt' nepodkupna. Poslednij analiz v kachestve nezavisimogo auditora osushchestvlyaet pokupatel'. V bezzhalostnom svete prakticheskogo primeneniya stanet viden kazhdyj ogreh. Gruppa testirovaniya produkta kak raz zamenyaet pokupatelya, nastroennogo na poisk oshibok. Vremya ot vremeni tshchatel'naya proverka produkta obnaruzhivaet mesta, gde ne uslyshali ukazanie, gde proektnye resheniya ponyali nepravil'no ili vypolnili netochno. Poetomu takaya gruppa proveryayushchih yavlyaetsya neobhodimym zvenom v cepochke, po kotoroj dohodit slovo proektirovshchika, zvenom, kotoroe dolzhno nachat' dejstvovat' rano i odnovremenno s proektirovaniem.

    Glava 7. Pochemu ne udalos' postroit' Vavilonskuyu bashnyu?

Na vsej zemle byl odin yazyk i odno narechie. Dvinuvshis' s vostoka, oni nashli v zemle Sennaar ravninu i poselilis' tam. I skazali drug drugu: nadelaem kirpichej i obozhzhem ognem. I stali u nih kirpichi vmesto kamnej, a zemlyanaya smola vmesto izvesti. I skazali oni: postroim sebe gorod i bashnyu, vysotoyu do nebes, i sdelaem sebe imya prezhde, nezheli rasseemsya po licu vsej zemli. I soshel Gospod' posmotret' gorod i bashnyu, kotorye stroili syny chelovecheskie. I skazal Gospod': vot, odin narod, i odin u vseh yazyk; i vot chto oni nachali delat', i ne otstanut oni ot togo, chto zadumali delat'; sojdem zhe i smeshaem tam yazyk ih, tak chtoby odin ne ponimal rechi drugogo. I rasseyal ih Gospod' ottuda po vsej zemle; i oni perestali stroit' gorod [i bashnyu]. KNIGA BYTIYA 11:1-8 Audit menedzhmenta Vavilonskogo proekta Soglasno Knige bytiya, Vavilonskaya bashnya byla vtorym krupnym inzhenernym predpriyatiem cheloveka posle Noeva kovchega. Vavilonskaya bashnya stala pervym inzhenernym fiasko. |ta istoriya gluboka i pouchitel'na v neskol'kih otnosheniyah. Davajte, odnako, rassmotrim ee kak chisto tehnicheskij proekt i posmotrim, kakie uroki administrirovaniya mozhno iz nee izvlech'. Naskol'ko horosho proekt byl obespechen neobhodimymi sostavlyayushchimi uspeha? Imelis' li: 1. YAsnost' celi? Da, hotya i naivno nedostizhimoj. Proekt provalilsya zadolgo do togo, kak stolknulsya s eti principial'nym ogranicheniem. 2. CHelovecheskie resursy? V bol'shom chisle. 3. Materialy? Glina i bitum v izobilii imeyutsya v Mesopotamii. 4. Dostatochno vremeni? Da, net nikakih ukazanij na ogranicheniya po vremeni. 5. Adekvatnye tehnologii? Da, piramidal'noj ili konicheskoj strukture prisushcha ustojchivost' i horoshee raspredelenie nagruzki szhatiya. Ochevidno, svojstva kamennoj kladki byli horosho izvestny. Proekt provalilsya do togo, kak vyshel za predely tehnologicheskih ogranichenij. Tak pochemu zhe provalilsya proekt, esli vse eto u nih bylo? CHego u nih ne hvatalo? Dvuh veshchej - obmena informaciej i vytekayushchej iz nego organizacii. Oni ne mogli razgovarivat' drug s drugom i, kak sledstvie, soglasovyvat' usiliya. Kogda otkazala koordinaciya, rabota vstala. CHitaya mezhdu strok, my obnaruzhivaem, chto otsutstvie obmena informaciej privelo k sporam, durnomu nastroeniyu i vzaimnoj revnosti. Vskore klany nachali rashodit'sya, predpochtya obosoblennost' sporam. Obmen informaciej v bol'shom programmnom proekte V nashe vremya proishodit tozhe samoe. Otstavanie ot grafika, nesootvetstvie funkcional'nosti, sistemnye oshibki - vse eto iz-za togo, chto levaya ruka ne znaet, chto tvorit pravaya. Po hodu raboty uchastvuyushchie v nej neskol'ko brigad ponemnogu izmenyayut funkcii, razmer, bystrodejstvie svoih programm, yavno ili kosvenno menyayut dopushcheniya otnositel'no vhodnyh dannyh i ispol'zovaniya vyhodnyh. Naprimer, ispolnitel' funkcii, osushchestvlyayushchej overlejnuyu zagruzku programm, mozhet stolknut'sya s problemami i snizit' bystrodejstvie, osnovyvayas' na statisticheskih dannyh, ukazyvayushchih na redkost' ispol'zovaniya etoj funkcii v prikladnyh programmah. V to zhe vremya ego sosed mozhet razrabatyvat' vazhnuyu chast' supervizora takim obrazom, chto ona krajne zavisit ot skorosti vypolneniya etoj funkcii. |to izmenenie skorosti vypolneniya, v sushchnosti, stanovitsya znachitel'nym izmeneniem specifikacij, o nem nuzhno shiroko ob®yavit' i ocenit' s tochki zreniya sistemy. Kak zhe dolzhny brigady obmenivat'sya mezhdu soboj informaciej? Vsemi vozmozhnymi sposobami: - Neformal'no. Horoshaya telefonnaya svyaz' i yasnoe opredelenie vzaimozavisimostej mezhdu brigadami dolzhny sposobstvovat' mnogochislennym telefonnym peregovoram, ot kotoryh zavisit edinaya interpretaciya pechatnyh dokumentov. - Soveshchaniya. Nel'zya pereocenit' znachenie regulyarnyh soveshchanij uchastnikov proekta s poocherednym zaslushivaniem tehnicheskih otchetov brigad. Takim putem ustranyayutsya sotni melkih neponimanij. - Rabochaya tetrad'. V samom nachale nuzhno zavesti rabochuyu tetrad' ucheta prodelannoj raboty. |ta tema zasluzhivaet otdel'nogo razdela. Rabochaya tetrad' proekta CHto. Rabochaya tetrad' proekta yavlyaetsya ne stol'ko otdel'nym dokumentom, skol'ko strukturoj, nalagaemoj na vse dokumenty, kotorye budut sozdany vo vremya vypolneniya proekta. Vse dokumenty proekta dolzhny vhodit' v etu strukturu, vklyuchaya celi, vneshnie specifikacii, specifikacii interfejsov, tehnicheskie standarty, vnutrennie specifikacii i administrativnye zapiski. Pochemu. Tehnologicheskij dokument prakticheski vechen. Esli issledovat' genealogiyu rukovodstva pol'zovatelya po kakomu-nibud' apparatnomu ili programmnomu produktu, mozhno prosledit' ne tol'ko idei, no i mnozhestvo otdel'nyh predlozhenij i paragrafov, vplot' do pervoj pamyatnoj zapiski, predlagayushchej produkt ili poyasnyayushchej pervyj proekt. Dlya sostavitelya dokumentacii nozhnicy i klej - takaya zhe vazhnaya veshch', kak pero. Raz eto tak, i zavtrashnie rukovodstva dlya gotovogo produkta razvivayutsya iz segodnyashnih pamyatnyh zapisok, ochen' vazhno pravil'no opredelit' strukturu dokumentacii. Razrabotka rabochej tetradi proekta na rannih etapah obespechivaet produmannuyu, a ne sluchajnuyu strukturu dokumentacii. Bolee togo, zadanie struktury pozvolyaet sostavlennye pozdnee dokumenty oformit' v vide otryvkov, kotorye vpisyvayutsya v etu strukturu. Vtoroj prichinoj dlya vedeniya rabochej tetradi yavlyaetsya neobhodimost' upravleniya processom rasprostraneniya informacii. Zadacha sostoit ne v ogranichenii dostupa k informacii, a v tom, chtoby sootvetstvuyushchaya informaciya dostigla vseh, komu ona mozhet ponadobit'sya. Pervym delom sleduet pronumerovat' vse pamyatnye zapiski, tak chtoby imelis' uporyadochennye spiski nazvanij, i kazhdyj rabotnik mog ubedit'sya v nalichii neobhodimyh emu materialov. Organizaciya rabochej tetradi idet znachitel'no dal'she, ustanavlivaya drevovidnuyu strukturu pamyatnyh zapisok. Drevovidnaya struktura pozvolyaet, esli nuzhno, organizovat' dostavku informacii sootvetstvenno podderev'yam. Mehanika. Kak i vo mnogih zadachah upravleniya programmnymi proektami, problema tehnicheskih memorandumov uslozhnyaetsya nelinejnym obrazom po mere uvelicheniya ob®ema dannyh. Esli v rabote uchastvuyut 10 chelovek, dokumenty mozhno prosto pronumerovat'. Esli uchastvuyut 100 chelovek, chasto dostatochno neskol'kih linejnyh posledovatel'nostej. Dlya 1000 sotrudnikov, neizbezhno razbrosannyh po neskol'kim ploshchadkam, vozrastaet potrebnost' v strukturirovannoj rabochej tetradi, i, sledovatel'no, vozrastaet ee ob®em. Kak postupat' v etom sluchae? YA dumayu, my pravil'no postupili pri rabote nad proektom OS/360. Na neobhodimosti horosho strukturirovannoj rabochej tetradi osobenno nastaival O. S. Loken, kotoryj ubedilsya v ee effektivnosti pri rabote nad svoim predydushchim proektom, - operacionnoj sistemoj 1410-7010. My bystro prinyali reshenie, chto kazhdyj programmist dolzhen imet' vozmozhnost' videt' ves' material, t.e. dolzhen imet' ekzemplyar rabochej tetradi v svoem ofise. Reshayushchee znachenie imeet svoevremennoe obnovlenie. Rabochaya tetrad' dolzhna otrazhat' tekushchee sostoyanie proekta. |to ochen' trudno osushchestvit', kogda dlya vneseniya obnovlenij nuzhno perepechatyvat' celye dokumenty. Odnako v tetradi s vynimayushchimisya listami dostatochno zamenit' otdel'nye stranicy. U nas imelas' komp'yuternaya sistema redaktirovaniya teksta, okazavshayasya bescennoj dlya svoevremennogo obnovleniya. Ofsetnye formy izgotavlivalis' neposredstvenno na printere, i cikl obrabotki sostavlyal men'she odnogo dnya. Pered poluchatelem vseh etih obnovlennyh stranic vstaet, odnako, problema usvoeniya. Kogda on vpervye poluchaet obnovlennuyu stranicu, to emu nuzhno znat', chto bylo izmeneno. Kogda on pozzhe obrashchaetsya k nej, to emu nuzhno znat', kakoe opredelenie dejstvitel'no na tekushchij den'. Poslednyuyu potrebnost' udovletvoryaet nepreryvnost' obnovleniya dokumentacii. CHtoby vydelit' izmeneniya, trebuyutsya drugie mery. Vo-pervyh, nuzhno otmetit' na stranice izmenennyj tekst, naprimer, s pomoshch'yu vertikal'noj linii na polyah ryadom s kazhdoj izmenennoj strochkoj. Vo-vtoryh, neobhodimo vmeste s izmenennymi stranicami rasprostranyat' kratkuyu otdel'nuyu svodku s perechisleniem izmenenij i harakteristikoj ih znacheniya. Nash proekt ne pereshel i shestimesyachnogo rubezha, kogda my stolknulis' s drugoj problemoj. Tolshchina rabochej tetradi sostavila okolo polutora metrov! Esli by my slozhili v odnu stopku trebuyushchiesya programmistam 100 ekzemplyarov v svoih pomeshcheniyah zdaniya Time-Life v Manhettene, ona by prevysila po vysote samo zdanie. Krome togo, ezhednevnye ispravleniya imeli tolshchinu bol'she pyati santimetrov i naschityvali okolo 150 stranic, kotorye nado bylo zamenit'. Podderzhka rabochej tetradi stala zanimat' znachitel'nuyu chast' ezhednevnogo rabochego vremeni. S etogo vremeni my pereshli na mikrofishi, chto sbereglo million dollarov dazhe s uchetom stoimosti ustrojstv dlya chteniya mikrofishej v kazhdom ofise. My smogli dostich' otlichnoj prodolzhitel'nosti cikla proizvodstva mikrofishej. Rabochaya tetrad' umen'shilas' v ob®eme s 90 dm3 do 5 dm3 i, chto bolee vazhno, obnovleniya vypuskalis' porciyami po sotne stranic, stokratno umen'shaya slozhnost' zameny listov. Mikrofishi imeyut svoi nedostatki. S tochki zreniya menedzhera, neudobstvo zameny bumazhnyh stranic garantirovalo, chto ih prochtut, dlya chego i velas' rabochaya tetrad'. Mikrofishi slishkom oblegchili zadachu vedeniya rabochej tetradi, esli tol'ko oni ne soprovozhdalis' pechatnym dokumentom s perechisleniem izmenenij. Krome togo, mikrofishi ne pozvolyayut chitatelyu legko delat' vydeleniya, pometki i kommentarii. Dokumenty, s kotorymi chitatel' rabotal, prinosyat bol'she pol'zy avtoru i chitatelyu. Vzveshivaya vse, ya polagayu, chto mikrofishi yavlyayutsya ochen' udachnoj tehnologiej, i dlya ochen' krupnyh proektov ya by otdal im predpochtenie pered bumazhnoj rabochej tetrad'yu. Kak mozhno osushchestvit' eto segodnya? Segodnyashnie sistemnye tehnologii, ya dumayu, delayut predpochtitel'nee vedenie rabochej tetradi v fajle pryamogo dostupa s poloskami, pomechayushchimi izmenennye chasti, i datami vneseniya izmenenij. Lyuboj pol'zovatel' mozhet obratit'sya k zhurnalu s displejnogo terminala. Svodka izmenenij, gotovyashchayasya ezhednevno, dolzhna hranit'sya v vide steka (LIFO) s ustanovlennoj tochkoj dostupa. Programmist mozhet ezhednevno ee chitat', no esli on propustil odin den', emu pridetsya dol'she chitat' na sleduyushchij den'. Prochtya ob izmeneniyah, on mozhet prervat'sya i prochest' sam izmenennyj tekst. Obratite vnimanie, chto sama rabochaya tetrad' ostaetsya neizmennoj. Ona po- prezhnemu ostaetsya sobraniem vsej proektnoj dokumentacii, tshchatel'no organizovannoj. Edinstvennoe izmenenie - mehanizm raspredeleniya dostupa. D. S. |nglebart s kollegami sozdali takuyu sistemu v Stenfordskom issledovatel'skom institute i ispol'zuyut ee dlya vedeniya dokumentacii po seti ARPA. D. L. Pranas i Universiteta Karnegi-Melona predlozhil eshche bolee radikal'noe reshenie.1 On polagaet, chto proizvoditel'nost' programmista vyshe vsego, kogda on ograzhden ot podrobnostej konstrukcii teh chastej sistemy, nad kotorymi on ne rabotaet. |to predpolagaet, chto vse interfejsy polnost'yu i tochno zadany. Takoj proekt opredelenno horosh, no esli polagat'sya na ego ideal'noe osushchestvlenie, eto privedet k katastrofe. Horoshaya informacionnaya sistema ne tol'ko dolzhna vyyavlyat' oshibki v interfejsah, no i sposobstvovat' ih ispravleniyu. Organizaciya krupnogo programmnogo proekta Esli nad proektom rabotaet n chelovek, to sushchestvuet (n2-n)/2 interfejsov, cherez kotorye mozhet proishodit' obmen dannymi, i potencial'no sushchestvuet pochti 2n grupp, vnutri kotoryh dolzhno proishodit' soglasovanie. Cel' organizacii raboty sostoit v sokrashchenii neobhodimogo ob®ema obmena informaciej i soglasovaniya. Poetomu sozdanie pravil'noj organizacionnoj struktury yavlyaetsya reshayushchim napravleniem resheniya problem informacionnogo obmena, rassmatrivavshihsya vyshe. Sposoby, kotorymi sokrashchaetsya obmen informaciej, - razdelenie truda i specializaciya funkcij. Drevovidnaya organizacionnaya struktura otrazhaet umen'shenie potrebnosti v podrobnom obmene informaciej pri ispol'zovanii razdeleniya truda i specializacii. V dejstvitel'nosti, organizaciya v vide dereva voznikaet kak strukturizaciya polnomochij i otvetstvennosti. Princip, chto nikto ne mozhet byt' slugoj dvuh gospod, trebuet, chtoby struktura polnomochij byla drevovidnoj. Odnako struktura obmena informaciej ne stol' ogranichena, i derevo yavlyaetsya malo prigodnym priblizheniem struktury obshcheniya, kotoraya yavlyaetsya set'yu. Neadekvatnost' priblizheniya derevom sluzhit prichinoj vozniknoveniya brigad, celevyh grupp, komissij i dazhe organizacij matrichnogo tipa, sushchestvuyushchih vo mnogih inzhenernyh laboratoriyah. Rassmotrim drevovidnuyu organizaciyu programmistov i issleduem sushchestvennye harakteristiki, kotorymi dolzhny obladat' podderev'ya, chtoby byt' effektivnymi. Takovymi yavlyayutsya: 1 - zadanie, 2 - prodyuser, 3 - tehnicheskij direktor ili arhitektor, 4 - grafik rabot, 5 - razdelenie truda, 6 - opredelenie interfejsov mezhdu raznymi chastyami. Vse perechislennoe ochevidno i obychno, isklyuchaya razlichie mezhdu prodyuserom i tehnicheskim direktorom. Snachala rassmotrim sami eti dve funkcii, a zatem ih vzaimootnosheniya. V chem naznachenie prodyusera? On sobiraet brigadu, raspredelyaet rabotu i ustanavlivaet grafik ee vypolneniya. On zanimaetsya priobreteniem neobhodimyh resursov. |to oznachaet, chto bol'shaya chast' ego funkcij sostoit v obshchenii, kotoroe napravleno vne brigady, - vverh i v storony. On ustanavlivaet shemu svyazi i predostavleniya otchetnosti vnutri brigady. Nakonec, on obespechivaet vypolnenie grafika, osushchestvlyaya manevr resursami i menyaya organizaciyu v sootvetstvii s novymi obstoyatel'stvami. A chto zhe tehnicheskij direktor? On postigaet proekt, kotoryj dolzhen byt' realizovan, vyyavlyaet ego sostavlyayushchie, opredelyaet, kak on budet vyglyadet' vneshne, i delaet eskiz vnutrennej struktury. On obespechivaet edinstvo i konceptual'nuyu celostnost' proekta v celom i takim obrazom sposobstvuet ogranicheniyu slozhnosti sistemy. Pri vozniknovenii tehnicheskih problem on izyskivaet ih resheniya ili pri neobhodimosti izmenyaet sistemnyj proekt. On, soglasno prelestnomu vyrazheniyu Ala Kappa, yavlyaetsya "svoim chelovekom v parshivyh delah". Obshchenie ego proishodit preimushchestvenno vnutri komandy. Ego rabota pochti isklyuchitel'no tehnicheskaya. Teper' vidno, chto dlya etih dvuh funkcij trebuyutsya sovershenno raznye sposobnosti. Sposobnosti vstrechayutsya v raznyh sochetaniyah, i otnosheniya mezhdu prodyuserom i direktorom dolzhny opredelyat'sya temi konkretnymi sochetaniyami, kotorymi oni obladayut. Ne lyudi dolzhny byt' vtisnuty v chisto teoreticheskie organizacionnye formy, a organizaciya dolzhna stroit'sya vokrug teh lyudej, kotorye est'. Vozmozhny tri tipa otnoshenij, i vse oni s uspehom vstrechayutsya na praktike. Odno i to zhe lico mozhet byt' prodyuserom i tehnicheskim direktorom. |to vpolne opravdano v malen'kih komandah, naschityvayushchih ot treh do shesti programmistov. V bolee krupnyh proektah eto ochen' redko osushchestvimo po dvum prichinam. Vo-pervyh, redko vstrechayutsya lyudi, sochetayushchie v sebe bol'shie administrativnye i tehnicheskie sposobnosti. Mysliteli vstrechayutsya redko, praktiki eshche rezhe, no rezhe vsego - mysliteli-praktiki. Vo-vtoryh, v bol'shih proektah vypolnenie kazhdoj iz funkcij trebuet polnogo rabochego dnya ili dazhe bol'she. Prodyuseru trudno peredat' komu-libo dostatochnuyu chast' svoih obyazannostej, chtoby vysvobodit' vremya dlya tehnicheskoj raboty. Direktoru nevozmozhno peredat' svoi obyazannosti, ne nanosya ushcherba konceptual'noj celostnosti proekta. Prodyuser mozhet byt' nachal'nikom, a direktor - ego pravoj rukoj. Slozhnost' zdes' sostoit v tom, chtoby opredelit' polnomochiya direktora pri prinyatii tehnicheskih reshenij, s tem chtoby on ne tratil svoe vremya, uchastvuya v administrativnoj cepochke. Ochevidno, prodyuser dolzhen ob®yavit' o polnomochiyah direktora v tehnicheskoj oblasti i v vysshej stepeni ukreplyat' ih v voznikayushchih spornyh situaciyah. CHtoby eto bylo vozmozhno, prodyuser i direktor dolzhny imet' shozhie vzglyady po osnovnym tehnicheskim voprosam. Oni dolzhny chastnym obrazom soglasovyvat' osnovnye tehnicheskie problemy, prezhde chem oni vstanut na povestku dnya. Prodyuser dolzhen takzhe s bol'shim uvazheniem otnosit'sya k tehnicheskomu masterstvu direktora. CHto menee ochevidno, prodyuser mozhet s pomoshch'yu simvolov statusa (takih kak razmer kabineta, kovrovoe pokrytie, mebel', rassylka vtoryh ekzemplyarov dokumentov i t.p.) podcherkivat', chto direktor, nahodyas' vne administrativnoj cepochki, obladaet, tem ne menee, vlast'yu v prinyatii reshenij. |to mozhet dejstvovat' ochen' uspeshno. K neschast'yu, k etomu redko pribegayut. CHto huzhe vsego poluchaetsya u menedzherov proektov, - tak eto ispol'zovanie tehnicheskogo geniya lyudej, ne ochen' sil'nyh v administrirovanii. Direktor mozhet byt' nachal'nikom, a prodyuser - ego pravoj rukoj. Robert Hajnlajn yarko opisyvaet takuyu organizaciyu v "CHeloveke, prodavshem Lunu". Koster zakryl lico rukami, zatem vzglyanul vverh: - YA razbirayus' v etom. YA znayu, chto nuzhno delat', no vsyakij raz, kogda ya pytayus' zanyat'sya tehnicheskoj problemoj, kakoj-nibud' bolvan hochet, chtoby ya prinyal reshenie po povodu gruzovikov, ili telefonov, ili eshche kakoj-nibud' erundy. Prostite, mister Garriman. Mne kazalos', ya spravlyus' so vsem etim. Garriman ochen' myagko skazal: - Ne otchaivajsya, Bob. Ty ved' nedosypal poslednee vremya, pravda? Vot chto ya skazhu: my perehitrim Fergyusona. YA voz'mu tvoj stol na neskol'ko dnej i postroyu organizaciyu, kotoraya ogradit tebya ot takih veshchej. YA hochu, chtoby tvoi mozgi byli zanyaty vektorami reakcii, effektivnost'yu topliva i slozhnostyami proekta, a ne kontraktami po gruzovikam. - Garriman podoshel k dveri, vyglyanul naruzhu i zametil cheloveka, kotoryj byl, vozmozhno, starshim klerkom. - |j, vy! Podojdite syuda! CHelovek pokazalsya ozadachennym, vstal i, podojdya k dveri, sprosil: Da? - YA hochu, chtoby etot stol v uglu i vse, chto na nem, byli pereneseny v pustuyu komnatu na etom etazhe, i nemedlenno. On prosledil, kak Koster i vtoroj ego stol pereehali v druguyu komnatu, ubedilsya, chto telefon v novom pomeshchenii otklyuchen, i, podumav, zastavil perenesti tuda divan. - My postavim proektor, chertezhnuyu dosku, knizhnye shkafy i vse takoe prochee segodnya vecherom, - skazal on Kosteru. - Prosto sostav' spisok vsego neobhodimogo, chtoby zanimat'sya delom. - On vernulsya v oficial'nyj kabinet glavnogo inzhenera i s radost'yu vzyalsya za rabotu, pytayas' vyyasnit', kakovo polozhenie del, i chto ne laditsya. CHasa cherez tri on pozval Barkli, chtoby poznakomit' ego s Kosterom. Glavnyj inzhener spal, sidya za stolom, polozhiv golovu na ruki. Garriman hotel vyjti, no Koster prosnulsya. Proshu proshcheniya, - skazal on, krasneya, - ya, navernoe, zadremal. - Dlya etogo ya pritashchil tebe divan, - skazal Garriman, - na nem udobnee. Bob, poznakom'sya s Dzhokom Berkli. |to tvoj novyj rab. Ty ostaesh'sya glavnym inzhenerom i neosporimym nachal'nikom. Dzhok budet Glavnym lordom Vse Ostal'noe. S etogo momenta tebe absolyutno ne o chem bespokoit'sya - isklyuchaya takuyu meloch', kak lunnyj korabl'. Oni pozhali ruki. - Hochu prosit' ob odnoj veshchi, mister Koster, - skazal Berkli s ser'eznost'yu, - peredavajte mne vse, chto sochtete neobhodimym - vasha storona tehnicheskaya, - no Boga radi, zapisyvajte vse, chtoby ya byl v kurse. YA hochu, chtoby vam na stol postavili vyklyuchatel', kotoryj budet upravlyat' opechatannym magnitofonom na moem stole. Otlichno! - Garrimanu pokazalos', chto Koster pomolodel. - I esli vam ponadobitsya chto-libo, ne otnosyashcheesya k tehnike, ne zanimajtes' etim sami. Nazhmite vyklyuchatel' i svistnite. Vse budet sdelano. - Berkli vzglyanul na Garrimana. - Hozyain govorit, chto sobiraetsya pogovorit' s vami o nastoyashchej rabote. YA vas pokinu i zajmus' delami. - On vyshel. Garriman sel. Koster posledoval ego primeru i skazal: Uf! Tak luchshe? Mne ponravilsya etot Berkli. - |to horosho. Teper' eto tvoj dvojnik. Ne bespokojsya: on rabotal u menya ran'she. Ty pochuvstvuesh' sebya, kak v horoshej bol'nice.2 |tot tekst edva li nuzhdaetsya v analiticheskih kommentariyah. Takaya organizaciya tozhe mozhet effektivno dejstvovat'. Mne kazhetsya, chto poslednij tip organizacii luchshe podhodit dlya nebol'shih komand, opisannyh v glave 3 "Operacionnaya brigada". Polagayu, chto prodyuser v kachestve nachal'nika bolee podhodit dlya bol'shih podderev'ev dejstvitel'no krupnyh proektov. Vavilonskaya bashnya byla, vozmozhno, pervym inzhenernym fiasko, no ne poslednim. Reshayushchee znachenie dlya uspeha imeyut shema svyazi i vytekayushchaya iz nee organizaciya. Tehnologii obmena informaciej i sozdaniya organizacionnyh struktur trebuyut ot menedzhera bol'shoj raboty mysli i takoj zhe podkreplennoj opytom kompetentnosti, kak i sama tehnologiya programmnogo obespecheniya.

    Glava 8. Ob®yavlyaya udar

Praktika - luchshij uchitel'. PUBLIJ Opyt - dorogoj uchitel', no dlya glupcov inogo net. ALXMANAH BEDNOGO RICHARDSA(Bednyj Richard - obraz neobrazovannogo, no zdravomyslyashchego domoroshchennogo filosofa, sozdannyj Bendzhaminom Franklinom, izdavavshim v 1732 - 1757 godah ezhegodnyj al'manah i ispol'zovavshim etot psevdonim (primech. perev.).) Skol'ko vremeni potrebuet zadacha sistemnogo programmirovaniya? Skol'ko sil ponadobitsya? Kak mozhno eto ocenit'? Ranee ya predlozhil sootnosheniya, kotorye mozhno primenyat' dlya vremeni planirovaniya, napisaniya programm, testirovaniya komponentov i testirovaniya sistemy. Vo-pervyh, nuzhno skazat', chto nel'zya delat' ocenku vsej zadachi, ocenivaya tol'ko chast', otnosyashchuyusya k napisaniyu programm, a zatem primenyaya sootnosheniya. Napisanie programm sostavlyaet lish' odnu shestuyu chast' zadachi ili okolo togo, i oshibki pri ego ocenivanii ili v sootnosheniyah mogut privesti k smehotvornym rezul'tatam. Vo-vtoryh, nuzhno uchityvat', chto ocenki, poluchennye pri sozdanii otdel'nyh nebol'shih programm, nel'zya primenyat' dlya bol'shih sistemnyh produktov. K primeru, dlya programmy, naschityvayushchej 3200 slov, Sakman, |rikson i Grant ocenivayut summarnoe vremya napisaniya programm i otladki dlya odnogo programmista v 178 chasov, chto ekstrapoliruetsya do 35800 operatorov v god. Vdvoe men'shaya programma potrebovala men'she chetverti ukazannogo vremeni, chto pri ekstrapolyacii daet proizvoditel'nost', blizkuyu uzhe k 80000 operatoram v god.1 Neobhodimo dobavit' zatraty vremeni na planirovanie, sostavlenie dokumentacii, testirovanie, sistemnuyu integraciyu i obuchenie. Linejnaya ekstrapolyaciya dannyh, otnosyashchihsya k korotkim zadacham, bessmyslenna. Esli ekstrapolirovat' vremya, za kotoroe mozhno probezhat' stometrovku, to okazhetsya, chto mozhno probezhat' milyu menee chem za tri minuty. Prezhde chem otkazat'sya ot etih dannyh, otmetim, chto i dlya ne sovsem sravnimyh zadach oni pokazyvayut, chto ob®em raboty rastet kak stepennaya funkciya razmera, dazhe bez ucheta processa otmena informaciej (krome programmista s sobstvennoj pamyat'yu). Pokazannye na ris. 8.1 dannye vyzyvayut grustnye chuvstva. Grafik demonstriruet rezul'taty, poluchennye v issledovanii, provedennom Nanusom (Nanus) i Farrom (Farr)2 v System Development Corporation. V nem vyyavlyaetsya zavisimost' s pokazatelem stepeni 1,5: Ob®em raboty = (konstanta) CH (kolichestvo komand)1,5. V drugom issledovanii, provedennom v etoj kompanii, o kotorom soobshchaet Vajnvurm (Weinwurm)3, takzhe poluchen pokazatel', blizkij k 1,5. Est' neskol'ko issledovanij otnositel'no proizvoditel'nosti truda programmista, v kotoryh predlozhen ryad tehnologij ocenivaniya. Est' obzor opublikovannyh dannyh, podgotovlennyj Mourinom (Morin).4 YA privedu zdes' lish' neskol'ko naibolee pokazatel'nyh rezul'tatov. Ris. 8.1 Zatraty na programmirovanie kak funkciya razmera programmy Dannye Portmana CHarl'z Portman (Charles Portman), menedzher otdela programmirovaniya ICL - Computer Equipment Organization (Northwest) v Manchestere, predlagaet svoe ponimanie problemy, kotoroe mozhet okazat'sya poleznym. On obnaruzhil, chto ego komandy programmistov otstayut ot grafikov primerno napolovinu, t.e. kazhdoe zadanie vypolnyaetsya primerno vdvoe dol'she, chem predpolagalos'. Pri etom ocenki ochen' tshchatel'no provodilis' gruppami opytnyh ekspertov, ocenivavshih v cheloveko-chasah trudoemkost' neskol'kih soten podzadach s pomoshch'yu diagramm PERT. Kogda vyyavlyalos' otstavanie ot grafika, on prosil vesti podrobnye ezhednevnye zhurnaly ispol'zovaniya vremeni. Iz nih vyyasnilos', chto oshibka ocenok polnost'yu ob®yasnyaetsya tem, chto ego komandy ispol'zovali na programmirovanie i otladku lish' 50 procentov rabochego vremeni. Ostal'noe vremya teryalos' iz-za otkazov mashiny, na nebol'shie srochnye postoronnie zadaniya, soveshchaniya, pisanie bumag, dela firmy, bolezni, lichnoe vremya i t.d. Koroche ocenki ishodili iz nerealistichnogo predpolozheniya o tom, kakaya chast' rabochego vremeni otvoditsya neposredstvenno rabote.6 Dannye Arona Dzhoel Aron (Joel Aron), menedzher IBM po sistemnym tehnologiyam v Gejtersberge, shtat Merilend, izuchal effektivnost' truda programmistov vo vremya raboty nad devyat'yu krupnymi sistemami (krupnaya sootvetstvuet bolee chem 25 programmistam i 30000 operatorov).7 On klassificiruet takie sistemy v sootvetstvii s intensivnost'yu vzaimodejstviya mezhdu programmistami (i chastyami sistemy) i obnaruzhivaet sleduyushchie velichiny proizvoditel'nosti: Ochen' slaboe vzaimodejstvie 10000 instrukcij na cheloveka v god Nekotoroe vzaimodejstvie 5000 instrukcij na cheloveka v god Sushchestvennoe vzaimodejstvie 1500 instrukcij na cheloveka v god CHeloveko-god zdes' ne uchityvaet podderzhku i sistemnoe testirovanie, tol'ko razrabotku i programmirovanie. Pri vvedenii popravki s koefficientom dva s cel'yu ucheta sistemnogo testirovaniya eti cifry blizko sootvetstvuyut dannym Harra. Dannye Harra Dzhon Harr (John Harr), menedzher po programmirovaniyu Electronic Switching System, vhodyashchej v sostav Bell Telephone Laboratories, soobshchil o svoem sobstvennom opyte i drugih izvestnyh emu dannyh v doklade na Ob®edinennoj konferencii po komp'yuteram vesnoj 1969 goda.8 |ti dannye privedeny na risunkah 8.2, 8.3 i 8.4. Naibolee pouchitelen i soderzhit bol'she dannyh risunok 8.2. Pervye dva zadaniya yavlyayutsya, po preimushchestvu, upravlyayushchimi programmami, a dva vtoryh - yazykovymi translyatorami. Proizvoditel'nost' izmeryaetsya v kolichestve otlazhennyh slov za cheloveko-god. Pri etom uchityvaetsya vremya programmirovaniya, otladki i sistemnogo testirovaniya. Neizvestno, uchteny li zatraty na planirovanie, podderzhku mashiny, sostavlenie dokumentacii i t.p. Ris. 8.2 Svodka po chetyrem vazhnejshim programmnym proektam, osushchestvlennym v ESS Proizvoditel'nost' razbivaetsya na dva klassa: dlya upravlyayushchih programm sostavlyaet okolo 600 slov na cheloveka za god, dlya translyatorov - okolo 2200. Obratite vnimanie, chto vse chetyre programmy priblizitel'no odnogo razmera, razlichie sostoit v razmere rabochih grupp, prodolzhitel'nosti raboty i kolichestve modulej. CHto yavlyaetsya prichinoj, a chto - sledstviem? Byla li slozhnost' prichinoj togo, chto dlya upravlyayushchih programm trebovalos' bol'she lyudej? Ili zhe bol'shee chislo modulej i cheloveko-mesyacev obuslovleno bol'shim chislom lyudej, privlechennyh k rabote? Byla li bol'shaya prodolzhitel'nost' vypolneniya vyzvana slozhnost'yu problem ili mnogochislennost'yu zanyatyh lyudej? Trudno skazat' s uverennost'yu. Konechno, upravlyayushchie programmy byli bolee slozhnymi. Esli ostavit' v storone eti neopredelennosti, to cifry opisyvayut real'nuyu proizvoditel'nost' pri sozdanii bol'shih sistem, i potomu predstavlyayut cennost'. Na risunkah 8.3 i 8.4 pokazany nekotorye interesnye dannye o fakticheskoj skorosti programmirovaniya i otladki v sravnenii s prognozom. Dannye OS/360 Opyt OS/360 podtverzhdaet dannye Harra, hotya dannye po OS/360 ne stol' podrobny. V gruppah razrabotki upravlyayushchej programmy proizvoditel'nost' sostavila 600-800 otlazhennyh komand v god na cheloveka. V gruppah razrabotki translyatorov proizvoditel'nost' dostigla 2000-3000 otlazhennyh komand v god na cheloveka. Pri etom uchityvaetsya planirovanie, testirovanie komponentov, sistemnoe testirovanie i nekotorye zatraty na podderzhku. Naskol'ko ya mogu sudit', eti dannye soglasuyutsya s rezul'tatami Harra. Ris. 8.3 Predskazannaya i fakticheskaya skorost' programmirovaniya Ris. 8.4 Predskazannaya i fakticheskaya skorost' otladki Dannye Arona, Harra i OS/360 druzhno podtverzhdayut rezkie razlichiya v proizvoditel'nosti v zavisimosti ot slozhnosti i trudnosti samoj zadachi. V rabote ocenivaniya slozhnosti ya priderzhivayus' toj linii, chto kompilyatory vtroe huzhe obychnyh paketnyh prikladnyh programm, a operacionnye sistemy vtroe huzhe kompilyatorov.9 Dannye Korbato Dannye Harra i OS/360 otnosyatsya k programmirovaniyu na yazyke assemblera. Est' nemnogo publikacij otnositel'no proizvoditel'nosti sistemnogo programmirovaniya s ispol'zovaniem yazykov vysokogo urovnya. Korbato (Corbato) iz proekta MAC Massachusetskogo tehnologicheskogo instituta soobshchaet o srednej proizvoditel'nosti 1200 strok otlazhennyh operatorov PL/I na cheloveka v god pri razrabotke operacionnoj sistemy MULTICS (ot 1 do 2 millionov slov).10 |to chislo ochen' vdohnovlyaet. Kak u drugih proektov, MULTICS vklyuchaet v sebya upravlyayushchie programmy i yazykovye translyatory. Rezul'tatom takzhe yavlyaetsya sistemnyj produkt, otlazhennyj i dokumentirovannyj. Dannye kazhutsya sravnimymi v otnoshenii vidov ispolnennoj raboty. A proizvoditel'nost' povyshaetsya do srednej velichiny mezhdu upravlyayushchimi programmami i translyatorami v drugih proektah. No Korbato ukazyvaet kolichestvo strok za god na cheloveka, a ne slov! Kazhdomu operatoru v ego sisteme sootvetstvuet ot treh do pyati slov koda, napisannogo vruchnuyu! Iz etogo mozhno sdelat' dva vazhnyh vyvoda: - Proizvoditel'nost', izmerennaya v elementarnyh operaciyah, okazyvaetsya postoyannoj, chto kazhetsya razumnym, esli uchityvat', skol'ko vremeni nuzhno dumat' nad operatorom, i skol'ko oshibok mozhet v nem byt'.11 - Pri ispol'zovanii podhodyashchego yazyka vysokogo urovnya proizvoditel'nost' mozhno povysit' v pyat' raz.12

    Glava 9. Dva v odnom

Avtoru stoit prismotret'sya k Noyu i... pouchit'sya na primere Kovchega, kak v ochen' malen'koe prostranstvo vtisnut' ochen' mnogo. SIDNEJ SMIT, "|DINBURGSKOE REVYU" Razmer programmy kak stoimost' Kakova stoimost' programmy? Esli ne schitat' vremeni vypolneniya, to pomyat', zanimaemaya programmoj, sostavlyaet glavnye izderzhki. |to verno dazhe dlya sobstvennyh razrabotok, kogda pol'zovatel' platit avtoru sushchestvenno men'she, chem stoit razrabotka. Voz'mem interaktivnuyu sistemu IBM APL. Plata za ee ispol'zovanie sostavlyaet $400 v mesyac. Pri rabote ona trebuet ne men'she 160 Kbajt pamyati. U mashiny Model 165 ezhemesyachnaya arenda 1 Kbajta pamyati stoit okolo $12. Esli pol'zovat'sya programmoj kruglosutochno, to mesyachnaya plata sostavit $400 za pol'zovanie programmoj i $1920 za pamyat'. Esli pol'zovat'sya sistemoj APL lish' chetyre chasa v den', to mesyachnaya plata sostavit $400 za pol'zovanie programmoj i $320 za ispol'zovanie pamyati. Neredko mozhno vstretit' cheloveka, vyrazhayushchego uzhas po povodu togo, chto v mashine, imeyushchej 2 Mbajt pamyati, pod operacionnuyu sistemu mozhet byt' otvedeno 400 Kbajt. |to stol' zhe glupo, kak rugat' Boing-747 za to, chto on stoit 27 millionov dollarov. Nado zhe sprosit': "A chto ona delaet?" Kakuyu, sobstvenno, prostotu v ispol'zovanii i proizvoditel'nost' (posredstvom effektivnogo ispol'zovaniya sistemy) poluchaesh' za potrachennye den'gi? Nel'zya li vlozhennye v arendu pamyati $4800 v mesyac izrashodovat' s bol'shej pol'zoj - na drugie apparatnye sredstva, programmistov, prikladnye programmy? Proektirovshchik sistemy otvodit chast' vseh apparatnyh resursov programmam, rezidentno nahodyashchimsya v pamyati, esli schitaet, chto pol'zovatelyu eto nuzhnee, chem summatory, diski i t.d. Nel'zya kritikovat' programmnuyu sistemu za razmer kak takovoj, i v to zhe vremya posledovatel'no propagandirovat' tesnuyu integraciyu proektirovaniya apparatnogo i programmnogo obespecheniya. Poskol'ku razmer opredelyaet znachitel'nuyu dolyu togo, vo chto obhoditsya pol'zovatelyu sistemnyj programmnyj produkt, izgotovitel' dolzhen planirovat' razmer, kontrolirovat' ego i razrabatyvat' tehnologii, umen'shayushchie razmer, podobno tomu, kak izgotovitel' apparatnoj chasti planiruet kolichestvo detalej, kontroliruet ego i razrabatyvaet metody sokrashcheniya kolichestva detalej. Kak i dlya vsyakoj ceny, ploh ne bol'shoj razmer kak takovoj, a razmer, ne vyzyvaemyj neobhodimost'yu. Upravlenie razmerom Dlya menedzhera proekta upravlenie razmerom yavlyaetsya otchasti tehnicheskoj, otchasti administrativnoj zadachej. CHtoby ustanavlivat' razmery predlagaemyh sistem, neobhodimo izuchat' pol'zovatelej i ispol'zuemye imi prilozheniya. Zatem sistemy dolzhny razlagat'sya na komponenty, dlya kotoryh opredelyayutsya proektnye razmery. Poskol'ku var'irovat' sootnosheniem skorosti i razmera mozhno lish' dostatochno bol'shimi skachkami, planirovanie razmera yavlyaetsya neprostym delom, trebuyushchim znaniya vozmozhnyh kompromissov dlya kazhdoj chasti. Opytnyj menedzher sdelaet sebe takzhe "zanachku", kotoruyu mozhno budet ispol'zovat' v processe raboty. Vse zhe pri rabote nad OS/360 prishlos' izvlech' neskol'ko gor'kih urokov, nesmotrya na to, chto vse opisannye mery byli prinyaty. Prezhde vsego, nedostatochno ustanovit' razmer pamyati, nuzhno vzvesit' razmer so vseh storon. Bol'shinstvo prezhnih operacionnyh sistem razmeshchalos' na magnitnyh lentah, i bol'shoe vremya poiska na lente ne raspolagalo k chastoj zagruzke programmnyh segmentov. OS/360 raspolagalas' na diske, kak i ee neposredstvennye predshestvenniki - operacionnaya sistema Stretch i diskovaya operacionnaya sistemy 1410-7010. Ee sozdateli poluchili svobodu legkogo obrashcheniya k disku. Pervonachal'no eto obernulos' katastrofoj dlya proizvoditel'nosti. Pri opredelenii razmerov pamyati komponentov my ne ustanovili odnovremenno byudzhetov dostupa. Kak i sledovalo ozhidat', programmist, vyhodivshij za ramki opredelennoj emu pamyati, razbival programmu na overlei. V rezul'tate i summarnyj razmer uvelichivalsya, i vypolnenie zamedlyalos'. Huzhe to, chto nasha sistema administrativnogo kontrolya ne smogla eto obnaruzhit'. Kazhdyj programmist soobshchal, skol'ko pamyati on ispol'zoval, i tak kak on ukladyvalsya v zadanie, nikto ne bespokoilsya. K schast'yu, vskore nastal den', kogda zarabotala sistema modelirovaniya tehnicheskih harakteristik OS/360. Pervye rezul'taty pokazali nalichie ser'eznyh problem. Modelirovanie kompilyacii s Fortran H na mashine Model 65 s barabanami dalo rezul'tat pyat' operatorov v minutu! Analiz pokazal, chto vse modeli upravlyayushchej programmy delali mnozhestvo obrashchenij k disku. Dazhe intensivno ispol'zuemye moduli supervizora chasto obrashchalis' k disku, i rezul'tat po zvuku ves'ma napominal shelest perelistyvaemoj knigi. Pervaya moral' yasna: planirovat' nuzhno kak razmer rezidentnoj chasti, tak i obshchij razmer. Pomimo planirovaniya etih razmerov nuzhno planirovat' i kolichestvo obrashchenij k disku dlya obratnoj zapisi. Vtoroj urok byl analogichen. Resursy pamyati ustanavlivalis' prezhde, chem dlya kazhdogo modulya bylo opredeleno tochnoe raspredelenie pamyati dlya funkcij. V rezul'tate kazhdyj programmist, ne ukladyvavshijsya v razmery, iskal, chto iz ego koda mozhno vykinut' cherez zabor v pamyat' sosedu. Poetomu bufera upravlyayushchej programmy stali chast'yu pamyati pol'zovatelya. CHto huzhe, tak zhe postupali vse upravlyayushchie bloki, i v rezul'tate byli polnost'yu skomprometirovany bezopasnost' i zashchita sistemy. Poetomu vtoroj vyvod tozhe sovershenno yasen: pri zadanii razmera modulya nuzhno tochno opredelit', chto on dolzhen delat'. I tretij, bolee ser'eznyj urok, kotoryj nuzhno izvlech' iz etogo opyta. Proekt byl slishkom velik, a obshchenie mezhdu menedzherami nedostatochnym, chtoby mnogochislennye uchastniki mogli pochuvstvovat' sebya dobyvayushchimi zachetnye ochki dlya komandy, a ne sozdatelyami programmnyh produktov. Kazhdyj optimiziroval svoj lichnyj uchastok, chtoby reshit' postavlennye zadachi, i malo kto zadumyvalsya nad tem, kak eto otrazitsya na zakazchike. Poterya orientacii i svyazi predstavlyayut soboj glavnuyu opasnost' dlya bol'shih proektov. V techenie vsej razrabotki sistemnye arhitektory dolzhny podderzhivat' postoyannuyu bditel'nost' dlya obespecheniya postoyannoj celostnosti sistemy. Odnako takaya strategiya zavisit ot pozicii samih razrabotchikov. Edva li ne glavnejshej funkciej menedzhera programmnogo proekta dolzhno byt' vospitanie pozicii zaboty ob obshchej sisteme, orientirovki na pol'zovatelya. Tehnologii sberezheniya pamyati Nikakoe raspredelenie resursov pamyati i kontrol' ne sdelayut programmu malen'koj. Dlya etogo trebuetsya izobretatel'nost' i masterstvo. Ochevidno, chto chem bol'she funkcij, tem bol'she trebuetsya pamyati pri tom zhe samom bystrodejstvii. Poetomu pervoj oblast'yu, gde nuzhno prilozhit' masterstvo, yavlyaetsya nahozhdenie kompromissa mezhdu funkcional'nost'yu i razmerom. Zdes' my srazu stalkivaemsya s vazhnoj strategicheskoj problemoj. V kakoj mere etot vybor mozhno predostavit' pol'zovatelyu? Mozhno razrabotat' programmu so mnogimi fakul'tativnymi funkciyami, kazhdaya iz kotoryh trebuet pamyati. Mozhno skonstruirovat' generator, prosmatrivayushchij spisok opcij i sootvetstvuyushchim obrazom adaptiruyushchij programmu. No cel'naya programma, sootvetstvuyushchaya kazhdomu otdel'nomu spisku opcij, zanyala by men'she pamyati. |to kak v avtomobile: esli podsvetka karty, prikurivatel' i chasy vhodyat v prejskurant kak edinaya stat'ya, ih stoimost' okazhetsya nizhe, chem esli porozn' vybirat' kazhdyj iz predmetov. Poetomu proektirovshchiku sleduet opredelit' stepen' detalizacii opcij pol'zovatelya. Esli sistema proektiruetsya dlya raboty s pamyat'yu raznogo ob®ema, voznikaet drugoj vazhnyj vopros. Diapazon prisposoblyaemosti nel'zya sdelat' proizvol'no shirokim - dazhe pri razbienii programmy na ochen' melkie moduli. V malen'koj sisteme bol'shinstvo modulej peregruzhaetsya. Znachitel'naya chast' rezidentnoj pamyati malen'koj sistemy dolzhna byt' otvedena dlya vremennoj ili stranichnoj pamyati, v kotoruyu zagruzhayutsya drugie chasti. Ee razmer ogranichivaet razmer kazhdogo modulya. A razbienie funkcij na melkie moduli vlechet poteri i proizvoditel'nost', i pamyati. Poetomu v bol'shoj sisteme, gde vremennaya pamyat' v dvadcat' raz bol'she, ona lish' pozvolyaet umen'shit' kolichestvo obrashchenij. Iz-za malen'kih razmerov modulej sistema vse-taki teryaet v skorosti i rashodovanii pamyati. Po etoj prichine effektivnost' sistemy, kotoruyu mozhno postroit' ih modulej malen'koj sistemy, ogranichena. Vtoroj oblast'yu prilozheniya masterstva yavlyaetsya nahozhdenie kompromissa mezhdu pamyat'yu i bystrodejstviem. Dlya otdel'noj funkcii uvelichenie pamyati vlechet za soboj rost bystrodejstviya, chto spravedlivo v udivitel'no shirokom diapazone velichin. |tot fakt delaet vozmozhnym ustanovlenie resursov pamyati. CHtoby oblegchit' svoej komande poisk pravil'nogo sootnosheniya mezhdu pamyat'yu i proizvoditel'nost'yu, menedzher mozhet sdelat' dve veshchi. Vo-pervyh, organizovat' obuchenie tehnike programmirovaniya, a ne prosto polagat'sya na prirodnyj um i predshestvuyushchij opyt. |to osobenno vazhno, esli mashina ili yazyk novye. Osobennosti ih effektivnogo ispol'zovaniya nuzhno bystro izuchit' i sdelat' obshchim dostoyaniem, vozmozhno, prisuzhdaya osobye prizy za osvoenie novoj tehniki. Vo-vtoryh, nuzhno ponyat', chto u programmirovaniya est' tehnologiya i komponenty nuzhno sobirat' iz gotovyh chastej. V kazhdom proekte dolzhen imet'sya nabor horoshih procedur ili makrosov dlya obrabotki ocheredej, poiska, heshirovaniya i sortirovki, prichem ne menee chem v dvuh variantah: odnom bystrom, drugom ekonomyashchem pamyat'. Razrabotka takoj tehnologii yavlyaetsya vazhnoj zadachej realizacii, kotoruyu mozhno reshat' parallel'no s razrabotkoj sistemnoj arhitektury. Predstavlenie - sut' programmirovaniya Za masterstvom stoit izobretatel'nost', blagodarya kotoroj poyavlyayutsya ekonomichnye i bystrye programmy. Pochti vsegda eto yavlyaetsya rezul'tatom strategicheskogo proryva, a ne takticheskogo umeniya. Inogda takim strategicheskim proryvom yavlyaetsya algoritm, kak, naprimer, bystroe preobrazovanie Fur'e, predlozhennoe Kuli i T'yuki, ili zamena n2 sravnenij na n log n pri sortirovke. Gorazdo chashche strategicheskij proryv proishodit v rezul'tate predstavleniya dannyh ili tablic. Zdes' zaklyuchena serdcevina programmy. Pokazhite mne blok- shemy, ne pokazyvaya tablic, i ya ostanus' v zabluzhdenii. Pokazhite mne vashi tablicy, i blok-shemy, skorej vsego, ne ponadobyatsya: oni budut ochevidny. Primery moshchi, kotoroj obladaet predstavlenie, legko umnozhit'. YA vspominayu odnogo molodogo cheloveka, zanimavshegosya sozdaniem usovershenstvovannogo konsol'nogo interpretatora dlya IBM 650. Emu udalos' vmestit' ego v porazitel'no maloe prostranstvo blagodarya razrabotke interpretatora dlya interpretatora i ponimaniyu togo, chto vzaimodejstvie cheloveka s mashinoj proishodit medlenno i redko, a pamyat' doroga. |legantnyj malen'kij kompilyator s Fortran firmy Digitek ispol'zuet osoboe ochen' plotnoe predstavlenie koda samogo kompilyatora, blagodarya chemu ne trebuetsya vneshnej pamyati. Vremya, kotoroe tratitsya na raspakovku koda, desyatikratno okupaetsya za schet otsutstviya vvoda-vyvoda. (Uprazhneniya v konce glavy 6 knigi Bruksa i Iversona "Avtomaticheskaya obrabotka dannyh"1 vklyuchaet podborku takih primerov, kak i mnogie uprazhneniya u Knuta.2) Programmist, lomayushchij golovu po povodu nehvatki pamyati, chasto postupit luchshe vsego, ostaviv v pokoe svoj kod, vernuvshis' nazad i horoshen'ko posmotrev svoi dannye. Predstavlenie - sut' programmirovaniya.

    Glava 10. Dokumentarnaya gipoteza

Gipoteza: Sredi morya bumag neskol'ko dokumentov stanovyatsya kriticheski vazhnymi osyami, vokrug kotoryh vrashchaetsya vse upravlenie proektom. Oni yavlyayutsya glavnymi lichnymi instrumentami menedzhera. Tehnologiya, pravila firmy i tradicii remesla trebuyut vypolnit' nekotoroe kolichestvo kancelyarskoj raboty po proektu. Menedzheru-novichku, tol'ko chto samomu byvshemu masterovym, eta rabota kazhetsya sovershennoj pomehoj i nenuzhnym otvlecheniem, bumazhnym valom, grozyashchim zahlestnut' ego. Po bol'shej chasti tak i est' v dejstvitel'nosti. Odnako ponemnogu on nachinaet ponimat', chto nekotoraya nebol'shaya chast' etih dokumentov zaklyuchaet v sebe znachitel'nuyu chast' ego administrativnoj raboty. Podgotovka kazhdogo iz nih sluzhit glavnym povodom dlya sosredotocheniya mysli i kristallizacii obsuzhdenij, kotorye bez etogo dlilis' by vechno. Vedenie etih dokumentov stanovitsya mehanizmom nablyudeniya i preduprezhdeniya. Sam dokument stanovitsya pamyatkoj, indikatorom sostoyaniya i bazoj dannyh dlya sostavleniya otchetov. CHtoby uvidet', kak eto dolzhno rabotat' v programmnom proekte, rassmotrim nekotorye dokumenty, poleznye i v drugom kontekste, i posmotrim, mozhno li sdelat' obobshcheniya. Dokumenty dlya proekta razrabotki komp'yutera Predpolozhim, chto razrabatyvaetsya komp'yuter. Kakie vazhnejshie dokumenty dolzhny byt' razrabotany? Celi. Zdes' opisyvaetsya, kakie potrebnosti nuzhno udovletvorit', a takzhe zadachi, pozhelaniya, ogranicheniya i prioritety. Specifikacii. |to rukovodstvo po komp'yuteru plyus specifikacii tehnicheskih harakteristik. |to odin iz pervyh dokumentov, sostavlyaemyh dlya novogo produkta, i zavershaetsya on poslednim. Grafik. Byudzhet. |to ne prosto ogranichenie, no odin iz naibolee poleznyh menedzheru dokumentov. Nalichie byudzheta zastavlyaet osushchestvlyat' tehnicheskie resheniya, kotoryh staralis' by izbezhat', i, chto eshche vazhnee, sluzhit vypolneniyu i raz®yasneniyu strategicheskih reshenij. Organizacionnaya struktura. Prostranstvennoe raspolozhenie. Ocenka, prognoz, ceny. Oni nahodyatsya v ciklicheskoj vzaimosvyazi, chto opredelyaet uspeh ili proval proekta: CHtoby sdelat' prognoz rynka, nuzhny tehnicheskie harakteristiki i ustanovlennye ceny. Cifry prognoza vmeste s zadannym proektom chislom komponentov opredelyayut ocenku stoimosti proizvodstva i dolyu rashodov na razrabotku i fiksirovannyh zatrat, prihodyashchihsya na odno ustrojstvo. |ti rashody, v svoyu ochered', opredelyayut ceny. Esli ceny nizhe ustanovlennyh, nachinaetsya radostnaya raskrutka spirali uspeha. Prognoz rastet, stoimost' odnogo ustrojstva padaet, a ceny opuskayutsya eshche nizhe. Esli ceny vyshe ustanovlennyh, nachinaetsya raskrutka spirali katastrofy, i vse sily dolzhny byt' brosheny na to, chtoby slomit' ee. Nuzhno uluchshit' tehnicheskie harakteristiki i razrabotat' novye prilozheniya, chtoby podnyat' rynochnyj prognoz. Izderzhki nuzhno snizit', chtoby poluchit' bolee nizkie ocenki. Napryazhennost' takogo cikla chasto trebuet bol'shih usilij marketologa i inzhenera. Pri etom vozmozhny zabavnye kolebaniya. YA vspominayu mashinu, u kotoroj v techenie treh let razrabotki kazhdye polgoda schetchik komand ustraivalsya to v operativnoj pamyati, to vne ee. Na odnom etape trebovalis' chut' luchshie harakteristiki, i schetchik delali na tranzistorah. Na sleduyushchem etape nachinalas' bor'ba za snizhenie stoimosti, poetomu schetchik organizovyvalsya kak adres v operativnoj pamyati. V drugom proekte luchshij izvestnyj mne menedzher po inzhenernym proektam sluzhil gigantskim mahovikom, gasya svoej inerciej kolebaniya, ishodivshie ot marketinga i menedzhmenta. Dokumenty dlya fakul'teta v universitete Nesmotrya na ogromnye razlichiya v celyah i deyatel'nosti, kriticheskoe mnozhestvo dlya predsedatelya fakul'teta v universitete sostavlyaet shodnoe chislo shodnyh dokumentov. Pochti kazhdoe reshenie dekana, soveta kafedry ili predsedatelya yavlyaetsya specifikaciej ili izmeneniem sleduyushchih dokumentov: Celi. Opisanie kursa. Trebovaniya k soiskatelyu stepeni. Predlozheniya po issledovatel'skoj rabote (i plany, pri nalichii finansirovaniya). Raspisanie zanyatij i naznachenie prepodavatelej. Byudzhet. Pomeshcheniya. Naznachenie rukovoditelej dlya aspirantov. Obratite vnimanie, chto dokumenty ochen' pohozhi na te, kotorye nuzhny dlya komp'yuternogo proekta: celi, specifikacii produkta, raspredelenie vremeni, deneg, mesta i lyudej. Tol'ko dokumenty s cenami otsutstvuyut: etim zanimaetsya zakonodatel'noe sobranie. Shodstvo ne sluchajno - zabotami vsyakoj zadachi upravleniya yavlyayutsya: chto, kogda, po kakoj cene, gde i kto. Dokumenty dlya programmnogo proekta Vo mnogih programmnyh proektah rabota nachinaetsya s soveshchanij, na kotoryh obsuzhdaetsya struktura; zatem pristupayut k napisaniyu programm. Odnako kak by ni byl mal proekt, menedzher postupit mudro, esli srazu nachnet formalizovat' hotya by minidokumenty, kotorye posluzhat ego bazoj dannyh. I on obnaruzhit, chto emu nuzhny, po bol'shej chasti, te zhe dokumenty, chto i drugim menedzheram. CHto: celi. Zdes' opredelyaetsya, kakie potrebnosti dolzhny byt' udovletvoreny, a takzhe zadachi, pozhelaniya, ogranicheniya i prioritety. CHto: specifikacii produkta. Nachinaetsya kak predlozhenie, a konchaetsya kak rukovodstvo i vnutrennyaya dokumentaciya. Vazhnejshej chast'yu yavlyayutsya specifikacii skorosti i pamyati. Kogda: grafik. Po kakoj cene: byudzhet. Gde: raspolozhenie pomeshchenij. Kto: organizacionnaya struktura. Ona perepletaetsya so specifikaciej interfejsa, kak predskazyvaet zakon Konveya: "Organizacii, proektiruyushchie sistemy, neizbezhno proizvodyat sistemy, yavlyayushchiesya kopiyami ih organizacionnyh struktur".1 Konvej idet dal'she i ukazyvaet, chto organizacionnaya struktura pervonachal'no otrazhaet proekt pervoj sistemy, kotoryj navernyaka byl oshibochnym. Esli proekt sistemy dolzhen dopuskat' vnesenie izmenenij, to i organizaciya dolzhna byt' gotova k peremenam. Zachem nuzhny formal'nye dokumenty? Vo-pervyh, neobhodimo zapisyvat' prinyatye resheniya. Tol'ko kogda pishesh', stanovyatsya vidny propuski i prostupayut nesoglasovannosti. V processe zapisyvaniya voznikaet neobhodimost' prinyatiya soten mini-reshenij, i ih nalichie otlichaet chetkuyu i yasnuyu politiku ot rasplyvchatoj. Vo-vtoryh, posredstvom dokumentov resheniya soobshchayutsya ispolnitelyam. Menedzheru prihoditsya postoyanno udivlyat'sya, chto politika, kotoruyu on schital izvestnoj vsem, okazyvaetsya sovershenno neizvestnoj odnomu iz chlenov ego komandy. Poskol'ku osnovnaya ego rabota sostoit v tom, chtoby vse dvigalis' v odnom napravlenii, ego glavnaya ezhednevnaya zadacha zaklyuchaetsya v obmene informaciej, a ne prinyatii reshenij, i dokumenty ochen' oblegchat emu etu nagruzku. Nakonec, dokumenty obrazuyut bazu dannyh menedzhera i ego kontrol'nyj spisok. Periodicheski izuchaya ih, on vidit, v kakoj tochke puti nahoditsya, i opredelyaet neobhodimost' smeshcheniya akcentov ili izmeneniya napravleniya. YA ne razdelyayu vydvigaemyh prodavcami videnij "vseohvatyvayushchej informacionnoj sistemy dlya upravleniya", v kotoroj administrator vvodit v komp'yuter zapros s klaviatury, i na ekrane vspyhivaet nuzhnyj emu otvet. Est' mnogo fundamental'nyh prichin, po kotorym etogo ne proizojdet. Odna prichina zaklyuchaetsya v tom, chto tol'ko malen'kaya chast', vozmozhno 20 procentov, rabochego vremeni administratora zanyata zadachami, kotorye trebuyut svedenij, otsutstvuyushchih v ego pamyati. A vse ostal'noe vremya - eto obshchenie: slushat', otchityvat'sya, obuchat', ubezhdat', sovetovat', obodryat'. No dlya toj doli, dlya kotoroj dejstvitel'no nuzhny dannye, neobhodimy neskol'ko vazhnyh dokumentov, kotorye udovletvoryayut bol'shinstvo nuzhd. Zadacha menedzhera sostoit v tom, chtoby razrabotat' plan i vypolnit' ego. No tol'ko zapisannyj plan yavlyaetsya tochnym i mozhet byt' soobshchen drugim. Takoj plan sostoit iz dokumentov, opisyvayushchih: chto, kogda, po kakoj cene, gde i kto. |tot malen'kij nabor vazhnyh dokumentov ohvatyvaet znachitel'nuyu chast' raboty menedzhera. Esli v samom nachale ponyat' ih vseohvatyvayushchuyu i vazhnuyu sushchnost', to oni stanut dlya menedzhera dobrym instrumentom, a ne razdrazhayushchej obuzoj. Sdelav eto, on opredelit svoj kurs bolee chetko i bystro.

    Glava 11. Planirujte na vybros

V etom mire net nichego postoyannee nepostoyanstva. SVIFT Razumno vzyat' metod i ispytat' ego. Pri neudache chestno priznajtes' v etom i poprobujte drugoj metod. No glavnoe, delajte chto-nibud'. FRANKLIN D. RUZVELXT Opytnye zavody i masshtabirovanie Inzhenery-himiki davno ponyali, chto process, uspeshno osushchestvlyaemyj v laboratorii, nel'zya odnim mahom perenesti v zavodskie usloviya. Neobhodim promezhutochnyj shag, sozdanie opytnogo zavoda, chtoby poluchit' opyt narashchivaniya kolichestv veshchestv i funkcionirovaniya v nezashchishchennyh sredah. K primeru, laboratornyj process opresneniya vody sleduet proverit' na opytnom zavode moshchnost'yu 50 tysyach litrov v den', prezhde chem ispol'zovat' v gorodskoj sisteme vodosnabzheniya moshchnost'yu 10 mln. litrov v den'. Razrabotchiki programmnyh sistem tozhe poluchili etot urok, no, pohozhe, do sih por ego ne usvoili. V odnom proekte za drugim razrabatyvayut ryad algoritmov i zatem nachinayut sozdavat' postavlyaemoe klientu programmnoe obespechenie po grafiku, trebuyushchemu postavki pervoj zhe sborki. V bol'shinstve proektov pervoj postroennoj sistemoj s trudom mozhno pol'zovat'sya. Ona mozhet byt' slishkom medlennoj, slishkom bol'shoj, neudobnoj v ispol'zovanii, a to i vse vmeste. Ne ostaetsya drugoj al'ternativy, krome kak, poumnev, nachat' snachala i postroit' pereproektirovannuyu programmu, v kotoroj eti problemy resheny. Brakovka i pereproektirovanie mogut delat'sya dlya vsej sistemy srazu ili po chastyam. No ves' opyt razrabotki bol'shih sistem pokazyvaet, chto budet sdelano.2 V teh sluchayah, kogda ispol'zuyutsya novye sistemnye koncepcii i novye tehnologii, prihoditsya sozdavat' sistemu na vybros, poskol'ku dazhe samoe luchshee planirovanie ne stol' vsevedushche, chtoby popast' v cel' s pervogo raza. Poetomu problema ne v tom, sozdavat' ili net opytnuyu sistemu, kotoruyu pridetsya vybrosit'. Vy vse ravno eto sdelaete. Vopros edinstvenno v tom, planirovat' li zaranee razrabotku sistemy na vybros ili obeshchat' klientam postavku sistemy, kotoruyu pridetsya vybrosit'. Esli smotret' pod etim uglom, otvet stanovitsya namnogo proshche. Postavka hlama klientu pozvolyaet vyigrat' vremya, no proishodit eto cenoj muchenij pol'zovatelya, otvlechenij razrabotchikov vo vremya pereproektirovaniya i durnoj reputacii produkta, kotoruyu dazhe samoj udachno pereproektirovannoj programme budet trudno pobedit'. Poetomu planirujte vybrosit' pervuyu versiyu - vam vse ravno pridetsya eto sdelat'. Postoyanny tol'ko izmeneniya Posle uyasneniya togo, chto opytnuyu sistemu nuzhno sozdavat', a potom vybrosit', i chto pereproektirovanie s novymi ideyami neizbezhno, polezno obratit'sya licom k izmeneniyu kak yavleniyu prirody. Pervyj shag - priznanie togo, chto izmenenie - eto obraz zhizni, a ne postoronnee i dosadnoe isklyuchenie. Kosgrouv mudro ukazal, chto programmist postavlyaet udovletvorenie potrebnosti pol'zovatelya, a ne kakoj- to osyazaemyj produkt. I v to vremya kak programmy sozdayutsya, testiruyutsya i ispol'zuyutsya, menyayutsya kak fakticheskie potrebnosti pol'zovatelya, tak i ponimanie im svoih potrebnostej.3 Konechno, eto spravedlivo i v otnoshenii potrebnostej, udovletvoryaemyh fizicheskimi produktami, bud' to avtomobili ili komp'yutery. No samo sushchestvovanie osyazaemogo produkta opredelyaet zaprosy pol'zovatelya i ih kvantovanie. Podatlivost' i neosyazaemost' programmnogo produkta pobuzhdayut ego sozdatelej k beskonechnomu izmeneniyu trebovanij. YA dalek ot togo, chtoby schitat', budto vse izmeneniya celej i trebovanij klienta mozhno ili neobhodimo uchityvat' v proekte. Ochevidno, dolzhen byt' ustanovlennyj porog, kotoryj dolzhen podnimat'sya vse vyshe i vyshe po hodu razrabotki, inache ni odin produkt nikogda ne budet sozdan. Tem ne menee nekotorye izmeneniya v zadachah neizbezhny, i luchshe podgotovit'sya k nim zaranee, chem predpolagat', chto ih ne vozniknet. Neizbezhny ne tol'ko izmeneniya v celyah, no takzhe izmeneniya v strategii razrabotki i tehnologii. Koncepciya "raboty na musornyj yashchik" est' lish' priznanie togo fakta, chto po mere priobreteniya opyta menyaetsya proekt.4 Planirujte vnesenie izmenenij v sistemu Sposoby proektirovaniya sistemy s uchetom budushchih izmenenij horosho izvestny i shiroko obsuzhdayutsya v literature - vozmozhno, shire obsuzhdayutsya, chem primenyayutsya. Oni vklyuchayut v sebya tshchatel'noe razbienie na moduli, intensivnoe ispol'zovanie podprogramm, tochnoe i polnoe opredelenie mezhmodul'nyh interfejsov i polnuyu ih dokumentaciyu. Menee ochevidno, chto pri lyuboj vozmozhnosti neobhodimo ispol'zovat' standartnye posledovatel'nosti vyzova i tehnologii tablichnogo upravleniya. Ochen' vazhno ispol'zovat' yazyki vysokogo urovnya i tehnologii samodokumentirovaniya, chtoby umen'shit' chislo oshibok, vyzyvaemyh izmenenij. Moshchnuyu podderzhku pri vnesenii izmenenij okazyvayut operacii vremeni kompilyacii po vklyucheniyu standartnyh ob®yavlenij. Vazhnym priemom yavlyaetsya kvantovanie izmenenij. Kazhdyj produkt dolzhen imet' numerovannye versii, i kazhdaya versiya dolzhna imet' svoj grafik rabot i datu fiksacii, posle kotoroj izmeneniya vklyuchayutsya uzhe v sleduyushchuyu versiyu. Planirujte organizacionnuyu strukturu dlya vneseniya izmenenij Kosgrouv rekomenduet ko vsem planam, veham i grafikam otnosit'sya kak k probam, chtoby oblegchit' izmeneniya. Zdes' on zahodit slishkom daleko - segodnya gruppy programmistov terpyat neudachi obychno iz-za slishkom slabogo, a ne slishkom sil'nogo administrativnogo kontrolya. Tem ne menee on vykazyvaet bol'shuyu pronicatel'nost'. On zamechaet, chto nezhelanie dokumentirovat' proekt proishodit ne tol'ko ot leni ili nedostatka vremeni. Ono proishodit ot nezhelaniya proektirovshchika svyazyvat' sebya otstaivaniem reshenij, kotorye, kak on znaet, predvaritel'nye. "Dokumentiruya proekt, proektirovshchik stanovitsya ob®ektom kritiki so vseh storon, i dolzhen zashchishchat' vse, chto napisal. Esli organizacionnaya struktura mozhet predstavlyat' ugrozu, ne budet dokumentirovat'sya nichego, krome togo, chto nel'zya osporit'." Sozdavat' organizacionnuyu strukturu s uchetom vneseniya v budushchem izmenenij znachitel'no trudnee, chem proektirovat' sistemu s uchetom budushchih izmenenij. Kazhdyj poluchaet zadanie, rasshiryayushchee krug ego obyazannostej, chtoby sdelat' tehnicheski bolee gibkim vse podrazdelenie. V bol'shih proektah menedzheru nuzhno imet' dvuh ili treh vysokoklassnyh programmistov v kachestve rezerva, kotoryj mozhno brosit' na samyj opasnyj uchastok boya. Strukturu upravleniya takzhe nuzhno izmenyat' po mere izmeneniya sistemy. |to oznachaet, chto rukovoditel' dolzhen udelit' bol'shoe vnimanie tomu, chtoby ego menedzhery i tehnicheskij personal byli nastol'ko vzaimozamenyaemy, naskol'ko pozvolyayut ih sposobnosti. Bar'ery yavlyayutsya sociologicheskimi, i s nimi nuzhno bditel'no i nastojchivo borot'sya. Vo-pervyh, menedzhery sami rassmatrivayut rukovoditelya kak "slishkom bol'shuyu cennost'", chtoby ispol'zovat' ih dlya real'nogo programmirovaniya. Vo- vtoryh, rabota menedzhera obladaet bolee vysokim prestizhem. CHtoby preodolet' eti slozhnosti, v nekotoryh laboratoriyah, naprimer, v Bell Labs, uprazdnyayut vse naimenovaniya dolzhnostej. Kazhdyj professional'nyj sluzhashchij yavlyaetsya "tehnicheskim sotrudnikom". V drugih, naprimer v IBM, vvodyat dvojnuyu lestnicu prodvizheniya (ris. 11.1). Sootvetstvuyushchie stupen'ki teoreticheski ravnoznachny. Ris. 11.1 Dvojnaya sluzhebnaya lestnica IBM Legko ustanovit' sootvetstvuyushchie stupen'kam razmery zhalovaniya. Znachitel'no trudnee dat' im sootvetstvuyushchij prestizh. Ofisy dolzhny imet' odinakovyj razmer i obstanovku. Sekretarskie i prochie sluzhby dolzhny byt' sootvetstvuyushchimi. Perevod s tehnicheskoj lestnicy v upravlencheskuyu ne dolzhen soprovozhdat'sya povysheniem, i o nem vsegda nuzhno soobshchat' kak o "perevode", a ne kak o "povyshenii". Obratnyj perevod vsegda dolzhen soprovozhdat'sya pribavkoj k zhalovan'yu. Menedzherov nuzhno posylat' na kursy tehnicheskoj perepodgotovki, a starshij tehnicheskij personal - na kursy obucheniya upravleniyu. Celi proekta, hod raboty i administrativnye problemy dolzhny dovodit'sya do vseh rukovodyashchih rabotnikov. Esli pozvolyaet podgotovka, rukovodyashchie rabotniki dolzhny byt' tehnicheski i moral'no gotovy vozglavit' gruppy ili nasladit'sya razrabotkoj programm sobstvennymi rukami. Konechno, osushchestvlenie vsego etogo trebuet mnogo truda, no rezul'tat togo stoit! Ideya organizacii grupp programmistov napodobie operacionnyh brigad predstavlyaet soboj korennoe reshenie etoj problemy. Ona zastavlyaet rukovodyashchego rabotnika pochuvstvovat', chto on ne unizhaet sebya, kogda pishet programmy, i pytaetsya ubrat' social'nye prepyatstviya, meshayushchie emu ispytat' radost' tvorchestva. Bolee togo, eta struktura prednaznachena dlya sokrashcheniya chisla interfejsov. Blagodarya ej sistemu mozhno izmenyat' s maksimal'noj legkost'yu, i stanovitsya otnositel'no prosto perenapravit' vsyu brigadu na drugoe zadanie v sluchae neobhodimosti organizacionnyh izmenenij. |to dejstvitel'no dolgosrochnoe reshenie problemy gibkoj organizacii. Dva shaga vpered, shag nazad Programma ne perestaet izmenyat'sya posle svoej postavki klientu. Izmeneniya posle postavki nazyvayutsya soprovozhdeniem programmy, no etot process v korne otlichaetsya ot soprovozhdeniya apparatnoj chasti. Soprovozhdenie apparatnoj chasti komp'yuternoj sistemy sostoit iz treh vidov deyatel'nosti: zameny isporchennyh detalej, chistki i smazki i osushchestvleniya tehnicheskih izmenenij dlya ispravleniya konstruktivnyh defektov. (Bol'shaya chast' tehnicheskih izmenenij, no ne vse, ustranyaet defekty razrabotki ili realizacii, a ne arhitektury, i potomu nezametna pol'zovatelyu.) Soprovozhdenie programm ne predpolagaet chistki, smazki ili zameny isportivshihsya komponentov. Ono sostoit glavnym obrazom iz izmenenij, ispravlyayushchih konstruktivnye defekty. Gorazdo chashche, chem dlya apparatnoj chasti, eti izmeneniya vklyuchayut v sebya dopolnitel'nye funkcii. Obychno oni vidny pol'zovatelyu. Obshchaya stoimost' soprovozhdeniya shiroko ispol'zuemoj programmy obychno sostavlyaet 40 i bolee procentov stoimosti ee razrabotki. Udivitel'no, chto na stoimost' soprovozhdeniya sil'no vliyaet chislo pol'zovatelej. CHem bol'she pol'zovatelej, tem bol'she oshibok oni nahodyat. Betti Kempbell iz Laboratorii yadernoj fiziki MTI otmechaet interesnyj cikl v zhizni otdel'noj versii programmy. On pokazan na risunke 11.2. V nachale sushchestvuet tendenciya povtornogo poyavleniya oshibok, najdennyh i ustranennyh v predydushchih versiyah. Obnaruzhivayutsya oshibki v funkciyah, vpervye poyavivshihsya v novoj versii. Vse oni ispravlyayutsya, i v techenie neskol'kih mesyacev vse idet horosho. Zatem kolichestvo obnaruzhennyh oshibok snova nachinaet rasti. Po mneniyu Kempbell, eto proishodit potomu, chto pol'zovateli vyhodyat na novyj uroven' slozhnosti, nachinaya polnost'yu primenyat' novye vozmozhnosti versii. |ta intensivnaya rabota vyyavlyaet bolee skrytye oshibki v novyh funkciyah.5 Ris. 11.2 CHastota obnaruzheniya oshibok kak funkciya vozrasta versii programmy Fundamental'naya problema pri soprovozhdenii programm sostoit v tom, chto ispravlenie odnoj oshibki s bol'shoj veroyatnost'yu (20-50 procentov) vlechet poyavlenie novoj. Poetomu ves' process idet po principu "dva shaga vpered, odin nazad". Pochemu ne udaetsya ustranit' oshibki bolee akkuratno? Vo-pervyh, dazhe skrytyj defekt proyavlyaet sebya kak otkaz v kakom-to odnom meste. V dejstvitel'nosti zhe on chasto imeet razvetvleniya po vsej sisteme, obychno neochevidnye. Vsyakaya popytka ispravit' ego minimal'nymi usiliyami privedet k ispravleniyu lokal'nogo i ochevidnogo, no esli tol'ko struktura ne yavlyaetsya ochen' yasnoj ili dokumentaciya ochen' horoshej, otdalennye posledstviya etogo ispravleniya ostanutsya nezamechennymi. Vo-vtoryh, ispravlyaet oshibki obychno ne avtor programmy, i chasto eto mladshij programmist ili stazher. Vsledstvie vneseniya novyh oshibok soprovozhdenie programmy trebuet znachitel'no bol'she sistemnoj otladki na kazhdyj operator, chem pri lyubom drugom vide programmirovaniya. Teoreticheski, posle kazhdogo ispravleniya nuzhno prognat' ves' nabor kontrol'nyh primerov, po kotorym sistema proveryalas' ran'she, chtoby ubedit'sya, chto ona kakim-nibud' neponyatnym obrazom ne povredilas'. Na praktike takoe vozvratnoe testirovanie dejstvitel'no dolzhno priblizhat'sya k etomu teoreticheskomu idealu, i ono ochen' dorogo stoit. Ochevidno, metody razrabotki programm, pozvolyayushchie isklyuchit' ili, po krajnej mere, vyyavit' pobochnye effekty, mogut rezko snizit' stoimost' soprovozhdeniya, kak i metody razrabotki proektov men'shim chislom lyudej i s men'shim chislom interfejsov - a znachit, i s men'shim chislom oshibok. SHag vpered, shag nazad Leman i Beladi izuchili istoriyu posledovatel'nyh vypuskov bol'shoj operacionnoj sistemy.6 Oni schitayut, chto obshchee kolichestvo modulej rastet linejno s nomerom versii, no chislo modulej, zatronutyh izmeneniyami, rastet eksponencial'no v zavisimosti ot nomera versii. Vse ispravleniya imeyut tendenciyu k razrusheniyu struktury, uvelicheniyu entropii i dezorganizacii sistemy. Vse men'she sil tratitsya na ispravlenie oshibok ishodnogo proekta i vse bol'she - na likvidaciyu posledstvij predydushchih ispravlenij. Po proshestvii vremeni sistema stanovitsya vse menee i menee organizovannoj. Rano ili pozdno ispravlenie oshibok teryaet smysl. Na kazhdyj shag vpered prihoditsya shag nazad. V principe godnaya dlya vechnogo ispol'zovaniya sistema perestaet byt' osnovoj razvitiya. Krome togo, menyayutsya mashiny, konfiguracii, trebovaniya pol'zovatelya, tak chto fakticheski sistema yavlyaetsya vechnoj. Neobhodim sovershenno novyj proekt, vypolnyaemyj s samogo nachala. Ot mehanicheskoj statisticheskoj modeli Beladi i Leman prihodyat k obshchemu zaklyucheniyu otnositel'no programmnyh sistem, kotoroe podkrepleno vsem opytom chelovechestva. "Luchshaya pora veshchej - kogda oni tol'ko chto poyavilis'", - skazal Paskal'. CH. S. L'yuis vyrazil eto bolee vesomo: Vot klyuch k ponimaniyu istorii. Vysvobozhdaetsya ogromnaya energiya, voznikayut civilizacii, sozdayutsya prekrasnye uchrezhdeniya, no vsyakij raz chto-to proishodit ne tak. Kakaya-to rokovaya oshibka voznosit na vershinu sebyalyubivyh i zhestokih lyudej, i vse skatyvaetsya nazad, v nishchetu i ruiny. Dejstvitel'no, mashina glohnet. Ona normal'no startuet i proezzhaet neskol'ko metrov, a zatem lomaetsya.7 Sistemnoe programmirovanie yavlyaetsya processom, umen'shayushchim entropiyu, a potomu emu vnutrenne prisushcha metastabil'nost'. Soprovozhdenie programm est' process, uvelichivayushchij entropiyu, i dazhe samoe umeloe ego vedenie lish' otdalyaet vpadenie sistemy v beznadezhnoe ustarevanie.

    Glava 12. Ostryj instrument

Horoshego rabotnika uznayut po instrumentu. POSLOVICA Dazhe v nashe vremya mnogie programmnye proekty, s tochki zreniya ispol'zovaniya instrumentariya, rabotayut kak mehanicheskie masterskie. U kazhdogo mehanika est' svoj nabor instrumentov, sobiravshijsya v techenie vsej zhizni, kotoryj on tshchatel'no zapiraet i ohranyaet - naglyadnoe svidetel'stvo lichnogo masterstva. Tochno takzhe programmist sobiraet malen'kie redaktory, sortirovki, dvoichnye dampy, utility dlya raboty s diskami i pripryatyvaet ih v svoih fajlah. Odnako takoj podhod ne opravdan pri rabote nad programmnym proektom. Vo- pervyh, vazhnoj zadachej yavlyaetsya obmen informaciej, a lichnyj instrument emu meshaet, a ne sodejstvuet. Vo-vtoryh, pri perehode na novuyu mashinu ili novyj rabochij yazyk tehnologiya menyaetsya, poetomu srok zhizni instrumenta nedolog. I nakonec, ochevidno, znachitel'no effektivnee sovmestno razrabatyvat' i soprovozhdat' programmnye instrumenty obshchego naznacheniya. Odnako nedostatochno imet' instrumenty obshchego naznacheniya. Kak special'nye zadachi, tak i lichnye predpochteniya obuslovlivayut neobhodimost' imet' takzhe i specializirovannyj instrument. Poetomu pri obsuzhdenii sostava komandy programmistov ya predlagal imet' v brigade odnogo instrumental'shchika. |tot chelovek vladeet vsemi obshchedostupnymi instrumentami i mozhet obuchat' ih ispol'zovaniyu. On mozhet takzhe sozdavat' specializirovannye instrumenty, kotorye potrebuyutsya ego nachal'niku. Takim obrazom, menedzher proekta dolzhen ustanovit' principy i vydelit' resursy dlya razrabotki obshchih instrumentov. V to zhe vremya on dolzhen ponimat' neobhodimost' v specializirovannyh instrumentah i ne prepyatstvovat' razrabotke sobstvennyh instrumentov v podchinennyh rabochih gruppah. Est' opasnyj soblazn popytat'sya dostich' bol'shej effektivnosti, sobrav vmeste otdel'nyh razrabotchikov instrumenta i dorabotav obshchegruppovoj instrumentarij. No eto ne udaetsya. CHto eto za instrumenty, razrabotku kotoryh menedzher dolzhen obdumyvat', planirovat' i organizovyvat'? Prezhde vsego, vychislitel'nye sredstva. Dlya etogo trebuyutsya mashiny, i dolzhna byt' prinyata politika planirovaniya vremeni. Dlya etogo trebuetsya operacionnaya sistema, i dolzhna byt' ustanovlena politika obsluzhivaniya. Dlya etogo trebuetsya yazyk, i dolzhna byt' zalozhena politika v otnoshenii yazyka. Zatem idut utility, sredstva otladki, generatory kontrol'nyh primerov i tekstovyj processor dlya raboty s dokumentaciej. Rassmotrim ih poocheredno.1 Celevye mashiny Mashinnuyu podderzhku polezno razdelit' na celevye mashiny i rabochie mashiny. Celevaya mashina - eto ta, dlya kotoroj pishetsya programmnoe obespechenie i na kotoroj, v konce koncov, ego nuzhno budet testirovat'. Rabochie mashiny - eto te, kotorye predostavlyayut servisy, ispol'zuemye dlya sozdaniya sistemy. Esli sozdaetsya novaya operacionnaya sistema dlya staroj mashiny, poslednyaya mozhet sluzhit' odnovremenno i celevoj, i rabochej. Kakovy tipy celevyh sredstv? Esli brigada sozdaet novyj supervizor ili drugoe programmnoe sredstvo, sostavlyayushchee serdcevinu sistemy, to ej, konechno, nuzhna svoya mashina. Dlya takih sistem potrebuyutsya operatory i odin ili dva sistemnyh programmista, chtoby mashina byla v rabochem sostoyanii. Esli trebuetsya otdel'naya mashina, to ona dolzhna byt' dovol'no specificheskoj: ne trebuetsya, chtoby ona byla bystroj, no trebuetsya, po men'shej mere, 1 Mbajt operativnoj pamyati, 100 Mbajt v aktivnyh diskah i terminaly. Dostatochno simvol'nyh terminalov, no so znachitel'no bol'shej skorost'yu, chem 15 simvolov v sekundu, harakternyh dlya pishushchih mashinok. Nalichie bol'shoj pamyati znachitel'no sposobstvuet produktivnosti, pozvolyaya zanyat'sya razbieniem na overlei i minimizaciej razmera posle testirovaniya funkcij. Mashina ili programmnye sredstva dlya otladki dolzhny takzhe imet' sredstva dlya avtomaticheskogo podscheta i izmerenij lyubyh parametrov programmy vo vremya otladki. K primeru, karty ispol'zovaniya pamyati sluzhat moshchnym diagnosticheskim sredstvom pri vyyasnenii strannoj logiki povedeniya ili neozhidanno nizkoj proizvoditel'nosti. Planirovanie vremeni. Esli celevaya mashina novaya, - naprimer, dlya nee sozdaetsya pervaya operacionnaya sistema, - to mashinnogo vremeni malo, i planirovanie stanovitsya bol'shoj problemoj. Potrebnosti v rabochem vremeni celevoj mashiny imeet specificheskuyu krivuyu rosta. Pri razrabotke OS/360 u nas byli horoshie emulyatory System/360 i drugie mashiny. Po prezhnemu opytu my ocenili, skol'ko chasov rabochego vremeni S/360 nam ponadobitsya, i stali poluchat' pervye mashiny s proizvodstva. No mesyac za mesyacem oni ostavalis' bez nagruzki. Zatem srazu vse 16 sistem okazalis' zagruzhennymi, i raspredelenie vremeni stalo problemoj. Ispol'zovanie mashin vyglyadelo primerno kak na risunke 12.1. Vse odnovremenno nachali otlazhivat' pervye komponenty, i zatem vse komandy postoyanno chto-to otlazhivali. Ris. 12.1 Rost ispol'zovaniya celevyh mashin My centralizovali vse svoi mashiny i biblioteki magnitnyh lent i organizovali dlya ih raboty professional'nuyu i opytnuyu gruppu mashinnogo zala. Dlya maksimizacii byvshego v nedostatke mashinnogo vremeni S/360 vse otladochnye progony my osushchestvlyali v paketnom rezhime na podhodyashchih svobodnyh mashinah. My dobilis' chetyreh zapuskov v den' (oborachivaemost' sostavila dva s polovinoj chasa), a trebovalas' chetyrehchasovaya oborachivaemost'. Vspomogatel'naya mashina 1401 s terminalami ispol'zovalas' dlya planirovaniya progonov, otslezhivaniya tysyach zadanij i kontrolya vremeni oborachivaemosti. No so vsej etoj organizovannost'yu my perestaralis'. Posle neskol'kih mesyacev nizkoj oborachivaemosti, vzaimnyh obvinenij i prochih muk my pereshli k vydeleniyu mashinnogo vremeni krupnymi blokami. K primeru, vsya gruppa iz pyatnadcati chelovek, zanimavshayasya sortirovkoj, poluchala sistemu na srok ot chetyreh do shesti chasov. Planirovanie etogo vremeni bylo ih vnutrennim delom. Dazhe esli sistema byla na zanyata, postoronnie ne mogli eyu pol'zovat'sya. |to okazalos' bolee udachnym sposobom planirovaniya. Hotya koefficient ispol'zovaniya mashiny, vozmozhno, neskol'ko upal (a chasto i etogo ne bylo), proizvoditel'nost' podnyalas'. Dlya kazhdogo chlena komandy desyat' zapuskov v techenie shesti chasov znachitel'no produktivnee, chem desyat' zapuskov, osushchestvlennyh s pereryvami v tri chasa, poskol'ku postoyannaya koncentraciya sokrashchaet vremya obdumyvaniya. Posle takoj gonki komande obychno trebovalos' odin-dva dnya, chtoby podognat' rabotu s dokumentami, prezhde chem prosit' o vydelenii novogo bloka. Zachastuyu vsego tri programmista mogut s pol'zoj podelit' i raspredelit' mezhdu soboj vydelennyj im blok vremeni. Pohozhe, chto eto luchshij sposob ispol'zovaniya celevoj mashiny pri otladke novoj operacionnoj sistemy. Tak bylo na praktike, hotya eto ne sootvetstvovalo teorii. Sistemnaya otladka vsegda byla zanyatiem dlya nochnoj smeny, podobno astronomii. Dvadcat' let nazad, rabotaya nad 701-j mashinoj, ya vpervye poznal produktivnuyu svobodu ot formal'nostej, prisushchuyu predrassvetnym chasam, kogda vse nachal'niki iz mashinnogo zala krepko spyat po domam, a operatory ne raspolozheny borot'sya za soblyudenie pravil. Smenilos' tri pokoleniya mashin, polnost'yu izmenilis' tehnologii, poyavilis' operacionnye sistemy, no etot luchshij sposob raboty ostalsya prezhnim. On prodolzhaet zhit', poskol'ku naibolee effektiven. Prishla pora priznat' ego produktivnost' i shire primenyat'. Rabochie mashiny i sluzhby dannyh |mulyatory. Esli celevoj komp'yuter novyj, to dlya nego neobhodim logicheskij emulyator. |to daet apparat dlya otladki zadolgo do togo, kak celevaya mashina budet v nalichii. CHto stol' zhe vazhno, dazhe togda, kogda stanovitsya dostupnoj celevaya mashina, imeetsya dostup k nadezhnomu sredstvu dlya otladki. Nadezhnoe - ne to zhe samoe, chto tochnoe. |mulyator neizbezhno v kakom-libo otnoshenii budet otstupat' ot vernoj i tochnoj realizacii arhitektury novoj mashiny. No eto budet odna i ta zhe realizaciya i segodnya, i zavtra, chego ne skazhesh' o novoj apparatnoj chasti. V nashe vremya my privykli k tomu, chto apparatnaya chast' komp'yutera bol'shuyu chast' vremeni rabotaet bez sboev. Esli tol'ko razrabotchik prikladnoj programmy ne zamechaet, chto sistema neodinakovo vedet sebya pri raznyh identichnyh progonah programmy, emu pravil'nee vsego poiskat' oshibki v svoem kode, a ne v tehnike. |tot opyt, odnako, sosluzhil plohuyu sluzhbu pri programmirovanii novoj mashiny. Laboratornye razrabotki, predvaritel'nye ili rannie vypuski komp'yuterov ne rabotayut dolzhnym obrazom, ne rabotayut nadezhno i ne ostayutsya neizmennymi den' oto dnya. Po mere obnaruzheniya oshibok tehnicheskie izmeneniya proizvodyatsya vo vseh ekzemplyarah mashiny, vklyuchaya ispol'zuemyj gruppoj programmistov. Takaya neustojchivost' osnovaniya dostatochno nepriyatna. Otkazy apparatury, obychno skachkoobraznye, eshche huzhe. I huzhe vsego neopredelennost', lishayushchaya stimula staratel'no kopat'sya v svoem kode v poiskah oshibki - ee mozhet tam vovse ne byt'. Poetomu nadezhnyj emulyator na zreloj mashine ostaetsya poleznym znachitel'no dol'she, chem mozhno bylo predpolozhit'. Mashiny dlya kompilyatora i assemblera. Po tem zhe prichinam trebuyutsya kompilyatory i assemblery, rabotayushchie na nadezhnyh mashinah, no kompiliruyushchie ob®ektnyj kod dlya celevoj sistemy. Zatem mozhno nachat' ego otladku na emulyatore. Pri programmirovanii na yazykah vysokogo urovnya znachitel'nuyu chast' otladki mozhno proizvesti pri kompilyacii dlya vspomogatel'noj mashiny i testirovanii rezul'tiruyushchej programmy, prezhde chem otlazhivat' programmu dlya celevoj mashiny. |tim dostigaetsya proizvoditel'nost' neposredstvennogo ispolneniya, a ne emulyacii, v sochetanii s nadezhnost'yu stabil'noj mashiny. Biblioteki programm i uchet. Ochen' uspeshnym i vazhnym primeneniem vspomogatel'noj mashiny v programme razrabotki OS/360 byla podderzhka bibliotek programm. Sistema, razrabotannaya pod rukovodstvom U. R. Krouli (W. R. Crowley), sostoyala iz dvuh soedinennyh vmeste mashin 7010 i obshchej diskovoj bazoj dannyh. Na 7010 podderzhivalsya takzhe assembler dlya S/360. V etoj biblioteke hranilsya ves' protestirovannyj ili nahodyashchijsya v processe testirovaniya kod, kak ishodnyj, tak i assemblirovannye zagruzochnye moduli. Na praktike biblioteka byla razbita na podbiblioteki s razlichnymi pravami dostupa. Prezhde vsego, u kazhdoj gruppy ili programmista byla oblast' dlya hraneniya ekzemplyarov programm, kontrol'nyh primerov i okruzheniya, kotoroe trebovalos' dlya testirovaniya komponentov. Na etoj ploshchadke dlya igr ne bylo nikakih ogranichenij na dejstviya s sobstvennymi programmami. Kogda komponent programmista byl gotov k vklyucheniyu v bolee krupnuyu chast', ego ekzemplyar peredavalsya menedzheru etoj bolee krupnoj sistemy, kotoryj pomeshchal ego v podbiblioteku sistemnoj integracii. Teper' avtor ne mog ego izmenit' bez razresheniya menedzhera integracii. Kogda sistema sobiralas' voedino, etot menedzher provodil vse vidy sistemnogo testirovaniya, vyyavlyaya oshibki i poluchaya ispravleniya. CHerez nekotoroe vremya sistemnaya versiya byla gotova dlya bolee shirokogo ispol'zovaniya. Togda ona peremeshchalas' v podbiblioteku tekushchej versii. |tot ekzemplyar byl svyashchennym, i dostup k nemu razreshalsya tol'ko dlya ispravleniya razrushitel'nyh oshibok. Ego mozhno bylo ispol'zovat' dlya integrirovaniya i testirovaniya vseh novyh versij modulej. Programmnyj katalog na mashine 7010 otslezhival vse versii kazhdogo modulya, ego sostoyanie, mestonahozhdenie i izmeneniya. Zdes' vazhny dva obstoyatel'stva. Pervoe - eto kontrol', oznachayushchij, chto ekzemplyary programm prinadlezhat menedzheram, i tol'ko oni mogut sankcionirovat' ih izmenenie. Vtoroe - formal'noe razdelenie i peremeshchenie s ploshchadki dlya igr k integracii i vypusku novoj versii. Po moemu mneniyu, eto bylo odnim iz luchshih reshenij v programme OS/360. |ta chast' tehnologii upravleniya byla nezavisimo razrabotana dlya neskol'kih krupnyh programmnyh proektov, v tom chisle v Bell Labs, ICL i Kembridzhskom universitete.2 Ona primenima kak k programmam, tak i k dokumentacii. |to - neocenimaya tehnologiya. Programmnye instrumenty. Po mere poyavleniya novyh tehnologij otladki starye teryayut znachenie, no ne ischezayut. Po-prezhnemu neobhodimy dampy pamyati, redaktory ishodnogo teksta, dampy mgnovennogo sostoyaniya, dazhe trassirovki. Analogichnym obrazom, trebuetsya polnyj nabor utilit dlya zagruzki kolod perfokart na diski, kopirovaniya magnitnyh lent, pechati fajlov, izmeneniya katalogov. Esli instrumental'shchika proekta naznachit' na dostatochno rannej stadii, to vse eto mozhet byt' sdelano srazu i nahodit'sya v gotovnosti k momentu nadobnosti. Sistema dokumentacii. Iz vseh instrumentov bol'she vsego truda mozhet sberech' komp'yuterizirovannaya sistema redaktirovaniya teksta, dejstvuyushchaya na nadezhnoj mashine. Nasha sistema, razrabotannaya Dzh. U. Franklinom (J. W. Franklin), byla ochen' udobna. YA dumayu, bez nee rukovodstva po OS/360 poyavilis' by znachitel'no pozdnee i okazalis' by bolee zaputannymi. Est' lyudi, kotorye stanut utverzhdat', chto dvuhmetrovaya polka rukovodstv po OS/360 yavlyaetsya sledstviem nederzhaniya rechi, i sama ee ob®emistost' yavlyaet soboj novyj tip nepostizhimosti. I dolya pravdy v etom est'. No u menya est' dva vozrazheniya. Vo-pervyh, hotya dokumentaciya po OS/360 i oshelomlyaet razmerami, plan ee izucheniya tshchatel'no izlozhen. Esli ispol'zovat' ego izbiratel'no, to chashche vsego mozhno ne obrashchat' vnimaniya na bol'shuyu chast' vsej massy. Dokumentaciyu po OS/360 nuzhno rassmatrivat' kak biblioteku ili enciklopediyu, a ne material dlya obyazatel'nogo chteniya. Vo-vtoryh, eto gorazdo luchshe, chem krajnyaya nedostatochnost' dokumentacii, harakternaya dlya bol'shinstva sistem programmirovaniya. YA ohotno soglashus', tem ne menee, chto v nekotoryh mestah tekst mozhno bylo znachitel'no uluchshit', i rezul'tatom luchshego opisaniya stal by men'shij ob®em. Nekotorye chasti (naprimer, "Koncepcii i sredstva") sejchas ochen' horosho napisany. |mulyator proizvoditel'nosti. Luchshe ego imet'. Razrabotajte ego "snaruzhi vnutr'", kak opisano v sleduyushchej glave. Ispol'zujte odinakovoe proektirovanie sverhu vniz dlya emulyatora proizvoditel'nosti, emulyatora logiki i samogo produkta. Nachnite rabotu s nim kak mozhno ran'she. Prislushajtes' k tomu, chto on vam skazhet. YAzyki vysokogo urovnya i interaktivnoe programmirovanie Segodnya dva vazhnejshih instrumenta sistemnogo programmirovaniya - eto te, kotorye ne ispol'zovalis' pri razrabotke OS/360 pochti desyatiletie nazad. Oni do sih por ne ochen' shiroko ispol'zuyutsya, no vse ukazyvaet na ih moshch' i primenimost'. |to: a) yazyki vysokogo urovnya i b) interaktivnoe programmirovanie. YA ubezhden, chto tol'ko inertnost' i len' prepyatstvuet povsemestnomu prinyatiyu etih instrumentov, tehnicheskie trudnosti bolee ne yavlyayutsya izvineniyami. YAzyki vysokogo urovnya. Glavnye osnovaniya dlya ispol'zovaniya yazykov vysokogo urovnya - eto proizvoditel'nost' i skorost' otladki. Proizvoditel'nost' my obsuzhdali ran'she (glava 8). Imeyushchiesya dannye, hotya i nemnogochislennye, ukazyvayut na mnogokratnyj rost, a ne na uvelichenie na neskol'ko procentov. Uluchshenie otladki proishodit blagodarya tomu, chto oshibok stanovitsya men'she, a nahodit' ih legche. Ih men'she, poskol'ku ustranyaetsya celyj uroven' obrazovaniya oshibok, uroven', na kotorom delayutsya ne tol'ko sintaksicheskie, no i semanticheskie oshibki, takie kak nepravil'noe ispol'zovanie registrov. Ih legche nahodit', poskol'ku v etom pomogaet diagnostika kompilyatora i, chto eshche vazhnee, ochen' legko vstavlyat' poluchenie otladochnyh momental'nyh snimkov. Menya eti vozmozhnosti proizvoditel'nosti i otladki oshelomlyayut. Mne trudno predstavit' sebe sistemu programmirovaniya, kotoruyu ya stal by sozdavat' na yazyke assemblera. Nu, a kak s klassicheskimi vozrazheniyami protiv etogo instrumenta? Ih tri: ya ne mogu sdelat' to, chto hochu; rezul'tiruyushchaya programma slishkom velika; rezul'tiruyushchaya programma slishkom medlenna. CHto kasaetsya vozmozhnostej, vozrazhenie, ya dumayu, bol'she ne sostoyatel'no. Vse svidetel'stvuet v pol'zu togo, chto mozhno delat' to, chto hochetsya, potrudivshis' najti sposob, no inogda dlya etogo prihoditsya izlovchit'sya.3, 4 CHto kasaetsya pamyati, to novye optimiziruyushchie kompilyatory nachinayut pokazyvat' ves'ma udovletvoritel'nye rezul'taty, i ih usovershenstvovanie prodolzhaetsya. CHto kasaetsya skorosti, to optimiziruyushchie kompilyatory inogda porozhdayut kod, kotoryj zachastuyu vypolnyaetsya bystree, chem napisannyj vruchnuyu. Bolee togo, problemy skorosti mozhno obychno reshit', zameniv ot 1 do 5 procentov skompilirovannoj programmy kodom, napisannym vruchnuyu, posle ee polnoj otladki.5 Kakoj yazyk vysokogo urovnya sleduet ispol'zovat' dlya sistemnogo programmirovaniya? Segodnya edinstvennyj dostojnyj kandidat - PL/I.6 U nego ochen' polnyj nabor operatorov; on sootvetstvuet okruzheniyu operacionnoj sredy; imeetsya celyj ryad kompilyatorov s raznymi osobennostyami - interaktivnyh, bystryh, s uluchshennoj diagnostikoj, s vysokoj stepen'yu optimizacii. Lichno ya bystree razrabatyvayu algoritmy s pomoshch'yu APL; zatem ya perevozhu ih v PL/I dlya sootvetstviya sistemnomu okruzheniyu. Interaktivnoe programmirovanie. Odnim iz opravdanij proekta MTI MULTICS byla ego pol'za dlya sozdaniya sistem programmirovaniya. MULTICS (i vsled za tem TSS IBM) konceptual'no otlichaetsya ot drugih interaktivnyh komp'yuternyh sistem imenno v teh otnosheniyah, kotorye neobhodimy dlya sistemnogo programmirovaniya: mnogourovnevaya sistema razdeleniya dostupa i zashchity dannyh i programm, intensivnoe upravlenie bibliotekami i sredstva dlya sovmestnoj raboty pol'zovatelej terminalov. YA ubezhden, chto vo mnogih prilozheniyah interaktivnye sistemy nikogda ne zamenyat sistemy s obrabotkoj paketnyh zadanij. No ya dumayu, chto sozdateli MULTICS priveli samye ubeditel'nye dovody v ee pol'zu imenno v primenenii k sistemnomu programmirovaniyu. Poka est' ne mnogo svidetel'stv dejstvitel'noj plodotvornosti etih ochevidno moshchnyh instrumentov. Sushchestvuet shiroko rasprostranennoe priznanie togo, chto otladka yavlyaetsya trudnoj i medlennoj chast'yu sistemnogo programmirovaniya, i medlennaya oborachivaemost' - proklyatie otladki. Poetomu logika interaktivnogo programmirovaniya kazhetsya neumolimoj.7 Ris. 12.2 Sravnitel'naya proizvoditel'nost' pri paketnom i dialogovom Programmirovanii Pomimo togo, est' horoshie otzyvy teh, kto razrabotal takim sposobom nebol'shie sistemy ili chasti sistem. Edinstvennye dostupnye mne dannye otnositel'no vliyaniya na programmirovanie bol'shih sistem ishodyat ot Dzhona Harra iz Bell Labs. Oni predstavleny na risunke 12.2. |ti cifry ohvatyvayut napisanie, assemblirovanie i otladku programm. Pervaya programma yavlyaetsya, v osnovnom, upravlyayushchej. Ostal'nye tri - yazykovye translyatory, redaktory i t.p. Dannye Harra pozvolyayut predpolozhit', chto sredstva interaktivnoj raboty, po krajnej mere, udvaivayut proizvoditel'nosti sistemnogo programmirovaniya.8 |ffektivnoe ispol'zovanie bol'shinstva interaktivnyh sredstv trebuet, chtoby rabota proizvodilas' na yazyke vysokogo urovnya, poskol'ku teletajp i pishushchuyu mashinku nel'zya ispol'zovat' dlya polucheniya dampa pamyati. S ispol'zovaniem yazyka vysokogo urovnya legko redaktirovat' ishodnyj tekst i delat' otdel'nye raspechatki. Vmeste oni dejstvitel'no sostavlyayut paru ottochennyh instrumentov.

    Glava 13. Celoe i chasti

YA duhov vyzyvat' mogu iz bezdny. I ya mogu, i kazhdyj mozhet, Vopros lish', yavyatsya l' na zov oni? SHEKSPIR, KOROLX GENRIH IV Sredi sovremennyh kudesnikov, kak i vstar', vstrechayutsya hvastuny: "YA mogu pisat' programmy, kotorye upravlyayut vozdushnym dvizheniem, perehvatyvayut ballisticheskie rakety, delayut perevody po bankovskim schetam, upravlyayut proizvodstvennymi liniyami". Na chto est' otvet: "I ya mogu, i kazhdyj mozhet, no budet li rabotat' to, chto ty napishesh'?" Kak napisat' programmu, kotoraya budet rabotat'? Kak protestirovat' programmu? I kak ob®edinit' nabor protestirovannyh programm-komponentov v protestirovannuyu i nadezhnuyu sistemu? Neskol'ko raz my uzhe kasalis' sootvetstvuyushchih priemov, davajte teper' rassmotrim ih bolee sistematicheski. Proektirovanie bez oshibok Zashchita opredelenij ot oshibok. Samye pagubnye i neulovimye sistemnye oshibki voznikayut iz-za nesootvetstviya dopushchenij, sdelannyh avtorami razlichnyh komponentov. Podhod k konceptual'noj celostnosti, izlozhennyh vyshe v glavah 4, 5 i 6, neposredstvenno obrashchaetsya k etim problemam. Kratko govorya, konceptual'naya celostnost' produkta ne tol'ko uproshchaet ego ispol'zovanie, no takzhe oblegchaet razrabotku i delaet menee podverzhennym oshibkam. Takuyu zhe rol' vypolnyaet detalizirovannaya trudoemkaya rabota po razrabotke arhitektury, podrazumevaemaya etim podhodom. V. A. Vysockij iz proekta Safeguard, vypolnyavshegosya v Bell Telephone Laboratories, govorit tak: "Reshayushchaya zadacha - dat' opredelenie dlya produkta. Ochen' mnogie neudachi svyazany imenno s temi aspektami, kotorye ne byli vpolne specificirovany".1 Tshchatel'noe opredelenie funkcij, tshchatel'naya specifikaciya i staratel'noe izbeganie vseh ukrashatel'stv funkcij i poletov tehnicheskoj mysli - vse eto snizhaet kolichestvo sistemnyh oshibok, kotorye budut obnaruzheny. Proverka specifikacii. Zadolgo do napisaniya vsyakogo koda specifikaciya dolzhna byt' peredana storonnej gruppe testirovaniya dlya tshchatel'nogo rassmotreniya polnoty i yasnosti. Kak schitaet Vysockij, sami razrabotchiki sdelat' eto ne mogut: "Oni ne mogut priznat'sya, chto ne ponimayut ee, oni budut schastlivo prokladyvat' svoj put' cherez propushchennye i temnye mesta". Nishodyashchee proektirovanie. V ochen' chetkoj stat'e 1971 goda Niklaus Virt formalizoval proceduru razrabotki, godami ispol'zovavshuyusya luchshimi programmistami.2 Bolee togo, ego zamechaniya, sdelannye v otnoshenii razrabotki programm, polnost'yu primenimy k razrabotke slozhnyh programmnyh sistem. Voploshcheniem etih zamechanij yavlyaetsya razdelenie sozdaniya sistem na proektirovanie arhitektury, razrabotku i realizaciyu. Bolee togo, kazhdaya iz zadach proektirovaniya arhitektury, razrabotki i realizacii luchshe vsego mozhet byt' reshena nishodyashchimi metodami. Vkratce, metod Virta opredelyaet razrabotku kak posledovatel'nost' utochnyayushchih shagov. Nabrasyvaetsya primernoe opisanie zadachi i grubyj metod resheniya, pozvolyayushchij poluchit' osnovnoj rezul'tat. Zatem opredelenie izuchaetsya bolee pristal'no, chtoby uvidet', v chem otlichie poluchennogo rezul'tata ot trebuemogo, i krupnye etapy resheniya razbivayutsya na bolee melkie. Kazhdoe utochnenie v opredelenii zadachi stanovitsya utochneniem algoritma resheniya i mozhet soprovozhdat'sya utochneniem predstavleniya dannyh. V etom processe vyyavlyayutsya moduli resheniya ili dannyh, dal'nejshee utochnenie kotoryh mozhet byt' prodolzheno nezavisimo ot osnovnoj raboty. Stepen' takoj modul'nosti opredelyaet gibkost' i izmenyaemost' programmy. Virt schitaet neobhodimym ispol'zovanie na kazhdom shage notacii kak mozhno bolee vysokogo urovnya, chtoby vydelit' ponyatiya i skryt' detali, poka ne stanet neobhodimym dal'nejshee utochnenie. Pravil'no osushchestvlyaemoe nishodyashchee proektirovanie pozvolyaet izbegat' oshibok po neskol'kim prichinam. Vo-pervyh, prozrachnost' struktury i predstavleniya oblegchaet tochnuyu formulirovku trebovanij k modulyam i ih funkcij. Vo-vtoryh, raschlenenie i nezavisimost' modulej pomogayut izbezhat' sistemnyh oshibok. V- tret'ih, proekt mozhno testirovat' na kazhdom utochnyayushchem shage, poetomu testirovanie mono nachat' ran'she i na kazhdom shage sosredotochit'sya na podhodyashchem urovne detalizacii. Process poshagovogo utochneniya ne oznachaet, chto v sluchae stolknoveniya s kakoj- nibud' neozhidanno zatrudnitel'noj detal'yu ne prihoditsya vozvrashchat'sya nazad, otbrasyvat' samyj verhnij uroven' i nachinat' vse snachala. Na praktike eto chasto sluchaetsya. No stanovitsya znachitel'no legche tochno uvidet', kogda i pochemu nuzhno otbrosit' ves' proekt i nachat' snachala. Mnogie slabye sistemy poyavlyayutsya v rezul'tate popytok sohranit' skvernyj pervonachal'nyj proekt putem raznogo roda kosmeticheskih zaplatok. Nishodyashchee proektirovanie umen'shaet takoj soblazn. YA ubezhden, chto nishodyashchee proektirovanie yavlyaetsya vazhnejshej novoj formalizaciej programmirovaniya za desyatiletie. Strukturnoe programmirovanie. Drugoj vazhnyj krug idej dlya razrabotki, sokrashchayushchih chislo oshibok v programme, ishodit to Dejkstry (Dijkstra)3 i postroen na teoreticheskoj strukture Bema (Boehm) i Dzhakopini (Jacopini).4 V svoej osnove podhod zaklyuchaetsya v razrabotke programm, upravlyayushchie struktury kotoryh sostoyat tol'ko iz ciklov, opredelyaemyh takimi operatorami, kak DO WHILE i gruppami uslovno vypolnyaemyh operatorov, ogranichennyh skobkami s ispol'zovaniem operatorov usloviya IF...THEN...ELSE. Bem i Dzhakopini pokazyvayut teoreticheskuyu dostatochnost' takih struktur. Dejkstra dokazyvaet, chto al'ternativnoe neogranichennoe primenenie vetvlenie s pomoshch'yu GO TO obrazuet struktury, raspolagayushchie k poyavleniyu logicheskih oshibok. V osnove, nesomnenno, lezhat zdravye mysli. Pri obsuzhdenii sdelano mnogo kriticheskih zamechanij - v chastnosti, bol'shoe udobstvo predstavlyayut dopolnitel'nye upravlyayushchie struktury, takie kak n-variantnyj perehod (tak nazyvaemyj operator CASE) dlya razlicheniya sredi neskol'kih sluchaev i avarijnyj vyhod (GO TO ABNORMAL END). Krome togo, nekotorye dogmaticheski izbegayut vseh GO TO , chto predstavlyaetsya chrezmernym. Vazhnoj i sushchestvennoj dlya sozdaniya programm, ne soderzhashchih oshibok, yavlyaetsya neobhodimost' rassmatrivat' upravlyayushchie struktury sistemy kak upravlyayushchie struktury, a ne kak otdel'nye operatory perehoda. Takoj obraz mysli yavlyaetsya bol'shim shagom vpered. Otladka komponentov Za poslednie dvadcat' let procedury otladki programm proshli bol'shoj krug i v nekotoryh otnosheniyah vernulis' k nachal'noj tochke. Cikl proshel chetyre etapa i lyubopytno prosledit' ih, otmetiv motivaciyu perehoda. Otladka v aktivnom rezhime. U pervyh mashin bylo sravnitel'no slaboe oborudovanie vvoda-vyvoda, obuslovlivavshee bol'shie zaderzhki. Obychno mashina ispol'zovala dlya chteniya i zapisi bumazhnye i magnitnye lenty, a dlya podgotovki lent i pechati ispol'zovalis' avtonomnye sredstva. Iz-za etogo vvod-vyvod na lentu byl nevynosimo neudoben dlya otladki, i dlya nee ispol'zovalas' konsol'. Poetomu otladka organizovyvalas' takim obrazom, chtoby obespechit' za seans raboty s mashinoj vozmozhno bol'shee chislo proverok. Programmist tshchatel'no razrabatyval svoi procedury otladki, planiruya mesta ostanovki, adresa pamyati dlya prosmotra, ih vozmozhnoe soderzhimoe i dal'nejshie dejstviya v zavisimosti ot soderzhimogo. |to dotoshnoe programmirovanie samogo sebya v kachestve otladchika vpolne moglo zanyat' polovinu vremeni napisaniya otlazhivaemoj programmy. Glavnym grehom bylo smelo nazhat' knopku START, ne razbiv predvaritel'no programmu na otlazhivaemye sekcii s zaplanirovannymi ostanovkami. Dampy pamyati. Otladka v aktivnom rezhime byla ochen' effektivnoj. Za dvuhchasovuyu otladku mozhno bylo zapustit' programmu raz desyat'. No komp'yutery byli malochislenny i ochen' dorogi, i mysl' o takoj naprasnoj trate mashinnogo vremeni uzhasala. Poetomu, kogda poyavilis' skorostnye printery, podklyuchaemye v aktivnom rezhime, tehnologiya izmenilas'. Programma zapuskalas' i rabotala do vozniknoveniya oshibki, posle chego raspechatyvalsya damp pamyati. Togda nachinalsya kropotlivyj trud za stolom po izucheniyu soderzhimogo kazhdogo adresa. Vremeni uhodilo primerno stol'ko zhe, skol'ko i pri otladke na mashine, no eto bylo uzhe posle kontrol'nogo progona, i rabota sostoyala v rasshifrovke dannyh, a ne v planirovanii, kak prezhde. Dlya kazhdogo otdel'nogo pol'zovatelya otladka zanimala znachitel'no bol'shij srok, poskol'ku testovye zapuski zaviseli ot oborachivaemosti paketnoj obrabotki. Odnako procedura v celom byla prednaznachena dlya sokrashcheniya vremeni ispol'zovaniya komp'yutera i obsluzhivaniya vozmozhno bol'shego chisla programmistov. Snimki momental'nogo sostoyaniya. Mashiny, dlya kotoryh byli razrabotany dampy pamyati, imeli pamyat' razmerom 2000-4000 slov, ili 8-16 Kbajt. Odnako razmer pamyati ros ogromnymi tempami, i delat' damp pamyati stalo nereal'nym. Poetomu razrabotali metody vyborochnogo dampa, vyborochnoj trassirovki i vstavki v programmy komand dlya momental'nyh snimkov. Vershinoj razvitiya etogo napravleniya stal TESTRAN v OS/360, pozvolyavshij vstavlyat' v programmu momental'nye snimki bez povtornoj sborki i kompilyacii. Interaktivnaya otladka. V 1959 godu Kodd (Codd) s kollegami5 i Strejchi (Strachey)6 soobshchili o rabote, cel'yu kotoroj byla otladka v rezhime razdeleniya vremeni, pozvolyayushchaya odnovremenno dostich' mgnovennoj oborachivaemosti otladki v aktivnom rezhime i effektivno ispol'zovat' mashinnoe vremya, kak pri paketnoj obrabotke zadanij. Komp'yuter dolzhen byl imet' v pamyati neskol'ko programm, gotovyh k zapusku. Terminal, upravlyaemyj tol'ko programmoj, dolzhen byl byt' svyazan s kazhdoj iz otlazhivaemyh programm. Otladka dolzhna byla prohodit' pod upravleniem programmy-supervizora. Kogda programmist za terminalom ostanavlival svoyu programmu, chtoby izuchit' ee vypolnenie ili vnesti izmeneniya, supervizor zapuskal druguyu programmu, zanimaya takim obrazom mashinu. Mul'tiprogrammnaya sistema Kodda byla razrabotana, no akcent byl sdelan na uvelichenie proizvoditel'nosti blagodarya effektivnomu ispol'zovaniyu vvoda- vyvoda, i interaktivnaya otladka ne byla osushchestvlena. Idei Strejchi byli uluchsheny i v 1963 godu voploshcheny Korbato s kollegami v MTI v eksperimental'noj sisteme 7090. |to razrabotke privela k MULTICS, TSS i drugim segodnyashnim sistemam razdeleniya vremeni. Glavnymi oshchushchaemymi pol'zovatelem razlichiyami mezhdu otladkoj v aktivnom rezhime, kak ona osushchestvlyalas' ranee, i segodnyashnej interaktivnoj otladkoj yavlyayutsya vozmozhnosti, poluchennye v rezul'tate prisutstviya programmy- supervizora i svyazannyh s nej interpretatorov yazykov programmirovaniya. Mozhno programmirovat' i proizvodit' otladku na yazykah vysokogo urovnya. |ffektivnye sredstva redaktirovaniya pozvolyayut legko delat' izmeneniya i momental'nye snimki. Vozvrat k mgnovennoj oborachivaemosti otladki v aktivnom rezhime poka ne privel k vozvrashcheniyu predvaritel'nogo planirovaniya otladochnyh seansov. V sushchnosti, takoe predvaritel'noe planirovanie ne stol' neobhodimo, kak ran'she, poskol'ku mashinnoe vremya teper' ne tratitsya vpustuyu, poka chelovek sidit i dumaet. Tem ne menee interesnye eksperimental'nye dannye Golda (Gold) pokazyvayut, chto vo vremya pervogo dialoga kazhdogo seansa dostigaetsya vtroe bol'shij progress v interaktivnoj otladke, chem pri posleduyushchih dialogah.8 |to ubeditel'no govorit o tom, chto iz-za otsutstviya planirovaniya my ne polnost'yu realizuem potencial dialogovoj raboty. Pora stryahnut' pyl' so staryh metodov raboty v interaktivnom rezhime. YA schitayu, chto dlya pravil'nogo ispol'zovaniya horoshej terminal'noj sistemy na kazhdye dva chasa raboty za terminalom dolzhno prihodit'sya dva chasa raboty za stolom. Polovina etogo vremeni uhodit na podchistki posle pervogo seansa: vnesenie izmenenij v zhurnal otladki, podshivku novyh listingov v sistemnyj zhurnal, ob®yasnenie neponyatnyh yavlenij. Vtoraya chast' uhodit na podgotovku: planirovanie izmenenij i usovershenstvovanij i razrabotku detal'nyh testov dlya ocherednogo seansa. Bez takogo planirovaniya trudno podderzhivat' produktivnost' na protyazhenii vseh dvuh chasov. Bez podchistki posle seansa trudno sdelat' posledovatel'nost' seansov sistematichnoj i prodvigayushchej rabotu vpered. Kontrol'nye primery. CHto kasaetsya razrabotki fakticheskih procedur otladki i kontrol'nyh primerov, osobenno udachnoe izlozhenie predlagaet Gryunberger (Gruenberger),9 est' i bolee korotkie opisaniya v drugih izvestnyh uchebnikah.10, 11 Sistemnaya otladka Neozhidanno trudnym etapom sozdaniya sistemy programmirovaniya okazyvaetsya testirovanie sistemy. YA uzhe obsuzhdal nekotorye prichiny kak ego trudnosti, tak i nepredskazuemosti. Mozhno ne somnevat'sya v dvuh veshchah: sistemnaya otladka zajmet bol'she vremeni, chem predpolagaetsya, a ee slozhnost' opravdyvaet doskonal'no sistematichnyj i planovyj podhod. Rassmotrim, chto vklyuchaet v sebya takoj podhod.12 Ispol'zujte otlazhennye komponenty. Obychnyj zdravyj smysl, esli ne obychnaya praktika, podskazyvayut, chto sistemnuyu otladku nuzhno nachinat', kogda rabotaet kazhdaya sostavlyayushchaya chast'. Dalee obshcheprinyataya praktika sleduet dvumya putyami. Pervyj podhod - "svinti i poprobuj". Vidimo, on osnovyvaetsya na tom, chto krome oshibok v komponentah najdutsya i oshibki v sisteme (t.e. v interfejsah). CHem skoree chasti budut soedineny vmeste, tem skoree vsplyvut sistemnye oshibki. Legko takzhe predstavit', chto, ispol'zuya komponenty dlya testirovaniya drug druga, mozhno v znachitel'noj mere izbezhat' sozdaniya okruzheniya dlya testirovaniya. I to, i drugoe, ochevidno, yavlyaetsya pravdoj, no, kak pokazyvaet opyt, ne vsej pravdoj: znachitel'no bol'she vremeni sberegaetsya pri testirovanii sistemy s ispol'zovaniem chistyh otlazhennyh komponentov, chem ego tratitsya na sozdanie okruzheniya i doskonal'noj proverki komponentov. Neskol'ko bolee tonkim yavlyaetsya podhod "dokumentirovannoj oshibki". On oznachaet, chto komponent gotov k ispol'zovaniyu v sistemnoj proverke, kogda vse ego oshibki najdeny, no neobyazatel'no uzhe ispravleny. Togda, teoreticheski, pri sistemnom testirovanii vozmozhnye effekty etih oshibok izvestny i mogut byt' proignorirovany, a sosredotochit'sya mozhno na novyh yavleniyah. Vse eto oznachaet prinimat' zhelaemoe za dejstvitel'noe i proishodit ot stremleniya ob®yasnit' proval grafika rabot. Nikto ne znaet vseh vozmozhnyh posledstvij izvestnyh oshibok. Esli by vse bylo prosto, sistemnoe testirovanie ne vyzyvalo by zatrudnenij. Krome togo, ispravlenie dokumentirovannyh oshibok, nesomnenno, privedet k vneseniyu novyh oshibok, i sistemnyj test okazhetsya isporchennym. Sozdajte bol'she okruzhenij. Pod "okruzheniem" ya ponimayu vse programmy i dannye, sozdannye dlya celej otladki, no ne prednaznachennye dlya ispol'zovaniya v konechnom produkte. V okruzhenii net smysla imet' i poloviny togo koda, kotoryj vhodit v produkt. Odin iz vidov okruzheniya - fiktivnyj komponent, kotoryj mozhet sostoyat' tol'ko iz interfejsov i, vozmozhno, kakih-nibud' iskusstvennyh dannyh ili nebol'shih kontrol'nyh primerov. Naprimer, v sistemu mozhet vhodit' programma sortirovki, kotoraya eshche ne zakonchena. Svyazannye s nej komponenty mozhno testirovat' s pomoshch'yu fiktivnoj programmy, kotoraya prosto chitaet i proveryaet format vhodnyh dannyh i vozvrashchaet nabor pravil'no otformatirovannyh bessmyslennyh, no uporyadochennyh dannyh. Drugoj vid - mini-fajl. Rasprostranennym vidom sistemnoj oshibki yavlyaetsya nepravil'noe vospriyatie formatov lentochnyh i diskovyh fajlov. Poetomu stoit sozdat' neskol'ko malen'kih fajlov, soderzhashchih lish' neskol'ko tipovyh zapisej i vse opisaniya, ukazateli i t.p. Predel'nyj sluchaj mini-fajla - fiktivnyj fajl, kotoryj fakticheski ne sushchestvuet. YAzyk upravlyayushchih zadanij OS/360 imeet takoe sredstvo, i ono ochen' polezno dlya otladki komponentov. Drugoj vid okruzheniya - vspomogatel'nye programmy. Generatory dannyh dlya testirovaniya, pechat' special'nogo analiza, analizatory tablic perekrestnyh ssylok - vse eto primery special'nyh prisposoblenij, kotorye mozhet potrebovat'sya sozdat'.13 Kontrolirujte izmeneniya. ZHestkij kontrol' vo vremya testirovaniya yavlyaetsya vpechatlyayushchim metodom otladki apparatury, s uspehom primenimym k sistemam programmirovaniya. Prezhde vsego, kto-to dolzhen byt' otvetstvennym. On, i tol'ko on dolzhen razreshat' izmeneniya v komponentah i zamenu odnoj versii drugoj. Dalee, kak obsuzhdalos' vyshe, sistema dolzhna imet' kontroliruemye ekzemplyary: odin ekzemplyar s poslednimi versiyami, nahodyashchijsya pod zamkom i ispol'zuemyj dlya testirovaniya komponentov; odin testiruemyj ekzemplyar s ustanovlennymi ispravleniyami; rabochie ekzemplyary kazhdogo sotrudnika dlya vneseniya ispravlenij i dopolnenij v svoi komponenty. V tehnicheskih modelyah System/360 sredi obychnyh zheltyh provodov mozhno bylo inogda videt' fioletovye provoda. Pri obnaruzhenii defekta delalis' dve veshchi. Bystro pridumyvalos' ispravlenie i ustanavlivalos' v sisteme, chtoby prodolzhit' otladku. |to izmenenie delalos' fioletovymi provodami, tak chto ono torchalo kak bel'mo na glazu. Izmenenie registrirovalos' v zhurnale. Tem vremenem gotovilsya oficial'nyj dokument o vnesenii ispravlenij, kotoryj zapuskalsya v zhernova avtomatizirovannogo proektirovaniya. V itoge eto vylivalos' v izmenennye chertezhi i spiski provodov i novuyu zadnyuyu panel', v kotoroj izmeneniya byli sdelany na pechatnoj plate ili zheltymi provodami. Teper' fizicheskaya model' i dokumentaciya sootvetstvovali drug drugu, i fioletovyj provod ischezal. Programmirovaniyu tozhe trebuetsya tehnologiya fioletovyh provodov, i ochen' trebuetsya zhestkij kontrol' i glubokoe uvazhenie k dokumentu, kotoryj v konechnom schete, okazhetsya produktom. Neot®emlemymi sostavlyayushchimi takoj tehnologii yavlyayutsya registraciya vseh izmenenij v zhurnale i zametnoe otlichie v ishodnom kode mezhdu zaplatkami na skoruyu ruku i produmannymi i dokumentirovannymi ispravleniyami. Dobavlyajte komponenty po odnomu. |tot recept takzhe ocheviden, no im chasto prenebregayut iz-za optimizma i leni. CHtoby sledovat' emu, trebuyutsya fiktivnye programmy i raznoe okruzhenie, a eto otnimaet vremya. I v konce koncov, vsya eta rabota mozhet okazat'sya lishnej! Mozhet byt', oshibok i net! Net! Protiv'tes' soblaznu! |to to, v chem zaklyuchaetsya sistematichnoe testirovanie sistemy. Nuzhno predpolagat', chto oshibok budet mnogo, i planirovat' uporyadochennuyu proceduru izbavleniya ot nih. Uchtite, chto nuzhno imet' polnyj nabor kontrol'nyh primerov dlya proverki chastichno sobrannyh sistem posle dobavleniya kazhdogo komponenta. Prezhnie primery, uspeshno vypolnennye na poslednej chastichnoj sborke, nuzhno perezapustit' na novoj, chtoby proverit', ne uhudshilas' li sistema. Kvantujte izmeneniya. Po mere sozrevaniya sistemy vremya ot vremeni nachinayut poyavlyat'sya razrabotchiki komponentov, prinosya svezhie versii svoih izdelij - bolee bystrye, men'shie po razmeru, bolee polnye ili predpolozhitel'no soderzhashchie men'she oshibok. Zamena rabotayushchego komponenta novoj versiej trebuet takoj zhe sistematicheskoj procedury testirovaniya, kak i dobavlenie novogo komponenta, hotya i trebuet men'she vremeni, poskol'ku obychno uzhe imeyutsya bolee polnye i effektivnye kontrol'nye primery. Kazhdaya komanda, sozdayushchaya novyj komponent, ispol'zuet novejshuyu versiyu integrirovannoj sistemy v kachestve sredy dlya otladki svoego komponenta. Prodelannaya rabota budet otbroshena nazad, esli eta sreda izmenitsya. Konechno, ona dolzhna izmenit'sya. No vnesenie izmenenij nuzhno proizvodit' kvantami. Togda u kazhdogo pol'zovatelya budut promezhutki produktivnoj stabil'nosti, preryvaemye paketnym obnovleniem sredy testirovaniya. |to okazyvaetsya znachitel'no menee razrushitel'nym, chem postoyannye volneniya i drozh'. Leman i Beladi dayut svidetel'stva v pol'zu togo, chto kvant izmenenij dolzhen byt' libo ochen' bol'shim i redkim, libo ochen' malen'kim i chastym.14 Poslednyaya strategiya, soglasno ih modeli, bol'she podverzhena neustojchivosti. Moj opyt eto podtverzhdaet: ya nikogda ne risknu ispol'zovat' ee na praktike. Kvantovye izmeneniya horosho vpisyvayutsya v tehnologiyu fioletovyh provodov. Bystraya zaplatka derzhitsya do sleduyushchej regulyarnoj versii komponenta, kotoraya dolzhna soderzhat' ispravlenie v otlazhennom i dokumentirovannom vide.

    Glava 14. Nazrevanie katastrofy

Nikto ne lyubit prinosyashchego durnye vesti. SOFOKA Kak okazyvaetsya, chto proekt zapazdyvaet na god? ... Snachala zapazdyvaet na odin den'. Kogda slyshish' o katastroficheskom otstavanii proekta ot grafika, to predstavlyaetsya ryad obrushivshihsya na nego bol'shih bedstvij. Odnako obychno prichinoj katastrofy sluzhat ne smerchi, a termity: otstavanie ot grafika proishodit nezametno, no neumolimo. Na samom dele, s krupnymi bedstviyami spravit'sya legche: ispol'zuyutsya krupnye sily, korennaya reorganizaciya, izobretayutsya novye podhody. Vsya komanda podnimaetsya na bor'bu. Otstavanie, rastushchee ponemnogu izo dnya v den', trudnee raspoznat', trudnee predotvratit', trudnee ispravit'. Vchera ne udalos' provesti soveshchanie iz-za bolezni klyuchevogo rabotnika. Segodnya vyklyucheny vse mashiny, potomu chto molniya udarila v silovoj transformator. Zavtra ne udastsya nachat' testirovanie procedur raboty s diskami, poskol'ku postavka s zavoda pervogo diska zaderzhivaetsya na nedelyu. Snegopad, rabota v sude prisyazhnyh, semejnye problemy, ekstrennye vstrechi s klientami, proverki rukovodstvom - spisok beskonechen. Kazhdoe sobytie zaderzhivaet kakuyu-nibud' rabotu na poldnya ili den'. I rastet otstavanie ot grafika, kazhdyj raz eshche na odin den'. Vehi ili pomehi? Kak upravlyat' bol'shim proektom po zhestkomu grafiku? Prezhde vsego, nado imet' grafik. U kazhdogo iz sobytij, nazyvaemyh vehami, dolzhna byt' data. Vybor dat - uzhe obsuzhdavshayasya zadacha ocenki, i on reshayushchim obrazom zavisit ot opyta. Dlya vybora vseh veh est' tol'ko odno prigodnoe pravilo. Vehami dolzhny sluzhit' konkretnye osobye sobytiya, kotorye mozhno identificirovat' s polnoj opredelennost'yu. V kachestve otricatel'nyh primerov otmetim, chto napisanie programmy "zakoncheno na 90 procentov" v techenie poloviny vsego vremeni kodirovaniya. Otladka "zakonchena na 99 procentov" pochti vsegda. "Planirovanie zaversheno" - sobytie, kotoroe mozhno ob®yavit' pochti proizvol'no.1 Naprotiv, vehi dolzhny byt' 100-procentnymi sobytiyami. "Specifikacii podpisany arhitektorami i razrabotchikami", "ishodnyj kod gotov na 100 procentov, otperforirovan i zagruzhen v biblioteku na diske", "otlazhennaya versiya proshla vse kontrol'nye primery". Takie konkretnye vehi razgranichivayut rasplyvchatye etapy planirovaniya, kodirovaniya i otladki. Nalichie chetko ocherchennyh granic i nedvusmyslennost' vazhnee, chem vozmozhnost' legkoj proverki nachal'nikom. Edva li chelovek stanet lgat' o prohozhdenii vehi, esli ona ocherchena stol' yasno, chto ot ne mozhet sebya obmanyvat'. A vot esli veha rasplyvchata, nachal'nik chasto vosprinimaet doklad inache, chem tot, kto emu dokladyvaet. Dopolnyaya Sofokla, skazhem, chto nikto ne lyubit i sam prinosit' durnye vesti, poetomu oni smyagchayutsya bez zlogo namereniya vvesti v zabluzhdenie. Dva interesnyh issledovaniya povedeniya pravitel'stvennyh podryadchikov po provedeniyu ocenok v krupnomasshtabnyh issledovatel'skih proektah pokazali: 1. Ocenki prodolzhitel'nosti raboty, tshchatel'no provedennye i peresmatrivaemye kazhdye dve nedeli pered nachalom raboty, ne sil'no menyayutsya po mere priblizheniya nachala raboty, kakimi by nevernymi oni ni okazalis' v konechnom itoge. 2. Posle nachala raboty zavyshennye iznachal'no ocenki postoyanno umen'shayutsya po mere prodvizheniya. 3. Zanizhennye ocenki sushchestvenno ne menyayutsya, poka do zaplanirovannogo sroka okonchaniya rabot ne ostaetsya okolo treh nedel'. CHetko razlichimye vehi v dejstvitel'nosti sozdayut udobstvo komande, kotoraya dolzhna rasschityvat', chto menedzher ih horosho opredelit. S neyasno vidimoj vehoj zhizn' stanovitsya trudnee. |to uzhe ne veha, a mel'nichnyj kamen', peretirayushchij boevoj duh, poskol'ku ona vvodit v zabluzhdenie otnositel'no poter' vremeni, poka oni ne stanut nepopravimymi. A hronicheskoe otstavanie ot grafika ugnetayushche dejstvuet na moral'noe sostoyanie. "Drugaya chast' tozhe opazdyvaet" Otstavanie ot grafika na odin den' - nu i chto? Kogo volnuet otstavanie na odin den'? Pozzhe nagonim. Drugaya chast', v kotoruyu vhodit nasha, tozhe otstaet na odin den'. Menedzher bejsbola schitaet energiyu vazhnym talantom, kak dlya vydayushchihsya igrokov, tak i dlya vydayushchihsya komand. |to sposobnost' begat' bystree, chem neobhodimo, peredvigat'sya skoree, chem neobhodimo, starat'sya sil'nee, chem neobhodimo. |nergiya vazhna i dlya vydayushchihsya komand programmistov. Ona obespechivaet uprugost', rezervnuyu moshchnost', pozvolyayushchie komande spravit'sya s povsednevnymi nepriyatnostyami, predvoshishchat' melkie bedy i uberegat'sya ot nih. Rasschitannaya reakciya, razmerennye usiliya ohlazhdayut energiyu. Kak my videli, nuzhno prihodit' v vozbuzhdenie iz-za otstavaniya na odin den', ibo oni yavlyayutsya sostavlyayushchimi katastrofy. No ne vse otstavaniya na odin den' odinakovo katastrofichny. Poetomu neobhodimo rasschityvat' reakciyu, hotya eto i oslablyaet energiyu. Kak otlichit' otstavaniya, kotorye sushchestvenny? Nichem nel'zya zamenit' diagrammy PERT ili metod kriticheskogo puti. Takaya set' pokazyvaet, kto nahoditsya v ozhidanii kakih sobytij. Ona pokazyvaet, kto nahoditsya na kriticheskom puti, na kotorom lyuboe otstavanie vlechet perenos daty okonchaniya. Ona takzhe pokazyvaet, kakoe predel'noe otstavanie vozmozhno dlya nekotoroj raboty, prezhde chem ono privedet na kriticheskij put'. Tehnologiya PERT, strogo govorya, est' razrabotka grafika rabot s kriticheskim putyami, kogda dlya kazhdogo sobytiya proizvodyatsya tri ocenki, sootvetstvuyushchie raznym veroyatnostyam ulozhit'sya v ustanovlennye sroki. YA ne dumayu, chto takoe utochnenie stoit zatrachivaemyh usilij, no dlya kratkosti vsyakuyu set' s kriticheskim putyami budu nazyvat' diagrammoj PERT. Podgotovka diagramm PERT est' samaya cennaya chast' ee primeneniya. Opredelenie topologii seti, ukazanie zavisimostej v nej i ocenivanie putej zastavlyayut vypolnit' bol'shoj ob®em ochen' konkretnogo planirovaniya na samyh rannih stadiyah proekta. Pervaya diagramma vsegda uzhasna, i dlya sozdaniya vtoroj prihoditsya proyavit' mnogo izobretatel'nosti. Vo vremya vypolneniya proekta diagramma PERT daet otvet na demoralizuyushchie izvineniya tipa "drugaya chast' tozhe zapazdyvaet". Ona pokazyvaet, kogda neobhodimo razvit' energiyu, chtoby uvesti svoyu chast' raboty s kriticheskogo puti, i podskazyvaet sposoby naverstat' poteryannoe vremya v drugih chastyah. Pod kovrom Kogda menedzher nizovogo zvena vidit, chto ego malen'kaya komanda otstaet, on ne sklonen bezhat' k nachal'niku so svoim gorem. Vozmozhno, komanda sumeet naverstat' vremya, libo on smozhet chto-nibud' pridumat' ili reorganizovat' dlya resheniya problemy. Zachem zhe bespokoit' etim nachal'nika? Do pory do vremeni eto dopustimo. Dlya togo i sushchestvuyut menedzhery nizovogo zvena, chtoby reshat' takie problemy. A u nachal'nika dostatochno drugih zabot, trebuyushchih ego vmeshatel'stva, chtoby iskat' novye. Tak vsya eta gryaz' zametaetsya pod kover. No kazhdomu nachal'niku nuzhny dva vida dannyh: informaciya o sryvah plana, kotoraya trebuet vmeshatel'stva, i kartina sostoyaniya del, chtoby byt' v kurse.3 S etoj cel'yu on dolzhen znat' polozhenie del vo vseh svoih komandah. Poluchit' pravdivuyu kartinu nelegko. V etom meste interesy menedzhera nizovogo zvena i nachal'nika vstupayut v protivorechie. Menedzher nizovogo zvena boitsya, chto esli on dolozhit nachal'niku o voznikshej u nego probleme, tot voz'metsya za nee sam. Ego vmeshatel'stvo otnimet u menedzhera ego funkcii, umen'shit ego vlast' i narushit drugie ego plany. Poetomu, poka menedzher schitaet, chto mozhet sam reshit' problemu, on ne dokladyvaet o nej nachal'niku. U nachal'nika est' dva sposoba zaglyanut' pod kovrik. Ispol'zovat' nuzhno oba. Pervyj - umen'shit' konflikt rolej i stimulirovat' otkrytie informacii. Vtoroj - sdernut' kovrik. Umen'shenie konflikta rolej. V pervuyu ochered' nachal'nik dolzhen provesti razlichie mezhdu dannymi i dejstviyah i dannymi o sostoyanii del. On dolzhen priuchit' sebya ne vmeshivat'sya v problemy, kotorye mogut reshit' ego menedzhery, i nikogda ne vmeshivat'sya v problemy neposredstvenno vo vremya izucheniya sostoyaniya del. YA znal odnogo nachal'nika, kotoryj neizmenno snimal trubku i nachinal davat' ukazaniya, ne dochitav do konca pervyj abzac otcheta o sostoyanii del. Pri takih dejstviyah vam obespecheno utaivanie polnyh dannyh. Naprotiv, esli menedzher znaet, chto ego nachal'nik vosprimet otchet bez paniki ili vmeshatel'stva, on budet davat' chestnye ocenki. Ves' etot process idet uspeshno, esli nachal'nik podcherkivaet, chto soveshchaniya, zaslushivaniya i konferencii nosyat harakter izucheniya sostoyaniya del, a ne prinyatiya mer po problemam, i vedet sebya sootvetstvuyushchim obrazom. Ochevidno, mozhno sozvat' soveshchanie po prinyatiyu mer po rezul'tatam zaslushivaniya o sostoyanii del, esli voznikaet oshchushchenie, chto problema vyshla iz-pod kontrolya. No togda po krajnej mere vse znayut, chto proishodit, i nachal'nik dvazhdy podumaet, prezhde chem vzyat' upravlenie na sebya. Sdergivanie kovrika. Tem ne menee neobhodimo imet' sposob uznat' istinnoe polozhenie del nezavisimo ot nalichiya stremleniya k sotrudnichestvu. Osnovoj takogo izucheniya sluzhit diagramma PERT s chasto raspolozhennymi vehami. V bol'shom proekte mozhno potrebovat' ezhenedel'nogo izucheniya kakoj-libo chasti ee, rassmatrivaya vsyu diagrammu raz v mesyac ili okolo togo. Glavnym dokumentom yavlyaetsya otchet s ukazaniem veh i stepeni ih fakticheskogo vypolneniya. (Na risunke 14.1 pokazan fragment takogo otcheta.) On mozhet pokazyvat' otstavanie po nekotorym poziciyam i sluzhit' v kachestve povestki dnya soveshchaniya. Vsem izvestny vynosimye na nego voprosy, i sootvetstvuyushchie menedzhery gotovy dolozhit' o prichinah otstavaniya, predpolagaemyh srokah zaversheniya, prinimaemyh merah, a takzhe trebuetsya li pomoshch' ot nachal'nika ili drugih grupp, i esli da, to kakaya. V. Vysockij iz Bell Telephone Laboratories dobavlyaet sleduyushchee nablyudenie: Dlya menya okazalos' udobnym imet' v otchete o sostoyanii del dve daty - "planovuyu" i "ocenivaemuyu". Planovye daty prinadlezhat menedzheru proekta i predstavlyayut soboj posledovatel'nyj plan raboty dlya proekta v celom, a priori yavlyayushchijsya priemlemym. Ocenivaemye daty prinadlezhat menedzheram nizshego zvena, v peredelah kompetencii kotoryh nahodyatsya rassmatrivaemye uchastki, i predstavlyayut ih mneniya o sroke fakticheskogo nastupleniya sobytiya pri imeyushchihsya u nih resursah i poluchenii vhodnyh dannyh (ili obyazatel'stvah ob ih postavke). Menedzher proekta dolzhen ostorozhno otnosit'sya k ocenivaemym datam i stremit'sya k polucheniyu tochnyh, neiskazhennyh ocenok, a ne uteshitel'no-optimistichnyh ili perestrahovochno- konservativnyh dannyh. Esli eta poziciya utverditsya v umah, to menedzher Ris. 14.1 proekta dejstvitel'no smozhet predvidet', chto on popadet v bedu, esli ne predprimet kakih-nibud' mer.4 Sozdanie diagrammy PERT yavlyaetsya obyazannost'yu nachal'nika i podotchetnyh emu menedzherov. Vnesenie v nee izmenenij, peresmotr i podgotovka otchetnosti dolzhny osushchestvlyat'sya nebol'shoj (ot odnogo do treh chelovek) gruppoj, kak by prodolzhayushchej nachal'nika. Takaya gruppa planirovaniya i kontrolya neocenima pri rabote nad bol'shim proektom. Ona ne obladaet inymi polnomochiyami, krome kak trebovat' ot menedzherov nizovogo zvena predostavleniya svedenij ob ustanovke ili izmenenii veh i ih dostizhenii. Poskol'ku gruppa planirovaniya i kontrolya osushchestvlyaet vsyu bumazhnuyu chast' raboty, nagruzka na menedzherov nizovogo zvena ogranichivaetsya samym vazhnym - prinyatiem reshenij. U nas byla umelaya, energichnaya i diplomatichnaya gruppa planirovaniya i kontrolya, vozglavlyavshayasya A. M. P'etrasanta (A. M. Pietrasanta), proyavivshim znachitel'nye izobretatel'nye sposobnosti dlya razrabotki effektivnyh, no nenavyazchivyh metodov kontrolya. V rezul'tate ego gruppa pol'zovalas' shirokim uvazheniem i horoshim otnosheniem. |to nemaloe dostizhenie dlya gruppy, kotoraya po prirode svoej dolzhna vyzyvat' razdrazhenie. Vydelenie nebol'shogo chisla podgotovlennyh rabotnikov v gruppu planirovaniya i kontrolya prinosit bol'shuyu otdachu. Dlya uspeshnogo zaversheniya proekta eto znachitel'no luchshe, chem esli by oni neposredstvenno zanimalis' razrabotkoj programmnyh produktov, tak kak gruppa planirovaniya i kontrolya stoit na strazhe togo, chtoby neoshchutimye zaderzhki stali vidimymi, i signaliziruet o kriticheskih polozheniyah. |to sistema rannego obnaruzheniya poteri goda, proishodyashchej den' za dnem.

    Glava 15. Obratnaya storona

CHego my ne ponimaem, tem ne vladeem. GETE O, dajte mne vystupit' kommentatorom, Skol'zyashchim po poverhnosti i budorazhashchim umy. KRABB omp'yuternaya programma - eto poslanie cheloveka mashine. Strogo vystroennyj sintaksis i tshchatel'nye opredeleniya naceleny na to, chtoby bezdumnoj mashine stali ponyatny namereniya cheloveka. No u napisannoj programmy est' obratnaya storona: ona dolzhna byt' v sostoyanii rasskazat' o sebe pol'zovatelyu-cheloveku. |to trebuetsya dazhe dlya programmy, napisannoj isklyuchitel'no dlya sobstvennyh nuzhd, poskol'ku pamyat' mozhet izmenit' avtoru-pol'zovatelyu, i emu potrebuetsya osvezhit' detali svoego truda. Naskol'ko zhe bolee neobhodima dokumentaciya dlya programmy obshchego pol'zovaniya, pol'zovatel' kotoroj otdalen ot avtora vo vremeni, i v prostranstve! Dlya programmnogo produkta storona, obrashchennaya k pol'zovatelyu, stol' zhe vazhna, kak i storona, obrashchennaya k mashine. Mnogie iz nas branili dalekogo bezymyannogo avtora za skudno dokumentirovannuyu programmu. I mnogie poetomu pytalis' na vsyu zhizn' privit' molodym programmistam uvazhenie k dokumentacii, preodolevayushchee len' i press grafika rabot. V celom nam eto ne udalos'. YA dumayu, my ispol'zovali nevernye metody. Tomas Dzh. Uotson Starshij* (Thomas J. Watson, Sr.) rasskazal mne istoriyu svoego pervogo opyta v kachestve prodavca kassovyh apparatov v severnoj chasti shtata N'yu-Jork. Ispolnennyj entuziazma, on otpravilsya v put' v svoem furgone, nagruzhennom kassovymi apparatami. On prilezhno ob®ehal svoj uchastok, no nichego ne prodal. Obeskurazhennyj, on soobshchil ob etom svoemu hozyainu. Poslushav nekotoroe vremya, upravlyayushchij skazal: "Pomogi mne zagruzit' neskol'ko kass v furgon, zapryagaj loshad', i poedem snova." Tak oni i sdelali, i obhodya pokupatelej odnogo za drugim, starik pokazyval, kak prodavat' kassovye apparaty. Sudya po vsemu, urok poshel vprok. Neskol'ko let ya staratel'no chital gruppam inzhenerov-programmistov lekcii o neobhodimosti i zhelatel'nosti horoshej dokumentacii, uveshchevaya ih vse s bol'shim pylom i krasnorechiem. |to ne podejstvovalo. YA predpolozhil, chto oni ponyali, kak pravil'no sostavlyat' dokumentaciyu, no ne delali etogo po nedostatku rveniya. Togda ya poproboval pogruzit' v povozku neskol'ko kassovyh apparatov, t.e. pokazat' im, kak delaetsya eta rabota. |to imelo znachitel'no bol'shij uspeh. Poetomu ostavshayasya chast' etogo povestvovaniya posvyashchena ne stol'ko poucheniyam, skol'ko ob®yasneniyu togo, kak delat' horoshuyu dokumentaciyu. Kakaya dokumentaciya trebuetsya? Neobhodimy razlichnye urovni dokumentacii: dlya pol'zovatelya, obrashchayushchegosya k programme ot sluchaya k sluchayu, dlya pol'zovatelya, kotoryj sushchestvenno zavisit ot programmy v svoej rabote, i dlya pol'zovatelya, kotoryj dolzhen adaptirovat' programmu k izmenivshemusya okruzheniyu ili zadacham. CHtoby ispol'zovat' programmu. Kazhdomu pol'zovatelyu trebuetsya slovesnoe opisanie programmy. Po bol'shej chasti dokumentaciya stradaet otsutstvie obshchego obzora. Opisany derev'ya, prokommentirovany kora i list'ya, no plan lesa * Tomas Dzh. Uotson Starshij - osnovatel' kompanii IBM (primech. perev.) otsutstvuet. CHtoby napisat' poleznoe tekstovoe opisanie, vzglyanite izdaleka, a zatem medlenno priblizhajtes': 1. Naznachenie. CHto yavlyaetsya glavnoj funkciej programmy i prichinoj ee napisaniya? 2. Sreda. Na kakih mashinah, apparatnyh konfiguraciyah i konfiguraciyah operacionnoj sistemy budet ona rabotat'? 3. Oblast' opredeleniya i oblast' znachenij. Kakovy dopustimye znacheniya vhodnyh dannyh? Kakie pravil'nye znacheniya vyhodnyh rezul'tatov mogut poyavit'sya? 4. Realizovannye funkcii i ispol'zovannye algoritmy. CHto konkretno mozhet delat' programma? 5. Formaty vvoda-vyvoda, tochnye i polnye. 6. Instrukciya po rabote, v tom chisle opisanie vyvoda na konsol' i ustrojstvo vyvoda pri normal'nom i avarijnom zavershenii. 7. Opcii. Kakoj vybor predostavlyaetsya pol'zovatelyu v otnoshenii funkcij? Kakim obrazom nuzhno ego zadavat'? 8. Vremya raboty. Skol'ko vremeni zanimaet reshenie zadachi zadannogo razmera na zadannoj konfiguracii? 9. Tochnost' i proverka. Kakova ozhidaemaya tochnost' rezul'tatov? Kakie imeyutsya sredstva proverki tochnosti? CHasto vse eti dannye mozhno izlozhit' na treh ili chetyreh stranicah. Pri etom nuzhno udelit' osoboe vnimanie polnote i tochnosti. Bol'shuyu chast' etogo dokumenta nuzhno vcherne napisat' do razrabotki programmy, poskol'ku v nem voploshcheny osnovnye planovye resheniya. CHtoby doveryat' programme. Opisanie togo, kak ispol'zovat' programmu, nuzhno dopolnit' opisaniem togo, kak ubedit'sya v ee rabotosposobnosti. |to oznachaet nalichie kontrol'nyh primerov. Kazhdyj ekzemplyar postavlyaemoj programmy dolzhen soderzhat' neskol'ko nebol'shih kontrol'nyh primerov, kotorye mozhno postoyanno ispol'zovat', chtoby uverit' pol'zovatelya v tom, chto on mozhet doveryat' programme, i ona pravil'no zagruzhena v mashinu. Krome togo, nuzhny bolee tshchatel'nye testy, kotorye obychno vypolnyayutsya tol'ko posle modifikacii programmy. Oni otnosyatsya k trem uchastkam oblasti vhodnyh dannyh: 1. Osnovnye parametry, proveryayushchie glavnye funkcii programmy na obychno vstrechaemyh dannyh. 2. Primery na grani dopustimogo, proveryayushchie granicy oblasti vhodnyh dannyh i ubezhdayushchie, chto rabotayut naibol'shie znacheniya, naimen'shie znacheniya i vse dopustimye isklyucheniya. 3. Primery za granicej dopustimogo, proveryayushchie granicy s obratnoj storony i ubezhdayushchie, chto nedopustimye znacheniya vyzyvayut pravil'nye diagnosticheskie soobshcheniya. CHtoby modificirovat' programmu. Dlya adaptacii ili ispravleniya programmy trebuetsya znachitel'no bol'she dannyh. Razumeetsya, trebuyutsya vse detali, a oni soderzhatsya v horosho prokommentirovannom listinge. U pol'zovatelya, modificiruyushchego programmu ili redko ee ispol'zuyushchego, voznikaet ostraya neobhodimost' v yasnom otchetlivom obzore, na etot raz vnutrennej struktury. V takoj obzor vhodyat: 1. Blok-shema ili graf podprogrammnoj organizacii. Podrobnee ob etom sm. nizhe. 2. Polnye opisaniya ispol'zuemyh algoritmov ili ssylki na takie opisaniya v literature. 3. Raz®yasnenie struktury vseh ispol'zuemyh fajlov. 4. Obzor organizacii prohozhdeniya dannyh - posledovatel'nosti, v kotoroj dannye ili programmy zagruzhayutsya s lenty ili diska i opisanie togo, chto delaetsya na kazhdom hode. 5. Obsuzhdenie modifikacij, predpolagaemyh ishodnym proektom, sushchnost' i raspolozhenie dobavochnyh blokov i vyhodov i diskursivnoe obsuzhdenie myslej avtora programmy otnositel'no izmenenij, kotorye mogut okazat'sya zhelatel'nymi, i kak ih mozhno provesti. Polezno takzhe izlozhit' ego zamechaniya o skrytyh lovushkah. Bich blok-shem Blok-shema chashche vsego yavlyaetsya lishnej chast'yu programmnoj dokumentacii. Dlya mnogih programm blok-shemy voobshche ne nuzhny. Redkie programmy trebuyut blok- shemy bolee chem na odnu stranichku. Blok-shemy pokazyvayut strukturu prinyatiya programmoj reshenij, chto yavlyaetsya lish' odnoj storonoj struktury programmy. Kogda blok-shema razmeshchaetsya na odnoj stranice, struktura reshenij vyglyadit dovol'no elegantno, no naglyadnost' srazu utrachivaetsya, kogda est' neskol'ko stranic, svyazannyh pronumerovannymi vhodami i vyhodami. Odnostranichnaya blok-shema dlya znachitel'noj po razmeru programmy stanovitsya, v sushchnosti, diagrammoj struktury programmy i etapov ili shagov. V etom kachestve ona ochen' udobna. Risunok 15.1 pokazyvaet takoj graf podprogrammnoj struktury. Ris. 15.1 Graf struktury programmy (primer W. V. Wright) Konechno, takoj strukturnyj graf ne trebuet osobyh usilij po soblyudeniyu standartov ANSI dlya blok-shem. Vse eti pravila otnositel'no vida pryamougol'nikov, soedinitel'nyh linij, numeracii i t.p. nuzhny tol'ko dlya ponimaniya podrobnyh blok-shem. Podrobnaya poshagovaya blok-shema yavlyaetsya dosadnym anahronizmom, prigodnym tol'ko dlya novichkov v algoritmicheskom myshlenii. Vvedennye Goldshtajnom i fon Nejmanom1 pryamougol'niki vmeste so svoim soderzhimym sluzhili yazykom vysokogo urovnya, ob®edinyaya nepostizhimye operatory mashinnogo yazyka v osmyslennye gruppy. Kak davno ponyal Iverson,2 v sistematicheskom yazyke vysokogo urovnya gruppirovka uzhe provedena, i kazhdyj pryamougol'nik soderzhit operator (ris. 15.2). Poetomu sami pryamougol'niki yavlyayutsya utomitel'nym i otnimayushchim mesto uprazhneniem v cherchenii i vpolne mogut byt' udaleny. Togda ostayutsya tol'ko strelki. Strelki, svyazyvayushchie odin operator s drugim, raspolozhennym v sleduyushchej stroke, izlishni, i ih mozhno udalit'. Togda ostayutsya tol'ko GO TO, i esli priderzhivat'sya horoshej praktiki programmirovaniya i ispol'zovat' blochnye struktury dlya minimizacii chisla GO TO, takih strelok okazhetsya nemnogo, no oni ochen' sposobstvuyut ponimaniyu. Vpolne mozhno narisovat' ih na listinge i vovse izbavit'sya ot blok-shemy. V dejstvitel'nosti o blok-shemah bol'she govoryat, chem pol'zuyutsya imi. YA nikogda ne videl opytnogo programmista, kotoryj v povsednevnoj deyatel'nosti risoval by podrobnye blok-shemy, prezhde chem nachat' pisat' programmu. Tam, gde blok-shemy trebuyutsya pravilami organizacii, oni pochti vsegda sozdayutsya zadnim chislom. Mnogie gordyatsya ispol'zovaniem special'nyh programm dlya generacii etogo "nezamenimogo instrumenta razrabotki" na osnove uzhe zakonchennoj programmy. Dumayu, chto etot vseobshchij opyt ne yavlyaetsya postydnym i predosuditel'nym othodom ot horoshej praktiki programmirovaniya, priznavat'sya v kotorom mozhno lish' s nervnym smeshkom. Naprotiv, eto rezul'tat zdravogo rassuzhdeniya, dayushchij nam urok otnositel'no poleznosti blok-shem. Apostol Petr skazal o novoobrashchennyh yazychnikah i zakone Moiseya: "CHto zhe vy [zhelaete] vozlozhit' na vyi uchenikov igo, kotorogo ne mogli ponesti ni otcy nashi, ni my?" (Deyaniya apostolov 15:10). To zhe skazal by ya o programmistah-novichkah i ustarevshej praktike blok-shem. Samodokumentiruyushchiesya programmy Odin iz osnovnyh principov obrabotki dannyh uchit, chto bezrassudno starat'sya podderzhivat' sinhronnost' nezavisimyh fajlov. Znachitel'no luchshe sobrat' ih v odin fajl, v kotorom kazhdaya zapis' soderzhit vse dannye ih oboih fajlov, otnosyashchiesya k dannomu klyuchu. Tem ne menee nasha praktika dokumentirovaniya programm protivorechit sobstvennym teoriyam. Obychno my pytaemsya podderzhivat' programmu v vide, prigodnom dlya vvoda v mashinu, a nezavisimyj komplekt dokumentacii, sostoyashchej iz teksta i blok-shem, - v vide, prigodnom dlya chteniya chelovekom. Rezul'taty etogo podtverzhdayut mysl' o nerazumnosti podderzhki nezavisimyh fajlov. Programmnaya dokumentaciya poluchaetsya udivitel'no plohoj, a ee soprovozhdenie - i togo huzhe. Vnosimye v programmu izmeneniya ne poluchayut bystrogo, tochnogo i obyazatel'nogo otrazheniya v dokumente. YA polagayu, chto pravil'nym resheniem dolzhno byt' sliyanie fajlov: vklyuchenie dokumentacii v ishodnyj tekst programmy. |to odnovremenno i sil'nyj pobuditel'nyj motiv k dolzhnomu soprovozhdeniyu, i garantiya togo, chto dokumentaciya vsegda budet pod rukoj u pol'zovatelya. Takie programmy nazyvayut samodokumentiruyushchimisya. Ochevidno, pri etom neudobno, hotya i vozmozhno, vklyuchat' blok-shemy, esli v etom est' neobhodimost'. No, prinyav vo vnimanie anahronizm blok-shem i ispol'zovanie preimushchestvenno yazykov vysokogo urovnya, stanovitsya vozmozhnym ob®edinit' programmu s dokumentaciej. Ispol'zovanie ishodnogo koda programmy v kachestve nositelya dokumentacii vlechet nekotorye ogranicheniya. S drugoj storony, neposredstvennyj dostup chitatelya dokumentacii k kazhdoj stroke programmy otkryvaet vozmozhnost' dlya novyh tehnologij. Prishlo vremya razrabotat' radikal'no novye podhody i metody sostavleniya programmnoj dokumentacii. V kachestve vazhnejshej celi my dolzhny popytat'sya predel'no umen'shit' gruz dokumentacii - gruz, s kotorym ni my, ni nashi predshestvenniki tolkom ne spravilis'. Podhod. Pervoe predlozhenie sostoit v tom, chtoby razdely programmy, obyazannye prisutstvovat' v nej soglasno trebovaniyam yazyka programmirovaniya, soderzhali kak mozhno bol'she dokumentacii. Sootvetstvenno, metki, operatory ob®yavleniya i simvolicheskie imena vklyuchayut v zadachu peredat' chitatelyu kak mozhno bol'she smysla. Ris. 15.2 Sravnenie blok-shemy i sootvetstvuyushchej programmy na PL/I (fragment) Vtoroe predlozhenie - v maksimal'noj mere ispol'zovat' prostranstvo i format, chtoby uluchshit' chitaemost' i pokazat' otnosheniya podchinennosti i vlozhennosti. Tret'e predlozhenie - vklyuchit' v programmu neobhodimuyu tekstovuyu dokumentaciyu v vide paragrafov kommentariev. V bol'shinstve programm dostatochno imet' postrochnye kommentarii. V programmah, otvechayushchih zhestkim standartam organizacij na "horoshee dokumentirovanie", ih chasto slishkom mnogo. Odnako dazhe v etih programmah obychno nedostatochno paragrafov kommentariev, kotorye dejstvitel'no sposobstvuyut ponyatnosti i obozrimosti celogo. Poskol'ku dokumentaciya vstraivaetsya v ispol'zuemye programmoj strukturu, imena i formaty, znachitel'nuyu chast' etoj raboty neobhodimo prodelat', kogda programmu tol'ko nachinayut pisat'. No imenno togda i nuzhno pisat' dokumentaciyu. Poskol'ku podhod na osnove samodokumentirovaniya sokrashchaet dopolnitel'nuyu rabotu, men'she prepyatstvij k ego osushchestvleniyu. Nekotorye priemy. Na risunke 15.3 pokazana samodokumentiruyushchayasya programma na yazyke PL/I.3 CHisla v kruzhochkah ne yavlyayutsya ee chast'yu, a sluzhat metadokumentaciej dlya ssylok pri obsuzhdenii. 1. Ispol'zujte dlya kazhdogo zapuska svoe imya zadaniya i vedite zhurnal, v kotorom uchityvajte predmet proverki, vremya i poluchennye rezul'taty. Esli imya sostoit iz mnemoniki (zdes' QLT) i chislovogo suffiksa (zdes' 4), to suffiks mozhno ispol'zovat' v kachestve nomera zapuska, svyazyvayushchego zapis' v zhurnale i listing. Pri etom dlya raznyh progonov trebuyutsya svoi karty zadaniya, no ih mozhno delat' kolodami s dublirovaniem postoyannyh dannyh. 2. Ispol'zujte mnemonicheskie nazvaniya programmy, vklyuchayushchie identifikator versii - v predpolozhenii, chto budet neskol'ko versij. Zdes' indeks - dve mladshie cifry goda. 3. Vklyuchite tekstovoe opisanie v kachestve kommentariev k PROCEDURE. 4. Dlya dokumentirovaniya algoritmov ssylajtes', gde mozhno, na literaturu. |to ekonomit mesto, adresuet k bolee polnomu osveshcheniyu, chem mozhno dat' v programme, i daet vozmozhnost' znayushchemu chitatelyu propustit' ssylku, ostavlyaya uverennost', chto on vas pojmet. 5. Pokazhite svyaz' s algoritmom, opisannym v knige: a) izmeneniya; b) osobennosti ispol'zovaniya; v) predstavlenie dannyh. 6. Ob®yavite vse peremennye. Ispol'zujte mnemoniku. Ispol'zujte kommentarii dlya prevrashcheniya operatora DECLARE v polnocennuyu legendu. Obratite vnimanie, chto on uzhe soderzhit imena i opisaniya struktur, nuzhno lish' dopolnit' ego opisaniyami naznacheniya. Sdelav eto zdes', vy izbezhite otdel'nogo povtoreniya imen i strukturnyh opisanij. 7. Postav'te metku v nachale inicializacii. 8. Postav'te metki pered gruppami operatorov, sootvetstvuyushchie operatoram algoritma, opisannogo v knige. 9. Ispol'zujte otstupy dlya pokaza struktury i gruppirovaniya. 10. Vruchnuyu postav'te strelki, pokazyvayushchie logicheskij poryadok operatorov. Oni ochen' polezny pri otladke i vnesenii izmenenij. Ih mozhno pomestit' na pravom pole mesta dlya kommentariev i sdelat' chast'yu vvodimogo v mashinu teksta. 11. Vstav'te strochnye kommentarii dlya poyasneniya vsego, chto neochevidno. Pri ispol'zovanii izlozhennyh vyshe priemov oni okazhutsya koroche i malochislennej, chem obychno. 12. Pomeshchajte neskol'ko operatorov na odnoj stroke ili odin operator na neskol'kih strokah v sootvetstvii s logicheskoj gruppirovkoj, a takzhe chtoby pokazat' svyaz' s opisaniem algoritma. Vozrazheniya. Kakovy nedostatki takogo podhoda k dokumentirovaniyu? Oni sushchestvuyut, i v prezhnie vremena byli sushchestvennymi, no sejchas stanovyatsya mnimymi. Ris. 15.3 Samodokumentiruyushchayasya programma Samym ser'eznym vozrazheniem yavlyaetsya uvelichenie razmera ishodnogo teksta, kotoryj nuzhno hranit'. Poskol'ku praktika vse bolee tyagoteet k hraneniyu ishodnogo koda v aktivnyh ustrojstvah, eto vyzyvaet rastushchee bespokojstvo. Lichno ya pishu bolee kratkie kommentarii v programmah na APL, kotorye hranyatsya na diske, chem v programmah na PL/I, kotorye hranyatsya na perfokartah. Odnako odnovremenno my dvizhemsya k hraneniyu v aktivnyh ustrojstvah tekstovyh dokumentov, dostup k kotorym i izmenenie osushchestvlyaetsya s pomoshch'yu komp'yuterizirovannyh tekstovyh redaktorov. Kak ukazyvalos' vyshe, sliyanie teksta i programmy sokrashchaet obshchee kolichestvo hranimyh simvolov. Analogichnoe vozrazhenie vyzyvaet argument, chto samodokumentiruyushchiesya programmy trebuyut bol'she vvoda s klaviatury. V pechatnom dokumente trebuetsya, po men'shej mere, odno nazhatie na klavishu dlya kazhdogo simvola na kazhdyj chernovoj ekzemplyar. V samodokumentiruyushchejsya programme summarnoe kolichestvo simvolov men'she, i na odin simvol prihoditsya men'she nazhatij na klavishi, tak kak chernoviki ne perepechatyvayutsya. A chto zhe blok-shemy i strukturnye grafy? Esli ispol'zuetsya tol'ko strukturnyj graf samogo vysokogo urovnya, on vpolne mozhet soderzhat'sya v otdel'nom dokumente, poskol'ku redko podvergaetsya izmeneniyam. No konechno, ego mozhno vklyuchit' v ishodnyj tekst programmy v kachestve kommentariya, chto budet blagorazumno. V kakoj mere opisannye vyshe priemy primenimy dlya programm na yazyke assemblera? YA dumayu, chto bazovyj podhod dokumentirovaniya primenim vsyudu. Svobodnym prostranstvom i formatami mozhno pol'zovat'sya s men'shej stepen'yu svobody, i poetomu oni ispol'zuyutsya ne tak gibko. Imena i ob®yavleniya struktur, nesomnenno, mozhno ispol'zovat'. Ochen' mogut pomoch' makrosy. Intensivnoe ispol'zovanie paragrafov kommentariem yavlyaetsya horoshej praktikoj v lyubom yazyke. No podhod na osnove samodokumentirovaniya stimulirovan primeneniem yazykov vysokogo urovnya i obretaet naibol'shuyu moshch' i naivysshee opravdanie v yazykah vysokogo urovnya, ispol'zuemyh v rezhime on-lajn, bud' to v paketnom rezhime ili interaktivno. Kak ya dokazyval, takie yazyki i sistemy ochen' sil'no oblegchayut zhizn' programmistov. Poskol'ku mashiny sdelany dlya lyudej, a ne lyudi dlya mashin, ih ispol'zovanie opravdano kak s ekonomicheskoj tochki zreniya, tak i chisto po- chelovecheski. Glava 16. Serebryanoj puli net - sushchnost' i akcidenciya v programmnoj inzhennerii Net ni odnogo otkrytiya ni v tehnologii, ni v metodah upravleniya, odno tol'ko ispol'zovanie kotorogo obeshchalo by v techenie blizhajshego desyatiletiya na poryadok povysit' proizvoditel'nost', nadezhnost', prostotu razrabotki programmnogo obespecheniya. Rezyume1 Sozdanie programmnogo obespecheniya vsegda vklyuchaet v sebya sushchestvennye zadachi - modelirovanie slozhnyh konceptual'nyh struktur, sostavlyayushchih abstraktnyj programmnyj ob®ekt, i vtorostepennye zadachi - sozdanie predstavlenij etih abstraktnyh ob®ektov s pomoshch'yu yazykov programmirovaniya i otobrazhenie ih v mashinnye yazyki s uchetom ogranichenij po pamyati i skorosti. V proshlom rost produktivnosti programmirovaniya po bol'shej chasti dostigalsya blagodarya ustraneniyu iskusstvennyh pregrad, delavshih vtorostepennye zadachi chrezmerno trudnymi, naprimer, zhestkih apparatnyh ogranichenij, neudobnyh yazykov programmirovaniya, nehvatki mashinnogo vremeni. Kakaya chast' raboty razrabotchikov programmnogo obespecheniya vse eshche svyazana so vtorostepennymi, a ne s sushchestvennymi obstoyatel'stvami? Esli ona zanimaet menee 9/10 vseh zatrat, to, dazhe svedya vse vtorostepennye zatraty k nulyu, my ne poluchim rosta proizvoditel'nosti na poryadok velichin. Poetomu, pohozhe, nastalo vremya obratit'sya k sushchestvennym zadacham programmirovaniya, svyazannym s modelirovaniem konceptual'nyh struktur bol'shoj slozhnosti. YA predlagayu: - Ispol'zovat' massovyj rynok, chtoby izbezhat' sozdaniya togo, chto mozhno kupit'. - Ispol'zovat' bystroe maketirovanie kak chast' zaplanirovannyh iteracij dlya ustanovleniya tehnicheskih trebovanij k programmnomu obespecheniyu. - Organichno narashchivat' programmy, dobavlyaya k sistemam vse bol'shuyu funkcional'nost' po mere ih zapuska, ispol'zovaniya i testirovaniya. - Vyyavlyat' i rastit' vydayushchihsya razrabotchikov koncepcij novogo pokoleniya. Vvedenie Iz vseh monstrov, kotorymi napolneny koshmary nashego fol'klora, samymi strashnymi yavlyayutsya oborotni, poskol'ku nas pugaet neozhidannoe prevrashchenie togo, chto nam horosho znakomo, v nechto uzhasnoe. My ishchem serebryanye puli, kotorye mogli by volshebnym obrazom ulozhit' oborotnej napoval. Horosho znakomyj programmnyj proekt napominaet takih oborotnej (po krajnej mere, v predstavlenii menedzherov, ne yavlyayushchihsya tehnicheskimi specialistami) tem, chto, buduchi prostym i nevinnym na vid, on mozhet stat' chudishchem provalennyh grafikov raboty, razduvshihsya byudzhetov i nerabotayushchih produktov. I my slyshim otchayannye kriki s pros'bami dat' serebryanuyu pulyu - nechto, sposobnoe snizit' stoimost' programmnyh produktov tak zhe rezko, kak snizilas' stoimost' komp'yuterov. No, vglyadyvayas' v predstoyashchee desyatiletie, my ne vidim nikakoj serebryanoj puli. Net ni odnogo otkrytiya ni v tehnologii, ni v metodah upravleniya, odno tol'ko ispol'zovaniya kotoryh obeshchalo by hot' na poryadok velichin povysit' proizvoditel'nost', nadezhnost', prostotu. V etoj glave my popytaemsya uvidet', pochemu eto tak, issleduya prirodu zadach programmirovaniya i svojstva predlagaemyh pul'. Odnako skepticizm - eto ne pessimizm. Hotya my ne vidim oshelomlyayushchih proryvov i dejstvitel'no schitaem ih nesvojstvennymi prirode programmirovaniya, proishodit mnogo vselyayushchih nadezhdy novovvedenij. Disciplinirovannye i posledovatel'nye usiliya, napravlennye na ih razvitie, rasprostranenie i ispol'zovanie, dejstvitel'no mogut dat' rost na poryadok velichin. Net carskogo puti, no vse zhe put' est'. Pervym shagom k lecheniyu boleznej stala zamena predstavlenij o demonah i "sokah" v organizme teoriej bakterij. Sam etot shag, obeshchavshij nadezhdu, oproverg vse mechty o chudesnom iscelenii. On podskazal issledovatelyam, chto progress budet osushchestvlyat'sya shazhkami, s bol'shim trudom, i chto postoyannoe i neoslabnoe vnimanie nuzhno udelyat' sanitarii. To zhe proishodit segodnya s programmnoj inzheneriej. Neizbezhny li trudnosti? Trudnosti, vytekayushchie iz sushchnosti Serebryanyh pul' ne tol'ko ne vidno v nastoyashchee vremya, no v silu samoj prirody programmnogo obespecheniya maloveroyatno, chto oni voobshche budut najdeny - ne budet izobretenij, sposobnyh povliyat' na produktivnost' sozdaniya, nadezhnost' i prostotu programmnogo obespecheniya tak, kak elektronika, tranzistory i integral'nye shemy - na apparatnoe obespechenie komp'yuterov. Ne sleduet ozhidat', chto kogda-libo v budushchem kazhdye dva goda budet proishodit' dvukratnyj rost. Vo-pervyh, sleduet schitat' neobychnym ne to, chto tak medlenno proishodit progress v programmirovanii, a to, chto on tak bystro idet v apparatnom obespechenii komp'yuterov. Ni odna drugaya tehnologiya za vsyu istoriyu civilizacii ne imela za 30 let svoego razvitiya rosta sootnosheniya proizvoditel'nost'/cena na shest' poryadkov. Ni odna drugaya tehnologiya ne pozvolyaet vybrat', kakoj vyigrysh predpochest': uluchshit' tehnicheskie harakteristiki ili snizit' zatraty. Oba eti vyigrysha stali vozmozhny blagodarya perehodu proizvodstva komp'yuterov iz sborochnogo proizvodstva v obrabatyvayushchee. Vo-vtoryh, chtoby posmotret', kakoj skorosti razvitiya mozhno ozhidat' ot programmnyh tehnologij, polezno izuchit' imeyushchiesya v nih trudnosti. Sleduya Aristotelyu, ya delyu ih na sushchnosti - trudnosti, vnutrenne prisushchie prirode programmnogo obespecheniya, i akcidencii - trudnosti, kotorye segodnya soputstvuyut proizvodstvu programmnogo obespecheniya, no ne yavlyayutsya vnutrenne emu prisushchimi. Akcidencii ya rassmatrivayu v sleduyushchem paragrafe. Snachala rassmotrim sushchnost'. Sushchnost'yu programmnogo ob®ekta yavlyaetsya konstrukciya, sostoyashchaya iz sceplennyh vmeste koncepcij: naborov dannyh, vzaimosvyazej mezhdu elementami dannyh, algoritmov i vyzovov funkcij. |ta sushchnost' yavlyaetsya abstraktnoj v tom otnoshenii, chto konceptual'naya konstrukciya ostaetsya odnoj i toj zhe pri razlichnyh predstavleniyah. Tem ne menee ona obladaet vysokoj tochnost'yu i bol'shim chislom detalej. YA schitayu, chto slozhnost' sozdaniya programmnogo obespecheniya zaklyuchaetsya v zadanii tehnicheskih trebovanij, proektirovanii i proverke etoj konceptual'noj konstrukcii, a ne v zatratah, svyazannyh s ee predstavleniem i proverkoj tochnosti predstavleniya. Konechno, my delaem sintaksicheskie oshibki, no v bol'shinstve sistem oni nesushchestvenny v sravnenii s konceptual'nymi oshibkami. Verno to, chto sozdanie programmnyh sistem vsegda budet trudnym. Serebryanoj puli net po samoj prirode veshchej. Rassmotrim neot®emlemye svojstva etoj nesokratimoj sushchnosti sovremennyh programmnyh sistem: slozhnost', soglasovannost', izmenyaemost' i nezrimost'. Slozhnost'. Slozhnost' programmnyh ob®ektov bolee zavisit ot ih razmerov, chem, vozmozhno, dlya lyubyh drugih sozdavaemyh chelovekom konstrukcij, poskol'ku nikakie dve ih chasti ne shozhi mezhdu soboj (po krajnej mere, vyshe urovnya operatorov). Esli oni shozhi, to my ob®edinyaem ih v odnu podprogrammu, otkrytuyu ili zakrytuyu. V etom otnoshenii programmnye sistemy imeyut glubokoe otlichie ot komp'yuterov, domov i avtomobilej, gde povtoryayushchiesya elementy imeyutsya v izobilii. Sami cifrovye komp'yutery slozhnee, chem bol'shinstvo izgotavlivaemyh lyud'mi veshchej. CHislo ih sostoyanij ochen' veliko, poetomu ih trudno ponimat', opisyvat' i testirovat'. U programmnyh sistem chislo vozmozhnyh sostoyanij na poryadki velichin prevyshaet chislo sostoyanij komp'yuterov. Analogichno, masshtabirovanie programmnogo ob®ekta - eto ne prosto uvelichenie v razmere teh zhe samyh elementov, eto obyazatel'no uvelichenie chisla razlichnyh elementov. V bol'shinstve sluchaev eti elementy vzaimodejstvuyut mezhdu soboj nekim nelinejnym obrazom, i slozhnost' celogo rastet znachitel'no bystree, chem linejno. Slozhnost' programm yavlyaetsya sushchestvennym, a ne vtorostepennym svojstvom. Poetomu opisaniya programmnyh ob®ektov, abstragiruyushchiesya ot ih slozhnosti, chasto abstragiruyutsya ot ih sushchnosti. Matematika i fizicheskie nauki za tri stoletiya dostigli bol'shih uspehov, sozdavaya uproshchennye modeli slozhnyh fizicheskih yavlenij, poluchaya iz etih modelej svojstva i proveryaya ih opytnym putem. |to udavalos' blagodarya tomu, chto slozhnosti, ignorirovavshiesya v modelyah, ne byli sushchestvennymi svojstvami yavlenij. I eto ne dejstvuet, kogda slozhnosti yavlyayutsya sushchnost'yu. Mnogie klassicheskie trudnosti razrabotki programmnogo obespecheniya proistekayut ih etoj slozhnosti sushchnosti i ee nelinejnogo rosta pri uvelichenii razmera. Slozhnost' sluzhit prichinoj trudnosti processa obshcheniya mezhdu uchastnikami brigady razrabotchikov, chto vedet k oshibkam v produkte, prevysheniyu stoimosti razrabotki, zatyagivaniyu vypolneniya grafikov rabot. Slozhnost' sluzhit prichinoj trudnosti perechisleniya, a tem bolee ponimaniya, vseh vozmozhnyh sostoyanij programmy, a otsyuda voznikaet ee nenadezhnost'. Slozhnost' funkcij sluzhit prichinoj trudnostej pri ih vyzove, iz-za chego programmami trudno pol'zovat'sya. Slozhnost' struktury sluzhit prichinoj trudnostej pri razvitii programm i dobavlenii novyh funkcij tak, chtoby ne voznikali pobochnye effekty. Slozhnost' struktury sluzhit istochnikom nevizualizuemyh sostoyanij, v kotoryh narushaetsya sistema zashchity. Slozhnost' sluzhit prichinoj ne tol'ko tehnicheskih, no i administrativnyh problem. Iz-za slozhnosti trudno osushchestvlyat' nadzor, a v rezul'tate stradaet konceptual'naya celostnost'. Trudno najti i derzhat' pod kontrolem vse svobodnye koncy. Obuchenie i ponimanie stanovitsya kolossal'noj nagruzkoj, iz-za chego tekuchest' rabochej sily prevrashchaetsya v katastrofu. Soglasovannost'. Lyudi, svyazannye s programmirovaniem, ne odinoki v problemah slozhnosti. Fizika imeet delo s ob®ektami chrezvychajnoj slozhnosti dazhe na urovne elementarnyh chastic. Odnako fizik rabotaet v tverdoj uverennosti, chto mozhno najti obshchie principy, bud' to kvarki ili obshchaya teoriya polya. |jnshtejn neodnokratno utverzhdal, chto priroda dolzhna imet' prostye ob®yasneniya, poskol'ku Bogu ne svojstvenny kapriznost' i proizvol. U razrabotchika programmnogo obespecheniya net takoj uteshitel'noj very. Slozhnost', s kotoroj on dolzhen sovladat', po bol'shej chasti yavlyaetsya proizvol'noj, neobosnovanno vyzvannoj mnogochislennymi chelovecheskimi ustanovleniyami i sistemami, kotorym dolzhny udovletvorit' ego interfejsy. Sistemy razlichayutsya interfejsami i menyayutsya vo vremeni ne v silu neobhodimosti, a lish' potomu, chto byli sozdany ne Bogom, a raznymi lyud'mi. Vo mnogih sluchayah programmnoe obespechenie dolzhno soglasovyvat'sya, poskol'ku tol'ko chto poyavilos' na scene. V drugih sluchayah ono dolzhno soglasovyvat'sya, poskol'ku est' oshchushchenie, chto ego legche vsego soglasovat'. No vo vseh sluchayah znachitel'naya chast' slozhnosti proishodit ot soglasovaniya s drugimi interfejsami, i eto nevozmozhno uprostit' tol'ko v rezul'tate pereproektirovaniya programmnogo obespecheniya. Izmenyaemost'. Programmnye ob®ekty postoyanno podverzheny izmeneniyam. Konechno, eto otnositsya i k zdaniyam, avtomobilyam, komp'yuteram. No proizvedennye veshchi redko podvergayutsya izmeneniyam posle izgotovleniya. Ih zamenyayut novye modeli, ili sushchestvennye izmeneniya vklyuchayut v bolee pozdnie serijnye ekzemplyary togo zhe bazovogo proekta. Otzyvy u potrebitelej avtomobilej na praktike vstrechayutsya ves'ma redko, a izmeneniya rabotayushchih komp'yuterov eshche rezhe. To i drugoe sluchaetsya znachitel'no rezhe, chem modifikaciya rabotayushchego programmnogo obespecheniya. Otchasti eto proishodit potomu, chto programmnoe obespechenie v sisteme voploshchaet ee naznachenie, a naznachenie bolee vsego oshchushchaet vliyanie izmenenij. Otchasti eto proishodit potomu, chto programmnoe obespechenie legche izmenit': eto chistaya mysl', beskonechno podatlivaya. Zdaniya tozhe perestraivayutsya, no priznavaemaya vsemi vysokaya stoimost' izmenenij umeryaet kaprizy novatorov. Vse udachnye programmnye produkty podvergayutsya izmeneniyam. Pri etom dejstvuyut dva processa. Vo-pervyh, kak tol'ko obnaruzhivaetsya pol'za programmnogo produkta, nachinayutsya popytki primeneniya ego na grani ili za predelami pervonachal'noj oblasti. Trebovanie rasshireniya funkcij ishodit, v osnovnom, ot pol'zovatelej, kotorye udovletvoreny osnovnym naznacheniem i izobretayut dlya nego novye primeneniya. Vo-vtoryh, udachnyj programmnyj produkt zhivet dol'she obychnogo sroka sushchestvovaniya mashiny, dlya kotoroj on pervonachal'no byl sozdan. Prihodyat esli ne novye komp'yutery, to novye diski, novye monitory, novye printery, i programma dolzhna byt' soglasovana s vozmozhnostyami novyh mashin. Koroche, programmnyj produkt vstroen v kul'turnuyu matricu prilozhenij, pol'zovatelej, zakonov i mashin. Vse oni nepreryvno menyayutsya, i ih izmeneniya neizbezhno trebuyut izmeneniya programmnogo produkta. Nezrimost'. Programmnyj produkt nevidim i nevizualizuem. Geometricheskie abstrakcii yavlyayutsya moshchnym instrumentom. Plan zdaniya pomogaet arhitektoru i zakazchiku ocenit' prostranstvo, vozmozhnosti peremeshcheniya, vidy. Stanovyatsya ochevidnymi protivorechiya, mozhno zametit' upushcheniya. Masshtabnye chertezhi mehanicheskih detalej i ob®emnye modeli molekul, buduchi abstrakciyami, sluzhat toj zhe celi. Geometricheskaya real'nost' shvatyvaetsya v geometricheskoj abstrakcii. Real'nost' programmnogo obespecheniya ne vstraivaetsya estestvennym obrazom v prostranstvo. Poetomu u nego net gotovogo geometricheskogo predstavleniya podobno tomu, kak mestnost' predstavlyaetsya kartoj, kremnievye mikroshemy - diagrammami, komp'yutery - shemami soedinenij. Kak tol'ko my pytaemsya graficheski predstavit' strukturu programmy, my obnaruzhivaem, chto trebuetsya ne odin, a neskol'ko neorientirovannyh grafov, nalozhennyh odin na drugoj. Neskol'ko grafov mogut predstavlyat' upravlyayushchie potoki, potoki dannyh, shemy zavisimostej, vremennyh posledovatel'nostej, sootnoshenij prostranstva imen. Obychno oni dazhe ne yavlyayutsya ploskimi, ne to chto ierarhicheskimi. Na praktike odnim iz sposobov ustanovleniya konceptual'nogo kontrolya nad takoj strukturoj yavlyaetsya obrezanie svyazej do teh por, poka odin ili neskol'ko grafov ne stanut ierarhicheskimi.2 Nesmotrya na progress, dostignutyj v ogranichenii i uproshchenii struktur programmnogo obespecheniya, oni ostayutsya nevizualizuemymi po svoej prirode, tem samym lishaya nas odnogo iz naibolee moshchnyh instrumentov operirovaniya koncepciyami. |tot nedostatok ne tol'ko zatrudnyaet individual'nyj process proektirovaniya, no i ser'ezno zatrudnyaet obshchenie mezhdu razrabotchikami. Prezhnie proryvy razreshili vtorostepennye trudnosti Esli rassmotret' tri naibolee plodotvornyh shaga v proizoshedshem razvitii programmnyh tehnologij, to obnaruzhitsya, chto vse oni byli sdelany v napravlenii resheniya razlichnyh krupnyh problem razrabotki programm, no eti problemy zatragivali vtorostepennye, a ne otnosyashchiesya k sushchnosti trudnosti. Mozhno takzhe videt' estestvennye predely ekstrapolirovaniya kazhdogo ih etih napravlenij. YAzyki vysokogo urovnya. Konechno, naibol'shee znachenie dlya rosta proizvoditel'nosti, nadezhnosti i prostoty imelo vse bolee shirokoe ispol'zovanie yazykov vysokogo urovnya. Bol'shinstvo issledovatelej schitaet, chto etim byl dostignut, po krajnej mere, pyatikratnyj rost proizvoditel'nosti pri odnovremennom vyigryshe v nadezhnosti, prostote i legkosti ponimaniya. CHto delaet yazyk vysokogo urovnya? On osvobozhdaet programmu ot znachitel'noj doli neobyazatel'noj slozhnosti. Abstraktnaya programma sostoit iz konceptual'nyh konstrukcij: operacij, tipov dannyh, posledovatel'nostej i svyazi. Konkretnaya mashinnaya programma svyazana s bitami, registrami, usloviyami, perehodami, kanalami, diskami i prochim. V toj mere, v kakoj v yazyke vysokogo urovnya voploshcheny neobhodimye abstraktnoj programme konstrukcii i izbegayutsya konstrukcii nizshego poryadka, on likvidiruet celyj uroven' slozhnosti, sovershenno ne yavlyayushchijsya neobhodimym svojstvom programmy. Samoe bol'shee, chto mozhet sdelat' yazyk vysokogo urovnya, - eto predostavit' vse konstrukcii, kotorye po zamyslu programmista soderzhit abstraktnaya programma. Konechno, uroven' utonchennosti nashih predstavlenij o strukturah dannyh, tipah dannyh i operaciyah neuklonno rastet, no s postoyanno ubyvayushchej skorost'yu. I yazyki v svoem razvitii vse bol'she priblizhayutsya k izoshchrennosti nashego myshleniya. Bolee togo, s nekotorogo momenta dal'nejshaya razrabotka yazykov vysokogo urovnya stanovitsya obuzoj, oslozhnyayushchej, a ne uproshchayushchej intellektual'nye zadachi pol'zovatelya, redko ispol'zuyushchego ezotericheskie konstrukcii. Razdelenie vremeni. Bol'shinstvo issledovatelej schitaet, chto blagodarya rabote v rezhime razdeleniya vremeni proizoshel bol'shoj rost proizvoditel'nosti truda programmistov i kachestva sozdavaemyh programmnyh produktov, hotya i ne takoj znachitel'nyj, kak vyzvannyj ispol'zovaniem yazykov vysokogo urovnya. Razdelenie vremeni pomogaet reshit' sovsem druguyu zadachu. Blagodarya razdeleniyu vremeni obespechivaetsya bezotlagatel'nost', i potomu vozmozhnost' imet' obshchee vpechatlenie o slozhnosti. Iz-za medlennoj oborachivaemosti pri paketnoj obrabotke my neizbezhno zabyvaem melochi, esli ne samoe napravlenie nashej mysli, v tot moment, kogda my prervalis' i nachali kompilyaciyu i vypolnenie programmy. |tot obryv mysli dorogo obhoditsya po vremeni, poskol'ku prihoditsya vosstanavlivat' ee v pamyati. V hudshem sluchae, mozhno voobshche poteryat' predstavlenie o tom, chto proishodit so slozhnoj sistemoj. Medlennaya oborachivaemost', kak i slozhnosti mashinnyh yazykov, yavlyaetsya vtorostepennoj, a ne sushchestvennoj trudnost'yu processa programmirovaniya. Predel'nyj vklad, vnosimyj razdeleniem vremeni, opredelyaetsya neposredstvenno. Glavnoe - eto sokratit' vremya otklika sistemy. Po mere priblizheniya ego k nulyu, ono perehodit porog skorosti chelovecheskogo vospriyatiya, sostavlyayushchej okolo 100 millisekund. Dal'she nikakoj vygody poluchit' uzhe nel'zya. Ob®edinennye sredy programmirovaniya. Schitaetsya, chto Unix i Interlisp, pervye shiroko rasprostranennye integrirovannye sredy programmirovaniya, povysili proizvoditel'nost' v neskol'ko raz. Pochemu? Oni napravleny na preodolenie vtorostepennyh trudnostej sovmestnogo ispol'zovaniya programm putem ispol'zovaniya obshchih bibliotek, unificirovannyh formatov fajlov, kanalov i fil'trov. V rezul'tate konceptual'nye struktury, kotorye, v principe, vsegda mogut vyzyvat', obmenivat'sya dannymi i ispol'zovat' drug druga, poluchayut vozmozhnost' osushchestvlyat' eto prakticheski. |to dostizhenie, v svoyu ochered', stimulirovalo razvitie celyh instrumental'nyh naborov, poskol'ku vsyakij novyj instrument mog primenyat'sya k lyubym programmam, ispol'zuya standartnye formaty. Blagodarya etim uspeham sredy programmirovaniya stali predmetom mnogih segodnyashnih issledovanij v programmnoj inzhenerii. V sleduyushchem paragrafe my rassmotrim, chto ot nih mozhno ozhidat', i kakie im prisushche ogranicheniya. Nadezhdy na serebro Rassmotrim teper' te tehnicheskie dostizheniya, kotorye chashche vsego vydvigayutsya kandidatami na rol' serebryanoj puli. K kakim zadacham oni obrashchayutsya? Zadacham, otnosyashchimsya k sushchnosti, ili ostatkam nashih akcidentnyh slozhnostej? Predlagayut li oni revolyucionnoe razvitie ili poshagovoe prodvizhenie? Ada i drugie dostizheniya yazykov vysokogo urovnya. Odnim iz naibolee reklamiruemyh dostizhenij poslednego vremeni yavlyaetsya yazyk programmirovaniya Ada - yazyk vysokogo urovnya obshchego naznacheniya 80-h godov. Ada dejstvitel'no ne tol'ko otrazhaet evolyucionnoe razvitie koncepcij yazykov, no i voploshchaet cherty, podderzhivayushchie sovremennye idei proektirovaniya i modul'nosti. Vozmozhno, bol'shim dostizheniem yavlyaetsya ne yazyk Ada, a filosofiya Ada kak filosofiya modul'nosti, abstraktnyh tipov dannyh, ierarhicheskogo strukturirovaniya. Ada, pozhaluj peregruzhen vozmozhnostyami, buduchi estestvennym produktom processa, porodivshego trebovaniya, polozhennye v osnovu ego razrabotki. |to ne smertel'no, poskol'ku podmnozhestva rabochih slovarej mogut reshit' problemu izucheniya, a progress elektroniki dast nam deshevye milliony operacij v sekundu, reshayushchie problemu kompilyacii. Razvitie strukturirovannosti programmnyh sistem - eto ochen' horoshee primenenie dlya deneg, kotorye my tratim na priobretenie vse bol'shih vychislitel'nyh moshchnostej. Operacionnye sistemy, gromko osuzhdavshiesya v 60-h godah za dorogoviznu pamyati i vychislenij, okazalis' horoshim sposobom primeneniya bystrodejstviya i deshevoj pamyati, poluchennyh v rezul'tate bystrogo razvitiya apparatnyh sredstv. Tem ne menee Ada ne stanet toj serebryanoj pulej, kotoraya ulozhit monstra nizkoj proizvoditel'nosti proizvodstva programmnogo obespecheniya. V konce koncov eto vsego lish' eshche odin yazyk vysokogo urovnya, a samuyu bol'shuyu otdachu ot primeneniya takih yazykov my uzhe poluchili pri pervom perehode ot vtorostepennoj slozhnosti mashin k bolee abstraktnoj formulirovke poshagovyh reshenij. Posle ustraneniya teh akcidencij ostalis' menee sushchestvennye, i vygody ot ih ustraneniya budet, konechno, men'she. YA predvizhu, chto cherez desyatiletie, kogda ocenyat effektivnost' Ada, budet priznan znachitel'nyj vklad etogo yazyka, no ne blagodarya kakoj-libo otdel'noj ego vozmozhnosti i dazhe ne blagodarya im vsem vmeste vzyatym. Ne stanut prichinoj uspehov i novye sredy programmirovaniya na Ada. Naibol'shim vkladom Ada yavitsya to, chto perehod na etot yazyk posluzhit prichinoj izucheniya programmistami sovremennyh metodov proektirovaniya programmnogo obespecheniya. Ob®ektno-orientirovannoe programmirovanie. Mnogie, izuchayushchie iskusstvo programmirovaniya, svyazyvayut s ob®ektno-orientirovannym programmirovaniem bol'she nadezhd, chem s lyubymi drugimi sovremennymi tehnicheskimi uvlecheniyami.3 YA prinadlezhu k ih chislu. Mark SHerman (Mark Sherman) iz Dartmuta zamechaet, chto sleduet provodit' otlichie mezhdu dvumya raznymi ideyami, figuriruyushchimi pod etim nazvaniem: abstraktnyh tipov dannyh i ierarhicheskih tipov, nazyvaemyh takzhe klassami. Ponyatie abstraktnogo tipa dannyh sostoit v tom, chto tip ob®ekta opredelyaetsya imenem, mnozhestvom dopustimyh znachenij i mnozhestvom dopustimyh operacij, a ne organizaciej hraneniya, kotoraya dolzhna byt' skryta. Primerami yavlyayutsya pakety Ada (s zashchishchennymi tipami) i moduli v yazyke Modula. Ierarhicheskie tipy, takie klassy v Simula-67, pozvolyayut opredelyat' obshchie interfejsy, kotorye v dal'nejshem mozhno utochnyat' s pomoshch'yu podchinennyh tipov. |ti dve koncepcii ortogonal'ny: mogut byt' otkrytye ierarhii i skrytie bez ierarhij. Obe koncepcii dejstvitel'no yavlyayutsya dostizheniem v iskusstve programmirovaniya. Kazhdaya iz nih ustranyaet eshche odnu vtorostepennuyu slozhnost', pozvolyaya razrabotchiku vyrazit' sushchnost' svoego proekta bez ispol'zovaniya bol'shogo kolichestva sintaksicheskogo materiala, ne dobavlyayushchego novogo informacionnogo soderzhaniya. Ispol'zovanie kak abstraktnyh, tak i ierarhicheskih tipov ustranyaet vtorostepennye trudnosti bolee vysokogo poryadka i pozvolyaet vyrazit' proekt na bolee vysokom urovne. I vse zhe takie dostizheniya mogut ne bolee chem ustranit' vtorostepennye trudnosti pri vyrazhenii proekta. Sushchestvenna slozhnost' samogo proekta, na chto reshenie takih zadach nikak ne mozhet povliyat'. Dobit'sya vyigrysha na poryadok velichin s pomoshch'yu ob®ektno-orientirovannogo programmirovaniya mozhno lish' v tom sluchae, esli ostayushchayasya segodnya v nashem yazyke programmirovaniya neobyazatel'naya rabota po specifikacii tipov sama po sebe otvetstvenna za 9/10 usilij, zatrachivaemyh na proektirovanie programmnogo produkta. V etom ya ne somnevayus'. Iskusstvennyj intellekt. Mnogie ozhidayut, chto uspehi v oblasti iskusstvennogo intellekta pozvolyat osushchestvit' revolyucionnyj perevorot, kotoryj prineset rost proizvoditel'nosti razrabotki programmnogo obespecheniya i ego kachestva na poryadki velichin.4 YA etogo ne zhdu. CHtoby uvidet', pochemu, razberem, chto ponimaetsya pod "iskusstvennym intellektom", a zatem posmotrim, kakie vozmozhny primeneniya. Parnas vnes yasnost' v terminologicheskij haos: Segodnya v hodu dva sovershenno raznyh opredeleniya II. II-1: ispol'zovanie komp'yuterov dlya resheniya zadach, kotorye ran'she mogli byt' resheny tol'ko s pomoshch'yu chelovecheskogo intellekta. II-2: ispol'zovanie special'nyh priemov programmirovaniya, izvestnyh kak evristicheskoe, ili osnovannoe na pravilah, programmirovanie. Pri takom podhode izuchayut dejstviya ekspertov, chtoby opredelit', kakimi evristikami i prakticheskim pravilami oni pol'zuyutsya pri reshenii zadach... Programma korrektiruetsya dlya resheniya zadach tak, kak, po-vidimomu, ee reshaet chelovek. U pervogo opredeleniya skol'zkij smysl... Koe-chto ukladyvaetsya segodnya v opredelenie II-1, no kak tol'ko my vidim rabotu programmy i ponimaem zadachu, my uzhe ne dumaem o nej, kak o II... K neschast'yu, ya ne vizhu yadra metodov, kotorye unikal'ny v etoj oblasti... Po bol'shej chasti metody problemno-orientirovanny, i dlya ih perenosa trebuyutsya izvestnye abstrakciya i tvorchestvo.5 YA polnost'yu soglasen s etoj kritikoj. Priemy, ispol'zuemye dlya raspoznavaniya rechi, vykazyvayut malo shodstva s metodami raspoznavaniya izobrazhenij, pri etom v ekspertnyh sistemah ispol'zuyutsya metody, otlichnye ot teh i drugih. YA zatrudnyayus' skazat', k primeru, kakoe vliyanie raspoznavanie izobrazhenij mozhet okazat' na metody programmirovaniya. To zhe samoe spravedlivo v otnoshenii raspoznavaniya rechi. Pri razrabotke programm trudno reshit', chto imenno skazat', a ne sobstvenno skazat'. Nikakoe oblegchenie vyrazheniya ne mozhet dat' bol'she, chem neznachitel'nye vygody. Metody ekspertnyh sistem II-2 zasluzhivayut otdel'nogo paragrafa. |kspertnye sistemy. Naibolee razvitoj i shiroko primenyaemoj chast'yu iskusstvennogo intellekta yavlyayutsya ekspertnye sistemy. Mnogie uchenye v oblasti programmirovaniya napryazhenno trudyatsya nad primeneniem etoj tehnologii v sredah razrabotki programmnogo obespecheniya.5 V chem sostoit ideya, i kakovy perspektivy? |kspertnaya sistema - eto programma, soderzhashchaya obobshchennyj generator vyvodov i bazu pravil, prednaznachennuyu dlya priema vhodnyh dannyh i dopushchenij i issledovaniya logicheskih sledstvij cherez zaklyucheniya, vyvodimye iz bazy pravil, predostavlyayushchaya zaklyucheniya i rekomendacii i predlagayushchaya pol'zovatelyu ob®yasnenie poluchennyh rezul'tatov putem obratnogo proslezhivaniya svoih rassuzhdenij. Pomimo chisto determinirovannoj logiki, generator vyvodov obychno mozhet rabotat' s nechetkimi ili veroyatnostnymi dannymi. Takie sistemy predostavlyayut nekotorye yavnye preimushchestva pered zaprogrammirovannymi algoritmami resheniya teh zhe zadach: - Tehnologiya generatora vyvodov razrabatyvaetsya nezavisimo ot primeneniya i ispol'zuetsya zatem vo mnogih prilozheniyah. - Izmenyaemye chasti specificheskih dlya prilozheniya dannyh edinoobrazno kodiruyutsya v baze pravil. Obespechivaetsya instrumentarij dlya razrabotki, izmeneniya, proverki i dokumentirovaniya bazy pravil. |tim uporyadochivaetsya znachitel'naya chast' slozhnosti samogo prilozheniya. |dvard Fejgenbaum (Edward Feigenbaum) schitaet, chto moshch' takih sistem rastet ne blagodarya sovershenstvovaniyu mehanizmov vyvoda, a skoree, blagodarya popolneniyu bazy znanij, vse bolee tochno otrazhayushchej real'nyj mir. YA schitayu, chto samoe vazhnoe dostizhenie etoj tehnologii sostoit v razdelenii slozhnosti prilozheniya i samoj programmy. Kak mozhno ispol'zovat' ekspertnye sistemy pri sozdanii programmnogo obespecheniya? Razlichnymi sposobami: predlozhenie pravil interfejsov, rekomendacii po strategii otladki, zapominanie chastoty oshibok kazhdogo tipa, podskazki po optimizacii i t.p. Predstavim sebe, k primeru, nekoego sovetchika po otladke. V samoj zachatochnoj forme diagnosticheskaya ekspertnaya sistema ves'ma napominaet pamyatku pilota, po suti, delaya predpolozheniya otnositel'no vozmozhnyh prichin zatrudnenij. Po mere razvitiya bazy pravil predpolozheniya stanovyatsya bolee specifichnymi, bolee izoshchrenno uchityvaya simptomy problemy. Mozhno predstavit' takogo pomoshchnika predlagayushchim snachala samye obshchie resheniya, no, po mere voploshcheniya v baze pravil vse bol'shej chasti struktury sistemy, stanovyashchegosya vse bolee razborchivym v generiruemyh gipotezah i predlagaemyh testah. Takaya ekspertnaya sistema mozhet reshitel'no otlichat'sya ot obychnyh tem, chto ee baza pravil, veroyatno, dolzhna byt' ierarhicheski razbita na moduli takim zhe obrazom, kak sootvetstvuyushchij programmnyj produkt. Poetomu pri izmenenii modul'noj struktury produkta izmenyaetsya takzhe modul'naya struktura bazy diagnosticheskih pravil. Rabota, kotoruyu neobhodimo prodelat' dlya sozdaniya diagnosticheskih pravil, v lyubom sluchae dolzhna byt' provedena pri sozdanii nabora kontrol'nyh primerov dlya modulej i dlya sistemy. Esli eto delat' dostatochno obshchim obrazom, s edinoobraznoj strukturoj pravil i pri nalichii horoshego generatora vyvodov, to mozhno dejstvitel'no sokratit' ob®em rabot pri generacii kontrol'nyh primerov, a takzhe pozhiznennom soprovozhdenii i testirovanii modifikacij. Takie zhe usloviya my mozhem postavit' i dlya drugih sovetchikov, ispol'zuemyh dlya drugih uchastnikov zadachi sozdaniya programmy. Vozmozhno, oni budut mnogochislenny i inogda prosty. Na puti rannej realizacii poleznyh ekspertnyh sovetnikov dlya razrabotchika programmy stoit mnogo prepyatstvij. Reshayushchej chast'yu nashego voobrazhaemogo scenariya yavlyaetsya razrabotka prostyh sposobov perehoda ot zadaniya struktury programmy k avtomaticheskomu ili poluavtomaticheskomu sozdaniyu diagnosticheskih pravil. Eshche bolee slozhnoj i vazhnoj yavlyaetsya dvojnaya zadacha priobreteniya znanij: najti chlenorazdel'no vyrazhayushchihsya i sposobnyh k samoanalizu ekspertov, ponimayushchih, pochemu oni delayut to ili drugoe dejstvie, i razrabotat' effektivnye metody izvlecheniya ih znanij i prevrashcheniya v bazy pravil. CHtoby postroit' ekspertnuyu sistemu, neobhodimo imet' eksperta. Naibol'shim vkladom ekspertnyh sistem, nesomnenno, budet predostavlenie neopytnomu programmistu opyta i vseh znanij, nakoplennyh luchshimi programmistami. I eto ne malo. Razryv mezhdu luchshimi i srednimi priemami programmirovaniya ochen' velik, vozmozhno, on bol'she, chem v lyuboj drugoj inzhenernoj discipline. Poetomu sredstvo rasprostraneniya horoshih priemov bylo by ochen' vazhnym. "Avtomaticheskoe" programmirovanie. Pochti 40 let lyudi zhdut i pishut ob "avtomaticheskom programmirovanii" - generacii reshayushchej zadachu programmy, ishodya iz formulirovki specifikacii etoj zadachi. Nekotorye vyskazyvayutsya segodnya tak, budto ozhidayut ot etoj tehnologii gryadushchego perevorota.7 Parnas predpolagaet, chto termin ispol'zuetsya iz-za effektnosti, a ne semanticheskogo soderzhaniya, utverzhdaya: Koroche, avtomaticheskoe programmirovanie vsegda bylo evfemizmom dlya programmirovaniya na yazyke bolee vysokogo urovnya, chem dostupnyj programmistu v dannyj moment.8 On utverzhdaet, v sushchnosti, chto v bol'shinstve sluchaev nuzhno zadat' specifikaciyu ne zadachi, a metoda resheniya. Mozhno otyskat' isklyucheniya. Metod sozdaniya generatorov yavlyaetsya ochen' moshchnym i povsednevno s pol'zoj primenyaetsya v programmah sortirovki. Nekotorye sistemy integrirovaniya differencial'nyh uravnenij takzhe pozvolyali pryamuyu formulirovku zadachi. Sistema proizvodila ocenku parametrov, vybirala iz biblioteki metody resheniya i generirovala programmy. U etih primenenij est' svojstva, blagopriyatstvuyushchie avtomatizacii: - Problemy legko opisyvayutsya sravnitel'no nebol'shim chislom parametrov. - Izvestno mnogo metodov resheniya, chto obespechivaet nalichie biblioteki al'ternativ. - Tshchatel'nyj analiz privel k vyrabotke yavnyh pravil vybora metodov resheniya v zavisimosti ot parametrov. Edva li vozmozhno obobshchenie takih metodov na ves' mir obychnyh programmnyh sistem, v kotorom situaciya s takimi priyatnymi svojstvami yavlyayutsya isklyucheniyami. Trudno dazhe predstavit' sebe, kak takoj proryv v obobshchenii mog by proizojti razumnym obrazom. Graficheskoe programmirovanie. Izlyublennoj temoj doktorskih dissertacij v programmnoj inzhenerii yavlyaetsya graficheskoe, ili vizual'noe, programmirovanie - primenenie komp'yuternoj grafiki v razrabotke programmnogo obespecheniya.9 Inogda perspektivy takogo podhoda osnovyvayutsya na analogii s proektirovaniem SBIS, v kotorom komp'yutery igrayut takuyu bol'shuyu rol'. Inogda takoj podhod obosnovyvaetsya, ishodya iz togo, chto blok-shemy yavlyayutsya ideal'nym materialom pri proektirovanii programm. Imeyutsya moshchnye sredstva dlya sozdaniya takih blok- shem. Nichego ubeditel'nogo i udivitel'nogo iz etih popytok poka ne vyshlo, - i ya uveren, ne vyjdet. Vo-pervyh, kak ya vsyudu dokazyvayu, blok-shema yavlyaetsya ves'ma slaboj abstrakciej struktury programmy.10 Luchshe vsego eto vidno iz popytok Berksa, fon Nejmana i Gol'dstajna snabdit' svoj predpolagaemyj komp'yuter krajne neobhodimym upravlyayushchim yazykom vysokogo urovnya. V tom zhalkom vide - mnogie stranicy soedinennyh liniyami pryamougol'nikov, - v kotorom segodnya razrabatyvayutsya blok-shemy, oni dokazali, v sushchnosti, svoyu bespoleznost': programmisty risuyut ih posle, a ne do sozdaniya opisyvaemyh imi programm. Vo-vtoryh, segodnyashnie ekrany imeyut slishkom malo pikselov, chtoby pokazat' celikom i s dostatochnym razresheniem skol'ko-nibud' podrobnuyu shemu programmy. Tak nazyvaemaya "metafora rabochego stola" stanovitsya metaforoj "siden'ya samoleta". Vsyakij, komu prihodilos' listat' pachku bumag, buduchi stisnutym dvumya korpulentnymi sosedyami, pochuvstvuet raznicu: odnovremenno mozhno uvidet' ochen' nemnogo. Nastoyashchij rabochij stol pozvolyaet obozrevat' i proizvol'no vybirat' mnozhestvo bumag. Bolee togo, v poryve tvorchestva ne odin programmist ili pisatel' predpochital rabochemu stolu bolee vmestitel'nyj pol. Apparatnym tehnologiyam nuzhno sdelat' ochen' bol'shoj nag, chtoby predostavlyaemyj ekranami obzor byl dostatochnym dlya zadach proektirovaniya programm. Esli obratit'sya k osnovam, programmnoe obespechenie ochen' trudno vizualizirovat', kak ya dokazyval eto vyshe. Sostavlyaem li my shemy upravlyayushchej logiki, vlozhennyh oblastej, vidimosti peremennyh, perekrestnyh ssylok peremennyh, potokov dannyh, ierarhicheskih struktur dannyh ili chego-to eshche, oni otrazhayut lish' odno izmenenie vzaimodejstvuyushchih zaputannym obrazom chastej programmnoj sistemy. Esli nalozhit' odna na druguyu eti shemy, otrazhayushchie vzglyad s razlichnyh tochek zreniya, trudno izvlech' iz etogo kakuyu-libo obshchuyu tochku zreniya. Analogiya s integral'nymi shemami vvodit, v sushchnosti, v zabluzhdenie: konstrukciya mikroshemy predstavlyaet soboj mnogoslojnyj dvumernyj ob®ekt, geometriya kotorogo otrazhaet sushchnost'. Programmnaya sistema ne yavlyaetsya takim ob®ektom. Verifikaciya programm. Mnogo truda v sovremennom programmirovanii tratitsya na otladku i ispravlenie oshibok. Mozhet byt', my najdem serebryanuyu pulyu, ustraniv vse oshibki v samom nachale, na etape sistemnogo proektirovaniya? Mozhno li radikal'no povysit' proizvoditel'nost' i nadezhnost' produkta, esli sledovat' sovershenno inoj strategii - obespechit' korrektnost' proekta, prezhde chem tratit' ogromnye usiliya na ego realizaciyu i testirovanie? Ne dumayu, chto my obnaruzhim zdes' chudesa. Verifikaciya programm yavlyaetsya ochen' moshchnoj koncepciej, i ona ochen' vazhna dlya takih veshchej, kak sozdanie nadezhnogo yadra operacionnoj sistemy. |ta tehnologiya ne obeshchaet, odnako, ekonomii truda. Verifikaciya trebuet stol'ko raboty, chto ves'ma nemnogie znachitel'nye programmy voobshche byli verificirovany. Verifikaciya programm ne oznachaet sozdaniya programm, lishennyh oshibok. I zdes' net chudes. Matematicheskie dokazatel'stva tozhe mogut byt' oshibochnymi. Poetomu hotya verifikaciya mozhet oblegchit' testirovanie, ona ne mozhet otmenit' ego. Bolee sushchestvenno, chto dazhe samaya sovershennaya verifikaciya programmy mozhet lish' opredelit', chto programma otvechaet svoim specifikaciyam. Samaya slozhnaya zadacha programmirovaniya - poluchit' polnuyu i neprotivorechivuyu specifikaciyu, i sushchnost' sozdaniya programmy na praktike vo mnogom sostoit v otladke specifikacii. Sredy programmirovaniya i instrumenty. Kakogo eshche vyigrysha mozhno ozhidat' ot stremitel'no rasshiryayushchihsya issledovanij po usovershenstvovaniyu sred programmirovaniya? Instinktivno kazhetsya, chto zadachi, kotorye sulili naibol'shuyu otdachu, byli v chisle pervyh, za kotorye vzyalis', i ih uzhe reshili: ierarhicheskie fajlovye sistemy, edinoobraznye formaty fajlov dlya polucheniya edinoobraznyh programmnyh interfejsov i obobshchennyh instrumentov. Orientirovannye na konkretnye yazyki intellektual'nye redaktory poka ne ochen' rasprostraneny, no bol'shee, na chto oni sposobny, eto ustranenie sintaksicheskih oshibok i melkih semanticheskih. Vozmozhno, naibol'shij vyigrysh sreda programmirovaniya smozhet dat' pri ispol'zovanii stroennyh sistem baz dannyh dlya otslezhivaniya miriadov detalej, kotorye kazhdyj programmist dolzhen tochno vspominat', i kotorye dolzhny hranit'sya v tekushchem sostoyanii v gruppe rabotayushchih nad odnoj sistemoj. Nesomnenno, chto eto rabota zasluzhivaet vnimaniya i prineset nekotorye plody kak dlya proizvoditel'nosti, tak i dlya nadezhnosti. No vvidu samoj ee suti otdacha dolzhna byt' neznachitel'noj. Rabochie stancii. Kakoj vyigrysh mozhet poluchit' iskusstvo programmirovaniya ot nesomnennogo i bystrogo rosta moshchnosti i ob®ema pamyati otdel'noj rabochej stancii? Skol'ko millionov operacij v sekundu mozhno plodotvorno ispol'zovat'? Sostavlenie i redaktirovanie programm vpolne obespechivayutsya segodnyashnimi skorostyami. Kompilyaciya mozhet byt' uskorena, no desyatikratnoe uvelichenie skorosti mashiny, vne somneniya, sdelaet obdumyvanie osnovnym zanyatiem programmista v techenie rabochego dnya. Pozhaluj, eto tak uzhe sejchas. Konechno, my privetstvuem uvelichenie moshchnosti rabochih stancij. No rasschityvat' na svyazannye s etim chudesa my ne mozhem. Perspektivnye podhody k konceptual'noj sushchnosti Hotya nikakoj proryv v tehnologii ne obeshchaet takih volshebnyh rezul'tatov, kakie my vidim v apparatnoj chasti komp'yuterov, v nastoyashchee vremya delaetsya mnogo poleznogo, i est' nadezhdy na neuklonnyj, hotya i nebroskij progress. Vse tehnologicheskie podhody k akcidenciyam processa programmirovaniya principial'no ogranicheny uravneniem produktivnosti: Esli, kak ya polagayu, konceptual'nye sostavlyayushchie zadachi sejchas otnimayut bol'shuyu chast' vremeni, to nikakaya rabota nad sostavnymi chastyami zadachi, yavlyayushchimisya prosto vyrazheniem koncepcij, ne dast bol'shogo vyigrysha. Poetomu my dolzhny rassmotret' te napravleniya, kotorye zatragivayut samu sushchnost' problemy programmirovaniya - formulirovku etih slozhnyh konceptual'nyh struktur. K schast'yu, nekotorye iz etih napravlenij ves'ma mnogoobeshchayushchi. Pokupat', a ne sozdavat'. Naibolee radikal'noe vozmozhnoe reshenie pri sozdanii programm - voobshche ne sozdavat' ih. S kazhdym dnem eto stanovitsya vse legche, poskol'ku vse bol'shee chislo postavshchikov predlagaet vse bolee mnogochislennye i luchshie programmnye produkty dlya nemyslimogo raznoobraziya prilozhenij. Poka my, inzhenery-programmisty, trudilis' nad sovershenstvovaniem metodologii proizvodstva, revolyuciya, proizvedennaya personal'nymi komp'yuterami, sozdala ne odin, a mnogo massovyh rynkov programmnogo obespecheniya. V kazhdom gazetnom kioske vystavleny ezhemesyachnye zhurnaly, v kotoryh, otsortirovannye po tipam mashin, reklamiruyutsya i recenziruyutsya desyatki produktov po cenam ot neskol'kih dollarov do neskol'kih soten dollarov. Bolee specializirovannye izdaniya predlagayut ochen' moshchnye produkty dlya rabochih stancij i drugih rynkov Unix. Dazhe instrumenty i sredy programmirovaniya mogut byt' kupleny v korobochnom vide. YA gde-to predlozhil bazar dlya otdel'nyh modulej. Lyuboj takoj produkt deshevle kupit', chem sozdavat' zanovo. Dazhe pri cene 100 000 dollarov kuplennyj produkt stoit primerno stol'ko, skol'ko godovoe soderzhanie programmista. I postavka nemedlennaya! Nemedlennaya, po krajnej mere, dlya real'no sushchestvuyushchih produktov, prospekt kotoryh razrabotchik mozhet poslat' schastlivomu pol'zovatelyu. Bolee togo, takie produkty obychno gorazdo luchshe dokumentirovany i neskol'ko luchshe soprovozhdayutsya, chem domoroshchennye programmy. Razvitie massovogo rynka yavlyaetsya, po moemu mneniyu, naibolee glubokoj dolgosrochnoj tendenciej programmnoj inzhenerii. Stoimost' programmnogo produkta vsegda opredelyalas' stoimost'yu razrabotki, a ne tirazhirovaniya. Razdeliv etu stoimost' dazhe na neskol'kih pol'zovatelej, my korennym obrazom snizhaem cenu na odnogo pol'zovatelya. Vzglyanuv na eto s drugoj storony, my vidim, chto ispol'zovanie n kopij programmnoj sistemy fakticheski umnozhaet na n proizvoditel'nost' ego razrabotchikov. |to rost proizvoditel'nosti otrasli i vsej strany. Glavnym voprosom, konechno, yavlyaetsya proizvoditel'nost'. Smogu li ya ispol'zovat' imeyushchijsya korobochnyj produkt dlya resheniya svoih zadach? Zdes' sluchilas' udivitel'naya veshch'. V 50-h i 60-h godah odno issledovanie za drugim pokazyvalo, chto pol'zovateli ne hotyat ispol'zovat' korobochnye pakety dlya rascheta zarplaty, upravleniya skladom, ucheta debitorov po raschetam i t.d. Trebovaniya byli slishkom special'nymi, otkloneniya ot sluchaya k sluchayu slishkom bol'shimi. V 80-h godah my obnaruzhivaem bol'shoj spros na takie pakety i shirokoe ih ispol'zovanie. CHto izmenilos'? Tol'ko ne pakety. Oni stali neskol'ko bolee obshchimi i luchshe nastraivayutsya, chem ran'she, no ne namnogo. I ne oblast' ih primeneniya. V konce koncov, segodnya potrebnosti biznesa i nauki bolee raznoobrazny i slozhny, chem 20 let nazad. Rezko izmenilos' sootnoshenie stoimosti komp'yuterov i programm. Tot, kto v 1960 godu pokupal mashinu za 2 milliona dollarov, schital, chto mozhet pozvolit' sebe potratit' eshche 250 000 dollarov na zakaznuyu programmu rascheta zarplaty, kotoraya legko i bez ushcherba vpisalas' by vo vrazhdebnuyu komp'yuteram social'nuyu sredu. Te, kto segodnya pokupayut mashinu dlya ofisa za 50 000 dollarov, ne mogut, ponyatno, pozvolit' sebe zakaznye programmy rascheta zarplaty, poetomu oni prisposablivayut svoi procedury rascheta zarplaty k imeyushchimsya paketam. Komp'yutery sejchas stol' obychny, esli ne stol' lyubimy, chto adaptaciya vosprinimaetsya kak obychnoe delo. Est' yarkie isklyucheniya iz moego utverzhdeniya o tom, chto obobshchennost' programmnyh paketov za poslednie gody malo izmenilas': elektronnye tablicy i prostye sistemy baz dannyh. |ti moshchnye instrumenty, stol' ochevidnye zadnim umom i tak pozdno poyavivshiesya, imeyut beschislennoe mnozhestvo primenenij, v tom chisle, ves'ma neobychnye. Est' massa statej i dazhe knig o tom, kak s pomoshch'yu elektronnoj tablicy reshat' neozhidannye zadachi. Bol'shoe chislo zadach, dlya kotoryh ran'she byli by napisany zakaznye programmy na Cobol ili Report Program Generator, teper' shablonno reshaetsya s pomoshch'yu etih instrumentov. Mnogie pol'zovateli izo dnya v den' primenyayut svoi komp'yutery dlya raznyh prilozhenij, nikogda ne napisav ni odnoj programmy. Na praktike mnogie iz etih pol'zovatelej i ne mogut pisat' dlya svoih mashin novye programmy, no tem ne menee priverzhency resheniyu voznikayushchih zadach s ih pomoshch'yu. YA schitayu, chto segodnya dlya mnogih organizacij samaya pravil'naya politika dlya povysheniya proizvoditel'nosti razrabotki programmnogo obespecheniya - eto ustanovit' svoim ne imeyushchim komp'yuternyh znanij rabotnikam umstvennogo truda komp'yutery i horoshie obshchie programmy dlya obrabotki tekstov, risovaniya, raboty s fajlami i elektronnymi tablicami i otpustit' ih v vol'noe plavanie. Takaya zhe politika v otnoshenii rasprostranennyh matematicheskih i statisticheskih paketov, a takzhe nekotoryh navykov programmirovaniya podojdet sotnyam uchenyh, rabotayushchih v laboratoriyah. Utochnenie trebovanij i bystroe maketirovanie. Samaya trudnaya otdel'naya zadacha v razrabotke programmnoj sistemy - eto tochno reshit', chto razrabatyvat'. Ni odna drugaya zadacha raboty nad koncepciyami ne yavlyaetsya stol' trudnoj, kak razrabotka podrobnyh tehnicheskih trebovanij, vklyuchaya vse interfejsy pol'zovatelej, mashinnye interfejsy i interfejsy k drugim programmnym sistemam. Ni odna drugaya chast' raboty ne nanosit takogo ushcherba gotovoj sisteme, esli sdelana nepravil'no. Ni odna drugaya chast' ne ispravlyaetsya pozdnee s bol'shim trudom. Poetomu naibolee vazhnoj funkciej, osushchestvlyaemoj razrabotchikami dlya svoih klientov, yavlyaetsya povtoryayushcheesya poluchenie i utochnenie trebovanij k produktu. Pravda zaklyuchaetsya v tom, chto klienty ne znayut, chego hotyat. Obychno oni ne znayut, na kakie voprosy nuzhno dat' otvet, i pochti nikogda ne zadumyvalis' nad zadachej nastol'ko detal'no, kak eto nuzhno ukazat' v specifikacii. Dazhe prostoj otvet - "sdelajte tak, chtoby novaya programmnaya sistema rabotala tak, kak nasha staraya ruchnaya sistema obrabotki informacii" - okazyvaetsya v dejstvitel'nosti slishkom uproshchennym. Klienty nikogda ne hotyat etogo v tochnosti. Bolee togo, slozhnye programmnye sistemy dejstvuyut, dvizhutsya, rabotayut. Dinamiku etogo dejstviya trudno sebe predstavit'. Poetomu pri planirovanii lyubyh dejstvij neobhodimo ostavit' rezerv dlya mnogokratnogo vzaimodejstviya mezhdu klientom i proektirovshchikom pri opisanii sistemy. YA pojdu dal'she i stanu utverzhdat', chto na praktike klienty, dazhe vmeste s inzhenerami-programmistami, ne v sostoyanii ukazat' polno, strogo i korrektno tochnye trebovaniya k sovremennomu programmnomu produktu, prezhde chem budut sozdany i oprobovany kakie-libo versii produkta, specifikacii k kotoromu oni sostavlyayut. Poetomu odnim iz naibolee mnogoobeshchayushchih sovremennyh napravlenij v tehnologii, prichem obrashchennyh k sushchnosti, a ne k akcidenciyam problem programmirovaniya, yavlyaetsya razrabotka podhodov i instrumentov dlya bystrogo sozdaniya maketov sistem kak chasti iterativnogo processa razrabotki specifikacij. Maket programmnoj sistemy modeliruet glavnye interfejsy i vypolnyaet osnovnye funkcii predpolagaemoj sistemy, pri etom ne obyazatel'no buduchi svyazan temi zhe ogranicheniyami bystrodejstviya komp'yutera, razmera ili stoimosti. Obychno makety vypolnyayut osnovnye zadachi sistemy, no ne pytayutsya obrabatyvat' isklyuchitel'nye situacii, pravil'no reagirovat' na vvod nedopustimyh dannyh, korrektno preryvat' rabotu i t.d. Naznachenie maketa - pokazat', kak voploshchaetsya vybrannaya konceptual'naya struktura, chtoby klient mog proverit' ee prigodnost' k ispol'zovaniyu i neprotivorechivost'. Segodnya mnogie procedury priobreteniya programmnogo obespecheniya osnovyvayutsya na predpolozhenii, chto mozhno zaranee zadat' tehnicheskie trebovaniya dlya zhelaemoj sistemy, rassmotret' predlozheniya razrabotchikov, poluchit' razrabotannuyu sistemu i ustanovit' ee. YA dumayu, chto takoe predpolozhenie v korne neverno, i iz-za etoj oshibki proistekayut mnogie problemy pri priobretenii programm, poskol'ku eti problemy nel'zya ustranit' bez peresmotra osnov, dlya kotorogo trebuetsya interaktivnaya razrabotka i specifikacii maketov i produktov. Poshagovaya obrabotka: narashchivat' programmu, a ne stroit' srazu. YA do sih por pomnyu ispytannyj v 1958 godu udar, kogda vpervye uslyshal, kak moj drug govoril o stroitel'stve (building) programm v protivopolozhnost' napisaniyu (writing). V mgnovenie on rasshiril vse moe predstavlenie o processe programmirovaniya. Primenenie metafory bylo sil'nym i tochnym. Segodnya my ponimaem, chto shodstvo sushchestvuet mezhdu sozdaniem programmy i drugimi stroitel'nymi processami, i svobodno ispol'zuem drugie elementy metafory, takie kak specifikacii (specifications), sborka komponentov (assembly of components), lesa (scaffolding). Metafora stroitel'stva perezhila svoe vremya. Pora snova vnosit' izmeneniya. Esli, kak ya schitayu, sozdavaemye segodnya konceptual'nye struktury slishkom slozhny, chtoby ih mozhno bylo tochno specificirovat' zaranee, i slishkom slozhny, chtoby stroit' bez oshibok, togda nuzhen radikal'no inoj podhod. Obratimsya k prirode i rassmotrim slozhnost' zhivyh sozdanij, a ne bezzhiznennyh tvorenij cheloveka. Tam my obnaruzhivaem konstrukcii, slozhnost' kotoryh vselyaet v nas uzhas. Odin tol'ko mozg nastol'ko slozhen, chto nevozmozhno sostavit' ego shemu. Ego moshch' nevozmozhno povtorit', on bogat svoeobraziem, sposoben k samosohraneniyu i samoobnovleniyu. Sekret v tom, chto mozg rastet, a ne stroitsya. Tak zhe dolzhny sozdavat'sya nashi programmnye sistemy. Neskol'ko let nazad Harlan Millz predlozhil narashchivat' programmnye sistemy putem poshagovoj razrabotki.11 |to znachit, chto snachala sistemu nado zastavit' vypolnyat'sya, dazhe esli pri etom ona ne delaet nichego poleznogo, krome vyzova nekotorogo chisla fiktivnyh podprogramm. Zatem ona ponemnogu obrastaet myasom, prichem podprogrammy, v svoyu ochered', razrabatyvayutsya snachala kak vyzovy pustyh fiktivnyh podprogramm, nahodyashchihsya na uroven' nizhe. Nastaivaya na primenenii etoj tehnologii razrabotchikami proektov na moih laboratornyh zanyatiyah po programmnoj inzhenerii, ya stal svidetelem porazitel'nyh rezul'tatov. Za poslednee desyatiletie nichto drugoe ne okazalo stol' sil'nogo vliyaniya na moyu sobstvennuyu rabotu i ee effektivnost'. |tot podhod predpolagaet nishodyashchee proektirovanie, poskol'ku eto - nishodyashchee narashchivanie programmy. On pozvolyaet legko otslezhivat' rabotu v obratnom napravlenii. On predostavlyaet vozmozhnost' rannego sozdaniya maketov. Kazhdaya novaya funkciya ili vozmozhnost' raboty s bolee slozhnymi dannymi ili usloviyami organicheski vyrastayut na togo, chto uzhe imeetsya. Vozdejstvie na moral'nyj duh oshelomitel'noe. Kogda est' hotya by prostaya rabotayushchaya sistema, vozrastaet entuziazm. |nergiya udvaivaetsya, kogda na ekrane poyavlyaetsya kartinka iz novoj graficheskoj programmnoj sistemy, dazhe esli eto vsego lish' pryamougol'nik. I na kazhdoj stadii processa razrabotki sushchestvuet rabotayushchaya sistema. YA schitayu, chto za odinakovye sroki komanda mozhet narastit' znachitel'no bolee slozhnyj ob®ekt, chem postroit'. V bol'shih proektah mozhno oshchutit' takie zhe vygody, kak i v moih malen'kih.12 Vydayushchiesya proektirovshchiki. Glavnaya problema sovershenstvovaniya iskusstva programmirovaniya zaklyuchena, kak vsegda, v lyudyah. My mozhem dobivat'sya horoshih proektov, sleduya horoshim, a ne plohim prakticheskim priemam. Horoshim priemam mozhno obuchat'. Programmisty prinadlezhat k naibolee intellektual'noj chasti obshchestva, sledovatel'no, oni v sostoyanii izuchat' horoshie priemy. Poetomu vazhnejshim napravleniem v Soedinennyh SHtatah yavlyaetsya rasprostranenie horoshih sovremennyh priemov. Novye kursy, novye izdaniya, novye organizacii, takie kak Institut inzhenerov- programmistov (Software Engineering Institute) - vse eto vyzvano k zhizni stremleniem povysit' uroven' nashih prakticheskih priemov. |to sovershenno pravil'no. Tem ne menee, ya schitayu, chto my ne smozhem podnyat'sya eshche na odnu stupen'ku vyshe, dejstvuya v etom napravlenii. Vybor pravil'nogo metoda proektirovaniya opredelyaet razlichiya mezhdu plohim i horoshim konceptual'nym proektom, no ne mezhdu horoshim i vydayushchimsya. Vydayushchiesya proekty sozdayutsya vydayushchimisya proektirovshchikami. Sozdanie programm yavlyaetsya tvorcheskim processom. Krepkaya metodologiya mozhet pridat' silu i osvobodit' tvorcheskij um, no ona ne mozhet vosplamenit' ili vdohnovit' togo, kto zanyat nudnoj rabotoj. I raznica nemalaya - eto kak Sal'eri i Mocart. Odno issledovanie za drugim pokazyvayut, chto luchshie proektirovshchiki sozdayut struktury, kotorye bystree, men'she po razmeru, proshche, ponyatnee i razrabotany men'shimi usiliyami. Razlichiya mezhdu vydayushchimsya i srednim dostigayut poryadka velichiny. Netrudno prosledit', chto ryad horoshih i poleznyh programmnyh sistem proektirovalsya komissiyami i sozdavalsya s pomoshch'yu proektov, sostoyavshih iz mnogih chastej. No programmnye sistemy, vyzvavshie voshishchenie strastnyh poklonnikov, yavlyayutsya produktom odnogo ili nebol'shogo chisla vydayushchihsya proektirovshchikov. Posmotrite na Unix, APL, Pascal, interfejs Smalltalk i dazhe Fortran - s odnoj storony, i Cobol, PL/I, Algol, MVS/370 i MS-DOS - s drugoj (ris. 16.1). Ris. 16.1 Imeyutsya li u etih produktov strastnye poklonniki? Poetomu, vysoko cenya nyneshnie programmy peredachi tehnologij i razvitiya obucheniya, ya schitayu, chto naibolee vazhnoj programmoj, kotoruyu my mozhem predprinyat', yavlyaetsya razvitie sposobov vospitaniya vydayushchihsya proektirovshchikov. Ni odna zanyataya v programmirovanii organizaciya ne mozhet ignorirovat' etu problemu. Horoshih menedzherov, kak by malo ih ni bylo, ne men'she, chem horoshih proektirovshchikov. Kak vydayushchiesya proektirovshchiki, tak i vydayushchiesya menedzhery vstrechayutsya redko. V bol'shinstve organizacij znachitel'nye usiliya tratyatsya na poiska i vyrashchivanie podayushchih nadezhdy menedzherov. YA ne slyshal, chtoby kto- libo tratil takie zhe usiliya na poiski i razvitie vydayushchihsya proektirovshchikov, ot kotoryh, v konechnom schete, zavisit tehnicheskoe prevoshodstvo produktov. Pervoe moe predlozhenie sostoit v tom, chtoby kazhdaya zanyataya v programmirovanii organizaciya opredelila dlya sebya i provozglasila, chto vydayushchiesya proektirovshchiki imeyut dlya ee uspeha takoe zhe bol'shoe znachenie, kak i vydayushchiesya menedzhery, i chto oni mogut rasschityvat' na takie zhe zabotu i voznagrazhdenie. Ne tol'ko zarplata, no i atributy polozheniya - razmery ofisa, mebel', tehnicheskoe oborudovanie, komandirovochnye fondy, obespechennost' sotrudnikami - dolzhny byt' polnost'yu ravnoznachny. Kak rastit' vydayushchihsya proektirovshchikov? Mesto ne pozvolyaet obsuzhdat' eto prostranno, no vot nekotorye ochevidnye shagi: - Sistematicheski i kak mozhno ran'she vyyavlyat' pervoklassnyh proektirovshchikov. Luchshie - ne vsegda samye opytnye. - Naznachit' nastavnika, otvetstvennogo za rost perspektivnogo proektirovshchika i tshchatel'no sledit' za ego kar'eroj. - Razrabotat' i osushchestvlyat' plan sluzhebnogo rosta dlya kazhdogo perspektivnogo proektirovshchika, vklyuchayushchij tshchatel'no produmannoe obuchenie u peredovyh proektirovshchikov, periody dopolnitel'nogo formal'nogo obucheniya, kratkosrochnye kursy, peremezhayushchiesya s samostoyatel'nym proektirovaniem i naznacheniem na rukovodyashchie tehnicheskie dolzhnosti. - Obespechit' vozmozhnosti dlya vzaimodejstviya i vzaimnogo stimulirovaniya rastushchih proektirovshchikov.

    Glava 17. Novyj vystrel "Serebryanoj puli net"

U vsyakoj puli - svoe prednaznachenie. VILXGELXM III ORANSKIJ Kto hochet uvidet' obrazec sovershenstva, Tot mechtaet o tom, chego nikogda ne bylo, net i ne budet. ALEKSANDR POP, "O KRITIKE" Ob oborotnyah i prochih mificheskih uzhasah "Serebryanoj puli net: sushchnost' i akcidenciya v programmnoj inzhenerii" (glava 16 dannoj knigi) pervonachal'no byla zakaznym dokladom dlya konferencii IFIP (Mezhdunarodnoj federacii po obrabotki informacii) 1986 goda v Dubline i byla opublikovana v ee trudah.1 ZHurnal "Computer" perepechatal ee pod oblozhkoj v goticheskom stile, illyustriruya kadrami iz fil'mov, takih kak "Vervol'f iz Londona",2 i snabdiv bokovym polem "Ubit' vervol'fa" s izlozheniem sovremennoj legendy o tom, chto spravit'sya s nim mozhno tol'ko s pomoshch'yu serebryanoj puli. Do publikacii ya ne znal ob illyustraciyah, i dlya menya bylo neozhidannost'yu, chto ser'eznaya tehnicheskaya stat'ya byla tak krasochno izdana. Odnako redaktory "Computer" znali svoe delo i dostigli zhelaemogo rezul'tata: pohozhe, chto stat'yu prochli mnogie. Poetomu ya podobral dlya toj glavy eshche odnu kartinku s oborotnem - starinnoe izobrazhenie pochti zabavnogo sozdaniya. Nadeyus', chto eta menee yarkaya kartinka okazhet takoe zhe poleznoe dejstvie. Serebryanaya pulya vse-taki est' - VOT ONA! "Serebryanoj puli net" utverzhdaet i dokazyvaet, chto v techenie desyatiletiya (s momenta publikacii stat'i v 1986 godu) ni odna razrabotka v oblasti tehniki programmnogo obespecheniya ne pozvolit povysit' proizvoditel'nost' truda v programmirovanii na poryadok. Iz etogo desyatiletiya proshlo uzhe devyat' let, i mozhno posmotret', naskol'ko sbyvaetsya predskazanie. V to vremya kak "Mificheskij cheloveko-mesyac" porodil chastoe citirovanie i malo sporov, stat'ya "Serebryanoj puli net" vyzvala stat'i s oproverzheniyami i pis'ma v redakcii zhurnalov, potok kotoryh ne prekratilsya i po sej den'.3 CHashche vsego kritikuetsya glavnoe utverzhdenie o tom, chto volshebnogo resheniya net, i moe yasno vyrazhennoe mnenie o tom, chto ego i byt' ne mozhet. Bol'shinstvo soglashaetsya s osnovnoj chast'yu moih argumentov v "SPN", no zatem zayavlyaet, chto v dejstvitel'nosti serebryanaya pulya dlya programmnogo zverya sushchestvuet, i izobrel ee avtor. Perechityvaya segodnya rannie otkliki, ne mogu ne otmetit', chto patentovannye sredstva, stol' energichno predlagavshiesya v 1986 i 1987 godah, ne vozymeli effekta, na kotoryj pretendovali. YA obychno pokupayu komp'yutery i programmy, proveryaya ih na "schastlivom obladatele", t.e. beseduya s vyzyvayushchimi doverie lyud'mi, zaplativshimi den'gi za produkt i pol'zuyushchimisya im s udovol'stviem. Analogichno, ya s gotovnost'yu poveryu v materializaciyu serebryanoj puli, kogda vyzyvayushchij doverie nezavisimyj pol'zovatel' vystupit vpered i skazhet: "YA ispol'zoval etu metodologiyu, etot instrument ili produkt, i eto pozvolilo mne v desyat' raz povysit' proizvoditel'nost' razrabotki programm". Mnogie korrespondenty sdelali vernye popravki i raz®yasneniya. Nekotorye proanalizirovali stat'yu punkt za punktom i priveli vozrazheniya, za chto ya im blagodaren. V etoj glave ya hochu soobshchit' o sdelannyh popravkah i otvetit' na oproverzheniya. Neyasnoe izlozhenie vlechet neponimanie Sudya po nekotorym otklikam, mne ne udalos' chetko izlozhit' svoi argumenty. Vtorostepennoe svojstvo (accident). V rezyume glavy 16 ya postaralsya so vsej vozmozhnoj yasnost'yu izlozhit' osnovnye argumenty "SPN". Nekotorye, odnako, byli smushcheny terminami vtorostepennoe svojstvo (accident) i nesushchestvennyj, vtorostepennyj (accidental), kotorye ya ispol'zoval v starom upotreblenii, voshodyashchem k Aristotelyu.4 Pod accidental ya ne imel v vidu "sluchajnyj" ili "otnosyashchijsya k neschastnomu sluchayu", a skoree, "nesushchestvennyj", "pobochnyj" (incidental) ili "prinadlezhashchij" (appurtinent). YA ne hochu porochit' rol' sluchajnosti pri razrabotke programm. Vsled za anglijskim dramaturgom, avtorom detektivov i teologom Doroti Sejers (Dorothy Sayers) ya rassmatrivayu vsyakuyu tvorcheskuyu deyatel'nost', kak sostoyashchuyu iz: a) formulirovaniya konceptual'nyh konstrukcij, b) voploshcheniya v real'nom materiale i v) dialoga s pol'zovatelem v real'noj zhizni.5 Ta chast' postroeniya programmy, kotoruyu ya nazval sushchnost'yu (essence), sostoit iz umstvennoj raboty sozdaniya konceputal'noj konstrukcii, a ta, kotoruyu ya nazval vtorostepennoj (accident), est' process ee voploshcheniya. Vyyasnenie istiny. Mne kazhetsya (hotya ne vse so mnoj soglasny), chto vernost' central'nogo argumenta svoditsya k vyyasneniyu otveta na vopros: kakaya dolya zatrat svyazana s tochnym i uporyadochennym predstavleniem konceptual'noj konstrukcii, a kakaya - s umstvennymi usiliyami po izgotovleniyu etih konstrukcij. Poisk i ustranenie oshibok popadayut v tot ili inoj razdel v zavisimosti ot togo, yavlyayutsya li oshibki konceptual'nymi (naprimer, propusk kakogo-libo osobogo sluchaya) ili oshibkami predstavleniya (naprimer, oshibka v ukazatele ili raspredeleniya pamyati). Moe lichnoe mnenie sostoit v tom, chto vtorostepennaya ili napravlennaya na predstavlenie chast' raboty sejchas snizilas' do poloviny ili menee togo ot obshchego ob®ema. Poskol'ku eta dolya yavlyaetsya eksperimental'noj velichinoj, ee znachenie, v principe, mozhno poluchit' putem izmerenij.5 Esli eto ne udaetsya, moyu ocenku mozhno popravit' na osnove bolee polnyh i bolee sovremennyh dannyh, no ni v publichnyh, ni v chastnyh zayavleniyah nikto ne utverzhdal, chto neosnovnaya chast' dostigaet velichiny 9/10. "SPN" s nesomnennost'yu dokazyvaet, chto esli dolya neosnovnoj chasti raboty men'she 9/10, to dazhe svedya ee k nulyu (chto bylo by chudom), nel'zya poluchit' rost produktivnosti na poryadok. Ataku neobhodimo nacelit' na sushchestvennuyu chast'. Posle poyavleniya "SPN" Bryus Blum (Bruce Blum) obratil moe vnimanie na rabotu 1959 goda Gercberga, Moznera i Zejdermana (Herzberg, Mausner, Sayderman).7 Oni nahodyat, chto faktory motivacii mogut uvelichit' proizvoditel'nost'. S drugoj storony, faktory okruzheniya i vtorostepennye faktory, skol' by oni ni byli polozhitel'ny, ne mogut etogo sdelat', no, buduchi otricatel'nymi, mogut umen'shit' proizvoditel'nost'. V "SPN" dokazyvaetsya, chto znachitel'naya chast' progressa v programmnoj inzhenerii dostignuta za schet ustraneniya vliyaniya sleduyushchih otricatel'nyh faktorov: krajne neudobnyh mashinnyh yazykov, paketnoj obrabotki s dolgoj oborachivaemost'yu, slabogo instrumentariya i strogih ogranichenij na razmer pamyati. YAvlyayutsya li v takom sluchae beznadezhnymi trudnosti, svyazannye s sushchnost'yu? Otlichnaya rabota "Serebryanaya pulya est'", napisannaya Bredom Koksom (Bred Cox) v 1990 godu, krasnorechivo dokazyvaet, chto mnogokratno ispol'zuemye i vzaimozamenyaemye komponenty dolzhny posluzhit' osnovoj dlya ataki na konceptual'nuyu sushchnost' problemy.8 YA ohotno soglashayus'. Odnako Koks nepravil'no ponimaet "SPN" v dvuh otnosheniyah. Vo-pervyh, on nahodit v nej utverzhdenie togo, chto trudnosti razrabotki programmnogo obespecheniya proistekayut iz "nekotoryh porogov tehnologij, ispol'zovavshihsya programmistami v to vremya". YA zhe dokazyval, chto trudnosti, svyazannye s sushchnost'yu, yavlyayutsya neot®emlemoj chast'yu konceptual'noj slozhnosti razrabatyvaemyh programmnyh funkcij vo vse vremena i pri lyubyh metodah. Vo- vtoryh, on i mnogie drugie prochli v "SPN" utverzhdenie togo, chto net nikakih nadezhd uspeshno spravit'sya so slozhnostyami razrabotki programm, svyazannymi s voprosami sushchnosti. |to ne to, chto ya imel v vidu. Sozdanie konceptual'noj konstrukcii dejstvitel'no imeet vnutrenne prisushchie trudnosti, takie kak slozhnost', soglasovannost', izmenyaemost' i nezrimost'. Odnako nepriyatnosti, vyzyvaemye vsemi etimi trudnostyami, mozhno umen'shit'. Slozhnost' razdeleniya na urovni. Naprimer, naibolee ser'eznoj vnutrennej trudnost'yu yavlyaetsya slozhnost', no ona ne vsegda neizbezhna. Znachitel'naya chast' (no ne vsya) konceptual'noj slozhnosti v nashih programmnyh konstrukciyah proistekaet ot proizvol'noj slozhnosti samih primenenij. Dejstvitel'no, Lars Sedal' iz MYSYGMA Sohdal and Partners, mezhdunarodnoj konsaltingovoj firmy v oblasti menedzhmenta, pishet: Moj opyt pokazyvaet, chto vse slozhnosti, s kotorymi stalkivayutsya pri razrabotke sistem, yavlyayutsya priznakami organizacionnyh nepoladok. Popytka modelirovaniya prakticheskoj deyatel'nosti programmami sootvetstvuyushchej slozhnosti vlechet sohranenie nerazberihi vmesto resheniya problem. Stiv Lukashik (Steve Lukasik) iz Northrop dokazyvaet, chto dazhe organizacionnaya slozhnost', vozmozhno, ne yavlyaetsya proizvol'noj, a mozhet ispytyvat' vozdejstvie principov uporyadocheniya: YA poluchil obrazovanie v oblati fiziki i poetomu vizhu, chto "slozhnye" veshchi mogut byt' opisany na yazyke bolee prostyh ponyatij. Vy mozhete byt' pravy, i ya ne stanu utverzhdat', chto vse slozhnye veshchi poddayutsya principam uporyadocheniya... po tem zhe pravilam dokazatel'stva nel'zya utverzhdat', chto ne poddayutsya. ...To, chto vchera bylo slozhnost'yu, zavtra budet v poryadke veshchej. Slozhnost' besporyadochnogo dvizheniya molekul privela k vozniknoveniyu kineticheskoj teorii gazov i otkrytiyu treh zakonov termodinamiki. Sejchas programmnoe obespechenie ne pozvolyaet uvidet' prisushchie emu principy uporyadocheniya, no vy kak raz i dolzhny ob®yasnit', pochemu eto proishodit. |to ne proyavlenie moej bestolkovosti ili zhelaniya posporit'. YA ubezhden, chto v odin prekrasnyj den' "slozhnost'" programmnogo obespecheniya budet ob®yasnena na yazyke kakih- nibud' ponyatij bolee vysokogo poryadka (invariantov, kak govoryat fiziki). YA ne zanimalsya bolee glubokim analizom, k kotoromu spravedlivo prizyvaet Lukashik. Kak otrasl' nauki my nuzhdaemsya v razvitii teorii informacii dlya kolichestvennoj ocenki informacionnogo soderzhaniya statisticheskih struktur, podobno tomu, kak teoriya SHennona delaet eto dlya informacionnyh potokov. |to sovsem ne moya zadacha. Lukashiku ya prosto otvechu, chto slozhnost' sistemy yavlyaetsya funkciej miriadov detalej, kazhdaya iz kotoryh dolzhna byt' tochno zadana libo s pomoshch'yu kakogo-nibud' obshchego pravila, libo podrobnym opisaniem, no ne prosto statisticheski. Predstavlyaetsya ves'ma somnitel'nym, chtoby nesoglasovannye rezul'taty raboty mnogih golov okazalis' dostatochno svyaznymi, chtoby byt' tochno opisannymi obshchimi pravilami. Znachitel'no bol'shaya chast' slozhnosti programmnyh konstrukcij obuslovlena, odnako, ne sootvetstviem vneshnemu miru, a samoj realizaciej - strukturami dannyh, algoritmami, sposobami kommunikacij. Narashchivanie programm s pomoshch'yu bol'shih blokov vysokogo urovnya, sozdannyh kogda-to ran'she ili kem-to drugim, pomogaet izbezhat' celyh urovnej slozhnosti. "SPN" provozglashaet pohod na problemu slozhnosti v polnoj nadezhde, chto mozhno dostich' progressa. Ona vystupaet za dobavlenie k programmnoj sisteme neobhodimoj slozhnosti: - ierarhicheski, raspolagaya moduli ili ob®ekty po urovnyam; - poshagovo, chto obespechivaet postoyannuyu rabotosposobnost' sistemy. Analiz Harela Devid Harel (David Harel) v stat'e 1992 goda "Kusaya serebryannuyu pulyu" predprinimaet samyj tshchatel'nyj analiz "SPN" iz vseh opublikovannyh.9 Pessimizm protiv optimizma i realizma. Harel rassmatrivaet kak "SPN", tak i stat'yu Parnasa 1984 goda "Programmnye aspekty strategicheskih oboronitel'nyh sistem"10 kak "slishkom unylye". On namerevaetsya vysvetit' bolee yarkuyu storonu problemy, predposylaya stat'e podzagolovok "K svetlomu budushchemu porgrammnyh razrabotok". Tak zhe, kak i Koks, Harel schitaet "SPN" pessimisticheskoj, govorya: "Esli vzglyanut' na te zhe fakty s drugoj tochki zreniya, voznikayut bolee optimisticheskie vyvody". Oba oni nepravil'no voprinyali tonal'nost' stat'i. Prezhde vsego, moya zhena, kollegi i redaktory schitayut, chto ya gorazdo chashche vpadayu v neopravdannyj optimizm, chem v pessimizm. V konce koncov ya po proishozhdeniyu programmist, a optimizm - eto professional'naya bolezn' dannogo remesla. V "SPN" pryamo skazano: "Vglyadyvayas' v predstoyashchee desyatiletie, my ne vidim serebryanoj puli... Odnako skepticizm ne est' pessimizm... Net carskogo puti, no put' est'". Ona predskazyvaet, chto novovvedeniya, proishodyashchie v 1986 godu, buduchi razrabotany i ispol'zovany, v sovokupnosti dejstvitel'no pozvolyat dostich' rosta proizvoditel'nosti na poryadok. Desyatiletie 1986-1996 podhodit k koncu, i eto predskazanie okazyvaetsya, skoree, slishkom optimistichnym, a ne mrachnym. Dazhe esli by vse bez isklyucheniya schitali "SPN" pessimisticheskoj, chto v etom hudogo? YAvlyaetsya li utverzhdenie |jnshtejna o tom, chto nichego ne mozhet peremeshchat'sya so skorost'yu, bol'shej skorosti sveta, "unylym" i "mrachnym"? A kak naschet rezul'tatov Gedelya o tom, chto nekotorye veshchi nevychislimy? "SPN" pytaetsya utverzhdat', chto "sama sushchnost' programmnogo obespecheniya delaet maloveroyatnym otkrytie "serebryanyh pul'" kogda-libo v budushchem". Turskij v svoem otlichnom otvetnom doklade na konferencii IFIP krasnorechivo zayavil: Iz vseh popytok nauki prodvinut'sya v lozhnom napravlenii naibolee vozvyshenny te, kotorye byli napravleny na poisk filosofskogo kamnya - veshchestva, s pomoshch'yu kotorogo predpolagalos' obrashchat' prostye metally v zoloto. Vysshaya cel' alhimii, k kotoroj s rveniem stremilis' pokoleniya issledovatelej, shchedro finansirovavshiesya svetskimi i duhovnymi pravitelyami, - eto v chistom vide stremlenie prinimat' zhelaemoe za dejstvitel'noe i obshcheprinyatoe mnenie, chto veshchi takovy, kakimi my hoteli by ih videt'. |to ochen' po-chelovecheski. Nuzhno sdelat' nad soboj bol'shoe usilie, chtoby smirit'sya s sushchestvovaniem nerazreshimyh problem. Stremlenie vopreki vsemu najti vyhod, dazhe kogda dokazano, chto ego ne sushchestvuet, ochen' i ochen' sil'no. I v bol'shinstve svoem my s bol'shim sochuvstviem otnosimsya k etim hrabrecam, kotorye pytayutsya dostich' nevozmozhnogo. |to prodolzhaetsya i po sej den'. Pishutsya sochineniya o kvadrature kruga. Stryapayutsya los'ony dlya vosstanovleniya utrachennyh volos - i neploho prodayutsya. Rozhdayutsya metody povysheniya proizvoditel'nosti programmirovaniya - i horosho rashodyatsya. My slishkom chasto sklonny doveryat' svoemu optimizmu (ili ekspluatirovat' optimisticheskie nadezhdy svoih sponsorov). My slishkom chasto ne hotim prislushivat'sya k golosu rassudka i obrashchaem mnogo vnimaniya na prodavcov panacej, poyushchih golosami siren.11 Turskij, kak i ya, preduprezhdaet, chto mechtatel'nost' tormozit dvizhenie vpered i vedet k pustoj trate sil. "Mrachnye" temy. Harel schitaet, chto mrachnost' "SPN" pridayut tri temy: - Rezkoe razdelenie mezhdu sushchnost'yu i vtorostepennym. - Izolirovannoe rassmotrenie kazhdogo kandidata v "serebryanye puli". - Prognoz lish' na blizhajshie 10 let, a ne na srok, v techenie kotorogo mozhno ozhidat' "sushchestvennyh uluchshenij". CHto kasaetsya pervogo, to v eto vsya sol' stat'i. YA po-prezhnemu schitayu, chto takoe razdelenie neobhodimo dlya ponimaniya togo, pochemu trudno sozdavat' programmnoe obespechenie. I eto vernoe ukazanie, kuda dolzhen byt' napravlen udar. CHto kasaetsya izolirovannogo rassmotreniya kandidatov v "serebryanye puli", to eto pravda. Raznye kandidaty predlagalis' poocheredno i nepomernymi pretenziyami na sobstvennoe vsesilie. Pravomerno i rassmatrivat' ih poocheredno. YA vozrazhayu ne protiv samih tehnologij, no protiv ozhidaniya ot nih chuda. Glass, Vessi i Kondzher (Glass, Vessey, Conger) v svoej stat'e 1992 goda predstavili mnogochislennye svidetel'stva togo, chto bespoleznye poiski serebryanoj puli vse eshche prodolzhayutsya.12 CHto kasaetsya vybora v kachestve perioda predskazanij 10, a ne 40 let, to chastichno eto priznanie togo, chto nashi predskazaniya na bol'shij srok nikogda ne byli udachnymi. Kto iz nas v 1975 godu predskazal mikrokomp'yuternuyu revolyuciyu 80-h? Est' i drugie prichiny ogranichit'sya desyatiletiem: vse kandidaty pretendovali na poluchenie rezul'tatov nemedlenno. YA ne pomnyu ni odnogo, kotoryj by skazal: "Esli segodnya vy sdelaete investicii v predlagaemoe mnoj sredstvo, to po proshestvii 10 let nachnete pozhinat' plody". Bolee togo, za desyatiletie sootnoshenie proizvoditel'nost'/cena dlya komp'yuterov vyroslo, navernoe, v sotni raz, i neizbezhno podsoznatel'no proizvoditsya sravnenie, kotoroe sovershenno nedopustimo. My navernyaka dostignem bol'shego progressa za predstoyashchie 40 let. Rost za 40 let na poryadok edva li pokazhetsya chudom. Myslennyj eksperiment Harela. Harel predlagaet myslennyj eksperiment, v kotorom "SPN" byla napisana v 1952 godu, a ne v 1986, no soderzhala by te zhe utverzhdeniya. On hochet ispol'zovat' eto v kachestve dokazatel'stva ot protivnogo v bor'be protiv popytok otdelit' sushchnost' ot akcidencii. |to dokazatel'stvo neverno. Vo-pervyh, "SPN" nachinaetsya s utverzhdeniya, chto dlya programmirovaniya v 1950-h harakterno znachitel'noe preobladanie trudnostej v akcidenciyah nad trudnostyami v sushchnosti. |togo preobladaniya bol'she ne sushchestvuet, chto privelo k rostu proizvoditel'nosti na poryadki velichin. Perenosit' eto dokazatel'stvo na 40 let nazad bessmyslenno: nikto ne stal by v 1952 godu utverzhdat', chto ne trudnosti akcidencij otvetstvenny za bol'shuyu chast' zatrachivaemyh usilij. Vo-vtoryh, Harel netochno predstavlyaet polozhenie del v 1950-h: |to bylo vremya, kogda vmesto togo, chtoby razrabatyvat' bol'shie slozhnye sistemy, programmisty pisali obychnye odnopol'zovtel'skie programmy, kotorye na sovremennyh yazykah programmirovaniya zanyali by 100-200 strok, i kotorye dolzhny byli vypolnyat' skromnye algoritmicheskie zadachi. Pri sushchestvovavshih togda tehnologiyah i metodologiyah takie zadachi tozhe byli ochen' trudnymi. Splosh' i ryadom byli neudachi, oshibki, narushenie srokov. Zatem on opisyvaet, kak za poslednie 25 let upomyanutye neudachi, oshibki, narushennye sroki v obychnyh malen'kih odnovol'zovatel'skih programmah byli uluchsheny na poryadok. No v dejstvitel'nosti v 1950-h godah vershinoj tehnologii byli ne malen'kie odnopol'zovatel'skie programmy. V 1952 godu Univac byl zanyat obrabotkoj dannyh perepisi 1950 goda s pomoshch'yu slozhnoj programmy, kotoruyu razrabatyvali primerno vosem' programmistov.13 Drugie mashiny primenyalis' v himicheskoj dinamike, raschetah rasseyaniya nejtronov, raschetah poleta raket i t.d.14 Povsednevno ispol'zovalis' assemblery, peremeshchayushchie komponovshchiki i zagruzchiki, sistemy interpretacii s plavayushchej tochkoj i t.p.15 K 1955 godu uzhe sozdavalis' programmy dlya biznesa ob®emom ot 50 do 100 cheloveko-let.16 V 1956 godu na zavode Dzheneral |lektrik v L'yuisville rabotala programma razmerom bolee 80 000 slov. V 1957 godu v techenie uzhe dvuh let v sisteme protivovozdushnoj oborony rabotal komp'yuter SAGE ANFSQ/7, i na 30 ploshchadkah dejstvovala sistema real'nogo vremeni, ispol'zovavshaya telekommunikacii i dublirovanie v celyah otkazoustojchivosti, ob®emom 75 000 komand.17 Edva li mozhno priderzhivat'sya mneniya, chto razvitie tehnologij dlya odnopol'zovatel'skih programm - glavnaya harakteristika usilij v tehnike programmnogo obespecheniya posle 1952 goda. VOT ONA. Harel prodolzhaet, predlagaya sobstvennuyu serebryanuyu pulyu, tehnologiyu modelirovaniya pod nazvaniem "Vanilla Framework" ("vanil'naya struktura"). Sam podhod opisan nedostatochno podrobno, chtoby ego mozhno bylo ochenit', no est' ssylka na stat'yu i tehnicheskij otchet, kotoryj v svoe vremya dolzhen byt' opublikovan v vide knigi.18 Modelirovanie kasaetsya sushchnosti, pravil'noj razrabotki i otladki ponyatij, poetomu tehnologiya mozhet okazat'sya revolyucionnoj. Nadeyus', chto eto tak. Ken Bruks soobshchaet, chto eta metodologiya okazalas' poleznoj, kogda on popytalsya primenit' ee k real'noj zadache. Nezrimost'. Harel energichno dokazyvaet, chto znachitel'naya chast' konceptual'noj konstrukcii programmnogo obespecheniya yavlyaetsya po svoej prirode topologicheskoj zadachej, i eti vzaimosvyazi nahodyat sootvetstvie v prostranstvenno-graficheskih predstavleniyah: Ispol'zovanie podhodyashchego vizual'nogo formalizma mozhet okazat' zametnoe vozdejstvie na inzhenerov i programmistov. Bolee togo, eto vozdejstvie ne ogranichivaetsya oblast'yu akcidencij, bylo obnaruzheno polozhitel'noe vliyanie na kachestvo i bystrotu samogo ih myshleniya. V budushchem uspehi v razrabotke sistem budut svyazany s vizual'nymi predstavleniyami. Snachala my budem sozdavat' koncepcii s pomoshch'yu "pravil'nyh" ob®ektov i vzaimosvyazej, zatem formulirovat' nashi koncepcii kak posledovatel'nyj ryad vse bolee obstoyatel'nyh modelej s ispol'zovaniem podhodyashchej kombinacii vizual'nyh yazykov. Imenno kombinacii, poskol'ku modeli sistem imeyut neskol'ko granej, kazhdaya iz kotoryh vyzyvaet v voobrazhenii razlichnye vidy obrazov. ...Nekotorye grani processa modelirovaniya ne stol' legko poddayutsya horoshej vizualizacii. Naprimer, algoritmicheskie operacii nad peremennymi i strukturami dannyh, vozmozhno, ostanutsya tekstual'nymi. Zdes' nashi pozicii blizki. YA dokazyval, chto struktura programmnogo obespecheniya ne yavlyaetsya trehmernoj, poetomu ne sushchestvuet estestvennogo otobrazheniya konceptual'nogo proekta v diagrammu v prostranstve kak dvuh, tak i bol'shego chisla izmerenij. Harel dopuskaet, i ya soglasen, chto trebuetsya mnogo diagramm, kazhdaya iz kotoryh ohvatyvaet kakuyu-to odnu storonu, a nekotorye aspekty voobshche ploho otobrazhayutsya na diagrammah. YA vpolne razdelyayu ego entuziazm po povodu ispol'zovaniya diagramm kak vspomogatel'nogo sredstva pri obdumyvanii i proektirovanii. Dolgoe vremya ya lyubil zadavat' kandidatam na rabotu programmistom vopros: "Gde nahoditsya sleduyushchij noyabr'?". Esli vopros kazhetsya zagadochnym, to v drugom vide: "Kakova vasha myslennaya myslennaya model' kalendarya?" U dejstvitel'no horoshih programmistov horoshee chuvstvo prostranstva, u nih obychno est' geometricheskaya model' vremeni, i oni chasto bez truda ponimayut pervyj vopros. Ih modeli ochen' individual'ny. Tochka zreniya Dzhonsa: proiszvoditel'nost' prihodit vsled za Kachestvom Kapers Dzhons (Capers Jones) snachala v serii sluzhebnyh zapisok, a zatem v otdel'noj knige demonstriruet glubokuyu intuiciyu, otmechennuyu neskol'kimi moimi korrespondentami. "Stat'ya "SPN", kak i mnogie v to vremya, sosredotochilas' na proizvoditel'nosti - vyhode programmnoj produkcii na edinicu vhodnyh zatrat", - govorit Dzhons. - "Net, sosredotoch'tes' na kachestve, a proizvoditel'nost' pridet sledom."19 On utverzhdaet, chto dorogostoyashchie i narushivshie sroki proekty trebuyut bol'she vsego dopolnitel'nyh usilij i vremeni dlya poiska i ustraneniya oshibok v specifikaciyah, v proekte, v razrabotke. On privodit dannye, svidetel'stvuyushchie o sil'noj korrelyacii mezhdu otsutstviem sistematicheskogo kontrolya kachestva i sryvom grafika rabot. YA im vpolne veryu. Bem (Boehm) ukazyvaet, chto proizvoditel'nost' snova padaet, kogda presleduetsya isklyuchitel'no vysokoe kachestvo, kak bylo v programmah IBM dlya kosmicheskogo chelnoka. Analogichnym obrazom, Koki (Coqui) utverzhdaet, chto principy sistematicheskoj razrabotki programmnogo obespecheniya yavilis' otvetom na ozabochennost' ne stol'ko proizvoditel'nost'yu, skol'ko kachestvom (v osobennosti, stremleniem izbezhat' krupnyh katastrof). No obratite vnimanie: cel'yu primeneniya inzhenernyh principov k razrabotke programmnogo obespecheniya v 1970-h godah bylo podnyat' kachestvo, testiruemost', ustojchivost' i predskazuemost' programmnyh produktov, a ne obyazatel'no proizvoditel'nost' truda programmistov. Dvizhushchej siloj ispol'zovaniya pri razrabotke programm principov programmnoj inzhenerii bylo opasenie krupnyh avarij, k kotorym mogla privesti razrabotka vse bolee slozhnyh sistem neupravlyaemymi hudozhnikami.20 Tak chto zhe sluchilos' s proizvoditel'nost'yu? Proizvoditel'nost' v cifah. Cifry, harakterizuyushchie proizvoditel'nost', ochen' tyazhelo opredelit', kalibrovat' i najti. Kapers Dzhons schitaet, chto dlya dvuh odinakovyh programm na Cobol, napisannyh s intervalom v 10 let - s primeneniem strukturnogo programmirovaniya i bez nego - raznica v proizvoditel'nosti troekratnaya. |d Jordon (Ed Yourdin) utverzhdaet: "Po moim nablyudeniyam, blagodarya rabochim stanciyam i programmnym instrumentam proizvoditel'nost' uvelichilas' v pyat' raz." Tom Demarko (Tom DeMarco) schitaet, chto "vashe ozhidanie desyatikratnogo rosta proizvoditel'nosti za 10 let blagodarya celomu naboru tehnologij bylo optimistichnym: mne neizvestny organizacii, dobivshiesya rosta proizvoditel'nosti na poryadok." Programma v upakovke: pokupajte, ne nado razrabatyvat'. Odna iz ocenok "SPN" okazalas', ya dumayu, pravil'noj: "Vozniknovenie massovogo rynka yavlyaetsya... naibolee glubokoj dolgosrochnoj tendenciej v razrabotke programmnogo obespecheniya". S tochki zreniya nauki, programmnoe obespechenie dlya massovogo rynka obrazuet prakticheski novuyu otrasl' v sravnenii s razrabotkoj zakaznyh programm kak vnutri firmy, tak i storonnimi organizaciyami. Kogda schet prodannyh paketov idet na milliony ili hotya by na tysyachi, glavnymi problemami stanovyatsya kachestvo, svoevremennost', tehnicheskie harakteristiki i stoimost' podderzhki, a ne stoimost' razrabotki, kotoraya imeet takoe bol'shoe znachenie pri razrabotke zakaznyh sistem. |lektroinstrument dlya uma. Luchshij sposob povysit' proizvoditel'nost' truda programmistov informacionno-upravlyayushchih sistem - eto pojti v blizhajshij komp'yuternyj magazin i kupit' uzhe gotovym to, chto oni sobirayutsya razrabotat'. |to ne shutka: dostupnost' deshevyh i moshchnyh korobochnyh programm udovletvorila mnogie iz potrebnostej, ranee udovletvoryavshihsya zakaznymi programmami. |ti elektroinstrumenty dlya uma bol'she pohozhi na elektricheskte dreli, pily i shlifoval'nye mashiny, chem na bol'shie i slozhnye proizvodstvennye stanki. Integraciya ih v sovmestimye i perekrestno-svyazannye nabory, takie kak Microsoft Works ili luchshe integrirovannyj ClarisWorks, obespechivaet ogromnuyu gibkost'. I podobno domashnej kollekcii instrumenta, v rezul'tate chastogo ispol'zovaniya nabol'shogo nabora dlya raznyh zadach vyrabatyvayutsya privychnye navyki. Takoj instrument podcherkivaet prostotu ispol'zovaniya obychnym pol'zovatelem, dazhe ne professionalom. Ivan Selin (Ivan Selin), glava American Management Systems pisal mne v 1987 godu: YA hochu pridrat'sya k vashemu utverzhdeniyu, chto v dejstvitel'nosti pakety ne nastol'ko izmenilis'... YA dumayu, chto vy slishkom legko otbrosili glavnye sledstviya vashego zamechaniya, chto (programmnye pakety) "mogut byt' nemnogo bolee obshchimi i nemnogo luchshe nastraivaemymi, chem ran'she, no ne namnogo". Dazhe prinimaya eto zayavlenie za chistuyu monetu, ya polagayu, chto pol'zovateli rascenivayut pakety, kak obladayushchie bolee shirokimi vozmozhnostyami i legche nastraivaemye, i chto takoe vospriyatie delaet pol'zovatelej bolee podatlivymi pered paketami. V bol'shinstve sluchaev, izvestnyh moej kompanii, ne programmisty, a (konechnye) pol'zovateli neohotno pol'zuyutsya paketami, pokskol'ku dumayut, chto lishatsya vazhnyh vozmozhnostej i funkcij, a potomu vozmozhnost' legkoj nastrojki ves'ma povyshaet dlya nih privlekatel'nost' produkta. YA dumayu, chto Selin sovershenno prav: ya nedoocenil kak stepen' nastraivaemosti paketa, tak i vazhnost' etogo faktora. Ob®ektno-orientirovannoe programmirovanie: a medna pulya ne podojdet? Razrabotka iz bol'shih chastej. Esli osushchestvlyat' sborku iz chastej, kotorye dostatochno slozhny i imeyut odnorodnye interfejsy, mozhno bystro obrazovyvat' dovol'no bogatye struktury. Soglasno odnomu iz vzglyadov na ob®ektno-orientirovannoe programmirovanie eta disciplina osushchestvlyaet modul'nost' i chistye interfejsy. Drugaya tochka zreniya podcherkivaet inkapsulyaciyu - nevozmozhnost' uvidet' i eshche menee izmenit' vnutrennyuyu strukturu detali. Eshche odna tochka zreniya otmechaet nasledovanie i soputstvuyushchuyu emu ierarhicheskuyu strukturu klassov s virtual'nymi funkciyami. I eshche odin vzglyad: vazhnejshej yavlyaetsya sil'naya abstraktnaya tipizaciya dannyh vmeste s garantiyami, chto konkretnyj tip dannyh budet obrabatyvat'sya tol'ko primenimymi k nemu operaciyami. V nastoyashchee vremya ne nuzhen ves' paket Smalltalk ili C++, chtoby ispol'zovat' lyuboj iz etih disciplin - mnogie iz nih poglotili ob®ektno-orientirovannye tehnologii. Ob®ektno-orientirovannyj podhod privlekatelen, kak polivitaminy: odnim mahom (t.e. perepodgotovkoj programmista) poluchaesh' vse. Ochen' mnogoobeshchayushchaya koncepciya. Pochemu ob®ektno-orientirovannaya tehnologiya medlenno razvivalas'? V techenie devyati let posle vyhoda "SPN" nadezhdy neuklonno rosli. Pochemu razvitie bylo takim medlennym? Teorij mnogo. Dzhejms Koggins, v techenie chetyreh let vedushchij kolonku v The C++ Report, daet takoe ob®yasnenie: Problema v tom, chto programmisty, rabotayushchie v OOP, eksperimentirovali s krovosmesitel'nymi prilozheniyami i byli naceleny na nizkij uroven' abstrakcii. Naprimer, oni stroili takie klassy, kak "svyazannyj spisok" vmesto "interfejs pol'zovatelya", ili "luch radiacii", ili "model' iz konechnyh elementov". K neschast'yu, strogaya proverka tipov, kotoraya pomogaet programmistam C++ izbegat' oshibok, odnovremenno zatrudnyaet postroenie bol'shih ob®ektov iz malen'kih.21 On vozvrashchaetsya k fundamental'noj probleme programmirovaniya i dokazyvaet, chto odin iz sposobov udovletvorit' potrebnost' v programmnom obespechenii - uvelichit' chislennost' obrazovannoj rabochej sily putem podgotovki i privlecheniya nashih klientov. V pol'zu nishodyashchego proektirovaniya privodyatsya takie argumenty: Esli my proektiruem krupnye klassy, predstavlyayushchie koncepcii, s kotorymi nashi klienty uzhe rabotayut, to oni v sostoyanii ponimat' i kritikovat' proekt po mere ego razvitiya, a takzhe vmeste s nami razrabatyvat' kontrol'nye primery. Oftal'mologov, s kotorymi ya rabotayu, ne volnuet organizaciya steka; ih volnuet opisanie formy rogovicy s pomoshch'yu polinomov Lezhandra. Malen'kaya inkapsulyaciya daet i malen'kuyu vygodu. Devid Parnas, ch'ya stat'ya byla odnim iz istochnikov idej ob®ektno- orientirovannogo programmirovaniya, smotryat na veshchi po inomu. On pisal mne: Otvet prost. |to iz-za privyazannosti OOP k slozhnym yazykam. Vmesto ob®yasneniya lyudyam, chto OOP yavlyaetsya vidom proektirovaniya, i vooruzheniya ih principami proektirovaniya, ih uchili, chto OOP - eto ispol'zovanie opredelennogo instrumenta. Lyubymi sradstvami mozhno pisat' i plohie, i horoshie programmy. Esli ne uchit' lyudej proektirovaniyu, to yazyki ne imeyut bol'shogo znacheniya. Rezul'tatom budut plohie razrabotki s pomoshch'yu etih yazykov i malaya vygoda. A esli vygoda nevelika, to OOP ne vojdet v modu. Rashody sejchas, pribyl' potom. Po moemu mneniyu, u ob®ektno-orientirovannyh metodologij osobenno tyazhelyj sluchaj bolezni, harakternoj dlya mnogih usovershenstvovanij v metodologii. Ves'ma sushchestvenny predvaritel'nye izderzhki - v osnovnom, chtoby nauchit' programmistov myslit' sovershenno po novomu, a takzhe na preobrazovanie funkcij v obobshchennye klassy. Vygody, kotorye ya schitayu real'nymi, a ne chisto predpolozhitel'nymi, dostigayutsya vo vremya vsego cikla razrabotki, no nastoyashchaya okupaemost' proishodit pri razrabotke posleduyushchih programm, rasshirenii i soprovozhdenii. Koggins kovorit: "Ob®ektno-orientirovannoe programmirovanie ne uskorit razrabotku pervogo proekta, tak zhe kak i vtorogo. A vot pyatyj proekt iz togo zhe semejstva budet sdelan ochen' bystro."22 Riskovat' real'nymi nachal'nymi den'gami radi predpolagaemyh, no neopredelennyh pribylej v budushchem - eto to, chem investory zanimayutsya izo dnya v den'. Odnako vo mnogih programmiruyushchih organizaciyah menedzheram trebuetsya dlya etogo smelost' - kachestvo bolee redkoe, chem kompetenciya v tehnicheskih voprosah ili administrativnoe masterstvo. YA polagayu, chto krajnyaya stepen' avansiroaniya rashodov i otkladyvaniya pribyli yavlyaetsya samym sushchestvennym faktorom, zamedlyayushchim prinyatie O-O tehnologij. No dazhe v takih usloviyah C++, pohozhe, uverenno vytesnyaet C vo mnogih organizaciyah. CHto s povtornym ispol'zovaniem? Luchshij sposob spravit'sya s razrabotkoj chasti programmnoj sistemy, otnosyashchejsya k ee sushchnosti - eto voobshche ee ne razrabatyvat'. Pakety programm - odin iz sposobov sdelat' eto. Drugoj sposob - povtornoe ispol'zovanie. Dejstvitel'no, odnoj iz naibolee privlekatel'nyh chert ob®ektno-orientirovannogo programmirovaniya yavlyaetsya obeshchanie prostoty povtornogo ispol'zovaniya klassov v sochetanii s legkost'yu nastrojki blagodarya nasledovaniyu. Kak chasto byvaet, posle polucheniya nekotorogo opyta raboty po novoj tehnologii obnaruzhivaetsya, chto ona ne tak prosta, kak kazalos' na pervyj vzglyad. Konechno, programmisty vsegda povtorno ispol'zovali sobstvennye razrabotki. Dzhons pishet: U naibolee opytnyh programmistov est' svoi lichnye biblioteki, pozvolyayushchie im pri razrabotke novyh programm povtorno ispol'zovat' do 30% koda po ob®emu. Na korporativnom urovne povtornoe ispol'zovanie priblizhaetsya k 75% po ob®emu i trebuet special'nyh bibliotek i administrirovaniya. Povtornoe ispol'zovanie koda v korporativnyh masshtabah trebuet izmenenij v buhgalterii proekta i metodah izmereniya raboty.23 U. Huan (W. Huang) predlozhil organizaciyu programmnogo proizvodstva s matrichnoj strukturoj upravleniya funkcional'nymi specialistami, chtoby derzhat' pod kontrolem ih estestvennuyu sklonnost' k povtornomu ispol'zovaniyu sobstvennogo koda.24 Van SHnajder (Van Snyder) iz JPL napominaet mne, chto v krugah razrabotchikov matematicheskogo programmnogo obespecheniya sushchestvuet davnyaya tradiciya povtornogo ispol'zovaniya programm: My polagaem, chto prepyatstviya k povtornomu ispol'zovaniyu voznikayut ne so storony proizvoditelya, a so storony potrebitelya. Esli razrabotchik programmnogo obespecheniya - potencial'nyj potrebitel' standartnyh programmnyh komponentov - schitaet, chto najti i proverit' nuzhnyj komponent dorozhe, chem napisat' ego zanovo, znachit, budet napisan novyj komponent, dubliruyushchij prezhnij. Obratite vnimanie, my skazali "schitaet" - real'naya stoimost' povtornoj razrabotki ne imeet znacheniya. Povtornoe ispol'zovanie koda imeet uspeh pri razrabotke matematicheskih programm. Prichin etomu dve: 1) eto magiya, trebuyushchaya ogromnogo intellektual'nogo vklada v kazhduyu strochku koda, i 2) sushchestvuet bogataya i standartnaya terminologiya, a imenno - matematika, dlya opisaniya funkcional'nosti lyubyh komponentov. Poetomu povtorno razrabotat' matematicheskij komponent stoit dorogo, a razobrat'sya v funkcional'nosti stoit deshevo. Davnyaya tradiciya publikacii i sbora algoritmov professional'nymi zhurnalami i predlozheniya ih po umerennoj cene, a takzhe kommercheskoe predlozhenie vysokokachestvennyh algoritmov po neskol'ko bolee vysokoj, no vse zhe skromnoj cene, delayut poisk trebuemyh komponentov proshche, chem v drugih oblastyah, gde chasto nevozmozhno tochno i szhato opisat' trebuemoe. Blagodarya sovmestnomu dejstviyu etih faktorov povtornoe ispol'zovanie matematicheskih programm bolee privlekatel'no, chem povtornoe ih izobretenie. Takoe zhe yavlenie povtornogo ispol'zovaniya obnaruzhivaetsya i v drugih soobshchestvah, naprimer, v razrabotke programm dlya atomnyh reaktorov, modelirovaniya klimata, modelirovaniya okeanov - po tem zhe samym prichinam. Kazhdoe iz etih soobshchestv vyroslo na odnih i teh zhe uchebnikah, s odnoj i toj zhe sistemoj oboznachenij. Kak segodnya obstoyat dela s povtornym ispol'zovaniem na korporativnom urovne? Provedeno mnozhestvo issledovanij, a vot praktikuetsya v SSHA otnositel'no malo. CHto zhe kasaetsya povtornogo ispol'zovaniya za rubezhom, to tut imeyut mesto nepravdopodobnye otchety.25 Dzhons soobshchaet, chto vse klienty ego firmy, u kotoryh bolee 5000 programmistov, provodyat formal'nye issledovaniya povtornoj ispol'zuemosti, v to vremya kak iz chisla klientov s 500 i menee programmstami eto delaet menee 10 procentov.26 Po ego soobshcheniyu, v otraslyah s vysokim potencialom povtornogo ispol'zovaniya issledovaniya (ne realizaciya) "vedutsya aktivno i energichno, dazhe esli ne vpolne uspeshno". |d Jordon soobshchaet o programmnoj firme v Manile, v kotoroj 50 programmistov iz obshchego chisla 200 zanyaty tol'ko razrabotkoj povtorno ispol'zuemyh modulej dlya ispol'zovaniya vsemi ostal'nymi, i chto v teh sluchayah, kotorye on videl, prinyatie etoj tehnologii bylo vyzvano organizacionnymi, a ne tehnicheskimi faktorami - naprimer, sistemoj pooshchrenij. Demarko soobshchaet mne, chto nalichie massovyh rynochnyh paketov i vozmozhnost' predostavleniya imi obshchih funkcij, takih kak sistemy baz dannyh, sushchestvenno snizili kak nastoyatel'nost', tak i predel'nuyu poleznost' povtornogo ispol'zovaniya modulej sobstvennyh prilozhenij. "Povtorno ispol'zuemye moduli imeli tendenciyu v konce koncov stanovit'sya obshchimi funkciyami." Parnas pishet sleduyushchee: Povtornoe ispol'zovanie - eto to, o chem legche govorit', chem osushchestvit'. Dlya nego trebuyutsya kak horoshee proektirovanie, tak i ochen' horoshaya dokumentaciya. Dazhe kogda my vidim horoshee proektirovanie, chto po- prezhnemu ne chasto, bez horoshej dokumentacii komponenty ne budut ispol'zovat'sya povtorno. Ken Bruks soobshchaet, chto trudno rasschitat', kakaya stepen' obobshchennosti okazhetsya neobhodimoj: "Mne prihoditsya menyat' veshchi, dazhe v pyatyj raz ispol'zuya sobstvennuyu biblioteku pol'zovatel'skih interfejsov." Real'no povtornoe ispol'zovanie tol'ko nachinaetsya. Dzhons soobshchaet, chto na otkrytom rynke est' neskol'ko modulej s povtorno ispol'zuemym kodom po cene ot 1 do 20 procentov ot obychnoj stoimosti razrabotki.27 Demarko govorit: Menya vse bolee obeskurazhivaet vsya eta istoriya s povtornym ispol'zovaniem. Prakticheski otsutstvuet teorema sushchestvovaniya dlya povtornogo ispol'zovaniya. Vremya podtverdilo, chto sdelat' veshchi povtorno ispol'zuemymi stoit dorogo. Jordon daet ocenku togo, skol'ko eto stoit: "Horoshee empiricheskoe pravilo govorit, chto povtorno ispol'zuemye komponenty potrebuyut vdvoe bol'shih zatrat, chem "odnorazovye" komponenty."28 YA rassmatrivayu etu cenu kak velichinu zatrat na zapusk komponentov v proizvodstvo, obsuzhdavshuyusya v glave 1, poetomu ya ocenivayu rost zatrat kak troekratnyj. Konechno, my vidim razlichnye formy i varianty povtornogo ispol'zovaniya, no ono daleko ne tak shiroko primenyaetsya, kak my predpolagali. Predstoit eshche mnogoe ponyat'. Ponimanie bol'shih slovarej: neozhidannaya problema povtornogo ispol'zovaniya, kotoruyu mozhno bylo predvidet' CHem vyshe uroven', na kotorom osushchestvlyaetsya myshlenie, tem bolee mnogochislenny primitivnye sostavlyayushchie mysli, s kotorymi prihoditsya imet' delo. Tak, yazyki vysokogo urovnya gorazdo slozhnee mashinnyh yazykov, a estestvennye yazyki eshche bolee slozhny. U yazykov vysokogo urovnya bol'she slovari, bolee slozhnyj sintaksis i bolee strogaya semantika. Kak nauchnaya disciplina, my ne vzvesili posledstviya etogo fakta dlya povtornogo ispol'zovaniya programm. CHtoby povysit' kachestvo i proizvoditel'nost', my hotim stroit' programmy iz chastej s otlazhennymi funkciyami, kotorye sushchestvenno vyshe po urovnyu, chem operatory yazykov programmirovaniya. Poetomu, delaem li my eto s pomoshch'yu bibliotek klassov ili bibliotek procedur, nam pridetsya stolknut'sya s rezkim uvelicheniem razmerov nashih slovarej programmirovaniya. Izuchenie slovarya sostavlyaet znachitel'nuyu chast' prepyatstvij k povtornomu ispol'zovaniyu. Na segodnyashnij den' est' biblioteki klassov, naschityvayushchie svyshe 3000 chlenov. Mnogie ob®ekty trebuyut zadaniya ot 10 do 20 parametrov i peremennyh- pereklyuchatelej. Vsyakij, ispol'zuyushchij takuyu biblioteku, dolzhen izuchit' sintaksis (vneshnie interfejsy) i semantiku (podrobnoe povedenie funkcii) ee chlenov, esli sobiraetsya polnost'yu realizovat' potencial povtornogo ispol'zovaniya. |ta zadacha vovse ne beznadezhna. Obychno chelovek ispol'zuet okolo 10000 slov rodnogo yazyka, obrazovannye lyudi - znachitel'no bol'she. Kakim-to obrazom my obuchaemsya sintaksisu i tonkim semanticheskim razlichiyam. My pravil'no operedelyaem razlichiya mezhdu slovami gigantskij, ogromnyj, prostrannyj, kolossal'nyj, gromadnyj - nikto ne govorit o kolossal'nyh pustynyah i prostrannyh slonah. Nuzhny dopolnitel'nye issledovaniya, chtoby mozhno bylo primenit' k probleme povtornogo ispol'zovaniya programm sushchestvuyushchie znaniya o tom, kak lyudi ovladevayut yazykom. Nekotorye vyvody neposredstvenno ochevidny: - Obuchenie proishodit v kontekste predlozheniya, poetomu nuzhno publikovat' mnogochislennye primery sostavnyh produktov, a ne prosto biblioteki sostavlyayushchih chastej. - CHelovek zapominaet tol'ko pravopisanie. Sintaksis i semantika izuchayutsya postepenno, v kontekste, putem primeneniya. - CHelovek gruppiruet pravila soedineniya slov v sintaksicheskie klassy, a ne v sovmestimye podmnozhestva ob®ektov. CHistyj itog po pulyam: polozhenie prezhnee Itak, my vozvrashchaemsya k osnovam. Slozhnost' - eto to, chem my zanimaemsya, i slozhnost' - eto to, chto nas ogranichivaet. R. L. Glass (R. L. Glass) pisal v 1988 godu, tochno summiruya moi vzglyady 1995 goda: Tak chto zhe v itoge soobshchili nam Parnas i Bruks? CHto razrabotka programm yavlyaetsya konceptual'no slozhnym zanyatiem. CHto volshebnye resheniya ne lezhat za kazhdym uglom. CHto zanimayushchimsya etim delom pora izuchit' dostizheniya, imeyushchie evolyucionnyj harakter, a ne zhdat' revolyuciyu i ne nadeyat'sya na nee. Nekotorye schitayut eto bezradostnoj kartinoj. |to te, kto polagal, chto vot-vot nastupit proryv. No nekotorye iz nas - dostatochno svarlivye, chtoby schitat' sebya realistami, - otnosyatsya k etomu kak k glotku svezhego vozduha. Nakonec-to mozhno sosredotochit'sya na chem-to bolee blizkom k zhizni, chem zhuravl' v nebe. Teper', veroyatno, my smozhem zanyat'sya postepennymi usovershenstvovaniyami proizvodstva programmnogo obespecheniya, kotorye dejstvitel'no dostizhimy, a ne zhdat' proryvov, kotorye vryad li kogda-libo proizojdut.29 Glava 18. Zayavleniya "Mificheskogo cheloveko-mesyaca": pravda ili lozh'? Kratkost' ochen' polezna, Kogda nas ponimayut ili ne ponimayut. S|MYU|L BATLER, "GUDIBRAS" Segodnya o tehnike razrabotki programmnogo obespecheniya izvestno znachitel'no bol'she, chem v 1975 godu. Kakie iz utverzhdenij, soderzhashchihsya v pervom izdanii 1975 goda, podtverdilis' opytom i dannymi? Kakie byli oprovergnuty? Kakie ustareli v nashem izmenchivom mire? CHtoby vam legche bylo sudit', zdes', v vide svodki, privedeny vazhnejshie utverzhdeniya knigi 1975 goda, kotorye ya schital vernymi: fakty i izvlechennye iz opyta prakticheskie pravila, privedennye s sohraneniem iznachal'nogo smysla. (Mozhno zadat'sya voprosom: esli eto vse, chto bylo skazano v pervonachal'nom izdanii, pochemu togda eto zanyalo tak mnogo mesta?) V skobkah privedeny svezhie kommentarii. Bol'shinstvo etih predlozhenij mozhno proverit' na praktike. Izlagaya ih v szhatoj forme, ya nadeyus' skoncentrirovat' mysli chitatelya, izmereniya i kommentarii. Glava 1. Smolyanaya yama 1.1 Dlya sozdaniya sistemnogo programmnogo produkta trebuetsya primerno v devyat' raz bol'she usilij po sravneniyu s sostavlyayushchimi ego programmami, napisannymi otdel'no dlya chastnogo ispol'zovaniya. Po moej ocenke, prevrashchenie programmy v produkt vvodit koefficient, ravnyj trem; proektirovanie, integraciya i testirovanie komponentov, kotorye dolzhny obrazovat' soglasovannuyu sistemu, takzhe vvodit koefficient, ravnyj trem; vse eti sostavlyayushchie stoimosti sushchestvenno nezavisimy drug ot druga. 1.2 Zanyatie programmirovaniem "otvechaet glubokoj vnutrennej potrebnosti v tvorchestve i udovletvoryaet chuvstvennye potrebnosti, kotorye est' u vseh u nas", dostavlyaya pyat' vidov radosti: - Radost', poluchaemaya pri sozdanii chego-libo svoimi rukami. - Udovol'stvie sozdavat' veshchi, kotorye mogut byt' polezny drugim lyudyam. - Ocharovanie sozdaniya slozhnyh golovolomnyh ob®ektov, sostoyashchih iz vzaimodejstvuyushchih dvizhushchihsya chastej. - Radost', poluchaemaya ot neizmennogo uznavaniya novogo, nepovtoryaemosti zadachi. - Udovol'stvie ot raboty so stol' podatlivym materialom - chistoj mysl'yu, kotoryj, tem ne menee, sushchestvuet, dvizhetsya i rabotaet tak, kak ne mogut slovesnye ob®ekty. 1.3 V to zhe vremya etomu zanyatiyu prisushchi i ogorcheniya: - Pri izuchenii programmirovaniya trudnee vsego privyknut' k trebovaniyu sovershenstva. - Postanovka zadach osushchestvlyaetsya drugimi lyud'mi i prihoditsya zaviset' ot veshchej (osobenno, programm), kotorye nel'zya kontrolirovat'; polnomochiya ne sootvetstvuyut otvetstvennosti. - Strashno tol'ko na slovah: fakticheskaya vlast' priobretaetsya kak sledstvie uspeshnogo vypolneniya zadach. - Programmnyj proekt priblizhaetsya k okonchatel'nomu vidu tem medlennee, chem blizhe okonchanie, hotya kazhetsya, chto k koncu shodimost' dolzhna byt' bolee bystroj. - Programmnomu produktu grozit ustarevanie eshche do ego zaversheniya. Nastoyashchij tigr - ne para bumazhnomu, esli trebuetsya real'noe ispol'zovanie. Glava 2. Mificheskij cheloveko-mesyac 2.1 Programmnye proekty chashche provalivayutsya iz-za nehvatki kalendarnogo vremeni, chem po vsem ostal'nym prichinam, vmeste vzyatym. 2.2 CHtoby prigotovit' vkusnuyu pishchu, nuzhno vremya; nekotorye zadachi nel'zya uskorit', ne isportiv rezul'tat. 2.3 Vse programmisty yavlyayutsya optimistami: "Vse budet horosho". 2.4 Poskol'ku programmist rabotaet s chistymi ideyami, my ne ozhidaem osobyh trudnostej pri realizacii. 2.5 No sami nashi idei byvayut oshibochnymi - otsyuda i oshibki v programmah. 2.6 Nashi metody ocenivaniya, osnovannye na uchete zatrat, smeshivayut zatraty s poluchennym rezul'tatom. CHeloveko-mesyac yavlyaetsya oshibochnym i opasnym zabluzhdeniem, poskol'ku predpolagaet, chto mesyacy i kolichestvo lyudej mozhno menyat' mestami. 2.7 Razdelenie zadachi mezhdu neskol'kimi lyud'mi vyzyvaet dopolnitel'nye zatraty na obuchenie i obmen informaciej. 2.8 Moe prakticheskoe pravilo: 1/3 vremeni - na proektirovanie, 1/6 - na napisanie programmy, 1/4 - na testirovanie komponentov i 1/4 - na sistemnoe testirovanie. 2.9 Kak nauchnoj discipline nam ne hvataet metodov ocenki. 2.10 Poskol'ku my ne uvereny v svoih ocenkah srokov raboty, nam chasto ne dostaet smelosti upryamo otstaivat' ih pod nazhimom rukovodstva i klientov. 2.11 Zakon Bruksa: esli proekt ne ukladyvaetsya v sroki, to dobavlenie rabochej sily zaderzhit ego eshche bol'she. 2.12 Dobavlenie rabochej sily uvelichivaet obshchij ob®em zatrat tremya putyami: trud po perekraivaniyu zadach i proishodyashchee pri etom narushenie raboty, obuchenie novyh lyudej, dopolnitel'noe obshchenie. Glava 3. Operacionnaya brigada 3.1 Samye luchshie programmisty-professionaly v 10 raz produktivnee slabyh pri ravnoj podgotovke i dvuhletnem stazhe (Sakman, Grant i |rikson). 3.2 Dannye Sakmana, Granta i |riksona ne vyyavili korrelyacii mezhdu opytom i produktivnost'yu. YA dumayu, chto eto vsegda tak. 3.3 Luchshe vsego imet' malen'kuyu aktivnuyu komandu - kak mozhno men'she myslitelej. 3.4 CHasto luchshe vsego, esli komanda sostoit iz dvuh chelovek, odin iz kotoryh yavlyaetsya liderom. (Obratite vnimanie, kak Bogom zaduman brak.) 3.5 Dlya sozdaniya dejstvitel'no krupnyh sistem malen'kaya aktivnaya komanda rabotaet slishkom medlenno. 3.6 Opyt razrabotki bol'shinstva dejstvitel'no bol'shih sistem pokazyvaet, chto podhod k uskoreniyu s pozicij gruboj sily okazyvaetsya dorogostoyashchim, medlennym, neeffektivnym i privodit k poyavleniyu sistem, ne yavlyayushchihsya konceptual'no celostnymi. 3.7 Organizaciya po tipu hirurgicheskih brigad s glavnym programmistom predlagaet sposob dostizheniya celostnosti produkta blagodarya ego proektirovaniyu v neskol'kih golovah i obshchej produktivnosti blagodarya nalichiyu mnogochislennyh pomoshchnikov pri radikal'no sokrashchennom obmene informaciej. Glava 4. Aristokratiya, demokratiya i sistemnoe proektirovanie 4.1 "Konceptual'naya celostnost' yavlyaetsya naibolee vazhnym soobrazheniem pri proektirovanii sistem." 4.2 "Okonchatel'nuyu ocenku proektu sistemy daet otnoshenie funkcional'nosti k slozhnosti koncepcij", a ne tol'ko bogatstvo funkcij. (|to sootnoshenie yavlyaetsya meroj prostoty ispol'zovaniya, prigodnoj kak dlya prostogo, tak i dlya slozhnogo ispol'zovaniya.) 4.3 Dlya dostizheniya konceptual'noj celostnosti proekt dolzhen sozdavat'sya odnim chelovekom ili gruppoj edinomyshlennikov. 4.4 "Otdelenie razrabotki arhitektury ot realizacii yavlyaetsya effektivnym sposobom dostizheniya konceptual'noj celostnosti pri rabote nad ochen' bol'shimi proektami." (I malen'kimi tozhe.) 4.5 "Esli vy hotite, chtoby sistema obladala konceptual'noj celostnost'yu, kto- to odin dolzhen vzyat' rukovodstvo koncepciyami. |to aristokratizm, kotoryj ne nuzhdaetsya v izvineniyah." 4.6 Disciplina polezna iskusstvu. Poluchenie arhitektury izvne usilivaet, a ne podavlyaet tvorcheskuyu aktivnost' gruppy ispolnitelej. 4.7 Konceptual'no celostnye sistemy bystree razrabatyvayutsya i testiruyutsya. 4.8 Proektirovanie arhitektury, razrabotku i realizaciyu mozhno v znachitel'noj mere osushchestvlyat' parallel'no. (Proektirovanie apparatnogo i programmnogo obespecheniya tozhe mogut prohodit' parallel'no.) Glava 5. |ffekt vtoroj sistemy 5.1 Svyaz', ustanovlennaya na rannih etapah i prodolzhayushchayasya nepreryvno, mozhet dat' arhitektoru vernuyu ocenku stoimosti, a razrabotchiku - uverennost' v proekte, ne snimaya pri etom chetkogo razgranicheniya sfer otvetstvennosti. 5.2 Kak arhitektoru uspeshno vliyat' na realizaciyu: - Pomnit', chto otvetstvennost' za tvorchestvo, proyavlyaemoe pri realizacii, neset stroitel', poetomu arhitektor tol'ko predlagaet. - Vsegda byt' gotovym predlozhit' nekotoryj sposob realizacii svoih zamyslov i byt' gotovym soglasit'sya s lyubym drugim sposobom, kotoryj ne huzhe. - Vydvigaya takie predlozheniya, dejstvovat' tiho i chastnym obrazom. - Ne rasschityvat' na priznatel'nost' za predlozhennye usovershenstvovaniya. - Vyslushivat' predlozheniya razrabotchikov po usovershenstvovaniyu arhitektury. 5.3 Iz vseh proektiruemyh sistem naibol'shuyu opasnost' predstavlyaet vtoraya po schetu; obychno ee prihoditsya pereproektirovat' zanovo. 5.4 OS/360 yavlyaetsya yarkim primerom effekta vtoroj sistemy. (Pohozhe, chto Windows NT - eto primer dlya 1990 goda.) 5.5 Dostojnoj vnimaniya praktikoj yavlyaetsya predvaritel'noe naznachenie funkciyam velichin v bajtah i mikrosekundah. Glava 6. Donesti slovo 6.1 Dazhe v bol'shoj komande proektirovshchikov oformlenie rezul'tatov nuzhno poruchit' odnomu ili dvum lyudyam, chtoby obespechit' soglasovannost' mini- reshenij. 6.2 Vazhno yavno opredelit' te chasti arhitektury, kotorye ne propisany stol' zhe tshchatel'no, kak ostal'nye. 6.3 Neobhodimo imet' kak formal'noe opisanie proekta - dlya tochnosti, tak i tekstual'noe - dlya ponimaniya. 6.4 Libo formal'noe, libo tekstual'noe opredeleniya vybirayutsya v kachestve standarta, pri etom vtoroe opredelenie yavlyaetsya proizvodnym. Kazhdoe opredelenie mozhet vystupat' v lyuboj iz rolej. 6.5 Realizaciya, v tom chisle model', mozhet sluzhit' opredeleniem arhitektury; takoe ispol'zovanie imeet sushchestvennye nedostatki. 6.6 Pryamoe vklyuchenie yavlyaetsya ochen' iskusnym priemom dlya osushchestvleniya standartov arhitektury v programmnom obespechenii (v apparatnom obespechenii - tozhe: voz'mite interfejs Mac WIMP, vstroennyj v ROM). 6.7 Arhitekturnoe "opredelenie budet yasnee, a (arhitekturnaya) disciplina krepche, esli iznachal'no stroyatsya kak minimum dve realizacii". 6.8 Vazhno, chtoby arhitektor v telefonnyh razgovorah otvechal ispolnitelyam na ih voprosy; obyazatel'no nuzhno registrirovat' eti razgovory v zhurnale i dovodit' ih do obshchego svedeniya. (Sejchas dlya etogo predpochtitel'nee elektronnaya pochta.) 6.9 "Luchshij drug menedzhera proekta - ego postoyannyj protivnik, nezavisimaya organizaciya, testiruyushchaya produkt." Glava 7. Pochemu ne udalos' postroit' Vavilonskuyu bashnyu? 7.1 Proekt Vavilonskoj bashni provalilsya iz-za nedostatka obmena informaciej i, kak sledstvie, organizacii. Obmen informaciej 7.2 "Otstavanie grafika, nesootvetstvie funkcional'nosti, sistemnye oshibki - vse eto iz-za togo, chto levaya ruka ne znaet, chto tvorit pravaya." Predpolozheniya komand rashodyatsya. 7.3 Brigady dolzhny podderzhivat' mezhdu soboj svyaz' vsemi vozmozhnymi sposobami: neformal'no, putem regulyarnyh soveshchanij po proektu s tehnicheskimi otchetami i cherez obshchuyu rabochuyu tetrad' proekta. (A takzhe elektronnuyu pochtu.) Rabochaya tetrad' proekta 7.4 Rabochaya tetrad' proekta est' "ne stol'ko otdel'nyj dokument, skol'ko struktura, nalagaemaya na vse dokumenty, kotorye, tak ili inache, budut sozdany vo vremya vypolneniya proekta." 7.5 "Vse dokumenty proekta dolzhny vhodit' v etu strukturu (rabochej tetradi)." 7.6 Strukturu rabochej tetradi nuzhno proektirovat' tshchatel'no i rano. 7.7 Pravil'noe strukturirovanie tekushchej dokumentacii s samogo nachala pozvolyaet "sostavlennye pozdnee dokumenty oformit' v vide otryvkov, kotorye vpisyvayutsya v etu strukturu" i uluchshaet rukovodstva po produktu. 7.8 "Kazhdyj chlen komandy dolzhen videt' vse materialy (rabochej tetradi)." (Sejchas ya by skazal "dolzhen imet' vozmozhnost' videt'". Naprimer, dostatochno WWW-stranic.) 7.9 Svoevremennoe obnovlenie mozhet imet' kriticheskoe znachenie. 7.10 Neobhodimo, chtoby vnimanie pol'zovatelya bylo osobo privlecheno k izmeneniyam, proizoshedshim posle ego poslednego prochteniya, prichem s pometkami ob ih znachenii. 7.11 Rabochaya tetrad' proekta OS/360 nachinalas' s bumazhnogo varianta s posleduyushchim perehodom na mikrofishi. 7.12 Segodnya (i dazhe v 1975 godu) obshchij elektronnyj bloknot yavlyaetsya znachitel'no luchshim, bolee deshevym i prostym mehanizmom dostizheniya etih celej. 7.13 Neobhodimo pomechat' tekst s pomoshch'yu polosok izmeneniya dat peresmotra (ili ih funkcional'nogo ekvivalenta). Tak zhe neobhodima svodka izmenenij po tipu steka. 7.14 Parnas staraetsya dokazat', chto stremlenie k tomu, chtoby kazhdyj videl vse, sovershenno oshibochno: chasti dolzhny inkapsulirovat'sya takim obrazom, chtoby nikomu ne trebovalos' ili ne razreshalos' videt' soderzhanie kakih- libo chastej, krome svoih sobstvennyh, a vidny mogut byt' tol'ko interfejsy. 7.15 Predlozhenie Parnasa - put' k katastrofe. (Parnas vpolne ubedil menya v obratnom, i ya sovershenno izmenil svoe mnenie.) Organizaciya 7.16 Zadachej organizacii yavlyaetsya sokrashchenie ob®ema neobhodimogo obshcheniya i soglasovaniya. 7.17 Organizaciya zaklyuchaet v sebe razdelenie truda i specializaciyu funkcij s cel'yu sokratit' obmen informaciej. 7.18 Obychnaya drevovidnaya organizaciya otrazhaet strukturnyj princip vlasti, kotoryj pokazyvaet, chto nel'zya odnovremenno sluzhit' dvum hozyaevam. 7.19 Struktura obmena informaciej v organizacii yavlyaetsya ne derevom, a set'yu, i nuzhno pridumat' razlichnye vidy special'nyh organizacionnyh mehanizmov ("punktirnye linii"), chtoby preodolet' deficit obmena informaciej v drevovidnoj organizacii. 7.20 V kazhdom subproekte est' dve rukovodyashchie dolzhnosti: prodyuser i tehnicheskij direktor, ili arhitektor. Ih funkcii sovershenno razlichny i trebuyut raznyh sposobnostej. 7.21 Vpolne effektivnym mozhet byt' lyuboj tip vzaimootnoshenij mezhdu etimi dvumya dolzhnostyami: - |to mozhet byt' odno lico. - Prodyuser mozhet byt' nachal'nikom, a direktor - ego pravoj rukoj. - Direktor mozhet byt' nachal'nikom, a prodyuser - ego pravoj rukoj. Glava 8. Ob®yavlyaya udar 8.1 Nel'zya tochno ocenit' obshchij ob®em ili grafik rabot programmnogo proekta, prosto oceniv vremya napisaniya programmy i umnozhiv na nekotorye koefficienty dlya ostal'nyh chastej zadaniya. 8.2 Dannye, otnosyashchiesya k sozdaniyu nebol'shih otdel'nyh sistem, ne primenimy k proektam sozdaniya programmnyh kompleksov. 8.3 Ob®em rabot rastet kak stepennaya funkciya razmera programmy. 8.4 Nekotorye opublikovannye issledovaniya pokazyvayut, chto pokazatel' stepeni primerno raven 1,5. (Rezul'taty Bema s etim ne soglasuyutsya i menyayutsya ot 1,05 do 1,2.)1 8.5 Dannye Portmana po ICL pokazyvayut, chto zanyatye na polnyj rabochij den' programmisty tol'ko okolo 50 procentov vremeni zanimayutsya programmirovaniem i otladkoj, a ostal'noe vremya zanimayut raznye dopolnitel'nye zadachi. 8.6 Po dannym Arona iz IBM, proizvoditel'nost' truda lezhit v predelah ot 1,5 do 10 tysyach strok programmy na cheloveka v god v zavisimosti ot kolichestva vzaimodejstvij mezhdu chastyami sistemy. 8.7 Po dannym Harra iz Bell Labs, proizvoditel'nost' truda pri zadache tipa razrabotki operacionnoj sistemy sostavila okolo 0,6 tysyach strok koda na cheloveka v god, a pri razrabotke kompilyatorov - 2,2 tysyachi dlya zakonchennyh produktov. 8.8 Dannye Bruksa po OS/360 soglasuyutsya s dannymi Harra: 0,6-0,8 tysyach strok koda na cheloveko-god dlya operacionnyh sistem i 2-3 tysyachi dlya kompilyatorov. 8.9 Dannye Korbato po proektu MTI MULTICS pokazyvayut, chto proizvoditel'nost' truda pri razrabotke smesi operacionnoj sistemy i kompilyatorov sostavila 1,2 tysyach strok koda na cheloveka v god, no eto stroki koda PL/I, a ostal'nye dannye otnosyatsya k strokam koda assemblera! 8.10 Proizvoditel'nost' primerno postoyanna v perevode na elementarnye operatory. 8.11 Pri ispol'zovanii podhodyashchih yazykov vysokogo urovnya proizvoditel'nost' mozhno uvelichit' v pyat' raz. Glava 9. Dva v odnom 9.1 Esli ne schitat' vremeni vypolneniya, to glavnye izderzhki prihodyatsya na zanimaemoe programmoj prostranstvo pamyati. |to v osobennosti verno dlya operacionnyh sistem, znachitel'naya chast' kotoryh ostaetsya rezidentnoj. 9.2 Nesmotrya na eto, den'gi, potrachennye na pamyat' dlya razmeshcheniya programmy, dayut ochen' horoshee uluchshenie harakteristik na edinicu vlozhenij - luchshee, chem vse drugie sposoby investirovaniya v konfiguraciyu. Ploh ne razmer programmy, a lishnij razmer. 9.3 Razrabotchik programmy dolzhen ustanavlivat' zadanie po razmeru, kontrolirovat' razmer i pridumyvat' metody sokrashcheniya razmera, tak zhe, kak razrabotchik apparatnoj chasti delaet eto dlya detalej. 9.4 Resursy po pamyati dolzhny yavno zadavat' ne tol'ko razmer rezidentnoj chasti, no i intensivnost' obrashchenij programmy k disku. 9.5 Resursy pamyati dolzhny privyazyvat'sya k naznacheniyu funkcij: tochno opredelyajte, chto dolzhen delat' modul', kogda zadaete ego razmery. 9.6 Gruppy v sostave bol'shih brigad sklonny proizvodit' optimizaciyu v svoih uzkih interesah, ne dumaya o konechnom effekte, kotoryj ona okazhet na pol'zovatelya. |ta poterya orientacii yavlyaetsya bol'shoj opasnost'yu dlya krupnyh proektov. 9.7 Na vsem protyazhenii realizacii sistemnye arhitektory dolzhny postoyanno proyavlyat' bditel'nost' s cel'yu nepreryvnogo obespecheniya celostnosti sistemy. 9.8 Vospitanie obshchesistemnogo i orientirovannogo na pol'zovatelya podhoda yavlyaetsya, vozmozhno, glavnoj zadachej menedzhera po programmirovaniyu. 9.9 Nuzhno uzhe na rannih etapah opredelit', naskol'ko detalizirovannym budet predostavlyaemyj pol'zovatelyu vybor opcij, poskol'ku ob®edinenie opcij v gruppy sberegaet pamyat' (a chasto i rashody na marketing). 9.10 Vazhno opredelit' razmer tranzitnoj pamyati, svyazannyj s razmerom peregruzhaemogo koda, poskol'ku zavisimost' proizvoditel'nosti ot etogo razmera sil'nee, chem linejnaya. (|tot punkt polnost'yu ustarel blagodarya nalichiyu virtual'noj pamyati i deshevizne fizicheskoj pamyati. Teper' pol'zovateli obychno pokupayut pamyat' v kolichestve, dostatochnom dlya razmeshcheniya vsego koda osnovnyh prilozhenij.) 9.11 Dlya dostizheniya horoshego kompromissa mezhdu prostranstvom i vremenem neobhodimo provodit' obuchenie tehnike programmirovaniya, prisushchej dannomu yazyku ili mashine, osobenno esli oni novye. 9.12 U programmirovaniya est' tehnologiya, i kazhdyj proekt nuzhdaetsya v biblioteke standartnyh komponentov. 9.13 Biblioteki programm dolzhny imet' po dve versii kazhdogo komponenta - bystruyu i kompaktnuyu. (Pohozhe, chto segodnya eto ustarelo.) 9.14 Kompaktnye i bystrye programmy pochti vsegda yavlyayutsya rezul'tatom strategicheskogo proryva, a ne takticheskoj gramotnosti. 9.15 Takim proryvom chasto yavlyaetsya novyj algoritm. 9.16 Eshche chashche proryv proishodit blagodarya izmeneniyu predstavleniya dannyh ili tablic. Predstavlenie - sushchnost' programmirovaniya. Glava 10. Dokumentarnaya gipoteza 10.1 Gipoteza: Sredi morya bumag neskol'ko dokumentov stanovyatsya kriticheski vazhnymi osyami, vokrug kotoryh vrashchaetsya vse upravlenie proektom. Oni yavlyayutsya glavnymi lichnymi instrumentami menedzhera. 10.2 Dlya proekta razrabotki komp'yutera reshayushchimi dokumentami yavlyayutsya celi, rukovodstvo, grafik, byudzhet, organizacionnaya struktura, plan pomeshchenij, a takzhe ocenka, prognoz i ceny dlya samoj mashiny. 10.3 Dlya fakul'teta universiteta vazhnejshie dokumenty analogichny: celi, trebovaniya k soiskatelyam stepenej, opisaniya kursov, predlozheniya po nauchnoj rabote, raspisanie zanyatij i plan obucheniya, byudzhet, plan pomeshchenij, a takzhe naznacheniya prepodavatelej i aspirantov. 10.4 Dlya programmnogo proekta trebovaniya te zhe: celi, rukovodstvo pol'zovatelya, vnutrennyaya dokumentaciya, grafik, byudzhet, organizacionnaya struktura i plan pomeshchenij. 10.5 Poetomu dazhe dlya samogo malen'kogo proekta menedzher s samogo nachala dolzhen formalizovat' takoj nabor dokumentov. 10.6 Podgotovka kazhdogo dokumenta ih etogo malen'kogo nabora koncentriruet mysl' i kristallizuet obsuzhdenie. Pri izlozhenii na bumage trebuetsya prinyatie soten mini-reshenij, i ih nalichie otlichaet chetkuyu i tochnuyu politiku ot rasplyvchatoj. 10.7 Soprovozhdenie kazhdogo vazhnogo dokumenta trebuet nalichiya mehanizma slezheniya za sostoyaniem i preduprezhdeniya. 10.8 Kazhdyj dokument v otdel'nosti sluzhit kontrol'nym spiskom i bazoj dannyh. 10.9 Vazhnejshaya zadacha menedzhera - obespechit' obshchee dvizhenie v odnom napravlenii. 10.10 Glavnaya postoyannaya zadacha menedzhera - obshchenie, a ne prinyatie reshenij; dokumenty informiruyut vsyu komandu o planah i resheniyah. 10.11 Tol'ko malen'kaya chast', vozmozhno, 20 procentov, rabochego vremeni administratora zanyata zadachami, kotorye trebuyut svedenij, otsutstvuyushchih v ego pamyati. 10.12 Po etoj prichine modnaya ideya "vseohvatyvayushchej informacionnoj sistemy dlya upravleniya", obespechivayushchej podderzhku rukovoditelya, osnovyvaetsya na nevernoj modeli povedeniya rukovoditelya. Glava 11. Planirujte na vybros 11.1 Inzhenery-himiki vyyasnili, chto osushchestvlennyj v laboratorii process nel'zya odnim mahom perenesti v zavodskie usloviya, no neobhodimo postroit' opytnyj zavod, chtoby poluchit' opyt narashchivaniya kolichestv veshchestv i funkcionirovaniya v nezashchishchennyh sredah. 11.2 |tot promezhutochnyj shag v ravnoj mere neobhodim dlya programmnyh produktov, no dlya inzhenerov-programmistov poka ne stalo obychnoj praktikoj provodit' polevye ispytaniya opytnoj sistemy, prezhde chem nachinat' postavki gotovogo produkta. (Sejchas eto uzhe stalo obshchej praktikoj blagodarya vypusku beta-versij. |to ne to zhe samoe, chto maket s ogranichennoj funkcional'nost'yu, al'fa-versiya, kotoruyu ya takzhe propagandiruyu.) 11.3 Dlya bol'shinstva proektov pervuyu postroennuyu versiyu edva mozhno ispol'zovat': slishkom medlennaya, slishkom bol'shaya, slishkom slozhnaya v primenenii, ili vse eto vmeste. 11.4 Otbrosit' i pereproektirovat' mozhno vse srazu, a mozhno po chastyam, no vse ravno eto pridetsya sdelat'. 11.5 Postavka pervoj sistemy (hlama) klientu pozvolyaet vyigrat' vremya, no proishodit eto cenoj muchenij pol'zovatelej, otvlecheniya razrabotchikov, podderzhivayushchih sistemu vo vremya pereproektirovaniya i durnoj reputacii produkta, kotoruyu budet trudno pobedit'. 11.6 Poetomu planirujte vybrosit' pervuyu versiyu - vam vse ravno pridetsya eto sdelat'. 11.7 "Programmist postavlyaet udovletvorenie potrebnosti pol'zovatelya, a ne kakoj-to osyazaemyj produkt" (Kosgrouv). 11.8 Kak fakticheskie potrebnosti pol'zovatelya, tak i ponimanie im svoih potrebnostej menyayutsya vo vremya sozdaniya, testirovaniya i ispol'zovaniya programmy. 11.9 Podatlivost' i neosyazaemost' programmnogo produkta pobuzhdayut ego sozdatelej (isklyuchitel'no) k vechnomu izmeneniyu trebovanij. 11.10 Nekotorye zakonnye izmeneniya v zadachah (i strategiyah razrabotki) neizbezhny, i luchshe podgotovit'sya k nim zaranee, chem predpolagat', chto ih ne budet. 11.11 Sposoby proektirovaniya sistemy s uchetom budushchih izmenenij, osobenno strukturnoe programmirovanie s tshchatel'nym dokumentirovaniem interfejsov modulej, horosho izvestny, no ne vsegda primenyayutsya. Polezno takzhe, gde tol'ko mozhno, ispol'zovat' tehnologii tablichnogo upravleniya. (Takaya tehnika blagodarya stoimosti i razmeru pamyati v nastoyashchee vremya primenyaetsya vse bolee uspeshno.) 11.12 Dlya sokrashcheniya vnosimyh pri izmeneniyah oshibok sleduet ispol'zovat' yazyki vysokogo urovnya, operacii vremeni kompilyacii, vstraivanie ssylok na ob®yavleniya i tehniku samodokumentirovaniya. 11.13 Vnosite izmeneniya kvantami v horosho opredelennye numerovannye versii. (Sejchas eto obychnaya praktika.) Planirujte organizaciyu dlya izmenenij 11.14 "Nezhelanie programmistov dokumentirovat' proekt proishodit ne stol'ko ot leni, skol'ko ot neuverennosti, stoit li svyazyvat' sebya otstaivaniem reshenij, kotorye, kak znaet proektirovshchik, yavlyayutsya predvaritel'nymi" (Kosgrouv). 11.15 Sozdavat' organizacionnuyu strukturu s uchetom vneseniya v budushchem izmenenij znachitel'no trudnee, chem proektirovat' sistemu s uchetom budushchih izmenenij. 11.16 Rukovoditel' proekta dolzhen stremit'sya k tomu, chtoby ego menedzhery i tehnicheskij personal byli nastol'ko vzaimozamenyaemy, naskol'ko pozvolyayut ih sposobnosti. V chastnosti, nuzhno imet' vozmozhnost' legko perevodit' lyudej s tehnicheskoj na upravlencheskuyu rabotu i obratno. 11.17 Prepyatstviya k podderzhaniyu effektivnoj organizacii s dvojnoj sluzhebnoj lestnicej yavlyayutsya sociologicheskimi. Neobhodimo postoyanno bditel'no i energichno borot'sya s nimi. 11.18 Legko ustanovit' sootvetstvuyushchie razmery zhalovan'ya dlya sootvetstvuyushchih stupenek dvojnoj lestnicy, no trebuetsya prinyat' mery, chtoby dat' im sootvetstvuyushchij prestizh: odinakovye ofisy, odinakovye sluzhby podderzhki, v znachitel'noj mere kompensiruyushchie upravlencheskuyu deyatel'nost'. 11.19 Organizaciya po tipu operacionnoj brigady pozvolyaet aktivno reshat' vse storony etoj problemy. |to dejstvitel'no dolgosrochnoe reshenie problemy gibkoj organizacii. Dva shaga vpered, shag nazad: soprovozhdenie programm 11.20 Soprovozhdenie programmy v korne otlichaetsya ot soprovozhdeniya apparatnoj chasti; ono sostoit, glavnym obrazom, iz izmenenij, ispravlyayushchih konstruktivnye defekty, vklyuchenie dopolnitel'nyh funkcij ili adaptaciyu k izmeneniyam sredy ispol'zovaniya ili konfiguracii. 11.21 Stoimost' pozhiznennogo soprovozhdeniya shiroko ispol'zuemoj programmy obychno sostavlyaet 40 i bolee procentov stoimosti ee razrabotki. 11.22 Stoimost' soprovozhdeniya sil'no zavisit ot chisla pol'zovatelej: chem bol'she pol'zovatelej, tem bol'she oshibok oni nahodyat. 11.23 Kempbel otmechaet interesnuyu krivuyu vzleta i padenij obnaruzhivaemyh oshibok v techenie zhizni produkta. 11.24 Ispravlenie odnoj oshibki s bol'shoj veroyatnost'yu (ot 20 do 50 procentov) vnosit druguyu. 11.25 Posle kazhdogo ispravleniya nuzhno prognat' ves' nabor kontrol'nyh primerov, po kotorym sistema proveryalas' ran'she, chtoby ubedit'sya, chto ona kakim-nibud' neponyatnym obrazom ne povredilas'. 11.26 Metody razrabotki programm, pozvolyayushchie isklyuchit' ili po krajnej mere vyyavit' pobochnye effekty, mogut rezko snizit' stoimost' soprovozhdeniya. 11.27 To zhe mozhno skazat' o metodah realizacii proektov men'shim chislom interfejsov i men'shim kolichestvom oshibok. SHag vpered, shag nazad: entropiya sistemy s techeniem vremeni rastet 11.28 Leman i Beladi schitayut, chto obshchee kolichestvo modulej rastet linejno s nomerom versii operacionnoj sistemy (OS/360), no chisli modulej, zatronutyh izmeneniyami, rastet eksponencial'no v zavisimosti ot nomera versii. 11.29 Vse ispravleniya imeyut tendenciyu k razrusheniyu struktury, uvelicheniyu entropii i dezorganizacii sistemy. Dazhe samoe iskusnoe soprovozhdenie programmy tol'ko otdalyaet moment poverzheniya ee v sostoyanie neispravimogo haosa, vyhodom iz kotorogo yavlyaetsya povtornoe proektirovanie s samogo nachala. (Inogda real'naya neobhodimost' obnovleniya programmy, naprimer, s cel'yu povysheniya proizvoditel'nosti, vyzyvaet neobhodimost' izmeneniya vnutrennih granic struktur. CHasto ishodnye granicy sluzhat prichinoj vyyavlyayushchihsya vposledstvii nedostatkov.) Glava 12. Ostryj instrument 12.1 Menedzher proekta dolzhen ustanovit' principy i vydelit' resursy dlya razrabotki obshcheupotreblyaemyh instrumentov, v to zhe vremya on dolzhen priznat' neobhodimost' v personalizirovannyh instrumentah. 12.2 Brigadam, razrabatyvayushchim operacionnye sistemy, neobhodima dlya otladki sobstvennaya celevaya mashina. Dlya nee trebuetsya skoree maksimum pamyati, chem maksimum skorosti, i sistemnyj programmist dlya podderzhki standartnogo programmnogo obespecheniya. 12.3 Mashina dlya otladki ili ee programmnoe obespechenie dolzhny imet' instrument dlya avtomaticheskogo podscheta i izmeneniya vseh vidov parametrov programmy. 12.4 Potrebnost' v celevoj mashine opisyvaetsya specificheskoj krivoj: posle nizkoj aktivnosti sleduet vzryvnoj rost, kotoryj potom vyravnivaetsya. 12.5 Sistemnoj otladkoj, kak astronomiej, vsegda zanimalis' preimushchestvenno po nocham. 12.6 Vopreki teorii, vydelenie vremeni celevoj mashiny odnoj brigade znachitel'nymi blokami okazalos' luchshim variantom planirovaniya vremeni, chem cheredovanie ispol'zovaniya mashiny brigadami. 12.7 |tot predpochtitel'nyj pri nehvatke komp'yuterov metod planirovaniya vremeni perezhil 20 let (s 1975 goda) tehnologicheskih izmenenij, poskol'ku yavlyaetsya naibolee produktivnym. (I ostaetsya im v 1995 godu.) 12.8 Esli celevoj komp'yuter yavlyaetsya novym, neobhodim ego logicheskij emulyator. Ego mozhno poluchit' ran'she, i on obespechivaet nadezhnuyu mashinu dlya otladki dazhe posle togo, kak postavlyaetsya nastoyashchaya mashina. 12.9 Glavnuyu biblioteku programm nuzhno razdelit' na: 1) nabor individual'nyh "igrovyh ploshchadok", 2) podbiblioteku sistemnoj integracii, prohodyashchuyu sistemnoe testirovanie i 3) versiyu-reliz. Formal'noe razdelenie i peremeshchenie obespechivayut kontrol'. 12.10 Instrument, obespechivayushchij naibol'shuyu ekonomiyu truda v programmnom proekte, - eto, navernoe, sistema redaktirovaniya tekstov. 12.11 Ob®emistost' sistemnoj dokumentacii sozdaet novyj tip nepostizhimosti (sm., naprimer Unix), no eto znachitel'no predpochtitel'nee, chem bolee rasprostranennyj krajnij nedostatok dokumentacii. 12.12 Sozdajte emulyator proizvoditel'nosti snaruzhi vnutr', sverhu vniz. Nachnite rabotu s nim kak mozhno ran'she. Prislushajtes' k tomu, chto on vam skazhet. YAzyki vysokogo urovnya 12.13 Tol'ko len' i inertnost' prepyatstvuyut povsemestnomu primeneniyu yazykov vysokogo urovnya i interaktivnogo programmirovaniya. (No segodnya oni prinyaty povsemestno.) 12.14 YAzyk vysokogo urovnya sposobstvuet ne tol'ko uvelicheniyu proizvoditel'nosti, no i otladke. Men'she oshibok i legche poisk. 12.15 Prezhnie vozrazheniya, svyazannye s funkcional'nost'yu, razmerom i skorost'yu rezul'tiruyushchej programmy ustareli blagodarya razvitiyu yazykov i tehnologii kompilyacii. 12.16 Segodnya edinstvennyj podhodyashchij kandidat dlya sistemnogo programmirovaniya - PL/I. (Bol'she ne sootvetstvuet dejstvitel'nosti.) Interaktivnoe programmirovanie 12.17 V nekotoryh prilozheniyah paketnye sistemy nikogda ne budut vytesneny interaktivnymi sistemami. (Po-prezhnemu verno.) 12.18 Otladka - eto tyazhelaya i dolgaya chast' sistemnogo programmirovaniya, i medlennaya oborachivaemost' yavlyaetsya proklyatiem otladki. 12.19 Est' svidetel'stva tomu, chto interaktivnoe programmirovanie po krajnej mere udvaivaet skorost' sistemnogo programmirovaniya. Glava 13. Celoe i chasti 13.1 Detal'naya i staratel'naya prorabotka arhitektury soglasno glavam 4, 5 i 6 ne tol'ko uproshchaet ispol'zovanie produkta, no takzhe oblegchaet ego razrabotku i delaet menee podverzhennym oshibkam. 13.2 Vysockij govorit, chto "ochen' mnogie neudachi svyazany imenno s temi aspektami, kotorye byli ne vpolne specificirovany". 13.3 Zadolgo do vsyakogo napisaniya programmy specifikaciya dolzhna byt' peredana storonnej gruppe testirovaniya dlya tshchatel'nogo rassmotreniya polnoty i yasnosti. Sami razrabotchiki sdelat' eto ne mogut. 13.4 "Nishodyashchee proektirovanie Virta (s poshagovym utochneniem) yavlyaetsya samoj vazhnoj novoj formalizaciej programmirovaniya za desyatiletie (1965- 1975)." 13.5 Virt propoveduet ispol'zovanie na kazhdom shage notacii vozmozhno bolee vysokogo poryadka. 13.6 Horoshee nishodyashchee proektirovanie pomogaet izbegat' oshibok blagodarya chetyrem obstoyatel'stvam. 13.7 Inogda prihoditsya vozvrashchat'sya nazad, otbrasyvat' samyj verhnij uroven' i nachinat' vse snachala. 13.8 Strukturnoe programmirovanie, t.e. razrabotka programm, upravlyayushchie struktury kotoryh sostoyat tol'ko iz zadannogo nabora operatorov, vozdejstvuyushchih na bloki koda (v protivopolozhnost' besporyadochnym perehodam), daet vernyj sposob izbezhat' oshibok i predstavlyaet soboj pravil'nyj sposob myshleniya. 13.9 |ksperimental'nye dannye Golda pokazyvayut, chto vo vremya pervogo dialoga kazhdogo seansa dostigaetsya vtroe bol'shij progress v interaktivnoj otladke, chem pri posleduyushchih dialogah. Vse zhe polezno tshchatel'no splanirovat' otladku, prezhde chem registrirovat'sya na mashine. (YA polagayu, chto eto polezno do sih por, v 1995 godu.) 13.10 YA schitayu, chto dlya pravil'nogo ispol'zovaniya horoshej sistemy (interaktivnoj otladki s bystroj reakciej) na kazhdye dva chasa raboty za stolom dolzhno prihodit'sya dva chasa raboty na mashine: odin chas - na podchistki i dokumentirovanie posle pervogo seansa, i odin chas - na planirovanie izmenenij i testov ocherednogo seansa. 13.11 Sistemnaya otladka (v otlichie ot otladki komponentov) zanimaet bol'she vremeni, chem ozhidaetsya. 13.12 Trudnost' sistemnoj otladki opravdyvaet tshchatel'nuyu sistematichnost' i planovost'. 13.13 Sistemnuyu otladku nuzhno nachinat', tol'ko ubedivshis' v rabotosposobnosti komponentov, (v protivopolozhnost' podhodu "svinti i poprobuj" i nachalu sistemnoj otladki pri izvestnyh, no ne ustranennyh oshibkah v komponentah). (|to osobenno spravedlivo dlya brigad.) 13.14 Rekomenduetsya sozdat' bol'shoe okruzhenie i mnogo proverochnogo koda i "lesov" dlya otladki, vozmozhno, na 50 procentov bol'she, chem sam otlazhivaemyj produkt. 13.15 Neobhodimo kontrolirovat' izmeneniya i versii, pri etom chleny komandy pust' igrayut so svoimi kopiyami na "ploshchadkah dlya igr". 13.16 Vo vremya sistemnogo testirovaniya dobavlyajte komponenty po odnomu. 13.17 Leman i Beladi svidetel'stvuyut, chto kvant izmenenij dolzhen byt' libo bol'shim i vnosit'sya redko, libo ochen' malen'kim - i chasto. Poslednij sluchaj bolee chrevat neustojchivost'yu. (V Microsoft rabotayut malen'kimi chastymi kvantami. Razrabatyvaemaya sistema sobiraetsya zanovo kazhdye sutki.) Glava 14. Nazrevanie katastrofy 14.1 "Kak okazyvaetsya, chto proekt zapazdyvaet na odin god? ...Snachala on zapazdyvaet na odin den'." 14.2 Otstavanie, rastushchee ponemnogu izo dnya v den', trudnee raspoznat', trudnee predotvratit', trudnee vypravit'. 14.3 CHtoby upravlyat' bol'shim proektom po zhestkomu grafiku, nado prezhde vsego imet' grafik, sostoyashchij iz veh i sootvetstvuyushchih im dat. 14.4 Vehi dolzhny byt' konkretnymi, specificheskimi, izmerimymi sobytiyami, opredelennymi s predel'noj tochnost'yu. 14.5 Programmist redko lzhet otnositel'no dvizheniya vehi, esli veha ocherchena rezko, on ne mozhet obmanyvat' sebya. 14.6 Issledovaniya povedeniya pravitel'stvennyh podryadchikov po provedeniyu ocenok v krupnyh proektah pokazali, chto ocenki srokov raboty, tshchatel'no peresmatrivaemye kazhdye dve nedeli, neznachitel'no menyayutsya po mere priblizheniya nachala rabot, chto vo vremya rabot pereocenki uverenno snizhayutsya i chto nedoocenki ne menyayutsya, poka do zaplanirovannogo sroka okonchaniya rabot ne ostaetsya okolo treh nedel'. 14.7 Hronicheskoe otstavanie ot grafika ubivaet moral'nyj duh. (Dzhim Makkarti iz Microsoft govorit: "Esli vy propustili odin krajnij srok, bud'te uvereny, chto propustite i vtoroj."2) 14.8 Dlya vydayushchihsya komand programmistov harakterna energiya, kak i dlya vydayushchihsya bejsbol'nyh komand. 14.9 Nichto ne zamenit grafik s kriticheskimi putyami, chtoby opredelit', kakoe otstavanie vo chto obojdetsya. 14.10 Podgotovka diagrammy kriticheskih putej est' samaya cennaya chast' ee primeneniya, poskol'ku opredelenie topologii seti, ukazanie zavisimostej v nej i ocenivanie putej vynuzhdayut osushchestvit' bol'shoj ob®em ochen' konkretnogo planirovaniya na samyh rannih stadiyah proekta. 14.11 Pervaya diagramma vsegda uzhasna, i dlya sozdaniya vtoroj prihoditsya proyavit' mnogo izobretatel'nosti. 14.12 Diagramma kriticheskih putej daet otpor demoralizuyushchej ogovorke "drugaya chast' tozhe zapazdyvaet". 14.13 Kazhdomu nachal'niku nuzhny dva vida dannyh: informaciya o sryvah plana, kotoraya trebuet vmeshatel'stva, i kartina sostoyaniya del, chtoby byt' osvedomlennym i imet' rannee preduprezhdenie. 14.14 Poluchit' pravdivuyu kartinu sostoyaniya del nelegko, poskol'ku u podchinennyh menedzherov est' osnovaniya ne delit'sya svoimi dannymi. 14.15 Nepravil'nymi dejstviyami nachal'nik mozhet obespechit' utaivanie vsej kartiny sostoyaniya del; naprotiv, tshchatel'noe rassmotrenie otchetov bez paniki i vmeshatel'stva pooshchryaet chestnyj doklad. 14.16 Neobhodimo imet' metodologiyu obzora, s pomoshch'yu kotoroj podlinnoe polozhenie veshchej stanovitsya izvestnym vsem igrokam. Glavnym dlya etoj celi yavlyaetsya grafik s vehami i dokument o zavershenii. 14.17 Vysockij: "YA nashel, chto udobno imet' v otchete o sostoyanii rabot dve daty - "planovuyu" (datu nachal'nika) i "ocenivaemuyu" (datu menedzhera nizshego zvena). Menedzher proekta dolzhen ostorozhno otnosit'sya k ocenivaemym datam." 14.18 Nebol'shaya gruppa planirovaniya i kontrolya, dayushchaya otchety o prohozhdenii veh, neocenima pri rabote nad bol'shim proektom. Glava 15. Obratnaya storona 15.1 Dlya programmnogo produkta storona, obrashchennaya k pol'zovatelyu, - dokumentaciya - stol' zhe vazhna, kak i storona, obrashchennaya k mashine. 15.2 Dazhe dlya programm, napisannyh isklyuchitel'no dlya sebya, tekstual'naya dokumentaciya neobhodima: pamyat' mozhet izmenit' avtoru-pol'zovatelyu. 15.3 V celom, prepodavatelyam i menedzheram ne udalos' vospitat' na vsyu zhizn' u programmistov uvazhenie k dokumentacii, preodolevayushchee len' i press grafika rabot. 15.4 |ta neudacha vyzvana ne stol'ko nedostatkom staraniya ili krasnorechiya, skol'ko nesposobnost'yu pokazat', kak provodit' dokumentirovanie effektivno i ekonomichno. 15.5 Dokumentaciya chasto stradaet otsutstviem obshchego obzora. Posmotrite snachala izdaleka, a potom medlenno priblizhajtes'. 15.6 Vazhnaya dokumentaciya pol'zovatelya dolzhna byt' vcherne napisana do razrabotki programmy, poskol'ku v nej soderzhatsya osnovnye planovye resheniya. V nej dolzhny byt' opisany devyat' predmetov (sm. tekst glavy). 15.7 Programmu nuzhno postavlyat' s neskol'kimi kontrol'nymi primerami: s dopustimymi vhodnymi dannymi, dopustimymi na grani vozmozhnostej, i s yavno nedopustimymi vhodnymi dannymi. 15.8 Vnutrennyaya dokumentaciya programmy, prednaznachennaya tomu, kto dolzhen ee modificirovat', takzhe dolzhna soderzhat' tekstual'nyj obzor, v kotorom dolzhny byt' opisany pyat' predmetov (sm. glavu). 15.9 Blok-shema chashche vsego naprasno vklyuchaetsya v dokumentaciyu. Podrobnaya poshagovaya blok-shema ustarela blagodarya pis'mennym yazykam vysokogo urovnya. (Blok-shema - graficheskij yazyk vysokogo urovnya.) 15.10 Redko trebuetsya blok-shema bolee chem na odnu stranicu - esli ona voobshche nuzhna. (Standart MILSPEC zdes' sovershenno ne prav.) 15.11 CHto dejstvitel'no neobhodimo - eto strukturnyj graf programmy bez soblyudeniya standartov sostavleniya blok-shem ANSI. 15.12 CHtoby obespechit' obnovlenie dokumentacii, vazhno vklyuchit' ee v ishodnyj tekst programmy, a ne derzhat' otdel'nym dokumentom. 15.13 Dlya oblegcheniya truda vedeniya dokumentacii est' tri vazhnyh pravila: - Kak mozhno bol'she ispol'zujte dlya dokumentirovaniya obyazatel'nye chasti programmy, takie kak imena i ob®yavleniya. - Ispol'zujte svobodnoe prostranstvo i format, chtoby pokazat' otnosheniya podchinennosti, vlozhennosti i uluchshit' chitaemost'. - Vstavlyajte v programmu neobhodimuyu tekstovuyu dokumentaciyu v vide paragrafov kommentariev, osobenno v zagolovkah modulej. 15.14 V dokumentacii, kotoroj budut pol'zovat'sya pri modifikacii programmy, ob®yasnyajte ne tol'ko "kak", no i "pochemu". Naznachenie yavlyaetsya reshayushchim dlya ponimaniya. Dazhe yazyki vysokogo urovnya sovsem ne peredayut znacheniya. 15.15 Metody samodokumentiruyushchegosya programmirovaniya naibolee polezny i moshchny pri ispol'zovanii yazykov vysokogo urovnya. |pilog k pervomu izdaniyu E.1 Programmnye sistemy yavlyayutsya, vozmozhno, samymi slozhnymi i zaputannymi (v smysle chisla razlichnyh tipov sostavlyayushchih) sozdaniyami cheloveka. E.2 Smolyanaya yama programmnoj inzhenerii eshche dolgoe vremya budet ostavat'sya vyazkoj. Glava 19 "Mificheskij cheloveko-mesyac" dvadcat' let spustyaYA ne znayu drugogo sposoba sudit' o budushchem, kak s pomoshch'yu proshlogo. PATRIK GENRI Opirayas' na proshloe, nevozmozhno planirovat' budushchee. |DMUND BERK Dlya chego ponadobilos' yubilejnoe dvadcatoe izdanie? Samolet gudel v nochi, napravlyayas' k Lagardii. Oblaka i sumrak skryli vse interesnoe dlya glaza. Dokument, kotoryj ya chital, byl neinteresnym. Odnako mne ne bylo skuchno. Sidyashchij ryadom poputchik chital "Mificheskij cheloveko-mesyac", i ya ozhidal, kogda slovom ili zhestom on vydast svoe vpechatlenie. V konce koncov, kogda my uzhe vyrulivali k vyhodu, ya ne vyderzhal: - Kak vam eta kniga? Sovetuete prochest'? - Hm, v nej net nichego, chego ya ne znal by ran'she. YA reshil ne predstavlyat'sya. Pochemu "Mificheskij cheloveko-mesyac" vyzhil? Pochemu s nim do sih por schitayutsya v sovremennoj praktike programmirovaniya? Pochemu ego chitatel'skaya auditoriya vyhodit za predely soobshchestva programmistov-razrabotchikov, a kniga porozhdaet stat'i, citaty i pis'ma ne tol'ko razrabotchikov programm, no i yuristov, vrachej, psihologov, sociologov? Kakim obrazom kniga, napisannaya 20 let nazad ob opyte razrabotki programm, imevshem mesto 30 let nazad, mozhet do sih por byt' aktual'noj i dazhe poleznoj? Soglasno odnomu iz ob®yasnenij, kotorye mozhno uslyshat', razrabotka programmnogo obespecheniya kak disciplina ne poluchila normal'nogo i pravil'nogo razvitiya. V podderzhku etoj tochki zreniya chasto ukazyvayut na nesootvetstvie rosta proizvoditel'nosti truda programmistov i effektivnosti proizvodstva komp'yuterov, vyrosshej v tysyachi raz za poslednie dva desyatiletiya. Kak ob®yasnyaetsya v glave 16, anomaliya sostoit ne v zamedlennom razvitii programmirovaniya, a v besprecedentnom v istorii chelovechestva vzryve komp'yuternyh tehnologij. V celom, prichina etogo v postepennom perehode proizvodstva komp'yuterov iz sborochnogo proizvodstva v obrabatyvayushchee, iz trudoemkogo proizvodstva v kapitaloemkoe. Razrabotka zhe apparatnogo i programmnogo obespecheniya, v otlichie ot proizvodstva, ostaetsya po svoej suti trudoemkoj. Vtoroe chasto vydvigaemoe ob®yasnenie glasit, chto "Mificheskij cheloveko-mesyac" lish' sluchajno kasaetsya razrabotki programmnogo obespecheniya, a v osnovnom on napisan o gruppovoj razrabotke chego by to ni bylo. Dolya pravdy v etom est'. V predislovii k izdaniyu 1975 goda skazano, chto upravlenie programmnym proektom imeet bol'she shodstva s lyubym drugim upravleniem, chem iznachal'no schitaetsya bol'shinstvom programmistov. YA do sih por tak schitayu. Istoriya chelovechestva - eto p'esa, v kotoroj syuzhety postoyanny, scenarii medlenno menyayutsya s razvitiem kul'tury, a dekoracii menyayutsya nepreryvno. Poetomu v HH veke my uznaem sebya v SHekspire, Gomere i Biblii. Poetomu v toj mere, v kakoj "MCH-M" napisan o lyudyah, on ustarevaet medlenno. Kakovy by ni byli prichiny, knigu prodolzhayut pokupat' i prisylayut mne zamechaniya, kotorye ya cenyu. Menya chasto sprashivayut: "Kak vy schitaete, v chem vy togda oshiblis'? CHto ustarelo v nashi dni? CHto dejstvitel'no novoe poyavilos' v mire razrabotki programm?" |ti chetkie voprosy vpolne zakonny, i ya postarayus' otvetit' na nih. Ne v takom, pravda, poryadke, no po gruppam tem. Prezhde vsego, posmotrim, chto bylo vernym v moment napisaniya i ostalos' takovym do sih por. Central'nyj argument: konceptual'naya celostnost' i arhitektor Konceptual'naya celostnost'. CHistyj i elegantnyj programmnyj produkt dolzhen predstavit' svoim pol'zovatelyam soglasovannuyu ideal'nuyu model' prilozheniya, strategij osushchestvleniya prilozheniya i taktiki pol'zovatel'skih interfejsov, ispol'zuemoj pri zadanii dejstvij i parametrov. Konceptual'naya celostnost' produkta v vospriyatii pol'zovatelya yavlyaetsya vazhnejshim faktorom, vliyayushchim na prostotu ispol'zovaniya. (Est', konechno, i drugie faktory. Vazhnym primerom yavlyaetsya edinoobrazie pol'zovatel'skogo interfejsa v prilozheniyah dlya Macintosh. Bolee togo, mozhno sozdat' soglasovannye interfejsy, yavlyayushchiesya tem ne menee, sovershenno neuklyuzhimi. Naprimer MS-DOS.) Est' mnogochislennye primery elegantnyh programmnyh produktov, sozdannyh odnim ili dvumya lyud'mi. Tak delaetsya bol'shaya chast' chisto intellektual'nyh produktov, takih kak knigi ili muzykal'nye proizvedeniya. Odnako vo mnogih promyshlennyh oblastyah processy razrabotki produkta ne mogut osushchestvlyat'sya na osnove stol' prostogo podhoda k konceptual'noj celostnosti. Konkurenciya vynuzhdaet k speshke. Vo mnogih sovremennyh tehnologiyah konechnyj produkt obladaet bol'shoj slozhnost'yu, i proektirovanie neizbezhno trebuet mnogih cheloveko-mesyacev truda. Dlya programmnyh produktov harakterny kak slozhnost', tak i napryazhennost' grafika, obuslovlennaya konkurenciej. Takim obrazom, vsyakij dostatochno bol'shoj ili srochnyj produkt, trebuyushchij usilij mnogih lyudej, stalkivaetsya so specificheskoj trudnost'yu: rezul'tat dolzhen konceptual'no soglasovyvat'sya s razumom odinochnogo pol'zovatelya i v to zhe vremya proektirovat'sya usiliyami neskol'kih razumov. Kak organizovat' proektirovanie, chtoby dostich' takoj konceptual'noj celostnosti? |to central'nyj vopros "MCH-M". Odin iz ego tezisov glasit, chto sushchestvuyut kachestvennye razlichiya mezhdu upravleniem bol'shimi i malen'kimi programmnymi proektami - lish' v silu chisla rabotayushchih nad nimi golov. Dlya dostizheniya soglasovannosti neobhodimy obdumannye i dazhe geroicheskie dejstviya. Arhitektor. S chetvertoj po shestuyu glavu ya dokazyvayu, chto samoe vazhnoe - naznachit' odnogo cheloveka arhitektorom produkta, otvetstvennym za vse ego storony, vosprinimaemye pol'zovatelem. Arhitektor formiruet i imeet v svoem vladenii obshchedostupnuyu ideal'nuyu model' produkta, s pomoshch'yu kotoroj pol'zovatelyu budet ob®yasneno ego primenenie. V ee sostav vhodit podrobnoe ukazanie vseh ego funkcij i sredstv vyzova i upravleniya. Arhitektor takzhe dejstvuet v interesah pol'zovatelya pri poiske kompromissa mezhdu funkciyami, tehnicheskim harakteristikami, razmerom, stoimost'yu i vypolneniem grafika rabot. Vypolnenie etoj zadachi trebuet polnoj zanyatosti, i tol'ko v ochen' malen'kih gruppah mozhet byt' sovmeshcheno s dolzhnost'yu rukovoditelya. Arhitektora mozhno sravnivat' s rezhisserom, a menedzhera - s prodyuserom kinokartiny. Otdelenie arhitektury ot razrabotki i realizacii. CHtoby sdelat' vozmozhnym osushchestvlenie arhitektorom svoej glavnoj zadachi, neobhodimo otdelit' arhitekturu, t.e. opredelenie produkta v vospriyatii pol'zovatelya, ot ego razrabotki. Arhitektura i razrabotka opredelyayut chetkuyu gran' mezhdu raznymi chastyami zadachi proektirovaniya, i po kazhduyu storonu etoj grani lezhit bol'shaya rabota. Rekursivnost' arhitektury. V ochen' bol'shih proektah odnomu cheloveku ne spravit'sya so vsej arhitekturoj, dazhe esli on izbavlen ot vseh zabot, svyazannyh s razrabotkoj. Poetomu glavnyj arhitektor sistemy dolzhen razbit' celoe na podsistemy. Granicy podsistem dolzhny byt' provedeny tak, chtoby interfejsy mezhdu nimi byli minimal'ny i legche vsego strogo opredelyaemy. Togda u kazhdoj chasti mozhet byt' svoj arhitektor, podchinyayushchijsya glavnomu arhitektoru sistemy v otnoshenii arhitektury. Ochevidno, pri neobhodimosti etot process mozhet byt' prodolzhen rekursivno. Segodnya ya ubezhden bolee chem kogda-libo. Konceptual'naya celostnost' yavlyaetsya vazhnejshim usloviem kachestva produkta. Nalichie sistemnogo arhitektora est' vazhnejshij shag v napravlenii konceptual'noj celostnosti. |ti principy ni v koej mere ne ogranichivayutsya razrabotkoj programmnogo obespecheniya, a spravedlivy pri proektirovanii lyuboj slozhnoj konstrukcii, bud' to komp'yuter, samolet, strategicheskaya oboronnaya iniciativa ili sistema global'noj navigacii. Posle prepodavaniya v bolee chem 20 laboratoriyah razrabotki programmnogo obespecheniya ya stal nastaivat', chtoby gruppy uchashchihsya, dazhe iz chetyreh chelovek, vybirali menedzhera i otdel'no - arhitektora. Razdelenie funkcij v takih malen'kih gruppah mozhet pokazat'sya neskol'ko chrezmernym trebovaniem, no, po moim nablyudeniyam, eto opravdano i sposobstvuet dostizheniyu uspeha. |ffekt vtoroj sistemy: funkcional'nost' i ugadyvanie chastoty Proektirovanie dlya bol'shih grupp pol'zovatelej. Odnim iz posledstvij revolyucii, proizvedennoj personal'nymi komp'yuterami, yavlyaetsya vse vozrastayushchee, po krajnej mere v oblasti obrabotki delovyh dannyh, vytesnenie zakaznyh programm korobochnymi programmnymi paketami. Bolee togo, standartnye programmnye pakety prodayutsya sotnyami tysyach i dazhe millionami ekzemplyarov. Sistemnye arhitektory programm, postavlyaemyh vmeste s mashinoj, vsegda dolzhny byli sozdavat' proekt, orientirovannyj na bol'shuyu amorfnuyu massu pol'zovatelej, a ne na otdel'noe opredelennoe prilozhenie v odnoj kompanii. Teper' takaya zadacha vstaet pered ochen' mnogimi arhitektorami. Paradoks sostoit v tom, chto sproektirovat' instrument obshchego naznacheniya, nezheli specializirovannyj, gorazdo trudnee imenno potomu, chto nuzhno pridat' ves razlichayushchimsya potrebnostyam raznyh pol'zovatelej. V pogone za funkcional'nost'yu. Arhitektor instrumenta obshchego naznacheniya, takogo, naprimer, kak elektronnaya tablica ili tekstovyj redaktor, podverzhen sil'nomu soblaznu peregruzit' produkt funkciyami predel'noj poleznosti cenoj snizheniya proizvoditel'nosti i dazhe prostoty ispol'zovaniya. Vnachale privlekatel'nost' predlagaemyh vozmozhnostej kazhetsya ochevidnoj. Rasplata proizvoditel'nost'yu stanovitsya ochevidnoj lish' pri sistemnom testirovanii. Utrata prostoty ispol'zovaniya kovarno podkradyvaetsya po mere togo, kak nebol'shimi porciyami dobavlyayutsya novye funkcii, a rukovodstva pol'zovatelya vse bolee razbuhayut.1 Soblazn osobenno velik v otnoshenii dolgozhivushchih massovyh produktov, razvivavshihsya na protyazhenii ryada pokolenij. Milliony pokupatelej trebuyut soten novyh vozmozhnostej. Vsyakaya pros'ba svidetel'stvuet o nalichii sprosa na rynke. CHasto arhitektor pervonachal'noj sistemy uzhe ushel v pohod za novoj slavoj, i arhitektura okazalas' v rukah lyudej s men'shim opytom vzveshennogo predstavleniya obshchih interesov pol'zovatelej. V nedavnej recenzii na Microsoft Word 6.0 skazano: "Perepolnen vozmozhnostyami; obnovlenie zamedleno peregruzhennost'yu... Krome togo, Word 6.0 zanimaet mnogo mesta i medlenno rabotaet." S neudovol'stviem otmechaetsya, chto Word 6.0 zanimaet 4 Mbajt pamyati i soobshchaetsya, chto iz-za bogatyh dopolnitel'nyh funkcional'nyh vozmozhnostej "dazhe Macintosh IIfx edva prigoden dlya vypolneniya Word 6".2 Opredelenie gruppy pol'zovatelej. CHem krupnee i amorfnee gruppa predpolagaemyh pol'zovatelej, tem bolee neobhodimo yavno ee opredelit', esli vy namereny dostich' konceptual'noj celostnosti. U kazhdogo chlena gruppy proektirovshchikov navernyaka est' neyavnyj myslennyj obraz pol'zovatelya, i vse obrazy budut otlichat'sya drug ot druga. Poskol'ku predstavlenie arhitektora o pol'zovatele yavno ili podsoznatel'no okazyvaet vliyanie na vse arhitekturnye resheniya, vazhno, chtoby komanda proektirovshchikov prishla k edinomu obshchemu obrazu. Dlya etogo neobhodimo sostavit' spisok priznakov predpolagaemyh pol'zovatelej, ukazav v nem: - kto oni takie, - chto im nuzhno, - chto, po ih mneniyu, im nuzhno, - chego oni hotyat. CHastoty. Dlya lyubogo programmnogo produkta kazhdaya harakteristika pol'zovatelya predstavlyaet soboj raspredelenie so mnozhestvom vozmozhnyh znachenij i sootvetstvuyushchimi chastotami. Kak arhitektoru poluchit' eti chastoty? Izuchenie etoj slabo ocherchennoj populyacii predstavlyaetsya somnitel'nym i dorogostoyashchim zanyatiem.3 S godami ya prishel k ubezhdeniyu, chto arhitektor dolzhen ugadat' ili, esli vam bol'she nravitsya, postulirovat' polnyj nabor priznakov i znachenij vmeste s chastotami dlya sozdaniya polnogo, yavnogo i obshchego dlya vseh opisaniya gruppy pol'zovatelej. Takaya neprivlekatel'naya procedura imeet ryad poleznyh posledstvij. Vo-pervyh, pri stremlenii tochno ugadat' chastoty arhitektor vynuzhden ochen' tshchatel'no obdumat', kakova vozmozhnaya gruppa pol'zovatelej. Vo-vtoryh, pri fiksacii chastot voznikaet obsuzhdenie, poleznoe dlya vseh uchastnikov i vyyavlyayushchee razlichiya v obrazah pol'zovatelya, imeyushchihsya u raznyh proektirovshchikov. V-tret'ih, yavnoe prisvoenie chastot sodejstvuyut ponimaniyu togo, kakie resheniya kakimi svojstvami gruppy pol'zovatelej obuslovleny. Dazhe takoj neformal'nyj analiz chuvstvitel'nosti prinosit pol'zu. Kogda obnaruzhivaetsya, chto ochen' vazhnye resheniya zavisyat ot nekotoryh specificheskih predpolozhenij, okazyvaetsya umestnym poluchit' bolee tochnye chislennye ocenki. (Razrabotannaya Dzheffom Konklinom (Jeff Conklin) sistema pozvolyaet formal'no i tochno proslezhivat' prinyatie proektnyh reshenij i dokumentirovat' ih osnovaniya.4 Mne ne prihodilos' eyu pol'zovat'sya, no dumayu, chto ona dolzhna byt' ochen' polezna.) Podvodya itogi: ustanovite predpolozhitel'nye priznaki gruppy pol'zovatelej. Gorazdo luchshe oshibat'sya, no vyrazhat'sya yasno, chem vyrazhat'sya tumanno. Kak naschet effekta vtoroj sistemy? Odin nablyudatel'nyj uchenyj zametil, chto "Mificheskij cheloveko-mesyac" rekomendoval na sluchaj neudachi dlya vsyakoj novoj sistemy planirovat' postavku vtoroj versii (sm. glava 11), kotoraya v glave 5 harakterizuetsya kak tayashchaya naibol'shie opasnosti. YA vynuzhden byl priznat', chto on menya "pojmal". Protivorechie skoree lingvisticheskoe, chem real'noe. "Vtoraya" sistema, opisyvaemaya v glave 5, - eto vtoraya sistema, vypuskaemaya v razvitie predydushchej s privlecheniem dopolnitel'nyh funkcij i ukrashenij. "Vtoraya" sistema v glave 11 - eto vtoraya popytka razrabotki pervoj vypuskaemoj sistemy. Ona razrabatyvaetsya v usloviyah vseh ogranichenij, nakladyvaemyh grafikom, sposobnostyami i nevedeniem, harakternymi dlya novyh proektov - ogranichenij, navyazyvayushchih disciplinu umerennosti. Triumf interfejsa WIMP Odnim iz naibolee vpechatlyayushchih yavlenij v programmirovanii za poslednie dvadcat' let byl triumf interfejsa, sostoyashchego iz okon, znachkov, menyu i ukazatelej (Windows, Icons, Menus, Pointers - WIMP). Segodnya on nastol'ko shiroko izvesten, chto ne trebuet opisaniya. Vpervye etu ideyu predstavili publike Dug |nglebart (Doug Englebart) s gruppoj kolleg iz Stendfordskogo nauchno- issledovatel'skogo instituta na Ob®edinennoj komp'yuternoj konferencii Zapada v 1968 godu.5 Ottuda idei perekochevali v issledovatel'skij centr Xerox v Palo- Al'to, gde oni realizovalis' na personal'noj rabochej stancii Alto, razrabotannoj Bobom Tejlorom (Bob Taylor) s sotrudnikami. Ih podhvatil Stiv Dzhobs dlya komp'yutera Apple Lisa - slishkom medlennogo dlya osushchestvleniya svoih voshititel'nyh koncepcij prostoty ispol'zovaniya. |ti koncepcii Dzhobs zatem voplotil v kommercheski uspeshnom Apple Macintosh v 1985 godu. Pozdnee oni byli prinyaty v Microsoft Windows dlya IBM PC i ego klonov. Moj primer budet bazirovat'sya na versii dlya Maka.6 Konceptual'naya celostnost' cherez metaforu. WIMP yavlyaetsya otlichnym primerom pol'zovatel'skogo interfejsa, obladayushchego konceptual'noj celostnost'yu, dostigaemoj prinyatiem znakomoj ideal'noj modeli - metafory rabochego stola, i ee tshchatel'nogo posledovatel'nogo razvitiya dlya ispol'zovaniya voploshcheniya v komp'yuternoj grafike. Naprimer, iz prinyatoj metafory neposredstvenno sleduet slozhno osushchestvimoe, no pravil'noe reshenie o perekrytii okon vmesto raspolozheniya ih odno ryadom s drugim. Vozmozhnost' menyat' razmer i formu okon yavlyaetsya posledovatel'nym rasshireniem, dayushchim pol'zovatelyu novye vozmozhnosti, obespechivaemye nositelem - komp'yuternoj grafikoj. U real'nyh bumag na stole nel'zya tak zhe legko menyat' razmer i formu. Buksirovka neposredstvenno vytekaet iz metafory; vybor znachkov s pomoshch'yu kursora yavlyaetsya pryamoj analogiej zahvata predmetov rukoj. Znachki i vlozhennye papki yavlyayutsya tochnymi analogami dokumentov na stole, kak i musornaya korzina. Idei vyrezaniya, kopirovaniya i vstavki tochno imitiruyut operacii, kotorye my obychno osushchestvlyaem s dokumentami na stole. Sledovanie metafore stol' bukval'no, a razvitie nastol'ko posledovatel'no, chto pol'zovatelej-novichkov reshitel'no korobit, kogda peretaskivanie znachka diskety v musornuyu korzinu privodit k izvlecheniyu diskety iz diskovoda. Esli by interfejs ne byl stol' edinoobrazno posledovatel'nym, eta (dovol'no nepriyatnaya) neposledovatel'nost' tak by ne razdrazhala. V kakih mestah interfejs WIMP vynuzhden daleko otojti ot metafory rabochego stola? Naibolee zametny dva otlichiya: menyu i rabota odnoj rukoj. Na real'nom rabochem stole s dokumentami osushchestvlyayut dejstviya, a ne prikazyvayut komu-to ili chemu-to osushchestvit' ih. A kogda komu-to daetsya ukazanie sovershit' dejstvie, komanda obychno ne vybiraetsya iz spiska, a pis'menno ili ustno podaetsya v vide glagola v povelitel'nom naklonenii: "pozhalujsta, podshejte eto v papku", "pozhalujsta, najdite predydushchie pis'ma" ili "pozhalujsta, peredajte eto Meri dlya prinyatiya mer". K sozhaleniyu, nadezhnaya interpretaciya komand v svobodnom formate na anglijskom yazyke, bud' oni v ustnom ili pis'mennom vide, nahoditsya za predelami nashih segodnyashnih vozmozhnostej. Poetomu proektirovshchiki interfejsa na dva shaga otoshli ot neposredstvennyh dejstvij pol'zovatelya s dokumentami. Oni mudro vzyali imevshijsya na obychnom rabochem stole obrazec vybora komand - otpechatannuyu "soprovodilovku", v kotoroj pol'zovatel' proizvodit vybor iz ogranichennogo menyu komand so standartnoj semantikoj. |tu ideyu oni prevratili v gorizontal'noe menyu s vertikal'no opuskayushchimisya podmenyu. Podacha komand i problema dvuh kursorov. Komandy yavlyayutsya povelitel'nymi predlozheniyami, v nih vsegda est' i obychno imeetsya pryamoe dopolnenie. Dlya lyubogo dejstviya nuzhno zadat' glagol i sushchestvitel'noe. Metafora ukazaniya govorit, chto dlya odnovremennogo zadaniya dvuh predmetov nuzhno imet' na ekrane dva raznyh kursora, upravlyaemyh svoimi myshami, odnoj - v pravoj ruke, drugoj - v levoj. V konce koncov, na fizicheskom stole my obychno rabotaem dvumya rukami. (Odnako odna ruka chasto priderzhivaet veshchi na meste, chto na komp'yuternom rabochem stole proishodit po umolchaniyu.) Mozg, konechno, prisposoblen k dejstviyam dvumya rukami: my sistematicheski ispol'zuem dve ruki pri vvode s klaviatury, ezde na avtomobile, prigotovlenii pishchi. Uvy, i odna mysh' byla bol'shim dostizheniem dlya izgotovitelej komp'yuterov. Kommercheskih sistem, podderzhivayushchih odnovremennye dejstviya s dvumya kursorami myshej, po odnomu dlya kazhdoj ruki, net.7 Razrabotchiki interfejsa smirilis' s realiyami i sdelali proekt dlya odnoj myshi, prinyav sintaksicheskoe soglashenie, chto pervym otmechaetsya (vybiraetsya) sushchestvitel'noe. Zatem ukazyvayut na glagol, punkt menyu. Pri etom v znachitel'noj mere utrachivaetsya prostota ispol'zovaniya. Kogda ya nablyudayu za pol'zovatelyami, prosmatrivayu videozapis' ih dejstvij ili zaregistrirovannye komp'yuterom peremeshcheniya kursora, to vsegda obrashchayu vnimanie na to, chto odnomu kursoru prihoditsya vypolnyat' rabotu dvuh: vybrat' ob®ekt v okne na rabochem stole; vybrat' glagol v menyu; najti drugoj ob®ekt ili vnov' otyskat' prezhnij; snova opustit' menyu (chasto, to zhe samoe) i vybrat' glagol. Kursor mechetsya vzad-vpered, ot prostranstva dannyh k prostranstvu menyu, vsyakij raz teryaya poleznuyu informaciyu o tom, gde on nahodilsya v etom prostranstve v proshlyj raz - v celom, neeffektivnyj process. Velikolepnoe reshenie. Dazhe esli by elektronika i programmy mogli bez truda rabotat' odnovremenno s dvumya aktivnymi kursorami, ostayutsya slozhnosti s topologiej prostranstva. Na rabochem stole v metafore WIMP v dejstvitel'nosti est' pishushchaya mashinka, i v fizicheskom prostranstve real'nogo stola neobhodimo pomestit' real'nuyu klaviaturu. Klaviatura plyus dva kovrika dlya myshej zajmut nemaluyu chast' prostranstva v predelah dosyagaemosti ruk. Tak pochemu by problemu klaviatury ne obratit' sebe na pol'zu, pochemu ne ispol'zovat' obe ruki - odnoj rukoj zadavaya na klaviature glagoly, a drugoj rukoj vybiraya sushchestvitel'nye s pomoshch'yu myshi? Teper' kursor budet ostavat'sya v prostranstve dannyh i pol'zovat'sya tem, chto posledovatel'nye sushchestvitel'nye vybirayutsya blizko odno ot drugogo. Real'naya effektivnost', real'no bol'shie vozmozhnosti pol'zovatelya. Moshchnost' funkcij ili prostota ispol'zovaniya. Odnako pri takom reshenii teryaetsya to, chto delaet ispol'zovanie menyu takim prostym dlya novichkov: menyu predstavlyaet spisok al'ternativnyh glagolov, dopustimyh v kazhdom konkretnom sostoyanii. Mozhno kupit' korobku, prinesti ee domoj i nachat' rabotat', ne chitayu instrukciyu, znaya lish', dlya chego ona kuplena i eksperimentiruya s razlichnymi glagolami v menyu. Odna iz slozhnejshih zadach, stoyashchih pered arhitektorami - eto najti sootnoshenie mezhdu moshchnost'yu funkcij i prostotoj ispol'zovaniya. Nuzhno li proektirovat' programmu v raschete na novichka i sluchajnogo pol'zovatelya ili stroit' ee s moshchnymi funkciyami dlya professionala? Ideal'noe reshenie - obespechit' i to, i drugoe konceptual'no soglasovannym obrazom, chto dostigaetsya pri pomoshchi interfejsa WIMP. U chasto ispol'zuemyh glagolov menyu est' klavishnye ekvivalenty iz odnoj klavishi + komandnoj klavishi, kotorye obychno legko vvesti levoj rukoj odnim akkordom. Naprimer, v Make komandnaya klavisha (^) nahoditsya kak raz pod klavishami Z i X, poetomu samye chastye dejstviya kodiruyutsya kak ^z, ^x, ^c, ^v, ^s. Postepennyj perehod ot novichka k opytnomu pol'zovatelyu. Takaya dvojnaya sistema zadaniya komandnyh glagolov ne tol'ko otvechaet potrebnosti novichka v legkom obuchenii i potrebnosti opytnogo pol'zovatelya v effektivnom ispol'zovanii, no i pozvolyaet kazhdomu pol'zovatelyu plavno perejti iz odnogo rezhima v drugoj. Bukvennye oboznacheniya, nazyvaemye klavishami sokrashchennogo nabora, pokazyvayutsya v menyu ryadom s glagolami, poetomu v sluchae neuverennosti pol'zovatel' mozhet raskryt' menyu, chtoby proverit' bukvennyj ekvivalent, vmesto vybora punkta menyu. Kazhdyj novichok zapominaet snachala sokrashchennyj nabor dlya svoih chastyh operacij. On mozhet poprobovat' lyuboe sokrashchenie, v kotorom ne uveren, poskol'ku ^z otmenyaet lyuboe oshibochnoe odinochnoe dejstvie. S drugoj storony, on mozhet spravit'sya v menyu otnositel'no dopustimyh komand. Novichki ochen' chasto opuskayut menyu, opytnye pol'zovateli - redko, a tem, kotorye nahodyatsya poseredine, lish' ot sluchaya k sluchayu ponadobitsya vybirat' iz menyu, poskol'ku oni uzhe znayut klavishi, kotorye vyzyvayut bol'shinstvo osushchestvlyaemyh imi operacij. My, proektirovshchiki programmnogo obespecheniya, slishkom privykli k etomu interfejsu, chtoby ocenit' ego elegantnost' i moshch'. Uspeh pryamogo vklyucheniya kak sredstva navyazyvaniya arhitektury. Interfejs Maka primechatelen eshche v odnom otnoshenii. Bez vsyakogo prinuzhdeniya razrabotchiki sdelali ego standartom dlya raznyh prilozhenij, vklyuchaya bol'shinstvo iz teh, kotorye opisany storonnimi organizaciyami. Poetomu pol'zovatel' priobretaet konceptual'nuyu soglasovannost' na urovne interfejsa ne tol'ko dlya programm, postavlyaemyh vmeste s mashinoj, no i dlya vseh drugih prilozhenij. |tot podvig sozdateli Maka osushchestvili, vstroiv interfejs v PZU, v rezul'tate chego razrabotchikam proshche i bystree pol'zovat'sya sushchestvuyushchim, chem sozdavat' svoi idiosinkrazicheskie interfejsy. |to estestvennoe stremlenie k edinoobraziyu vozobladalo nastol'ko shiroko, chto stalo standartom de-fakto. Estestvennye stremleniya byli podderzhany polnoj priverzhennost'yu so storony menedzherov i sushchestvennym prinuzhdeniem so storony Apple. Nezavisimye recenzenty v zhurnalah, ponyav ogromnoe znachenie mezhprogrammnoj konceptual'noj celostnosti, takzhe podkrepili estestvennye stremleniya, bezzhalostno kritikuya produkty, ne udovletvoryayushchie etomu interfejsu. |to otlichitel'nyj primer tehnologii, rekomendovannoj v glave 6 dlya dostizheniya edinoobraziya putem pooshchreniya drugih storon neposredstvenno vklyuchat' v svoi produkty imeyushchijsya kod vmesto razrabotki novyh programm soglasno imeyushchimsya specifikaciyam. Sud'ba WIMP: ustarevanie. Nesmotrya na vse dostoinstva, po moemu mneniyu, interfejs WIMP cherez pokolenie stanet dostoyaniem istorii. Ukazanie kursorom ostanetsya sposobom zadaniya sushchestvitel'nyh pri upravlenii nashimi komp'yuterami. Dlya vyrazheniya glagolov stanet ispol'zovat'sya rech'. Takie instrumenty, kak Voice Navigator dlya Makov i Dragon dlya PC, uzhe predostavlyayut takuyu vozmozhnost'. Ne razrabatyvajte programm na vybros, kaskadnaya model' neverna! V glave 11 daetsya radikal'nyj sovet: "planirujte vybrosit' pervuyu programmu, vam vse ravno pridetsya eto sdelat'". Sejchas ya schitayu eto oshibochnym - ne v silu chrezmernogo radikalizma, no v silu chrezmernoj uproshchennosti. Samoj bol'shoj oshibkoj etoj koncepcii yavlyaetsya kosvennoe prinyatie klassicheskoj posledovatel'nosti - v vide kaskada - modeli sozdaniya programmy. |ta model' proishodit ot struktury diagrammy Granta dlya poetapnogo processa, kotoruyu chasto izobrazhayut, kak na risunke 19.1. V klassicheskoj stat'e 1970 goda Vinton Rojs (Winton Royce) usovershenstvoval posledovatel'nuyu model' putem: - dobavleniya nekotoroj obratnoj svyazi s predshestvuyushchimi etapami; - ogranicheniya obratnoj svyazi tol'ko neposredstvennymi predshestvennikami, chtoby isklyuchit' vyzyvaemye imi izderzhki i zaderzhki v vypolnenii grafika. On predvoshitil "MCH-M", rekomendovav razrabotchikam "delat' rabotu dvazhdy"8. Glava 11 - ne edinstvennaya, na kotoruyu povliyala kaskadnaya model'. Ona prohodit cherez vsyu knigu, nachinaya s pravila planirovaniya v glave 2. |to prakticheskoe pravilo otvodit 1/3 vremeni na planirovanie, 1/6 - na napisanie programm, 1/4 - na testirovanie komponentov i 1/4 - na sistemnoe testirovanie. Ris. 19.1 Kaskadnaya model' sozdaniya programmy Osnovnoe zabluzhdenie kaskadnoj modeli sostoit v predpolozheniyah, chto proekt prohodit cherez ves' process odin raz, arhitektura horosha i prosta v ispol'zovanii, proekt osushchestvleniya razumen, a oshibki v realizacii ustranyayutsya po mere testirovaniya. Inymi slovami, kaskadnaya model' ishodit iz togo, chto vse oshibki budut sosredotocheny v realizacii, a potomu ih ustranenie proishodit ravnomerno vo vremya testirovaniya komponentov i sistemy. "Planirujte na vybros" dejstvitel'no rezko napadaet na eto zabluzhdenie. Oshibka ne v diagnoze, a v lekarstve. Sejchas ya predpolozhil, chto pervuyu sistemu mozhno otbrosit' ili pereproektirovat' ne vsyu celikom, a po chastyam. Horosho, esli eto tak, no pri etom ne zatragivaetsya koren' problemy. V kaskadnoj modeli sistemnoe testirovanie, a sledovatel'no i testirovanie pol'zovatelem, otodvigaetsya v konec processa sozdaniya programmy. Poetomu est' shans obnaruzhit' krajnie neudobstva dlya pol'zovatelya, ili nepriemlemye tehnicheskie harakteristiki, ili opasnuyu uyazvimost' k oshibkam ili zlonamerennym dejstviyam pol'zovatelya lish' v samom konce razrabotki. Izuchenie specifikacij pri al'fa-testirovanii naceleno na rannee obnaruzhenie takih oshibok, no nichto ne mozhet zamenit' neposredstvennyh pol'zovatelej. Vtorym nedostatkom kaskadnoj modeli yavlyaetsya predpolozhenie, chto sistema stroitsya srazu vsya celikom dlya testirovaniya s nachala do konca posle togo, kak zaversheny vse proektnye razrabotki, bol'shaya chast' napisaniya programm i znachitel'naya chast' testirovaniya komponentov. K neschast'yu, kaskadnaya model', eto preobladavshee v 1975 godu predstavlenie o programmnyh proektah, byla vklyuchena v DOD-STD-2167 - specifikaciyu Ministerstva oborony dlya lyubogo voennogo programmnogo obespecheniya. Po etoj prichine ona prosushchestvovala dolgoe vremya posle togo, kak bol'shaya chast' dumayushchih praktikov osoznala ee neadekvatnost' i otkazalas' ot nee. K schast'yu, v MO pozdnee ponyali istinu.9 Neobhodimo dvigat'sya protiv techeniya. Opyt i idei iz kazhdoj raspolozhennoj nizhe po techeniyu chasti processa sozdaniya programmy, kak energichnyj losos', dolzhny prygat' vverh po techeniyu, inogda srazu cherez neskol'ko etapov, i vozdejstvovat' na deyatel'nost' naverhu. Proektnye razrabotki pokazhut, chto nekotorye predusmotrennye arhitekturoj vozmozhnosti uhudshayut tehnicheskie harakteristiki, i potomu arhitektura dolzhna byt' pererabotana. Programmirovanie pri realizacii vyyavit, chto nekotorye funkcii nepomerno uvelichivayut trebovaniya k pamyati, poetomu nuzhno vnesti izmeneniya v arhitekturu i razrabotku. Poetomu vpolne mozhet potrebovat'sya osushchestvit' neskol'ko iteracij cikla arhitektura-razrabotka, prezhde chem nachat' kakuyu-libo programmnuyu realizaciyu. Model' poshagovogo sozdaniya luchshe: posledovatel'noe utochnenie Postroenie karkasa s nachala do konca. Garlan Millz (Harlan Mills), rabotayushchij v sisteme s razdeleniem vremeni, davno uzhe rekomenduet stroit' osnovnoj cikl oprosa sistemy real'nogo vremeni s vyzovami podprogramm (zaglushkami) dlya vseh funkcij (ris. 19.2), no pustymi podprogrammami. Otkompilirujte ego, protestirujte, i on budet idti cikl za ciklom, bukval'no nichego ne delaya, no delaya eto bez oshibok.10 Ris. 19.2 Na sleduyushchem shage my naveshivaem modul' vvoda (vozmozhno, primitivnyj) i modul' vyvoda. Voila! Rabotayushchaya sistema, delayushchaya nechto, vozmozhno, neinteresnoe. Teper', funkciya za funkciej, my stroim i dobavlyaem moduli. Na kazhdom shage my imeem rabotayushchuyu sistemu. Pri dostatochnom trudolyubii na kazhdom shage my imeem otlazhennuyu, protestirovannuyu sistemu. (Po mere rosta sistemy rastet i tyazhest' povtornogo testirovaniya vseh novyh modulej po vsem prezhnim kontrol'nym primeram.) Posle togo kak na primitivnom urovne kazhdaya funkciya rabotaet, my uluchshaem ili perepisyvaem odin modul' za drugim, poshagovo narashchivaya sistemu. Inogda dlya nadezhnosti my perepisyvaem ishodnyj dvizhushchij cikl, a vozmozhno, i ego interfejsy s modulyami. Poskol'ku v lyuboj moment vremeni u nas est' rabotayushchaya sistema: - mozhno ochen' rano nachat' testirovanie pol'zovatelyami; - mozhno prinyat' strategiyu razrabotki v sootvetstvii s byudzhetom, polnost'yu zashchishchayushchuyu ot pererashoda vremeni ili sredstv (vozmozhno, za schet sokrashcheniya funkcional'nosti). V techenie 22 let ya prepodaval v laboratorii programmnoj inzhenerii Universiteta shtata Severnaya Karolina, inogda vmeste s Devidom Parnasom. Na etih zanyatiyah brigady, obychno sostoyavshie iz chetyreh chelovek, v techenie odnogo semestra dolzhny byli postroit' nekotoruyu real'nuyu prikladnuyu programmnuyu sistemu. Primerno poseredine etogo sroka ya stal prepodavat' inkrementnuyu razrabotku. YA byl porazhen, kakoj vozbuzhdayushchij effekt na moral'nyj duh gruppy okazyvaet pervaya kartinka na ekrane, pervaya rabotayushchaya sistema. Semejstva Parnasa. Devid Parnas byl glavnym vlastitelem dum v programmotehnike v techenie vsego etogo 20-letnego perioda. Vsem izvestna ego ideya skrytiya informacii. Menee izvestna ochen' vazhnaya ideya Parnasa o proektirovanii programmnogo produkta kak semejstva vzaimosvyazannyh produktov.11 On trebuet, chtoby proektirovshchik imel v vidu kak dal'nejshee razvitie, tak i novye versii produkta i opredelyal ih funkcional'nye ili mezhplatformennye razlichiya tak, chtoby stroit' derevo rodstvennyh produktov (ris. 19.3). Ris. 19.3 Fokus pri proektirovanii takogo dereva sostoit v tom, chtoby blizhe k kornyu pomestit' te resheniya, izmenenie kotoryh naimenee veroyatno. Takaya strategiya proektirovaniya povyshaet povtornuyu ispol'zuemost' modulej. Eshche vazhnee, chto ee mozhno rasshirit', vklyuchaya ne tol'ko postavlyaemye produkty, no i posledovatel'nye promezhutochnye versii, sozdannye po strategii inkrementiruemyh sborok. V etom sluchae produkt razvivaetsya cherez promezhutochnye stadii s minimumom vozvrata nazad. Podhod Microsoft: "ezhevechernyaya sborka". Dzhejms Makkarti (James McCarthy) opisal mne process, ispol'zovavshijsya im i drugimi v Microsoft. |to poshagovoe narashchivanie, dovedennoe do logicheskogo konca. On pishet: Sdelav pervuyu postavku, novye versii my postavlyaem s dopolnitel'nymi funkciyami, po sravneniyu s sushchestvuyushchim rabotayushchim produktom. Pochemu dolzhen byt' inym process pervonachal'noj sborki? S momenta dostizheniya nami pervoj vehi (u pervoj postavki tri promezhutochnyh vehi) my kazhdyj vecher zanovo sobiraem razrabatyvaemuyu sistemu (i progonyaem kontrol'nye primery). Cikl sborki stanovitsya ritmom zhizni proekta. Kazhdyj vecher odna ili bolee brigad programmistov, provodyashchih testirovanie, registriruyut moduli s novymi funkciyami. Posle kazhdoj sborki u nas est' rabotayushchaya sistema. Esli sborka okazyvaetsya neudachnoj, my ostanavlivaem ves' process, poka oshibka ne budet najdena i ispravlena. V lyuboj moment vse v gruppe znayut polozhenie del. |to dejstvitel'no tyazhelo. Trebuetsya vydelenie bol'shih resursov, no eto upravlyaemyj process, proslezhivaemyj i ponyatnyj. On vyzyvaet u komandy doverie k sebe. A doverie opredelyaet moral', emocional'noe sostoyanie. Takoj process udivlyaet i dazhe shokiruet razrabotchikov v drugih organizaciyah. Odin iz nih govorit: "YA vzyal sebe za pravilo delat' sborku kazhduyu nedelyu, no ezhednevnaya sborka, ya dumayu, potrebuet slishkom mnogo truda." I eto, vozmozhno, verno. Naprimer, v Bell Northern Research sobirayut sistemu, sostoyashchuyu iz 12 millionov strok, raz v nedelyu. Inkrementnaya sborka i bystroe maketirovanie. Poskol'ku inkrementnaya razrabotka pozvolyaet rano nachat' testirovanie real'nymi pol'zovatelyami, v chem ee otlichie ot bystrogo maketirovaniya? Mne kazhetsya, chto oni svyazany, no razlichayutsya. Odnim mozhno pol'zovat'sya bez drugogo. Harel daet poleznoe opredelenie maketa: (versiya programmy, kotoraya) otrazhaet tol'ko proektnye resheniya, prinyatye v processe podgotovki konceptual'noj modeli, a ne resheniya, vyzvannye soobrazheniyami realizacii.12 Mozhno postroit' maket, kotoryj vovse ne yavlyaetsya chast'yu produkta, razvivayushchegosya v napravlenii postavki. Naprimer, mozhno sozdat' maket interfejsa, za kotorym stoit ne real'no rabotayushchaya programma, a lish' konechnyj avtomat, zastavlyayushchij ego imitirovat' prohozhdenie sostoyanij. Mozhno dazhe maketirovat' i testirovat' interfejsy metodom volshebnika izumrudnogo goroda, kogda spryatannyj chelovek imitiruet otklik sistemy. Takoe maketirovanie mozhet byt' ves'ma poleznym dlya bystrogo polucheniya obratnoj svyazi ot pol'zovatelya, no ono nahoditsya sovershenno v storone ot testirovaniya produkta, kotoryj gotovitsya k postavke. Analogichno, razrabotchiki mogut poprobovat' postroit' vertikal'nyj srez produkta, v kotorom polnost'yu realizovan ves'ma ogranichennyj nabor funkcij, chtoby zaranee prolit' svet na te mesta, gde mogut tait'sya opasnosti dlya proizvoditel'nosti produkta. V chem sostoit razlichie mezhdu sborkoj na pervoj vehe v procedure Microsoft i bystrym maketom? V funkciyah. Produkt s pervoj vehi mozhet imet' takuyu ogranichennuyu funkcional'nost', chto ni dlya kogo ne budet predstavlyat' interesa. Gotovnost' produkta k postavke opredelyaetsya zavershennost'yu v predostavlenii poleznogo nabora funkcij i svoim kachestvom, uverennost'yu v nadezhnoj rabote. Parnas byl prav, a ya - net v otnoshenii sokrytiya informacii V glave 7 ya protivopostavlyayu dve tochki zreniya na to, v kakoj mere kazhdyj uchastnik komandy mozhet imet' pravo ili pooshchryat'sya k znaniyu proektov i tekstov programm, sozdannyh kollegami. Vo vremya proekta Operating System/360 my reshili, chto vse programmisty dolzhny videt' ves' material, t.e. u kazhdogo programmista byla rabochaya tetrad' proekta, kotoraya k koncu naschityvala svyshe 10000 stranic. Harlan Millz ubeditel'no dokazyval, chto "programmirovanie dolzhno byt' otkrytym processom", chto predostavlenie vsej raboty na obshchee obozrenie sposobstvuet kontrolyu kachestva kak blagodarya davleniyu so storony kolleg, zastavlyayushchemu rabotat' horosho, tak i blagodarya tomu, chto kollegi dejstvitel'no nahodyat promahi i oshibki. |tot vzglyad rezko protivorechit mneniyu Devida Parnasa o tom, chto programmnye moduli dolzhny byt' inkapsulirovany, s horosho opredelennymi interfejsami, a vnutrennost' takih modulej dolzhna byt' chastnoj sobstvennost'yu programmista, nevidimoj snaruzhi. Programmisty effektivnee vsego rabotayut, buduchi ograzhdeny ot vnutrennostej chuzhih modulej.13 V glave 7 ya zaklejmil ideyu Parnasa kak "recept katastrofy". Parnas byl prav, a ya oshibalsya. Segodnya ya ubezhden, chto ogranichenie informacii, chasto osushchestvlyaemoe teper' metodami ob®ektnogo programmirovaniya, yavlyaetsya edinstvennym sposobom podnyat' uroven' programmnyh razrabotok. Ispol'zuya drugie metody, mozhno dejstvitel'no popast' v bedu. Soglasno metodike Millza programmisty mogut poluchit' podrobnosti semantiki interfejsov, s kotorymi oni rabotayut, uznav, chto nahoditsya "po tu storonu". Ukryvanie etoj semantiki mozhet byt' prichinoj sistemnyh oshibok. S drugoj storony, metodika Parnasa sposobstvuet ustojchivosti pri vnesenii izmenenij i bol'she podhodit k strategii proektirovaniya, predpolagayushchej izmeneniya v budushchem. V glave 16 utverzhdaetsya sleduyushchee: - bol'shaya chast' rosta proizvoditel'nosti razrabotki programmnogo obespecheniya obespechena ustraneniem vtorostepennyh trudnostej, takih kak neudobnye yazyki programmirovaniya i medlennaya oborachivaemost' paketnoj obrabotki; - legkih reshenij v etom napravlenii prakticheski ne ostalos'; - radikal'nogo progressa mozhno dobit'sya, razreshiv sushchestvennye slozhnosti modelirovaniya slozhnyh konceptual'nyh konstrukcij. Samoe ochevidnoe na etom puti - priznat', chto programmy sostavlyayutsya iz konceptual'nyh blokov, znachitel'no bolee krupnyh, chem otdel'nye operatory yazykov vysokogo urovnya: podprogramm, ili modulej, ili klassov. Esli my sumeem ogranichit' proektirovanie i postroenie programm zadachej soedineniya vmeste i parametrizacii takih blokov iz ranee sozdannyh naborov, to radikal'no povysim konceptual'nyj uroven' i izbavimsya ot ogromnogo ob®ema rabot i shirokih vozmozhnostej dlya oshibok, sushchestvuyushchih na urovne otdel'nyh operatorov. Dannoe Parnasom opredelenie modulej s sokrytiem informacii bylo pervym otkrytym shagom v etoj kriticheski vazhnoj programme issledovanij i idejnym provozvestnikom ob®ektno-orientirovannogo programmirovaniya. On opredelil modul' kak programmnyj ob®ekt s sobstvennoj model'yu dannyh i sobstvennym naborom operacij. Dostup k ego dannym mozhet byt' osushchestvlen tol'ko cherez imeyushchiesya v nem operacii. Sleduyushchij shag yavilsya vkladom neskol'kih issledovatelej: razvitie modulej Parnasa v abstraktnyj tip dannyh, iz kotorogo mozhno proizvodit' mnogo ob®ektov. Abstraktnyj tip dannyh obespechivaet edinoobraznyj sposob predstavleniya i zadaniya interfejsov modulej, a takzhe disciplinu dostupa, kotoruyu legko osushchestvlyat'. Tretij shag, ob®ektno-orientirovannoe programmirovanie, vvodit vazhnoe ponyatie nasledovaniya, pri kotorom klassy (tipy dannyh) po umolchaniyu imeyut atributy svoih predkov v ierarhii klassov.14 To, chto my rasschityvaem poluchit' ot ob®ektno- orientirovannogo programmirovaniya, proishodit, v sushchnosti, ot pervogo shaga, inkapsulyacii modulej, plyus ideya zaranee podgotovlennyh bibliotek modulej ili klassov, sproektirovannyh i protestirovannyh s cel'yu povtornogo ispol'zovaniya. Mnogie predpochli proignorirovat' tot fakt, chto takie moduli ne prosto programmy, a programmnye produkty v tom smysle, kotoryj raz®yasnen v glave 1. Naprasno rasschityvat' na uspeshnoe povtornoe ispol'zovanie modulej, ne oplachivaya nachal'nye izderzhki na razrabotku kachestvennyh programmnyh modulej: obobshchennyh, nadezhnyh, protestirovannyh i dokumentirovannyh. Ob®ektno- orientirovannoe programmirovanie i povtornoe ispol'zovanie obsuzhdalis' v glavah 16 i 17. Naskol'ko mifichen cheloveko-mesyac? Model' i dannye Bema V techenie ryada let byli vypolneny mnogochislennye kolichestvennye issledovaniya proizvoditel'nosti truda programmistov i vliyayushchih na nee faktorov, osobenno sootnoshenij mezhdu obespechennost'yu personalom i grafikom rabot. Naibolee obstoyatel'noe issledovanie sdelano Barri Bemom (Barry Boehm) na osnovanii primerno 63 proektov, v osnovnom v aerokosmicheskoj oblasti, iz nih okolo 25 - v TRW. Ego rabota "|konomika razrabotki programmnogo obespecheniya" soderzhit ne tol'ko rezul'taty, no i ryad poleznyh modelej zatrat s narastayushchej slozhnost'yu. Hotya nesomnenno, chto primenyaemye v modelyah koefficienty razlichny dlya obychnyh kosmicheskih programm i dlya programm, sozdavaemyh v aerokosmicheskoj oblasti po pravitel'stvennym standartam, vse zhe ego modeli podkreplyayutsya ogromnym kolichestvom dannyh. YA dumayu, chto kniga budet poleznym klassicheskim trudom i cherez pokolenie. Poluchennye im rezul'taty uverenno podkreplyayut soderzhashcheesya v MCH-M utverzhdenie o tom, chto sootnoshenie mezhdu chislennost'yu zanyatyh i vremenem vypolneniya proekta daleko ne linejnoe, chto cheloveko-mesyac dejstvitel'no yavlyaetsya mificheskoj meroj proizvoditel'nosti. V chastnosti, on schitaet:15 - Sushchestvuet optimal'noe, s tochki zreniya zatrat, vremya vypolneniya grafika dlya pervoj postavki: T = 2,5 (CHM)1/3. To est' optimal'noe vremya v mesyacah izmenyaetsya kak kubicheskij koren' predpolagaemogo ob®ema rabot v cheloveko- mesyacah - formula, poluchennaya iz ocenki razmera i drugih faktorov v ego modeli. Sledstviem yavlyaetsya krivaya, dayushchaya optimal'nuyu chislennost' zanyatyh. - Krivaya stoimosti medlenno rastet, esli zaplanirovannyj grafik dlinnee optimal'nogo. Rabota zanimaet vse otvedennoe dlya nee vremya. - Krivaya stoimosti rezko rastet, esli zaplanirovannyj grafik koroche optimal'nogo. - Prakticheski ni odin proekt nevozmozhno zavershit' bystree, chem za . raschetnogo optimal'nogo grafika vne zavisimosti ot kolichestva zanyatyh v nem! |tot primechatel'nyj rezul'tat daet menedzheru programmnogo proekta solidnoe podkreplenie, kogda vysshee rukovodstvo trebuet prinyatiya nevozmozhnogo grafika. Naskol'ko veren zakon Bruksa? Byli dazhe provedeny tshchatel'nye issledovaniya zakona Bruksa (namerenno uproshchennogo), soglasno kotoromu vydelenie dopolnitel'nyh lyudej dlya otstayushchego grafika proekta lish' zaderzhivaet ego vypolnenie. Luchshe vsego eto sdelano Abdel'-Hamidom (Abdel-Hamid) i Madnikom (Madnick) v chestolyubivoj i cennoj knige "Dinamika programmnogo proekta: integrirovannyj podhod".16 V knige razrabotana kolichestvennaya model' dinamiki proekta. Glava o zakone Bruksa bolee podrobno vnikaet v to, chto proishodit pri razlichnyh dopushcheniyah otnositel'no togo, kogo dobavlyayut, i kogda. CHtoby issledovat' eto, avtory razvivayut sobstvennuyu tshchatel'nuyu model' programmnogo proekta srednego razmera, predpolagaya, chto u vnov' dobavlyaemyh lyudej est' krivaya obucheniya, i uchityvaya dopolnitel'nye izderzhki na obshchenie i obuchenie. Oni prihodyat k vyvodu, chto "dobavlenie novyh lyudej k zapazdyvayushchemu proektu vsegda privodit k ego udorozhaniyu, no ne vsegda k bolee pozdnemu zaversheniyu" (kursiv avtorov). V chastnosti, uvelichenie chislennosti rabotnikov v nachale proekta gorazdo bezopasnee, chem v konce, poskol'ku dobavlenie novyh lyudej vsegda vyzyvaet otricatel'nyj effekt, dlya kompensacii kotorogo trebuyutsya nedeli. SHtucke (Stutzke) predlagaet bolee prostuyu model' dlya provedeniya analogichnyh issledovanij, i s tem zhe rezul'tatom.17 On provodit podrobnyj analiz processa i izderzhek, svyazannyh s privlecheniem novyh rabotnikov, yavnym obrazom uchityvaya otvlechenie nastavnikov ot neposredstvennoj raboty nad proektom. On proveryal svoyu model' na real'nom proekte, v kotorom chislennost' rabotnikom byla udvoena, blagodarya chemu udalos' ulozhit'sya v pervonachal'nyj grafik, nesmotrya na otstavanie v seredine. On rassmatrivaet al'ternativy dobavleniyu novyh rabotnikov, osobenno sverhurochnuyu rabotu. Naibol'shuyu cennost' predstavlyayut ego mnogochislennye prakticheskie sovety o tom, kak privlekat' novyh rabotnikov, obuchat' ih, obespechivat' instrumentariem i t.d., chtoby minimizirovat' otricatel'nyj effekt uvelicheniya personala. Osobenno dostojno vnimaniya ego zamechanie, chto dopolnitel'no privlekaemye na pozdnih stadiyah proekta rabotniki dolzhny byt' igrokami komandy, stremyashchimisya vojti v igru i vpisat'sya v process, a ne pytat'sya izmenit' ili usovershenstvovat' sam process! SHtucke schitaet, chto dopolnitel'naya tyazhest' obmena informaciej v krupnom proekte imeet vtoroj poryadok malosti, i ne vklyuchaet ee v svoyu model'. Ne vpolne yasno, uchityvayut li ee Abdel'-Hamid i Madnik, i esli da, to kak. Ni v odnoj iz modelej ne uchityvaetsya to obstoyatel'stvo, chto rabota dolzhna byt' pereraspredelena - process, kotoryj dlya menya chasto okazyvalsya netrivial'nym. "Krajne uproshchennaya" formulirovka zakona Bruksa stanovitsya bolee poleznoj, buduchi dopolnena etimi tshchatel'no sdelannymi nadlezhashchimi ogovorkami. Podytozhivaya, ya prodolzhayu priderzhivat'sya ishodnogo utverzhdeniya kak priblizheniya k istine nulevogo poryadka, prakticheskogo pravila, preduprezhdayushchego menedzherov o nerazumnosti instinktivnoj popytki vytyanut' zapazdyvayushchij proekt. Kadry reshayut vse (ili pochti vse) Nekotorye chitateli udivlyayutsya, chto bol'shaya chast' rassuzhdenij MCH-M posvyashchena administrativnym storonam programmnoj inzhenerii, a ne mnogochislennym tehnicheskim problemam. Takoj perekos chastichno vyzvan toj rol'yu, kotoruyu ya igral v IBM Operating System/360 (teper' MVS/370). Esli smotret' glubzhe, eto proishodit ot ubezhdeniya, chto kachestvo lyudej, zanyatyh v proekte, ih organizaciya i administrirovanie imeyut gorazdo bol'shee znachenie dlya uspeha, chem instrumenty, kotorymi oni pol'zuyutsya, ili primenyaemye imi tehnicheskie resheniya. Posleduyushchie issledovaniya podkrepili moyu uverennost'. Model' COCOMO Bema priznaet, chto kachestvo komandy yavlyaetsya vazhnejshim faktorom ee uspeha, prakticheski vchetvero bolee vazhnym, chem sleduyushchij za nim po znachimosti. Bol'shinstvo nauchnyh issledovanij po programmnoj inzhenerii sosredotochilos' na instrumentah. YA lyublyu horoshij instrument i zhazhdu ego. Tem ne menee otradno videt' prodolzhenie issledovatel'skih programm v otnoshenii zaboty o lyudyah, ih rosta i podderzhki, a takzhe razvitiya upravleniya razrabotkoj programmnogo obespecheniya. CHelovecheskij faktor. Krupnym dostizheniem poslednih let stala kniga Demarko (DeMarco) i Listera (Lister) "CHelovecheskij faktor: produktivnye proekty i programmy", izdannaya v 1987 godu. V osnove ee lezhit polozhenie o tom, chto "glavnye problemy v nashej rabote po prirode svoej ne stol'ko tehnologicheskie, skol'ko sociologicheskie". Ona izobiluet takimi zhemchuzhinami, kak "zadacha menedzhera ne zastavit' lyudej rabotat', a sdelat' tak, chtoby oni mogli rabotat'". V nej govoritsya o takih prozaicheskih veshchah, kak pomeshchenie, mebel', sovmestnoe pitanie komandy. Demarko i Lister privodyat real'nye dannye iz svoego "Programmirovaniya voennyh igr", kotorye pokazyvayut porazitel'nuyu korrelyaciyu mezhdu proizvoditel'nost'yu programmistov iz odnoj i toj zhe organizacii, a takzhe mezhdu harakteristikami rabochih mest i urovnem produktivnosti i nalichiya oshibok. V pomeshcheniyah naibolee produktivnyh programmistov tishe, oni bolee lichnye, luchshe zashchishcheny protiv neproshenogo vtorzheniya, i oni prosto bol'she... Ponimaete li vy, chto pokoj, prostranstvo i uedinennost' sposobstvuyut luchshej rabote vashih tepereshnih rabotnikov ili (s drugoj storony) sposobstvuet privlecheniyu i sohraneniyu luchshih rabotnikov?18 YA iskrenne rekomenduyu etu knigu vsem moim chitatelyam. Peredacha proektov. Demarko i Lister udelyayut bol'shoe vnimanie spayannosti komandy, neulovimomu, no vazhnomu kachestvu. YA dumayu, chto neponimanie administraciej spayannosti sluzhit prichinoj toj gotovnosti, s kotoroj, kak ya nablyudal, v kompaniyah, raspolozhennyh na neskol'kih ploshchadkah, proekty peredayutsya iz odnoj laboratorii v druguyu. V svoej praktike ya nablyudal, vozmozhno, s poldyuzhiny peredach proekta, i ni odna iz nih ne byla uspeshnoj. Mozhno s uspehom peredavat' zadaniya. No vo vseh sluchayah popytki peredat' proekt novaya komanda fakticheski nachinala snachala, nesmotrya na nalichie horoshej dokumentacii, nekotorogo prodvizheniya v proekte i nekotoryh lyudej iz peredayushchej komandy. YA dumayu, chto razrushenie spayannosti prezhnej komandy privodit k vykidyshu proekta, nahodyashchegosya v embrional'nom sostoyanii, i osushchestvleniyu ego s nachal'noj tochki. Sila otkazat'sya ot vlasti Esli soglasit'sya, chto, kak ya neodnokratno dokazyval na protyazhenii etoj knigi, tvorchestvo ishodit ot lichnostej, a ne organizacionnyh struktur i processov, togda glavnaya zadacha menedzhera programmnogo proekta - sozdat' organizacionnuyu strukturu i rabochij process, sposobstvuyushchij tvorchestvu i iniciative, a ne podavlyayushchie ih. K schast'yu, eta problema prisushcha ne tol'ko programmnym organizaciyam, i nad nej rabotali mnogie bol'shie umy. E. F. SHumaher (E. F. Schumacher) v klassicheskoj rabote "Maloe prekrasno: ekonomika radi lyudej" predlagaet teoriyu organizacii predpriyatij, maksimiziruyushchuyu tvorcheskuyu aktivnost' i radost' rabotnikov. V kachestve pervogo principa on vydvigaet "princip vspomogatel'noj funkcii" iz encikliki Quadragesimo Anno papy Piya XI: Peredacha bol'shemu i vyshestoyashchemu soobshchestvu togo, chto mogut delat' men'shie i nizhestoyashchie organizacii yavlyaetsya nespravedlivost'yu i v to zhe vremya ser'eznym zlom i narusheniem pravil'nogo poryadka. Ibo vsyakaya obshchestvennaya deyatel'nost' po suti svoej dolzhna predostavlyat' pomoshch' chlenam social'noj gruppy, a ne razrushat' i pogloshchat' ih... Tem, kto upravlyaet, sleduet byt' uverennymi, chto chem luchshe sredi razlichnyh soobshchestv sohranyaetsya differencirovannyj poryadok v soblyudenii principa vtorostepennoj funkcii, tem krepche budet vlast' i effektivnost' v obshchestve, tem bolee schastlivym i procvetayushchim gosudarstvo.19 SHumaher privodit raz®yasnenie: Princip vtorostepennoj funkcii uchit nas, chto vlast' i effektivnost' centra uvelichatsya, esli budut tshchatel'no ohranyat'sya svoboda i otvetstvennost' bolee nizkih formirovanij, a v itoge organizaciya v celom budet "bolee schastlivoj i procvetayushchej". Kak mozhno dobit'sya takoj organizacii? ... Bol'shaya organizaciya dolzhna sostoyat' iz mnozhestva poluavtonomnyh edinic, kotorye mozhno nazvat' kvazi-firmami. Kazhdaya iz nih dolzhna obladat' znachitel'noj svobodoj, chtoby predostavit' nailuchshie vozmozhnosti dlya tvorchestva i predpriimchivosti... Kazhdaya iz kvazi- firm dolzhna imet' svoj uchet pribylej i poter', a takzhe balansovyj otchet.20 K chislu naibolee zamechatel'nyh dostizhenij programmnoj inzhenerii prinadlezhat pervye etapy prakticheskogo osushchestvleniya takih organizacionnyh idej. Prezhde vsego, mikrokomp'yuternaya revolyuciya sozdala novuyu programmnuyu industriyu s sotnyami vnov' voznikshih firm, kotorye iznachal'no maly i otmecheny entuziazmom, svobodoj i tvorchestvom. Sejchas industriya menyaetsya po mere pogloshcheniya melkih firm krupnymi. Posmotrim, pojmut li krupnye firmy vazhnost' sohraneniya tvorcheskoj aktivnosti melkih, pogloshchaemyh imi. Eshche bolee primechatel'no, chto vysshee rukovodstvo ryada krupnyh firm predprinyalo mery po peredache vlasti vniz otdel'nym komandam, rabotayushchim nad programmnymi proektami, chto sblizhaet ih s kvazi-firmami SHumahera po strukture i otvetstvennosti. Rezul'taty vyzvali udivlenie i udovletvorenie. Dzhim Makkarti iz Microsoft opisyval mne svoj opyt emansipacii komand: U kazhdoj brigady (30-40 chelovek) est' svoj nabor razrabatyvaemyh ob®ektov, svoj grafik i dazhe svoi pravila razrabotki, realizacii i postavki. V brigade est' specialisty v chetyreh ili pyati oblastyah, v tom chisle realizacii, testirovanii i dokumentirovanii. Brigada sama ulazhivaet raznoglasiya po pustyakam, nachal'nik ne vmeshivaetsya. Ne boyus' pereocenit' vazhnost' peremeshcheniya vlasti, kogda brigada samostoyatel'no neset otvetstvennost' za svoi dostizheniya. |rl Uiler (Earl Wheeler), byvshij rukovoditel' programmnyh razrabotok IBM, podelilsya so mnoj svoim opytom delegirovaniya vniz polnomochij, byvshih v techenie dolgogo vremeni sosredotochennymi u administracii upravleniya IBM. Klyuchevym poryvom poslednih let stalo delegirovanie polnomochij vniz. |to bylo chudom! Uluchshilis' kachestvo, produktivnost', moral'nyj duh. U nas nebol'shie brigady bez centralizovannogo upravleniya. Brigady sami opredelyayut pravila proizvodstvennogo processa, no oni ispytyvayut davlenie so storony rynka. I eto davlenie zastavlyaet ih samih iskat' sposoby resheniya problem. Obshchenie s otdel'nymi chlenami brigad pokazyvaet, konechno, i udovletvorenie ot peredachi polnomochij i svobody, a takzhe bolee sderzhannuyu ocenku togo, v kakoj mere kontrol' dejstvitel'no oslablen. Tem ne menee, dostignutaya stepen' peredachi polnomochij yavlyaet shag v pravil'nom napravlenii. Poluchaemye vygoda tochno te, kotorye predskazyvalis' Piem XI: v rezul'tate delegirovaniya polnomochij centr usilivaet svoyu real'nuyu vlast', a organizaciya v celom stanovitsya bolee schastlivoj i procvetayushchej. Kakoj samyj bol'shoj syurpriz? Milliony komp'yuterov Vse komp'yuternye guru, s kotorymi ya razgovarival, priznayut, chto dlya nih byli neozhidannost'yu mikrokomp'yuternaya revolyuciya i ee porozhdenie - proizvodstvo korobochnyh programmnyh produktov. Vne somneniya, eto samoe znachitel'noe sobytie za dva desyatiletiya posle vyhoda MCH-M. Ono imeet mnogochislennye posledstviya dlya programmnoj inzhenerii. Mikrokomp'yuternaya revolyuciya izmenila harakter ispol'zovaniya komp'yuterov. SHumaher sformuliroval problemu bolee 20 let nazad: CHego my dejstvitel'no hotim ot uchenyh i tehnologov? YA otvechu tak: nam nuzhny metody i oborudovanie, kotorye: - dostatochno deshevy, chtoby byt' dostupnymi prakticheski kazhdomu; - prigodny dlya nebol'shih prilozhenij; - sootvetstvuyut potrebnosti cheloveka v tvorcheskoj deyatel'nosti.21 |to kak raz te zamechatel'nye svojstva, kotorye mikrokomp'yuternaya revolyuciya dala komp'yuternoj promyshlennosti i ee potrebitelyam, kotorymi teper' stala shirokaya publika. Srednij amerikanec mozhet segodnya pozvolit' sebe ne tol'ko sobstvennyj komp'yuter, no i nabor programmnyh sredstv, dlya pokupki kotorogo 20 let nazad potrebovalos' by korolevskoe zhalovan'e. Kazhduyu iz celej, postavlennyh SHumaherom, stoit rassmotret' otdel'no. Predstavlyaet takzhe interes, v kakoj mere oni dostignuty - osobenno poslednyaya. V odnoj oblasti za drugoj obychnym lyudyam i professionalam stanovyatsya dostupny vse novye sredstva samovyrazheniya. Otchasti, razvitie v drugih oblastyah proishodit tak zhe, kak v sozdanii programm - blagodarya ustraneniyu pobochnyh trudnostej. Pobochnye ogranicheniya na rukopisi nakladyvalis' dlitel'nost'yu i stoimost'yu perepechatyvaniya dlya vneseniya ispravlenij. Rabotu ob®emom v 300 stranic inogda prihodilos' perepechatyvat' kazhdye tri ili shest' mesyacev, a v pereryve chirkat' v rukopisi. Trudno bylo ocenit' vliyanie vnesennyh izmenenij na obshchij hod mysli i ritm slov. Sejchas chudesnym obrazom rukopisi stali postoyanno menyayushchimisya.22 Analogichnuyu izmenchivost' komp'yuter pridal mnogim drugim materialam: kartinam hudozhnikov, planam postroek, chertezham mehanizmov, muzykal'nym sochineniyam, fotografiyam, kinofil'mam, slajdovym prezentaciyam, mul'timedijnym rabotam i dazhe elektronnym tablicam. V kazhdom sluchae pri ruchnom sposobe izgotovleniya dlya togo, chtoby uvidet' izmeneniya v kontekste, trebovalos' kopirovanie bol'shih neizmennyh chastej. Teper', nezavisimo ot materiala, my mozhem pol'zovat'sya takimi zhe vygodami, kakie rabota v rezhime razdeleniya vremeni prinesla v programmirovanie: vozmozhnost' redaktirovaniya i mgnovennoj ocenki rezul'tata bez poteri hoda mysli. Tvorcheskie vozmozhnosti usililis' takzhe blagodarya novym gibkim vspomogatel'nym instrumentam. Odin primer - sochinenie prozy, pri kotorom my pol'zuemsya proverkoj orfografii, grammatiki, stilisticheskimi podskazkami, sistemami bibliografii i zamechatel'noj vozmozhnost'yu odnovremenno videt' stranicy v okonchatel'no otformatirovannom vide. My eshche ne ocenili znacheniya mgnovennogo dostupa k enciklopediyam i bezgranichnym resursam vsemirnoj pautiny dlya ispol'zovaniya pisatelem improvizirovannogo poiska. Samoe glavnoe, obretennaya izmenchivost' materiala uproshchaet izuchenie mnogih v korne razlichnyh vozmozhnostej, kogda tvorcheskaya rabota tol'ko obretaet formu. Vot drugoj primer, kogda poryadok velichiny v kolichestvennom parametre - v dannom sluchae, vremeni, neobhodimom dlya vneseniya izmenenij, - proizvodit kachestvennyj skachok v podhode k zadache. Instrumenty dlya chercheniya pozvolyayut proektirovshchikam zdanij za chas tvorcheskoj raboty issledovat' gorazdo bol'she variantov. Podklyuchenie komp'yuterov k sintezatoram i programmy, pozvolyayushchie avtomaticheski zapisyvat' ili proigryvat' noty, znachitel'no oblegchayut fiksaciyu brenchaniya po klavisham. Cifrovaya obrabotka fotografij, kak v Adobe Photoshop, pozvolyaet v techenie schitannyh minut provesti eksperimenty, dlya kotoryh potrebovalis' chasy raboty v fotolaboratorii. |lektronnye tablicy pozvolyayut legko issledovat' desyatki al'ternativnyh scenariev tipa "chto, esli". Nakonec, blagodarya vezdesushchesti personal'nyh komp'yuterov sozdaetsya sovershenno novyj material. Giperteksty, predlozhennye Vannevarom Bushem v 1945 godu, osushchestvimy tol'ko s pomoshch'yu komp'yuterov.23 Mul'timedijnye prezentacii i opyty byli slozhnejshimi zadachami - slishkom mnogo hlopot - do togo, kak stalo vozmozhnym provodit' ih s pomoshch'yu komp'yuterov i sootvetstvuyushchego bogatogo programmnogo obespecheniya. Sistemy virtual'noj real'nosti, poka eshche dorogie i ne shiroko rasprostranennye, v budushchem stanut takimi i sozdadut novyj material dlya tvorchestva. Mikrokomp'yuternaya revolyuciya izmenila harakter razrabotki programmnogo obespecheniya. Tehnologii razrabotki programmnogo obespecheniya 1970-h sami izmenilis' v rezul'tate mikrokomp'yuternoj revolyucii i vyzvavshih ee tehnicheskih dostizhenij. Ustranena znachitel'naya chast' vtorostepennyh slozhnostej tehnologij razrabotki programmnogo obespecheniya. Bystrye personal'nye komp'yutery stali obychnym instrumentom razrabotchika, i vremya oborachivaemosti stalo pochti ustarevshim ponyatiem. Segodnyashnij personal'nyj komp'yuter bystree ne tol'ko superkomp'yutera 60-go goda, no i Unix-stancii 1985-go. |to znachit, chto kompilyaciya bystro osushchestvlyaetsya dazhe na skromnyh po moshchnosti mashinah, a blagodarya bol'shomu ob®emu pamyati otpali zaderzhki pri komponovke s ispol'zovaniem diskov. Bol'shaya pamyat' pozvolyaet takzhe hranit' v pamyati tablicy simvolicheskih imen vmeste s ob®ektnym kodom, v rezul'tate chego stanovitsya obychnoj vysokourovnevaya otladka bez perekompilyacii. Za poslednie 20 let my pochti pokonchili s ispol'zovaniem razdeleniya vremeni kak metodologiej razrabotki programmnogo obespecheniya. V 1975 godu razdelenie vremeni tol'ko-tol'ko vytesnilo paketnuyu obrabotku v kachestve naibolee rasprostranennoj tehnologii. Set' ispol'zovalas' dlya togo, chtoby dat' razrabotchiku programmnogo obespecheniya dostup kak k obshchim fajlam, tak i k bol'shim vychislitel'nym moshchnostyam dlya kompilyacii, komponovki i testirovaniya. Segodnya vychislitel'nuyu moshchnost' obespechivaet personal'naya rabochaya stanciya, a set' ispol'zuetsya v osnovnom dlya obespecheniya sovmestnogo dostupa k fajlam brigady, razrabatyvayushchej produkt. Klient-servernye sistemy menyayut i uproshchayut tehnologiyu obshchego dostupa dlya zagruzki, sborki i vypolneniya kontrol'nyh primerov. Shodnyj progress proizoshel s pol'zovatel'skimi interfejsami. Interfejs WIMP obespechivaet gorazdo bol'shie udobstva pri redaktirovanii tekstov programm i tekstov na estestvennom yazyke. |kran razmerom 24 stroki na 72 kolonki smenilsya polnostranichnym ili dazhe dvuhstranichnym ekranom, poetomu programmisty mogut videt' izmeneniya, kotorye oni delayut, v znachitel'no bolee shirokom kontekste. Celaya novaya programmnaya otrasl' - korobochnye pakety Ryadom s klassicheskoj industriej programmnyh produktov shiroko razvilas' eshche odna. Prodazhi programmnyh produktov chislyatsya sotnyami tysyach i dazhe millionami. Celye moshchnye pakety mozhno priobresti po cene men'shej, chem stoimost' oplaty odnogo rabochego dnya programmista. |ti dve otrasli vo mnogom razlichny i sushchestvuyut parallel'no. Klassicheskaya programmnaya industriya. V 1975 godu programmnaya industriya imela neskol'ko otdel'nyh i do nekotoroj stepeni razlichnyh sostavnyh chastej, sushchestvuyushchih po sej den': - Proizvoditeli komp'yuterov, postavlyayushchie takzhe operacionnye sistemy, kompilyatory i utility dlya svoih produktov. - Pol'zovateli prilozhenij, naprimer, v informacionno-upravlyayushchih sistemah, bankah, strahovyh kompaniyah, pravitel'stvennyh uchrezhdeniyah, sozdayushchie pakety programm dlya sobstvennogo upotrebleniya. - Razrabotchiki zakaznyh programm, rabotayushchie po kontraktu s pol'zovatelem. Mnogie iz etih podryadchikov specializiruyutsya na prilozheniyah dlya voennoj sfery, gde trebovaniya, standarty i marketingovye procedury nosyat specificheskij harakter. - Razrabotchiki kommercheskih paketov, v to vremya razrabatyvavshie, v osnovnom, bol'shie prilozheniya dlya specificheskih rynkov, takie kak pakety statisticheskogo analiza i avtomaticheskogo proektirovaniya. Tom Demarko otmechaet fragmentaciyu klassicheskoj industrii razrabotki programmnogo obespecheniya, osobenno v chasti pol'zovatelej prilozhenij: YA ne ozhidal, chto eta oblast' raspadetsya na otdel'nye nishi. Priemy raboty v bol'shej stepeni opredelyayutsya nishej, chem ispol'zovaniem obshchih metodov analiza sistem, yazykov programmirovaniya i tehnologij testirovaniya. Ada byl poslednim iz yazykov obshchego naznacheniya, i on stal yazykov nishi. V nishe obychnyh kommercheskih prilozhenij znachitel'nyj vklad sdelan yazykami chetvertogo pokoleniya (4GL). Bem pishet, chto "naibolee udachnye iz 4GL yavilis' rezul'tatom napisaniya kakoj-libo chasti oblasti prilozhenij na yazyke opcij i parametrov". Naibolee shiroko rasprostranennymi iz etih 4GL yavlyayutsya generatory prilozhenij i kombinirovannye pakety baz dannyh i svyazi s yazykami zaprosov. Miry operacionnyh sistem ob®edinilis'. V 1975 godu bylo izobili operacionnyh sistem - u kazhdogo proizvoditelya komp'yuterov byla, po krajnej mere, odna patentovannaya operacionnaya sistema dlya kazhdoj proizvodstvennoj serii, a chasto i dve. Naskol'ko izmenilos' polozhenie segodnya! Lozungom dnya stali otkrytye sistemy, i ostalos' lish' pyat' glavnyh operacionnyh sred, dlya kotoryh sozdayutsya pakety prilozhenij (v hronologicheskom poryadke): - IBM MVS i VM - DEC VMS - Unix v tom ili inom variante - IBM PC, bud' to DOS, OS/2 ili Windows - Apple Macintosh. Industriya korobochnyh produktov. |konomicheskie zakony dlya razrabotchikov v etoj otrasli sovershenno otlichny ot teh, kotorye dejstvuyut v klassicheskoj industrii: stoimost' razrabotki nuzhno delit' na bol'shoe kolichestvo ekzemplyarov, rashody na upakovku i marketing vysoki. V klassicheskoj industrii pri vnutrifirmennoj razrabotke grafik rabot i nabor funkcij mogli byt' izmeneny, v otlichie ot stoimosti razrabotki. Na otkrytom rynke zhestkoj konkurencii sroki i funkcional'nost' polnost'yu dominiruyut nad zatratami na razrabotku. Kak i sledovalo ozhidat', stol' razlichnye ekonomicheskie trebovaniya porodili ves'ma razlichayushchiesya kul'tury programmirovaniya. V klassicheskoj industrii lidiruyushchee polozhenie zanyali krupnye firmy s ustanovivshimisya stilyami upravleniya i kul'turoj raboty. V korobochnoj industrii, naprotiv, voznikli sotni nachinayushchih firm, nichem ne svyazannyh i sosredotochennyh na konechnoj celi, a ne na processe. V takoj atmosfere talant otdel'nogo programmista vsegda cenitsya znachitel'no vyshe, i sushchestvuet podspudnoe 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 derzhalsya za svoj terminal, poka smenilos' celoe pokolenie bystryh trubok s malen'kim ekranom.

Last-modified: Sat, 10 Aug 2002 16:33:38 GMT
Ocenite etot tekst: