Får ni känslan att man kan alltid ha gjort bättre kod?

Permalänk
Medlem

Får ni känslan att man kan alltid ha gjort bättre kod?

Jag har en fundering.

Alltid när jag börjar med ett nytt projekt så går det oftast till mitten av projektet, då man kan se en tydlig struktur hurbprojektet fungerar. När projektet är klart så önskar jag att man hade kunde göra si och så redan från början. Då hade koden blivit bättre. Men så är inte fallet. Att göra om koden helt så blir det ju dubbeljobb.

Oftast sker detta när man använder nya bibliotek som man är ej van vid. Näsya projekt så blir det lite bättre, men ändå samma sak. Jag har ändå programmerat i många år och jag känner inte att jag blivit den där proffs-kodaren som skriver optimerat, igenomtänkt och obegriplig kod på hög nivå. Ett exempel på proffs-kod är OjAlgo och Deeplearning4J. Det skulle ta dagar och nätter för att förstå vad en liten javafil gör. Jag försöker hålla min kod jordnära och använder inget annat än grundläggade programmeringsmetodik.

Känner ni igen er?

Permalänk
Hedersmedlem

Så är det väl alltid? Det är alltid lätt att vara efterklok.

En tanke jag får är varför så många verkar vara rädda för dubbeljobb? Jag stöter på det ofta på jobbet. Man vill göra rätt direkt, men det kommer aldrig att gå eftersom man sällan vet allting om ett problem innan man löst det. Extra konstigt eftersom jag rör mig i agila miljöer där det ska vara naturligt att iterera.

Det är kanske ingen vinst i att skriva om kod som fungerar inom de ramar som krävs, men man ska inte vara rädd för att skriva om kod som ställer till problem, inte har den prestanda som krävs osv.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Inaktiv

Min instinktiva reaktion är att proffsig kod SKALL vara lättläst. Allt annat är bara barnsligt självhävdande. Bygg gärna något fantastiskt komplicerat när du hempular men skall det vara underhållsvänligt och skalbart så gäller disciplin och KISS.

Man kommer dit genom att hela tiden göra refactoring så koden hålls bra strukturerad. Mot slutet kan man släppa lite på disciplinen för att få ut koden genom dörren.

Mitt mått på hur bra en programmerare är INTE hur mycket han/hon kan av skumma tricks utan hur stor kodbas han/hon kan bygga upp innan 100% av tiden går åt till underhåll. En duktig ligger på uppåt miljonen rader kod. Då duger det inte med något annat än rent och snyggt.

Permalänk
Medlem

Självklart. Det är väl därför code-review och QA behövs?

Permalänk
Medlem
Skrivet av Kiddy:

Självklart. Det är väl därför code-review och QA behövs?

Kan man lägga upp sitt projekt där ? Ner det går väll inte?

Jag använder typ aldrig arv, interface eller någon annan mystisk OOP-teknik.

För mig så håller jag oftast till funktionell programmering, trots att jag kör java.

Skickades från m.sweclockers.com

Permalänk
Medlem
Skrivet av heretic16:

Jag har en fundering.

Alltid när jag börjar med ett nytt projekt så går det oftast till mitten av projektet, då man kan se en tydlig struktur hurbprojektet fungerar. När projektet är klart så önskar jag att man hade kunde göra si och så redan från början. Då hade koden blivit bättre. Men så är inte fallet. Att göra om koden helt så blir det ju dubbeljobb.

Oftast sker detta när man använder nya bibliotek som man är ej van vid. Näsya projekt så blir det lite bättre, men ändå samma sak. Jag har ändå programmerat i många år och jag känner inte att jag blivit den där proffs-kodaren som skriver optimerat, igenomtänkt och obegriplig kod på hög nivå. Ett exempel på proffs-kod är OjAlgo och Deeplearning4J. Det skulle ta dagar och nätter för att förstå vad en liten javafil gör. Jag försöker hålla min kod jordnära och använder inget annat än grundläggade programmeringsmetodik.

Känner ni igen er?

