Kysymys:
Tietäen, milloin koodi on tarpeeksi hyvä, tutkimusta varten
Clumsy cat
2018-03-23 15:35:50 UTC
view on stackexchange narkive permalink

Kysymykseni on samanlainen kuin tämä.

Tutkimukseni vaatii koodia. Osaan kirjoittaa koodia ja tiedän joitain asioita hyvän koodin kirjoittamisesta. Sekä luettavuuden (esim. Standardoidut dokumenttimerkkijonot, kuvaavat muuttujien nimet, kommentit, jotka kuvaavat tarkoitusta) että turvallisuuden (väitteet koodissa, yksikötestit, järkevät virheilmoitukset) suhteen. Näiden asioiden lisääminen vie enemmän aikaa kuin jättäminen pois.

Tällä hetkellä teen tyypillisesti vähimmäismäärän ensimmäisellä yritykselläni. Joten laitan yhden rivin doc merkkijonon; käytä kuvaavia, mutta toisinaan epävakaita muuttujien nimiä; ja muutama kommentti. Jos koodi ei toimi ensimmäistä kertaa, palaan takaisin ja lisätään yksikkötestejä ja yleensä parannan sen laatua, kunnes se on toimiva.

Jos myöhemmin koodin osaa on muutettava huomattavasti, (ehkä minä ymmärrän, että tarvitsen sitä samanaikaisesti), niin monet "puolasta" tarvitsevat uudelleen. Tämä ei tee houkuttelevasta kiillottaa aikaisemmin. Toisinaan jahdan häntäni virheen takia, joka osoittautuu vanhemmasta koodiosasta, jonka olen voinut saada kiinni, jos olen ollut perusteellisempi ensimmäistä kertaa.

Kirjoitettava koodi on melkein aina vain itse.

On selvää, että kirjan tekemisen ja tulosten nopean tuottamisen välillä on kompromissi. Mitä tarkastelet päättääksesi, jos olisit löytänyt hyvän tasapainon näiden asioiden välillä?

"Jos myöhemmässä vaiheessa osa koodista on muutettava merkittävästi, niin monet" kiillotuksesta "täytyy tehdä uudelleen." Tämä pätee joihinkin näkökohtiin enemmän kuin muihin.Esimerkiksi kommentit: kyllä, ne vanhentuvat nopeasti.Mitä tulee muuttujien nimiin, nykyisten IDE: n palauttamisen tuella ei ole mitään tekosyytä ei-kuvaavien nimien käyttämiselle.Yksikkötestit ovat ylivoimaisesti käytännöllisin tapa varmistaa, ettet rikkoa jotain koodia muuttaessasi, joten niiden kirjoittamiseen on vahva kannustin.
@lighthousekeeper suostui, kaikki ei mene ulos ikkunasta.Usein suunnitteluni on kuitenkin ollut vähäistä, joten minun on muutettava ohjelman osia ja niihin liittyviä yksikötestejä.En parane en kaivamaan näitä reikiä, mutta se ei tapahdu yön yli.Luulen, että myös muut ihmiset tekevät tämän.Tällaisessa tilanteessa menetetään melko vähän työtä.
Kirjoita yksikötestit!Ainakin hyvin yleisesti.Pidä aina vähintään yksi esimerkki, jossa olet 100% varma, minkä tuloksen pitäisi olla, ja voit juosta ajoittain nähdäksesi, oletko löytänyt.Auttaa järkeä.Mielipiteeni koodista nyt: Tee kaikki siistiksi ja laita se githubiin.Olet ainoa syy, miksi olet ainoa käyttäjä. Sinulla voi olla valtava määrä käyttäjiä, jos teet koodisi auki.Lisäksi sen parempi tiede, avoimempi.On jopa tapoja tehdä koodistasi mainittava akateemisena tuotoksena.
Muista vain, että kirjoitat hyvää koodia ikään kuin henkilö, jonka on ylläpidettävä tätä koodia, olisi psykopaatti, joka tietää missä asut.Luotatko itseesi kuuden kuukauden kuluttua, ettet ole molempia asioita?Jos et, kirjoita hyvä koodi alusta!
@AnderBiguri kyllä sinun oikeutesi, yksikötestit ansaitsevat enemmän aikaa kuin annan heille."Olet ainoa syy miksi olet ainoa käyttäjä. Sinulla voi olla valtava määrä käyttäjiä, jos teet koodisi auki". Monet tutkijat kirjoittavat omaa koodiaan, koska heidän kentänsä on pieni ja he ovat ainoa henkilö, joka haluaaohjelma tehdä se asia.
@TheoreticalPerson Myös menetetyt tutkijat toistavat saman koodin uudestaan ja uudestaan, koska kukaan ei jaa.Usein tutkijana haluan vain testata, mitä paperi A sanoo, ja 99,9% tapauksista, ainoa tapa tehdä se on koodata se itse, mikä lopulta vaatii liikaa vaivaa, ja lopulta ei tee sitä.Olet todennäköisesti (tai sinun on käytettävä) git, sinun on vain tehtävä repo julkiseksi.Näytät siltä, että olet Isossa-Britanniassa, RSE-yhteisö tukee tätä jo paljon!
* "tutkimusta varten" * tekee eron (toisin kuin "kaupallinen" tai "avoimen lähdekoodin lähetys").Ehkä haluat edes muokata sitä edelleen '' tutkimusta varten, joka on julkaistavissa ja toistettavissa '*
Temppu on kirjoittaa ensin kommentit ja dokumentaatio (selvitä ensin _tarkasti_ mitä olet tekemässä ...) ja vasta sitten kirjoittaa koodi (... sitten tee se itse).
Seitsemän vastused:
Ian
2018-03-23 15:49:12 UTC
view on stackexchange narkive permalink

