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.
aesthetics
Daniel Vandersluis
źródło
źródło
Odpowiedzi:
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.
źródło
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.
źródło
Cały obecny kod jest wymagany i żaden z nich nie wymaga wyjaśnienia.
źródło
Odniósłbym się do poezji:
Dobrze napisany wiersz ma inny charakter niż fragment źle przetłumaczonego podręcznika na ten sam temat.
źródło
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. .
źródło
Przypomina mi o tym:
Źródło: XKCD - LISP
źródło
Ż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:
źródło
Obrazy Jacksona Pollocka są dla niektórych przykładem czegoś pięknego, a dla innych bełkotem.
źródło
Jeśli osoba dobrze zna matematykę, lubię porównywać piękny kod z eleganckim rozwiązaniem problemu.
źródło
Niektóre aspekty dobrego kodu to:
źródło
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.
źródło
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 .
źródło
Moim skromnym i osobistym zdaniem piękny kod jest jak dobra powieść:
źródło
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.
źródło
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.
źródło
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).
źródło