Jag är 100% på din linje. Jag älskar dock min luftiga lättlästa kod. Ibland får man göra om metoder eller funktioner helt från scratch men det är långt ifrån dubbelarbete, själva arbetet är ju att komma på hur koden borde vara, att sedan plita ner den brukar vara ganska enkelt. Jag är väldigt mycket för ett iterativt arbete snarare än att försöka göra helt rätt från början. Absolut sist, när jag inte tror det finns buggar kvar (det finns alltid buggar kvar) börjar jag i någon mån prestandaoptimera.

Jag fullkomligen avskyr kod som gör åtta saker på en rad. Omöjligt att debugga och sjukt svårläst.

Permalänk
99:e percentilen

Ja, jag känner igen det. Min målsättning är att skriva kod som ska vara enkel att refaktorera senare, när jag upptäcker bättre lösningar. Att packa det mesta av den i rena funktioner är ett hjälpsamt knep för att uppnå just detta mål (att koden ska vara enkel att refaktorera).

Skrivet av heretic16:

Jag har ändå programmerat i många år och jag känner inte att jag blivit den där proffs-kodaren som skriver optimerat, igenomtänkt och obegriplig kod på hög nivå.

Håller inte med om att dessa egenskaper är (eller de borde åtminstone inte vara) representativa för "proffs-kod". Men visst, det finns väl professionella programmerare som tenderar att producera sådant. (Jag är inte felfri själv heller!)

Skrivet av heretic16:

Kan man lägga upp sitt projekt där ? Ner det går väll inte?

?

Citat:

Jag använder typ aldrig arv, interface eller någon annan mystisk OOP-teknik.

Är inte förtjust i OOP som paradigm överlag, åtminstone inte som den ofta realiseras, men tycker att arv gjorde sig ganska väl i mitt bibliotek ts-preferences. Notera att klasserna jag skapat där i princip bara innehåller readonly-fält och rena funktioner.

Citat:

För mig så håller jag oftast till funktionell programmering, trots att jag kör java.

Det känner jag inte igen från dina tidigare trådar, men OK. Java kan vara väldigt frustrerande så fort man försöker skriva funktionell kod.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem
Skrivet av heretic16:

Kan man lägga upp sitt projekt där ? Ner det går väll inte?

Jag använder typ aldrig arv, interface eller någon annan mystisk OOP-teknik.

För mig så håller jag oftast till funktionell programmering, trots att jag kör java.

Skickades från m.sweclockers.com

Så istället för arv eller interfaces använder du hårdkodade implementationer och duplicerad kod?
Det underlättar enormt att skriva tester om allt är abstraherat till interfaces och använder sig av dependency injections.

Värsta är att skriva test för en metod som har 5 stycken new keywords i sig. Då går det inte att testa X utan att få 5 stycken Y på köpet.

Tog mig ganska lång tid innan jag använde interfaces och arv, men när jag väl började se vad de kunde göra för att underlätta arbetet så har jag börjat använda det det flitigt. Att abstrahera en implementation till ett interface betyder att du enkelt kan byta ut klassen som implementerar det, utan att det påverkar något annat i applikationen.

Exempel för interface.
Du behöver en bil för att komma till jobbet. Ditt garage pekar på ett interface för ICar.
Varje dag öppnar du garaget och har en bil, bilen har en metod som heter Start().
Varje dag är det en ny bil i ditt garage som du kör, men det märker inte du, för du behöver bara veta om att du ska använda Start().

Exempel för arv.
Du skapar en modell för en sida, alla sidor kommer att behöva SEO-taggar. Då skapar du en basklass för alla dina sidor och lägger dina properties för SEO taggarna på den, istället för att skriva dessa på varenda page.

Däremot håller jag med om att koden ska vara lättläst, tänk på att du själv kanske ska tillbaka in i det om 5 år och förstå vad du har gjort. Om det innebär lite fler kodrader så är det ändå värt det.
Det kanske är kul att skriva komplexa one-liners, men det är inte underhållsvänligt för personer som inte skrivit den koden.

Sen lär man sig alltid av sina misstag och applicerar i nya projekt.

Permalänk
Sötast

Skulle säga att det är en funktion de flesta människor har, att alltid sträva efter bättre och tyvärr såga sig själv alldeles för mycket.

Skillnaden i detta fallet är att man kan skriva om sin kod.

Om du byggt dit hus själv så hade du varit asnöjd med helheten, ångrat ett par dumma misstag, sagt till dig själv "om jag gör detta igen så lär jag....... istället"

