Problēma ar programmēšanu

80. un 90. gados Bjarne Stroustrup izstrādāja un ieviesa C++ programmēšanas valodu, kas popularizēja objektorientēto programmēšanu un ietekmēja daudzas citas programmēšanas valodas, tostarp Java.





C++ joprojām ir arhetipiska augsta līmeņa datorvaloda (tas ir, tāda, kas saglabā dabiskās, cilvēka valodas iezīmes), un to joprojām izmanto miljoniem programmētāju. Daudzas datoru un interneta laikmeta sistēmas un lietojumprogrammas tika rakstītas C++ valodā. Neskatoties uz to, valoda joprojām ir pretrunīga, galvenokārt tāpēc, ka to ir ļoti grūti iemācīties un lietot, kā arī tāpēc, ka Stroustrup dizains ļauj izstrādātājiem pieļaut nopietnas programmēšanas kļūdas, lai saglabātu savu brīvību.

Stroustrup, daudzus gadus pētnieks AT&T Bell Labs, tagad ir datorzinātņu profesors Teksasas A&M universitātes Inženieru katedrā netālu no Hjūstonas.

Tehnoloģiju apskats : Kāpēc lielākā daļa programmatūras ir tik slikta?



Bjarne Stroustrup : Dažas programmatūras patiesībā ir diezgan labas pēc jebkuriem standartiem. Padomājiet par Marsa roveriem, Google un cilvēka genoma projektu. Tā ir kvalitatīva programmatūra! Pirms piecpadsmit gadiem lielākā daļa cilvēku un jo īpaši lielākā daļa ekspertu būtu teikuši, ka katrs no šiem piemēriem nav iespējams. Mūsu tehnoloģiskā civilizācija ir atkarīga no programmatūras, tāpēc, ja programmatūra būtu bijusi tikpat slikta kā tās sliktākā reputācija, lielākā daļa no mums jau tagad būtu miruši.

No otras puses, skatoties uz vidējiem koda fragmentiem, es varu raudāt. Struktūra ir šausminoša, un programmētāji nepārprotami nebija dziļi domājuši par pareizību, algoritmiem, datu struktūrām vai apkopi. Lielākā daļa cilvēku faktiski nelasa kodu; viņi vienkārši redz, ka Internet Explorer sastingst.

Es domāju, ka patiesā problēma ir tā, ka mēs (tas ir, mēs, programmatūras izstrādātāji) esam pastāvīgā avārijas stāvoklī un ķeramies pie salmiem, lai paveiktu savu darbu. Mēs veicam daudzus mazus brīnumus, izmantojot izmēģinājumus un kļūdas, pārmērīgi izmantojot brutālu spēku un daudz, daudz pārbaužu, taču bieži vien ar to nepietiek.



Programmatūras izstrādātāji ir kļuvuši prasmīgi sarežģītajā mākslā, kā izveidot pietiekami uzticamas sistēmas no neuzticamām daļām. Traucējums ir tāds, ka bieži vien mēs precīzi nezinām, kā mēs to izdarījām: sistēma vienkārši attīstījās par kaut ko minimāli pieņemamu. Personīgi es gribētu zināt, kad sistēma darbosies un kāpēc tā darbosies.

BĒRNI : Kā mēs varam novērst nekārtību, kurā esam nonākuši?

BS : Teorētiski atbilde ir vienkārša: labāk izglītojiet mūsu programmatūras izstrādātājus, izmantojiet piemērotākas projektēšanas metodes un izstrādājiet elastīgumu un ilglaicīgu. Atalgojiet pareizas, stabilas un drošas sistēmas. Sodīt paviršību.



Patiesībā tas ir neiespējami. Cilvēki atalgo izstrādātājus, kuri piegādā programmatūru, kas ir lēta, kļūdaina un pirmā. Tas ir tāpēc, ka cilvēki tagad vēlas jaunus iedomātus sīkrīkus. Viņi nevajag vēlas neērtības, nevēlas apgūt jaunus veidus, kā mijiedarboties ar saviem datoriem, nevēlas piegādes aizkavēšanos un nevēlas maksāt papildus par kvalitāti (ja vien tas nav acīmredzams, un bieži vien pat tad). Un bez reālām izmaiņām lietotāju uzvedībā programmatūras piegādātāji, visticamāk, nemainīsies.

Mēs nevaram vienkārši apturēt pasauli uz desmit gadiem, kamēr mēs pārprogrammējam visu, sākot no mūsu kafijas automātiem līdz mūsu finanšu sistēmām. No otras puses, tikai muldēšana ir dārga, bīstama un nomācoša. Ir nepieciešami būtiski uzlabojumi, un tie var notikt tikai pakāpeniski. Viņiem jānāk plašā frontē; ar vienu izmaiņu nepietiek.

