Permalänk
Avstängd
Skrivet av Ferrat:

Varför? Beror ju helt på vad man jobbar med? finns massor av situationer där antalet clock cycles spelar in och resurser är begränsade etc av antingen hårdvaruskäl eller pga resursfördelning. Visst, programmerar du ett spel till en high-end gaming setup kanske det inte är kritiskt men det är ju är ju långt ifrån allt som programmeras.

Ytterst sällan domänkoden behöver vara så optimerad. Ta exemplet med spel, där är domänen spellogiken, allså den kod som styr beteendet på spelet. Den ekeverar tex i 90 fps och har ofta inte speciellt höga krav på sig. Annan femma med spelmotorn.

Visa signatur
Permalänk
Medlem

Tycker inte det är en antingen/eller fråga.
Självfallet är det väl knappast rimligt att skriva en kommentar per kodrad.

Däremot gillar jag kommentarer på funktion/klasssnivå, men det beror nog lite mer på hur man jobbar.
Kör man mkt kodning mot befintlig kod/apier/whatever, så är man sällan intresserad av att gå in och läsa igenom funktionen för sakens skull, jag vill då bara snabbt veta "gör denna funktion det jag behöver?".

Problemet är ju att kommentarer/dokumentation sällan (aldrig? ) underhålls, så det är väl mest det som gör mig kluven till det hela.
Oftast i scenariot jag beskriver ovan går man på en mina ändå eftersom kommentar/docs är så utdaterade att det som skrivs inte stämmer. Och så har man då först fått läsa docs + implementera + felsöka + sluta med att läsa igenom kodfan ändå

Permalänk
Medlem
Skrivet av CyberVillain:

Ytterst sällan domänkoden behöver vara så optimerad. Ta exemplet med spel, där är domänen spellogiken, allså den kod som styr beteendet på spelet. Den ekeverar tex i 90 fps och har ofta inte speciellt höga krav på sig. Annan femma med spelmotorn.

Spel, eller saker som körs på en PC allmänt idag behöver inte vara direkt optimerat, inte ens en spelmotor, men som jag sa, det är långt ifrån all kod som skrivs och beror som sagt på vad man arbetar med.

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Avstängd

@Ferrat: Det är ju klart en spelmotor ska vara optimerad. Med det är separation of concerns. Spelmotor = krav på prestanda osv, domänen = krav på läsbarhet

Visa signatur
Permalänk
Keeper of Traditions

Såvida man inte jobbar i ett litet projekt med få inblandade så är ju kommentarer livsviktiga för att nästkommande person snabbt ska kunna sätta sig in i koden och ta över.
Osäker på varför TS tycker att koden i exemplet är självkommenterande, då det finns tvetydighet lite överallt däri.

Jag tycker Googles styleguide är ganska bra, men en del av det kan man väl skippa i mindre projekt:
https://google.github.io/styleguide/cppguide.html#Comments

Visa signatur

|| Intel 8700K || Asus RTX 4070 TI Super TUF || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || Corsair RM 850x || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Permalänk
Medlem

I kort, jag håller med och jag gör inte så...överflödet av kommentarer kan vara lika förvirrade som avsaknaden av kommentarer.

Saker ska i sin mån vara självförklarande, men självförklarande för vem? Vart sätter man ribban och hur långt vill man ta ett mönster?

Jag skulle våga påstå att det är svårt att säga vad som är bäst, då det verkligen är upp till var och en. Men av erfarenhet är resultatet av för lite kommentarer lika förödande som mer för mycket.

Sedan kan man ju tillägga att många kommenterar pga. dokumentation, jag arbetar mycket mer kommentarer för genering av dokumentation. Skriver rätt mycket publika API:er och där är det ovärdeligt med kommentarer som sedan används vid generering av dokumentation för dessa publika API:er!

Ser ut som att tråden spårade lite här med

Permalänk
Avstängd
Skrivet av Dunder:

Osäker på varför TS tycker att koden i exemplet är självkommenterande, då det finns tvetydighet lite överallt däri.

Man måste ju ha någon form av dokumentation som förklarar domänen i stort för nyanlända i projektet. Men inte i koden. Detta är ju dessutom en klass en bit ner i kedjan. Hade jag varit en ny utvecklare i teamet kanske jag skulle tittat högst upp i kedjan och jobbar mig dörifrån, i detta exempel blir det hagelsprakaren