Koska kirjoittamaani

-koodia käytän melkein aina vain itse

sinulla on vain itsellesi miellyttävä asia. Joten ainoa järkevä vastaus on tasapainottaa asiat minimoidaksesi turhautumisen itsellesi. Älä tee asioita, jotka näet turhauttavasti hidastavan sinua, ennen kuin olet turhautunut ongelmista, joita aiheutuu niiden tekemättä jättämisestä.

Kuitenkin strategisempi kysymys on, em> want jatkaa koodin kirjoittamista, jota vain sinä käytät ja näet. Jos haluat edetä urasi tekemällä yhteistyötä ikäisensä kanssa tai rakentamalla tutkijoiden ryhmän työskentelemään koodiesi kanssa, sinun on parempi tehdä enemmän aikaisemmin.

Sitten tiedät, että olet löysi hyvän tasapainon, kun yhteistyökumppanit, joiden kanssa haluat työskennellä, haluavat silti työskennellä kanssasi, kun he ovat viettäneet jonkin aikaa koodisi kanssa.

Tämä tuntuu erittäin hyvältä.Olisi kuitenkin hyödyllistä löytää hyvä tasapaino silmiä polttamatta.Voitteko miettiä tapaa "testata vedet" täällä?
Jos mahdollista, selvitä, miten yhteistyökumppani koodaa tai mitä yleisiä koodeja he käyttävät, ja noudata niin monta heidän lähestymistapaansa kuin mahdollista näyttää: Ajattelin sitä vähäisimmän hämmästyksen periaatteen akateemisena versiona.Jos tietoa ei ole saatavilla (esim. Uusien opiskelijoiden vastaanottaminen), tutustu sitten tutkimusalasi käytäntöihin: jos heidän on opittava, anna heidän oppia lähestymistapa, jota voidaan soveltaa laajemmin.
Ja Yhdistyneessä kuningaskunnassa (jossa OP näyttää olevan) on paljon hyviä tukiryhmiä, jotka auttavat tutkijoita koodaamaan RSE (tutkimusohjelmistotuotanto) -yhteisön asianmukaisesti (kuten luultavasti tiedät;)).
Muutan tätä vain huomauttamaan, että haluat myös miellyttää * tulevaa * itseäsi.On hyvin yleistä, mutta erittäin masentavaa, palata koodiin jonkin ajan kuluttua ja löytää se täysin käsittämättömältä.
Haluaisin huomauttaa ohjelmistokehittäjänä, että "vain itse käyttämäni" ja "ovat minulle aina ymmärrettäviä" eivät ole sama asia.Minulla on useita hankkeita, joiden koodi on vain itselleni, ja yrittäessäni ylläpitää niitä, haluan jatkuvasti haluavani, että dokumentoin enemmän (ja sen seurauksena dokumentoin lisää), koska kuuden kuukauden kuluttua en ole työskennellyt projektissa,Olen unohtanut kaikki satunnaiset pienet oudot, joita on noudatettava.Tämän vuoksi on järkevää kirjoittaa hyvä koodi, vaikka olisit ainoa, joka näkee sen koskaan.
J.R.
2018-03-23 16:17:48 UTC
view on stackexchange narkive permalink

