Permalänk
Testpilot

Personligen tycker jag att det är riktigt jobbigt att arbeta med andras (eller egna för delen) program eller projekt utan kommentarar, ett exempel här från CryEngine - Lycka till utan kommentarer känner jag bara

Visa signatur

R < ROG G17 | R9 5900HX | 32GB 3200 MT/s | RTX 3070 >

G < R9 5900X | 32GB 3200 MT/s | ROG RTX 3090 Ti >

B < Galaxy S22+ | WF-1000XM4 | WH-XB900N >

Permalänk
Avstängd

Har man massor med konstanter av den typen är det ju såklart bra att dokumentera dem.

De borde jobba lite med namnen på porjekteten GameDll haha

Skickades från m.sweclockers.com

Visa signatur
Permalänk
Hedersmedlem
Skrivet av Ernesto:

Jag tycker att det är viktigt att skilja på kommentarer och dokumentation - De är nämligen inte samma sak, även om man kanske kan klassa dokumentation man skriver till en function som en kommentar, så är ju syftet något helt annat.

Lite obehagligt att det skulle dröja till inlägg 164 i tråden innan detta togs upp (med brasklapp för att jag missat något).

Jag är en kommentarslaktare av rang när det gäller kommentarer som lagts till inuti metoder och funktioner, just av övertygelsen att dessa kommentarer allt som oftast bara är ett tecken på att funktionen är för stor och borde brytas upp i fler mindre och väldefinierade funktioner. Detta ger en stor boost i testbarhet, och om man har som ryggmärgsreflex att skriva tester under utveckling så borde det snabbt bli lika reflexmässigt att eftersträva små isolerade enheter att testa.

Samtidigt förespråkar jag att dessa isolerade enheter ska vara dokumenterade för att förtydliga intentionen. Bra namngivning av olika entiteter (moduler, klasser, funktioner, variabler, …) räcker långt, men dokumentation är i mina ögon ett nödvändigt komplement. För en insatt programmerare är koden i sig typiskt tillräckligt självförklarande för att förklara hur den fungerar (så länge den följer vanliga språkidiom, designmönster, etc.), men att svara på varför den existerar kan ofta vara en annan sak, och går generellt inte att koda ner i funktionsnamn om man inte går till absurditeter i namngivning.

En annan användbar aspekt på att "behöva" skriva dokumentation är att det ofta kan bli väldigt tydligt ifall designen börjar då söderut. Spindelsinnet börjar pirra när man märker att dokumentationen börjar kännas komplex. Kan man inte någorlunda enkelt förklara vad en funktion gör så finns det stor risk för att designen är dålig, eller i andra ord:

Skrivet av Tim Peters:
  • If the implementation is hard to explain, it's a bad idea.

  • If the implementation is easy to explain, it may be a good idea.

En tumregel är att om en kortfattad sammanfattning av vad en funktion gör behöver innehålla "and" eller invecklade bisatser så kanske den borde brytas upp än mer. En kusinregel är att om man trots ansträngning inte lyckas hålla sig till 50/72-regeln för commitmeddelanden i Git så kan det vara ett tecken på att ens commit borde varit flera.

En annan metod för att argumentera mot kommentarer är att det som är skrivet som en kommentar ofta skulle kunna passa som ett loggmeddelande på någon passande nivå (eller i andra ord: en kommentar som skulle kunna passa som ett loggmeddelande är sannolikt en "dålig kommentar" som borde varit ett loggmeddelande, eller tagits bort). Ett trolleritrick jag tycker mig ha hittat är att så fort en sådan text blir "exekverbar" och får en reell sidoeffekt så minskar risken dramatiskt för att den ska bli utdaterad.

Även om det är loggning på en nivå som typiskt inte dyker upp vid vanlig användning så är det som om ett loggningsanrop medför större respekt än kommentarer, och den sekund då det är nödvändigt med debuggning så får man direkt återbäring på dessa meddelanden. Det finns rätt få/inga tillfällen då jag har önskat färre loggmeddelanden när en användare har upplevt något oväntat beteende.

Skrivet av Ernesto:

Han hade kunnat klargöra sin kod antingen med kommentarer, eller variabler/metoder - Ibland måste man ha en kommentar varför en sak är som den är, men metoden, eller variablen som sådan, bör vara namngiven på ett sånt sätt att man egentligen aldrig behöver fråga sig varför - Jag ser ju i koden att han skapar en rekyl på vapnet, mer än så behöver man ju nästan aldrig

