Vad betyder uttrycket dålig kod när det kommer till programmering?

Permalänk
Inaktiv

Vad betyder uttrycket dålig kod när det kommer till programmering?

Hej. Jag undrar en sak och jag har hört uttrycket dålig kod några gånger på olika forum. Men frågan är vad betyder det? Är det att man använder saker och ting i sin kod som inte är modernt längre eller vad menas med det?

Permalänk
Medlem

Det finns många saker som gör kod dålig. Den kan vara ineffektiv (tar mer minne eller klockcykler i anspråk än vad som är nödvändigt), den kan vara osäker (hanterar inte felfall på ett bra sätt, innehåller kända sårbarheter, etc.), den kan vara svårarbetad (icke-idiomatisk, dåligt kommenterad, dåligt formatterad, etc.).

Sen finns det ett stort utrymme för tyck-och-smak, när det kommer till programmering. En del vill ha loopar, andra gillar list-comprehensions. En del tycker att map och reduce är det bästa sedan skivat bröd, medans andra tycker att det gör koden svårläst.

Visa signatur

:(){ :|:& };:

🏊🏻‍♂️   🚴🏻‍♂️   🏃🏻‍♂️   ☕

Permalänk
Medlem

Det är väl ett rätt brett begrepp för kod som är dålig.

Kan betyda lite allt möjligt.

-Rörigt skriven kod som är svår att tyda
-Ineffektiv kod som tar många fler beräkningar på sig för att nå samma resultat som något snabbare.
-Kod som inte är konsekvent formatterad med indrag på samma ställen etc.
-Kod med minnesläckor och buggar

Och så vidare.

Tänk att man antingen har en liten rad som skriver ut Hello World jämfört med en lång funktion som tar in platsen i alfabetet på bokstäverna man vill få ut, itererar över dem tills de får en träff och sedan skriver ut en bokstav i taget. Sama slutresultat men en metod är objektivt sämre.

Visa signatur

Raven RV02-e // 2500k@4.5GHz // 16GB 1866MHz // Sapphire 390// AX1200 // Silver Arrow // AsRock p76 E4 Gen 3 // Majestouch 2, bruna // 128GB Crucial m4 som systemdisk, 2TB WD Green som lagring och BX100 250GB för spel // ATH-m50x

AW 14
"Citera" för svar

Permalänk
Medlem

Det beror helt på vilket sammanhang uttrycket används i.

Rent generellt är väl "Dålig kod" något som inte kommer vara hållbart i längden (förvaltningsbart), ineffektivt, sårbart, onödigt komplicerad m.m.
"Magiska siffror" och liknande är väl klassiska exempel på just dålig kod då det gör koden mycket svårare att förvalta.

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB
LG C2 42" 4K@120Hz AOC Q27G2U 1440P@144Hz

Permalänk

Det finns många olika orsaker och det är egentligen samma sak som en dåligt snickerijobb.
Första rent självklara orsaken så kan såklart utövaren vara dålig/slarvig.

Men ofta man har ett problem. Det finns femhundraelvamiljarder sätt att lösa problemet på, vissa sätt är alltid korkade, andra beror på en mängd faktorer som det exakta problemet, vilken kompetens/verktyg arbetarna besitter och hur man tror framtiden utvecklas. Sedan kan man stöta på buggar i de verktyg man använder och det gäller att ha väl kännedom om dem redan innan man påbörjar.

Ett problem är att en seniorutvecklare idag kostar runt 1500kr/h och måste ha 100% faktueringsgrad. Det blir väldigt snabbt dyrt. Och ens lösningar består mycket av copypaste kod. Man kan då få en lösning som inte helt är optimerad för ens lösning, hade man själv lagt ner 8h extra på att skriva en själv så hade den blivit bättre. Men vill kund betala 12 000kr extra för detta? Det beror på, är det en funktion som inte används så ofta nej. Och även om man kan tycka denna engångskostnad är liten så stöter man på samma dilemma hela tiden.

*edit*
Snickare har för övrigt liknande dilemma. De kan göra mycket själv, men börja inte ge sig på att tillverka skräddarsydda möbler och annat som finns färdigt om ni inte har en otrolig köpkraftig kund.

*edit2*
Exempel på frågeställning vad som är en bra lösning.
Jag har utvecklat en mängd verktyg helt på egen fritid. Vissa av dessa verktyg körs helt singeltrådat förutom guit såklart.
Jag kan supersnabbt ändra foreach till for Parallel.ForEach och få säg 20% bättre prestanda. Jag kan gå in i iodelen och anpassa den och säkerligen få upp prestandan flera hundra procent.

