Czy nie ma czasu na utrzymywanie dobrego kodu?

Czy nie ma czasu na utrzymywanie dobrego kodu?
Potat0x
  • Rejestracja:ponad 8 lat
  • Ostatnio:19 dni
  • Postów:370
1

Dlaczego, w imię szybszego dowożenia, tworzony jest marnej jakości kod - skoro przecież wiadomo, że w przyszłości będą z tego problemy?

Na dłuższą metę firmom to się opłaca patrząc jedynie na rachunek zysków i strat? Czy może działa tu zasada "jakoś to będzie"?

AS
Z tego co ja widzę, to jak zaczynają się problemy z projektem to pod przykrywką zajęcia się bardzo ważnymi nowymi rzeczami przekazuje się taki bubel innemu zespołowi...
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:2 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
9

Manago nie rozumieją co to znaczy kod dobrej jakości
A programiści mają deadline'y i w pewnym wieku przestaje im się chcieć kłócić

Żeby było zrozumienie musiałbyś mieć technicznego manago, a coraz trudniej o takich


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
S4
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:1268
2

Czasem trzeba pocisnąć żeby klient nie uciekł. A potem tak zostaje

edytowany 1x, ostatnio: S4t
EH
  • Rejestracja:ponad 2 lata
  • Ostatnio:około rok
  • Postów:1208
16

Zależy co masz na myśli. Bo cześć programistów mając na myśli "dobry kod" ma na myśli kod przeinżynierowany z 20 warstwami które nic nie znoszą teraz ale może za 50 lat coś wniosą, a jak nie to bedą chociaż mogli usiąść przed lustrem i powiedzieć "zrobiłem zajebisty kod" to nic że nie ma on sensu i nigdy mieć nie będzie.

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:minuta
  • Postów:4888
2

Nie rozumiem, commitujesz marnej jakości kod? Czy widzisz, że inni to robią? Jak w ogóle można tworzyć marnej jakości kod i nic, przezież płacą nam za "software engineering".


EH
Płacą nam za dowożenie produktu tak by góra mogła zarobić i klient mógł zarobić :)
lion137
kk, jasne, business te sprawy, ale mi płacą za dowożenie testowalnego, otestowanego, czytelnego, etc... codu i to robię.
EH
kod nie jest żadną wartością jeśli nie robi tego czego chce biznes i w czasie w jakim chce biznes
AN
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 godziny
  • Postów:973
1

@lion137: trollujesz czy naprawdę nie rozumiesz? Projekt rozwijany 10 lat i żeby coś dodać wypadało by zrefactorować sporą część bo powoli się rozlatuje ale nie ma na to czasu


Zdalna praca dla Senior Python Developerów --> PW
edytowany 1x, ostatnio: anonimowy
A5
  • Rejestracja:prawie 5 lat
  • Ostatnio:około rok
  • Lokalizacja:Kraków
  • Postów:115
3
lion137 napisał(a):

Nie rozumiem, commitujesz marnej jakości kod? Czy widzisz, że inni to robią? Jak w ogóle można tworzyć marnej jakości kod i nic, przezież płacą nam za "software engineering".

To chyba nie pracujesz w IT albo masz tyle szczęścia, że pracujesz w jakimś korpo gdzie się robi release raz na 3 lata.

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:minuta
  • Postów:4888
2

at przedmówcy, to są wymówki na wrzucanie słabego kodu?


edytowany 1x, ostatnio: lion137
EH
  • Rejestracja:ponad 2 lata
  • Ostatnio:około rok
  • Postów:1208
1
lion137 napisał(a):

at przedmówcy, to są wymówki na wrzucanie słabego kodu?

trollujesz nieźle :)

lion137
Serio, dowozisz shit i jesteś happy?:D
EH
@lion137: jeśli trzeba to i shit dowożę, potrafię robić fixy i dodawać nowe rzeczy do największych szambo-projektów. Natomiast rozróżnij shit od projektu który nie jest przeinżynierowany. Przykładowo dziś miałem 2h rozmowę bo jeden programista chce dodać dodatkowa warstwę w całym projekcie. Nie znalazł argumentu za dodaniem tego którego bym nie obalił więc lecimy bez tej warstwy.
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:minuta
  • Postów:4888
0

Sorry , EOT for me:)


LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:około 6 godzin
  • Postów:8407
8
anonimowy napisał(a):