Inte så att man river huset och börjar om
Med kod är det lättare att både såga sig själv och slänga/ge upp/börja om

Permalänk
Medlem
Skrivet av heretic16:

Jag har ändå programmerat i många år och jag känner inte att jag blivit den där proffs-kodaren som skriver optimerat, igenomtänkt och obegriplig kod på hög nivå.

Det skall du vara glad över. Obegriplig kod är dålig kod. Svårbegriplig men hårt optimerad kod kan vara försvarlig i vissa fall, men då skall den vara mycket välkommenterad så det ändå går att hänga med i hur den fungerar.

Men för att övergå till originalfrågan: Visst, när man använder ett nytt programmeringsspråk eller ett nytt ramverk, eller nya bibliotek så blir det inte perfekt från början. Det tar tid att lära sig nya verktyg, och hur man använder dem på bästa sätt.

Få en perfekt design på ett större projekt från början är svårt, men en design som bara är "bra" kommer man långt med.

Men just därför att det är svårt att få allt rätt från början så anser åtminstone jag att ett kriterium på bra kod är att den är lätt att ändra på.

Permalänk
Medlem

Mycket var bättre förr då minnet, cpu och diskutrymme satte skarpa gränser.

Man tvingades skriva effektiv kod. Sista åren jag jobbade såg jag skräckexempel på dålig kod, speciellt i c++. När jag började jobba hette språket FORTRAN IV. Det var på sjuttiotalet. (Modern variant av fortran finns gratis i GCC om man vill).

I dag ser man ofta usla skrivna program som äter upp minnet. Det var inget problem förr. Det fanns inget minne att äta upp!

Permalänk
Medlem

Gör varje gång mycket renare kod när jag kodar Php/html. Så ja Man lär sig något nytt varje gång.

Visa signatur

Samsung 34'' ultrawide curved
Logitech MX master & Logitech g910
Creative SoundBlaster Katana

Permalänk
Hedersmedlem
Skrivet av Irre:

Mycket var bättre förr då minnet, cpu och diskutrymme satte skarpa gränser.

Man tvingades skriva effektiv kod. Sista åren jag jobbade såg jag skräckexempel på dålig kod, speciellt i c++. När jag började jobba hette språket FORTRAN IV. Det var på sjuttiotalet. (Modern variant av fortran finns gratis i GCC om man vill).

I dag ser man ofta usla skrivna program som äter upp minnet. Det var inget problem förr. Det fanns inget minne att äta upp!

Vill du utveckla det? Min gissning är att programmen förmodligen inte var helt lättlästa när det skulle optimeras mycket för att hålla nere resursanvändandet. Idag ligger kostnaden på utvecklingstid. Att spendera tid på optimering är sällan rekommenderat om det inte verkligen är kritiskt. Man ser hellre att koden är lätt att underhålla och läsbar.

Kod kan alltid förbättras, inget konstigt med det. Få personer har heller perfekt koll på språket, arkitektur, design, testning osv för att skapa felfritt program. Att förvänta sig det är galenskap.

Permalänk
Medlem

Koda på ett sådant sätt att du inte behöver kommentera koden. Upprepa inte dig själv och skriv lite kod, mycket kod ökar komplexiteten. Utforska bibliotek, skriv inte saker från grunden. Använd alltid linters och prettiers, var konsekvent med hur din kod ser ut! Det kommer du långt på. Kika på andras projekt för inspiration för bra arkitektur och design, kan starkt rekommendera det för snabb inlärning av "best practises".

Att skriva om kod, cleanups, refactoring, etc, är i mitt åsikt något av det roligaste man kan göra. För i de flesta fall vill jag skriva om allt, vilket betyder att jag lärt mig mycket och utvecklats som en programmerare Jag har dock varit med om att jag inte ens kan starta ett projekt för att det ska vara "perfekt" från första början. Vad jag gjort då är att skita i all läsbarhet, arkitektur, osv. Det är lite som att måla, först gör du en lätt skiss på vad du vill få gjort, för att komma igång.

Kanske inte svaret

Skickades från m.sweclockers.com

Permalänk
Medlem

