Jak wytłumaczyć „piękny kod” nieprogramiście? [Zamknięte]

44

Kiedy rozmawiałem z przyjacielem nie będącym programistą, wspomniałem o koncepcji „pięknego kodu” i chciała zrozumieć, co to znaczy, ale nie wiedziałam, jak wyjaśnić to komuś, kto nie miałby pojęcia kontekst w ogóle.

Kiedy i tak każdy kod wygląda jak bełkot, jak możesz wyjaśnić, co sprawia, że ​​jeden fragment kodu jest ładniejszy od drugiego? Przydatne mogą być również analogie.

Daniel Vandersluis
źródło
12
Można wyjaśnić piękną kod do programatora bez pokazywania kodu? Sam opis jest sztuką.
kojiro
9
Jeśli uda nam się wymyślić tutaj dobry pomysł, może mógłbym go użyć, aby opisać piękny dowód nie-matematykowi.
David Thornley,
Piękny kod może być tym, który wykorzystuje prostsze i mniej pomysłów podczas prawidłowego wykonywania pracy. Jak na ironię poprzednie zadanie znalezienia prostych pomysłów może być złożoną pracą i to podziwiamy. - Niestety nie mogę teraz znaleźć sposobu, aby wyjaśnić to komuś w bardziej naturalny sposób.
LatinSuD,
Piękny kod pojawia się, gdy ustawisz czcionkę IDE na Comic Sans. westchnienie
Kirk Broadhurst

Odpowiedzi:

88

Analogia językowa

Pomyśl o swojej ulubionej historii. Prawdopodobnie jest pięknie napisane. Dla osób nieanglojęzycznych tylko dlatego, że nie mogą tego zrozumieć lub zrozumieć, dlaczego jest piękny, nie umniejsza jego piękna.

Analogia budowy

Rozważ tandetnie zbudowany dom. Ma drzwi i okna, które są oczywiście zamurowane. Zaprawa jest pęknięta w jednym rogu, w którym fundament był niewystarczający. I nikt nie może zrozumieć, dlaczego istnieje schody prowadzące na drugie piętro, które nie istnieje. Toaleta jest zbudowana obok kuchni bez wentylatora wyciągowego i usytuowana w taki sposób, że dominujący wiatr wydmuchuje nieprzyjemne zapachy torfowiska przez resztę domu. Komin z otwartego kominka znajduje się 5 cm od drewna i jest gotowy do podpalenia.

Dla kontrastu, w domu, w którym wszystko jest tam, gdzie powinno być, jest niskie koszty utrzymania, doskonale izolowane, dzięki czemu odrobina ciepła słonecznego utrzyma ciepło w zimie, energia jest odzyskiwana z wentylacji, dzięki czemu masz zarówno świeże powietrze, komfortową temperaturę i znikome rachunki za prąd. Jest zbudowany z niepalnych materiałów, dzięki czemu nie może się spalić od ognia. Wytrzyma trzęsienie ziemi 9.0 i tornado F5. Wybudowanie kosztuje tylko 30% więcej niż drugi dom, ale spłaci różnicę za 5 lat. I jest estetyczny.

GUI jest jak zewnętrzny wygląd domu. Użytkownik może rozpoznać piękno w GUI, tak jak może docenić piękny dom. Ale może nawet ważniejsze jest to, że prawdziwe piękno w projektach zarówno w domach, jak i programach jest niewidoczne dla niewtajemniczonych, ale ważne lub miłe.

użytkownik21007
źródło
19
Ta analogia konstrukcji jest idealna!
Daniel Vandersluis,
1
+1 @ user21007: Dawno, dawno temu byłem architektem informacji dla dużych witryn - wszyscy dostają analogię konstrukcyjną i koncepcję systemów, które działają i czują się dobrze.
wpadki
1
Dobra analogia do produktów z GUI. Nie tak dobre dla frameworków i bibliotek.
Den
1
Trochę przypomina mi tę reklamę: youtube.com/watch?v=p9tjs-6wbsI
JohnL
4
W przeszłości używałem analogii językowej: „Pracuję z tym brzydkim kodem ...” „Czekaj, co masz na myśli przez brzydkość?” „widzisz, pisz, że to”
DistantEcho
28