@lion137: trollujesz czy naprawdę nie rozumiesz? Projekt rozwijany 10 lat i żeby coś dodać wypadało mi zrefacorować sporą część bo powoli się rozlatuje ale nie ma na to czasu

jak projekt jest rozwijany przez 10 lat, to tego czasu było aż zanadto i pewnie jeszcze będzie (zakładając, że dany projekt będzie jeszcze utrzymywany długo)

W takich sytuacjach członkowie zespołu myślą zbyt krótkoterminowo. Że programista-mid, który wchodzi do takiego projektu, będzie tak robić, to mnie nie dziwi. Natomiast już senior czy PM powinien być mądrzejszy.

Potat0x napisał(a):

Dlaczego, w imię szybszego dowożenia, tworzony jest marnej jakości kod - skoro przecież wiadomo, że w przyszłości będą z tego problemy?

To się nazywa dług techniczny i jest czymś normalnym (powinno być) w nowych czy krótkotrwałych projektach - lepiej dowieźć szybko i zweryfikować niż się bawić w przeinzynierowanie czegoś, co i tak w przyszłości będzie inne. Czasem spaghetti kod jest rozsądnym sposobem optymalizacji.

Czyli:

  • długofalowo - ładny kod, żeby dało się utrzymywać
  • Krótkofalowo - spaghetti jest okej, żeby szybko mieć coś działającego

Niestety niektorym ludziom się priorytety przestawiły i robiąc długofalowy projekt wrzucają tam spaghetti i udają, że nie ma czasu. I projekt nie da się utrzymywać, wszyscy tylko na tym tracą, ale będą dalej żyć w kłamstwie.

Z kolei w greenfieldach przesadzają w druga stronę i już robiąc projekt od zera go przeinzynierowuja już na starcie, co potem spowalnia dodawanie nowych funkcji oraz nie na jakiejś specjalnej korzyści (ponieważ zwykle ta pierwsza architektura i tak kompletnie nie pasuje do wymogów projektu, których to wymogów ktoś nie znał, jak ją projektował)


edytowany 3x, ostatnio: LukeJL
several
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 6 godzin
1

Dobry kod dla biznesu to taki, za który klient płaci. Programista jest częścią tego biznesu więc czy chce czy nie chce, również musi brać to pod uwagę. Ogólnie zgadzam też się z @ehhhhh, jak słyszę od programisty, że chce napisać dobry kod to potem często na pull requeście widzę nawalonych klas z tyłka, które nie dość, że przeszkadzają w czytaniu to na dodatek nie pomagają w jednej z najważniejszych rzeczy jakie musi spełniać gruba abstrakcja by jej istnienie miało jakikolwiek sens, czyli w automatycznym testowaniu.


AN
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 godziny
  • Postów:973
1

@LukeJL: To w jakich firmach pracujesz, że pozwalają na poświęcenie tygodnia (z refactorem) na zadanie, które powiedzmy innej osobie może zająć godzinę (bez refactoru)?


Zdalna praca dla Senior Python Developerów --> PW
KR
Moderator
  • Rejestracja:prawie 21 lat
  • Ostatnio:około 19 godzin
  • Postów:2964
6

Każdy programista powie Ci że chce napisać dobry kod, ale większości tylko wydaje się że tworzą dobry kod, a w rzeczywistości wychodzi im coś w stylu FizzBuzzEnterprise realizującego niepotrzebne rzeczy o które biznes nawet nie prosił. Sam się łapie na tym że po napisaniu działającego kodu często mogę uprościć lub wręcz usunąć bardzo wiele rzeczy. I takie upraszczanie przeprowadzane regularnie jak najbardziej ma sens, bo potem ciężko się pracuje z projektem w którym jest mnóstwo niepotrzebnego kodu.

U nas niestety w niektórych projektach jest przyjęta zasada aby zmieniać jak najmniej kodu, co z jednej strony ogranicza zapędy do dodawania niepotrzebnych funkcji, ale z drugiej strony niestety utrudnia czyszczenie. Dlatego najczęściej udaje mi się coś uprościć poprawiając błąd - tj. mówię "patrzcie - było przekombinowane i przez to był błąd, więc ten błąd uzasadnia refactor".

edytowany 1x, ostatnio: Krolik
snowflake2137
czyli można powiedzieć, że zasada skauta jest u was zabroniona?
KR
Może nie zabroniona, ale dużo trudniej przejść CR w Cassandrze jeśli za dużo pozmieniasz.
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:około 6 godzin
  • Postów:8407