public class TubeFedShotgun : InternalMagazineFirearm { protected override void Awake() { base.Awake(); Category = FirearmCategories.Primary; UsesTouchpad = true; } public override bool TriggerReady(NVRButtonInputs trigger) { return trigger.SingleAxisDown; } protected override void AddForceToCasing(Rigidbody casing) { casing.AddForce(-this.transform.right * 1.5f); casing.AddRelativeTorque(new Vector3(0.0005f, 0.001f * (5 + Random.value * 5), 0.0005f)); } }

Visa signatur
Permalänk
Medlem
Skrivet av Ferrat:

Varför? Beror ju helt på vad man jobbar med? finns massor av situationer där antalet clock cycles spelar in och resurser är begränsade etc av antingen hårdvaruskäl eller pga resursfördelning. Visst, programmerar du ett spel till en high-end gaming setup kanske det inte är kritiskt men det är ju är ju långt ifrån allt som programmeras.

Beror ju helt på applikationen och problemet som ska lösas.

Rent allmänt gäller väl att hårdvara är betydligt billigare än utvecklare.

Permalänk
Medlem
Skrivet av CyberVillain:

@Ferrat: Det är ju klart en spelmotor ska vara optimerad. Med det är separation of concerns. Spelmotor = krav på prestanda osv, domänen = krav på läsbarhet

Vi pratar om helt olika nivåer av optimering och krav, en spelmotor bör vara optimerad ja men det är inget krav och inte heller direkt kritiskt. Du verkar prata programmering riktat till stor del mot just spelprogrammering eller applikationsprogrammering, jag pratar om det mer allmänt och inkluderar saker du inte verkar göra. Vet som ju inte kontexten av diskussionen du hade med personen som inte kunde "skriva snyggare" pga krav men som jag påpekat finns det massor av situationer där sådana krav existerar.

Hur du använder domän här är ju luddigt igen då du just du skiljer på spelmotor vilket är kod, och domän vilket du använder för att referera till all kod med syfte? Spelmotorn måste ju vara en domän med? eller hur använder du det egentligen?

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Medlem
Skrivet av Baxtex:

Beror ju helt på applikationen och problemet som ska lösas.

Rent allmänt gäller väl att hårdvara är betydligt billigare än utvecklare.

Jo klart men det är inte alltid så att du kan slänga mer hårdvara på ett problem eller så vill du t.ex. av olika skäl minimera hårdvaran.

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Medlem
Skrivet av Baxtex:

Beror ju helt på applikationen och problemet som ska lösas.

Rent allmänt gäller väl att hårdvara är betydligt billigare än utvecklare.

Skulle precis skriva samma sak själv, men ville inte elda på OT.
Sjukt ofta jag ser att man strör hårdvara på prestandaproblem. Sen är det en enorm degenerering av utvecklare idag i högnivåspråk på hårdvara man bara kunde drömma om förr i tiden.
Den första burk jag satt på hade 2 meg ram vill jag minnas.

I 99% av dom arbeten jag haft har (tyvärr) prestanda inte varit något man lagt fokus på, eventuella problem har lösts med hårdvara så att utvecklarna bara kunnat mängdproducera medioker kod. En ny feature är alltid högst på priolistan.

Ännu värre blir det med dagens cloudfokus. "förr" behövde iaf någon i ledet se till att mer hårdvara installerades, i dagsläget drar man bara i lite reglage i AWS och så hamnar det en fetare faktura nånstans

Edit: Jag? Bitter? Näää

Permalänk
Hedersmedlem
Skrivet av CyberVillain:

Man måste ju ha någon form av dokumentation som förklarar domänen i stort för nyanlända i projektet. Men inte i koden. Detta är ju dessutom en klass en bit ner i kedjan. Hade jag varit en ny utvecklare i teamet kanske jag skulle tittat högst upp i kedjan och jobbar mig dörifrån, i detta exempel blir det hagelsprakaren

public class TubeFedShotgun : InternalMagazineFirearm { protected override void Awake() { base.Awake(); Category = FirearmCategories.Primary; UsesTouchpad = true; } public override bool TriggerReady(NVRButtonInputs trigger) { return trigger.SingleAxisDown; } protected override void AddForceToCasing(Rigidbody casing) { casing.AddForce(-this.transform.right * 1.5f); casing.AddRelativeTorque(new Vector3(0.0005f, 0.001f * (5 + Random.value * 5), 0.0005f)); } }

Ditt första exempel med Shotgun var ganska läsbar, den här förstår jag väldigt lite av. Användning av literaler är typiskt förvirrande. Awake är inte självförklarande men verkar fungera som någon initiering? TriggerReady är heller inte självförklarande, ready i vilket syfte, är det säkringen?

Permalänk
Medlem
Skrivet av Ferrat:

Jo klart men det är inte alltid så att du kan slänga mer hårdvara på ett problem eller så vill du t.ex. av olika skäl minimera hårdvaran.

