Clean code - codzienność czy utopia?

Clean code - codzienność czy utopia?
AP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:5
2

Chciałbym zapytać programistów z doświadczeniem komercyjnym z jakim kodem mają do czynienia na codzień i jak ma się sprawa w odniesieniu do założeń SOLID lub clean code oraz jakości kodu w szerszym sensie. Koncepcje Agile powstały dobre pare lat temu, "Clean Code" ma juz 10 lat na karku. Przesłuchałem ostatnio pare wystąpień Uncle Bob'a i zastanawiam się, na ile zasady o których mówi, stanowią codzienność w pracy zawodowej programisty. Skoro założenia nie są nowe, czy trzeba o nich przypominać? Nie powinny być standardem?

Sam jestem rzemieślnikiem i w mojej działce ogólny trend idzie w stronę jak najniższej ceny i jak największej "wydajności" , co można osiągnąć jedynie zaniżając jakość. Nie spotkałem się z tym, by znane nazwisko z branży kładło tak duży nacisk na propagowanie dobrego stylu.

Jak to wygląda u Was? Jaki kod tworzycie i z jakim musicie pracować na codzień? A dokładniej, czy rynek wymaga od Was "wydajności" , czy jakości? Czy jest jakaś tendencja zależna od wielkości firmy, typu branży, typu technologii?

KO
Nie... to straszne... powiem tak: czysty to przejrzysty. A brudny to nie nudny ;( Czy @cerrato masz odmienną opinię?
KA
  • Rejestracja:ponad 6 lat
  • Ostatnio:25 dni
  • Lokalizacja:Warszawa
  • Postów:41
0

Ogólnie, to tak to wygląda z reguły:

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 20 godzin
  • Lokalizacja:Wrocław
2
Apptekarz napisał(a):

Chciałbym zapytać programistów z doświadczeniem komercyjnym z jakim kodem mają do czynienia na codzień i jak ma się sprawa w odniesieniu do założeń SOLID lub clean code oraz jakości kodu w szerszym sensie. Koncepcje Agile powstały dobre pare lat temu, "Clean Code" ma juz 10 lat na karku. Przesłuchałem ostatnio pare wystąpień Uncle Bob'a i zastanawiam się, na ile zasady o których mówi, stanowią codzienność w pracy zawodowej programisty.

Ja tam nie widzę jakiegoś wielkiego wpływu Martina na SOLID w moim życiu. Agile też z SOLID nie ma nic wspólnego, no chyba, że na zasadzie kontrastu (SOLID - dobre, przemyślane praktyki, Agile - bezmyślna dezorganizacja utrudniająca pracę)

Skoro założenia nie są nowe, czy trzeba o nich przypominać? Nie powinny być standardem?

O tworzeniu czystego kodu nie ma sensu przypominać, bo większość programistów nigdy SOLID nie stosowała, więc zwyczajnie nie ma im czego przypominać.

Jak to wygląda u Was? Jaki kod tworzycie i z jakim musicie pracować na codzień? A dokładniej, czy rynek wymaga od Was "wydajności" , czy jakości? Czy jest jakaś tendencja zależna od wielkości firmy, typu branży, typu technologii?

Pracuję w firmie, w której oprogramowanie jest produktem. Niska jakość kodu jest zagrożeniem, bo może ona spowodować utratę klientów.
"Wydajność" przez obniżenie jakości to raczej model działania agencji interaktywnych i outsourcingu projektów.


Po dopracowaniu rozwiązania każdy będzie mógł założyć własny drzewiasty wątek.
Zobacz pozostałe 4 komentarze
somekind
@Apptekarz: charakteru, doświadczenie nie ma nic do rzeczy. Są ludzie, którzy mają rok doświadczenia i piszą ładniej niż tacy z piętnastoma. Nie sądzę też, aby wykształcenie miało coś do rzeczy, no chyba że raczej odwrotnie. Widziałem porządny kod pisany przez bibliotekoznawców i chemików, natomiast większość słabego była pisana przez informatyków. (Nietrudno się domyślić, czemu tak jest.)
TD
@somekind: ciekawa opinia na temat agile, cała branża się myli w takim razie! :) Jaką masz alternatywę i co konkretnie nie podoba Ci się w agile/scrum?
somekind
@tdudzik: nie cała branża, tylko ci, którzy potrzebują bata i buzzwordów. Co konkretnie jest źle, to już dawno wyjaśnili ludzie spoza całej branży: https://pragdave.me/blog/2014/03/04/time-to-kill-agile.html http://programming-motherfucker.com/ https://www.youtube.com/watch?v=FvMuPtuvP5w
TD
@somekind: ale scrum to nie buzzword tylko konkretna metodyka.
somekind
To się nie wyklucza. To słowo jest po prostu nadużywane, i jak zazwyczaj w takich sytuacjach bywa, ci którzy używają go najczęściej, zazwyczaj go nie rozumieją i nie stosują poprawnie.
Mjuzik
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 godziny
  • Postów:710
