Gå til innhold

ProgrammeringsBaren! Småprat, om det du elsker!


Anbefalte innlegg

 

Jeg har hvertfall bestilt denne boken: http://www.amazon.com/Introduction-Joes-Pros-Exam-70-536/dp/1451581718/

 

Ser den bra ut?

 

Jeg har aldri hørt om den boken der, men den er helt sikkert en grei introduskjon til alt det mest grunnleggende.

 

I tillegg til å lese om C# bør du kjøpe en bok som forteller deg litt mer generelt om hva som er viktig når man programmerer. Anbefalte bøker som lærer deg gode praksiser er blant andre:

 

 

Tror den boken jeg bestilte var et bomkjøp, da jeg ser jeg allerede kan det meste som står i den. Bøkene du har skrevet skal jeg sjekke ut ved en senere anledning, men vet du om C# 5.0 in a nutshell er en passende bok for meg? Er liksom ikke lysten på enda et bomkjøp, hehe.

Lenke til kommentar
Videoannonse
Annonse

Det er mange som anbefaler Clean Code. Mykje av det som står i boka er common sense, resten er fjas om forfatteren meining om korleis kode skal strukturerast.

 

Har du lyst å skrive bra kode, så gjer koden heller så enkel som mogleg. Mange abstrasjoner gjer ikkje kode lettare for andre.

Lenke til kommentar

Bra Clean Code var common sense for deg. Det er dessverre ikke det for mange, så nyttig å få folk til og lese den.

 

Dessuten har jeg vært borti flere som sier som deg men så skriver gigantiske funksjoner, dårlig navngivning o.l. Det hjelper lite å ha lest og forstått boka om man ikke faktisk gjør det som er "common sense".

 

Av de 3 bøkene er vel Pragmatic Programmer min "favoritt", fordi jeg er veldig enig i mye av det den sier. Det er så mange purister på nettet og universitetet, men det viktigste er jo å levere et godt produkt og da må man ofte velge middelveier.

 

Ellers er Clean Code veldig bra, til forskjell fra andre slike bøker viser den gode eksempler på det den skriver. Det er lett å si "skriv små, testbare funksjoner", noe helt annet og faktisk gjøre det.

Code Complete synes jeg var litt tung. Mange gode poenger, men pakket inn i litt mye tekst.

 

Usikker på om dette er bøker for nybegynnere, men.

Lenke til kommentar

Gigantiske funksjoner kalles også ofte prosedyrer, dei er ofte lettare å følgje enn ein prosedyre som går igjennom 5000 filer

 

Og boka er jo prakteksempelet på dårlege variabel namn, du trenger ikkje å namngi ein funksjon executeProcedureIfPersonLikeCookies()

 

Ynskje du å skrive god kode, så jobber du i eit team. Dykk vil ha fleire interessante diskusjonar på kva dykk meine er god kode. Gjerne baser koden på ein kodestandard som Google sin.

Lenke til kommentar

Vanskelig å ha gode diskusjoner om ingen får inn innspill utenifra. Jeg sier ikke boken har rett i alt, men det er bedre å lese igjennom slikt og gjøre seg opp et bevisst, velbegrunnet valg heller enn å gjøre ting på en måte bare fordi man ikke vet bedre.

Lenke til kommentar

Og boka er jo prakteksempelet på dårlege variabel namn, du trenger ikkje å namngi ein funksjon executeProcedureIfPersonLikeCookies()

Jeg gjør det hele tiden. Når man refaktorerer kode, så gjør man samtidig koden mye mer lesbar, ved å gi så beskrivende metodenavn som mulig.

Lenke til kommentar

Jeg gjør det hele tiden. Når man refaktorerer kode, så gjør man samtidig koden mye mer lesbar, ved å gi så beskrivende metodenavn som mulig.

Jeg er enig i at en metode skal ha et beskrivende navn, men executeProcedureIfPersonLikeCookies() er ikke det. Det ser heller ut som dårlig programmering.

 

Istedet for:

 

    executeProcedureIfPersonLikeCookies();
ville jeg skrevet noe slik:

 

    if (personLikeCookies()) {
        BakeCookies();
    }
Her måtte jeg gjette hva slag prosedyre som skal utføres hvis man liker Cookies ... Endret av tomsi42
  • Liker 1
Lenke til kommentar
Usikker på om dette er bøker for nybegynnere, men.

 

For alle disse tre bøkene så følte jeg når jeg leste dem at jeg burde ha lest dem tidligere i karriæren. Kanskje de ikke er for folk som akkurat har begynt å lukte på programmering (som i for et par uker siden), men den dagen du begynner å gjøre det på orntlig (som at du får deg en programmeringsjobb) så bør disse bøkene eller noe tilsvarende ligge på nattbordet.

 

...etter min mening :)

Lenke til kommentar

 

Jeg gjør det hele tiden. Når man refaktorerer kode, så gjør man samtidig koden mye mer lesbar, ved å gi så beskrivende metodenavn som mulig.

Jeg er enig i at en metode skal ha et beskrivende navn, men executeProcedureIfPersonLikeCookies() er ikke det. Det ser heller ut som dårlig programmering.

 