Var därför jag skrev "Beror ju helt på applikationen och problemet som ska lösas."

Har jobbat mycket med PLC:er och andra mikrokontroller där man är ganska begränsad, tycker det är ganska skoj att optimera saker. Men det tar såklart tid och därmed pengar som inte slutkunden vill betala om det nu inte är absolut nödvändigt.

Ska jag däremot implementera ett program för låt säga klassificera en stor mängd data så sitter jag inte och micro optimerar små saker som inte kommer påverka exekveringstiden i någon större omfattning, är ju helt bortkastad tid.

Permalänk
Avstängd

@Ferrat: Nja, mitt exempel var domän från ett spel, skiljer inte nämnvärt från en domän i en enterprise business app. Jo det finns en domän även i en spelmotor. Även där kan man ju skriva clean code till 99% utan kanske längst ned där prestanda är allt

Visa signatur
Permalänk
Medlem
Skrivet av CyberVillain:

Det går inte skriva bra kod i php
Ditt exempel är ett perfekt exempel på när en kommentar istället borde varit ett metodnamn, ett klassnamn etc, etc. Som isolerar konceptet "Läste ett inlägg"

Går det inte? Varför tycker jag att det går hur bra som helst att skriva en if-sats i PHP, eller varför inte använda mig av WideImage, som använder sig av PHP-klasser?

Skrivet av Baxtex:

Japp men kommentarer kan också vara farliga. T ex kanske man ändrar i koden men inte i kommentaren, så det står felaktigt vad något gör. Sen har vi det klassiska exemplet där kommentarer skriver vad varje kodrad gör istället för varför den gör det. Det gör det hela mycket svårare att läsa.

Själv vill jag att koden ska tala för sig själv men det är inte alltid det går och då är kommentarer jättebra.

Jag brukar tänka såhär: Behöver jag skriva en kommentar på mer än 2 rader så är det nog bäst att refaktorera lite.

Det är därför jag är noga med att ändra kommentaren också, samtidigt som jag ändrar själva hårdkodningen.

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me /device:desktop. Andra projekt: Keizai, Koroth & Serenum.

Permalänk
Avstängd

@Shimonu: Awake är en Unity3d term och den tycker jag utvecklaren förvänta veta vad det är, alternativ ska det dokumenteras i ett dokument som förklarar grundläggande koncept i domänen, detta dokument ska inte ligga i koden.

TriggerReady kan väll diskuteras om det är ett vidare bra namn. Men Alt+f7 och du hoppar till dess usages och kan se hur den används

if (TriggerReady(trigger)) { this.Fire (); firstShot = false; }

Visa signatur
Permalänk
Medlem

Som någon som gör kundanpassningar av en programvara, och hoppar mellan olika brancher lite hela tiden har jag svårt att se att det går att klara sig bra utan dem. Saker kan liksom fungera på olika sätt från en branch till en annan, och kommentarer hjälper rätt rejält när man snabbt ska sätta sig in i en viss branch, och behöver se vad och varför folk (eller en själv) har gjort på ett visst sätt här.

Visa signatur

Redbox: Asrock B650 Lightning ATX, 7800x3D -20CCO, XFX 6950XT, 2x32GB Corsair Vengence 6400 CL32, WD SN770 2TB, Corsair RMe 1000, Lian Li Lancool 216, Peerless Assassin 120 SE
Purpbox: Z87-Pro, I5 4670K@4.2, Sapphire 290 TRI-X, 2x8GB Crucial Tactical@stock, Deep Silence 1
Samsung Evo 250+500GB + QVO 1TB, 2x1TB 7200RPM backup/lagring
Det var bättre förr: E5300 2600MHz -> 3640MHz, Celeron 300A -> 450MHz

Permalänk
Medlem

@CyberVillain: Ja, fast du pratar fortfarande då i stort sett enbart programmering för en modern PC med hutlöst mycket resurser, där du kan vara övertydlig med din kod etc. Finns skäl till att kommentering fortfarande är oftast är ett krav när man utbildar, du vet aldrig vilken miljö du ska jobba i, du vet aldrig hur länge koden kommer vara aktiv eller vem som kommer efter dig osv. Att sträva efter lättläst kod, lättöversiktlig struktur osv är alltid bra men att prata som att kommentarer är "av ondo" känns mest som en optimistisk och begränsad syn, även länken du säger är bra läsning påpekar uttryckligen att det finns skäl för kommentarer.

Citat:

Stop me if you’ve heard this one before…

“Good code is self-documenting.”

...

And like many clichés, it has a kernel of truth to it. But this truth has been so abused that most people who utter the phrase have no idea what it really means.