1

I wtedy przychodzi termin projektu i wszystkie piękne założenia typu jakość, testy idą w pizdu...
I w praktyce wygląda to tak że napisałeś coś w miarę dobrze, ale wiele można poprawić.. tylko kto za to zapłaci :D

A tak naprawdę to najwięcej zależy od projektu i budżetu na niego. Im większy projekt i budżet, tym dużo większe prawdopodobieństwo na lepszy jakościowo kod.

AP
Duży projekt i duży budżet, brzmi jak korporacja...
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 20 godzin
  • Lokalizacja:Wrocław
1

@Mjuzik: dlatego lepiej nie pracować u pośrednika robiącego projekty tylko bezpośrednio w produkcie. Jeśli coś i tak jest ciągle rozwijane, to czas dostarczenia jakiegoś ficzera nie jest tak istotny, a jeśli nad głowa nie wisi kontrakt z karami, to deadliny nie są potrzebne w ogóle.


Po dopracowaniu rozwiązania każdy będzie mógł założyć własny drzewiasty wątek.
Zobacz pozostały 1 komentarz
AP
@Mjuzik: Masz coś konkretnego na myśli mówiąc o wadach?
Mjuzik
Pracując przy jednym produkcie pracujesz tylko w jednym produkcie (ja osobiście lubię różnorodność). Startupy z własnymi produktami często mają niestabilną sytuację finansową co tez może przełozyć się na pracowników.
AP
@Mjuzik: Czyli teoretycznie złotym środkiem jest firma rozwijająca jeden rozległy lub kilka mniejszych projektów. Ze startupami to domyślam się, że jeśli nie masz "nosa" to można umoczyć. Ludzie ogólnie nie zawsze mają dobre pomysły, jeszcze rzadziej bardzo dobre.
Mjuzik
Złota firma wygląda dla każdego z nas inaczej, jedni lubią siedzieć w jednym projekcie inni w wielu. Dla jednego zarobki będą ważniejsze od atmosfery dla drugiego na odwrót. Można tak wymieniać w nieskończoność, ale drążąc to dalej dojdziemy do wymiany zdań na temat czy wolisz blondynki czy brunetki :)
AP
W sumie o gustach sie nie dyskutuje ;)
Aventus
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:UK
  • Postów:2235
2

O ile kod spaghetti łatwo rozpoznać i jasno można stwierdzić że nie tak to powinno wyglądać, o tyle samo SOLID i Clean Code to już bardzo grząski grunt- tam gdzie jeden programista będzie widział dobrze napisany kod/architekturę, drugi będzie widział coś do poprawy. I ten pierwszy niekoniecznie musi się z tym zgadzać.

Ot weźmy chociażby S z SOLID- Single Responsibility Principle. To czy klasa ma jedną czy już więcej odpowiedzialności to bardzo subiektywna kwestia, i sami ludzie promujący te idee mówią wprost że to nie jest proste i po dziś dzień bywa że nie są pewni lub zwyczajnie te zasady łamią (i tu znów kwestia sporna czy do złamania zasad faktycznie dochodzi).


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
edytowany 1x, ostatnio: Aventus
Mjuzik
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 godziny
  • Postów:710
1

@Aventus dokładnie, często widać takie rzeczy np. podczas kłótni seniorów nt które podejście jest lepsze, jak sie powinno robić itp. I teraz pytanie, czy my nie chcemy stworzyć programistycznego świata zbyt idealnego? Oba rozwiązania są dobre i oba będą dobrze działać, więc po co poświęcać czas na kłótnie "czy to na pewno jest SOLID i clean code?."

