Aktywne Wpisy
![shark93](https://wykop.pl/cdn/c3397992/shark93_YisoRMGb9O,q60.jpg)
shark93 +427
marcin-kolecki +11
#tinder jak sobie psychicznie poradzić z tym że dziewczyna po dwóch latach związku, zerwaniu z jej inicjatywy. Następnego dnia już skakała po innym? A teraz po dwóch miesiącach wróciła i jojczy?
Główną zasadą jest to, żeby nie patrzeć na swój program, jako na coś, co mamy stworzyć raz i tak ma już pozostać. To raczej żywy ekosystem, który ewoluuje z chaotycznej zupy niepasujących do siebie elementów, aż utworzy skomplikowany, wysokopoziomowy system. Python jest poniekąd tak zaprojektowany, żeby umożliwiał nie tylko sprawne pisanie kodu, ale również, a nawet przede wszystkim, jego modyfikowanie.
Zacznij od napisania jednego testu. Wyobraź sobie, co twój program ma robić. Czy to ma być biblioteka z której ktoś będzie importował jakieś klasy. A może skrypt, który ma coś pobrać z internetu. Cokolwiek to ma być, w swoim pierwszym teście napisz, jak tego będziesz używał. Zignoruj wszystkie dodatkowe parametry, argumenty. Test ma być krótki i prosty.
Gdy już masz to napisane, napisz swój pierwszy kod, który ten test przechodzi. I tutaj trzymaj się zasady "w dupie mam jakość". Pisz brzydko, pisz szybko, nie przejmuj się kompletnie niczym. Jak nie chce ci się pisać funkcji, po prostu zrób kopiuj wklej. Jak nie chce ci się pisać klasy, umieść parametry w słowniku. Twoim jedynym celem jest przejście twojego testu.
Twój test przeszedł. Pora na refaktoryzację. Ale nie taką poważną. Po prostu przeskanuj kod używając pylint, mypy, flake8 czy innych narzędzi. Postaraj się naprawić wszystkie wskazane problemy. Ale jeśli coś wymaga zbyt dużo zachodu, olej. Na koniec sformatuj wszystko przy pomocy black albo yapf i gotowe.
Dopisz drugi test. Dodaj w nim użycie nowej funkcji w twoim programie, albo poprzedniej z dodatkowym parametrem. I znowu, mniej w dupie jakość. Pisz, żeby zadziałało. Potem znowu refaktoryzuj.
Serio, nie przejmuj się tym, że Twój kod wygląda, jakby ci coś narzygało do edytora. Niech nazwy zmiennych będą długie na pół linijki. Niech ci się powtarza ten sam kod po kilka razy. Niech działa kompletnie nieoptymalnie. Byle działał.
Dlaczego tak? Ponieważ powtarzając w kółko te same kroki - test, kod, poprawki, w pewnym momencie zaczniesz dostrzegać naturalnie wyłaniające się elementy wyższego rzędu. Po którymś razie, zamiast znowu kopiować jakiś blok kodu, wytniesz go i zrobisz funkcję albo klasę. Bo wyda ci się to oszczędnością czasu. Potem znowu i znowu. Twój kod zacznie samoistnie wykształcać strukturę. A ty będziesz miał poczucie, że on jest coraz lepszy, że nie tylko działa, ale się rozwija.
Zaczną ci się przydawać elementy pythona stworzone właśnie w celu doklejania dodatkowych rzeczy do już istniejącego kodu - dekoratory, functools, dziedziczenie z wielu klas itp.
Teraz zaczniesz wyłapywać coś jeszcze. Błędy i źle obsługiwane skrajne przypadki. I to będzie twój następny rodzaj testów. Nie myśl z góry o tym, co może pójść źle w twoim kodzie. Napisz żeby działało. A jak wyskoczy błąd, to go przeanalizuj, napraw i wsadź do testu. Zaprzyjaźnij się z paczką do testów hypothesis.
Chodzi o to, żeby twój plik z testami czytany od góry do dołu opisywał jakby historię tworzenia twojego programu. Tutaj dodałem funkcję, dodałem parametr ten, tu znalazłem błąd, tu znowu dodałem parametr itd.
Spróbuj wyobrazić sobie siebie w dwóch rolach. Ty piszący testy zadajesz zadanie domowe, a Ty piszący kod programu próbujesz to zadanie odwalić jak najmniejszym nakładem sił.
Zamiast planować, zastanawiać się, zmieniać zdanie, rób byle działało. Bo gdy twój program zadziała, twój mózg dostanie pozytywne wzmocnienie. Będziesz chciał pisać dalej. Będziesz czuł satysfakcję. A to z czasem zacznie przekładać się na jakość. Elementy, które masz dodać lub zmienić zaczną być dla ciebie oczywiste. Nie będziesz musiał ich szukać. Zaczniesz widzieć kierunek, w którym chcesz podążać.
Mam nadzieję, że komuś to pomoże.
#python #programowanie #programista15k
Ο(x^n) albo O(n!) ( ͡° ͜ʖ ͡°)
Poza tym z doświadczenia wiem że pisanie bez przemyślenia problemu, kończy się jednorazowym użyciem danego kodu i porzuceniem projektu, bo refaktoryzacja oznacza przepisanie go od nowa.
Wiesz to jest jak w każdym projekcie, jak nie poświęcisz czasu na planowanie, to potem 2x tyle czasu poświęcisz
Komentarz usunięty przez moderatora
@ProfesorBigos: nie chciałbym z tobą pracować
A czemu w takiej Javie niby będziesz musiał napisać od nowa? I czemu tylko w pythonie poprawa gównianego kodu
@ProfesorBigos: czekaj moment bo się zgubiłem. Najpierw piszesz o tym, że python pozwala na pracę z gównianej jakości kodem, potem podajesz przykład duck typingu. W sensie uważasz, że duck typing jest gównianym mechanizmem, czy jednak jest spoko?
Jak tak bardzo potrzebujesz z tego mechanizmu korzystać, to
@isInteger:
@MysGG:
Link
Poza tym to właśnie "zawodowym inżynierom" przydaje się ta metodyka, ponieważ aby pisać kod, zaczynając od testów, trzeba wiedzieć z góry, czego oczekuje się od implementacji, logiki i
W TDD etapu refactor to nie jest mus. Nie trzeba po każdej implementacji go robić a wyłącznie wtedy, gdy uważamy, że warto. Refactor to nie zawsze zmiana połowy implementacji, to czasem zmiana nazwy zmiennej.
Dowożenie kolejnych funkcji bez myślenia o tym co robimy to tworzenie umyślnie długu technicznego. Robienie czegoś dla siebie nie oznacza, że powinniśmy olać wszystkie dobre wzorce pracy z kodem. Zwłaszcza że częściej czyta się kod, niż