Viena problēma ir tā, ka akadēmiskās dūmu skursteņi traucē: pārāk daudz cilvēku uzspiež kādu jomu kā panaceju. Var palīdzēt labākas projektēšanas metodes, var palīdzēt labākas specifikācijas metodes, var palīdzēt labākas programmēšanas valodas, var palīdzēt labākas testēšanas tehnoloģijas, var palīdzēt labākas operētājsistēmas, var palīdzēt labākas starpprogrammatūras infrastruktūras, var palīdzēt labāka izpratne par lietojumprogrammu domēniem, labāka datu izpratne struktūras un algoritmi var palīdzēt un tā tālāk. Piemēram, tipu teorija, uz modeļiem balstīta izstrāde un formālās metodes neapšaubāmi var sniegt būtisku palīdzību dažās jomās, taču uz risinājums, izslēdzot citas pieejas, katra garantē neveiksmi liela mēroga projektos. Cilvēki spiež to, ko zina un redzēto, strādā; kā viņi varēja rīkoties citādi? Taču dažiem ir tehnisks briedums, lai līdzsvarotu prasības un resursus.



BĒRNI : C++ pamatā bija ideja, ka programmētāji strādās vairāk, apmaiņā pret efektīvāku kodu. Bell Labs vēlējās valodu, ko daži patiešām gudri cilvēki izmantotu, lai rakstītu kodu, kas darbotos tādos datoros kā elektroniskās komutācijas sistēmas (ESS), kas nav ļoti ātri. Mūsdienās ir daudz programmatūras izstrādātāju, un datori ir ļoti ātri. Vai tas sabojā C++ punktu?

BS : C++ nebija īpaši paredzēts lielām komutācijas iekārtām, bet gan milzīgam lietojumu klāstam. Bell Labs bija mājvieta neticami daudziem interesantiem projektiem, kas aptver visu mērogu un izmantoja būtībā visu veidu datorus un operētājsistēmas. Bet jā, vidējais Bell Labs programmētājs bija ievērojami spējīgāks, nekā vairums cilvēku uzskatīja par vidusmēra programmētāju, un uzticamība un veiktspēja (šajā secībā) tika uzskatīta par ievērojami svarīgāku nekā vairumā citu vietu.

Veiktspēja joprojām ir problēma daudzās lietojumprogrammās, kuras mani interesē: saskarņu reaģētspēja, lietojumprogrammu palaišanas un aizvēršanas laiks. Programmatūras izstrādātāji ir neitralizējuši mūsdienu datoru aparatūras apbrīnojamo veiktspēju, pievienojot slāni pēc slāņa pārmērīgi izstrādātas [programmatūras] abstrakcijas. Šķiet, ka esam sasnieguši aparatūras lineārā ātruma robežas, taču daudzos gadījumos mēs varētu atgūt no programmatūras par pāris apmēriem.

Tomēr C++ patiešām ir kļuvis pārāk draudzīgs ekspertiem laikā, kad vidējā programmatūras izstrādātāja efektīvas formālās izglītības līmenis ir samazinājies. Tomēr risinājums ir nevis nomākt programmēšanas valodas, bet gan izmantot dažādas programmēšanas valodas un izglītot vairāk ekspertu. Šiem ekspertiem ir jābūt valodām, un C++ ir viena no šīm valodām.

BĒRNI Retrospektīvi, izstrādājot C++, vai jūsu lēmums samierināties ar programmētāja efektivitāti, drošību un programmatūras uzticamību ar izpildes laika veiktspēju nebija būtiska kļūda?

BS : Nu, es nedomāju, ka esmu izdarījis šādu kompromisu. Es gribu elegantu un efektīvs kods. Dažreiz man tas sanāk. Šīs dihotomijas (starp efektivitāti un pareizību, efektivitāti pret programmētāja laiku, efektivitāti pret augstu līmeni utt.) ir fiktīvas.

Tas, ko es darīju, bija izstrādāt C++ kā sistēmu programmēšanas valodu: es gribēju rakstīt ierīču draiverus, iegultās sistēmas un citu kodu, kas nepieciešams tieši aparatūras lietošanai. Tālāk es gribēju, lai C++ būtu laba valoda rīku projektēšanai. Tam bija nepieciešama elastība un veiktspēja, kā arī spēja izteikt elegantas saskarnes. Mans viedoklis bija tāds, ka, lai veiktu augstāka līmeņa lietas, izveidotu pilnīgas lietojumprogrammas, vispirms ir jāiegādājas, jāveido vai jāaizņemas bibliotēkas, kas nodrošina atbilstošas ​​abstrakcijas. Bieži vien, kad cilvēkiem ir problēmas ar C++, patiesā problēma ir tā, ka viņiem nav atbilstošu bibliotēku vai viņi nevar atrast pieejamās bibliotēkas.

Citas valodas ir mēģinājušas tiešāk atbalstīt augsta līmeņa lietojumprogrammas.

Tas darbojas, bet bieži vien šis atbalsts nāk uz specializācijas rēķina. Personīgi es neveidotu rīku, kas varētu darīt tikai to, ko es vēlos, — es tiecos pēc vispārīguma.

BĒRNI : Kā jūs izskaidrojat to, ka C++ ir gan plaši kritizēts, gan daudzu programmētāju aizvainojums, bet tajā pašā laikā ļoti plaši izmantots? Kāpēc tas ir tik veiksmīgs?

