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: programowanie, refaktoryzacja
3 lipiec 2007 o 6:04 |
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!
3 lipiec 2007 o 20:54 |
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 lipiec 2007 o 21:18 |
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.