DOBRZY PROGRAMIŚCI PISZĄ CZYSTY KOD

  Рет қаралды 8,681

Jak nauczyć się programowania

Jak nauczyć się programowania

5 жыл бұрын

7:44 Single Responsibility - Zasada jednej odpowiedzialności
13:26 Właściwe nazewnictwo
17:01 Konkretny, rzeczowy kod + prosta logika kodu
20:18 W czystym kodzie nie ma powtórzeń (DRY - Don't Repeat Yourself)
23:05 Czysty kod to kod przetestowany
Umiejętność pisania czystego kodu to jedna z najważniejszych umiejętności w arsenale dobrego programisty. Nie jest to jednak sztuka łatwa, dlatego tak istotne jest, by uczyć się jej już od samego początku przygody z programowaniem, a potem doskonalić ją przez całą karierę.
W tym filmie przedstawiam pięć najważniejszych zasad pisania czystego kodu, dzięki którym Wasze projekty będą lepsze, a praca nad nimi łatwiejsza i bardziej efektywna.
💥 Roadmapa programisty - Czego, kiedy i dlaczego się uczyć, żeby zostać programistą: roadmapaprogramisty.pl/

Пікірлер: 35
@lennyrogal
@lennyrogal 5 жыл бұрын
Zajebisty wstęp z białą rękawiczką :D
@sebon11
@sebon11 4 жыл бұрын
Jak ja szanuję ten kanał :) o wielu rzeczach wiedziałem (ale o testowaniu, jako części czystego kodu, nie słyszałem :) ), ale dobrze sobie przypomnieć, a sposób tłumaczenia jest genialny :) cieszę się że ten kanał powstał i że robisz takie filmy, pozdro!
@andbubu4822
@andbubu4822 5 жыл бұрын
Porównanie klas do samochodu genialne.
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 5 жыл бұрын
Dzięki! Jednym z celów, jakie sobie założyłem to tłumaczyć programistyczne koncepty w przyjazny i przystępny sposób, także taki pozytywny odbiór bardzo mnie cieszy :)
@piotrbednarski_
@piotrbednarski_ 5 жыл бұрын
Biała rękawiczka najlepsza :D
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 5 жыл бұрын
Dzięki, też jestem z niej zadowolony :D Tylko trzeba pamiętać o pisaniu czystego kodu, żeby faktycznie pozostała biała :D
@marcinlesniewski4571
@marcinlesniewski4571 4 жыл бұрын
Elegancko
@marcinlesniewski4571
@marcinlesniewski4571 3 жыл бұрын
10 miesięcy później wreszcie rozumiem o czym mówisz.
@NeoBTK
@NeoBTK 4 жыл бұрын
SOLID, również Robert C. Martin, ostatnio akurat się z tym zapoznawałem ;)
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 жыл бұрын
O tak, zasady SOLID również warto znać :) Nie było jeszcze o nich odcinka na kanale, ale będzie!
@laskaplplplpl3426
@laskaplplplpl3426 5 жыл бұрын
Hahaha kocham tę rękawiczkę 😂❤️
@dreadkoji
@dreadkoji 4 жыл бұрын
a dla mnie dodatkowy + za to że lubisz Synthwave ;)
@jesiooooo
@jesiooooo 4 жыл бұрын
Świetny film, fajna wiedza. Bede polecał kolege, żeby miał z tego profity i chciał więcej filmów nagrywac :)
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 жыл бұрын
A dziękuję bardzo ;)
@dawidk.7305
@dawidk.7305 4 жыл бұрын
Co tam rękawiczka. Dawno się tak nie uśmiałem "genymdhms" :)
@kacperkujawa213
@kacperkujawa213 4 жыл бұрын
Tak się zastanawiam nad jedną rzeczą - czy kompozycja z interfejsami może w 100% zastąpić dziedziczenie? Piszę teraz projekcik do portfolio, muszę przechować klasy implementujące pewien interfejs w kolekcjach - wtedy kilka razy muszę powtórzyć implementację hashcode i equals, o getterach nie wspomnę (staram się nie używać setterów by zachować jak największy stopień immutability). Problem całkowicie znika przy użyciu klasy abstrakcyjnej. Co o tym sądzisz? Jest na to jakieś ogólne lekarstwo?
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 жыл бұрын
Cała idea "composition over inheritance" ma za zadanie wymusić na nas pisanie kodu o jak najmniejszym couplingu, kodu jak najbardziej modularnego, w którym wszystkie komponenty są ze sobą tak luźno powiązane, że możemy je swobodnie łączyć, wymieniać, dodawać nowe, itd. Ale oczywiście jest to obraz idealny, wzór do którego chcemy dążyć, ale w rzeczywistości nie zawsze jest to możliwe. W rzeczywistym świecie rzeczy też są mocno ze sobą związane - teoretycznie silnik samochodu to oddzielna, istniejąca w oderwaniu od całości część, ale nie oznacza to, że możemy sobie bez problemu przekładać silnik z jednego samochodu do drugiego. W wielu przypadkach dziedziczenie będzie najlepszym sposobem na rozwiązanie danego problemu i zdecydowanie należy z niego korzystać. Ważne jest oczywiście to, żeby robić to dobrze - czyli, żeby nie było na przykład sytuacji, że tworzymy sobie klasę abstrakcyjną, definiujemy w niej kilka abstrakcyjnych metod, a potem w klasie potomnej połowy metod nie implementujemy. Hashcode i equals implementujesz sam? Możesz przyjrzeć się Lombokowi: kzfaq.info/get/bejne/o8qCh7l20aeskqc.html Ta biblioteka pozwala dodać do klasy implementacje obu metod za pomocą adnotacji @EqualsAndHashCode
@xlewusx
@xlewusx 4 жыл бұрын
21:49 można też te metody w jednym bloku try łapać.
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 жыл бұрын
W tym konkretnym przypadku tak, ale to tylko ilustracja problemu na jednym screenshocie - w realnym projekcie będziemy mieć różne bloki try-catch w różnych częściach systemu, łapiące wyjątki różnego typu.
@xlewusx
@xlewusx 4 жыл бұрын
@@JakNauczycSieProgramowania jeśli obsługujemy je w ten sam sposób to np. w Javie jest multitype catch (jeden catch na wiele różnych typów) lub podajemy typ ogólny (np. Exception).
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 жыл бұрын
xlewusx ale cały czas mówisz o sytuacji jak ze screenshota, gdzie cały kod masz w jednym miejscu, a ja mówię o tym, że te try-catche masz w różnych miejscach kodu, w kilku różnych klasach :)
@karolklemens8652
@karolklemens8652 4 жыл бұрын
Czytałem kiedyś teorię, że każda funkcja powinna zwracać tylko jedną rzecz. Nie więcej, nie mniej... Czy to prawda?
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 жыл бұрын
W większości języków programowania funkcje zwracają jedną rzecz - albo pojedynczą wartość albo obiekt/strukturę. Same obiekty też powinny mieć jasno sprecyzowany cel - powinny reprezentować jakiś konkretny byt. I ten konkretny byt jest tą naszą jedną rzeczą, którą zwracamy z funkcji.
@QJUP
@QJUP Жыл бұрын
1:47 tymczasem chat gpt ktory idzie wlasnie w tym kierunku, tak wiem pisze komentarz grubo po czasie
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania Жыл бұрын
Haha a mijają dopiero 4 lata od tego filmu :D Zobaczymy jak to się będzie rozwijać i czy AI stworzy nam nowego Wiedźmina za jakiś czas ; )
@VisiateAI
@VisiateAI 11 ай бұрын
Nigdy nie będzie działać? Po 4 latach AI potrafi robić nie słuchane wtedy żeczy w tym pisać kod. Dobrze że jestem nie licznym porządnym specjalistą od AI i będę jeszcze miał co do roboty.
@praktycznewskazowki6733
@praktycznewskazowki6733 2 жыл бұрын
Zbytnio nie rozumiem tej pojedynczej odpowiedzialności, powinniśmy tworzyć klasy które mają jedna max dwie metody?
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 2 жыл бұрын
To jest zawsze kwestia wyczucia i znalezienia złotego środka. Generalnie kod powinien być jak najłatwiejszy do rozszerzenia i zmiany, a to oznacza z kolei, że powinien być jak najbardziej modularny, a komponenty/klasy powinny być ze sobą jak najmniej ze sobą powiązane. Załóżmy, że mamy serwis społecznościowy, w którym użytkownik może dodać trzy typy postów: - tekst - zdjęcie - film Pierwsza myśl może być taka, żeby stworzyć klasę odpowiedzialną za dodawanie postów i umieścić w niej trzy metody: - postText - postPhoto - postVideo I niby spoko, bo przecież wszystko dotyczy jednej funkcjonalności (dodawanie posta), ale jednak, gdy się zastanowimy, są to trzy różne funkcjonalności, więc powinniśmy stworzyć trzy osobne klasy, każda odpowiedzialna za dodawanie danego typu posta. Dzięki temu, jeżeli coś się zmieni w logikę dodawania zdjęć, nie będziemy musieli modyfikować klas odpowiedzialnych za dodawanie postów tekstowych oraz filmów. Taki kod jest łatwiejszy do utrzymania i łatwiej się z nim pracuje. Bo gdy jeszcze pracujemy nad nim sami to pewnych rzeczy możemy nie dostrzegać, ale co jeżeli pracujemy nad takim serwisem wraz z innymi programistami, będąc członkiem zespołu? Może przyjdzie taki dzień, że jedna osoba będzie modyfikować posty tekstowe, inna zdjęcia a jeszcze inna filmy. I gdy wszystkie te funkcjonalności będą w jednej klasie, pojawi się problem, trzy osoby będą nawzajem sobie wchodziły w drogę. A mając te trzy funkcjonalności w trzech osobnych klasach, sprawa jest prosta, każdy pracuje nad swoim kawałkiem kodu, w odrębnej klasie i problemu nie ma :) Oczywiście nic nie stoi na przeszkodzie, żeby stworzyć również klasę, która te wszystkie funkcjonalności zbierze w całość i będzie po prostu delegować wywołanie tych metod do tych trzech pojedynczych klas. Czyli podsumowując to wszystko, możemy np. stworzyć klasę PostCreator, gdzie będziemy mieć metody: - postText - postPhoto - postVideo ale logika tych metod będzie zawarta w klasach TextPostCreator, PhotoPostCreator, VideoPostCreator i w PostCreator będziemy mieć tylko coś takiego, tylko wywołanie metod znajdujących się w poszczególnych klasach (oczywiście do każdej z tych metod przekazalibyśmy jeszcze potrzebne argumenty): void postText() { textPostCreator.post() } void postPhoto() { photoPostCreator.post() } void postVideo() { videoPostCreator.post() }
@praktycznewskazowki6733
@praktycznewskazowki6733 2 жыл бұрын
@@JakNauczycSieProgramowania dzięki za doprecyzowanie 🙂
@James_Cook_Explorer
@James_Cook_Explorer 4 жыл бұрын
reużywać => powtarzać dbajmy o czystość języków, nie tylko programowania...
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 жыл бұрын
No właśnie nie do końca, w przypadku reużywalności chodzi właśnie o to, żeby nie powtarzać kodu :) Nie ma niestety dobrych polskich odpowiedników dla słów "reuse" i "reusable", też nie przepadam za takimi koszmarkami jak "reużywalny", ale trzeba sobie jakoś radzić ; )
@penttek
@penttek 3 жыл бұрын
@@JakNauczycSieProgramowania Może kod wielokrotnego użycia, albo kod którego możemy użyć w wielu miejscach
@nevergiveupboy7692
@nevergiveupboy7692 3 жыл бұрын
@@JakNauczycSieProgramowania Mamy takie słowa które dobrze oddają reuse np. zużywać (tak jak zużywa się buty codziennie ich używając) lub spożytkować (wykorzystać coś praktycznie i efektywnie).
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 3 жыл бұрын
​@@nevergiveupboy7692 Te słowa mają zupełnie inne znaczenie. "Reuse" nie jest ani zużywaniem ani wykorzystaniem czegoś. Możemy użyć słowa "reuse", gdy mówimy na przykład o wielokrotnym wykorzystaniu torby na zakupy ("It's smart to reuse grocery bags"), możemy też użyć słowa "reuse", gdy mówimy o ponownym wykorzystaniu plastiku ("there are many ways to reuse plastic bottles"), ale nie możemy użyć słowa "reuse", gdy mówimy o codziennym używaniu butów (codzienne użytkowanie to po prostu "use"). Jeżeli chodzi o język polski, tłumacz Google podaje tylko jedno tłumaczenie słowa "reuse" i jest to "ponowne użycie". W kontekście programowania "reuse" ma bardzo konkretne znaczenie - chodzi o to, że tworzymy coś raz (komponent, metodę), a następnie używamy tej raz utworzonej rzeczy w wielu różnych miejscach. Można faktycznie mówić "komponenty wielokrotnego użycia" zamiast "reusable components", ale wciąż uważam, że gdyby w języku polskim istniało tłumaczenie "reusable" będące pojedynczym słowem, byłoby to dużym ułatwieniem :)
@nevergiveupboy7692
@nevergiveupboy7692 3 жыл бұрын
@@JakNauczycSieProgramowania "Reusable components" brzmi mi trochę na "komponenty z odzysku". W końcu ponowne wykorzystanie materiału typu plastik lub papier to jest właśnie "odzysk", możliwe ze tak można przełożyć reuse, reużywać na odzyskiwać. Tak sobie tylko kombinuje 🙂
Własny projekt czyli jak skutecznie uczyć się programowania?
10:02
Jak nauczyć się programowania
Рет қаралды 16 М.
Czym są STRUKTURY DANYCH? - ArrayList, HashMap, HashSet
17:42
Jak nauczyć się programowania
Рет қаралды 18 М.
НРАВИТСЯ ЭТОТ ФОРМАТ??
00:37
МЯТНАЯ ФАНТА
Рет қаралды 4,9 МЛН
What it feels like cleaning up after a toddler.
00:40
Daniel LaBelle
Рет қаралды 76 МЛН
Женская драка в Кызылорде
00:53
AIRAN
Рет қаралды 448 М.
New model rc bird unboxing and testing
00:10
Ruhul Shorts
Рет қаралды 24 МЛН
Jak tworzyć REST API? 10 najważniejszych zasad.
12:14
Jak nauczyć się programowania
Рет қаралды 10 М.
ORM, JPA, Hibernate, Spring Data JPA - o co w tym wszystkim chodzi?
16:44
Jak nauczyć się programowania
Рет қаралды 25 М.
Jak budować pewność siebie?
1:35
Paula Podkowa
Рет қаралды 46
Git i interaktywny rebase - edytujemy historię commitów w Gicie
14:30
Jak nauczyć się programowania
Рет қаралды 8 М.
Git merge vs. rebase (i jak robić to dobrze)
14:26
Jak nauczyć się programowania
Рет қаралды 38 М.
Czym jest Web Service i REST API?
18:34
Jak nauczyć się programowania
Рет қаралды 71 М.
CZYM JEST PROGRAMOWANIE OBIEKTOWE?
17:24
Jak nauczyć się programowania
Рет қаралды 40 М.
НРАВИТСЯ ЭТОТ ФОРМАТ??
00:37
МЯТНАЯ ФАНТА
Рет қаралды 4,9 МЛН