"Gute" Projekte & Code

Gast #6904728
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
Gast #6904813
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.
Gast #6904866
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.
#6906665
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
#6906721
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.
Gast #6906738
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.
Gast #6906760
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. 😀
Gast #6906774
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!
Gast #6906784
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
Gast #6906833
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'.
Gast #6906913
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.
Gast #6907023
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
#6907327
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 ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren