Forum: Projekte & Code "Gute" Projekte & Code


von Bisswegierig (Gast)


Lesenswert?

Wie/wo findet man "guten" C Code von embedded Projekten?

https://github.com/topics/c?o=desc&s=stars

Kann man das noch weiter filtern?

Hier ein paar allgemeine Projekte, die recht weit oben auf der Liste 
stehen:
https://github.com/TheAlgorithms/C
https://github.com/huihut/interview/blob/master/README_en.md
https://github.com/fffaraz/awesome-cpp

von MaWin (Gast)


Lesenswert?

Bisswegierig schrieb:
> Wie/wo findet man "guten" C Code von embedded Projekten?

Nirgends.

Gut war beispielsweise Code von TeX (sogar gut dokumentiert), CP/M, GEM 
und Windows (3.11), auch kommerziell erfolgreich.

Schlecht wurde es mit Windows-NT, zuvor DEC VMS war auch grottig.

Aber selbst wenn das Zeug für heutige Verhältnisse so klein war dass es 
embedded laufen könnte, gilt es nicht als embedded Software.

Es gibt Viele, die behaupten, guten code zu schreiben, gut wartbar, 
zukunftsorientiert, mit en neuesten Methoden der Softwareentwicklung. 
Oftmals ist das aber nur grober Schrott, oder ein Verhau wie Linux.

Etwas besser sieht es aus, wenn code ein Lehrbeispiel werden soll, dann 
ist der Umfang klar und es gibt Doku um ihn zu erklären, z.B. TeX und 
Minix. Wenn der code dann aber so mangelhaft ist, dass er in keinem 
kommerziellen Projekt eingesetzt werden kann, z.B. weil 
Fehlerbearbeitung fehlt, dann kann er nicht als guter code gelten.

Guter code müsste also kommerziell erfolgreich UND als Lehrbeispiel 
tauglich sein. Gibt's eher nicht.

von Programmierer (Gast)


Lesenswert?

Bisswegierig schrieb:
> "guten" C Code von embedded Projekten?

Das ist eigentlich schon ein Widerspruch in sich. C bietet wenig 
Möglichkeit zur Strukturierung und Abstraktion. Somit wird C-Code nie 
besonders toll sein und stattdessen alle möglichen Hacks (gerne mit 
Makros) einsetzen, damit man einigermaßen effizient damit arbeiten kann. 
Vielleicht macht es Sinn nach Embedded C++ -Code zu suchen. Wer sich 
gegen die üblichen Widerstände durchsetzt um C++ zu nutzen, weiß 
möglicherweise was er tut und wendet vielleicht sogar etablierte Best 
Practices an.

von Bisswegierig (Gast)


Lesenswert?

Ok, anders gefragt: was ist das beste embedded C-Projekt, das ihr kennt?
Zwangsläufig open source. Muss nicht kommerziell sein, aber Erfolg 
spräche für Qualität?

von Ich (Gast)


Lesenswert?

Bisswegierig schrieb:
> Muss nicht kommerziell sein, aber Erfolg
> spräche für Qualität?

Woher kommt die Weisheit denn?

von Bisswegierig (Gast)


Lesenswert?

Ich schrieb:
> Woher kommt die Weisheit denn?

Populäre Projekte ziehen Leute an. Populär unter Umständen, weil "gut".
Unabhängig davon: "gute" Leute können das Projekt verbessern.

von Mark B. (markbrandis)


Lesenswert?

Programmierer schrieb:
> Das ist eigentlich schon ein Widerspruch in sich. C bietet wenig
> Möglichkeit zur Strukturierung und Abstraktion.

Quatsch.

Auch in C kann man guten Code schreiben. Man kann Prinzipien einhalten 
wie:
-Funktionen möglichst klein halten. Eine Funktion erfüllt eine 
Aufgabe, und nicht etwa fünf oder zehn.
-Funktionen und Variablen sinnvoll benennen
-(In der Regel) Eine Anweisung pro Codezeile. Nein, Code wird nicht 
besser indem man möglichst viel davon in eine Zeile quetscht.

> Somit wird C-Code nie besonders toll sein und stattdessen alle möglichen
> Hacks (gerne mit Makros) einsetzen, damit man einigermaßen effizient damit
> arbeiten kann.

An Makros ist rein gar nichts effizienter. Es ist schlicht und 
ergreifend eine Textersetzung. Der Code wird dadurch weder besser noch 
performanter. Gute Programmierer setzen Makros sparsam ein.

Gute Programmierer lesen Bücher wie zum Beispiel dieses:
Clean Code: A Handbook of Agile Software Craftsmanship
von Robert C. Martin

von Mark B. (markbrandis)


Lesenswert?

Bekannt ist auch:
Man kann in jeder Programmiersprache schlechten Code schreiben ;-)

von Falk B. (falk)


Lesenswert?

Mark B. schrieb:
> Bekannt ist auch:
> Man kann in jeder Programmiersprache schlechten Code schreiben ;-)

Was aber umgekehrt dazu führt, daß man sich immer verbessern kann!

