W tym pytaniu zapytałem, czy bycie złym pisarzem utrudnia pisanie dobrego kodu. Wiele odpowiedzi zaczyna się od „to zależy od tego, co rozumiesz przez dobry kod”.
Wydaje się, że terminy „dobry kod” i „zły kod” są bardzo subiektywne. Ponieważ mam jeden pogląd, może się bardzo różnić od poglądów innych.
Co to znaczy pisać „dobry kod”? Co to jest „dobry kod”?
code-quality
gablin
źródło
źródło
Odpowiedzi:
Dobry programista jest jak dobry gracz w puli.
Kiedy widzisz profesjonalnego gracza w bilard, na początku możesz nie być pod wrażeniem: „Jasne, wbili wszystkie piłki, ale mieli tylko łatwe strzały!” Wynika to z tego, że kiedy gracz w bilard strzela, nie myśli o tym, do której piłki trafi, do której kieszeni, zastanawia się także, gdzie skończy się kula bilowa . Przygotowanie do następnego strzału wymaga ogromnych umiejętności i wprawy, ale oznacza również, że wygląda na łatwe.
Teraz, przenosząc tę metaforę do kodu, dobry programista pisze kod, który wygląda na to, że było to łatwe i łatwe do zrobienia . Wiele przykładów Briana Kernighana w jego książkach jest zgodnych z tym wzorem. Część „sztuczki” polega na właściwej koncepcji problemu i jego rozwiązaniu . Kiedy nie rozumiemy wystarczająco dobrze problemu, jesteśmy bardziej skłonni do nadmiernego komplikowania naszych rozwiązań i nie zobaczymy ujednolicających pomysłów.
Dzięki odpowiedniej konceptualizacji problemu otrzymujesz wszystko inne: czytelność, łatwość konserwacji, wydajność i poprawność. Ponieważ rozwiązanie wydaje się takie proste, prawdopodobnie będzie mniej komentarzy, ponieważ dodatkowe wyjaśnienia nie są konieczne. Dobry programista może również zobaczyć długoterminową wizję produktu i odpowiednio sformułować ich konceptualizacje.
źródło
( oryginał )
EDYCJA: Podstawową ideą jest to, że „Jakość kodu” nie może być poddana regułom, w taki sam sposób, w jaki nie można umieścić w regułach „Dobrej sztuki” lub „Dobrej poezji”, aby komputer mógł określić „Tak, dobra sztuka” lub „Nie, zła poezja”. Obecnie jedynym sposobem jest sprawdzenie, jak łatwo kod jest zrozumiały dla innych ludzi.
źródło
Naprawdę nie ma dobrych kryteriów poza tym, jak szybko można zrozumieć kod. Sprawiasz, że kod wygląda dobrze, znajdując idealny kompromis między zwięzłością a czytelnością.
„WTF na minutę” (powyżej) jest prawdą, ale jest to jedynie następstwo bardziej ogólnej zasady. Im więcej WTF, tym wolniejsze zrozumienie.
źródło
RemoveCustomer
metoda faktycznie usuwa cutomer bez zepsucia. Możesz spędzać godziny, aby wyglądać ładnie, ale to nie znaczy, że faktycznie działa. „Szybkość rozumienia kodu” nie jest jedynym kryterium „dobrego kodu”, mówię.Wiesz, że piszesz dobry kod, gdy ...
Jak zmierzyć, czy kod jest dobry ...
Dobry kod działa, kiedy powinien. Dobry kod można łatwo modyfikować, gdy jest to konieczne. Dobry kod może być ponownie wykorzystany do osiągnięcia zysku.
źródło
Kod, który jest
bez błędów
wielokrotnego użytku
niezależny
mniej skomplikowane
dobrze udokumentowane
łatwe do zaryzykowania
nazywa się dobrym kodem.
Źródło: MSDN
źródło
Czy to wydaje się znajome?
Zobacz resztę tutaj .
źródło
poza naturalnymi kryteriami jakości kodu (minimalna liczba kopii / wklejenia, bez spaghetti itp.) dobry kod przemysłowy powinien zawsze wyglądać naiwnie, trochę zbyt gadatliwie, jak
w przeciwieństwie do
źródło
do_not_create = false
oznacza „ podaćfalse
jakodo_not_create
argument, aby został utworzony” lub „przekazaćfalse
jakodo_create
argument, aby nie został utworzony”? W języku, w którym można używać nazw argumentów, wolałbymcache.get (key:i, create: false); i += 1;
.Być może pomoc w zilustrowaniu czegoś przeciwnego pomogłaby (plus wymówka, aby uzyskać tutaj XKCD ).
Dobry kod to
Przykłady obejmują
źródło
Po prostu pójdę z „utrzymywalnym”
Cały kod musi być zachowany: nie ma potrzeby, aby to zadanie było trudniejsze niż to konieczne
Jeśli któryś czytelnik nie rozumie tego prostego wymogu lub potrzebuje go przeliterować, to ten czytelnik nie powinien pisać kodu ...
źródło
Dobry kod będzie różny dla każdej osoby, a język, z którym pracuje, ma również wpływ na coś, co może być uważane za dobry kod. Zasadniczo, kiedy podchodzę do projektu, szukam następujących rzeczy:
Poza tym, czy projekt aplikacji ma sens jako całość? Kod znajdujący się w aplikacji może być najlepszy na świecie, ale nadal może być trudny w pracy, jeśli ogólny projekt aplikacji nie ma sensu.
źródło
Pozwólcie, że nie zgadzam się co do czytelności. Nie, nie do końca: dobry kod powinien być czytelny i można to łatwo osiągnąć za pomocą wystarczającej liczby komentarzy.
Rozważam jednak dwa rodzaje WTF: te, w których zastanawiasz się, czy programista przekroczył programowanie 101, i te, w których absolutnie nie rozumiesz genialności kodu. Niektóre kody na początku mogą wyglądać bardzo dziwnie, ale w rzeczywistości są bardzo pomysłowym rozwiązaniem trudnego problemu. Drugi nie powinien się liczyć w mierniku WTF i można tego uniknąć dzięki komentarzom.
Bardzo czytelny kod może być bardzo, bardzo wolny. Mniej czytelne rozwiązanie może wielokrotnie zwiększyć prędkość. R jest doskonałym przykładem języka, w którym często tak jest. Lubi się unikać pętli for jak najwięcej. Ogólnie uważam, że najszybszy kod jest lepszy, nawet jeśli jest mniej czytelny. Oznacza to, że jeśli poprawa jest znaczna poza kursem i wstawiono wystarczającą liczbę komentarzy, aby wyjaśnić, co robi kod.
Co więcej, zarządzanie pamięcią może mieć kluczowe znaczenie w wielu zastosowaniach naukowych. Kod, który jest bardzo czytelny, jest raczej niechlujny w użyciu pamięci: powstaje tylko więcej obiektów. W niektórych przypadkach inteligentne wykorzystanie pamięci powoduje, że kod jest mniej czytelny. Ale jeśli na przykład żonglujesz gigabajtami sekwencji DNA, kluczowym czynnikiem jest pamięć. Ponownie uważam, że kod wymagający mniejszej ilości pamięci jest lepszy, niezależnie od czytelności.
Tak, więc czytelność jest ważna dla dobrego kodu. Znam adagium Uwe Liggisa: myślenie boli, a komputery są tanie. Ale w mojej dziedzinie (genomika statystyczna) obliczeniowe czasy tygodnia i zużycie pamięci powyżej 40 Gb nie są uważane za nieprawidłowe. Tak więc poprawa dwukrotnie większej prędkości i połowy pamięci jest warta dużo więcej niż ta dodatkowa odrobina czytelności.
źródło
Jeśli chodzi o mnie ... Wiem, że piszę dobry kod, gdy pojawia się współpracownik, który pracuje nad innym projektem i jest w stanie wskoczyć i zrozumieć, co robię, bez przechodzenia przez każdy blok kodu i pokazując, co robi.
Zamiast tego powiedział: „Chwileczkę, co ?!” Mówi: „Och, ok, widzę, co tam zrobiłeś”.
Dobry kod również nie zawiera wielu podstępnych obejść ani „hacków”. Linie, kiedy pisząc to, mówisz także do siebie: „Wiem, że to nie jest dobry sposób, aby to zrobić, ale na razie będę musiał to zrobić w ten sposób. Przypomnę sam, aby to poprawić później ... ”
źródło
Istnieje wiele funkcji „dobrego” kodu, ale najważniejsze, IMHO, to czytelność i łatwość konserwacji.
Twój kod będzie zawierał błędy, prawdopodobnie zostanie rozszerzony i ponownie użyty, i w pewnym momencie powinien zostać ponownie uwzględniony - nawet jeśli ponownie go odwiedzasz, są szanse, że nie będziesz miał pojęcia, co do cholery Zrobiliście to przede wszystkim, aby zrobić sobie przysługę i nie stawiać żadnych przeszkód.
Jasne, użyj tego złożonego, ale jeszcze wydajniejszego algorytmu, ale upewnij się, że poświęcasz mu trochę czasu na dokumentowanie go, ale w przeciwnym razie spraw, aby kod był przejrzysty i spójny.
źródło