edytowany 1x, ostatnio: Mjuzik
Zobacz pozostałe 15 komentarzy
Aventus
Nie oceniał bym tego pod kątem tylko Twojej wypłaty :) takie stawki są tutaj (przynajmniej poza Londynem) uznawane za wysokie, więc nie chce mi się wierzyć że taka płaca w outsourcingu jest standardem. Większość programistów (nie mówię o seniorach z prawdziwego zdarzenia) zarabia tutaj tyle co specjaliści z innych dziedzin, a zdarzają się kierowcy taksówek którzy potrafią więcej wyciągnąć.
somekind
Ale to nie jest moja płaca (niestety :(). To jest typowa stawka płacona przez zachodnich klientów, który zatrudnia ludzi z Europy Środkowej i Wschodniej przez outsourcing.
Aventus
A już myślałem że takie kokosy zbijasz a ja tu ochłapy dostaje :D
somekind
No niestety, korporacja outsourcingowa zabiera większość. Ale i tak nie jest źle - np. moich kolegów z pracy z Londynu nie stać na mieszkanie 80m2 pół godziny od biura.
Aventus
Dla tego nie mam zamiaru tam szukać pracy (chyba że zdalnie w przyszłości).
czysteskarpety
czysteskarpety
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Piwnica
  • Postów:7697
2

jest coś takiego jak trójkąt projektu, czyli zakres-czas-koszt, tutaj dostosowuje wartości do siebie szukając najlepszych proporcji zarówno dla klienta jak i firmy


wiciu
  • Rejestracja:ponad 11 lat
  • Ostatnio:3 minuty
  • Postów:1205
6
Apptekarz napisał(a):

Sam jestem rzemieślnikiem i w mojej działce ogólny trend idzie w stronę jak najniższej ceny i jak największej "wydajności" , co można osiągnąć jedynie zaniżając jakość. Nie spotkałem się z tym, by znane nazwisko z branży kładło tak duży nacisk na propagowanie dobrego stylu.

Można napisać kod wydajny i czytelny. Jest chyba bardzo niewiele przypadków, gdzie mamy naprawdę duży skok wydajności kosztem czytelności i dotyczy to chyba jakiegoś low-levelowego kodu w branży embedded, gier komputerowych lub ewentualnie HFT. W aplikacjach użytkowych (czyli większość rynku) dodanie narzutu rzędu paru nanosekund to nie jest zwolnienie, które zauważyłby człowiek i warto się skupić na czystym kodzie.

Jak to wygląda u Was? Jaki kod tworzycie i z jakim musicie pracować na codzień? A dokładniej, czy rynek wymaga od Was "wydajności" , czy jakości?

Na co dzień staram się trzymać reguł "Clean Code" przy tworzeniu nowego kodu. Jeżeli kod w review nie spełnia wg mnie reguł "Clean Code" to odrzucam review. W obecnym projekcie mam trochę starego kodu sprzed kilku lat i tam czasem te reguły są niestety łamane. Podczas utrzymywania tego kodu, większość wprowadzanych zmian spełnia już te reguły, a jeśli jest czas na refaktoring i dana klasa ma odpowiednie pokrycie testami, to robimy refaktoring. Jeżeli nie ma pokrycia, to istnieje spore ryzyko, że po zmianach coś się zepsuje i będzie to stanowić problem.

Parę lat temu na jakiejśtam ewaluacji/ocenie w firmie zarzucono mi pisanie kodu niskiej jakości i tak mi to siadło na ambicję, że przeczytałem książki na ten temat i teraz mam tak zrytą banię, że nawet głupie skrypty w bashu dla własnego użytku piszę zgodnie z regułami "Clean Code" i dodaję do nich testy jednostkowe ;-).

Czy jest jakaś tendencja zależna od wielkości firmy, typu branży, typu technologii?

Wg mnie, jeśli zespół programistów jest dobry, to tacy ludzie będą tworzyć dobry i czysty kod niezależnie od wielkości firmy, branży i technologii.

Clean code nie jest utopią. Ludzie, którzy nie trzymają się tych reguł albo ich nie znają, albo ich nie rozumieją albo są nieprofesjonalni. Wystarczy spojrzeć sobie na rozmaite popularne projekty open-source i zobaczyć jak tam wygląda kod, pokrycie testami i jak ludzie nad tym pracują. Da się, tylko trzeba mieć doświadczenie, wiedzę i być ogarniętym.