Istedet for:

 

    executeProcedureIfPersonLikeCookies();
ville jeg skrevet noe slik:

 

    if (personLikeCookies()) {
        BakeCookies();
    }
Her måtte jeg gjette hva slag prosedyre som skal utføres hvis man liker Cookies ...

 

 

Du kan ha rett. Eller du kan ha feil. Det kommer helt an på. Sånn er det alltid. Det beste vi kan gjøre er å lytte til folk som har programmert lenge (som forfatterne av bøkene jeg nevnte), og så forsøke å erfare selv hva som fungerer i ulike situasjoner. Etter å ha programmert daglig i 30 år - og hele tiden ha forsøkt å reflektere over hva du gjør og hvorfor du gjør det - så velger du forhåpentligvis det beste 9 av 10 ganger :)

 

Poenget er: Det er sjelden en fasit på hva som er god kode, og jeg synes ikke man fremstår så veldig bra om man påstår at man vet hva som er best.

 

Min erfaring med kodebaser hvor man har fulgt det Uncle Bob sier om veldig små metoder er derimot at det etterhvert blir veldig vanskelig å følge logikken. Min tommelfingerregel - som er enklere å si enn å forklare og å forstå - er at all kode som man må forstå samtidig bør befinne seg på samme sted. En annen måte å si det på er at en metode (eller prosedyre eller funksjon) bør inneholde all koden som har samme abstraksjonsnivå, men skjule all kode som er på et lavere abstraksjonsnivå.

 

Gir det mening for noen?

Lenke til kommentar

 

Usikker på om dette er bøker for nybegynnere, men.

 

For alle disse tre bøkene så følte jeg når jeg leste dem at jeg burde ha lest dem tidligere i karriæren. Kanskje de ikke er for folk som akkurat har begynt å lukte på programmering (som i for et par uker siden), men den dagen du begynner å gjøre det på orntlig (som at du får deg en programmeringsjobb) så bør disse bøkene eller noe tilsvarende ligge på nattbordet.

Ja, det kan jeg være enig i. Har selv hatt stor nytte av dem nå som jeg har begynt på mer "ekte" prosjekter som er store og langvarende. Med nybegynner tenkte jeg mer i baner noen som har programmert en liten stund (1-2 år kanskje) ikke vil kjenne seg igjen i de beskrevede situasjonene og egentlig ha viktigere ting å lære først.

 

Min erfaring med kodebaser hvor man har fulgt det Uncle Bob sier om veldig små metoder er derimot at det etterhvert blir veldig vanskelig å følge logikken.

(...)

En annen måte å si det på er at en metode (eller prosedyre eller funksjon) bør inneholde all koden som har samme abstraksjonsnivå, men skjule all kode som er på et lavere abstraksjonsnivå.

 

Gir det mening for noen?

Gir mening her. Det er jo også et av poengene til Bob, i samme kapittel til og med tror jeg, at abstraksjonsnivået bør være likt i en metode. Og nettopp derfor splitte ut detaljene i mindre metoder.

Lenke til kommentar

Gir mening her. Det er jo også et av poengene til Bob, i samme kapittel til og med tror jeg, at abstraksjonsnivået bør være likt i en metode. Og nettopp derfor splitte ut detaljene i mindre metoder.

 

Det var det jeg mente å huske - at Bob sier akkurat det. Men det folk husker er "extract 'til you drop", og resultatet blir kode som blir som Da Vinci-koden; man må grave og grave for å finne ut hva som skjer.

 

Forsøker å skrive en blogpost som snakker om dette og illustrerer hvordan man bør gjøre det....

Lenke til kommentar

Eller så er du for dårlig til å abstrahere. Gi helperne dine bedre navn, så løser problemet seg.

 

Å lage gode abstraksjonsnivåer er vel kanskje det vanskeligste problemet man har som utvikler (av lesbar kode), og det kan ta mange år å bli god på dette. Mange blir det aldri. Navngivning er kanskje den nest største utfordringen. Hvis du har en mirakelformel for hvordan man lager gode navn så er jeg veldig interessert i å høre den :)

  • Liker 1
Lenke til kommentar

Istedet for:

    executeProcedureIfPersonLikeCookies();
ville jeg skrevet noe slik:

    if (personLikeCookies()) {
        BakeCookies();
    }

 

Eksempelet ditt er litt urettferdig, hva om den første heller var:

bakeCookiesIfPersonLikeCookies();
? Da skjønner du jo fint hva som gjøres. Ikke at jeg nødvendigvis ville ha laget en slik metode, da. Evt. måtte kodesnutt nr. 2 vært slik for at det skulle bli en bra sammenligning:

    if (personLikeCookies()) {
        executeProcedure();
    }

I et spill jeg skriver nå skal jeg spille av lyder når ting skjer. Da kan jeg enten gjøre slik overalt

if(settings.isSoundEnebaled() {
    clickSound.play();
}
eller bedre:

playIfSoundEnabled(sound);
og så får metoden ta seg av hva som skal skje. Endret av Matsemann
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...