Sanoit:

Kirjoittamaani koodia käytän melkein aina vain itse

mutta pidän tätä huomautusta hieman lyhytnäköisenä.

Tällä hetkellä koodia voi käyttää melkein yksinomaan kirjoittaja / opiskelija-tutkija, mutta lopulta kyseinen opiskelija valmistuu, ja jatkotutkimusta saattaa olla tehtävä. Voi seuraavaa jatko-opiskelijaa, joka perii sen sotkun, tai kesäharjoittelijaa, joka palkataan siivoamaan se!

On paljon hyviä syitä sijoittaa vähän aikaa paremmin suunnitellun koodin kirjoittamiseen:

  • Sinä (ja muut, jotka saatat liittyä tutkimusryhmään) pystyt edelleen rakentamaan hyvin suunnitellulle arkkitehtuurille.
  • Se, mikä nyt näyttää olevan "itsedokumentointia", voi olla vaikeampi- seurata kuin luulet kuuden kuukauden päästä
  • Paljon koodia tottuu lopulta kauemmin kuin alkuperäinen kirjoittaja arveli
  • Mitä monimutkaisempi koodisi tulee, sitä vaikeampi se on debugata myöhemmin

Toki tulosten välittömyyden ja tulevaisuuden rakentamisen välillä on kompromissi. Mutta varoitin siitä, että tunkeudutaan väärään turvallisuustunteeseen ja koodin tyhjentämiseen niin nopeasti kuin pystyt, ottaen huomioon tulevaisuuden ylläpidettävyyden ja laajennettavuuden.

Suhteessa se on pikemminkin kysymyksen havainto kuin vastaus.Tiedän, että hyvillä koodikäytännöillä on etuja.Tiedän, että joku muu saattaa lopulta hankkia koodini.On myös etuja saavuttaa tuloksia kohtuullisella nopeudella, ja haluan neuvoja tasapainon löytämiseksi.Voitteko puhua tarkemmin siitä, mistä varovaisuudesta tulee mielestäsi liiallista vai mitä ei pidä jättää väliin?
@TheoreticalPerson Toistettavuus on ** erittäin ** tärkeä hyvän tutkimuksen ominaisuus.Jos et pysty toistamaan samoja tuloksia (ja mahdollisesti muokkaamaan uutta lisätarkistusta), sanotaan 10-20 vuoden kuluttua, olet tehnyt heikkoa tutkimusta.Tämä koskee kaikkea tutkimusta, koodilla tai ilman koodia.Sinun ei pidä aliarvioida, kuinka vaikeaa on elvyttää vanha yksittäinen kirjoittaja, kertaluonteinen tarkoituskoodi myöhemmin.Ja "melkein aina vain itse käyttämäni": sen pitäisi olla täysin merkityksetöntä.Vai pidätkö tutkimusta, jonka vain sinä pystyt tuottamaan, hyväksi tutkimukseksi?
cjs
2018-03-23 21:29:19 UTC
view on stackexchange narkive permalink

