Moin,
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. Vor allem die ganze Pointer/Embedded Geschichte aus C
fortzusetzen ist schon ziemlich reizvoll.
Python interessiert mich jedoch am meisten, vielleicht auch wegen Deep
Learning usw.
Java fand ich immer uninteressant, könnte aber vielleicht auch wichtig
sein?
Kurzgefragt:
Was könnt ihr mir empfehlen? Wenn man schon sehr gute
Programmierkenntnisse in C besitzt...
C++ wäre ja sicher die sinnvollste Erweiterung, vor allem im
Ingenieursbereich. Vor allem die ganze Pointer/Embedded Geschichte aus C
fortzusetzen ist schon ziemlich reizvoll.
da hast du dir die Antwort praktisch selbst gegeben....
Oft braucht man im Firmenalltag mehrere Sprachen. Unsere Firmware ist in
C++, komplexere hausinterne Tools in C++ und C#, sowie hunderte Scripte
und einfachere Tools in Python. Will man mithalten, muss man alle können
oder sich zumindest schnell einarbeiten.
C++ erweitert C um typsicherheit und vor allem um Objektorientierung. OO
können andere Sprachen auch, für embedded oder μC hat man aber noch die
Maschinennähe. Mit all seinen Fallstricken.
OO Programmierung ist genial wenn man es verstanden hat.
Aber Programmiersprache ist hier Religion, keine gute Frage hier.
du wirst auch ohne Deep Learning python brauchen. Das ist die Sprache
der Wahl für cicd-automatisierung. Kein größeres Softwareprojekt kommt
heutzutage noch ohne aus.
C++ ist stark, aber leider auch ein Molloch von einer
Programmiersprache. Hier gut zu sein ist Arbeit, aber auch sehr gefragt,
da viele Embeddedprojekte auf C++ wechseln.
Java wird in meinem Freundeskreis ausschließlich von Informatikern
gesprochen. Hierüber kann ich nicht viel sagen; hab nämlich selbst eine
gewisse Verachtung gegenüber der Sprache. Ich habe das Gefühl, das wird
meist für PC-Software verwendet, mit GUI, Datenbankanbindung, etc.
Hi Juergen,
tja, würde mal sagen, das kommt darauf an, in welchen Bereichen Du
unterwegs sein wirst. Ich mach ausser zuhause nichts im embbbed Bereich,
auf Arbeit habe ich fast nur mit Python zu tun. Früher mal nur mit Java
und C , hängt ebend auch von den Projekten ab....
Wenn Du Dich überall etwas umschaust kann es nicht schaden. ML ist halt
eher auf der Python-Schiene angesagt ...
Gruß Ingo
Juergen schrieb:> Was könnt ihr mir empfehlen? Wenn man schon sehr gute> Programmierkenntnisse in C besitzt...
Ich würde dir Python empfehlen.
Aber nicht als Nachfolger, sondern als Zusatzoption.
Persönlich nutze ich beide recht viel, je nach Anwendungsfall. Wenn es
grafisch oder textlastig (Parser) wird, wird mir C schnell zu
anstrengend; für binäre Daten (YUV-Daten usw.) wird mir Python zu
anstrengend.
Das richtige Tool für den Job, und mit C und Python bist du gut
aufgestellt.
deepy schrieb:> C++ wäre ja sicher die sinnvollste Erweiterung, vor allem im> Ingenieursbereich. Vor allem die ganze Pointer/Embedded Geschichte aus C> fortzusetzen ist schon ziemlich reizvoll.> da hast du dir die Antwort praktisch selbst gegeben....
Bin absolut der gleichen Meinung
und danach vielleicht bisschen Linux (Konsolen Befehle) und SQL
Bist dann gut bewaffnet für den Krieg ;)
Java,PHP,Phyton,HTML,CSS,Assembler ... lass lieber die Finger weg bis
diese von sich auf dich zukommen - viel ist nicht immer besser.
Juergen schrieb:> C++ wäre ja sicher die sinnvollste Erweiterung, vor allem im> Ingenieursbereich.> Python interessiert mich jedoch am meisten, vielleicht auch wegen Deep> Learning usw.
Ich würde diese beiden empfehlen, und zwar in dieser Reihenfolge. C++
ist gut um Deine C-Kenntnisse zu erweitern und auf ein neues Niveau zu
heben, Python ist gut um Dinge zu automatisieren, mal eben ein schnelles
GUI oder ein Webinterface zu entwickeln, und natürlich für Aufgaben rund
um Datenanalyse, -Visualisierung, Machine Learning und viele andere
Anwendungsfälle. C++ und Python ergänzen sich auch deswegen sehr gut,
weil es sehr einfach ist, sie ineinander einzubinden, also Python um
eigene C- oder C++-Module zu erweitern oder, andersherum, Python als
Scriptsprache innerhalb eines C++-Programms zu benutzen.
Java habe ich noch nie gemocht -- sehr zum Leidwesen meines damaligen
Arbeitgebers Sun Microsystems -- und sehe es zumindest im Moment auch
eher auf dem absteigenden Ast, zumindest was neue Projekte angeht. Dafür
sorgen schon Oracle mit den neuen Lizenzbedingungen, einem viel zu
schnellen Releasezyklus und anderen Sprenzchen, die mittlerweile dazu
führen, daß bereits viele Java-Programme jeweils ihre eigene
Laufzeitumgebung mitbringen und damit die ganze Idee hinter der Sprache
-- "write once, run anywhere" -- konterkarieren. Trotzdem werden wir
Java sicherlich so bald nicht los, dafür ist die vorhandene Codebasis
natürlich viel zu groß...
Juergen schrieb:> hab im E-Technik Studium und darüber hinaus intensiv die Sprache C> gelernt und schaue mich jetzt nach einem Nachfolger um.
Schaue dich lieber nicht nach einem Nachfolger um, sondern nach
Ergänzungen. Egal, was immer verzapft wird: C ist und bleibt sehr
nützlich für viele Anwendungen. Gerade im Embedded-Bereich.
Juergen schrieb:> C++ wäre ja sicher die sinnvollste Erweiterung, vor allem im> Ingenieursbereich. Vor allem die ganze Pointer/Embedded Geschichte aus C> fortzusetzen ist schon ziemlich reizvoll.
C++ ist eine gute Wahl. Geschmacklich lässt sich streiten. Ich finde die
Syntax teils abartig hässlich, aber die Sprache ist solide.
Tu dir einen Gefallen und lerne "modernes" C++. Gerade in den letzten
Sprachversionen sind viele Verbesserungen und nützliche Wege eingebaut
worden, die einem das Leben leichter machen und auch Memory-Leaks etc.
reduzieren (smart pointer, move syntax, etc.).
Juergen schrieb:> Python interessiert mich jedoch am meisten, vielleicht auch wegen Deep> Learning usw.
Python ist ebenfalls eine sehr nützliche Sprache. Mittlerweile
vermutlich sogar absolut erforderlich. Der Anwendungszweck ist halt ganz
anders als bei C++. Python ist nicht sonderlich schnell, aber dafür sehr
schnell zu entwickeln mit einer unglaublich großen Anzahl an bereits
erprobten Libraries. Ich mache eigentlich alles mit Python, vom kelien
Skript, das etwas ausrechnet, oder kopiert, bis hinzu
Testautomatisierung am Messstand.
Juergen schrieb:> Java fand ich immer uninteressant, könnte aber vielleicht auch wichtig> sein?
Ja. Java ist gerade im "Enterprise"-Bereich sehr nützlich. Es gibt da
auch sehr viele Jobs für. Vorteile von Java:
- Plattformunabhängig
- Objektorientiert mit garbage Kollektor.
Wenn du bspw. ein GUI Programm schreiben willst, das du einem Kunden
geben willst, kann Java die optimale Lösung sein, da das unter Windows,
Linux etc. einfach tut.
Ich persönlich finde Java nicht besonders toll. Kann mich, falls
erforderlich, aber trotzdem Durchwusteln.
Sprachen, die da "ähnlich" sind:
1) C#: Quasi die Microsoft-Alternative zu Java. Auch einge nützliche
features, aber eigentlich nur für Windows-Nutzung wirklich brauchbar.
2) Go: Auch eine objektorientierte Sprache mit garbage collection. Sehr
gute Plattformunabhängigkeit.
Eine weitere Sprache, die ich sehr interessant finde, ist Rust.
Rust hat viele gute Ansätze, ist aber leider (noch) nicht so weit
verbreitet. Aber es läuft schnell wie C und hat aber durch die richtigen
Sprachfeatures es geschafft, Memory-Leaks nahezu komplett zu verhindern.
In Summe sollte jeder Prorammierer was aus dem kompletten Fundus haben:
1) Sprache für Schlanke Embedded Sachen: C / C++ / Rust
2) Objektorientierte Sprache für aufwändigeres Zeug: C++ Go C# /
Java / Rust
3) Rapid Prototyping Skriptsprache: Python etc.
Wie du siehst, deckt man diese Felder bereits mit C/C++ und Python als
generische hochflexible Skriptsprache bereits sehr gut ab.
Kenntnisse in anderen Sprachen (zumindest Leseverständnis) ist aber nie
ein Fehler.
Ein guter Entwickler stellt zwei Fragen wie Kommentiere ich aus und wo
kommt das Semikolon hin. Der Spruch, ist zwar etwas Flapsig formuliert,
trifft im Kern aber ganz gut das tägliche Geschäft.
Du wirst, wenn Du Dich mit Computer und Embedded beschäftigst, viele
Sprachen kennenlernen und das eine oder andere Mal auch Programme in
Sprachen ändern müssen, welche Dir nicht so liegen. Mit einem Guten
theoretischen Grundlagen Wissen ist, das aber nicht so wild wie es
vielleicht erscheint.
C++ ist gut sich das ganze OOP zeug rauf zu schaffen, wenn Du bis jetzt
nur C geschrieben hast, hast Du noch große Weiße Flächen auf Deiner
theoretischen Grundlagen Landkarte. Eine andere OOP Sprache tut es aber
auch.
Python ist momentan sehr beliebt, gefühlt kann die Scriptsprache alles
und sie zu können ist sicherlich eine gute Erweiterung Deiner
Fähigkeiten. Da Python auch OOP kann, könntest das nötige Wissen auch
hier erarbeiten.
Als Letztes möchte ich Dir Rust, empfehlen. Wäre Rust eine Aktie, würde
man das als Risiko Anlage bezeichnen.
Ob sich Rust im Embedded Bereich durchsetzt ist nicht ganz klar, aber
Rust hat viele Freunde und ist eine inhärent sichere Sprache, welche
zurzeit auch auf Embedded und sogar im Linux Kernel ernsthaft diskutiert
wird.
Stark vereinfacht kann man sagen Rust ist das was C++ hätte sein können,
und hilft eine Menge typischer Programmierfehler zu verhindern. Rust ist
eine schöne moderne Programmiersprache, welche den Entwickler zu
sauberen Arbeiten zwingt, nicht jeder mag diese und vielleicht bleibt
Rust ein Nischen Produkt. Aber wenn Rust sich durchsetzt wärst Du vorne
mit dabei und wenn nicht, schaden tut es sicher auch nicht das zu
können.
Falls auch Web-Entwicklung für Dich mal relevant werden könnte, wäre
auch Javascript (oder eine nach Javascript transpilierende Sprache, z.B.
TypeScript) ein interessanter Kandidat.
Denn bei Web-Entwicklung hat man serverseitig zwar die Wahl zwischen
diversen Programmiersprachen - aber da man clientseitig eh zwingend
Javascript benötigt, muss man mit Javascript nur eine einzige Sprache
lernen, um gleich beide Seiten abzudecken.
Ausserdem ist Javascript mittlerweile eine richtig nette
Programmiersprache - der schlechte Ruf, den Javascript früher zurecht
hatte, ist heutzutage nicht mehr gerechtfertigt. Wohl keine andere
Programmiersprache hat sich seit ihren Anfängen dermassen drastisch
verändert/weiterentwickelt.