2
anonimowy napisał(a):

@LukeJL: To w jakich firmach pracujesz, że pozwalają na poświęcenie tygodnia (z refactorem) na zadanie, które powiedzmy innej osobie może zająć godzinę (bez refactoru)?

Przy tak podstawionych liczbach/czasach wykonania, to faktycznie:

  • jak ktoś robi refactor przez tydzień, to pewnie jest to na tyle duży refactor, że może wpływać na pracę innych osób. Więc później mogą być jakieś konflikty plus to, że inne osoby będą musiały się odrywać od swoich zadań i być zaangażowane w refaktor.
  • a "zrobić coś w godzinę bez refaktoru" brzmi atrakcyjnie i nie wymaga podjęcia decyzji "no to refaktorujemy"

Tylko:

  • czemu refaktor ma trwać tydzień? Jak coś zajmuje bez refaktoru godzinę, to jest to proste zadanko, które wiadomo jak zrobić, to z małym refaktorem i napisaniem testów mogłoby zająć np. 2-4 godziny. Takie rzeczy robi się bez pytania innych o zgodę.
  • czy faktycznie w dużym projekcie spaghetti można napisać cokolwiek w godzinę? Ja raczej spotkałem się z tym, że zadania, które powinny być proste, zajmowały o wiele więcej czasu, właśnie ze względu na słaby kod. Jak próbujesz zmienić jedną rzecz, a nagle się okazuje, że nie możesz bez ruszania tuzina innych, i właśnie to powoduje opóźnienia, a nie refaktor...

AN
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 godziny
  • Postów:973
0

@LukeJL: No to sam sobie przeczysz bo z jednej strony "czemu refaktor ma trwać tydzień" a potem "Jak próbujesz mienić jedną rzecz, a nagle się okazuje, że nie możesz bez ruszania tuzina innych, i właśnie to powoduje opóźnienia, a nie refaktor...". Właśnie to, że musisz ruszyć tuzin innych rzeczy powoduje, że ten refaktor trwa długo. Bo dodać np. argument do funkcji w 12 miejscach, pozmieniać coś tam itd. to nie problem bo masz testy. Ale żeby to zmienić sensownie może być wiele problemów w takim spagetii


Zdalna praca dla Senior Python Developerów --> PW
EH
  • Rejestracja:ponad 2 lata
  • Ostatnio:około rok
  • Postów:1208
1

@anonimowy: system małych kroków, przy poprawkach/dodatkach "zostaw kod w lepszym stanie niż go zastałeś" co nie znaczy byś przepisywał cały moduł, tylko np poprawił te 2 metody w których akurat grzebiesz.

AN
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 godziny
  • Postów:973
1

Przecież nie zawsze się tak da to chyba oczywiste?


Zdalna praca dla Senior Python Developerów --> PW
EH
  • Rejestracja:ponad 2 lata
  • Ostatnio:około rok
  • Postów:1208
0

@anonimowy: da się zawsze a je śli uważasz że trzeba przebudować cały moduł to najpierw zastanów się 20x czy może to czasem nie ty źle do tego podchodzisz i czy to da jakikolwiek zysk klientowi.

G8
  • Rejestracja:około 3 lata
  • Ostatnio:około rok
  • Postów:2000
1

Niestety życie pokazuje, że ten dobry kod i tak jednak potem okazuje się złym kodem. Albo dlatego, że w pewnym momencie został zatruty z powodu pewnych kompromisów zastosowanych dlatego, że nie było czasu już dłużej myśleć nad tym, jak zrobić coś ładnie, albo dlatego że po latach to, co było ładne okazało się jednak brzydkie, tylko nikt tego nie przewidział.

piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:3277
10

Ja mam spore wątpliwości, czy "marna jakość kodu" jest skutkiem braku czasu. Wbrew pozorom, napisanie dobrego kodu nie jest bardziej czasochłonne niż napisanie złego kodu. Przemyślenie jak coś zaimplementować (raz, a dobrze) wcale nie trwa dłużej niż pójście na żywioł. Oczywiście pomijam sytuację w której do wielkiej kupy trzeba dokleić kolejny kawałek kupy, bo wtedy czasami faktycznie szybciej jest dołożyć kolejnego if'a niż rozplątywać już istniejące Jenga.