Is it true? Yes.

Does it mean you should never comment your code? No.

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Avstängd

@Ferrat: jag skriver ju faktiskt tom själv att det ibland ska kommenteras

Visa signatur
Permalänk
Medlem
Skrivet av CyberVillain:

@Shimonu: Awake är en Unity3d term och den tycker jag utvecklaren förvänta veta vad det är, alternativ ska det dokumenteras i ett dokument som förklarar grundläggande koncept i domänen, detta dokument ska inte ligga i koden.

TriggerReady kan väll diskuteras om det är ett vidare bra namn. Men Alt+f7 och du hoppar till dess usages och kan se hur den används

if (TriggerReady(trigger)) { this.Fire (); firstShot = false; }

Tror att det är detta som kan dela folks åsikter.

Jag vill ju ibland ha kommentarer just för att slippa det du nu beskriver.
Dvs ser jag en func DoSomeLeetHaxx(){} så vill jag (oftast) inte behöva hoppa igenom femtielva steg i kod och läsa 15 andra chainade funktioner för att förstå vad fasen det är som händer.

Givetvis så bör/kan en insatt/vettig programmerare förstå vad koden gör, och då kan man argumentera för att kommentarer/dokumentation är överflödig.

Själv så vill jag oftast ha kommentarer/docs för att spara tiden det tar mig att göra precis det du beskriver.
Men det är absolut potato / pottattoo, min besparing i tid kräver istället att utvecklaren innan lagt tid på underhåll av kommentarerna.

Så det beror ju helt på fallet. Ska man komma in som ny utvecklare i domänen på heltid så ser jag inga problem.
Men är man som oftast bara inne och doppar lite här och var, så är det i min mening guld värt att ha kommentarer. Ofta skiter jag fullständigt i hur det faktiskt fungerar, inte mitt problem. Jag vill bara använda skiten och fokusera vidare på det jag faktiskt vill göra.

Problemet man ändå ofta kommer till när man satt sig in väl nog är att man (det gör väl ALLA utvecklare?? ) ändå anser att skiten är felimplementerad och så gör man sin egen implementation ändå.
I den förra domänen jag satt i var det inte ovanligt att man hittade 10 (ja, tio) olika implementationer för att åstadkomma samma sak
Ofta så det blir när man har hög personalomsättning och ingen som riktigt orkar bry sig om helheten.

Permalänk
Medlem

@CyberVillain: samtidigt skriver du

Skrivet av CyberVillain:

då jag påstod helt ärligt att kommentarer är av ondo och bara juniorer använder dem i domänen

Domänen här har vi ju fastställt att all kod finns i domän, därav all kod.

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Avstängd

@BasseBaba: Fast måste du hoppa genom 15 lager av kod så är det ju dålig design. Det ska räcka hoppa en gång kanske möjligen två, men bara kanske

Nej så gör inte jag, om jag inte gillar en implementation så refaktoriserar jag den som finns, inte skriver en ny, det är ju galet, koden degenerar på nolltid

Visa signatur
Permalänk
Avstängd

@Ferrat: Nej domänen är den kod som är grundläggande för ditt affärsområde. Är det ett försäkringsbolag kanske det är koden som beräknar premier på alla försäkringar osv. Sedan har du massor med boilerplatekod, denna kan man med fördel minimera genom att använda ramverk från microsoft google osv.. Och sedan har du lågnivåkod som av olika själ måste vara komplex och svårläst

Visa signatur
Permalänk
Medlem

Till ondo tycker jag verkligen inte kommentarer är. Sen vill jag ju klippa till folk som skriver någon jävla uppsats till en simpel if-sats. Vet inte hur folk lyckas skriva flera rader för triviala if-satser typ som "if(count > 5)"

Men jag vill gärna en kommentar när t.ex ett anrop inte helt självförklarande, för att slippa kolla definitionen av metoden, och allt den innehåller. Sparar mig tid.

"Fast måste du hoppa genom 15 lager av kod så är det ju dålig design."
Måhända dålig design om jag måste hoppa genom flera definitioner, men jag styr inte hur de föregående 50 involverade utvecklarna har designat en produkt som byggdes för flera år sen.
Finns det en budget för att fixa bugg X, eller lägga till funktionalitet Y så får det förbli dåligt designat och man får göra det bästa av situationen.

Tycker helt enkelt kommentarer inte behöver vara helt svart eller vitt. Använd dom, kortfattat, där de kan underlätta i framtiden för en själv, eller nästa utvecklare. Använder generellt sätt bara kommentarer om jag gör ett anrop till något som inte är självförklarande(kan ju vara ett bibliotek eller saker någon annan har byggt, som inte jag sätter mig och strukturerar om och ändrar namn på) samt när jag ska förklara VARFÖR jag var tvunget att skriva något på ett sätt som kanske kan uppfattas lite diffust.