Pomyśl o samochodzie.

Większość z nas patrzy na samochód i widzi tylko ciało. Jeśli ktoś naprawi niektóre wgniecenia i nałoży nową farbę na samochód, będzie wyglądał o wiele piękniej. Zasadniczo jest to ten sam samochód, ale to wszystko, co widzimy.

Mechanik otwiera samochód i patrzy na silnik. Widzą, jak dobry jest ten silnik. Widzą, że wszystko jest tak zorganizowane, aby łatwo było do nich dotrzeć, utrzymać i pracować. Widzą części i wiedzą, jak dobrze to zaprojektowano. Dla doświadczonego mechanika silnik zadbanego samochodu wysokiej jakości staje się pięknem. Nie potrafią wyjaśnić, co sprawia, że ​​jest piękny, ale ich pojęcie piękna może przełożyć się na niższe koszty utrzymania, dłuższą żywotność samochodu i lepszą wydajność. Wszystko to podnosi wartość tego samochodu, nawet jeśli go nie widzisz.

Kiedy patrzysz na stronę internetową lub aplikację, patrzysz na nią tak, jak większość z nas widzi samochody. Kiedy patrzę na kod, patrzę na niego jak mechanik na silnik samochodu. Nigdy nie możesz doświadczyć piękna tego kodu, tak jak ja, jest on dla ciebie dosłownie niewidoczny. Ale to piękno jest ważne, podobnie jak piękno mechanika. Określa to, jak dobrze działa to oprogramowanie, jakie będą problemy, jak łatwo można ulepszyć oprogramowanie i tak dalej. Wszystko to podnosi wartość tego oprogramowania, nawet jeśli go nie widzisz.

btilly
źródło
11

Cały obecny kod jest wymagany i żaden z nich nie wymaga wyjaśnienia.

Steven Evers
źródło
2
@zdan: Odparłbym się, mówiąc, że ci, którzy uważają to za piękne, mają wymaganą wiedzę (stąd, w oczach patrzącego). Poza tym sprytny! = Piękny IMO.
Steven Evers,
2
@zdan: Kiedy wymaga wielu takich wyjaśnień, nie jest to „piękny kod”, ale „sprytny hack”.
Mason Wheeler,
1
FFT to bardzo sprytny hack, ale nie ma sposobu, aby nazwać to pięknym.
Kyte
1
W większości zgadzam się ze SnOrfusem. Jednak dla mnie piękny kod musi być nie tylko konieczny, wystarczający i zrozumiały, ale także subiektywnie czuć się idealnie i lekko. Wierzę, że wiele kodu może kwalifikować się do kryteriów ujawnionych przez SnOrfusa, a jednocześnie wydaje się nieporęczne lub niedoskonałe w inny sposób. Bardzo bym nazwał taki kod pięknym.
asoundmove,
1
Myślę, że idea „czegoś sprowadzającego się do niezbędnych rzeczy, ale nie więcej” jest na dobrej drodze. Jednak coś nie do utrzymania i napisane w niewłaściwym języku dla zadania pasowałoby również do tej definicji. Ponadto, wymagając, aby nie wymagało wyjaśnienia, prawdopodobne jest, że większość zadań pasujących do Twojej definicji musi być również trywialna. Nie sądzę, że „Hello World” można nazwać pięknym.
user21007
5

Odniósłbym się do poezji:

Dobrze napisany wiersz ma inny charakter niż fragment źle przetłumaczonego podręcznika na ten sam temat.

użytkownik1249
źródło
Tak też myślałem, ale nie wszyscy lubią lub rozumieją poezję. Przyszła mi też na myśl muzyka: dobra piosenka kontra zła piosenka, ale to też dość subiektywne.
PSU,
Co ... 25 interfejsów +25 klas dziedziczy po klasach abstrakcyjnych? Chciałem tylko taczki z czerwonym kołem. A może niektóre kurczaki.
Erik Reppen
5

