Copy and Paste, a jakość kodu. Część druga

Destrukcyjna funkcjonalność Copy & Paste coraz bardziej mnie przeraża…

Od czasu ostatniego wpisu, uważnie obserwuję temat i już parę razy złapałem siebie i innych, na bezrefleksyjnym kopiowaniu kodu…

W moim wypadku, była to, co prawda, tylko jedna linia kodu formatująca bieżącą datę na potrzeby zapytania SQL, ale:

  • Kopiowaną linię kodu napisałem dawno temu, gdy dopiero poznawałem używany w produkcie język programowania i aby uzyskać bieżącą datę, użyłem funkcji zwracającej bieżącą datę i czas, a ze zwróconej wartości obcinałem czas (przez formatowanie wartości do postaci czystej daty).
  • Teraz wiem, że istnieje funkcja, która zwraca bieżącą datę, więc nie trzeba było niczego obcinać i formatować.
  • Właściwa implementacja nie powodowała błędów wywołanych przez ustawienia regionalne (różna kolejność dnia i miesiąca w dacie w zależności od ustawień regionalnych).

A inne zaobserwowane przypadki to:

  • Kopiowanie kodu wykonującego zapis danych z formularza do bazy (zmieniał się tylko typ zapisywanej wartości), który w nieoptymalny sposób, odwoływał się do bazy danych.
  • Kopiowanie kodu pokazującego okno z komunikatem — problem był tylko w tym, że na początku (stałym) komunikatu była literówka…
  • Skopiowanie kodu pokazującego na stronie WWW formularz oraz kodu zapisującego dane z tego formularza. Kopista ograniczył się do dodania nowych pól na formularzu, ale, pracując pod presją czasu, zapomniał o modyfikacji kodu zapisującego dane z formularza w bazie danych — czytaj uwzględnieniu przez zapis nowych pól.

Możliwości tworzenia i powielania błędów stworzone przez funkcję Copy & Paste są naprawdę porażające… Wiem. Zawsze można zrzucić winę na kopistę, ale łatwość użycia funkcji Copy & Paste do tworzenia nowego kodu jest zbyt kusząca, aby z niej nie korzystać dla większości z programistów i niestety, także, deweloperów.

Podrzuciłem ten temat na forum strony Marka Rafałowicza.

Tagi: ,

Odpowiedzi: 3 to “Copy and Paste, a jakość kodu. Część druga”

  1. Jacek Złydach Says:

    Też kiedyś zastanawiałem się nad tym tematem ( http://temporal.pr0.pl/devblog/2007/06/06/metoda-kopiego-pasta/ ). Odwołując się jeszcze do Twojego poprzedniego wpisu w tym temacie:
    Zabranie programistom Copy-Paste mogłoby spowodować drastyczne spowolnienie powstawania dużych projektów, gdyż należałoby przepisywać za każdym razem framework od nowa.

    Przyznam jednak, że sposób, w jaki błędy propagują się przez klawisze CTRL+C i CTRL+V jest przerażający… Pomimo iż staram się kopiować jedynie albo całe pliki sprawdzonego framework’u albo powtarzające się fragmenty ‚szkieletowe’ kodu (np. pierwsza linijka definicji funkcji w klasie + pola komentarzy, żeby sobie pisania zaoszczędzić) to jednak niejednokrotnie przenosiłem tak błędy. Literówki w komunikatach o błędach to były te najlżejsze. Niektóre błędy, które kopiowałem powstały ponad rok temu😉

    Przykład podobny do Twojej funkcji od daty przechodziłem sam z własną funkcją trim(), która ‚podobno kiedyś działała’, ale tego nigdy nie sprawdziłem🙂. Błąd ujawnił się dopiero przy zmianie kompilatora.
    Dlatego kopiując kod warto przeczytać go co najmniej dwa razy.
    Pozdrawiam!

  2. Grzegorz Gierlik Says:

    Framework (z angielska ,,szkielet”🙂 ) powinien być jeden i ten sam…

    Pisanie od nowa istniejącego kodu zabiera czas, a testowanie i poprawienie w nim błędów (zapewne już raz poprawionych w oryginale) zabiera jeszcze więcej czasu.

    Problem w tym, że kopiowany kod uważa się za działający…😦.

  3. Jacek Złydach Says:

    Powinien, gdyby był idealny, a programista umiał wszystko i nie rozwijał się dalej w danej dziedzinie. Czasem istniejący kod trzeba napisać od nowa – zwłaszcza, gdy zmienia się całkowicie jego koncepcję. Myślę, że to jest kwestia ustalenia dla danego projektu równowagi między dwoma czynnikami:
    * Jak wiele chcę się nauczyć? (stawianie na ‚nowe technologie’)
    * Jak bardzo zależy nam, żeby produkt był w pełni działający i spełniający oczekiwania klienta/własne? (stawianie na ‚sprawdzone rozwiązania’)

    Gdy przeważa ten pierwszy czynnik, to framework może przejść zmiany🙂

    Masz rację, duży problem tkwi w tym, że kopiując kod często uważamy, że jest on poprawny… co dość często jest wyjątkowo mylnym założeniem.

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: