Mówiąc ogólnie, do jakiego rodzaju optymalizacji zazwyczaj dążysz przy projektowaniu oprogramowania?
Czy jesteś typem, który woli zoptymalizować swój projekt
- Czas opracowywania (tj. Szybki do napisania i / lub łatwiejszy do utrzymania)?
- Czas przetwarzania
- Miejsce w pamięci (RAM, DB, Disc itp.)
Oczywiście jest to bardzo subiektywna rodzaju problemy są rozwiązane, a terminy zaangażowany, więc chciałbym usłyszeć o powodach, które sprawiają Ci wybrać jedną formę optymalizacji nad drugą.
design
optimization
Jason Whitehorn
źródło
źródło
Odpowiedzi:
Konserwacja
Następnie w razie potrzeby profilowania i optymalizacji pod kątem szybkości. Rzadko kiedykolwiek miałem potrzebę przechowywania - przynajmniej nie w ciągu ostatnich 10 lat. Wcześniej zrobiłem.
źródło
Czas rozwoju
Przetwarzanie i przechowywanie jest tani. Twój czas nie jest.
Wystarczy, aby pamiętać:
To nie znaczy zrobić złą robotę pisania kodu tylko szybko skończyć. Oznacza to napisać kod w sposób, który ułatwia szybki rozwój. To także zależy wyłącznie od twoich przypadków użycia. Jeśli jest to proste, dwa lub trzy strona strona internetowa z formularza kontaktowego prawdopodobnie nie trzeba używać ramy PHP. Kilka obejmuje i skrypt Mailer przyspieszy rozwój. Jeśli zamiast tego planujesz stworzyć elastyczną platformę, na której możesz się rozwijać i dodawać nowe funkcje, warto poświęcić czas na odpowiednie jej rozplanowanie i odpowiednie kodowanie, ponieważ przyspieszy to przyszły rozwój.
W bezpośrednim porównaniu do czasu przetwarzania i przechowywania, skłaniam się ku szybszym czasie rozwoju. Korzysta z collectionutils odejmowania Funkcja pamięci najszybsze i najbardziej efektywne metody odejmowania kolekcje? Nie! Ale to szybszy czas rozwoju. Jeśli napotkasz wydajności lub pamięci zatorów można rozwiązać te później. Optymalizacja przed wiesz, co musi być zoptymalizowany jest stratą czasu i to co mi opowiada przeciw.
źródło
Doświadczenie użytkownika.
To jedyna wartość, która ma znaczenie dla Twojego klienta.
Czas rozwój jest mniej ważne. Mogę napisać w pełni funkcjonalną aplikację wiersza poleceń o wiele szybciej niż GUI, ale jeśli pani Jane nie może wymyślić, jak sprawić, by wypluła raporty, których chce, jest to bezużyteczne.
Konserwacja jest mniej ważne. Mogę naprawić aa huśtawkę naprawdę szybko, ale jeśli jest w środku lasu, użytkownicy nie mogą go znaleźć.
Czas przetwarzania jest mniej ważny. Jeśli zrobię samochód, który idzie od 0 do prędkości światła w ciągu 60 sekund, użytkownicy nie mogą sterować.
Estetyka jest mniej ważna. Mogę namalować Mona Lisa, ale jeśli ona jest ukryta za ścianą nikt nie dostaje się z nią zobaczyć.
User Experience jest jedyną wartością, która ma znaczenie. Złożenia wniosku, który robi dokładnie to, co użytkownik chce w sposób użytkownik spodziewa jest ostatecznym osiągnięciem.
źródło
Jest tylko jedna rzecz, aby zoptymalizować i jest:
Co klienci chcą
Czy Twoi klienci potrzebują najszybciej programu możliwe? Optymalizacja pod kątem szybkości.
Czy Twoi klienci potrzebują absolutnej niezawodności? Optymalizacja za to.
Nie muszą to wydana jutro albo będzie bezużyteczny? Optymalizacja pod względem szybkości rozwoju.
Działa na niezwykle maleńkim urządzeniu zasobów ograniczone? Optymalizacja dla tych zasobów.
źródło
Czas przetwarzania
czas mojego autora nie jest tanie. Co przychodzi odchodzi.Właśnie zaktualizowałem aplikację, z której korzystam w zeszłym roku. Byli całkowicie przepisany aplikację, a chłopiec był to powolny. W końcu musiałem kupić nowy komputer, aby szybko go uruchomić. Gwarantuję, że nie był tani, ale mój czas jest cenniejszy.
źródło
I zazwyczaj nachylona do ograniczenia zużycia pamięci i przydziały. Wiem, że to stara szkoła, ale:
źródło
Powiedziałbym zoptymalizować stronę wydajności, przy czym efektywność zdefiniowana jako kompromis między czasem rozwoju, przyszłej konserwacji, łatwość doświadczenia i zasobów zużytą. Jako deweloper trzeba pogodzić wszystkie z nich, aby utrzymać pewien rodzaj równowagi.
Jak osiągnąć równowagę? Cóż, najpierw trzeba ustalić kilka stałych, takich jak to, co jest termin, jaki sprzęt aplikacja zostanie uruchomiona i na jakiego typu osoby będą go używać. Bez znajomości tych nie można ustanowić właściwą równowagę i priorytety, gdzie jest to potrzebne.
Na przykład, jeśli jesteś rozwijanie aplikacji serwera na potężną maszynę warto kompromis wydajności wydajności, aby zapewnić trafisz nieruchomego termin. Jednakże, jeśli deweloper aplikacja, która musi szybko reagować na działania użytkownika (myślę gry wideo), a następnie trzeba priorytet rutynowych wejściowego, aby zapewnić, że nie jest laggy.
źródło
Jakąkolwiek technologię wirtualizacji używam
Pamiętam czasy, kiedy systemy z więcej niż 512 MB pamięci RAM zostały uznane krwawienie krawędzi? Dni spędzam na pisaniu kodu do przeora.
Pracuję głównie na programach niskiego poziomu, które działają w uprzywilejowanej domenie w środowisku Xen. Nasz pułap dla uprzywilejowanej domeny wynosi 512 MB, pozostawiając resztę pamięci RAM dla naszych klientów. Typowe jest dla nas ograniczenie uprzywilejowanej domeny tylko do jednego rdzenia procesora.
Oto ja, pisząc kod, który będzie działał na nowym serwerze o wartości 6 000 $, a każdy program musi (najlepiej) działać w ramach pułapu przydzielonego 100 kb lub całkowicie unikać dynamicznego przydzielania pamięci.
Zwięźle, zoptymalizować dla:
Muszę też być niezwykle sumienny, jeśli chodzi o czas oczekiwania na zamki, oczekiwanie na I / O lub po prostu czekać w ogóle. Znaczna ilość mojego czasu idzie do poprawy istniejących bibliotek gniazd bez blokowania i patrząc na bardziej praktycznych metod zamka swobodnego programowania.
Każdego dnia uważam, że to trochę ironiczne, że piszę kod, tak jak 15 lat temu, na systemach, które zostały zakupione w zeszłym miesiącu ze względu na postęp technologiczny.
Jest to typowe dla każdego, kto pracuje na platformach osadzonych, a także, choć nawet wielu z tych, co najmniej 1GB do ich dyspozycji. Jak podkreśla Jason, jest to również typowe podczas pisania programów uruchamianych na urządzeniach mobilnych. Lista jest długa, kioski, ciency klienci, ramki do zdjęć itp.
Zaczynam myśleć, że ograniczenia sprzętowe naprawdę oddzielne programistów od ludzi, którzy mogą sprawić, że praca coś nie dbając, co faktycznie zużywa. Martwię się (głosujcie, jeśli trzeba), jakie języki to całkowicie abstrakcyjne sprawdzanie typów i pamięci do zbiorowej puli zdrowego rozsądku, która (kiedyś) była dzielona między programistów różnych dyscyplin.
źródło
Winiki wyszukiwania
Jako naukowiec pomyślałem, że powinienem podzielić się tym, co optymalizuję. Należy pamiętać, że to nie jest to samo, co dla optymalizacji krótszym czasie rozwoju. Często oznacza to, że praca może wspierać pewne pytanie badawcze, ale nie być otrzymana, polerowane produkt. Może to być postrzegane jako problem z jakością i może wyjaśniać, dlaczego wielu twierdzi, że (akademiccy) informatycy nie mają żadnego doświadczenia w „prawdziwym świecie”. (Np, „nie wiedzą, jak stworzyć dostawie produktu inaczej?” )
Jest to linia w porządku. Jeśli chodzi o wpływ, chcesz, aby Twoja praca była wykorzystywana i cytowana przez innych, a gra Iceberg Effect Joela wchodzi w grę: odrobina połysku i połysk może przejść długą drogę. Ale jeśli nie tworzysz podstaw do budowania innych projektów, możesz po prostu nie być w stanie uzasadnić czasu poświęconego na dostarczenie produktu.
źródło
... potem wszystko inne
... w końcu, optymalizacji pod kątem wydajności ;-)
źródło
Jakość / testowanie
Optymalizacja do jakości, a w celu zapewnienia nie ma czasu na harmonogram rozwoju badań, zarówno jednostki badań i testów po funkcji i / lub etapów.
źródło
To zależy od potrzeby twojego programu.
Większość z tego, co robię jest ograniczona w dużym stopniu poprzez przetwarzanie zdolność i pamięć, ale nie przejść przez bardzo wiele, jeśli w ogóle, istotnych zmian w przeciętnym roku.
Mam w przeszłości pracował przy projektach, gdzie kod jest często zmieniane tak konserwacji staje się coraz bardziej istotne w tych przypadkach.
W przeszłości pracowałem również nad systemami, w których ilość danych jest najważniejszym problemem, nawet na dysku do przechowywania, ale częściej rozmiar staje się problemem, gdy trzeba dużo przenosić dane lub zbyt wolno połączyć.
źródło
Elegancja .
Jeśli kod jest dobrze zaprojektowany, będzie miał kilka efektów:
źródło
czas rozwoju, absolutnie. Ja również optymalizację przepustowości, ale nie chodzę na binarny.
źródło
Ponieważ wykonuję instalacje na wielu typach systemów, od komputerów mainframe IBM po komputery PC, najpierw optymalizuję pod kątem zgodności, następnie rozmiaru, a następnie szybkości.
źródło
To zależy
Jeśli pracujesz nad wbudowanym systemem przetwarzania wideo w czasie rzeczywistym, optymalizujesz szybkość przetwarzania. Jeśli pracujesz na edytorze tekstu, zoptymalizujesz go pod kątem czasu programowania.
Jednak we wszystkich przypadkach kod musi działać i musi być możliwy do utrzymania.
źródło
Wyrazistość moim zamiarem.
Chcę ktoś czyta mój kod, aby móc łatwo zobaczyć, jakie operacje starałem się powołać na domenie. Podobnie staram się minimalizować niepotrzebne śmieci (nawiasy klamrowe, słowa kluczowe „funkcyjne” w js itp.), Aby ułatwić skanowanie.
Oczywiście musisz to zrównoważyć utrzymywalnością. Uwielbiam pisać funkcje, które zwracają funkcje i wszelkiego rodzaju zaawansowane techniki, i robią one dalej mój cel, ale jeśli korzyść jest niewielka, popełniam błąd w kwestii trzymania się technik, które znają solidni programiści jr.
źródło
Wszyscy
Czas przetwarzania
Dzisiejsze komputery są szybkie, ale daleko od tego, co wystarczy. Są tam wiele wiele sytuacji, w których wydajność jest krytyczna - jeśli nie strumieniowych serwerów multimedialnych.
Przechowywanie
Twój klient może mieć duży dysk, powiedzmy 1 TB. Które mogą być zajęte przez 1000 filmów HD, jeśli chcesz, aby była to usługa, to za mało, prawda?
Czas rozwoju
Więc nie jestem pewien, czy to liczyć jako „optymalizacja”, co mogę zrobić, to używam Java zamiast C ++ oraz rozwój dostać 10 razy szybciej. Czuję, że mówię to, co myślę bezpośrednio do komputera, bardzo prosto do przodu i totalnie kołysze!
BTW uważam, aby przyspieszyć rozwój Twój proces rozwoju należy wybrać java, nigdy nie zaśmieci jak pyton ... których roszczenia mogą skrócić czas ci DEV.
źródło