Problemy z kodowaniem dotyczą konceptualizacji, więc piękny kod reprezentuje niezwykłą konceptualizację problemu.

Na przykład podoba nam się, gdy jeden problem można sprowadzić do istniejącego rozwiązanego problemu, zapewniając wgląd w naturę samego problemu .

Czasami ponowna konceptualizacja problemu może sprawić, że będzie to takie proste; mówimy o eleganckich rozwiązaniach, które wymagają prostych sztuczek, które upraszczają trudne zadanie.

Dla mnie Quicksort jest pięknym przykładem: wybierz losowy element z tablicy, a następnie porównaj z nim każdy inny element w tablicy; jeśli liczba jest mniejsza od niego, umieść ją na stosie A; jeśli liczba jest większa, umieść ją na stosie B. Teraz, z powodu nierówności trójkąta, żaden element na stosie A nigdy nie będzie musiał być porównywany z żadnym elementem na stosie B. Powróć na A i B, i gotowe. .

Macneil
źródło
5

Przypomina mi o tym:

http://imgs.xkcd.com/comics/lisp.jpg

Źródło: XKCD - LISP

Nick Bedford
źródło
5
Lepiej mieć to jako link, zwłaszcza gdy brakuje tekstu aktywowanego.
user151019,
1
Tekst w tym przypadku to połowa żartu w tym przypadku.
4

Żaden nietrywialny kod nie może być idealny, ponieważ idealny kod wymaga jednocześnie spełnienia celów, które często powodują konflikty. Dlatego piękny kod idealnie równoważy wszystkie ważne atrybuty dla danego zadania i zbliża się do spełnienia wszystkich z nich jednocześnie, niż większość uważa, że ​​to możliwe. W szczególnej kolejności:

  • Czytelność
  • Zwięzłość
  • Wydajność
  • Elastyczność
  • Dosadność
  • Krzepkość
  • Bezpieczeństwo / idiota
  • Kompletność
  • Konsystencja
  • Łatwość użycia (dla interfejsów API)
dsimcha
źródło
2

Obrazy Jacksona Pollocka są dla niektórych przykładem czegoś pięknego, a dla innych bełkotem.

S.Lott
źródło
Hmmmm ... Nie czuję tego.
Dynamiczny
Programowanie to więcej rzemiosła niż sztuki (lub nauki w tym zakresie). Nie to, że też pukam.
Erik Reppen
1

Jeśli osoba dobrze zna matematykę, lubię porównywać piękny kod z eleganckim rozwiązaniem problemu.

Chris Cudmore
źródło
1

Niektóre aspekty dobrego kodu to:

  1. Ma dużą liczbę drobnych szczegółów, które wszystkie wskazują ten sam kierunek
  2. ma spójną strukturę , każda część ma ten sam wzór
  3. ale się nie powtarza , zamiast tego każda część jest inna
  4. to również nie pozwala zachowań , które są uznane za nieważne
  5. ma najmniejszą możliwą liczbę różnych stanów
  6. możesz zrozumieć całe zachowanie kodu , czytając prototypy funkcji
  7. nie ma skutków ubocznych
  8. jego wykonanie gwarantuje zatrzymanie
  9. to nie korzysta z żadnych zaawansowanych funkcji dostępnych w językach programowania
  10. nie jest zbyt skomplikowane w porównaniu ze złożonością problemu, który rozwiązuje
  11. nie ma w nim błędów ani nieokreślonego zachowania
  12. to może być skompilowany z kompilatorów z kilku różnych dostawców
  13. nie ma zależności od kodu, który nie jest używany
tp1
źródło
0

Dla mnie języki są moimi narzędziami.

I jak każdy rzemieślnik, wolę, aby moje narzędzia były w doskonałym stanie.

Im lepszy stan kodu, pod względem przejrzystości koncepcji, łatwości konserwacji i czytelności. tym lepszy kod.

Więc dla mnie czytanie dobrze napisanego kodu jest jak otwieranie skrzynki narzędziowej z dobrze przygotowanymi narzędziami.

