Automatyczne generatory kodów [zamknięte]

13

Jeden z moich kolegów lubi używać automatycznych generatorów kodu, które tworzą duże ilości kodu, który jest słabo udokumentowany i bardzo trudny w utrzymaniu.

Czy koszt używania generatora kodu jest trudny w utrzymaniu, skracając czas tworzenia?

Mamrocze
źródło

Odpowiedzi:

10

Przeformułujmy, że:

Czy warto kupić dobry automatyczny generator kodu?

Tak.

Czy koszt słabego automatycznego generatora kodu, który tworzy więcej pracy dla wszystkich innych, ale autor jest tego wart?

Absolutnie nie. Nie ma usprawiedliwienia dla złego kodu. Jeśli ktoś chce być sprytny i korzystać z automatycznego generowania kodu, powinien poświęcić trochę czasu, aby upewnić się, że wygenerowany kod jest dobrym kodem. W przeciwnym razie jaki jest tego sens? To tylko spycha złotówki w dół, a jeśli chodzi o produkcję kodu, złotówka powinna zatrzymać się na deweloperze, który ją napisał.

pszenica
źródło
16
Nie zgadzam się z twoim drugim punktem. Wygenerowany kod musi być wystarczająco dobry, aby działał i nie tworzył wydajności / bezpieczeństwa ani żadnych innych problemów. Ponieważ nigdy nie powinieneś utrzymywać generowanego kodu ręcznie, nie ma znaczenia, czy nie jest to zgodne ze zwykłymi standardami kodowania.
Hila
4
W porządku, możesz się nie zgodzić. Jeśli jednak poświęcisz trochę czasu na stworzenie generatora kodu, dlaczego nie poświęcić czasu, aby wygenerować kod ładnie? Raz wygenerowany, nie wiem, kto go stworzył, w jaki sposób został wykonany, ani jego intencja, chyba że jest tak czytelny / możliwy do utrzymania, jak wszystkie inne części. Czasami generatory służą jedynie stworzeniu punktu wyjścia, a nie pełnoprawnego produktu gotowego.
pszenicy
1
Ponadto, jeśli generowanie kodu jest częścią twojej kompilacji (tzn. Jest generowane ponownie przy każdej kompilacji), wówczas tworzenie „pięknego” kodu nie ma większego sensu. Ale jeśli masz zamiar wygenerować kod raz i to wszystko, to inna historia.
Dean Harding,
5
Hila, nigdy nie powinieneś ręcznie generować wygenerowanego kodu, ale kiedy nadejdzie dzień, w którym musisz zmienić ten kod ze względu na nowe / zmieniające się wymagania, potrzebujesz kodu, który będzie przejrzysty i zrozumiały, abyś mógł łatwo wprowadzić niezbędne zmiany w generatorze , a następnie ponownie wygeneruj.
Carson63000,
6
Wygenerowany kod nie musi być wystarczająco ładny do konserwacji, ale musi być wystarczająco zrozumiały do ​​debugowania i sprawdzania poprawności.
Huperniketes
23

Kod generowany przez generator nigdy nie powinien być obsługiwany ręcznie. Jeśli trzeba to zmienić, to generator i / lub jego ustawienia muszą zostać poprawione i uruchomione ponownie. Biorąc to pod uwagę, nie ma znaczenia, czy wynikowy kod jest niezrozumiały i nieudokumentowany, o ile sam mechanizm generowania jest krystalicznie czysty. (Pamiętaj, aby udokumentować fakt, że kod jest generowany oraz gdzie znajduje się generator i jak działa).

Analogia: chociaż procesor mojego komputera zawsze wykonuje kod maszynowy, nie muszę nic o nim wiedzieć, o ile wiem, jak utworzyć ten kod maszynowy przy użyciu języka wysokiego poziomu i kompilatora. Słyszałem, że GCC czasami produkuje słabszy kod maszynowy, ale kogo to obchodzi, o ile działa idealnie. Warstwy abstrakcji bazy danych produkują SQL do pracy z silnikiem DB, ale kogo to obchodzi, jak ten SQL wygląda, o ile warstwa abstrakcji jest czysta i działa?

Przy odpowiednim użyciu generatory kodu mogą zdecydowanie zaoszczędzić nie tylko tworzenie, ale także koszty konserwacji.

Joonas Pulakka
źródło
4
Problemem staje się wtedy, że tylko jedna osoba ma narzędzie, nikt inny nie ma, i dlatego musi ręcznie utrzymywać kod.
Mamrocze
To przechodzi dolara. Jako programiści zajmujemy się kodem - bez względu na to, jak go produkujemy.
Steven Evers,
12
@David, jeśli tylko jedna osoba ma to narzędzie, nie powinieneś używać go do projektu z udziałem więcej niż jednej osoby.
Matt Olenik,
2
@Matt, dokładnie. Generatory są częścią projektu (porównywalne ze skryptami kompilacji) i powinny być przechowywane w kontroli wersji lub podobnym centralnym repozytorium.
Joonas Pulakka
2
@SnOrfus: Myślę, że naszą działalnością jest wytwarzanie działających produktów, z których ludzie chętnie korzystają i kupują. Stąd pochodzi nasza pensja. Kod jest tylko medium.
Joonas Pulakka
6

Generator kodu jest rodzajem kompilatora. Nie martw się o to, jak ładne jest wyjście kompilatora, po prostu pracujesz z kodem źródłowym. Używanie go, a następnie ręczne modyfikowanie danych wyjściowych jest często trudniejsze niż zwykłe pisanie ich od zera w formie zrozumiałej dla ludzi i oznacza, że ​​nie możesz ponownie użyć generatora kodu bez dużego nakładu pracy, ponieważ będziesz musiał zastosować dokładnie te same zmiany w tym samym niezrozumiałym kodzie.

Dlatego mogą być w porządku, jeśli są częścią procesu kompilacji i jako takie są udokumentowane. Dane wejściowe do generatora są wówczas kodem źródłowym, a cokolwiek produkuje, to wyniki pośrednie, których nie można pomieszać.

Jeśli jednak ktoś używa takiego kodu do wytworzenia niezrozumiałego kodu, który powinien być użyty jako źródło, oznacza to, że ten kod produkuje zły kod. Nie ma znaczenia, czy dana osoba produkuje zły kod mechanicznie czy ręcznie, nadal jest to zły kod i nadal masz z nim problem z jakością.

Dlatego musisz traktować to jak każdego innego programistę, który robi rogi i pisze zły kod. Nie wiem, jak sobie z tym radzisz w swoim sklepie.

David Thornley
źródło
3

Z komentarzy do innych odpowiedzi wydaje się, że pytasz o standardy zespołu, a nie o same generatory kodu.

Narzędzie do generowania kodu powinno zostać uwzględnione w projekcie i (w stosownych przypadkach) powinno być częścią procesu kompilacji. Przykładem może być nasz zespół, w którym korzystamy z Subsonic 2.2, który generujemy klasy z obiektów bazy danych na kompilacji.

Exe, który to robi, jest sprawdzane w SVN jako część projektu, aby nowy członek zespołu mógł pobrać nowy projekt z svn i natychmiast go zbudować bez konieczności ustalania, skąd pochodzą wszystkie te klasy baz danych (w tym przykładzie nawet nie dołączaj wygenerowanego kodu do svn).

Rob Stevenson-Leggett
źródło