BS : Atbilde ir vienkārša: Ir tikai divu veidu valodas: tās, par kurām visi sūdzas, un tās, par kurām neviens nelieto.

Valodās, kuras tiek uzskatītas par šausmīgām, ir izstrādātas vairāk noderīgu sistēmu nekā valodās, kuras tiek slavētas par skaistām — daudz vairāk. Programmēšanas valodas mērķis ir palīdzēt izveidot labas sistēmas, kurās labo var definēt dažādos veidos. Mana īsā definīcija ir pareiza, apkopjama un pietiekami ātra. Estētikai ir nozīme, bet pirmām kārtām valodai ir jābūt noderīgai; tai jāļauj reālās pasaules programmētājiem kodolīgi un par pieņemamu cenu paust reālās pasaules idejas.

Galvenais C++ veiksmes iemesls ir vienkārši tas, ka tas atbilst ierobežotajiem dizaina mērķiem: tas var tieši un efektīvi paust milzīgu ideju klāstu. C++ nebija paredzēts, lai patiešām labi paveiktu tikai vienu lietu vai neļautu cilvēkiem darīt lietas, ko uzskata par sliktu. Tā vietā es koncentrējos uz vispārīgumu un veiktspēju.

Esmu pārliecināts, ka katram programmētājam, kuram nepatīk C++, ir kāds, kuram tas patīk. Tomēr mans draugs devās uz konferenci, kurā galvenais runātājs lūdza auditoriju, paceļot roku, norādīt vienu, cik cilvēkiem nepatīk C++, un diviem, cik cilvēku ir uzrakstījuši C++ programmu. Pirmajā grupā bija divreiz vairāk cilvēku nekā otrajā. Izteikt nepatiku pret kaut ko, ko nezināt, parasti sauc par aizspriedumiem. Turklāt sūdzību iesniedzēji vienmēr ir skaļāki un pārliecinātāki nekā atbalstītāji — saprātīgi cilvēki atzīst trūkumus. Es domāju, ka es zinu vairāk par problēmām ar C++ nekā par jebkuru citu, taču es arī zinu, kā no tām izvairīties un kā izmantot C++ stiprās puses.

Un tad, protams, jūs negaidāt, ka valodu atbalstītāji, kas zaudēja konkurencē ar C++, izturēsies pret to pieklājīgi. Programmatūras izstrādei nav tādas profesionalitātes pakāpes, lai gan es ceru, ka tā beidzot būs. Zinātne šajā ziņā atšķiras: kad uzvar jauns rīks, tehnika vai teorija, cilvēki to uztver kā progresu. Programmatūras jomā konkurentu un priekšgājēju ieguldījums netiek plaši atzīts, novērtēts vai pat saprasts.

BĒRNI : iekšā C++ dizains un evolūcija , jūs apgalvojat, ka Kērkegors ir ietekmējis jūsu priekšstatu par valodu. Vai tas ir joks?

BS : Varbūt mazliet pretenciozi, bet ne joks. Daudz domāšanas par programmatūras izstrādi ir vērsta uz grupu, komandu, uzņēmumu. Tas bieži tiek darīts tiktāl, ka indivīds ir pilnībā iegremdēts korporatīvajā kultūrā, bez izejas unikāliem talantiem un prasmēm. Korporatīvā prakse var būt tieši naidīga pret personām ar izcilām prasmēm un iniciatīvu tehniskos jautājumos. Es uzskatu šādu tehnisko cilvēku vadīšanu par cietsirdīgu un izšķērdīgu. Kierkegaard bija spēcīgs indivīda aizstāvis pret pūli, un viņam ir nopietnas diskusijas par estētikas un ētiskas uzvedības nozīmi. Es nevarēju norādīt uz konkrētu valodas iezīmi un teikt: redzi, tur ir deviņpadsmitā gadsimta filozofa ietekme, taču viņš ir viens no iemesliem, kāpēc es nevēlos likvidēt ekspertu līmeņa iezīmes, atcelt ļaunprātīgu izmantošanu un ierobežot funkcijas. atbalsts izmanto tikai tos, par kuriem es zinu, ka tie ir noderīgi. Tomēr es neesmu īpaši sajūsmā par Kērkegora reliģisko filozofiju.

BĒRNI : Ko tu visvairāk nožēlo?

BS : Bez nožēlas! Nu, protams, es sapņoju par to, ko es varētu būt izdarījis savādāk un labāk, bet ja nopietni, kas es esmu, lai uzminētu, teiksim, 1984. gada Bjarne? Viņš, iespējams, bija mazāk pieredzējis nekā es, taču viņš bija ne mazāk gudrs, iespējams, gudrāks, un viņš labāk saprata 1984. gada vārdu nekā es. C++ ir izmantots, lai izveidotu daudzas sistēmas, kas uzlabo mūsu dzīvi, un tas ir būtiski pozitīvi ietekmējis vēlākās valodas un sistēmas. Tas ir kaut kas, ar ko lepoties.

Klikšķis šeit lai izlasītu mūsu otro interviju ar Stroustrupu.

paslēpties