Co to jest piękny kod? [Zamknięte]

30

Często czytam, że programiści muszą pisać piękny kod, ale dla początkujących pozostaje niejasne, czym jest piękny kod i jak go rozpoznajesz?

Następnym pytaniem jest: jak napisać piękny kod i jakie są praktyczne nawyki, aby poprawić jakość kodu? , o co powinienem dbać, aby kod, który piszę był piękny (i czego się uczę).

torr
źródło
4
To tylko postać mowy. Piękno leży w oczach patrzącego, a poza tym chodzi o jasność instrukcji, które umieściłeś w pliku tekstowym, aby rozwiązać problem, oraz o tym, jak łatwo Ty lub ktokolwiek inny możesz go modyfikować i utrzymywać w przyszłość. Poza tym, o ile więcej piękna emanuje Twój kod, zależy wyłącznie od Ciebie - wcięcia, struktura modułowa, złożoność, wydajność jednocześnie z łatwą czytelnością, konwencje nazewnictwa itp.
bad_keypoints
Być może zainteresuje Cię przeczytanie Pięknego kodu: Wiodący programiści wyjaśnij, jak myślą !
UncleZeiv,

Odpowiedzi:

55

„Piękno kupuje się na podstawie osądu oka”.

To powiedziawszy, myślę, że większość programistów zgodzi się, że piękny kod pokazuje równowagę między klarownością i przejrzystością, elegancją, wydajnością i estetyką.

  • Przejrzystość i przejrzystość : Przejrzystość określa, jak łatwo czytelnik może wywnioskować, co robi kod. Przejrzysty kod robi to, co się wydaje. Jeśli kod wydaje się robić jedną rzecz, ale faktycznie robi coś innego (lub coś więcej), nie jest przejrzysty - wprowadza w błąd.

  • Elegancja : istnieje wiele sposobów implementacji większości algorytmów, ale niektóre są niezdarne, a inne są zgrabne i pełne wdzięku. Zwięzłość często dodaje elegancji, ale nadmierna zwięzłość może zmniejszyć przejrzystość.

  • Wydajność : unikanie niepotrzebnego zużycia zasobów (takich jak czas procesora, pamięć i operacje we / wy).

  • Estetyka : łagodny dla oczu. To jest dość subiektywne. W większości sprowadza się do stylu. Ważnym aspektem jest spójny styl. Kod, który zmienia na przykład wcięcie stylu w połowie, jest brzydki.

Igby Largeman
źródło
11
piękne wyjaśnienie, +1
koenmetsu
2
Zabrałbym „Efektywność”. Chociaż w ścisłym tego słowa znaczeniu jest to pozytywne, umieszczenie go na liście może co najmniej wprowadzać w błąd. Zwykle jest to produkt uboczny innych i powinien być drugorzędny w momencie kodowania. Głównym powodem jest to, że w przeważającej części manifestuje się dopiero po tym, jak kompilator przepracuje swoją mroczną magię.
DPM,
@Jubbat Rzeczywiście - czasami najbardziej wydajne rozwiązanie faktycznie prowadzi do bardzo brzydkiego kodu. (Np. Klasyczna funkcja szybkiego odwrotnego pierwiastka kwadratowego)
Darrel Hoffman
@DarrelHoffman Racja, chociaż ten kompromis jest spełniony również przez więcej zmiennych, które definiują dobry kod, nie tylko wydajność i resztę (istnieje dobre długie wyjaśnienie tego w „Code Complete” - niestety nie pamiętam, w której części książka, prawdopodobnie na początku
DPM,
@Jubbat: Zgadzam się, że wydajność jest zwykle kwestią drugorzędną, ale nadal uważam, że ma to wpływ na równanie piękna.
Igby Largeman,
20

Nie pozwól, aby ludzie oszukiwali cię, że piękny kod to:

  • sprytne algorytmy
  • podstępne funkcje językowe
  • rozwiązanie problemu z najmniejszą liczbą naciśnięć klawiszy

Ponieważ tak nie jest. Taki kod jest ładny i na pewno warto go rzucić okiem, ale nie jest to rodzaj kodu, który chcesz rozwiązać.

I wiesz, że ten fantazyjny rekurencyjny meta-szablonowany statyczny polimorfizm, który dziedziczy lambda zmienne - czy cokolwiek, o czym czytałeś online? Być może zechcesz skoczyć na innowacyjne i sprytne sztuczki bez wyraźnego powodu, aby z nich korzystać. Ale kod, który przesuwa granice języka, też nie jest piękny.

Oni są seksowni .
Mnóstwo zabawy, ale zadaj sobie to pytanie: Czy naprawdę chcę spędzać czas na badaniu anatomii tego języka, czy też chcę współpracować z językiem i stworzyć coś pięknego? W końcu język programowania jest jedynie narzędziem do tworzenia.


Czym więc jest piękny kod?

Piękny kod = możliwy do utrzymania kod. TO JEST TO!
TO FORMUŁA!

Jeśli możesz coś napisać, wróć do niego kilka miesięcy później i kontynuuj postępy, to jest piękne. Jeśli rok później zdasz sobie sprawę, że chcesz dodać funkcjonalność, a także ulepszyć istniejącą funkcję i uda ci się to zrobić ze względną łatwością, to jest piękne. Jeśli inni ludzie mogą wejść do Twojej bazy kodów i szybko dowiedzieć się, co się dzieje, ponieważ wszystko jest zorganizowane, będą mieć więcej włosów, a także będą piękne.

Tak więc prawdziwe pytanie, które chcesz zadać, brzmi: „Jak napisać bardziej łatwy do utrzymania kod?”. Obawiam się, że to większe pytanie i jest to dość kreatywna dyscyplina. Po prostu pisz kod, ale tym razem nie zadawaj sobie pytania, czy może być piękniejszy. Zastanów się, czy możesz uczynić to łatwiejszym w utrzymaniu.

Trevor Hickey
źródło
4
Aby poradzić sobie z podniesionymi przez ciebie problemami, możesz także skorzystać z porady na stronie c2.com/cgi/wiki?KillYourDarlings
jk.
4

Uważam, że „piękny kod” nie jest terminem obiektywnym ani szczególnie przydatnym. I nie powinniśmy próbować tego definiować.


Typowe słownikowe definicje angielskiego słowa „piękno” wyglądają następująco:

  • „1. połączenie wszystkich cech osoby lub rzeczy, które zachwycają zmysły i zadowalają umysł”
  • „1. jakość obecna w osobie lub rzeczy, która daje intensywną przyjemność estetyczną lub głęboką satysfakcję dla umysłu lub zmysłów”.
  • „1. Jakość, która sprawia przyjemność umysłowi i zmysłom i jest związana z takimi właściwościami, jak harmonia formy lub koloru, doskonałość kunsztu, prawdomówność i oryginalność”.

(Źródło http://dictionary.com )

Wspólnym wątkiem jest to, że „piękno” dotyczy tego, co jest estetyczne. Jest to z konieczności subiektywne ... co ilustruje powiedzenie „Piękno jest w oku patrzącego”.


Możemy zastosować słowo „piękno” do kodu, a oczywistym znaczeniem jest to, że kod jest „estetyczny”.

Ale powiedzenie, że „piękny kod” ma pewien zestaw atrybutów (jak sugerują inne Odpowiedzi), jest sprzecznością z oczywistym znaczeniem estetyki. Estetyka polega na tym, jak ludzie ... indywidualni ludzie ... postrzegają rzeczy.

Innymi słowy, jest coś odrażającego w tym, że ktoś mówi mi, co powinienem uważać za piękne, czy to w ludziach, dziełach sztuki, czy ... kodzie.

Moim zdaniem piękny kod to kod, który moim zdaniem jest piękny i to wszystko. Jest subiektywny i indywidualny, i zostawmy to w tym miejscu.

Stephen C.
źródło
2

Oto moja rada.

Przejrzyj odpowiedzi na pytanie Jak możesz wyjaśnić „piękny kod” nieprogramiście? i zobacz, na jakich cechach się skupiają. Następnie wybierz książkę, taką jak Code Complete, i przeczytaj ją, aby uzyskać porady na temat pisania lepszego kodu.

W pewnym momencie uderzy cię, patrząc na twój starszy kod: „To jest brzydkie”. Będzie to bezpośrednia reakcja estetyczna. Patrząc na to, zrozumiesz, że widzisz swój kod jak programista i widzisz brzydotę, ponieważ wiesz, jak powinien wyglądać lepiej wyglądający kod.

btilly
źródło
1

To, że często czytasz o pięknym kodzie, nie oznacza, że ​​ludzie, którzy o nim piszą, mają tę samą definicję. Niestety, sądząc po twoim pytaniu, nie wydaje się, że nawet próbowali go zdefiniować.

Dla mnie piękny kod to:

  • Ekspresyjny
  • Zwięzły

Zwięzły kod, który nie jest ekspresyjny, może być tajemniczy, a kod ekspresyjny, który nie jest zwięzły, jest zwykle wzdęty i uciążliwy do czytania, więc potrzebujesz obu.

Nie uwzględniłbym łatwości konserwacji jako części tego, co czyni kod pięknym, ponieważ piękno jest czymś, co widzisz / czytasz, a nie czymś, na co działasz. Ale z drugiej strony to mój osobisty pogląd.

guillaume31
źródło
0

Termin piękny kod jest bardzo niejasnym i abstrakcyjnym terminem. Łatwo jest zrozumieć, co to reprezentuje i co to oznacza, ale nigdy nie powinno być postrzegane jako cel dodatkowy.

Przypomina mi wiele metryki pokrycia kodu. Gdy osiągniesz wystarczająco wysoką liczbę, możesz się zrelaksować i przejść do czegoś innego. Posiadanie bazy kodu z około 80% pokryciem jest świetne, nie kuloodporne, ale wystarczające do relaksu i robienia innych rzeczy. Posiadanie 40% zasięgu jest dość przerażające i powinno zachęcić cię do zwiększenia tej liczby.

Chodzi o to, że pokrycie kodu jest naprawdę znaczące tylko wtedy, gdy liczba jest niska. Więc nie pozwól mu być nisko. Gdy zasięg wzrośnie do określonego punktu, przejdź do czegoś innego.

Podobnie piękny kod jest świetny. Jeśli masz ładny kod, świetnie, przejdź do czegoś innego. Nie stresuj się tym zbytnio. Nigdy nie osiągniesz tego poziomu 100%, a jeśli to zrobisz, zauważysz, że zbytnio skupiłeś się na tym, jak on czyta, lub jak to wygląda, a za mało na tym, co robi lub jak to robi . Więc dojdź do rozsądnego znaku, a potem przestań.

Ale jeśli twój kod jest niezgrabny, jeśli jest to gigantyczny, zawiły bałagan kodu spaghetti, jeśli fizycznie boli cię, aby otworzyć plik, jeśli nie masz komentarzy, dokumentacji itp. Itd., To napraw go. I zrób to jak najszybciej.

Z czasem przekonasz się, że twoja baza kodu jest generalnie czystsza, generalnie jaśniejsza i generalnie piękniejsza oraz, co ważniejsze, bardziej użyteczna, gdy skupiasz się na zmniejszaniu jej niezręczności. Pisanie pięknego kodu nie jest procesem jednoetapowym.

Nie ma magicznej filozofii. Jego 1000 mniejszych kroków wykonanych razem, z których wszystkie służą konkretnemu celowi, który nie ma nic wspólnego z tym, jak pięknie wygląda kod. Ale kiedy podajesz je wszystkie razem, tworzą one piękny kod jako sumę jego części. Jak voltron. Lub kapitan planeta.

astronauta
źródło
0

Naprawdę zgadzam się z odpowiedziami tutaj, ale przyjmując mniej techniczne podejście, powiedziałbym, że piękny kod jest wyrazem jasności myśli jego autorów na temat problemu, który przejawia się w dobrze sformułowanym i precyzyjnym, ale prostym języku.

Dla mnie przeglądanie pięknego kodu przypomina oglądanie dzieła sztuki, dostrzeganie coraz to nowych szczegółów, które pokazują intencję twórcy, ale także sposób realizacji różnych części, z których każda daje odpowiedź na tak wiele pytań, a na koniec: jak jego istnienie wydaje się naturalnym prawem, do którego wszystko się dopasowuje tak, że można je opisać jedynie słowami podziwu: wspaniały, inspirujący, piękny.

Z tego punktu widzenia w swojej karierze programisty możesz odkrywać piękny kod, którego inni nie mogą zrozumieć, ponieważ nie mają wiedzy lub mogą nie być już godni uwagi, ponieważ zostały zepsute przez zbyt wiele piękna;)

Piękny kod ma wszystkie pragmatyczne cechy, jak wspomniano inaczej, całkowicie się zgadzam.

Filou
źródło
0

Mam trzy kryteria:

  • Prosty: przynajmniej musi być czytelny dla człowieka. Na przykład możesz napisać kod, który działa w O (1) dla rozwiązania z mnóstwem linii, ale wolę kod, który działa z 0 (n) rozwiązuje z kilkoma liniami. Może się to zmienić w ekstremalnych sytuacjach, ale na początku ważna jest prostota.
  • Wielokrotnego użytku: kod musi być wielokrotnego użytku, ale nie może być nadpisany. Jeśli potrzebujesz operacji, powinieneś ją zdefiniować tak, abyś mógł z niej korzystać po latach.
  • Wcięcie: Być może nie jest to dla ciebie problem, ale dla początkujących jest to pierwsza rzecz do rozwiązania.
użytkownik2674653
źródło