edytowany 4x, ostatnio: wiciu
AP
Pisząc o wydajności miałem na myśli "wydajność" pracy, nie samego kodu. W sensie: Przemyślany kod dobrej jakości to większy nakład pracy, to większy nakład czasu, to większy koszt, to wyższa cena końcowa produktu.
wiciu
Zgadza się. Pojawia się wtedy pytanie, czy chcemy teraz poświęcić więcej czasu, żeby zrobić coś porządnie, czy poświęcić jeszcze więcej czasu później naprawiając bugi i męcząc się z utrzymaniem. Oczywiście trzeba umieć wyczuć granicę, bo kod można szlifować w nieskończoność.
AP
Zastanawiam się na ile słowem kluczem jest tu "utrzymanie". Rynek związany z wytwórstwem / produkcja koncentruje się na jak największej sprzedaży więc i najniższej cenie. Towarów sie nie naprawia, tylko wymienia. Gdyby producent miał dać dożywotnią gwarancję w cenie produktu, sytuacja mogłaby się diametralnie odwrócić.
wiciu
To zależy od konkretnego przypadku, a rynek oprogramowania jest inny. Czasami duże firmy wtapiają w software tyle pieniędzy, że w zasadzie nie ma już odwrotu nawet jak im się nie podoba produkt, czy coś im nie pasuje. Wycofanie się będzie się wiązało ze sporymi konsekwencjami i innymi kosztami. To nie są np. skarpetki, czy nieświeże warzywo, że możesz je wyrzucić i od ręki kupić sobie nowe. W przypadku aplikacji zarówno użytkowych i biznesowych producent w ramach opłaty daje często jakiś support.
AP
W większości branż produkcyjnych, jeśli producent wtopi z jakimś rozwiązaniem to jest to zmartwienie po pierwsze klienta, który już zapłacił i teraz jego zdanie jest mało ważne, po drugie dział marketingu który po prostu zamaskuje złe opinie. Pomijam już konstruowanie produktu, by po ochronnym okresie gwarancyjnym przestał działać, lub takiego, który po prostu nie spełnia oczekiwań, których zaspokojenie sugeruje reklama. Dotyczy to elektroniki, AGD i praktycznie wszystkiego, co można produkować masowo.
KR
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 6 godzin
  • Postów:166
0

Niby nie; ostatnio mam do czynienia z kodem któremu brakuje S i praca z nim bywa karkołomna. Także jestem skłonny stwierdzić, że clean code to codzienność, ale bywa, że wpadnie kawałek kodu słabo zorganizowany, który przypomni, że na co dzień ma się do czynienia z przyjaźniejszym kodem.

TT
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:69
0

Wydaje mi się, że w mniejszym lub większym stopniu o kod się dba (prawie) wszędzie. Wyjątkami są janusz-softy, totalnie chore terminy (czyli pewnie janusz-softy), no i drużyny scrumowe złożone w całości z juniorów lub studentów (tutaj dopiero jest zabawa - przeżyłem na własnej skórze. i tak - janusz-soft :D).
W normalnej stytuacji kod przed staniem się taką "oficjalną ostatenczą wersją" jest sprawdzany przynajmniej przez jedną osobę, musi przejść testy automatyczne, przejść testy statyczne na czystość kodu i dopiero wtedy zostaje dołączony do istniejącej całości.
Raczej nie zdarzają się straszne buble, często dyskutuje się nad kontrowersyjnymi rozwiązaniami.
Jak ktoś ma inaczej, to polecam uciekać stamtąd.

Aventus
"no i drużyny scrumowe złożone w całości z juniorów lub studentów (tutaj dopiero jest zabawa - przeżyłem na własnej skórze" Opowiedz wiecej :)
AP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:5
0

Dzięki wszystkim za odpowiedzi. Naszkicowaliście tutaj całkiem optymistyczny obraz, co nie ukrywam, że mnie cieszy.

TT
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:69
9

