Problema su programavimu

1980-aisiais ir 90-aisiais Bjarne'as Stroustrupas sukūrė ir įdiegė C++ programavimo kalbą, kuri išpopuliarino objektinį programavimą ir paveikė daugybę kitų programavimo kalbų, įskaitant Java.





C++ tebėra archetipinė aukšto lygio kompiuterių kalba (tai yra ta, kuri išsaugo natūralios, žmogaus kalbos ypatybes), ir ją vis dar naudoja milijonai programuotojų. Daugelis kompiuterių ir interneto eros sistemų ir programų buvo parašytos C++ kalba. Nepaisant to, kalba išlieka prieštaringa, daugiausia dėl to, kad ją sunku išmokti ir naudoti, taip pat todėl, kad Stroustrup dizainas leidžia kūrėjams padaryti rimtų programavimo klaidų, siekiant išsaugoti savo laisvę.

Stroustrup, daug metų dirbęs AT&T Bell Labs tyrėjas, dabar yra kompiuterių mokslo profesorius Teksaso A&M universiteto, netoli Hiustono, Inžinerijos katedroje.

Technologijų apžvalga : Kodėl dauguma programinės įrangos yra tokia bloga?



Bjarne'as Stroustrupas : Kai kuri programinė įranga yra gana gera pagal bet kokius standartus. Pagalvokite apie „Mars Rovers“, „Google“ ir žmogaus genomo projektą. Tai kokybiška programinė įranga! Prieš penkiolika metų dauguma žmonių, o ypač dauguma ekspertų, būtų sakę, kad kiekvienas iš tų pavyzdžių yra neįmanomas. Mūsų technologinė civilizacija priklauso nuo programinės įrangos, taigi, jei programinė įranga būtų buvusi tokia pat bloga, kaip jos prasčiausia reputacija, dauguma iš mūsų jau būtų mirę.

Kita vertus, žiūrėdamas į vidutines kodo dalis galiu verkti. Struktūra yra pasibaisėtina, o programuotojai aiškiai negalvojo apie teisingumą, algoritmus, duomenų struktūras ar techninę priežiūrą. Dauguma žmonių iš tikrųjų neskaito kodo; jie tiesiog mato, kad Internet Explorer užstringa.

Manau, kad tikroji problema yra ta, kad mes (ty mes, programinės įrangos kūrėjai) esame nuolatinėje avarinėje būsenoje, griebiamės už šiaudų, kad atliktume savo darbą. Mes darome daug nedidelių stebuklų per bandymus ir klaidas, per daug naudodami žiaurią jėgą ir daug išbandydami, bet dažnai to nepakanka.



Programinės įrangos kūrėjai įgudo sudėtingą meną sukurti pakankamai patikimas sistemas iš nepatikimų dalių. Bėda ta, kad dažnai tiksliai nežinome, kaip tai padarėme: sistema tiesiog tarsi išsivystė į kažką minimaliai priimtino. Asmeniškai man labiau patinka žinoti, kada sistema veiks ir kodėl ji veiks.

VAIKAI : Kaip galime ištaisyti netvarką, kurioje esame?

BS : Teoriškai atsakymas paprastas: geriau mokykite mūsų programinės įrangos kūrėjus, naudokite tinkamesnius projektavimo metodus ir kurkite lankstesnį ir ilgalaikį dizainą. Apdovanokite teisingas, tvirtas ir saugias sistemas. Nubausti už aplaidumą.



Tiesą sakant, tai neįmanoma. Žmonės apdovanoja kūrėjus, kurie tiekia pigią, klaidingą ir pirmąją programinę įrangą. Taip yra todėl, kad žmonės dabar nori naujų įmantrių prietaisų. Jie nedaryk nori nepatogumų, nenori mokytis naujų būdų, kaip bendrauti su savo kompiuteriais, nenori vėluoti pristatymo ir nenori mokėti papildomai už kokybę (nebent tai akivaizdu iš anksto – ir dažnai net tada). Ir be realių vartotojų elgesio pokyčių, programinės įrangos tiekėjai vargu ar pasikeis.

Negalime tiesiog sustabdyti pasaulio dešimtmečiui, kol perprogramuojame viską nuo kavos aparatų iki finansinių sistemų. Kita vertus, vien maištauti yra brangu, pavojinga ir slegia. Reikalingi dideli patobulinimai, ir jie gali įvykti tik palaipsniui. Jie turi ateiti plačiu frontu; vieno pakeitimo neužtenka.