https://www.amazon.de/-/en/Kathrin-Passig/dp/3897215675/ref=sr_1_1?crid=3OM4QKLBXUWP7&keywords=weniger+schlecht+programmieren&qid=1639230463&sprefix=weniger+schlecht+pr%2Caps%2C176&sr=8-1

Witziger Titel, ist für Anfänger und Fortgeschrittene zu empfehlen.

von Bisswegierig (Gast)


Lesenswert?

Ok, "Gut Programmieren"-Threads gibt's ja schon.
Ich suche entsprechende Projekte & Code... wie im Betreff steht...

von Programmierer (Gast)


Lesenswert?

Mark B. schrieb:
> Quatsch.
> Auch in C kann man guten Code schreiben.

Das hat keiner bezweifelt.

Mark B. schrieb:
> An Makros ist rein gar nichts effizienter.

Doch. Man kann dadurch schneller seine gewünschte Funktionalität 
erreichen und braucht weniger Code. Man kann also effizienter arbeiten. 
Dass der Code effizienter läuft habe ich nicht gesagt. In C++ geht es 
dank Templates halt besser ohne Makros.

von HildeK (Gast)


Lesenswert?

Vielleicht nennt mal jemand die Kriterien, die einen Code zu einem guten 
Code machen.
Sind es vielleicht:
- gut und übersichtlich lesbar/verstehbar für einen Dritten oder nur für 
sich selber?
- schön formatiert?
- hochperformant bei der Ausführung, dafür u.U. verklausuliert 
geschrieben?
Oder was ist hier entscheidend?

Ich bin kein Informatiker; ich versuche meine Codezeilen so zu 
schreiben, dass ich in einem Jahr auch schnell wieder nachvollziehen 
kann, warum ich was gemacht habe. Keine 'Tricks', sprechende Variablen- 
und Funktionsnamen, Funktionen nur, wenn ich sie mehrfach benötige (z.B. 
kein init() am Anfang von Main), ausreichend Kommentare, usw.
Für mich als weniger Geübter Programmierer bin ich damit nicht immer 
erfolgreich, zugegeben. 😀

von Programmierer (Gast)


Lesenswert?

HildeK schrieb:
> Funktionen nur, wenn ich sie mehrfach benötige (z.B. kein init() am
> Anfang von Main)

Würde ich nicht so unterschreiben. Wenn du alles in die main() packst, 
wird die unübersichtlich. Besser auf Funktionen unterteilen. In C++ geht 
das gut via Konstruktoren...

> ausreichend Kommentare, usw.

Idealerweise braucht man wenig Kommentare. Der Code sollte so gut lesbar 
sein, dass Kommentare überflüssig sind. Nur bei unoffensichtlichen 
Dingen wie komplexe Berechnungen kann man mit Kommentaren etwas 
erläutern. Kommentare sollten normalerweise erläutern warum man etwas 
macht, denn was man macht ist direkt am Code ersichtlich. Und: Falsche 
Kommentare sind schlimmer als gar keine Kommentare - wenn man also jede 
Menge (unnötige) Kommentare hat, ist es schwierig sie immer alle aktuell 
zu halten!

von SCNR (Gast)


Lesenswert?

Bisswegierig schrieb:
> Ok, anders gefragt: was ist das beste embedded C-Projekt, das ihr kennt?
> Zwangsläufig open source. Muss nicht kommerziell sein, aber Erfolg
> spräche für Qualität?

CLisp, CPython (embedded im Sinne dass man danach keinen C-Code mehr 
verwendet...)

von SCNR (Gast)


Lesenswert?

HildeK schrieb:
> Vielleicht nennt mal jemand die Kriterien, die einen Code zu einem guten
> Code machen.
> Sind es vielleicht:
> - gut und übersichtlich lesbar/verstehbar für einen Dritten oder nur für
> sich selber
> - schön formatiert?
Ja! U.a. konsistent eingerückt und umgebrochen, am besten wenn genau 
dies intrinsischer Bestandteil der Syntax ist... Moment: Python! :-) 
FORTRAN? X-D

von HildeK (Gast)


Lesenswert?

Programmierer schrieb:
> Würde ich nicht so unterschreiben. Wenn du alles in die main() packst,
> wird die unübersichtlich. Besser auf Funktionen unterteilen.

Klar, jeder hat seinen eigenen Stil. Mir ist es lieber, wenn ich nur 
wenig scrollen oder erst recht nicht in anderen Files schauen muss.

In viele Funktionen aufteilen gibt halt ein sehr, sehr übersichtliches 
main(), aber man sieht eben nicht direkt, was tatsächlich dahinter 
steckt bzw. was alles initiiert wird. Zusätzlich kommen in dem init() 
bestimmt nochmals Aufrufe, wie z.B. SetPortDefinitions() und ich suche 
im nächsten File/Abschnitt, was gemacht wurde. Wenig befriedigend.
Zugegeben, den einen oder anderen Hinweis könnte man sich sparen, aber 
imho besser zu viel als zu wenig.

Programmierer schrieb:
> Kommentare sollten normalerweise erläutern warum man etwas
> macht, denn was man macht ist direkt am Code ersichtlich.