Det finns ett "varför" till som jag inte har sett nämnas så mycket i tråden: när man medvetet behöver skriva kod som kan se oväntad ut i en viss kontext, men av en god anledning: där ser jag nyttan av kommentarer. Det kan vara workarounds för buggar i externa bibliotek/OS, det kan vara platser där man fått lämna vanliga idiom av speciella prestandaanledningar, märkliga infrastruktursavvägningar eller nödvändig kompatibilitet med något externt otrevligt beroende.

Jag gillar inte att bli överraskad när jag läser kod. Jag vill inte se "kluriga" lösningar på problem som har välkända lösningar. Blir jag överraskad så ska det vara av en anledning, och då får personen gärna ha motiverat denna anledning. Det är möjligt att ett commitmeddelande kan räcka om man nu skulle vara patologiskt allergisk mot kodkommentarer, men det kan också leda till en häxjakt efter att modulen kanske har flyttats runt eller liknande så att man får jaga bakåt i revisionerna.

Jag vet tillfällen i närtid då jag jagat kod bakåt över mer än 20 revisioner för just det blocket, inklusive flera refaktoreringar och ett par filflyttar bara för att försöka få en ledtråd till varför en viss icke-idiomatisk lösning valts. Hade det funnits en kommentar i koden så hade den sannolikt överlevt denna resa och kunnat spara tid.

Skrivet av Ernesto:

Sen efter 10 år börjar man förstå hur otroligt jävla urusel man är och att man skriver riktigt jävla dålig kod, otroligt ovärdig, borde bli kycklingfarmare. Då är man på god väg att börja bli riktigt värdefull.

Just 10 år är en tidsram jag själv, på tal om tumregler, tycker har en speciell innebörd. Då är det ej heller bara 10 år av samma "slöprogrammerande", utan med varierande utmaningar (högt och lågt, praktiskt och teoretiskt) och en aktiv inställning att lära sig nya saker.

Typiskt verkar det vara där någonstans stenhårt kategoriska åsikter börjar mjukas upp, och ödmjukheten inför sin egen okunskap har passerat sitt minimum och åter börjar svinga uppåt ("kycklingfarmareffekten"). Då menar jag inte nödvändigen 10 år av universitetsstudier eller arbete, utan 10 år av att ha levt med programmeringen i sin närhet, låtit tankesätt sjunka in, ha sett många aspekter och åtminstone några trender komma och gå.

Man är inte ensam: Teach yourself programming in ten years [Peter Norvig] ("Director of research at Google", ifall man lägger värdering i vem som säger saker utöver budskapet i sig).

Som vissa i tråden också argumenterar för så är det sällan svart eller vitt. Inte minst de tumregler som jag nämnde ovan är just tumregler snarare än absoluta sanningar.

Skrivet av Ernesto:

Man läser ju otroligt mycker mer kod än man skriver, det är absolut vitalt att koden man läser är lättläst - Ju mer likt naturligt språk, ju fortare kan man läsa den.

"Readability counts", för att återigen tillkalla Tim Peters .

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Avstängd
Skrivet av phz:

Lite obehagligt att det skulle dröja till inlägg 164 i tråden innan detta togs upp (med brasklapp för att jag missat något).

Redan på sida ett skriver jag

"Sedan tycker jag alla team med självbevarelsedrift borde ha bra dokumentation av domänen, men inte i koden"

Visa signatur
Permalänk

Intressant diskussion.
För mig känns kommentarer bra när koden är mindre bra skriven.
Idealiskt så behövs inte kommentarer alls för att funktioner och metoder är uppdelade med egna ansvar och välskrivna namn.

Permalänk
Avstängd

Jag fick skriva en kommentar idag. Måste skriva om abstraktionen lite här tror jag så borde jag kunna bli av med denna kommentar

