Varför skriver vissa så otroligt komplicerad C-kod?

Permalänk

Varför skriver vissa så otroligt komplicerad C-kod?

Jag satt och sökte runt lite på GitHub om C-kod och jag hittade rätt mycket C-kod. Men det som jag alltid stöter på är att C-kod som skrivs av många, görs på ett väldigt....avancerat sätt.

Varför då?
Man blandar in alla möjliga nyckelord och verkligen masskriver C-kod för att lösa ett litet problem som kan göras med en liten array, pekare och if-satser.

Jag tänker först och främst på sorteringslagoritmer. Men detta gäller mycket av C-kod i allmänhet. Vissa verkar ha fastnat vid C89....

För mig väljer man att skriva C-kod för att det ska vara enkelt. Så lite kod som möjligt är den bästa koden.

Permalänk
Medlem

Olika skolor.
Lätt läst = lätt att korrigera och hitta fel, tar mer utrymme
Svårt läst = möjligen snabbare exekvering, kända funktioner så som sortering tar mindre plats/rader.

För utomstående är lätt läst bättre.
Ofta spelar prestandan mindre roll om programmet är för en PC, är det dock för en MCU så vill man hålla nere på minnesanvändningen och antalet CPU cykler, kan ibland bli mer avancerad kod.

Permalänk
Medlem

De flesta "avancerade" C-kodare är nog lite äldre vid det här laget. Så tror det kan vara så lätt att de inte litar på kompilatorn. Dåtidens kompilatorer var inte lika bra på att optimera koden som skrevs. Idag kommer du undan med lättläst kod för kompilatorn gör om det till komplext i bakgrunden.

Så de är fast i gamla banor också. Var även "coolt" och "prestige" att skriva avancerad kod förr i tiden när det inte fanns så många programmerare. Men idag när man lär sig programmering redan i förskoleklass så är det inte så imponerande att kunna koda längre.

En duktig, på riktigt, programmerare gör både lättläst OCH effektiv kod. Svårläst kod = dålig programmerare i min mening.

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:

De flesta "avancerade" C-kodare är nog lite äldre vid det här laget. Så tror det kan vara så lätt att de inte litar på kompilatorn. Dåtidens kompilatorer var inte lika bra på att optimera koden som skrevs. Idag kommer du undan med lättläst kod för kompilatorn gör om det till komplext i bakgrunden.

Så de är fast i gamla banor också. Var även "coolt" och "prestige" att skriva avancerad kod förr i tiden när det inte fanns så många programmerare. Men idag när man lär sig programmering redan i förskoleklass så är det inte så imponerande att kunna koda längre.

En duktig, på riktigt, programmerare gör både lättläst OCH effektiv kod. Svårläst kod = dålig programmerare i min mening.

Fliker bara in

Only 0.5% of the world's population knows how to code, which means 99.5% don't know how to build websites and mobile apps. Actually less than 18.5 million developers according to this study from IDC, and 7.2 billion people on the planet, which gives 0.26%.
https://www.infoq.com/news/2014/01/IDC-software-developers/
Studien är 8 år gammal, så får ta det med en nypa salt.

Sen håller jag med om att förvaltningsbar kod (dvs lättläst) är att föredra före komplex. Finns konsulter som gillar att styla och går bananas, sen är det ingen som kan ta hand om koden när de lämnat uppdraget.

Permalänk
Hedersmedlem

Anledningen till att folk skriver i c är väl ofta att man antingen vill ha maximal prestanda eller möjlighet att köra på begränsad eller obskyr hårdvara. Kanske är man beredd att offra läsbarhet om det ger fördelar i dessa avseenden?

Permalänk
Skrivet av heretic16:

Jag satt och sökte runt lite på GitHub om C-kod och jag hittade rätt mycket C-kod. Men det som jag alltid stöter på är att C-kod som skrivs av många, görs på ett väldigt....avancerat sätt.

Varför då?
Man blandar in alla möjliga nyckelord och verkligen masskriver C-kod för att lösa ett litet problem som kan göras med en liten array, pekare och if-satser.

