Strona główna > Inne > Przedwczesna optymalizacja

Przedwczesna optymalizacja

Pojęcie przedwczesnej optymalizacji … zastanowienie się nad tym😉.

Uderzyło mnie to przy próbie pisania w pl/sql. Poczułem się w tym na tyle swobodnie, że zacząłem tworzyć już z myślą o wydajności, wtedy kiedy jeszcze głównych założeń algorytmu nie miałem do końca uchwyconych. I straciłem pół dnia na roztrząsanie technicznych szczegółów (i to jeszcze na siłę próbowałem zrobić to sam, gdy mogłem zapytać o pomoc).
Zbyt szybko chciałem iść na skróty, kiedy musiałem poruszać się po omacku.
Lepiej jest więc napisać coś co już na starcie nie musi być optymalne, aby mieć przynajmniej pewność, że działa. Najpierw niech działa (zostanie zrozumiałe), potem może być udoskonalanie.

To znaczy: podążanie za przeczuciem do idealnego rozwiązania jest dobre kiedy umiesz się poruszać sprawnie w danym środowisku. W innym wypadku lepiej jest uważać na każdy krok (nie pomijać go). I liczy się z tym, że w pierwszej kolejności stwierdzenie „działa”, jest głównym wyznacznikiem tego że zmierzamy do celu.

Słowa te były szybkim spisaniem wrażeń, a poniżej są już dłuższe przemyślenia, poszukiwania😉.

Poszukiwania: wrzucenie tytułu tego postu do google translate (Premature Optimization) i zapytanie poprzez google.
Otrzymane linki:

1. http://www.c2.com/cgi/wiki?PrematureOptimization
Wiele ciekawych spostrzeżeń, nawet jest wspomniane pojęcie przedwczesnej refaktoryzacji😉 – ciekawe co z tym.
Nawet znalazłem trochę potwierdzenia tego co napisałem na samym początku. Ciekawy cytat mówiący o prawidłowym zachowaniu hierarchii jeśli już chcemy optymalizować:

1. Make it work.
2. Make it right.
3. Make it fast.

2. http://prematureoptimization.org/blog/
A to wyglądający na ciekawy blog, choć nie widzę większych związków z tym czego szukałem😉.

3. http://www.flounder.com/optimization.htm
Opis trzech ścieżki/podejścia do optymalizacji, i która jest właściwa. Może trochę staroświeckie, ale naprawdę ciekawe przypadki. Spojrzenie na potrzebę optymalizacji trochę bardziej ze zdroworozsądkowego podejścia.

4. http://www.acm.org/ubiquity/views/v7i24_fallacy.html
Tu jest o tym jak można przesadzić w drugą stronę, kiedy wie się że nie należy robić tego przedwcześnie. Gdy zupełnie rezygnuje się z tego lub odraczając to na bliżej nieokreślony czas.
Pojęcie „accidentally giving up performance” – w skrócie, powinieneś być świadomy, że poświęcasz w danym czasie wydajność, zwykle na rzecz czegoś innego (czytelność, utrzymanie), że nie odrzucasz tego „z default_u”.
Ciekawy cytat:

Observation #6: Software engineers have been led to believe that their time is more valuable than CPU time; therefore, wasting CPU cycles in order to reduce development time is always a win. They’ve forgotten, however, that the application users’ time is more valuable than their time.

Coś w tym stylu z mojego podwórka: odpuszczenie wydajności kosztem wygody utrzymania/czytelność, która potem i tak została utracona. Funkcji, która miała wyszukiwać po bazie danych, przekształciła się w funkcję filtrująca to co z bazy jest brane. Pewnie stało się głównie to z powodu tego że łatwiej było napisać warunek odsiewający zwracany wynik, niż wyrazić go w formie sql. (Także pewnie przyczyniło się do tego to, że pojawiło się raz coś takiego i nie zostało to dostatecznie szybko zmienione, doprowadzając do sytuacji w której inni traktowali coś takiego jako normalny sposób postępowania🙂, coś w stylu teorii „wybitego okna”).

5. http://www.cookcomputing.com/blog/archives/000084.html
Link do którego odnosił się poprzedni link, podobna rzecz. I to jest także link odnoszący się do poprzedniego linku (4). Wygląda na to że jest on szeroko komentowany😉.

6. http://www.bluebytesoftware.com/blog/2010/09/06/ThePrematureOptimizationIsEvilMyth.aspx
Bardziej techniczne spojrzenie – wymaga dłuższego skupienia (czytania :)), ale warto, coś w stylu linku 3.

Wystarczy
Widać, że na ten temat można dużo pisać, znaleźć w sieci. W skrócie można powiedzieć, że należy odnaleźć swoje własne wyczucie balansu pomiędzy dwoma ekstremami.

Kategorie:Inne Tags: ,
  1. Brak komentarzy.
  1. No trackbacks yet.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: