vrkrGruba ryba
16piorunów
@vrkr Moim zdaniem inżynier oprogramowania będzie wolał rozwiązanie prostsze koncepcyjnie, którego utrzymanie, debugowanie i rozszerzanie nie będzie wymagało za wiele wysiłku, zamiast super-bleeding-edge rozwiązania, które zaoszczędzi 0.01% cpu i 2% pamięci w ciągu regularnego działania.
Przypomniało mi się, jak na studiach mieliśmy automatyczną testerkę zdań, zadania były pisane jeszcze w Pascalu. Był algorytm + limity pamięci. Algorytm miał działać na liście jednokierunkowej, był skomplikowany i ciężki do debugowania. Ten sam problem był trywialnie prosty do rozwiązania przy użyciu listy powiązanej dwukierunkowo. Oczywiście limity pamięci były dobrane tak, aby struktura danych z dwukierunkowymi wskaźnikami się nie mogła zmieścić... no w każdym razie, autorzy zadania nie wzięli pod uwagę, tego, że ktoś w Pascalu zrobi wstawkę assemblerową, która sobie przerabia wskaźniki kompresując je po drodze (bo było niewiele pamięci do zaadresowania), i w efekcie zmieści listę polinkowaną w obie strony używając skróconych wskaźników. Cóż, byłem wtedy młody i głupi... teraz nie jestem już młody. ( ͡° ͜ʖ ͡°)
Trzeba wybierać wzgórze, na którym się walczy. Większość można na luzie dwoma tabelami, ale są też miejsca na algorytm, który rzeczywiście robi robotę.
Wiadomo, time to ship jest ważny, ale kurde wydajność kluczowych elementów również
Wiadomo, time to ship jest ważny, ale kurde wydajność kluczowych elementów również
@Ragnarokk No jasne, wszystko zależy od przypadku, a senior od juniora właśnie różni się tym, że wie w którym przypadku czego użyć. Cackanie się, żeby algo, które realnie pracuje z listą 5-10 elementów, przerobić z O(n^2) na O(n*log n), to zagranie właśnie typowe dla juniorów.
Najistotniejsza moim zdaniem jest prostota koncepcyjna kodu, bo to mocno wpływa na późniejszą rozszerzalność softu, oraz bezpieczeństwo. Przedwczesna optymalizacja z reguły bardziej szkodzi niż pomaga.
@LondoMollari Tak. Działający kod ktory jest nieutrzymywalny jest tak zły jak niedziałający. Robienie wyszukanej architektury jak utrzymywał też będzie potem praktykant przyniesie więcej szkód jak pożytku.
Dosłownie tydzień temu łatałem kod, gdzie architektura była przeliękna i nowoczesna, ale nikomu nie chciało się sprawdzić wydajności na nawet przeciętnym rozmiarze danych :P


















