Welche Sprache nach C lernen?

HD-Driver

Banned
Registriert
Apr. 2021
Beiträge
8
Moin zusammen,

hab im E-Technik Studium (und darüber hinaus) intensiv die Sprache C
gelernt und schaue mich jetzt nach einem Nachfolger um.

C++ wäre ja sicher die sinnvollste Erweiterung, vor allem im
Ingenieursbereich. Besonders die ganze Pointer/Embedded Thematik aus C
fortzusetzen ist schon ziemlich reizvoll.

Python interessiert mich am meisten, vielleicht auch wegen Deep
Learning, Data Science usw.
Zumal gefällt mir die Syntax ganz gut.

Java fand ich bisher immer uninteressant, könnte aber vielleicht auch wichtig
sein?

Kurzgefragt:

Was könnt ihr mir empfehlen? Wenn man schon relativ gute
Programmierkenntnisse in C besitzt...
 
Was willst du den machen?

Die Sprachen haben ja unterschiedliche Anwendugnsgebiete.

C ist ja eine gute Grundlage um Aufwendige performante Applikationen zu entwickeln. Da ist C++ oder C# sicher ein sinvoller aufbau.

Java ist gut insebesondere wenn es um Web und schnittstellentechnologie geht die auf vielen Platformen kompatibel sein soll.

Python ist halt vor allem für Ad-Hoc Programierungen und Spezialentwicklungen üblich.

Das heist nicht, das es nicht auch Games mit Python oder grosse Applikationen mit Java gibt. Aber Es gibt eben schon gewisse Anwendungsfälle die durch Bestimmte Programiersprachen und die Communitys dahinter eher unterstützt werden.
 
  • Gefällt mir
Reaktionen: kuddlmuddl
Brainfuck… soll ja auch ein wenig herausfordernd sein.
 
  • Gefällt mir
Reaktionen: [ChAoZ], Physikbuddha und BAGZZlash
HD-Driver schrieb:
Was könnt ihr mir empfehlen? Wenn man schon relativ gute
Programmierkenntnisse in C besitzt...
Rust
  • Syntax aus der C-Familie
  • viel einfacher als C++
  • ähnlich schnell
  • deutlich robuster gegenüber Bugs im Vergleich zu den meisten Programmiersprachen (und insbesondere C und C++)
  • sehr gutes Tooling: einfaches Installieren von libraries und gute Fehlermeldungen

Oder einfach wählen was dir am besten zu deinem Beschäftigungsbereich passt - z.B. wird man bei Data Science kaum um Python rumkommen, so toll andere Sprachen auch sein würden
 
  • Gefällt mir
Reaktionen: jb_alvarado und andy_m4
ranzassel schrieb:
Brainfuck… soll ja auch ein wenig herausfordernd sein.
Brainfuck ist nicht herausfordernd. Gut. Die Syntax ist vielleicht ungewohnt, wenn man von C her kommt. Aber ansonsten ist das eine relativ simple Sprache mit einem sehr sehr übersichtlichen Set an Statements.
So ein bisschen so wie früher die programmierbaren Taschenrechner. Oder auch die "Turing-Maschine" die man aus dem Informatikstudium kennt.
Umständlich und "brainfuckig" wird es halt, wenn Du kompliziertere Sachen machen willst.

KitKat::new() schrieb:
Wäre sicher nicht verkehrt als Alternative zu C++.

Wobei wenns auf den Embedded-Bereich abzielt wie im Eingangsposting erwähnt, dann könnte es womöglich eng werden. Denn selbst bei kleinsten Programmen fällt ja aus dem Compiler immer ein großes Binary (wenn sie das nicht inzwischen mal optimiert haben).

Andererseits heißt ja embedded heutzutage nicht mehr, das man da irgendwie RAM in Kilobyte rechnen. Das hat man dort ja inzwischen auch Megabyte- oder gar Gigabyte-weise. :-)
 
Und wieder eine Beitrag mit wenig Input, vielen Hilfsversuchen und keiner Rückmeldung.
 
  • Gefällt mir
Reaktionen: MindofRafi und pizza4ever
HD-Driver schrieb:
Was könnt ihr mir empfehlen? Wenn man schon relativ gute
Programmierkenntnisse in C besitzt...

Hallo, als professioneller Software Engineer mit 10 Jahren Berufserfahrung kann ich dir nur folgenden Ratschlag geben.

Fokussiere dich nicht auf bestimmte Programmiersprachen. Sie unterscheiden sich Alle nur unwesentlich oft nur in der Syntax und auch nur unwesentlich. Wichtig ist vor Allem ein Verständnis für die Konzepte und Software Entwurfsmuster (s.g. Patterns). Wenn du ein Grundverständnis für Konzepte hast, dann hast du im Grunde Jede Programmiersprache im Griff.

In der Praxis kommt man in der Regel auch gar nicht drum herum sich mit allen möglichen Programmiersprachen, Scriptsprachen, Markup-Languages, Frameworks und Technologien auseinander zu setzen. Man kann nicht Alles lernen und es gibt keine Super-Programmiersprache die Alle Probleme in der Praxis lösen kann. In der Praxis hat man auch oft gar nicht den Luxus sich die Programmiersprache aussuchen zu können.

Sei open mindet. Wenn du C schon beherrschst, dann hast du vermutlich auch bereits die wichtigsten Grundkonzepte wie Objektorientierung, Vererbung, Schnittstellen etc... im Griff. Wenn du jetzt etwas mit einer Anderen Programmiersprache sei es Java, oder C# oder was auch immer machen müsstest, sollte dir das keine Angst machen. Du kämmst da schnell rein.

Wenn du deine Kenntnisse vertiefen und Skills verbessern möchtest, versuche nicht eine Programmiersprache nach der Anderen zu lernen. Stattdessen würde ich mich mit Entwurfsmustern befassen. Also wie funktioniert ein Builder, eine Factory, ein Adapter, ein Wrapper, eine Fassade etc... Das sind grundlegende Entwurfsmuster die in Allen Programmiersprachen eine Rolle spielen und für fortgeschrittenes Programmiren einfach unerlässlich sind.

Aber um trotzdem auf deine Frage einzugehen. Wenn du einfach eine Andere Programmiersprache kennenlernen möchtest empfehle ich C# oder Java.
 
Zhdun schrieb:
Wenn du ein Grundverständnis für Konzepte hast, dann hast du im Grunde Jede Programmiersprache im Griff.
Das gilt aber nur für grundlegende Konzepte (und selbst da stimmt es nur zum Teil).
Das Know-How erstreckt sich nicht nur auf die Programmiersprache, sondern auch auf die verwendeten Bibliotheken und Frameworks. Hier steckt oft der meiste Lernaufwand drin.

Zhdun schrieb:
Sie unterscheiden sich Alle nur unwesentlich oft nur in der Syntax und auch nur unwesentlich.
Versuch die Aussage mal auf Smalltalk, Lisp und Prolog anzuwenden. :-)

Zhdun schrieb:
Fokussiere dich nicht auf bestimmte Programmiersprachen.
Das Problem ist: Zwischen grundlegend können und beherrschen gibt es einen Unterschied. Der sich dann auch in der Qualität der Software bemerkbar macht.
Grundsätzlich ist es nicht verkehrt sich mit unterschiedlichen Programmiersprachen zu beschäftigen. Weil man damit teilweise auch Sachen lernt die sich auf andere Sprache übertragen lassen.

Man sollte es nur nicht so weit ausufern lassen dann irgendwie für jedes Projekt eine andere Sprache zu wählen nur weil die dann ein klein wenig besser passt als das was man schon beherrscht.
Also zumindest nicht, wenn es um Software geht die gewissen Qualitätsansprüchen genügen soll.

Zhdun schrieb:
Wenn du C schon beherrschst, dann hast du vermutlich auch bereits die wichtigsten Grundkonzepte wie Objektorientierung, Vererbung, Schnittstellen etc...
Ähm C kennt keine Objektorientierung in der Sprache. C ist eine klassisch prozedurale Sprache.
 
  • Gefällt mir
Reaktionen: Gee858eeG und KitKat::new()
andy_m4 schrieb:
Das gilt aber nur für grundlegende Konzepte (und selbst da stimmt es nur zum Teil).
Das Know-How erstreckt sich nicht nur auf die Programmiersprache, sondern auch auf die verwendeten Bibliotheken und Frameworks. Hier steckt oft der meiste Lernaufwand drin.
In der Berufspraxis lerne ich jede Woche ein Anderes Framework kennen und nutze täglich abertausende von Bibliotheken. Man kann das unmöglich alles lernen und auch noch dran bleiben. Die verändern sich ja auch ständig. Nach einem Jahr hat sich ein Framework oft soweit weiterentwickelt, dass man im Grunde Alles neu lernen muss. Statt zu versuchen alles zu verinnerlichen, sollte man besser lernen mit der Dokumentation zu arbeiten. Habe ich ein neues mir bisher unbekanntes oder ein weiterentwickeltes Framework vor mir interessieren mich die Grundkonzepte und am aller wichtigsten die API-Dokumentation und eventuell schaue ich mir ein Paar Beispiele an. Bei der Anwendung schlage ich in der Dokumentation nach wie ich die einzelnen Komponenten, Schnittstellen, Klassen und Datentypen zu verwenden habe. Programmieren ist immer auch eine Arbeit mit der Dokumentation, man macht nicht Alles aus dem Kopf heraus.

andy_m4 schrieb:
Versuch die Aussage mal auf Smalltalk, Lisp und Prolog anzuwenden. :-)

Diese Exoten sind in der Praxis für mich jedenfalls noch nie relevant gewesen. Heutzutage sind die am weitesten verbreiteten vor Allem C# und Java. Das sind so die größten Platzhirsche. Damit beschäftigt sich ein Softwareentwickler heutzutage zu 80-90% bei der Entwicklungsarbeit. Von Scriptsprachen vor Allem javascript, nicht nur in der Webentwicklung. Auch kommen relativ oft zum Einsatz groovy, ruby, python. Alles Andere sind eher Exoten und kommen nur ganz selten in bestimmten Nischenbereichen zum Einsatz.

andy_m4 schrieb:
Das Problem ist: Zwischen grundlegend können und beherrschen gibt es einen Unterschied. Der sich dann auch in der Qualität der Software bemerkbar macht.

Vor Allem die Methodik und automatisierte Tests machen die Qualität. Wie gesagt in der Praxis habe ich fast jeden Tag mit einer neuen Technologie zutun. Die Qualität muss trotzdem stimmen, da kommt man nicht drum herum testgetrieben und mit der Dokumentation zu arbeiten, dann stimmt auch die Qualität. Und anders herum, wenn man alles aus dem Kopf macht und die Tests vernachlässigt, wird die Qualität mit zunehmender Komplexität der Software trotzdem sehr mies sein egal wieviel Erfahrung du mit einer bestimmten Technologie hast. Du kannst nicht Alles überblicken. Dafür ist die Software heutzutage viel zu komplex.


andy_m4 schrieb:
Grundsätzlich ist es nicht verkehrt sich mit unterschiedlichen Programmiersprachen zu beschäftigen. Weil man damit teilweise auch Sachen lernt die sich auf andere Sprache übertragen lassen.

Ja sich mit verschiedenen Syntaxen vertraut zu machen, macht schon sinn. Aber was ich sagen wollte - Programmiersprachen sind nicht wie verbale Sprachen, man lernt sie anders. Man muss keine Vokabeln pauken oder sowas. Die Syntax ist nicht wirklich wichtig, die schlägt man in der Dokumentation nach. Man beherrscht eine Programmiersprache nicht unbedingt besser wenn man Alle Schlüsselwörter und die Syntax auswendig gelernt hat. Selbst wenn man die Syntax auswendig lernt, kann man eigentlich immer noch nichts gescheites aus dem Ärmel schütteln.

