Hallo,
ohne nun irgendwelche Glaubenskriege o.ä. anzufangen eine Frage:
Ich kann nun ein bischen C und finde uC-Lösungen im Hobbybereich
gelegentlich ganz hilfreich, z.B. Heizungs- und Farblichtsteuerung in
der Sauna (mit ATTiny oder ATMega), "intelligente" Vernetzung von
Rauchmeldern etc. Von Windoof bin ich privat zum Glück schon fast ganz
weg und nutze Linux (Kubuntu) und FreeBSD (allerdings doch recht
anstrengend). Ich möchte nun auch etwas mehr im PC-Bereich programmieren
(nach Möglichkeit mit Fensterchen, z.B. Auswertung von uC-Datenlogger
auf dem PC) und evtl. in einem Jahr im uC-Bereich auf die Cortex-M3
umsteigen. Da in meinem Schädel nicht so ewig viel Platz ist, würde ich
natürlich für beides (uC- und PC-Programmierung) die gleiche
Programmiersprache nutzen wollen. Es muß nicht für beides gleichzeitig
optimal sein (was wohl auch kaum geht), aber für den Hobbybereich gut
ausreichend und halbwegs zukunftssicher sein. Die Anforderungen
(natürlich) wie immer: Kostenloser und gut verbreiteter Compiler (wie
der gcc in C), auf Grund der besseren Erlernbarkeit objektorientiert,
für die Fensterchen gibts bestimmt sowieso tolle GUI-IDEs für fast alle
Sprachen.
C++ wollte ich mir nicht antun, da für mich zu komplex. Ruby schaut sehr
nett aus, obwohl Scriptsprache (egal, bei heutiger Hardware schnell
genug) und vor allem nicht typsensitiv oder wie das heißt (keine
Datentypen wie int etc.), kann ich mich aber evtl. dran gewöhnen.
Was schlagt Ihr also einem Quasi-Anfänger mit begrenzter Hirnleistung
als möglichst universelle und relativ zukunftssichere Programmiersprache
vor?
Lutz wrote:
> Was schlagt Ihr also einem Quasi-Anfänger mit begrenzter Hirnleistung> als möglichst universelle und relativ zukunftssichere Programmiersprache> vor?
Eindeutig C.
Assembler gerade nicht. Assembler ist sehr hardware nah und damit
ziemlich von der Hardware abhängig und die ist bei einem µC und einem PC
ja doch sehr unterschiedlich. Daher sollte es auf jeden Fall eine
Hochsprache sein. C bietet sich da hervorragend an, vorallem weil es für
sehr viele Zielhardwaren* passende compiler gibt.
Gruß, Lasse
*) Was ist der Plural von Hardware? Hardwaren? Hardwares?
Hi
Universalsprache gibt es nicht. Allerdings sind Assemblerkenntnisse dann
von Vorteil wenn die Hochsprache ausgereizt ist. Im Moment habe ich
gerade das Problem einer 64Bit Arithmetik. Und das geht auch auf dem PC
nur in Assembler.
MfG Spess
Also eine "universelle" Programmiersprache gibt es nicht.
Jede imperative Programmiersprache läßt sich ineinander überführen.
Sonst gäbe es wohl kaum Compiler die eine Hochsprache in verschiedene
Assembler übersetzen können.
Wenn Du schon den objektorientierten Ansatz für Dich ausschließt bleibt
als meist verbreiteste und daher gut unterstützte Hochsprache C übrig.
> Im Moment habe ich gerade das Problem einer 64Bit Arithmetik.> Und das geht auch auf dem PC nur in Assembler.
Auch schon deutlich angestaubte C-Compiler wie Visual C++ 6.0 kennen den
Datentyp __int64.
The right tool for the right job!
µC: Assembler, C, C++
C ist für µC Verhältnisse noch relativ Hardwareunabhängig
PC: C++, Python, Matlab
Da es auf dem PC oft wirklich nicht auf Geschwindigkeit ankommt und
Python sehr leicht erlernbar ist, ist es meine Präferenz.
Matlab/Scilab/Octave für spezielle Sachen ungeschlagen, C++ für
performancekritische Sachen
Für den PC Java.
Die Entwicklungszeiten sind bei Java doch merklich kürzer als bei C und
es ist ziemlich egal für welches Betriebssystem man die Anwendung
programmiert. Man muss nicht portieren.
Für den Mikrocontroller führt kein Weg an C vorbei. Bei fetten embedded
Lösungen ist manchmal auch Java vorteilhaft.
Besten Dank schon mal für Eure Meinungen.
@ grübler:
>Wenn Du schon den objektorientierten Ansatz für Dich ausschließt bleibt>als meist verbreiteste und daher gut unterstützte Hochsprache C übrig.
Da hast Du mich falsch verstanden, es soll möglichst objektorientiert
sein.
=> "auf Grund der besseren Erlernbarkeit objektorientiert".
Mit C auf dem uC bin ich eigentlich auch sehr zufrieden, mit structs und
Disziplin kann man auch schon recht objektorientiert arbeiten (zumindest
in meinen bisher zugegeben recht simplen Programmen). Nur auf dem PC
scheint mir C für GUI-Programmierung recht ungeeignet, ich bin aber
absolut offen für Überzeugungsarbeit!
C! Es war seit 1990 die einzige gültige Antwort und wird es immer
bleiben!
Mit C kommt man auf jeden Contoller und mittlerweile auch in die FPGAs.
Sowohl testend als auch erzeugend.
>C++ wollte ich mir nicht antun, da für mich zu komplex.
Na ja, das entscheidende bei objektorientierter Programmierung ist das
Verständnis für die Konzepte. Ob man die dann in C++, Jave, Delphi,
Ruby, oder sonstwas umsetzt, ist beinahe egal. Entweder, man bekommt es
in allen Sprachen hin, oder in gar keiner.
Wenn du vorhast, Windows-Programme zu schreiben, die sich wie
Windows-Programme benehmen und aussehen (mal eben drei, vier Menus, ein-
bis zwei Konfigurationsdialoge, und etwas Datenaustausch über die
Zwischenablage ist auch ganz praktisch :-), dann ist es egal, ob C,
Java, oder C++. Die Einarbeitung in die neue Programmiersprache ist
gegenüber der Einarbeitung in das jeweilige Windows-GUI-API
vernachlässigbar.
Oliver
Lasse S. wrote:
> Was ist der Plural von Hardware? Hardwaren? Hardwares?
Hard|ware [...:], die; -, -s <engl.> (EDV Gesamtheit der
techn.-physikal. Teile einer Datenverarbeitungsanlage; Ggs. Software)
Klingt komisch, is' aber so. ;-)
Warum unterstellt ihr ihm eigentlich alle, dass er Windows-Programme
schreiben will, obwohl er das doch im ersten Artikel nahezu
ausgeschlossen hat?
Lutz, wenn du irgendwas ernsthaftes mit GUI-Programmierung anfangen
willst, dann ist das Thema einfach mal sowas komplett anderes als die
Firmware für einen Microcontroller. Mit dem Ruf nach einer Universal-
Programmiersprache vernagelst du dir dabei gedanklich bestimmte Wege.
Die Programmiersprache selbst ist der unwichtigste Teil des Ganzen,
davon kann man (auch als Nicht-Informatiker) in seinem Leben
wenigstens ein halbes Dutzend problemlos so weit erlernen, dass man
sie auch benutzen kann.
GUI-Programmierung ist von ihrem Ansatz her praktisch immer
objektorientiert. Alles, was du auf dem Bildschirm siehst, jedes
Fenster, jedes Eingabefeld, jedes Menü ist ein Objekt. Daher sind die
entsprechenden Toolkits letztlich auch allesamt objektorientiert. Nun
kann man das auch in C durchziehen, wenn man das unbedingt will. Das
Ergebnis kannst du im (mittlerweile nun doch schon recht angestaubten)
sogenannten Athena-Toolkit von X11 noch bewundern. Aber ganz ehrlich:
dem Ding fehlt es nicht nur an Features und vielen Tools, sondern
OO-Programmierung in C ist auch das letzte, was man sich (OK, nach
Windows :-)) freiwillig antut.
Mein Tip: gewöhn' dich an eine der OO-Sprachen, was die PC-Seite
betrifft. (Für den Microcontroller bist du mit reinem C erstmal ganz
gut bedient, dabei kannst du bleiben.) Such dir einen Toolkit aus,
der die von dir bevorzugte Sprache unterstützt. Wenn du dich mit C++
anfreunden kannst (ist ja zumindest syntaktisch erstmal nicht so weit
weg von C), dann kämen mir Qt oder GTK in den Sinn. Für eine
plattformübergreifende Programmierung (X11, Win32, MacOS X) wäre auch
noch wxWidgets eine nette Alternative. Alle diese moderneren Toolkits
haben auch einen Interface-Builder, mit dem man sich das Grundgerippe
einer Applikation zimmern lassen kann. Der wesentliche Lernaufwand
steckt darin, die einzelnen Objektklassen des Toolkits zu verstehen
und insbesondere das Geometrie-Management (wie wird was wann wo im GUI
angeordnet). Wenn du wxWidgets nimmst, kann der Interface-Builder
außer C++ auch noch Python- und Perl-Code generieren, falls dir OO in
einer Scriptsprache mehr liegen sollte.
Kommt auch immer drauf an, was du in deinem zukünftigen Leben noch alles
programmieren willst. Willst du GUI-Programmierung machen und dann auch
noch möglichst portabel sein, wirst du mit Java wohl gut fahren. Wenn
dagegen dein Hauptinteresse Werkzeuge auf der Kommandozeile sind oder du
Webentwicklung machen willst, ist Ruby eine wirklich interessante
Alternative. Wenn du hingegen darauf angewiesen bist, dass deine
Webentwicklungen auf wirklich jedem Webspace laufen, wirst du derzeit um
php nicht herum kommen. Ob Ruby oder Python ist dann wieder
Geschmackssache, sind wohl beides nette objektorientierte Sprachen. Bei
Ruby kann ich zumindest sagen, ist der Einstieg relativ schnell gemacht,
vermutlich ganz anders, als die tonnenschwere Java-Umgebung. Auch wenn
man mit Ruby GUI-Entwicklung machen kann, hat sich das in der Breite
noch nicht durchgesetzt, weswegen die Unterstützung dafür nicht so
berauschend ist.
Delphi find ich auch ganz nett, aber ich glaub, unter Linux hat sich das
auch nie wirklich durchgesetzt. Und ganz wichtig finde ich auch immer,
dass man in langfristiges Wissen investiert. Und da sind mir
Opensource-Sachen meist lieber. Ich hab früher mal viel Zeit in Foxpro
investiert, was damals einen wirklich guten Ruf hatte. Leider war die
komplette Investition 5 Jahre später, als Microsoft das übernahm und zu
einem schlechten Werkzeug dekradierte, schon wieder völlig wertlos.
Hingegen C++: Das, was ich vor 15 Jahren in dem Bereich gelernt habe,
ist heute noch fast genauso gültig.
Nicht zu guter letzt spielt auch der Fun-Faktor eine Rolle: Wie viel
Freude bereitet es einem, mit einer Sprache zu arbeiten. Und da empfand
ich C++ oft als trockene Knochenarbeit. Ruby hingegen macht mir
mittlerweile schon seit Jahren echt Spaß. Kommt aber auch immer drauf
an, was man genau macht. Manche Problemlösung ist in jeder Sprache ein
mühsamer Knochenjob.
@Jörg Wunsch
Es gibt haufenweise formal nicht objektorientierte GUI Toolkits, allen
vorran zB. GTK (darauf baut Gnome auf) oder die windows GUI (ohne
Wrapper drauf).
Man kann auch in C eine Art Objektorientierung verwenden,
Funktionszeiger und Unions sind deine Freunde.
@Threadstartet
Mit C und C++ kommst du unter *NIX sehr weit, unter Linux ist zB. fast
alles in C/C++ geschrieben. C++ wird zwar häufig verwendet, aber es geht
von der Sache her auch in reinem C. Auf Mikrocontrollern ist C auch die
Standardhochsprache.
Für GUI Programmierung kannst du dir mal FLTK angucken, das ist relativ
übersichtlich.
I_ H. wrote:
> Man kann auch in C eine Art Objektorientierung verwenden,> Funktionszeiger und Unions sind deine Freunde.
Schrob ich ja auch, aber es gibt nichts, warum man dann nicht gleich
C++ nehmen könnte. OO in purem C ist aufwändiger als C++ dafür zu
nehmen, und man hat trotzdem viel mehr mögliche Fehlerquellen, die
einem die striktere C++-Syntax abnimmt.
GUI in C wird eben nicht nur in irgendwelchen angestaubten Sachen
verwendet, darum ging es mir. Gnome ist weit verbreitet und wird aktiv
genutzt und weiterentwickelt. Und Windows, soweit ich weis, auch ;).
C++ eignet sich halt nicht für mal eben schnell einsteigen, damit muss
man sich dann schon eingehender beschäftigen. Also ich find C++ eine der
besten Sprachen überhaupt und programmiere auch hauptsächlich in C++,
aber die Sprache ist eben sehr umfangreich und es dauert lange bis man
überall durchgestiegen ist.
Zudem braucht man eine gehörige Portion Disziplin (kann man sich
angewöhnen, aber dauert), damit am Ende kein Hickhack rauskommt, weil
die Sprache einem, im Gegensatz zu zB. Delphi oder Java, sehr viel
erlaubt.
C ist da vom Sprachumfang her deutlich schlanker. Langfristig macht C++
in jedem Fall Sinn, aber für'n kurzes Geplänkel ist es zu umfangreich.
@Jörg
@Winfried
@All
Es scheint also doch so wie befürchtet zu sein, daß man uC- und
PC-Programmierung sprachlich trennen sollte. Nun gut, so sei es. Mit C
auf uC habe ich bisher also nichts verkehrt gemacht, das ist schon mal
seeehr beruhigend.
Für den PC werde ich mir dann mal C++ (Vorteil ähnliche Syntax) und Ruby
(soll leicht zu erlernen sein) näher anschauen. Soll, wie gesagt, auch
nur für den Hobbybereich ausreichen.
Besten Dank für die Ratschläge.
I_ H. wrote:
> GUI in C wird eben nicht nur in irgendwelchen angestaubten Sachen> verwendet, darum ging es mir. Gnome ist weit verbreitet und wird aktiv> genutzt und weiterentwickelt.
Ja, OK. Das GTK in der Tat ja wirklich mit C arbeitet, war mir
irgendwie nicht mehr bewusst, ich hatte den unter C++ einsortiert.
Ist natürlich schon fast ein Grund dagegen...
Unter Windows würde ich LabView für so Sachen wie die
Datenlogger-Auswertung nehmen. Da kann man ziemlich direkt loslegen,
anstatt mich erst viele Stunden lang um den Aufbau der GUI zu kümmern.
Gibt es so eine Software auch üfr Linux?
Richtig universal wäre Pseudocode / Flussdiagramme, die kann man in
jeder sprache auslegen. aber sonst:
C/C++
manchmal recht lustig wenn ich einen Programmcode im Borland oder
VisualC++ test um es dann im uC auszuprobieren dann benutzte ich gerne
die "Copy + Paste" funktion, sofern die Parameter gleich sind und nicht
gerade irgendwelchen Objekt Orientierenten Variablen drinnen vorkommen
...
ich kenne keine andere programmiersprach in der es Egal ist ob du 10.
Mio Polygone für OpenGL berechnest oder einfach nur einen Portpin auf
low ziehen willst ...