Kommentit
- Hyvä koodi on, jos katsot sitä kahden vuoden kuluttua ja ensimmäinen ajatuksesi ei ole ' t " Jätkä, wtf ".
- kaksoiskappale Mistä tiedät, jos olet ' kirjoittanut luettavissa ja helposti ylläpidettävä koodi?
vastaus
Hyvä kooderi on kuin hyvä poolisoitin.
Kun näet ammattimaisen biljardipelaajan, et ehkä aluksi vaikuta sinuun: ”Toki, he saivat kaikki pallot sisään, mutta heillä oli vain helppoja laukauksia!” Tämä johtuu siitä, että kun biljardipelaaja laukaisee, hän ei ajattele mitä pallo menee mihin taskuun, hän ajattelee myös mihin lyöntipallo päätyy . Seuraavan laukauksen asettaminen vaatii valtavaa taitoa ja harjoittelua, mutta se tarkoittaa myös, että se näyttää helpolta.
Nyt tämä metafora saatetaan koodiin, hyvä kooderi kirjoittaa koodin, joka näyttää siltä, että se oli helppo ja suoraviivainen tehdä . Monet Brian Kernighanin kirjoissa esittämät esimerkit noudattavat tätä mallia. Osa ”temppu” on tulossa ongelman ja sen ratkaisun asianmukaiseen käsitteellistämiseen . Kun emme ymmärrä ongelmaa tarpeeksi hyvin, monimutkaistamme todennäköisemmin liiallisia ratkaisujamme, emmekä näe yhdistäviä ideoita.
Ongelman asianmukaisen käsitteellistämisen ansiosta saat kaiken muuten: luettavuus, ylläpidettävyys, tehokkuus ja oikeellisuus. Koska ratkaisu vaikuttaa niin suoraviivaiselta, kommentteja on todennäköisesti vähemmän, koska ylimääräinen selitys ei ole tarpeen. Hyvä kooderi pystyy myös näkemään tuotteen pitkän aikavälin vision ja muodostamaan niiden käsitteellistämisen vastaavasti.
Kommentit
- " hyvä kooderi kirjoittaa koodin, joka näyttää olevan helppoa ja suoraviivaista tehdä. " < < TÄYSIN! Mielestäni tämä johtuu siitä, että ihmiset ajattelevat yleensä, että hyvä kooderi on joku, joka osaa kirjoittaa hyvin " älykkäitä " hakkereita. Jos koodi on puhdas eikä liiallisesti " fiksu ", sen on oltava helppoa, eikö?
- Minun 2 senttiä: kun olet ' saanut kielen, jossa on automaattiset automaattiset korjaukset – Java ja C # ovat kaksi esimerkkiä, jotka tunnen parhaiten – se ' s helppo siirtyä hyvään koodiin iteratiivisesti. Muuten joudut käsitteellistämään ensinnäkin hyvin, mutta siellä on eräänlainen kana-muna-ongelma.
- Jotkut algoritmit ovat luonnostaan monimutkaisia. Hyvällä kooderilla ei pitäisi olla ongelmaa kirjoittaa niitä, kun niitä todella tarvitaan – ja pitää ne mahdollisimman luettavissa.
- @hasenj: kyllä, tämä johtuu tästä lemmasta: tyhmät ihmiset kirjoittavat koodin, jonka kääntäjä ymmärtää. Älykkäät ihmiset kirjoittavat koodia tyhmät ihmiset ymmärtävät.
Vastaa
s minuutissa
( alkuperäinen )
MUOKKAA: Perusajatuksena on, että ”Koodilaatua” ei voida sisällyttää sääntöihin samalla tavalla kuin et voi lisätä sääntöihin ”Hyvä taide” tai ”Hyvä runous”, jotta voit antaa tietokoneen päättää sanoa ”Kyllä,” hyvä taide ”tai” ei, huono runous ”. Tällä hetkellä ainoa tapa on nähdä, kuinka helposti koodi on ymmärrettävissä muille ihmisille.
Kommentit
- Tämä on juuttunut taululle työssä: -)
- @Cape Cod Gunny oli myös Bob-setä ' -kirjassa
- Sen lisäksi, että se oli loistava sarjakuvapiiri, mielestäni se todella pääsee asiaan – hyvä koodi on koodi, jota muut ihmiset pitävät miellyttävänä lukea ja ylläpitää.
- Joten totta, hyvä koodi on mikä tahansa koodi, joka ei ole huono. Esimerkiksi huonoa koodia on vaikea määritellä, huonoa koodia on helpompi määritellä.
- Yleensä löydän ne " WTF? " ' hyvässä koodikokouksessa seuraa pian " Oooooh Okei … Näen mitä teit thar."
vastaus
Hyviä kriteerejä ei oikeastaan ole kuin kuinka nopeasti ymmärrät koodin. Saat koodisi näyttämään hyvältä etsimällä täydellisen kompromissin ytimekkyyden ja luettavuuden välillä.
”WTF: n s minuutissa” (yllä) on totta, mutta se on vain seurausta yleisemmästä säännöstä. Mitä enemmän WTF-tiedostoja, sitä hitaampi ymmärtäminen.
Kommentit
- @rmx: määritä " työn tekeminen hyvin "
- No, että menetelmä
RemoveCustomer
poistaa itse asiassa kutomeerin kiertämättä. Voit viettää tunteja, jotta se näyttää kauniilta, mutta se ei tarkoita, että se todella toimii. ' Kuinka nopeasti ymmärrät koodin ', ei ole ainoa kriteeri ' hyvälle koodille ' on se, mitä sanon ' m. - @rmx: mutta virheettömyys on epäselvää, isn ' onko se? Jos koodisi ei tee ' t työtä oikein, se ' ei vielä koodaa.
- @ rmx: itse asiassa ei. Jos koodisi on helppo ymmärtää, niin lopuksi se ' on helppo ymmärtää, jos se tekee sen huonosti '. OTOH, jos sitä on ' vaikea ymmärtää, sitä on ' vaikea ymmärtää, jos se tehdään ' työ ollenkaan.
- @rmx: PS Yksinkertaisesti sanottuna dekrementtisi () on klassinen WTF ja siten hidastaa koodin osien ymmärtämistä, joissa tätä toimintoa käytetään.
Vastaus
Tiedät, että kirjoitat hyvää koodia, kun …
- Asiakas on onnellinen
- Työtoverisi lainaa koodisi lähtökohtana
- Upouudelle kaverille käskettiin vain tekemään muutoksia järjestelmään, jonka rakennit 6 kuukautta sitten, eikä hän koskaan kertonut sinulle kysymyksiä
- Pomo pyytää sinua kehittämään uusia widgettejä käytettävä tiimi
- Katsot tänään kirjoittamaasi koodia ja sanot itsellesi: ”Toivon, että olisin kirjoittanut tällaisen koodin kaksi vuotta sitten”
Kuinka voit mittaa onko koodi hyvä …
- Mikä on vasteaika?
- Kuinka monta paluumatkaa palvelimelle se tekee?
- Käytätkö henkilökohtaisesti sovellusta vai luuletko sen olevan kömpelö?
- Rakennatko sen samalla tavalla ensi kerralla?
Hyvä koodi toimii, kun se on pitäisi. Hyvä koodi voidaan helposti muokata tarvittaessa. Hyvää koodia voidaan käyttää voiton tuottamiseen uudelleen.
Kommentit
- " Asiakas on onnellinen " on kohtisuora tähän.
- @TRA – Jos asiakas on tyytyväinen, se tarkoittaa, että ymmärrät vaatimukset ja annoit ratkaisun, jonka he odottivat.
- varma, mutta huono koodi voi tehdä saman.
Vastaa
Koodi, joka on
-
virheetön
-
uudelleenkäytettävä
-
riippumaton
-
vähemmän monimutkainen
-
hyvin dokumentoitu
-
helppo haistaa
kutsutaan hyväksi koodiksi.
Hyvä ohjelma toimii moitteettomasti eikä siinä ole virheitä. Mutta mitkä sisäiset ominaisuudet tuottavat tällaista täydellisyyttä ?. Se ei ole mysteeri, tarvitsemme vain ajoittaisia muistutuksia. Koodaatpa sitten C / C ++, C #, Java, Basic, Perl, COBOL tai ASM, kaikilla hyvillä ohjelmoinnilla on samat kunnioitetut ominaisuudet: yksinkertaisuus, luettavuus, modulaarisuus , kerrostaminen, suunnittelu, tehokkuus, tyylikkyys ja selkeys, tehokkuus ja selkeys
Lähde: MSDN
Kommentit
- Yksinkertaisuus, luettavuus, tyylikkyys ja selkeys ovat kaikki samat. Modulaarisuus ja kerrostaminen ovat vain tapoja tehdä koodistasi selkeä Ainoa asia, joka jäljellä on luettelossa, on tehokkuus, joka on eräänlainen implisiittinen, ja sen lisäksi on usein kysymys tehokkuuden ja selkeyden kompromisseista.
- Tarkista tämä: goo.gl/hdQt8
- Koodi voi olla virheetön?
- Ei, se voi ' t. (käytännössä)
- Tehokas tulisi lisätä luetteloosi. Nopeus ei ole ' ei välttämätön on yleensä hyvän koodin ensisijainen indikaattori, mutta hyvä koodi ei saisi ' olla tarpeettoman hidas tai tuhlaavainen.
Vastaa
Näyttääkö tämä tutulta?
Philips antoi minulle mahdollisuuden katsella uuden tuotteen suunnittelua. Sen kehittyessä minusta tuli yhä levottomampi ja aloin jakaa huoleni esimiehelleni. Kerroin hänelle toistuvasti, että mallit eivät olleet ”puhtaita” ja että niiden pitäisi olla ”kauniita” tavalla, jolla Dijkstran mallit olivat kauniita. Hän ei pitänyt tätä hyödyllisenä kommenttina.Hän muistutti minua siitä, että olimme insinöörejä, emme taiteilijoita. Hänen mielessään ilmaisin yksinkertaisesti makuni ja hän halusi tietää, mitä kriteeriä käytin arvioidessani. En pystynyt kertomaan hänelle! Koska en voinut selittää, mitä periaatteita rikottiin, kommenttini jätettiin yksinkertaisesti huomiotta ja työ jatkui. Aistien, että “makullani” täytyy olla tapa selittää ja antaa motivaatiota, aloin yrittää löytää periaatteen, joka erottaisi hyvät mallit huonoista. Insinöörit ovat hyvin käytännöllisiä; he voivat ihailla kauneutta, mutta he etsivät hyödyllisyyttä. Yritin löytää selityksen miksi ”kauneudesta” oli hyötyä.
Katso loput täältä .
kommentit
- Koska @mlvljr ' -viestin linkki on rikki , tässä on linkki Google-kirjojen sivulle: books.google.co.in/…
- @balajeerc Kiitos (Korjasin myös linkin, joten se osoittaa saman PDF-tiedoston Springer-isännöityyn versioon) 🙂
Vastaa
Luonnollisen koodin laatukriteerejä lukuun ottamatta (vähimmäiskopio / liitä, ei spagettia jne.) hyvän teollisuuskoodin tulisi aina näyttää hieman naiivilta, hieman liian verbokselta, kuten
int key = i; const bool do_not_create = false; Record r = cache.get(key, do_not_create); ++i;
toisin kuin
Record r = cache.get(i++, false);
kommentit
- Tarkoittaa kuitenkin
do_not_create = false
”passfalse
argumenttinado_not_create
niin, että se luodaan ”tai„ pas sfalse
argumenttinado_create
, jotta sitä ei luoda ”? Kielellä, jossa voit käyttää argumenttien nimiä, pidän parempanacache.get (key:i, create: false); i += 1;
.
Vastaa
Ehkä vastaus havainnollistamalla päinvastaista auttaisi (plus se on tekosyy saada XKCD tänne).
Hyvä koodi on
- helppo ymmärtää,
- helppo ylläpitää ,
- ei yritä ratkaista kaikkia vain käsillä olevia ongelmia
- elää pitkään ilman että kehittäjät etsivät vaihtoehtoja
Esimerkkejä ovat
- Apache Commons
- kevätkehys
- horrostila
vastaus
Menen vain ”ylläpidettävän” kanssa
Kaikki koodit on ylläpidettävä: tehtävää ei tarvitse vaikeuttaa kuin on välttämätöntä
Jos joku lukija ei ymmärrä tätä yksinkertaista vaatimusta tai tarvitsee sitä täsmennetyksi, kyseisen lukijan ei pitäisi kirjoittaa koodia …
Vastaus
Hyvä koodi tulee olemaan erilainen jokaiselle henkilölle, ja kielellä, jota he työskentelevät, on myös vaikutus siihen, mitä voidaan pitää olla hyvä koodi. Yleensä lähestyessäni projektia etsin seuraavia asioita:
- Miten projekti organisoidaan? Järjestetäänkö lähdetiedostot puhtaalla tavalla ja voinko löytää koodin liian suurella vaivalla?
- Kuinka koodi on järjestetty? Onko dokumentoitu selvästi, mitä tiedoston koodi tekee, esimerkiksi käyttämällä tiedostotunnistetta tai käyttämällä jokaista omassa tiedostossaan olevaa luokkaa? Onko tiedostossa toimintoja, joita ei enää käytetä sovelluksessa?
- Kuinka toiminnot on järjestetty? Onko muuttujien ilmoittamiselle selkeä malli vai onko se melko satunnainen malli? Onko koodilla looginen kulku siihen ja välttääkö tarpeettomia ohjausrakenteita? Onko kaikki selvästi dokumentoitu, kun koodi on itse dokumentoitava tarpeen mukaan, ja kommentit ilmaisevat selvästi miksi ja / tai miten koodi toimii?
Kaiken tämän lisäksi tekee sovelluksella on järkevää kokonaisuutena? Sovelluksessa oleva koodi voi olla maailman paras, mutta voi silti olla tuskallista työskennellä, jos sovelluksen kokonaisrakenteella ei ole mitään järkeä.
Vastaa
Haluan olla eri mieltä luettavuudesta. Ei, ei täysin: Hyvän koodin tulisi olla luettavissa, ja se voidaan helposti saavuttaa riittävillä kommenteilla.
Ensinnäkin, mutta on todella kekseliäs ratkaisu kovaan ongelmaan. Toista ei pidä laskea WTF-mittariin, ja se voidaan välttää kommenteilla.
Erittäin luettava koodi voi olla hyvin, hyvin hidas . Vähemmän luettavissa oleva ratkaisu voi parantaa nopeutta moninkertaisesti. R on hieno esimerkki kielestä, jossa se on usein totta. Yksi haluaa välttää silmukoita siellä mahdollisimman paljon.Yleisesti ottaen pidän nopeinta koodia parempana, vaikka se on vähemmän luettavissa. Toisin sanoen, jos parannus on merkittävää kurssin ulkopuolella, ja siihen lisätään tarpeeksi kommentteja selittämään, mitä koodi tekee.
Vielä enemmän, muistinhallinta voi olla ratkaisevan tärkeää monissa tieteellisissä sovelluksissa. Koodi, joka on hyvin luettavissa, on yleensä melko huolimaton muistin käytössä: objekteja on vain enemmän. Usein älykäs muistin käyttö tekee koodista taas vähemmän luettavan. Mutta jos taistelet esimerkiksi gigatavujen DNA-sekvenssien ympärillä, muisti on ratkaiseva tekijä. Jälleen katson, että vähemmän muistia kuluttava koodi on parempi koodi luettavuudesta riippumatta.
Joten kyllä, luettavuus on tärkeää hyvän koodin kannalta. Tiedän Uwe Liggisin annoksen: Ajattelu sattuu ja tietokoneet ovat halpoja. Mutta omalla alallani (tilastollinen genomiikka) viikon laskenta-aikoja ja yli 40 Gb: n muistin käyttöä ei pidetä epänormaalina. Joten kaksinkertaisen nopeuden ja puolen muistin parantaminen on paljon enemmän kuin tämä ylimääräinen luettavuus.
Kommentit
- Ei sääntöä / sääntöjä poikkeuksetta
- Haluan olla eri mieltä erimielisyydestäsi: sanot, että kentälläsi nopeus on erittäin tärkeää ja sanot sen olevan tärkeämpää kuin luettavuus. Olen eri mieltä, sinun pitäisi pyrkiä käyttämään oikeaa tasapainoa. Jos nopeutta ei tarvita, esimerkiksi korkean tason käyttöliittymälle, saatat mieluummin pitää jotain helppohoitoista, jos nopeutta tarvitaan, olen samaa mieltä kanssasi. Tiukkojen sääntöjen sijaan on parempi käyttää tervettä järkeä ja välttää joka tapauksessa ennenaikaista optimointia.
- @BlueTrin Miksi ei molemmat aivot koota nuo hi-perf-lähdekoodit ja dokumentoi myös helvetti mitä ' siellä (kommenteissa)?
Vastaa
Sikäli kuin minusta menee … Tiedän, että kirjoitan hyvää koodia, kun työtoveri, joka työskentelee toisessa projektissa, tulee mukaan ja pystyy hyppäämään sisään ja ymmärtämään, mitä teen, ilman että menen läpi jokaisen lohkon koodin ja näyttää, mitä se tekee.
Sen sijaan, että hän sanoisi: ”Odota hetki, mitä ?!” Hän sanoo: ”Voi, ok, ymmärrän, mitä teit siellä.” Rivit, kun kirjoitat sitä samalla sanot itsellesi: ”Tiedän, että tämä ei ole hyvä tapa tehdä se, mutta minun täytyy vain tehdä se tällä tavalla tällä hetkellä. Muistutan itseäni parantamaan sitä myöhemmin … ”
Vastaa
” Hyvää ”koodia on paljon , mutta tärkeimmät, IMHO, ovat luettavuus ja ylläpidettävyys.
Koodisi sisältää vikoja, todennäköisesti laajennetaan ja käytetään uudelleen ja pitäisi jossain vaiheessa uudelleen harkita – vaikka vierailisitkin siellä uudelleen, on todennäköistä, että sinulla ei ole aavistustakaan mitä helvettiä aluksi teit, tehdä itsellesi palvelus ja älä aseta mitään esteitä tielle.
Varmista, että käytät sitä monimutkaista mutta silti uber-tehokasta algoritmia, mutta varmista, että vietät vähän ylimääräistä aikaa sen dokumentointiin, mutta tee muuten koodi on selkeä ja johdonmukainen.