Men vilken lösning är bäst? Jag har i mitt fall kommit fram till det enkla singeltrådade, då det är så otroligt enkelt att felsöka och underhålla. Verktygen börjar från ett ställe, skulle det bli något fel så kan man så enkelt felsöka därifrån. -Jag får indata från 3:e part som kan innehålla konstigheter.
Multitrådade lösning med ökad prestanda kräver dessutom mycket mer utvecklingstid.

*edit3*
Ett annat problem har varit att anpassa saker till gammal hårdvara. Jag har struntat i stöd för sämre än fullhd hur länge som helst och användare av ett sämre mobiler/laptop har klagat. Och man har svarat dem att så här mycket kostar det att bygga om för din hårdvara, det blir billigare för er att köpa ny telefon/laptop.

Och nej i alla miljöer är det inte bara ändra lite layout. Så kostnaden för att stöda 1600*900 upplösningen uppskattar man kanske till 100 000kr.

Permalänk

Finns mycket, oläsbar kod, dålig arkitektur osv. Ibland får vissa utvecklare för sig att skriva one-liners vilket är helt oläsligt. Lika oläsligt som regex.

Permalänk
Medlem

Skriv ett program på 5000 rader. Kom tillbaka ett år senare. Om du enkelt kan expandera programmet så har du bra kod. Om du måste läsa igenom allt och hoppa till referenser för att se vad sjutton som pågår, ja då har du dålig kod.

Icke optimerad kod tycker jag personligen är mer dåligt program än dålig kod. Men mina ögon är en testares, inte en programmerare.

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 anon341792:

Hej. Jag undrar en sak och jag har hört uttrycket dålig kod några gånger på olika forum. Men frågan är vad betyder det? Är det att man använder saker och ting i sin kod som inte är modernt längre eller vad menas med det?

Oftast: Kod som inte jag själv har skrivit och jag är för korkad för att sätta mig in i hur någon annan tänker.

Men det kan så klart betyda tusen andra saker också, med mer substans.

Ett exempel på dålig kod är den svenska juridiken kring avtal vid konsumentköp. Det styrs bland annat av:
- Allmänna avtalsrättsliga principer
- Lag om avtal
- Konsumentköplagen
- Eventuellt distansavtalslagen
- Eller kanske av konsumenttjänstlagen, om det är en tjänst du köpt
- Praxis (domar) från olika instanser, inklusive ARN (fast ARN-beslut är inte bindande…)
- Förarbeten för de ovan nämnda lagarna
- Ibland gamla versioner av lagarna om köpet gjordes när en gammal lag var gällande, nya/gamla konsumentköplagen är ett aktuellt exempel
- Doktrin (lärda juristers publicerade böcker om lagar, domar och förarbeten) som domstolar ibland refererar till i domar

Det är lite av en röra att läsa in sig på eftersom logiken är utspridd på många ställen och det är inte enkelt att hitta vad som ska gälla i just det specifika fall som man är intresserad av just idag. Samma situation uppstår ofta i IT-system som byggts ut efter hand för att stödja fler och fler användningsfall/specialfall. Det krävs en speciell form av envishet och domänkunskap för att navigera rätt i ett sådant system oavsett om man är jurist eller programmerare. Dessutom är det alltid någon jävel som varit inne och ändrat i koden sedan man utredde samma problem förra gången.

Permalänk

Dålig kod kännetecknas främst av att den i normalfallet gör det den är ämnad att göra men att beteendet vid små avvikelser från förväntade förutsättningar antingen är okänt, felaktigt eller orsakar körtidsfel.

Dålig kod identifieras genom undermålig struktur som kan vara otillräckligt strukturerad likväl som överdrivet strukturerad. I båda fallen blir logiken svårföljd varpå kodens beteende vid avvikelser blir svårt att förutse.

Dålig kod skapas, från min erfarenhet, när kod inte konstrueras på ett förvaltningsbart sätt.

Det finns en tendens bland organisationer, privata såväl som offentliga, att endast avsätta tid för utveckling av ny funktionalitet. Att avveckla, förenkla och förbättra är om något minst lika viktigt för en kodbas långsiktiga förvaltningsbarhet. Det är dock abstrakt och kostsamt och därmed svårt att sälja in till både ledning och slutkund.

Ineffektiv kod behöver nödvändigtvis inte vara dålig kod men dålig kod tenderar att vara ineffektiv.

Permalänk
Medlem

Som andra redan skrivit finns det många olika saker som kan göra att kod anses vara dålig. Ett konkret exempel är att använda sig av goto. Det brukar av många anses vara dålig kod 🙂

Visa signatur

Acer Predator Helios 18 Core i9 32GB 1024GB SSD RTX 4080 250Hz 18"

Permalänk

Vill hävda att det är ett rätt dåligt uttryck ”dålig kod”. Det säger inte särskilt mycket och är inte direkt objektivt.

Visa signatur

System.out.print(madness ? this.is.SPARTA : "");