Viena problema yra ta, kad akademinės dūmų kaminos trukdo: per daug žmonių stumia kurią nors sritį kaip panacėją. Gali padėti geresni projektavimo metodai, gali padėti geresni specifikacijų metodai, gali padėti geresnės programavimo kalbos, gali padėti geresnės testavimo technologijos, gali padėti geresnės operacinės sistemos, gali padėti geresnė tarpinės programinės įrangos infrastruktūra, gali padėti geresnis programų sričių supratimas, geresnis duomenų supratimas. struktūros ir algoritmai gali padėti ir pan. Pavyzdžiui, tipų teorija, modeliu pagrįsta plėtra ir formalūs metodai neabejotinai gali padėti kai kuriose srityse, tačiau į sprendimas, atmetus kitus metodus, kiekvienas garantuoja nesėkmę didelės apimties projektuose. Žmonės veikia tai, ką žino ir ką matė; kaip jie galėtų pasielgti kitaip? Tačiau nedaugelis turi techninę brandą, kad subalansuotų poreikius ir išteklius.



VAIKAI : C++ idėja buvo ta, kad programuotojai dirbs sunkiau mainais už efektyvesnį kodą. „Bell Labs“ norėjo kalbos, kurią keli tikrai protingi žmonės naudotų rašydami kodą, kuris veiktų tokiuose kompiuteriuose kaip elektroninės perjungimo sistemos (ESS), kurie nėra labai greiti. Šiandien yra daug programinės įrangos kūrėjų, o kompiuteriai yra labai greiti. Ar tai pažeidžia C++ tašką?

BS : C++ nebuvo sukurtas specialiai didelėms perjungimo mašinoms, o daugybei programų. „Bell Labs“ buvo neįtikėtinai daug įdomių projektų, apimančių bet kokį mastą ir naudojančių iš esmės bet kokį kompiuterį ir operacinę sistemą, namai. Bet taip, vidutinis „Bell Labs“ programuotojas buvo daug pajėgesnis nei dauguma žmonių įsivaizduoja vidutinį programuotoją, o patikimumas ir našumas (tokia tvarka) buvo laikomi žymiai svarbesniais nei daugelyje kitų vietų.

Našumas vis dar yra daugelio mane dominančių programų problema: sąsajų jautrumas, programų paleidimo ir uždarymo laikas. Programinės įrangos kūrėjai neutralizavo stulbinamą šiuolaikinės kompiuterių aparatinės įrangos našumą, pridėdami sluoksnis po sluoksnio pernelyg sudėtingų [programinės įrangos] abstrakcijų. Atrodo, kad pasiekėme aparatinės įrangos linijinio greičio ribas, tačiau daugeliu atvejų galime laimėti keletą eilučių iš programinės įrangos.

Be to, C++ iš tiesų tapo per daug draugiškas ekspertams tuo metu, kai sumažėjo vidutinio programinės įrangos kūrėjo veiksmingo formalaus išsilavinimo lygis. Tačiau sprendimas yra ne nutildyti programavimo kalbas, o naudoti įvairias programavimo kalbas ir ugdyti daugiau ekspertų. Turi būti kalbų, kuriomis galėtų naudotis tie ekspertai – ir C++ yra viena iš tų kalbų.

VAIKAI : Žvelgiant retrospektyviai, kurdami C++, ar jūsų sprendimas pakeisti programuotojo efektyvumą, saugumą ir programinės įrangos patikimumą dėl veikimo laiko nebuvo esminė klaida?

BS : Na, nemanau, kad padariau tokį kompromisą. Noriu elegantiškos ir efektyvus kodas. Kartais man tai pavyksta. Šios dichotomijos (tarp efektyvumo ir teisingumo, efektyvumo ir programuotojo laiko, efektyvumo ir aukšto lygio ir kt.) yra netikros.

Tai, ką aš padariau, buvo sukurti C++ kaip sistemų programavimo kalbą: norėjau turėti galimybę rašyti įrenginių tvarkykles, įterptąsias sistemas ir kitą kodą, kuriam reikia tiesiogiai naudoti aparatinę įrangą. Tada norėjau, kad C++ būtų gera kalba kuriant įrankius. Tam reikėjo lankstumo ir našumo, taip pat sugebėjimo išreikšti elegantiškas sąsajas. Mano nuomone, norint atlikti aukštesnio lygio dalykus, sukurti visas programas, pirmiausia reikėjo nusipirkti, kurti arba pasiskolinti bibliotekas, kuriose būtų pateikiamos atitinkamos abstrakcijos. Dažnai, kai žmonės turi problemų su C++, tikroji problema yra ta, kad jie neturi tinkamų bibliotekų arba negali rasti turimų bibliotekų.

Kitos kalbos bandė tiesiogiai palaikyti aukšto lygio programas.

Tai veikia, bet dažnai ta parama kainuoja specializacijos kaina. Asmeniškai aš nekurčiau įrankio, kuris galėtų daryti tik tai, ko noriu – siekiu bendrumo.

VAIKAI : Kaip vertinate tai, kad C++ yra daug kritikuojamas ir piktinamasi daugelio programuotojų, bet tuo pat metu labai plačiai naudojamas? Kodėl jis toks sėkmingas?