Jag tänker först och främst på sorteringslagoritmer. Men detta gäller mycket av C-kod i allmänhet. Vissa verkar ha fastnat vid C89....

För mig väljer man att skriva C-kod för att det ska vara enkelt. Så lite kod som möjligt är den bästa koden.

Om du frågar mig så får du nog förtydliga rätt mycket vad du i överhuvudtaget menar. Nyckelord? Alla giltiga c-nyckelord är ok att använda, de finns där av en anledning. Sorteringsalgoritmer? Huruvida de är komplicerade eller inte låter jag vara osagt, men de standardiserade sorteringsalgoritmerna som qsort, mergesort, radixsort är ett så kallat "löst problem". Det säger kanske något om mig och vilka problem jag försöker lösa på jobbet, men jag är embedded programmerare och senast jag behövde skriva en sorteringsalgoritm "from scratch" i C var nog på LTH för ca 10 år sedan i någon kurs Kollar du på production ready code eller någons random hello world github? Det spelar egentligen ingen roll, har du verkligen försökt sätta sig dig in i vilket / vilka problem projektet försöker lösa? Vid en första anblick kanske koden ser ut att vara "överkomplicerat" men ofta är det så av en anledning. Länka något specifikt repo så kanske du eventuell får någon vettig feedback på forumet, men först och främst bör du ju skicka pull request på din förbättring / kontakta ägaren om du har hittat ett genuint problem / förbättring.

Permalänk
Medlem

Kod som är svårläst för dig kan vara lättläst för någon annan, speciellt i språk du inte kan så bra och inom områden du inte har skrivit så mycket kod inom.

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Medlem

Jag har ingen erfarenhet av att man skriver så avancerad kod IRL.
Jag själv föredrar att använda färdiga prylar t.ex. bibliotek, så jag slipper skriva saker själv. Kanske endast några rader.

Syftar du på lösningar du hittar på t.ex. stackoverflow, så är det mycket skrytnivå där. Man vill få så många upvotes som möjligt. Därför skriver man onödigt komplicerad kod för att få bekräftelse.

Finns seriöst vissa som verkar leva för att bli upvotade där.

Visa signatur

[IT-Dept]
Ryzen 1700 OC - 32 - 1070

Permalänk
Medlem
Skrivet av heretic16:

Man blandar in alla möjliga nyckelord...

Gällande att använda alla nyckelord så är det väl för att utnyttja språket.

Skrivet av heretic16:

... och verkligen masskriver C-kod för att lösa ett litet problem ...

C tillhandahåller inte jättemycket funktionalitet vilket ofta kräver lite mer kod jämfört med andra språk.

Skrivet av heretic16:

... för att lösa ett litet problem som kan göras med en liten array, pekare och if-satser.

Detta låter som att du underskattat problemet som koden försöker lösa eller så borde du lägga en patch.

Skrivet av heretic16:

Jag tänker först och främst på sorteringslagoritmer ...

Sorteringsalgoritmer är oftast komplexa och optimerade för prestanda.

Skrivet av heretic16:

... Men detta gäller mycket av C-kod i allmänhet ...

Hade varit intressant att se exempel.

Skrivet av heretic16:

... Vissa verkar ha fastnat vid C89....

Detta kan bero på att många C-projekt gör åtagande att vara portabla och bakåtkompatibla. Även här hade det varit intressant med exempel på kod och dina lösningsförslag med features från nyare C-standarder.

Permalänk
Avstängd

Vad jag förstått så kan de saker du beskriver undviks, t.ex. if-satser, arrayer och pekare, påverka runtime och minnesallokering negativt. CPUns logikenhet utför pipelining snabbare utan if-satser t.ex och arrayer drar minne.

Om man då kan vara så snitsig att man undviker ovan med några fler rader kod så är det ett plus. Såvida man inte involverar andra saker som påverkar körtid och minne ännu mer.

Jag kan ha fel, jag har bara läst Datavetenskap men har inget första IT-jobb än.