Perdėta optimizacija
Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Perdėta optimizacija – neapgalvotas taikymas įvairių metodų, kurie turėtų pagreitinti programos vykdymą, tačiau iš tiesų neturi jam įtakos, yra potencialus įvairių kitų klaidų šaltinis ir neretai apsunkina vėlesnį programos vystymą. Nereti atvejai, kai taip „optimizuota“ programa pradeda dirbti lėčiau.
Žymus programuotojas ir mokomosios literatūros autorius Rob Pike pateikia šešias taisykles, paaiškinančias šią problemą ir padedančias jos išvengti (šaltinis):
- Jūs negalite pasakyti, kur programa praleidžia didžiąją dalį vykdymo laiko. Butelio kaklelis galimas netikėčiausiose vietose, todėl neverta aukoti aiškumo vardan greičio kol neaišku, jog daug užtrunka būtent šis algoritmo dalies vykdymas.
- Būtina matuoti įvairių dalių vykdymo trukmę. Nebandykite didinti vykdymo greičio neatlikę šių matavimų (ir net po to, jei neakivaizdu, jog kurios nors algoritmo dalies vykdymas užtrunka daug ilgiau, nei kitų).
- Sudėtingi ir gudrūs algoritmai gali būti lėti jei n nedidelis, o n labai dažnai yra nedidelis (n gali būti rūšiuojamo sąrašo ilgis ir pan – vert. past.). Jei nesate tikri jog n dažnai bus didelis, geriau naudokite paprastesnius algoritmų variantus. Net jei n tikrai bus didelis, ši jūsų programos dalis gali ir nebūti butelio kaklelis.
- Sudėtingi algoritmai gali turėti daugiau klaidų nei paprasti, ir juos daug sunkiau suprogramuoti. Kur galima, naudokite paprastus algoritmus ir paprastas duomenų struktūras.
- Duomenų struktūros reikšmingesnės nei algoritmai. Gerai parinkus duomenų struktūras, dauguma algoritmų tampa akivaizdūs. Būtent duomenų struktūros, ne algoritmai yra svarbiausia programavime.
- Nėra tokio dalyko kaip taisyklė numeris šeši.
Patarimai pateikiami C kalbai, tačiau jie atrodo teisingi ir daugumai kitų kalbų. Programuotojų leksikone esama ir „smarkesnių“ šių teiginių formuluočių:
- Pirmoji ir antroji taisykle kai kada apibendrinamos teiginiu „nesavalaikė optimizacija yra visos velniavos šaknys“.
- Trečioji ir ketvirtoji taisykle apibendrinama sakant „jei abejoji, ką daryti – naudok grubią jėgą“.
- Penktoji taisyklė kitaip nusakoma „rašyk kvailą kodą darbui su išmintingomis duomenų struktūromis“.
Šių principų buvo laikomasi kuriant Unix operacinę sistemą, todėl jie neretai vadinami Unix filosofija.
Kraštutinio paprastumo šalininkai teigia, jog paprastai ir aiškiai parašyta programa geresnė net jei sudėtingesnė programa būtų nežymiai greitesnė ar tiksliau atitiktų pradinę specifikaciją (blogiau yra geriau).
[taisyti] Pavyzdys
Trijų ar keturių elementų ilgio sąraše paieška perrenkant elementus nebus lėtesnė nei naudojant dichotominės paieškos algoritmą.