Min lärare i programmering förklarade att 80% av ett program ska vara gjort på papper innan man ens startar datorn. Självklart struntade alla i det men nu 30 år senare är det exakt så jag gör. Kanske inte på papper men med mycket fyrkanter och streck för att räta ut frågetecken och headers.

Så jag ger samma mossiga råd. Gör programmet på papper först, innan du startar datorn. (och självklart struntar alla kidsen i det.)

Visa signatur

"Om man arbetar tillräckligt länge med att förbättra ett föremål går det sönder. "

Hjälp oss göra världen lite snällare! www.upphittat.nu

Permalänk
Medlem
Skrivet av Irre:

Mycket var bättre förr då minnet, cpu och diskutrymme satte skarpa gränser.

Man tvingades skriva effektiv kod. Sista åren jag jobbade såg jag skräckexempel på dålig kod, speciellt i c++. När jag började jobba hette språket FORTRAN IV. Det var på sjuttiotalet. (Modern variant av fortran finns gratis i GCC om man vill).

I dag ser man ofta usla skrivna program som äter upp minnet. Det var inget problem förr. Det fanns inget minne att äta upp!

tycker inte man kan säga bättre, enklare. Projekt kunde aldrig vara så stora som idag så behovet av lättunderhållen strukturerad kod var inte lika stort, det var i princip alltid prioriterat med optimeringar, tom i form av storleken på källkoden eftersom man had begränsat utrymme att spara den på vilket ledde till korta kryptiska variabelnamn och sämre inline-dokumentation.

Permalänk
Medlem
Skrivet av ZecretW:

Min lärare i programmering förklarade att 80% av ett program ska vara gjort på papper innan man ens startar datorn. Självklart struntade alla i det men nu 30 år senare är det exakt så jag gör. Kanske inte på papper men med mycket fyrkanter och streck för att räta ut frågetecken och headers.

Så jag ger samma mossiga råd. Gör programmet på papper först, innan du startar datorn. (och självklart struntar alla kidsen i det.)

Det här! Skulle precis fråga TS hur mycket planering som görs innan kodningen startar. Men du sa precis mina tankar.

Skickades från m.sweclockers.com

Visa signatur

Processor: Motorola 68000 | Klockfrekvens: 7,09 Mhz (PAL) | Minne: 256 kB ROM / 512 kB RAM | Bussbredd: 24 bit | Joystick: Tac2 | Operativsystem: Amiga OS 1.3

Permalänk
Medlem
Skrivet av talonmas:

Det här! Skulle precis fråga TS hur mycket planering som görs innan kodningen startar. Men du sa precis mina tankar.

Skickades från m.sweclockers.com

Tillräckligt för att börja, man jobbar väl agilt?

Permalänk
Medlem
Skrivet av zaibuf:

Tillräckligt för att börja, man jobbar väl agilt?

Hur menar du att agiliteten skulle påverka? Koden måste ju ändå planeras. Särskilt om man är många som checkar in kod på samma projekt. Anarki bland kodare leder sällan till lyckad förvaltning fem år senare.

Skickades från m.sweclockers.com

Visa signatur

Processor: Motorola 68000 | Klockfrekvens: 7,09 Mhz (PAL) | Minne: 256 kB ROM / 512 kB RAM | Bussbredd: 24 bit | Joystick: Tac2 | Operativsystem: Amiga OS 1.3

Permalänk
Medlem
Skrivet av heretic16:

När projektet är klart så önskar jag att man hade kunde göra si och så redan från början.

Tja, det är väl därför "många" idag letar efter "seniora" utvecklare? I hopp om att få fatt på folk som redan gjort saker förr och lärt sig.
Tror dom flesta känner som du. Jag är nästan aldrig helt nöjd med nått jag släpper ifrån mig.

Skrivet av giplet:

En tanke jag får är varför så många verkar vara rädda för dubbeljobb? Jag stöter på det ofta på jobbet. Man vill göra rätt direkt, men det kommer aldrig att gå eftersom man sällan vet allting om ett problem innan man löst det. Extra konstigt eftersom jag rör mig i agila miljöer där det ska vara naturligt att iterera.

Håller med dig i sak helt och hållet, men verkligheten är ju ofta en annan. Där jag är nu är backloggen så fylld att man badar i case, alla vilka borde varit klara senast i förrgår. Att ens lägga 10 min mer än "bare-minimum" på något är helt otänkbart.