@Aventus Uch, pierwsza praca: janusz-soft. Obiecywano wiele, co miesiąc. 90% projektów unijnych. Z początku było nawet dobrze, właściwie byłem zachwycony. Ale trafiłem na falę odejść seniorów i nie było się od kogo uczyć po miesiącu. Zaczęło się robić niemiło. Seniora zatrudnić trudno, a hajs się musi zgadzać. Małe projekty były dosłownie ciągnięte przez juniorów.
W ciągu 2-3 miesięcy z ~7 programistów zrobiło się ze 20 - oczywiście studenci i ludzie w pierwszej pracy.
Kiedy tylko Janusz zauważył, że jako-tako daję radę od razu mianował mnie turbo seniorem wszystkiego i przydzielił same ważne zadania w dziwnych projektach.
Czasami kodziłem sobie sam z miesiąc, nikomu nie przeszkadzając.
O CI czy CD nikt nie słyszał. Czasami, jeśli w projekcie był prawdziwy senior, to się takie rzeczy działy, ale nikt nikomu nie wyjaśniał po co, jak i dlaczego.
W sumie po co komu Continuous Delivery kiedy nie ma się zamiaru niczego Deliverować :-D
Code review sam sobie robiłem - przecież nie będzie ktoś z innego projektu w mój kod wchodzić...
Miałem zaszczyt nawet od a do z "robić" dużą platformę związaną z kopaniem kryptowalut - łącznie z giełdą i innymi cudami.
Termin: 2 miesiące. Ustalony przed wyestymowaniem projektu. Właściwie nawet nie znałem potrzebnych technologii kiedy zaczynałem.
Załoga: Ja (Senior Wizard Madafaka Developer + Project Owner + nie znam nawet nazw), 2 juniorów mojego pokroju, no i bat szefa na plecach.
Planujemy. Ale nikt nie zna technologii. W sumie nawet nie mamy dokładnych założeń projektowych.
Jest termin, kilka nie technicznych haseł i ja - cały na biało.
Pot, krew, łzy.
Więcej łez.
Robiliśmy chociaż code review. Ale co to za cr, kiedy ocieniający wie często mniej niż ty sam :-D
Z jakiegoś powodu czułem się jako ten odpowiedzialny za całość - chyba dałem się wrobić. No i to ja dostawałem opieprz za terminy, bugi, cholera wie co jeszcze. Planowaliśmy w GODZINACH, nie w STORY POINTACH. W końcu wiadome musi być na kiedy się wyrobimy, co to za durna miara story pointy. Każde niedoszacowanie - opieprz.
Testów brak - szkoda czasu (no czasami udało mi się oszukać i coś dopisać, ale na prawde różnicy to nie robiło praktycznie kiedy się bug trafiał).
Na koniec zostałem sam, bo w innych projektach był potrzebny ktoś ogarnięty do pomocy (czytaj moich dwóch wiernych braci juniorów).
Sam planowałem, sam groomowałem, sam implementowałem i sam dziwiłem się dlaczego to jeszcze działa.
Projekt upadł, czego na pewno nikt się nie spodziewał. Tzn. tak myślę - zrobiłem (prawdopodobnie najgorsze w życiu) mvp i odszedłem. Wątpię żeby ktoś w to dalej brnął.
To był mój ostatni projekt - uciekłem.
I oczy mi się otworzyły szerzej niż kiedykolwiek już pierwszego dnia nowej pracy.
I to zdziwienie ludzi kiedy się tłumaczę jak potłuczony po pierwszym sprincie, że nie wiem dlaczego to zadanie spadło, robiłem co mogłem, walczyłem jak lew.
A Ci, że "spoko, to normalne, zadania spadają". "Przecież nikt Ci głowy nie urwie".
Jak to? :O
Firma istnieje. "Programują" dalej.

wiciu
Co to znaczy, że zadanie "spadło"?
artur52
pewnie nie spełniło DoD i przeszło na kolejny sprint
TT
Po prostu nie zostało zrealizowane w planowanym czasie. Zaplanowaliście 15 zadań, zrobiliście 13, więc 2 spdają na przyszły sprint.
czysteskarpety
czysteskarpety
też taka nauczka, robić swoje, nie wychylać się, nie "przyspieszać tasków" nie robić nadgodzin, wykazywać się pomysłami tylko jak ci się to opłaci ;)
Aventus
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:UK
  • Postów:2235
0

@TakiTamPiekarz: Wielkie dzieki za odpowiedz. Jedno tylko sie nasuwa na mysl czytajac to- "O kutwa, niezly hardcore". Az mnie naszlo na zalozenie tematu aby ludzie dzielili sie doswiadczeniami z janusz-softow :)

Jedyne do czego tak naprawde moge dodac komentarz to kwestia code review- oczywiscie w Twoim przypadku wszyscy byliscie swierzakami wiec ciezko mowic o dzieleniu sie doswiadczeniem, ale code review przez mniej doswiadczona osobe samo w sobie nie jest zle. Wiecej o tym napisalem tutaj: Brak code-review dla Juniora - odchodzić? (ostatni post w watku).


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:minuta
0
Apptekarz napisał(a):

Skoro założenia nie są nowe, czy trzeba o nich przypominać? Nie powinny być standardem?

Z tego że jakieś założenia nie są nowe nie wynika że powinny być standardem, bo gdyby tak było, standardem byłby COBOL.

AP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:5
0

Z tego że jakieś założenia nie są nowe nie wynika że powinny być standardem, bo gdyby tak było, standardem byłby COBOL.

COBOL to język programowania, SOLID, clean code itp. to pewne reguły używania języka programowania. Dosyć uniwersalne jak myślę.

Moim zdaniem jeśli podstawą danych założeń jest ułatwienie stworzenia produktu wysokiej jakości, a w dodatku założenia są w miarę uniwersalne, powinny być standardem. Dotyczy to wszystkich dziedzin, w które zaangażowania jest praca twórcza. Obstawiam, że cześć z Was się z tym zgodzi. Zaskoczyło mnie jednak, że w programowaniu jest to czymś, do czego przywiązuje sie wagę nawet na wczesnym poziomie zaawansowania zawodowego... W odróżnieniu do innych branż z którymi miałem styczność.

edytowany 2x, ostatnio: Apptekarz
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 20 godzin
  • Lokalizacja:Wrocław
1
Apptekarz napisał(a):

Zaskoczyło mnie jednak, że w programowaniu jest to czymś, do czego przywiązuje sie wagę nawet na wczesnym poziomie zaawansowania zawodowego... W odróżnieniu do innych branż z którymi miałem styczność.

  1. Użytkownicy tego forum to zdecydowanie nie jest próbka reprezentatywna.
  2. Wielu ludzi głosi, że pisze piękny kod, ale prawda jest taka, że po prostu nie mają właściwego punktu odniesienia.

Po dopracowaniu rozwiązania każdy będzie mógł założyć własny drzewiasty wątek.
AP
1. Mam tego świadomość. Czasem w ogłoszeniach dla juniorów widuję w oczekiwaniach pracodawcy znajomość dobrych praktyk, często temat nauki dobrych praktyk jest sugerowany w pytaniach o ścieżkę nauki lub ogólnie poradach dla "zielonych". Wypowiedzi użytkowników tego forum są elementem składowym wrażenia jaki odnoszę. 2. Wydaje mi się, ze jeśli człowiek jest na tyle ogarnięty, by nauczyć się programować (co moim zdaniem nie jest proste jeśli nie miało sie z tym do czynienia np na studiach), to spokojnie powinien ogarnąć dobre praktyki.
AP
Więc kwestią dobrej woli i szacunku do siebie i innych jest to czy będzie swojej wiedzy używał. Obstawiam też, ze jeśli pracujesz komercyjnie, spokojnie znajdzie się okazja na znalezienie punktu odniesienia ;)
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:3 minuty
  • Postów:8398
6