Użyłem tej analogii kilka razy z powodzeniem. Wydaje się, że w szczególności ludzie z bardziej praktycznym lub artystycznym doświadczeniem rozumieją pojęcie czystego / pięknego kodu w ten sposób.

przewodnik
źródło
0

Myślę, że to zależy od tego , co rozumiesz przez piękny kod.

Dla mnie kod jest piękny, gdy można go odczytać. Oprócz możliwych problemów z koncepcjami programowymi, laik może czytać i, przynajmniej na wysokim poziomie, rozumieć, co robi kod.

Jak omówiono w niektórych innych odpowiedziach, kod może być również piękny w tym sensie, że osiąga złożoną funkcjonalność poprzez połączenie kilku prostych pojęć. Nie jestem pewien, jaką analogię najlepiej wytłumaczyć nieprogramiście, to zależy od laika. Przychodzą mi na myśl puzzle, takie jak NeoCube .

Paul D. Waite
źródło
0

Moim skromnym i osobistym zdaniem piękny kod jest jak dobra powieść:

  • możesz go przeczytać od początku do końca / nie musisz przechodzić do kolejnych stron książki, aby zrozumieć bieżącą stronę.
  • nie ma niepotrzebnych powtórzeń / książka jest trochę nudna, jeśli zawsze mówi to samo.
  • intencja każdej części jest widoczna prawie za każdym razem / nie powinieneś mieć przy sobie słownika przez cały czas, aby czytać książkę (chyba że jest to poezja / kodowanie golfa xD).
  • jest zorganizowany w podstruktury o przystępnych rozmiarach i złożoności (moduły, funkcje, instrukcje itp.), nie ma zbyt wielu „zagnieżdżeń” / rozdziałów, akapitów i zdań jest odpowiednio zrównoważony; nie wykorzystuje zbyt wielu poziomów podporządkowania zdań itp.
  • jest przyjemny dla oka w sposób estetyczny (ładnie wcięte, bloki poprawnie rozdzielone itp.) / jak książka z odpowiednim składem.
fortran
źródło
0

To jest jak chuda firma, w której wszyscy znają swoją rolę, łatwo jest ustalić, kto jest w czym dobry i nie ma powielania wysiłków

Vs.

Przestrzeń biurowa, w której przeciętność jest broniona, trzech menedżerów nie ma nic lepszego do roboty niż zgłaszanie błędów w raportach TPS, MASZYNA FAKSOWA NIGDY NIE DZIAŁA !!! a każdy pracownik może wykonać około 15 minut faktycznej pracy tygodniowo. Pracownik może już nawet nie pracować technicznie, ponieważ ktoś zapomniał go zwolnić (trudno to powiedzieć, ponieważ nikt nie działa skutecznie i trudno jest ocenić, co próbują osiągnąć). Aby zrealizować cokolwiek praktycznego, konieczne jest poruszanie się w absurdalnie nadmiernie skomplikowanym systemie, o którym ktoś czytał i myślał, że będzie wyglądał dobrze w swoim życiorysie, nawet jeśli w rzeczywistości nie rozwiąże to problemu, który mieli.

Erik Reppen
źródło
-1

Nie ma „pięknego kodu”, są „eleganckie algorytmy” i „eleganckie projekty”. Projekt może być zrozumiany przez osoby niebędące programistami.

Nienawidzę programistów, którzy kłócą się o „piękny kod”, ponieważ tak czy inaczej, albo tak naprawdę nie wiedzą, jak interpreter lub kompilator go przetrawi i co zrobi maszyna, więc bardziej przypomina to dzieciom pokazującym swojej mamie, jak cudowna jest jego historia, ale tak naprawdę nie jest.

żart
źródło
-1

Czy tłumaczysz ludziom, dlaczego ładne zdjęcie jest fajne? Nie. Pokazujesz im zdjęcie (bo wiesz, że zdjęcie mówi więcej niż 1000 słów). Najlepszym rozwiązaniem jest pokazanie im małego fragmentu kodu, który jest naprawdę elegancki, piękny, idealny (a może dla porównania, jak kodowałby go Joe Average).

flolo
źródło