Moim zdaniem prawdziwe przyczyny to:

  1. Duża część programistów nie wie co to jest dobry kod. Tzn. oczywiście powiedzą coś o clean code, testach, architekturze itd. ale nie będą w stanie odpowiedzieć na proste pytanie "gdybyś miał okazję napisać tę kupę w której grzebiesz od zera, miał na to nieograniczony budżet, czas narzędzia, to jak byś to zrobił?".
  2. Nie miała okazji pracować z "dobrym kodem", więc nie wie na czym polega różnica i jaki jest zysk z tego "dobrego kodu"
  3. Nie wie co pisze i po co. Kazali sortować listę, to sortujemy. Dlaczego sortujemy, co jest w tej liście, jaka jest potrzeba biznesowa z której to sortowanie wynika - nieważne. Później jest tych sortowań 15 w systemie, każde napisane prawie tak samo, ale opakowane w kompletnie inne API, albo nawet nie opakowane.
  4. Przekonanie, że wymagania można ustalić w trakcie wykonywania taska i na koniec (pierwszy koniec) okazuje się, ze nie ślub, a pogrzeb, nie w Warszawie a w Otwocku, reszta się zgadza, tylko nieboszczka wygląda nieco dziwacznie leżąc w trumnie w ślubnej sukni.
  5. Braki warsztatowe, brak wiedzy, że utworzenie nowej klasy, metody, wprowadzenie zmiennej to 3 sekundy (jak się wie po co i zna skrót klawiaturowy), że język ma jakąś funkcję, która sprawia, że robi się szybciej i czytelniej (ale akurat na SO był inny przykład), że jest na to wzorzec projektowy/architektoniczny itd.

Jak ktoś chce się pokłócić, to chętnie :) Ale proszę na początek zapoznać się z postami studentów (połowa nie wie co ma napisać na zaliczenie), Postami z działu kariera "mnie tam wali domena, kazali napisać, to napisałem" i "ja jestem od pisania kodu, nie wyciągania wymagań", oraz "na kiego grzyba pytają mnie o wzorzec, jak ja będę pisał we frameworku".

G8
  • Rejestracja:około 3 lata
  • Ostatnio:około rok
  • Postów:2000
5

No ale tak w ogóle, to należy sobie zadać 2 pytania: jaki jest cel i czy cel został osiągnięty. Jeżeli celem jest wyrobienie się w terminie i zarobienie kasy, a klient jest zadowolony z rezultatu bo aplikacja działa stabilnie i spełnia założenia, to pytanie jest w czym problem? Nie mówię, że jakość kodu nie ma znaczenia, ale czasem urasta to do rangi ideologii i staje się celem samym w sobie.

Wystarczy, że kod będzie taki, żeby dało się go zrozumieć i rozwijać wystarczająco szybko. Zabijanie się o ilość linii kodu w klasie to już przesada. Gdy jakość kodu staje się głównym celem, to jest już patologia przeważnie. To jest właśnie przeinżynierowanie.

edytowany 1x, ostatnio: gajusz800
Potat0x
  • Rejestracja:ponad 8 lat
  • Ostatnio:19 dni
  • Postów:370
1
KamilAdam napisał(a):

Manago nie rozumieją co to znaczy kod dobrej jakości
A programiści mają deadline'y i w pewnym wieku przestaje im się chcieć kłócić

Żeby było zrozumienie musiałbyś mieć technicznego manago, a coraz trudniej o takich

Mój jest nietechniczny, ale nie ma czegoś takiego, że bez względu na wszystko trzeba szybko dostarczyć ficzur, nawet jeśli będzie bez testów itp. Można "negocjować". Oczywiście zamknięcie się w piwnicy na miesiąc, żeby zrobić refactor, nie wchodzi w grę :D

ehhhhh napisał(a):

Zależy co masz na myśli. Bo cześć programistów mając na myśli "dobry kod" ma na myśli kod przeinżynierowany z 20 warstwami które nic nie znoszą teraz ale może za 50 lat coś wniosą, a jak nie to bedą chociaż mogli usiąść przed lustrem i powiedzieć "zrobiłem zajebisty kod" to nic że nie ma on sensu i nigdy mieć nie będzie.

No ja też nie lubię niepotrzebnych komplikacji i to nie jest dobry kod. Mam na myśli przypadki w których kod został doprowadzony do takiego stanu, że ciężko się w nim ruszyć i rozwijać. Lub pójście po linii najmniejszego oporu i świadome robienie jawnie druciarskiego rozwiązania, bo dzięki temu zaoszczędzi się trochę (dosłownie trochę) czasu.