Kuten muillekin asiakirjoille, kirjoita yleisölle. Eli kirjoita koodisi, jotta se auttaisi parhaalla mahdollisella tavalla (silti kohtuullisin kustannuksin) niitä, jotka lukevat sitä. Harkitse:

  1. Lukevatko muut kuin sinä koodia nyt vai tulevaisuudessa? Jos se on kertaluonteinen komentosarja, jonka hylkäät nopeasti, sinun ei tarvitse huolehtia paljon luettavuudesta. Jos kukaan muu ei todennäköisesti koskaan katso sitä, sinun on mietittävä, kuinka todennäköinen tulevasi itsesi on muistaa tuolloin tapahtunutta ja ymmärtää käyttämäsi käytännöt.

  2. Jos muut todennäköisesti lukevat koodisi, kuinka teknisesti taitavia tietylle kielelle ja kirjastoille, ja yleensä, ovatko he todennäköisesti? Voitteko käyttää tavanomaisia ​​käytäntöjä, joita ohjelmoijat käyttävät kyseisellä kielellä? Tarvitsetko kirjoittaa asioita siten, että kokeneet kehittäjät, jotka eivät osaa kyseistä kieltä, voivat nopeasti ymmärtää, mitä teet? Täytyykö sinun välttää tavallisia asioita (esim. Luettelonäkymiä), joita kokematon kehittäjä ei ehkä ymmärrä hyvin?

  3. Kuinka hyvin muut kehittäjät ymmärtävät ongelma-alueen? Pitäisikö sinun antaa yksityiskohtainen selitys siitä, mitä olet tekemässä ja miksi teet sen, vai odotatko, että kun he tarkastelevat riviä, he esimerkiksi näkevät heti, että se on eräänlainen Black Scholes -yhtälö ja ymmärrätkö miten ja miksi sitä käytetään siellä?

Muista, että tekemällä asioista kuvailevampi ja lisäämällä kommentteja ei välttämättä tehdä koodistasi luettavampaa; joillekin yleisöille, mikä saattaa jopa tehdä siitä vähemmän luettavan. Aivan kuten matemaatikot pystyvät ymmärtämään nopeammin tiheän yhtälön kuin pitkä kuvaus yhtälöstä, joka on kirjoitettu "tavallisella englanniksi", kokeneille kehittäjille, jotka tuntevat verkkotunnuksen, kestää huomattavasti kauemmin aloittelijalle kirjoitetun verbokoodin lukeminen kuin tiukan koodin kirjoittaminen asiantuntija, joka välittää tarkalleen mitä tarvitaan, eikä enempää. Äärimmäisenä esimerkkinä, lue tämä:

  def double_a_number (number_to_be_doubled): '' 'Numeron perusteella tämä palauttaa kaksinkertaisen määrän. Parametrit: number_to_be_doubled: kaksinkertaistettava luku Palautusarvo: Kaksinkertaistettu luku. '' 'palauta numero_to_be_doubled * 2  

ja kerro sitten jos luulet kenenkään olevan helpompi ymmärtää kuin:

  def double (x): palauta 2 * x  

Ole myös varovainen, ettet pudota klassiseen ansaan, joka vaikuttaa kokemattomiin (ja valitettavasti jopa moniin kokeneisiin) kehittäjiin asettamalla orjalainen omistautuminen sääntöihin ennen niiden sääntöjen luettavuutta heidän piti mainostaa. Epäyhtenäiset muuttujien nimet ja vastaavat eivät välttämättä ole ongelma (lukuun ottamatta sitä, joka kirjoittaa lint -määritystiedostosi), jos keskityt kommunikointiin muiden kehittäjien kanssa mielivaltaisten sääntöjen täyttämisen sijaan.

Ja viimeinen henkilökohtainen neuvoni, koska mainitset käskyt, muista aina, että kommentti on vain siellä, koska et voinut kirjoittaa tarpeeksi selkeää koodia. Jos mielestäsi funktio tarvitsee komentosarjan, tarkista ensin, etkö pysty parantamaan funktion nimeä, vaihtamaan sijaintiparametreja nimettyihin parametreihin tai käyttämään muita tekniikoita koodin tilan selkeyttämiseksi, mistä siinä on kyse. (Ja jos joku käskee sinua joka tapauksessa laittaa käskyt, viittaa heidät yllä olevaan esimerkkiin.)

