Czy zatraciliśmy sztukę czystej optymalizacji?
Wcześni inżynierowie pracowali w warunkach bardzo dużych ograniczeń. Komputer nawigacyjny Apollo miał tylko 2 KB pamięci RAM. Każdy bit miał znaczenie. Każdy cykl procesora był kluczowy.
Dzisiaj mamy gigabajty pamięci. Często rozwiązujemy problemy, dodając więcej sprzętu. Jeśli kod jest wolny lub zasobożerny, dodajemy więcej pamięci RAM. Ten nawyk sprawia, że tracimy umiejętność czystej optymalizacji.
Możesz pisać lepsze oprogramowanie, myśląc o ograniczeniach.
Spójrz na to, jak przetwarzasz duży plik tekstowy w Pythonie.
Typowe podejście: Wielu programistów wczytuje cały plik do pamięci naraz.
- Używasz
f.readlines(). - To ładuje każdą linię do listy w pamięci RAM.
- Jeśli Twój plik ma 10 GB, potrzebujesz 10 GB pamięci RAM.
- To podejście zawodzi na małych serwerach lub urządzeniach o ograniczonych zasobach.
Zoptymalizowane podejście: Przetwarzaj plik linia po linii.
- Iterujesz bezpośrednio po obiekcie pliku.
- Python odczytuje jedną linię, przetwarza ją i przechodzi do następnej.
- Zużycie pamięci pozostaje niskie i stałe.
- Nie ma znaczenia, czy plik ma 1 MB, czy 100 GB.
Różnica tkwi w filozofii inżynierskiej.
Dodawanie większej ilości zasobów to rozwiązanie tymczasowe. Tworzy ono kruche oprogramowanie. Wykorzystanie ograniczeń do projektowania pozwala tworzyć solidne oprogramowanie.
Optymalizacja to nie tylko szybkość. Chodzi o świadomość wykorzystywanych zasobów.
Pisząc kod, zadaj sobie pytania:
- Ile pamięci to zużywa?
- Czy to będzie działać, jeśli dane powiększą się dziesięciokrotnie?
- Czy polegam na drogim sprzęcie, aby ukryć słaby kod?
Lepsze oprogramowanie wynika z dyscypliny.
Źródło: https://dev.to/prabashanadev/have-we-lost-the-art-of-pure-optimization-31b9