Dvs "agilt" har för mången upper-management blivit likställt med "släpp massa nya features hela tiden skitfort".

Ett annat problem jag ofta stöter på är att folk har en enorm uppgivenhet av all trött legacy. Jag förstår inte hur det i ett så "ungt" yrke/område som it/kod kan finnas så uttahelvete mycket skräp. Men beror väl på det jag skrivit ovan.
Hur som helst så är det jag stöter på nått i stil med "det spelar ingen roll hur bra vi gör den nya koden då det ändå är 15 år av gammalt skräp som fortsätter haverera". Folk är bara människor, och dom saknar motivation, trist men sant.
Givetvis är detta något som "man" eller "dom" då borde jobba på, men när det återigen är stor brist på personal och alla redan är maxlastade med att spruta ut kod i takt nog så finns inte den orken.

Permalänk
Medlem
Skrivet av talonmas:

Hur menar du att agiliteten skulle påverka? Koden måste ju ändå planeras. Särskilt om man är många som checkar in kod på samma projekt. Anarki bland kodare leder sällan till lyckad förvaltning fem år senare.

Skickades från m.sweclockers.com

Det jag menar är att man inte stänger in sig i en källare i en vecka och planerar hela projektet. Utan man planerar för de features man jobbar på i sprinten så att man kan komma igång. Samtidigt behöver man inte gå in i super detalj, bara alla är på samma bana om lösningen. Sen dyker det alltid upp frågor under vägen, och det tar man då. En kund kan ju hastigt ändra sig om en feature och då kan du inte sitta och planera hela ditt projekt i förväg.
Dock så kanske vi pratar om olika saker nu, men var detta jag menade.

Själv föredrar jag att jobba TDD och skriver oftast mina unittest (om möjligt) före implementationen. Det tar lite längre tid, men ger enligt mitt tycke ett bättre slutresultat.

Permalänk
Hedersmedlem
Skrivet av BasseBaba:

Håller med dig i sak helt och hållet, men verkligheten är ju ofta en annan. Där jag är nu är backloggen så fylld att man badar i case, alla vilka borde varit klara senast i förrgår. Att ens lägga 10 min mer än "bare-minimum" på något är helt otänkbart.

Dvs "agilt" har för mången upper-management blivit likställt med "släpp massa nya features hela tiden skitfort".

Ett annat problem jag ofta stöter på är att folk har en enorm uppgivenhet av all trött legacy. Jag förstår inte hur det i ett så "ungt" yrke/område som it/kod kan finnas så uttahelvete mycket skräp. Men beror väl på det jag skrivit ovan.
Hur som helst så är det jag stöter på nått i stil med "det spelar ingen roll hur bra vi gör den nya koden då det ändå är 15 år av gammalt skräp som fortsätter haverera". Folk är bara människor, och dom saknar motivation, trist men sant.
Givetvis är detta något som "man" eller "dom" då borde jobba på, men när det återigen är stor brist på personal och alla redan är maxlastade med att spruta ut kod i takt nog så finns inte den orken.

Du verkar inte jobba på ett hälsosamt företag. Jag jobbar numera som ledare/chef och kör inställningen med mina medarbetare att om den gamla skiten inte funkar som den ska är det ju ingen mening att släppa ny skit.

Sedan får jag också känslan av att ni inte prioriterar kvalitet. Använder ni automatiska tester? Automatiska tester är "the shit" för att kunna släppa nya features i snabb takt. Man klarar sig långt på unittester och komponentester (black box API-test och liknande). Om ni säkrar upp det nya ni släpper så blir det även mycket lättare att göra refakturering eftersom man märker direkt om den nya koden inte funkar lika bra som den gamla. Tänk på att businesskraven ska styra villkoren i testerna, även unittest, så att ni testar det som faktiskt betyder något och inte bara testar kod.

Man måste börja göra saker bättre för att det ska bli bättre.

Skrivet av talonmas:

Hur menar du att agiliteten skulle påverka? Koden måste ju ändå planeras. Särskilt om man är många som checkar in kod på samma projekt. Anarki bland kodare leder sällan till lyckad förvaltning fem år senare.

Skickades från m.sweclockers.com