En ole koskaan ajatellut käskyjä tällä tavoin, mutta esimerkkisi on hyvä asia.
maemmott
2018-03-23 21:34:03 UTC
view on stackexchange narkive permalink

Kuinka varovainen sinun pitäisi olla käytännöllinen valinta.

Tieteenalojen tarkoitus on auttaa sinua kirjoittamaan työkoodi (jota voit jatkaa työskentelyä ja laajentamista).

Tämä ei ole akateeminen harjoitus (Ehkä tämä on väärä foorumi kommentin tekemiseen). Hyvien käytäntöjen valitsemisesta ei ole "pisteitä" (ehkä ympäristössäsi on niitä ).

Hyvät käytännöt ovat ansaittuja opetuksia ohjelmointikäytäntöjen yhteisestä toiminnasta. Ympäristössä, jossa monet ohjelmoijat työskentelevät yhteistyössä koodin kanssa, jota ylläpidetään usein pidempään kuin koskaan odotettiin, ne auttavat rajoittamaan tarvittavaa sekaannusta ja uudelleen työskentelyä.

Kuulostaa siltä, ​​että olet hyvin mukana tavalla.

Jos olet lähellä ohjelmoijan matkan alkua, suosittelen, että tutkit "KUIVA", "YAGNI" ja "KIINTEÄ" merkitykset. Ja mainitsen erikseen yksikötestauksen.

Oman kokemukseni mukaan yksikkötestaus:

  • auttaa sinua dokumentoimaan mitä sinua tarkoitettu koodi tekemään istuessasi alas kirjoittamaan sitä, ja sen avulla voit tarkistaa, että se tekee sitä edelleen, vaikka tekisitkin muutama ilmeisesti täysin toisistaan ​​riippumaton muutaman kilometrin päässä koodissasi, kuukausia myöhemmin. Sisältää pieniä yksityiskohtia, kuten mitään ei ilmoiteta tyhjäksi tai mitään ei ilmoiteta tyhjänä merkkijonona .
  • välähtää väärinkäsitykset ensisijaisesta kielestäsi tai siihen liittyvät viitekehykset ja kirjastot, jotka olet vain katsonut dokumentaatioon ennen hyväksymistä. Nämä väärinkäsitykset aiheuttavat aikaa vievää virheenkorjausta, jos sinun on selvitettävä ne virheenkorjaamalla kuluttaja väärin käyttöönotetusta koodistasi.
  • kannustaa sinua kirjoittamaan asianmukaisesti rakeista koodia: se on niin haitallista kirjoittaa yksikötestit koodille, joka yrittää puristaa liikaa toimintaa kuhunkin rutiiniin (menetelmä, alaohjelma jne.).
  • on parasta aloittaa ennen koodin luomista, jonka se myöhemmin testaa. Tämä voi auttaa sinua keskittymään selkeämmin siihen, mitä koodisi pitäisi toimittaa.
  • Saa selville sinulle varhaisessa vaiheessa, kun varhainen koodisuunnittelusi on heitettävä pois. Tämä estää sinua sotkemasta väärällä suunnittelulla, johon olet jo investoinut liikaa voidaksesi heittää pois. Kyse on toimivan koodin luomisesta, ei ensimmäisen yleissuunnitelman vahvistamisesta.
"kannustaa sinua kirjoittamaan asianmukaisesti rakeista koodia" En ole koskaan ajatellut yksikötestejä tällä tavalla, mutta olet täysin oikeassa.
Morgan Rodgers
2018-03-24 09:38:06 UTC
view on stackexchange narkive permalink

Luulen, että pääkysymykseen, "milloin koodi on tarpeeksi hyvä?", vastaus on yksinkertainen: kun se tekee mitä haluat, ja voit olla varma, että sen antama vastaus on oikea.