private IEnumerator AnimateCockHammer(bool uncock) { var start = 0; const float time = 0.1f; var elapsed = 0f; animatingCocking = true; PlayClip(uncock ? UncockHammerSounds : CockHammerSounds); while (elapsed < time) { animatingCockRatio = elapsed / time; if (uncock) animatingCockRatio = 1 - animatingCockRatio; Trigger.SetTriggerRatio(animatingCockRatio); elapsed += Time.deltaTime; yield return null; } if (uncock) { Slide.BeforeFire(); //Index the bullet just like we would when fire UncockHammer(); } else CockHammer(); animatingCocking = false; }

Visa signatur
Permalänk
Hedersmedlem
Skrivet av CyberVillain:

Redan på sida ett skriver jag

"Sedan tycker jag alla team med självbevarelsedrift borde ha bra dokumentation av domänen, men inte i koden"

Utifrån hur du använder "domän" så tolkar jag det du betecknar som "dokumentation" snarast bara API-dokumentation samt beskrivning av valda delar av logiken (domänspecifik logik), där övrig modul/klass/metod/funktions-dokumentation verkar räknas som "kommentarer".

Det jag försöker lyfta fram (och vad jag menade var det som inte tagits upp tydligt tidigare i tråden) är vikten av att även dokumentera rent interna delar för att faktiskt underlätta underhållbarhet över tid, kodgranskning och samarbete, och dessutom hur alla dessa delar av dokumentationen kan vara till hjälp för att röka ut dålig design. Det är inte detsamma som att strö kommentarer* inuti funktioner (vilket jag som jag skrev har en rätt stark aversion mot), men en funktion ska ha ett syfte, och detta syfte bör vara tydligt definierat. Människor kommer och går under större projekts livstid, och det går inte alltid att "fråga den som skrev det" för att komma till botten med märkliga implementationer ens i delar av koden som borde vara utan överraskningar.

Därutöver kan man bredda begreppet "dokumentation" än mer: den dokumentation som ligger i samband med koden (exakt var den ligger kan vara språkberoende, men nog är det vanligast att se specialformaterade block i samband med definitioner som plockas upp av dokumentationskompilatorer) är ju snarast bara referensdokumentation för utvecklare, medan det även bör finnas ytterligare lager av dokumentation för olika syften. Övergripande designdokument, användningsfall, introduktion till programmet/produkten/biblioteket, utvecklardokument, etc., är alla saker som fyller olika syften för olika människor, men min fetisch för dokumentation kanske är material för en annan tråd .


*: På tal om att vara tydlig med definitioner så exkluderar jag modul/klass/metod/funktions-"dokumentation" från begreppet "kommentarer", vilket jag sparar till insprängda kodkommentarer som typiskt inte dyker upp i automatgenererade dokument eller för den delen kontexthjälp i editorer.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Avstängd

Idag blev det en kommentar som inte förklarar varför utan hur, det har jag nog inte gjort på flera år. Hade ju kunnat bryta ut EF-frågan i flera extensions methods och namngivit dem därefter. (OpenCompanies är just en extension method)

return db.OpenCompanies(query, CompanyStates.FileImported) .SelectMany(c => c.AgreementChanges.Where(ac => ac.ReportMonthId == query.ReportMonthId && !ac.DoNotSend)) .GroupBy(ac => 1) .SelectMany(all => //Filtrerar bort alla avtalsändringar som har äldre syskon som inte är färdigbehandlade av riskbolaget all.Where(ac => ac.SendStatus.Type == MessageHandlerStatusType.Ej_skickad) .GroupBy(ac => ac.IndividualId) .Select(ind => ind.OrderBy(ac => ac.ChangePolicyMonthId).FirstOrDefault()) .Where(ac => all.Where(ac2 => ac.IndividualId == ac2.IndividualId && ac2.ChangePolicyMonthId < ac.ChangePolicyMonthId) .All(sibling => sibling.SendStatus.Type == MessageHandlerStatusType.Färdigbehandlad)) ) .GroupBy(ac => ac.InsuranceCompanyId) .Select(grp => grp.Select(ac => ac.Guid)) .ToList()

Visa signatur
Permalänk
Medlem

@CyberVillain: Hur sköter du underhållet av den kod-snippeten?

Permalänk
Avstängd
Skrivet av beejac:

@CyberVillain: Hur sköter du underhållet av den kod-snippeten?

Finns tester på den

Visa signatur
Permalänk
Medlem

@CyberVillain: MessageHandlerStatusType.Ej_skickad

Permalänk
Avstängd
Skrivet av perost:

@CyberVillain: MessageHandlerStatusType.Ej_skickad

Ja fyfan, men ibland får man stå ut med det som andra gjort

Visa signatur
Permalänk
Medlem
Skrivet av CyberVillain:

Idag blev det en kommentar som inte förklarar varför utan hur, det har jag nog inte gjort på flera år. Hade ju kunnat bryta ut EF-frågan i flera extensions methods och namngivit dem därefter. (OpenCompanies är just en extension method)

return db.OpenCompanies(query, CompanyStates.FileImported) .SelectMany(c => c.AgreementChanges.Where(ac => ac.ReportMonthId == query.ReportMonthId && !ac.DoNotSend)) .GroupBy(ac => 1) .SelectMany(all => //Filtrerar bort alla avtalsändringar som har äldre syskon som inte är färdigbehandlade av riskbolaget all.Where(ac => ac.SendStatus.Type == MessageHandlerStatusType.Ej_skickad) .GroupBy(ac => ac.IndividualId) .Select(ind => ind.OrderBy(ac => ac.ChangePolicyMonthId).FirstOrDefault()) .Where(ac => all.Where(ac2 => ac.IndividualId == ac2.IndividualId && ac2.ChangePolicyMonthId < ac.ChangePolicyMonthId) .All(sibling => sibling.SendStatus.Type == MessageHandlerStatusType.Färdigbehandlad)) ) .GroupBy(ac => ac.InsuranceCompanyId) .Select(grp => grp.Select(ac => ac.Guid)) .ToList()

Hade nog varit lämpligt att lägga den där grejen i en egen metod med ett bra namn. Det du gör i SelectMany dvs.

Permalänk
Medlem

Min egen erfarenhet kring detta är att det främst är självupplevda stjärnprogrammerare med bekräftelsebehov och sammarbetssvårigheter som har störst problem med att kommentarer finns. För övriga är det sällan ett problem. Ofta är det personer som själva har en hög kompetens och förmåga, men lägg till de sociala problem som ofta uppstår runt dom så blir hela teamets produktivitet ofta lidande. Saker som att dela med sig av sin kunskap eller kanske låta någon annan få synas lite brukar ofta sluta i katastrof. I synnerhet om det visar sig att någon av de "lägre stående" råkar veta mer än stjärnan, kanske för att dom är yngre och lärt sig nya sätt att lösa gamla problem

För egen del har jag inga som helst problem med om folk skriver kommentarer, så länge dom i sig är relevanta och korrekta. Därmed inte sagt att man kan skriva vilken skitkod som helst bara för att man kommenterar den, men sanningen är att folk helt enkelt har olika fallenhet för systemutveckling och många har helt enkelt inte alltid den kompetens eller tid som krävs för att producera perfekt kod. Och ibland är jag själv en av dom trots många års erfarenhet och, tycker jag själv, en viss fallenhet för programmering. Ödmjukhet tycker jag själv är en av de bästa egenskaper man kan ha som systembyggare, då är man mer öppen för andras tankar och idéer samt att man inte alltid vet bäst själv.

Detta är alltså baserat på min egna erfarenheter från många års kodande i olika branscher och projektstorlekar och inte sagt för att peka ut någon speciell i just denna tråd.

Permalänk
Avstängd
Skrivet av improwise:

Min egen erfarenhet kring detta är att det främst är självupplevda stjärnprogrammerare med bekräftelsebehov och sammarbetssvårigheter som har störst problem med att kommentarer finns. För övriga är det sällan ett problem. Ofta är det personer som själva har en hög kompetens och förmåga, men lägg till de sociala problem som ofta uppstår runt dom så blir hela teamets produktivitet ofta lidande. Saker som att dela med sig av sin kunskap eller kanske låta någon annan få synas lite brukar ofta sluta i katastrof. I synnerhet om det visar sig att någon av de "lägre stående" råkar veta mer än stjärnan, kanske för att dom är yngre och lärt sig nya sätt att lösa gamla problem

För egen del har jag inga som helst problem med om folk skriver kommentarer, så länge dom i sig är relevanta och korrekta. Därmed inte sagt att man kan skriva vilken skitkod som helst bara för att man kommenterar den, men sanningen är att folk helt enkelt har olika fallenhet för systemutveckling och många har helt enkelt inte alltid den kompetens eller tid som krävs för att producera perfekt kod. Och ibland är jag själv en av dom trots många års erfarenhet och, tycker jag själv, en viss fallenhet för programmering. Ödmjukhet tycker jag själv är en av de bästa egenskaper man kan ha som systembyggare, då är man mer öppen för andras tankar och idéer samt att man inte alltid vet bäst själv.

Detta är alltså baserat på min egna erfarenheter från många års kodande i olika branscher och projektstorlekar och inte sagt för att peka ut någon speciell i just denna tråd.

Håller med om att man ska vara öppen för andras tankar, men på slutet av dagen har man ett ansvar att koden går förvalta, tyvärr vissa som saknar den yrkesstoltheten som krävs för det, märks speciellt i stora projekt.

På kunduppgdraget (koden ovan) är vi 20 utvecklare och kanske 2-3 eldsjälar inklusive mig själv som code reviwar osv och försöker hålla lite kodkvalitet, det är för lite på 20 pers.

Som kontrast på vårt inhouse projekt är vi två utvecklare båda seniora systemarkitekter dessutom, allt flyter på så jäkla lätt. Som exempel gjorde jag en devlog för ett tag sedan där jag implementerade en hyfsat avancerad ny grej på bara typ 15 minuter på frihand live, blev själv överraskad hur smutt det det gick Mycket tack vare förvaltningsbarkod

Tror inte ni hittar en enda kommentar i hela klippet faktiskt

Visa signatur
Permalänk
Medlem

Nej, ingen dokumentation i kod. Målet är att koden ska va så pass självbeskrivande att det inte behövs.
Dessutom så måste du underhålla två saker om man har kommentarer i koden något som oftast inte görs enligt min erfarenhet.

Visa signatur

Wiiiiiiiiiiii

Permalänk
Medlem
Skrivet av CyberVillain:

Håller med om att man ska vara öppen för andras tankar, men på slutet av dagen har man ett ansvar att koden går förvalta, tyvärr vissa som saknar den yrkesstoltheten som krävs för det, märks speciellt i stora projekt.

Det kan jag absolut hålla med om, men då tror jag problemet är större än bara ifall de skriver kommentarer eller inte

För övrigt inte något jag tror är unikt för just programmerare heller, yrkesstolthet är så klart relevant även i andra jobb och tar sig olika uttryck. Min vurm för kommentater till trots så är det dock något närliggande som jag har klart mindre till övers för, och det är "alibidokumentation". Ni vet sån där man slänger ihop för att revisorer och annat anser att det behöver finnas, och vägrar inse att välstrukturerad kod och bra verktyg alla gånger slår ett inaktuellt Word-dokument med lite fina buzzwords. Samtidigt kan jag iof ha en viss förståelse för önskemålen måste jag erkänna, då det ger en känsla av trygghet, om än en falsk sådan.

Ang. kommentarer i kod så tycker jag det ofta finns ett ytterligare fall där det behövs, vilket är om man t.ex. anropar illa eller inte alls dokumenterade externa API:er och där man via trial and error kommit fram till att man typ ska skicka in "43" på nån idiotisk variabel bara för att. Då kan det vara bra för andra utvecklare att veta att det faktiskt ska stå just "43" där....iaf tills den dagen man upptäcker att det tydligen numera ska stå "44" men den leverantören tyvärr glömde berätta att dom uppdaterat...

Permalänk
Avstängd
Skrivet av improwise:

Det kan jag absolut hålla med om, men då tror jag problemet är större än bara ifall de skriver kommentarer eller inte

Denna tråd har börjat handla om kodkvaliet i stort inte bara kommentarer, men om personen skriver onödiga kommentarer är det en hint person inte heller kommer skriva kvalitativ kod

Skrivet av improwise:

För övrigt inte något jag tror är unikt för just programmerare heller, yrkesstolthet är så klart relevant även i andra jobb och tar sig olika uttryck. Min vurm för kommentater till trots så är det dock något närliggande som jag har klart mindre till övers för, och det är "alibidokumentation". Ni vet sån där man slänger ihop för att revisorer och annat anser att det behöver finnas, och vägrar inse att välstrukturerad kod och bra verktyg alla gånger slår ett inaktuellt Word-dokument med lite fina buzzwords. Samtidigt kan jag iof ha en viss förståelse för önskemålen måste jag erkänna, då det ger en känsla av trygghet, om än en falsk sådan.

Ang. kommentarer i kod så tycker jag det ofta finns ett ytterligare fall där det behövs, vilket är om man t.ex. anropar illa eller inte alls dokumenterade externa API:er och där man via trial and error kommit fram till att man typ ska skicka in "43" på nån idiotisk variabel bara för att. Då kan det vara bra för andra utvecklare att veta att det faktiskt ska stå just "43" där....iaf tills den dagen man upptäcker att det tydligen numera ska stå "44" men den leverantören tyvärr glömde berätta att dom uppdaterat...

Kommentarer ska säga varför inte hur, koden ska säga hur. Ditt exempel är "varför" och det är okej. Jag skrev ovan att min devlog inte innehöll kommentarer med det visade sig fel Men det var ett typexempel på varför.

Visa signatur