Man beherrscht eine beliebige Programmiersprache, auch solche die man zum ersten mal kennenlernt viel besser wenn man die Entwurfsmuster kennt und Erfahrungen damit in verschiedensten Sprachen gesammelt hat. Entwurfsmuster sind viel wichtiger als die Syntax einer bestimmten Sprache.
andy_m4 schrieb:
Man sollte es nur nicht so weit ausufern lassen dann irgendwie für jedes Projekt eine andere Sprache zu wählen nur weil die dann ein klein wenig besser passt als das was man schon beherrscht.
Also zumindest nicht, wenn es um Software geht die gewissen Qualitätsansprüchen genügen soll.
In der Praxis kommst du gar nicht drum herum verschiedenste Sprachen und Technologien gleichzeitig einzusetzen, du hast auch oft gar nicht die freie Auswahl. Komplexe Problemstellungen erfordern nicht selten den Einsatz mehrerer Programmier- und Scriptsprachen, Standards, Frameworks, APIs usw... Das ist immer ein Mix aus Technologien. Es gibt keine Programmiersprache welche Alles kann was man für die Umsetzung komplexer Problemstellungen benötigt.

Qualität ergibt sich wie gesagt vor Allem durch die richtige Methodik und vor Allem automatisiertes Testen. Du kannst 20 Jahre Erfahrung mit einer bestimmten Programmiersprache haben, aber du kommst ohne Tests mit zunehmender Komplexität auf JEDEN Fall in die Teufelsküche.

andy_m4 schrieb:
Ähm C kennt keine Objektorientierung in der Sprache. C ist eine klassisch prozedurale Sprache.
Ja streng genommen schon, dennoch ist objektorientierte Programmierung mit C durchaus möglich und in der Regel lernt man C kennen gerade für den Einstieg in die objektorientierte Programmierung.

https://www.embedded-software-engineering.de/objektorientierte-programmierung-mit-c-a-619620/

C spielt in der Praxis heutzutage praktisch gar keine Rolle mehr, außer vielleicht bei der Anbindung ganz uralter Software. C++ auch nicht mehr außer in bestimmten Nischenbereichen. Als nächstes nach C würd ich Java empfehlen. Und später dann C#. Besser zuerst Java vor C#. Sie sind sich sehr ähnlich, aber Java ist für Anfänger leichter. Der Umstieg von Java auf C# ist kein großer Umstieg sie ähneln sich sehr stark.

Will man Webentwicklung machen kann auch nicht schaden sich mit Scriptsprachen wie Javascript, Tools wie jquery, Technologien wie AJAX und REST, Formaten JSON, HTML, XML und CSS, sowie Buildtools wie maven vertraut zu machen.
 
Zuletzt bearbeitet:
Auch wenn ich persönlich python sehr mag, würde ich, wenn ich C könnte, wahrscheinlich bei Rust oder Go weitermachen. Rust wird immer beliebter, was man so ließt. Go fände ich interessant für performante Web Backends, APIs etc.
 
  • Gefällt mir
Reaktionen: KitKat::new()
HD-Driver schrieb:
Moin zusammen,

hab im E-Technik Studium (und darüber hinaus) intensiv die Sprache C
gelernt und schaue mich jetzt nach einem Nachfolger um.

C++ wäre ja sicher die sinnvollste Erweiterung, vor allem im
Ingenieursbereich.

Welche Problemstellungen möchtest du eigentlich lösen? Ich nehme an dir geht es weniger um Webentwicklung und mehr um technische Projekte. Nenne vielleicht ein Paar Beispiele was du programmieren möchtest, dann kann man auch die Auswahl besser einschränken.
 
Wenn Python dich am meisten interessiert, dann mach Python. Ich finde Interesse und Begeisterung sind fuer den Langzeiterfolg ausschlaggebender als die Frage, was von deinem Ausgangspunkt am naheliegendsten waere.
 
  • Gefällt mir
Reaktionen: Zhdun
Komisch, noch vor einem Monat, im April, las es sich
hier: https://www.computerbase.de/forum/threads/c-programmieren-nuetzliche-ideen-zum-einstieg.2015415/
so als wärest Du "mit der Programmiersprache C in Berührung gekommen" und fragtest nach "nützliche Ideen zum Einstieg" - jetzt, also nur einen Monat später, heisst es
HD-Driver schrieb:
hab im E-Technik Studium (und darüber hinaus) intensiv die Sprache C
gelernt
Für mich wirkt das etwas widersprüchlich - willst Du uns nicht mal aufklären was Du so machst und was Du vorhast? Vielleicht liegt da ja nur ein Missverständnis vor.
 
  • Gefällt mir