Ja nie wiem co gorsze, czy ludzie, którzy piszą brzydki kod, czy ludzie, którzy są fanami wszelkich "dobrych praktyk" i piszą na siłę tak, żeby te "dobre praktyki" zachowywać. I pisz kod, który jest na siłę "dobry", że aż w rezultacie zły.

  • przekombinowany (np. mnóstwo niepotrzebnych abstrakcji, coś co zawiera prostą logikę, ale napisane jest w najbardziej okrutny sposób, w 20 różnych plikach, żeby tylko się zajarać myślą, że się pisze ładne wzorce, nawet jeśli wcale nie są potrzebne).

  • dobry pozornie, ale i tak wadliwy (np. ktoś przeczytał, że enkapsulacja to zło, więc robi wszędzie gettery i settery, które niemal tak samo łamią enkapsulację). Albo np. ludzie, którzy usłyszeli, że testowanie jest dobre, więc testują kod do poziomu, w którym każda choćby najmniejsza metoda ma własny unit test i testy odzwierciedlają niemal w 1:1 implementację, a takie coś ciężko utrzymywać (bo każda zmiana jakiegoś szczegółu implementacyjnego = zmiana testu). Czyli takie cargo cult. Naśladuje się coś, ale nie wie po co to jest. Jak ci nuworysze OOP, którzy wszędzie jadą na dziedziczeniu bo myślą, że "OOP polega na dziedziczeniu".

  • zbyt rygorystyczny - np. ktoś nigdy nie zrobi copy-paste, bo to grzech. Mimo, że w pewnych sytuacjach duplikacja kodu jest lepsza od zbyt wczesnej abstrakcji https://www.sandimetz.com/blog/2016/1/20/the-wrong-abstraction . Albo nadmierne rozwlekanie PR i kłócenie się godzinami o nazwę każdej zmiennej w commicie czy o to, że gdzieś są 2 entery zrobione zamiast jednego...). To niszczy produktywność. https://en.wikipedia.org/wiki/Law_of_triviality

Co nie znaczy, że nie należy starać się pisać dobrze. Tylko moim zdaniem trzeba również pamiętać o:

  • KISS, YAGNI (żeby nie tworzyć nie wiadomo jakich przeinżynierowanych tworów)
  • właściwym, głębszym zrozumieniu problemów, jaka dana rzecz ma rozwiązywać (np. testowanie). Problem w tym, że to jest proces, do którego dochodzi się czasem latami.
  • pragmatycznym podejściu i odwagi do łamania zasad (albo przymykania oczu na to jak ktoś łamie) jeśli w danej sytuacji bardziej opłaca się złamać jakąś zasadę.

edytowany 1x, ostatnio: LukeJL
AP
Żeby łamać zasady, trzeba znać i rozumieć zasady ;) na początku postu mówisz o ekstremach i bezmyślnym popisywaniu się. Z drugiej strony, znajomość branży i pragmatyczne podejście do jakichkolwiek wytycznych pomaga w tworzeniu jakościowego produktu. Jeśli jakiekolwiek działanie u swoich postaw ma jedynie myśl "bo tak sie robi", to przypadek decyduje, czy rozwiązanie okaże się właściwe.
wiciu
Większość problemów, które opisałeś, to over-engineering, a nie clean code. W samej książce była mowa o tym, że nadmierna abstrakcja, to oznaka "brudnego" kodu, a sama abstrakcja powinna mieć max. 1 poziom. To samo dotyczy przesadzania z dziedziczeniem tworząc nieskończone hierarchie klas, które powinno się zastępować kompozycją. Problem z kłóceniem się o nazwy zmiennych, to raczej problem ludzki, a nie konkretnych reguł. Jak ktoś nie jest konfliktowy, to dojdzie do wspólnego konsensusu i nie będzie dyskutował godzinami.
LukeJL
Książkę już dawno czytałem i do niej nic nie mam :) Ale pisałem ogólnie o tym, co ludzie robią z pojęciami czystego kodu, dobrych praktyk itp. (zresztą pojęcie "dobra praktyka" powinno się wywalić ze słownika programistów, bo służy głównie do uprawiania cargo cultu i podniecania się tym, że ktoś napisał coś "zgodnie z dobrymi praktykami").
LukeJL
Ja dawno już nie robiłem niczego zgodnego z "dobrego praktykami", bo mam je gdzieś. W sensie są pewne zasady, które stosuję np. SRP ale nie dlatego, że są dobre, tylko dlatego, że są sensowne (drobna różnica w znaczeniu, ale mam wrażenie, że wiele programistów traktuje programowanie jakby byli dziećmi w szkole albo członkami religii i chcą robić rzeczy "dobre", "słuszne", "prawidłowe", "czyste" zamiast być pragmatykami robić rzeczy rozsądne (np. nie wkładasz łapy do ognia nie dlatego, że to "grzech", tylko dlatego, że się sparzysz.
AP
Każdy dogmat dekonstruuje się prostymi pytaniami: Z jakiego powodu? W jakim celu?...
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)