lion137 napisał(a):

Nie rozumiem, commitujesz marnej jakości kod? Czy widzisz, że inni to robią?

Odpowiadając na pierwsze pytanie - subiektywnie nie - staram się pisać dobry kod. Odpowiadając na drugie - tak. Ale to samo w sobie nie jest największym problem. Gorsze jest to, jak mi się wydaje, że czasem też programistom przestaje zależeć i dlatego tak robią.

piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:3277
0

@gajusz800: Oczywista sprawa, tylko jak kod robi to co ma robić (spełnia wymagania), wiadomo dlaczego to robi (nie został skopiowany ze SO), wiadomo, że robi to ~zawsze (jest przetestowany), to jest to chyba zawsze dobry kod. Moim zdaniem, jeżeli mówimy o chociaż odrobinę złożonym systemie, to nie istnieje coś takiego jak "dobry produkt z dziadowskim kodem".

G8
  • Rejestracja:około 3 lata
  • Ostatnio:około rok
  • Postów:2000
1

No i właśnie to nie do końca rozumiesz. Z punktu widzenia firmy to nie kod ma spełniać wymagania, tylko końcowy produkt ma spełniać wymagania. Rozumiane jako wymagania funkcjonalne. Czy w kodzie będą pomieszane warstwy czy nie albo czy są tam klasy po 500 linii, to menedżerów nie obchodzi. Tak długo, jak team będzie dowoził aplikacje które działają tak, jak miały działać, góry nie interesuje jakość kodu rozumiana jako jakieś arbitralnie przyjęte praktyki. Te są ustalane wewnątrz teamu przez team lidera, ale to sprawa drugorzędna tak naprawdę. Jakość kodu nie stanowi tu żadnego decydującego kryterium. Lepsza jakość kodu może przekładać się na to, że aplikacja działa lepiej, ale nie musi bo są też inne czynniki, które na to wpływają.

edytowany 1x, ostatnio: gajusz800
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:3277
2

Ale gdzie ja napisałem o "arbitralnie przyjętych zasadach"? Ja, sprowadzam kwestię "aplikacja działa" do 3 punktów:

  • robi co klient chciał (zebrane wymagania)
  • wiadomo jak to robi (kod dający się przeczytać)
  • wiadomo, że to robi (jakieś tam testy, mogą być i manualne)

Czyli ktoś zebrał wymagania, ktoś zaimplementował, ktoś przetestował.

Moja teza jest, że jeżeli ta aplikacja to coś więcej niż hello world, niech będzie kalkulator, to nie pisząc "dobrego kodu", rozumianego jako coś co jest podatne na zmiany/rozwój nie da się tych 3 kryteriów spełnić w rozsądnym budżecie. To jak rozumiem kod podatny na zmiany jest już bardziej złożone i być może w niektórych szczegółach byśmy mieli odmienne zdanie, ale zdecydowanie nie mam tu na myśli wymagań typu "metoda nie może mieć więcej niż 15 linii", "wcięcia robimy spacjami" itp.
Dlaczego ma być podatne na zmiany? Bo jak robi to więcej niż jeden programista, przez więcej niż jedną godzinę, to trzeba będzie to zmieniać.

EH
  • Rejestracja:ponad 2 lata
  • Ostatnio:około rok
  • Postów:1208
1

@piotrpo: no i właśnie dochodzimy do punktu "kod podatny na zmiany" kiedy nie wiesz jakie zmiany beda w przyszłości to tylko zgadywanie, które bardzo często sprawia że ktoś robi kod myśląc że bedą zmiany X a okazuje się że są Y które sprawiają że to co napisał nadaje się tylko do całkowitego usunięcia. Tym samym nie ma to biznesowego sensu bo nigdy się nie przygotujesz na każda zmianę jaka może być potrzebna bo wtedy logowanie usera byś pisał 3 miesiące. Także w mojej ocenie lepiej pisać kod zwięzły który robi to co ma robić i wrazie potrzeby zawsze można go zaorać i napisać na nowo w wersji rozszerzonej niż pisać z myśla o rozbudowie której i tak nie przewidzimy.

edytowany 2x, ostatnio: ehhhhh
Miang
zawsze można zrobić refaktUring ;)
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
9