BS : Aiškus atsakymas yra toks: yra tik dviejų rūšių kalbos: tos, kuriomis visi skundžiasi, ir tos, kurių niekas nevartoja.

Yra daugiau naudingų sistemų, sukurtų kalbomis, kurios laikomos siaubingomis, nei tomis, kurios giriamos už gražias – daug daugiau. Programavimo kalbos tikslas yra padėti sukurti geras sistemas, kuriose gėrį galima apibrėžti įvairiais būdais. Mano trumpas apibrėžimas yra teisingas, prižiūrimas ir pakankamai greitas. Estetika svarbi, bet pirmiausia kalba turi būti naudinga; ji turi leisti realaus pasaulio programuotojams glaustai ir nebrangiai išreikšti realaus pasaulio idėjas.

Pagrindinė C++ sėkmės priežastis yra ta, kad jis atitinka ribotus dizaino tikslus: jis gali tiesiogiai ir efektyviai išreikšti daugybę idėjų. C++ nebuvo sukurta tam, kad tikrai gerai atliktų tik vieną dalyką arba neleistų žmonėms daryti blogais laikomų dalykų. Vietoj to, aš sutelkiau dėmesį į bendrumą ir našumą.

Esu tikras, kad kiekvienam programuotojui, kuris nemėgsta C++, yra vienas, kuriam tai patinka. Tačiau mano draugas nuvyko į konferenciją, kur pagrindinis pranešėjas paprašė auditorijos pakelti ranką, kiek žmonių nemėgo C++, o antra – kiek žmonių parašė C++ programą. Pirmoje grupėje buvo dvigubai daugiau žmonių nei antroje. Nemėgstamų dalykų išreiškimas tam, ko nežinai, paprastai vadinamas išankstiniu nusistatymu. Be to, besiskundžiantys asmenys visada yra garsesni ir tikresni nei šalininkai – protingi žmonės pripažįsta trūkumus. Manau, kad žinau daugiau apie C++ problemas nei bet kas, bet taip pat žinau, kaip jų išvengti ir kaip panaudoti C++ privalumus.

Ir tada, žinoma, jūs nesitikite, kad kalbų, kurios pralaimėjo konkurencijoje su C++, šalininkai mandagiai elgsis. Programinės įrangos kūrimas neturi tokio profesionalumo, nors tikiuosi, kad galiausiai taip bus. Mokslas šiuo požiūriu skiriasi: kai laimi naujas įrankis, technika ar teorija, žmonės tai mato kaip pažangą. Programinės įrangos srityje konkurentų ir pirmtakų indėlis nėra plačiai pripažįstamas, vertinamas ar net nesuprantamas.

VAIKAI : Į C++ dizainas ir evoliucija , teigiate, kad Kierkegaardas turėjo įtakos jūsų kalbos sampratai. Ar tai pokštas?

BS : Galbūt šiek tiek pretenzingas, bet ne pokštas. Daug mąstymo apie programinės įrangos kūrimą yra sutelkta į grupę, komandą, įmonę. Tai dažnai daroma taip, kad asmuo yra visiškai paniręs į įmonės kultūrą ir neturi unikalių talentų ir įgūdžių. Įmonių praktika gali būti tiesiogiai priešiška asmenims, turintiems išskirtinių įgūdžių ir iniciatyvumo techniniuose reikaluose. Manau, kad toks techninių žmonių valdymas yra žiaurus ir švaistomas. Kierkegaardas buvo stiprus individo šalininkas prieš minią ir rimtai diskutuoja apie estetikos ir etiško elgesio svarbą. Negalėjau nurodyti konkrečios kalbos ypatybės ir pasakyti: „Žiūrėk, čia XIX amžiaus filosofo įtaka, bet jis yra viena iš mano nenoro pašalinti ekspertų lygio ypatybių, panaikinti netinkamo naudojimo ir apriboti ypatybes šaknų“. palaikymas naudoja tik tuos, kuriuos žinau kaip naudingus. Vis dėlto aš ne itin mėgstu Kierkegaardo religinę filosofiją.

VAIKAI : Ko labiausiai gailitės?

BS : nesigailiu! Na, žinoma, svajoju apie tai, ką būčiau padaręs kitaip ir geriau, bet jei rimtai, kas aš toks, kad galėčiau atspėti, tarkime, 1984 m. vintažinį Bjarne? Galbūt jis buvo mažiau patyręs nei aš, bet ne mažiau protingas, tikriausiai protingesnis ir 1984-ųjų žodį jis suprato geriau nei aš. C++ buvo naudojamas kuriant daugybę sistemų, kurios pagerina mūsų gyvenimą, ir tai padarė didelę teigiamą įtaką vėlesnėms kalboms ir sistemoms. Tuo reikia didžiuotis.

Spustelėkite čia perskaityti antrąjį mūsų interviu su Stroustrup.

paslėpti