Koodin tekemiseen on kuitenkin ehdottomasti kompromissi. Minulle se tulee esiin kahdessa paikassa:

  1. Entä jos haluat kuuden kuukauden kuluttua palata tutkimustuloksiin ja nähdä, pystytkö keksimään joitain parannuksia tai oletko löytänyt umpikujasta, joten tulet takaisin katsomaan, pystytkö saamaan työn päätökseen. Voitko lukea kuuden kuukauden takaisen koodisi ja jatkaa sen muokkaamista? Vai onko liian sekava seurata ja käyttää? Ihannetapauksessa sinun pitäisi pystyä palaamaan koodiisi vuoden kuluttua ja ymmärtämään helposti tekemäsi.
  2. Tutkimustasi ei ole kuplassa. Seuraava tutkimushankkeesi liittyy todennäköisesti jonkin verran edelliseen. Voiko koodiasi käyttää uudelleen? Voidaanko sen osia käyttää uudelleen? Vaikka nykyisessä projektissasi olisi vain vähän etuja koodin tekemiseen mukavaksi ja modulaariseksi, voit säästää itsellesi paljon aikaa ja vaivaa rivillä, jos teet tämän. Tärkeät toiminnot ja algoritmit voidaan sitten siirtää uuteen asetukseesi pienellä mukautuksella. Haittapuolena on, että voit korvata tietyt koodinpätkät vaihtoehtoisilla toteutuksilla nähdäksesi, saatko parempia tuloksia.
Scott Seidman
2019-02-20 02:49:25 UTC
view on stackexchange narkive permalink

Sanot:

Kirjoittamaani koodia käytetään melkein aina vain itse

Kuten muutkin, en jaa tätä mielipidettä. Koodin on TAKUU käyttää vähintään kaksi ihmistä:

  1. Sinä
  2. Sinä kolmen kuukauden kuluttua.

Hyvä sisäinen dokumentaatio ei vie niin kauan, ja säästää pitkällä aikavälillä aikaa ja vaivaa.

anonymous
2019-02-20 21:58:27 UTC
view on stackexchange narkive permalink

Kirjoittamaani koodia käytän melkein aina vain itse.

Tämä kommentti näyttää olevan hieman harhaanjohtava, ja minun pitäisi sanoa tämä sanomalla, että kirjoitan itse paljon tutkimuskoodia nimellä hyvin. Syy siihen, miksi mielestäni tämä väite on väärä, johtuu siitä, että koodia käytetään jollekin (esim. Valmistellaan tietoja analyyseja, analyyseja, mallinnuksia jne. Varten) ja se vaikuttaa viime kädessä kaikkiin valmistamiinne käsikirjoituksiin. . Sinänsä sen varmistaminen, että koodi on muiden luettavissa, on osa sen varmistamista, että työsi voidaan toistaa myös muilla. Lisäksi, jos koodisi ratkaisee ongelman, joka muilla on (melko yleinen myös tutkimuksessa!), Toiset voivat osittain käyttää sitä omassa tutkimuksessaan.

Tästä huolimatta käytännössä se on mahdollista kirjoittaa melko luettavaa koodia ensimmäisellä kerralla ja vaatii vain vähän kuria. Jotkut IDE: t pakottavat tämän sinulle tarkistamalla muuttujien nimet (esim. Ovatko ne CamelCase-yhteensopivia?), Funktioiden nimet, toimintojen pituuden, yksikötestien peiton ja niin edelleen. Tämä on yleensä paljon, koska on epätavallista, että ihmiset palaavat takaisin ja viettävät paljon aikaa koodin parantamiseen - kun sinulla on tulokset, puolueellisuus pyrkii siirtymään seuraavaan projektiin.

Joten loppujen lopuksi sinun on yritettävä kirjoittaa koodi, joka on tarpeeksi hyvä jakamaan muiden kanssa ensimmäistä kertaa. Et voi koskaan tietää, milloin arvostelija voi pyytää asiaankuuluvaa lähdekoodia.



Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...