Das meinte ich auch. Aber wenn ich z.B. einen Timervorteiler setze, dann 
schadet es nicht, den Teilerfaktor im Kommentar zu nennen. Ich will ja, 
wenn ich den Code wieder in die Hand nehmen, nicht erneut im DB 
nachschauen müssen, welchen Faktor ich damals gewählt hatte. So gibt es 
viele Beispiele.

SCNR schrieb:
> Ja! U.a. konsistent eingerückt und umgebrochen ...

Ich habe ja nur versucht, heraus zu finden, was ihr für Kriterien habt, 
um einen Code dann als 'gut' zu bezeichnen und mögliche Beispiele 
genannt. Dass die Formatierung und das Einrücken nicht die Hauptrelevanz 
sein würde, war schon klar 😉.

Ich als Gelegenheits-/Hobbyprogrammierer würde auch gerne was sinnvolles 
lernen von den Profis. Dazu konnte ich in dem Thread jedoch noch nicht 
viel lesen, mit Ausnahme vom Beitrag von Mark. B., was ich aber 
weitgehend schon umsetze. Das dürfte aber nicht alles sein für das 
Kriterium 'guter Code'.

von MaWin (Gast)


Lesenswert?

HildeK schrieb:
> gut und übersichtlich lesbar/verstehbar für einen Dritten oder nur für
> sich selber?

Selbstverstandlich.

> schön formatiert?

Selbstverstandlich.

> hochperformant bei der Ausführung,

Selbstverständlich.

Guter code führt genau die Prozessorinstruktionen aus, die zur 
Bewältigung der Aufgabe minimal notwendig sind, d.h. man kann kein 
Statement weglassen ohne sich damit Fehler einzufangen, z B. Errors 
nicht mehr abgefangen werden.

> dafür u.U. verklausuliert
> geschrieben?

Blodsinn. Code der nichts überflüssiges macht ist auch immer gut 
verständlich, es ist gerade der code der nichts mit dem Problem zu tun 
hat, der den Blick auf's wesentliche verstellt und die Übersicht 
behindert.

Klar will man auch den performantesten Algorithmus nutzen, der ggf. 
länger und schwerer nachvollziehbar ist als der primitiveste 
Algorithmus, aber: Algorithmen sind der Kern der Informatik, wer die 
nicht liebt, ist bloss Coder.

von HildeK (Gast)


Lesenswert?

>> dafür u.U. verklausuliert
>> geschrieben?

MaWin schrieb:
> Blodsinn. Code der nichts überflüssiges macht ist auch immer gut
> verständlich, es ist gerade der code der nichts mit dem Problem zu tun
> hat, der den Blick auf's wesentliche verstellt und die Übersicht
> behindert.
> Klar will man auch den performantesten Algorithmus nutzen, der ggf.
> länger und schwerer nachvollziehbar ist als der primitiveste
> Algorithmus

Ich meinte nicht die Algorithmen, sondern die z.B. in C vorhandene 
Möglichkeit, unleserlichen Code zu schreiben. Gibt es da nicht sogar 
Wettbewerbe? Mir fällt gerade der Name dazu nicht ein.

Und ob der Algo maximal performant sein muss, hängt von der Aufgabe ab. 
In vielen Fällen ist es schlichtweg egal, wenn da ein paar 
Maschinenstatements mehr compiliert werden.
Einfaches Beispiel:
1
 x++;
2
 x = x % 10; // ich will nur einen Ringzähler 0...9; ihmo besser lesbar,
3
             // Modulo kann aber mehr, was hier nicht gebraucht wird und 
4
             // führt zu größerem Maschinencode
5
// oder
6
 x++;
7
 if (x>9) x = 0;  // imho ist die Absicht etwas schlechter erkennbar

von Alexander S. (alesi)


Lesenswert?

HildeK schrieb:
> Ich meinte nicht die Algorithmen, sondern die z.B. in C vorhandene
> Möglichkeit, unleserlichen Code zu schreiben. Gibt es da nicht sogar
> Wettbewerbe? Mir fällt gerade der Name dazu nicht ein.

https://www.ioccc.org/

von Hans-Georg L. (h-g-l)


Lesenswert?

"Guter Code" ist zu allgemein ...
Wenn der Code für dich ist und du ihn gut findest, weil du schon 
schlechteren geschrieben und daraus gelernt hast bist du auf dem 
richtigen Weg. Dein Code ist dann gut wenn er seine Funktion erfüllt, du 
ihn jemand anderen erklären kannst und er ihn versteht.
Wenn du beruflich Code schreibst kommt es sehr auf die Umgebung an in 
der du arbeitest ...
Durch abtippen oder kopieren von Code aus dem Internet ohne zu 
reflektieren lernst du nicht viel. Bücher und Akademiker hören oft da 
auf wo erst  richtig interessant wird und reale Aufgaben zu lösen sind. 
Bei "open source code" hat du oft das Problem die zehn Zeilen, die dich 
vielleicht interessieren aus den 500 Zeilen Kommandozeilen Interpreter 
und Python Erweiterungen zu finden ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.