Ileś razy (ale głównie w jednej konkretnej firmie) skonfrontowałem programistę z managerem produktu pytając czy naprawdę życzy sobie, aby ficzur był zrobiony byle jak, z bugami, bez testów, byle szybko. I o dziwo okazywało się, że wcale sobie tego nie życzy - to tylko dziwne domniemania programistów.

Spotkałem się w życiu z presją dupnych menadżerów, ale o wiele częściej wirtualną presję wymyślają sobie programiści. Głównie po to, żeby mieć wymówkę do robienia na odczep.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 2x, ostatnio: jarekr000000
LukeJL
widać po wątkach na tym forum, że ta presja jest często self-inflicted. Ludzie potrafią darmowe nadgodziny brać w tajemnicy przed szefem, żeby tylko się nie wydało, że mają problem ze zrobieniem na czas tasków. imposter syndrome wchodzi mocno. Ludzie są niepewni własnej pozycji w firmie i na rynku pracy, dlatego projektują swoje lęki robiąc oprawców ze swojego PMa czy kolegów z pracy i boją się im postawić…
EH
  • Rejestracja:ponad 2 lata
  • Ostatnio:około rok
  • Postów:1208
0

@jarekr000000: ja pracuje dość blisko biznesu, na 80% wycen dostaje info "czemu tyle czasu? takiego budżetu nie mamy".

katakrowa
  • Rejestracja:około 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
3

Rozumiem, że tu jest forum programistów a programiści tworzą kod. Naturalnym wydaje się być, że dobry programista tworzy dobry kod i po tym można odróżnić tego dobrego od złego. Choć też głównie jestem programistą to widzę to zupełnie inaczej. Dobry programista powinien umieć napisać dobry kod, powinien umieć tworzyć generalizacje w postaci często nadmiarowych abstrakcji ale realizując konkretne zlecenie do jego rozwiązania powinien potrafić zastosować narzędzia i techniki odpowiedniego kalibru do problemu. Na to co należy użyć będą miały wpływ termin realizacji zadania czy cena końcowej aplikacji. To dwa niezmiernie ważne czynniki aspekty, o których większość programistów zapomina, uważając że kod musi być super bo inaczej aplikacje będzie zła... Niestety to nie jest prawda.
W pewnym przypadku dobrym kodem będzie relatywnie łatwe do ogarnięcia "spaghetti" w całości umieszczone w funkcji main a w innym przypadku starannie zaprojektowany zbiór dziedziczących po sobie klas może okazać się porażką. Tu nie ma ogólnie dobrych wytycznych.

Skupianie się na samej jakości kodu to projektowy błąd. Sama jakość kodu bardzo rzadko przekłada się na biznesowy sukces projektu. Dobry kod może być dumą programisty ale w tym samym czasie konkurencyjna firma sprzeda 10 razy więcej licencji mimo, że kod mają beznadziejny ale wystartowali pół roku wcześniej.

Po ponad 20 latach projektowania i pisania systemów, aspekt jakości kodu uważam za pomijalny - nie mówię tu o ewidentnych kaszanach i "druciarstwie". Każdy kod napisany z zachowaniem minimum staranności da się rozwijać i modyfikować nawet po 10 latach.

Jeśli jednak miałbym wskazać coś co ma potwierdzony wpływ na łatwość rozwoju systemu, nawet po wielu latach, to będzie to jego architektura.
Nie sam kod a odgórna idea narzucająca reguły i ramy, w których będą poruszać się programiści tworzący poszczególne moduły systemu.
Nie da się jednak łatwo powiedzieć jaka architektura będzie dobra bo to już zależy od specyfiki rozwiązania, które się tworzy. Nie mając wystarczającej wiedzy na temat tego jak projekt się rozwinie możemy popełnić poważny błąd a wtedy nie uratuje nas nawet najpiękniejszy kod, z którego zbudowana jest źle zamodelowana aplikacja.

Na oceną kodu ma duży wpływ też to, kto za niego płaci. Myślę, że niejednemu głosicielowi idei pięknego kodu przyszło zapłacić za większy projekt z własnej kieszeni to szybko zrewidowałby swoje poglądy na temat "jakości".
Nie zawsze naszym klientem jest bank, automotive czy inny finansowy moloch. Łatwo jest się "wymądrzać" kiedy budżet mamy niemal bez ograniczeń.


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
edytowany 1x, ostatnio: katakrowa
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)