Problemet är att det inte går att planera koden eftersom man inte har kunskapen att göra det förrän man skrivit den. Det blir lite hönan och ägget och man lägger ner väldigt mycket tid på förarbete och ändå blir det fel. Man behöver så klart strukturera upp vad som ska göras var, men sedan tycker jag att det är bättre att prova och skriva om ifall det blir fel snarare än att detaljplanera från början.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av BasseBaba:

Tja, det är väl därför "många" idag letar efter "seniora" utvecklare? I hopp om att få fatt på folk som redan gjort saker förr och lärt sig.
Tror dom flesta känner som du. Jag är nästan aldrig helt nöjd med nått jag släpper ifrån mig.

Håller med dig i sak helt och hållet, men verkligheten är ju ofta en annan. Där jag är nu är backloggen så fylld att man badar i case, alla vilka borde varit klara senast i förrgår. Att ens lägga 10 min mer än "bare-minimum" på något är helt otänkbart.

Dvs "agilt" har för mången upper-management blivit likställt med "släpp massa nya features hela tiden skitfort".

Ett annat problem jag ofta stöter på är att folk har en enorm uppgivenhet av all trött legacy. Jag förstår inte hur det i ett så "ungt" yrke/område som it/kod kan finnas så uttahelvete mycket skräp. Men beror väl på det jag skrivit ovan.
Hur som helst så är det jag stöter på nått i stil med "det spelar ingen roll hur bra vi gör den nya koden då det ändå är 15 år av gammalt skräp som fortsätter haverera". Folk är bara människor, och dom saknar motivation, trist men sant.
Givetvis är detta något som "man" eller "dom" då borde jobba på, men när det återigen är stor brist på personal och alla redan är maxlastade med att spruta ut kod i takt nog så finns inte den orken.

Låter som en dålig scrum master, som inte kan förhandla med produktägaren om rimligheten på kraven kontra er arbetshastighet, eller att ledning har lovat massa saker som inte är möjligt att hålla.
Är dock en fin balans, är man lite stressad så arbetar man mer produktivt, är man för stressad så är det stor risk att det blir mycket fulkod och buggar. Har man för lugnt är risken åt andra hållet, att man knappt gör nånting 😅

Antingen betalar man för kvalité, eller så får man skitkod som om 5 år måste göras om helt från grunden för att allt sitter ihop som spaghetti.

Skickades från m.sweclockers.com

Permalänk
Avstängd

Hade en kollega som då programmerade PLC:kod, inte exakt samma men ändå. Han gjorde programmen så krångliga att han själv inte kunde felsöka i dem så det blev enklast att skriva om programmet om något inte funkade.
Oftast funkade allt som det skulle men blev problem om man ville lägga till funktioner också.

Visa signatur

Chassi: Fractal Design Define R3 Black, Mobo: ASUS Z170 Pro Gaming, CPU: Intel i7 6700K, kylning CM Hyper 212 EVO, RAM: 32 GB Hyper X 3000 mhz, GPU: Nvidia MSI 1080 Gaming X, PSU: XFX Core Edition Pro 750W, Mus: Logitech G700, Tgb: Corsair Raptor K30, OS: Win10

Permalänk
Datavetare
Skrivet av heretic16:

Jag använder typ aldrig arv, interface eller någon annan mystisk OOP-teknik.

<rant>
Att inte använda OOP med än nödvändigt är väl rätt nyktert 2019, om någon har bra motexempel får de gärna motbevisa mig men vad av det som är unik för OOP är det någon som idag försvara som "bra"?

Att inte programmera mot interface känns dock lite bonkers, varför gör du inte det?
Många sätter likhetstecken mellan OOP och saker som "polymorfism". Polymorfism är inte på något sätt unik för OOP utan är väldigt användbart, t.ex. genom att programmera mot ett väldefinierat interface som implementeras på olika sätt beroende på underliggande typ ("klass" är bara en specialisering av "typ").

De saker jag kan komma på som unika för OOP är implementationsarv (som nog de flesta är med på att man bör undvika idag), hopkoppling av data och beteende (som faktiskt motverkar "reuse", något som OOP var tänkt att förbättra...) samt inkapsling (som är en dålig idé om man effektivt vill använda många CPU-kärnor).