Visa signatur

Ryzen 5600X | MSI Tomahawk | GTX 3070

Permalänk
Medlem
Skrivet av CyberVillain:

@BasseBaba: Fast måste du hoppa genom 15 lager av kod så är det ju dålig design. Det ska räcka hoppa en gång kanske möjligen två, men bara kanske

Nej så gör inte jag, om jag inte gillar en implementation så refaktoriserar jag den som finns, inte skriver en ny, det är ju galet, koden degenerar på nolltid

Jag säger inte emot dig, berättar bara om mina erfarenheter. Hittils i min karriär har jag ALDRIG suttit i ett projekt där vi fått starta cleant. Ofta har det varit år, om inte tiotals år, av legacy.
Ofta har det varit så illa att all källkod inte ens funnits, så man har fått bygga runt existerande kod i produktion som ingen orkat bygga om.

Något som jag skulle vilja kalla det ”absolut sjukaste” jag sett, var ett ställe där dom fuckat upp så hårt och målat in sig i ett hörn och varit så trött att dom inte orkat bry sig, att dom skapat en ”SuccessfulException”. Helt enkelt så gick all returhantering ut på att kasta en exception, så när dom väl insåg att dom hade ett success att returnera så blev do tvunga att skapa en exception för det, och sen så levererade dom returvärdet som exception-message

Lite kodkommentarer hade då varit guld värt

Permalänk
Avstängd
Skrivet av Sonywalk:

Använder generellt sätt bara kommentarer om jag gör ett anrop till något som inte är självförklarande(kan ju vara ett bibliotek eller saker någon annan har byggt, som inte jag sätter mig och strukturerar om och ändrar namn på) samt när jag ska förklara VARFÖR jag var tvunget att skriva något på ett sätt som kanske kan uppfattas lite diffust.

Att skriva en vettig abstraktion till tredjepart är väldigt, väldigt viktigt. Dels för man inte vill bygga in sig i ett hörn, men nästan ännu mer för att man vill styra kodkvaliteten. Och hör och häpna, det är helt okej med kommenterar i implementationen av abstraktionen.

Visa signatur
Permalänk
Avstängd
Skrivet av BasseBaba:

Jag säger inte emot dig, berättar bara om mina erfarenheter. Hittils i min karriär har jag ALDRIG suttit i ett projekt där vi fått starta cleant. Ofta har det varit år, om inte tiotals år, av legacy.
Ofta har det varit så illa att all källkod inte ens funnits, så man har fått bygga runt existerande kod i produktion som ingen orkat bygga om.

Något som jag skulle vilja kalla det ”absolut sjukaste” jag sett, var ett ställe där dom fuckat upp så hårt och målat in sig i ett hörn och varit så trött att dom inte orkat bry sig, att dom skapat en ”SuccessfulException”. Helt enkelt så gick all returhantering ut på att kasta en exception, så när dom väl insåg att dom hade ett success att returnera så blev do tvunga att skapa en exception för det, och sen så levererade dom returvärdet som exception-message

Lite kodkommentarer hade då varit guld värt

Tur man är arkitekt så man bara får cleanslate-uppdrag Fyfan säger jag, sitta i andras tackiga kod

Visa signatur
Permalänk
Avstängd

Här är ett system jag designat grundarkitekturen för, iof några år på nacken samt en del kod andra kontributat där jag kanske inte borde pullat in koden innan koden var ren från kommenterer och lite snyggare..

Börja i UI högst upp, niu kan avgöra själva hur lätt det är att förstå
https://github.com/AndersMalmgren/FreePIE/tree/master/FreePIE...

Visa signatur
Permalänk
Medlem
Skrivet av CyberVillain:

Tur man är arkitekt så man bara får cleanslate-uppdrag Fyfan säger jag, sitta i andras tackiga kod

Benägen att hålla med, men det är så verkligheten ser ut för 98+% av alla mjukvaruutvecklare.

Permalänk
Avstängd
Skrivet av Erik_T:

Benägen att hålla med, men det är så verkligheten ser ut för 98+% av alla mjukvaruutvecklare.

Det är iof inte alltid bara gröna ängar då man har yttersta ansvaret för kodkvaliten, men man har iaf en chans att påverka att utvecklarna kan leverera bra kod. För det är ju faktiskt det viktiga med arkitektur, supporta utvecklarna så de kan jobba med det som är viktigt, domänen

Visa signatur