ah 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容kt, i vtorostepennye zadachi - sozdanie
predstavlenij etih abstraktnyh ob容ktov 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容kta 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容mlemye svojstva etoj nesokratimoj sushchnosti sovremennyh
programmnyh sistem: slozhnost', soglasovannost', izmenyaemost' i nezrimost'.
Slozhnost'. Slozhnost' programmnyh ob容ktov 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容dinyaem 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容kta - 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容ktov, 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容ktami 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座asneniya, 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容kty 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容mnye 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容dinennye 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容ktno-orientirovannoe programmirovanie. Mnogie, izuchayushchie iskusstvo
programmirovaniya, svyazyvayut s ob容ktno-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容kta 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容ktno-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座asnenie 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容m 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容kt, geometriya kotorogo otrazhaet sushchnost'.
Programmnaya sistema ne yavlyaetsya takim ob容ktom.
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容ma 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 gd