En annan riktigt dålig idé, fast den är inte unik för OOP, är exceptions. Java gjorde ett rätt misslyckat försök att laga det mest slående problemet med exceptions (bättre namn är nog goto-on-steroids): om jag bara känner till signaturen på en funktion/metod kan jag ändå inte säga vilket typ har data som jag får tillbaka? Detta försökte Java fixa genom att tvinga funktioner lista både returtyp och alla exceptions som kan hända.
</rant>
Det skrivet, finns trots allt nischer där OOP är rätt val! Ramverk för UI är ett bra exempel, de passar perfekt för abstraktionen och är i praktiken rätt hopplöst att skala med CPU-kärnor.

Självklart finns det saker som man inser att kunde ha gjorts bättre i efterhand och detta citat är lika sant idag som när det skrevs för 44 år sedan (The Mythical Man-Month)

The management question, therefore, is not whether to build a pilot system and throw it away. You will do that. […] Hence plan to throw one away; you will, anyhow.

Men finns ett ännu mer träffande citat

Perfect is the enemy of good

Även om man skriver en pilot, tar all tänkbar lärdom, slänger bort den och sätter sig och knackar kod så kommer det med väldigt nära 100 % säkerhet inte bli perfekt. Man har inte alla fakta, saker ändras under resans gång, tid är en resurs som man inte kan skaffa mer av oavsett hur mycket pengar man har...

Ser i tråden de vanliga klyschorna om att "bra kod inte kräver kommentarer". Det är definitivt fel. Finns kod som är så välskriven att man enkelt förstår vad den gör. Men i många fall är det helt hopplöst att få svar på frågan varför en viss algoritm är vald, vad syftet med funktionen/modulen är samt i stora komplexa system finns tyvärr ofta implicita antaganden som var uppenbara för den som skrev koden men som mycket väl inte går att se om man bara studerar funktionen/modulen i isolation.

Det betyder inte att man ska skriva massor med kommentarer. Tvärtom, allt som går att uttrycka i kod ska uttryckas i kod för kompilatorer/datorer läser inte kommentarer! Men finns saker som endera uttrycks i en kommentar och därmed underlättar rejält för de människor som försöker förstå koden eller så finns inte den informationen på något lättillgängligt sätt.

Saker har ändå blivit långt bättre genom åren. Väldigt få som ifrågasätter värdet av unit-tester som en självklar del i utveckling. Överhuvudtaget är insikten kring värdet av automatiskt testning relativt hög. Tester underlättar också för de som försöker förstå en kodbas, tester kan därmed i viss mån ersätta kommentarer (för de som absolut vill minimera mängden kommentarer).

Sen finns det vissa som fortfarande verkar se ett värde i "komplicerad kod" (kod kan med fog vara komplicerad om den löser ett komplex problem, men detta refererar till onödig komplexitet)... Har vid ett tillfälle fått kommentaren: "vi är missnöjd med priset vi betalade för er kod (hundratusentals rader), den var väldigt dyr men vi har inga problem alls att förstå vad den gör så det verkar ju inte så svårt". Vad svarar man på det

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av heretic16:

Jag har en fundering.

Alltid när jag börjar med ett nytt projekt så går det oftast till mitten av projektet, då man kan se en tydlig struktur hurbprojektet fungerar. När projektet är klart så önskar jag att man hade kunde göra si och så redan från början. Då hade koden blivit bättre. Men så är inte fallet. Att göra om koden helt så blir det ju dubbeljobb.

Oftast sker detta när man använder nya bibliotek som man är ej van vid. Näsya projekt så blir det lite bättre, men ändå samma sak. Jag har ändå programmerat i många år och jag känner inte att jag blivit den där proffs-kodaren som skriver optimerat, igenomtänkt och obegriplig kod på hög nivå. Ett exempel på proffs-kod är OjAlgo och Deeplearning4J. Det skulle ta dagar och nätter för att förstå vad en liten javafil gör. Jag försöker hålla min kod jordnära och använder inget annat än grundläggade programmeringsmetodik.

Känner ni igen er?

Alltid. Leker lite sporadiskt med php, och upptäcker alltid hur det kan förbättras och göras smidigare. Just nu arbetar jag på att försöka skapa effektiva hooks för att man ska kunna göra extensions längre fram.