Reaktionen: BAGZZlash
Phrasendreher schrieb:
Komisch, noch vor einem Monat, im April, las es sich
hier: [...] so als wärest Du "mit der Programmiersprache C in Berührung gekommen" und fragtest nach "nützliche Ideen zum Einstieg" - jetzt, also nur einen Monat später, heisst es [...]
Für mich wirkt das etwas widersprüchlich

SCNR

Das ist doch heute der übliche Weg: "Learn C Programming in 30 Days" oder so. Problem ist halt, wenn dann keine wirklichen Vergleiche existieren, anhand derer man seinen Fortschritt gegenüber der Realität festmachen kann.

On topic: hier wird ja immer mal gerne Rust und hin und wieder Go empfohlen. Dazu kann ich als jemand, der das unter Windows jedes Jahr mal (beides) erneut "aus Interesse" ausprobiert, sagen: das ist (unter Windows zumindest) für "general purpose", wie man so schön sagt, kaum bauchbar -- ausser sicherlich für den Eggsberde und dann für ganz spezifische Zwecke. Insbesondere auf Rust trifft das zu, bei Go ärgert einen noch der Zwang zu Konventionen wie alles auszusehen hat (Ordnerstruktur etc). Einfach mal schnell ein Progrämmchen ausprobieren? Viel Spaß ...

Um da meinen Senf dazuzugeben: C++ und Python, wie im Eingangsposting angemerkt, ist schon ganz o.k., insbesondere weil man mit beiden Sachen praktisch alles (ausser vielleicht Mikrokontroller mit Python) machen kann. Und wenn das einigermaßen klappt, kann man das auch für Spaß an der Freud mal verbinden (Cython).

(https://www.zdnet.com/article/progr...em-developers-reveal-why-more-arent-using-it/)
 
  • Gefällt mir
Reaktionen: Zhdun
HD-Driver schrieb:
Kurzgefragt:

Was könnt ihr mir empfehlen? Wenn man schon relativ gute
Programmierkenntnisse in C besitzt...
Was ist denn das Ziel?
Meine Empfehlung: Geh mal in dich, welches Ziel dich zu einer neuen Sprache motiviert.
 
blöderidiot schrieb:
das ist (unter Windows zumindest) für "general purpose", wie man so schön sagt, kaum bauchbar -- ausser sicherlich für den Eggsberde und dann für ganz spezifische Zwecke. Insbesondere auf Rust trifft das zu, bei Go ärgert einen noch der Zwang zu Konventionen wie alles auszusehen hat (Ordnerstruktur etc). Einfach mal schnell ein Progrämmchen ausprobieren? Viel Spaß ...
Magst du das näher erläutern?
Du kannst damit unter Windows quasi alles machen, wenns nicht gerade GUIs sind. Die ganze Windows API ist mittlerweile in Rust verfügbar.
Und für GUIs arbeitet MS auch an XAML Support.
Was fehlt dir?

An den Konventionen in GO habe ich mich ehrlich gesagt auch noch nie gestört. Ich hätte das jetzt eher als etwas positives verordnet, das in anderen Sprachen teils deutlich fehlt.
Schnell mal ein Progrämmchen in Go ausführen, ist trivial: go run *filename*
 
KitKat::new() schrieb:
Bei Go? naja keine Klassen, keine Vererbung, keine generische Programmierung, keine Überladung, keine Konstruktoren/Destruktoren, sehr eingeschränkte Reflection, keine klaren Schnittstellen, nur wenige grundlegende Datenstrukturen (Collections? Sets? Verlinkte Listen? Matrizzen?), keine Möglichkeit einen Mock aus einer Schnittstelle zu erzeugen, keine Möglichkeit bestimmte Versionen von Fremdbibliotheken festzulegen. Kein guter IDE support etc... pp..

Ist vielleicht ganz nett für Liebhaber mit kleineren Ansprüchen, vielleicht für technischen Bereich auch ganz interessant, aber sehr mächtig ist das jetzt nicht.
 
Zurück
Oben