Kommentarer
- mulig duplikat af Skrivning / diskussioner om kodens æstetik?
- Det ' er bare en talefigur. Skønhed ligger i beskuerens øjne, og derudover handler det ' om klarheden i de instruktioner, du ' har lagt ned i en tekstfil for at løse et problem, og hvor let du eller nogen anden kan ændre og vedligeholde det i fremtiden. Ud over det, hvor meget mere skønhed din kode udstråler, er helt op til dig – fordybninger, modulær struktur, kompleksitet, effektivitet samtidig med let læsbarhed, navngivningskonventioner osv.
- Du kan være interesseret i at læse Smuk kode: Førende programmerere forklarer, hvordan de tænker så!
- mulig duplikat af Hvordan kan du forklare " smuk kode " til en ikke-programmør?
Svar
“Skønhed købes efter øjenbedømmelse”.
Når det er sagt, tror jeg, at de fleste programmører er enige om, at smuk kode viser en balance mellem klarhed og gennemsigtighed, elegance, effektivitet og æstetik.
-
Klarhed og gennemsigtighed : Klarhed er, hvor let en læser kan udlede, hvad koden gør. Gennemsigtig kode gør, hvad den ser ud til at gøre. Hvis kode ser ud til at gøre en ting, men faktisk gør noget andet (eller noget mere), er den ikke gennemsigtig – den er vildledende.
-
Elegance : der er mange måder at implementere de fleste algoritmer på, men nogle måder er klodset, mens andre måder er pæne og yndefulde. Kortfattethed tilføjer ofte elegance, men overdreven kortfattethed kan reducere klarheden.
-
Effektivitet : undgå unødvendig brug af ressourcer (såsom CPU-tid, hukommelse og I / O).
-
Æstetik : at være let at se i øjnene. Dette er ret subjektivt. Det meste kommer til stil. En vigtig overvejelse er at have en konsistent stil. Kode, der ændrer for eksempel indrykning af stil halvvejs igennem, er grim.
Kommentarer
- en smuk forklaring, +1
- Jeg tager " Effektivitet " ud. Selvom det i streng forstand er positivt, kan det i bedste fald være vildledende at medtage det på listen. Det er normalt et biprodukt af de andre, og det bør være et sekundært anliggende på kodningstidspunktet. Hovedårsagen er, at den for det meste kun manifesterer sig, efter at compileren har udført sin mørke magi.
- @Jubbat Faktisk – nogle gange fører den mest effektive løsning faktisk til meget grim kode. (F.eks. Den klassiske Fast Inverse Square Root-funktion)
- @DarrelHoffman Højre, skønt dette kompromis også gælder ved flere variabler, der definerer god kode, ikke kun effektivitet og resten (der er en god lang forklaring på dette i " Kode fuldført " – desværre husker jeg ikke ' t i hvilket afsnit af bog, nær begyndelsen sandsynligvis-)
- @Jubbat: Jeg er enig i, at effektivitet normalt er et sekundært anliggende, men jeg tror stadig, at det indgår i skønhedsligningen.
Svar
Lad ikke folk narre dig til at tro, at smuk kode er følgende:
- smarte algoritmer
- luskede sprogfunktioner
- løsning af et problem med mindst mulig tastetryk
Fordi det ikke er tilfældet. En sådan kode er sød , og den er bestemt et værd at kigge på, men den er ikke den slags kode, du vil slå dig ned med.
Og du kender den smarte rekursive meta-skabelonede statiske polymorfisme, der arver variatiske lambdas – eller hvad det var, du læste om online? Du er måske ivrig efter at springe på innovative og smarte tricks uden en klar grund til at bruge dem. Men kode, der skubber grænserne for et sprog, er heller ikke smuk.
De er sexede .
Masser af sjov, men spørg dig selv dette: Vil jeg virkelig have at bruge tid på at udforske dette sprogs anatomi, eller ønsker jeg at arbejde sammen med et sprog og bygge noget smukt? Når alt kommer til alt er et programmeringssprog kun værktøjet til at oprette.
Så hvad er smuk kode så?
Smuk kode = vedligeholdelig kode. DET ER DET!
DET ER FORMULEN !
Hvis du kan skrive noget, kom tilbage til det et par måneder senere og fortsæt med at gøre fremskridt med det, så er det smukt. Hvis du et år senere indser, at du også vil tilføje funktionalitet som tilpasse en eksisterende funktion, og det lykkes dig at gøre det med relativ lethed, så DET “S smukt. Hvis andre mennesker kan træde ind i din kodebase og hurtigt finde ud af, hvad der foregår, fordi tingene er organiseret, vil de have mere hår og også være smukke.
Så det virkelige spørgsmål, du vil stille, er : “Hvordan skriver jeg mere kode, der kan vedligeholdes?”. Jeg er bange for, at det er et større spørgsmål, og det er en ganske kreativ disciplin. Bliv ved med at skrive kode, men denne gang skal du ikke spørge dig selv, om det kan være smukkere. Spørg dig selv, om du kan gøre det mere vedligeholdeligt.
Kommentarer
- for at bekæmpe de spørgsmål, du rejser, er der også råd til c2.com/cgi/wiki?KillYourDarlings
Svar
Min opfattelse af dette er, at “Beautiful Code” ikke er et objektivt eller særligt nyttigt udtryk. Og vi skal ikke forsøge at definere det.
Typiske ordboksdefinitioner af det engelske ord “skønhed” går sådan her:
- “1. kombinationen af alle kvaliteterne hos en person eller ting, der glæder sanserne og behager sindet “
- ” 1. kvaliteten til stede i en person eller ting, der giver intens æstetisk glæde eller dyb tilfredshed til sindet eller sanserne. ”
- “1. Kvaliteten, der giver sindet eller sanserne fornøjelse og er forbundet med egenskaber som harmoni mellem form eller farve, kunstnerisk ekspertise, sandhed og originalitet.”
(Kilde http://dictionary.com )
Den røde tråd er, at “skønhed” handler om, hvad der er æstetisk tiltalende. Det er nødvendigvis subjektivt … som illustreret af ordsproget “Skønhed er i betragterens øje”.
Vi kan anvende ordet “skønhed” på kode , og den åbenlyse betydning er, at koden er “æstetisk tiltalende”.
Men at sige, at “smuk kode” har et bestemt sæt attributter (som foreslået af andre svar) er en modsigelse af åbenlyst betydning af æstetisk tiltalende. Æstetik handler om, hvordan folk … individuelle mennesker … opfatter ting.
Eller for at sætte det på en anden måde, er der noget frastødende ved, at nogen fortæller mig, hvad jeg skal synes er smukt, det være sig i mennesker, kunstværker eller … kode.
For så vidt som jeg er bekymret for, er smuk kode kode, som jeg synes er smuk, og det er den. Det er subjektivt og individuelt, og lad os bare lade det være.
Svar
Her er mit råd.
Se gennem svarene på Hvordan kan du forklare " smuk kode " til en ikke-programmør? og se hvilke egenskaber de siger at fokusere på. Så hent en bog som Kode fuldført og læs den igennem for at lære råd om, hvordan man skriver bedre kode.
På et eller andet tidspunkt rammer den dig, når du ser på din ældre kode “Dette er grimt.” Det vil være en direkte æstetisk reaktion. Og når du ser på det, vil du indse, at du ser din kode som en programmør og kan se grimheden, fordi du ved, hvordan en bedre udseende kode skal se ud.
Svar
Bare fordi du ofte læser om smuk kode, betyder det ikke, at folk, der skriver om den, har den samme definition. Desværre, at dømme efter dit spørgsmål, ser det ikke ud til, at de engang gider at definer det i første omgang.
For mig er smuk kode:
- Ekspressiv
- Kortfattet
Kortfattet kode, der ikke er udtryksfuld, kan være kryptisk, og ekspressiv kode, der ikke er kortfattet, har tendens til at være oppustet og kedelig at læse, så du har brug for begge.
Jeg vil ikke inkludere vedligeholdelsesevne som en del af det, der gør kode smukt, fordi skønhed er noget, du ser / læser, ikke noget du handler efter. Men så er det igen min personlige opfattelse.
Svar
Udtrykket smuk kode er et meget vagt og abstrakt udtryk. Det er let at finde ud af, hvad det repræsenterer, og hvad det betyder, men det bør aldrig ses som mere end et sekundært mål.
Det minder mig meget om metoden for kodedækning. Når du får tallet højt nok, kan du slappe af og gå på noget andet. At have en codebase med ca. 80% dækning er fantastisk, ikke skudsikker, men nok til at slappe af og gøre andre ting. At have 40% dækning er ret skræmmende og bør tilskynde dig til at få dette nummer op.
Pointen er bare, at kodedækning kun er virkelig meningsfuld, hvis antallet er lavt. Så lad det ikke være lavt. Når dækningen stiger til et bestemt punkt, skal du gå videre til noget andet.
Tilsvarende smuk kode er fantastisk. Hvis du har smuk kode, fantastisk, gå videre til noget andet. Lad dig ikke stresse for meget over det. Du vil aldrig nogensinde nå det 100% -mærke, og hvis du gør det, finder du, at du har fokuseret for meget på, hvordan det læser ud, eller hvordan det ser ud, og ikke nok til hvad det gør, eller hvordan det gør det. Så kom til et rimeligt mærke, og stop derefter.
Men hvis din kode er flygtig, hvis det er et kæmpe indviklet rod af spaghetti-kode, hvis det fysisk smerter dig at åbne filen, hvis du ikke har nogen kommentarer eller dokumentation osv. osv. osv. Løs det derefter. Og gør det så hurtigt som muligt.
Du finder over tid, at din kodebase ender med at være renere, generelt lysere og generelt smukkere og vigtigst af alt mere anvendelig, når du fokuserer på at gøre den mindre flygtig. Skrivning af smuk kode er ikke en et-trins proces.
Der er ingen magisk filosofi. Dens 1000 mindre trin alle udført sammen, som alle tjener et konkret formål, der ikke har noget at gøre med, hvor smuk koden ser ud. Men når du tjene dem alle sammen, de danner smuk kode som summen af dens dele. Som voltron. Eller kaptajnplaneten.
Svar
Jeg er virkelig enig i svarene her, men når jeg tager en mindre teknisk tilgang, vil jeg sige, at smuk kode er et udtryk for dens forfatteres “tankeklarhed om det aktuelle problem, som manifesterer sig gennem et velformuleret og præcist, men alligevel simpelt sprog.
For mig er det at se gennem smuk kode meget som at se på et kunstværk, se stadig nye detaljer, der viser producentens hensigt, men også hvordan de forskellige dele blev realiseret, hver med et svar på så mange spørgsmål, og så endelig, hvordan dens eksistens føles som en naturlov, som alt stemmer overens med, således at det kun kan beskrives med ærefrygt: magnificient , inspirerende, smuk.
Så set fra dette perspektiv kan du i din karriere som programmør muligvis opdage smuk kode, som andre måske hverken forstår, fordi de mangler viden eller måske ikke finder bemærkelsesværdige mere, da de er blevet forkælet af for meget skønhed;)
Smuk kode har alle de pragmatiske kvaliteter som nævnt ellers, jeg er helt enig.
Svar
Jeg har tre kriterier:
- Enkelt: Det skal i det mindste være menneskeligt læsbart. For eksempel kan du skrive en kode, der fungerer ved O (1) til en løsning med masser af linjer, men jeg foretrækker kode, der fungerer med 0 (n) løser med få linjer. Dette kan ændre sig i ekstreme situationer, men for begyndelsen er enkelhed vigtig.
- Genanvendelig: Koden skal være genanvendelig, men ikke overskrevet. Hvis du har brug for en operation, skal du definere den, som du kan bruge den år senere.
- Indrykning: Måske er dette ikke et problem for dig, men for begynderniveau er dette den første ting, der skal løses.