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
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.
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.
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?
Bisswegierig schrieb: > Muss nicht kommerziell sein, aber Erfolg > spräche für Qualität? Woher kommt die Weisheit denn?
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.
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
Bekannt ist auch: Man kann in jeder Programmiersprache schlechten Code schreiben ;-)
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.
Ok, "Gut Programmieren"-Threads gibt's ja schon. Ich suche entsprechende Projekte & Code... wie im Betreff steht...
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.
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. 😀
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!
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...)
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
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'.
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.
>> 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 |
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/
"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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.