Forum: Mikrocontroller und Digitale Elektronik Vom Arduino wegkommen, welche Sprache


von jan.F. (Gast)


Lesenswert?

Guten Abend Community,

habe jetzt länger mit der Arduino IDE gearbeitet und würde nun auf 
besseres Werkzeug umsatteln.

Kurz und knapp gefragt. Welche Sprache hat eine grosse Community und ist 
zukunftssicher? Bei der Arduino Community gab es sehr viel Hilfe und 
verständliche Tutorials.

von Marcel (Gast)


Lesenswert?

Arduino nutzt C++. Bleib doch einfach dabei und verzichte auf die 
Arduino Library.

von my2ct (Gast)


Lesenswert?

jan.F. schrieb:
> Welche Sprache hat eine grosse Community und ist zukunftssicher?
Hast du schon mal an C gedacht. Echte Programmierer verwenden das seit 
45 Jahren und werden es auch weiterhin tun.

von Baster (Gast)


Lesenswert?

Arduino ist auch nur nur eine runde Umgebung aus einfachst gehaltener 
IDE, einer Menge Bibliotheken zu aller möglichen Peripherie und einer 
halbwegs vereinheitlichten Hardwareplatform.

Darunter steckt als Sprache C und das ist nun mal sehr weit verbreitet, 
also eine sichere Wette wenn Du "mehr" willst. Als "bessere" IDE wenn Du 
von Arduino kommst kannst Du Atmel Studio nehmen und mit WinAVR dazu den 
C-Compiler einbinden. Dann kannst Du damit die gleiche Hardware 
programmieren und musst nicht neu kaufen, oder aber Du machst eigene 
Hardware auf AVR-Basis.

Das C darunter ist das gleiche, denn Arduino benutzt am Ende den 
gleichen C-Compiler. (Wenn auch vielleicht nicht die selbe 
Version(-snummer))

von Md M. (Firma: Potilatormanufaktur) (mdma)


Lesenswert?

my2ct schrieb:
> Hast du schon mal an C gedacht. Echte Programmierer verwenden das seit
> 45 Jahren und werden es auch weiterhin tun.

Und C++-Programmierer sind gar keine echten Programmierer?

von Wolfgang (Gast)


Lesenswert?

jan.F. schrieb:
> habe jetzt länger mit der Arduino IDE gearbeitet und würde nun auf
> besseres Werkzeug umsatteln.

Dann verwende Visual Studio zum Arbeiten mit den Arduinos
http://www.visualmicro.com/

von derjaeger (Gast)


Lesenswert?

>Und C++-Programmierer sind gar keine echten Programmierer?

Wahrscheinlich sind echte Hardware-Programmierer gemeint. Bei C++ ist 
das ja immer so aufgebläht.

von jan.F. (Gast)


Lesenswert?

Mit der Arduino IDE kann ich teils schon gut umgehen. Ich dachte es wäre 
Zeit für einen Schritt weiter.

Der Gedanke ist folgender, wenn ich eine neue Sprache lernen will, dann 
soll diese dann auch eine sein die eine breite Community hat und 
Zukunftssicher ist.

Aufgrund fehlenden Wissens kann ich natürlich nicht abschätzen ob jetzt 
C oder C++ es sein soll. Da seid ihr schon gefragt. Ihr seid ja ein Teil 
dieser Community.

Hauptsächlich will ich mich dem Arduino Bashing entziehen. Ansonsten ist 
es bis jetzt ausreichend für mich.

Als Werkzeug benutze ich das Programm Programino. Dieses sieht schon 
seriöser aus, und hat auch einige Tools dabei die das Programmieren 
erleichtern.

von derjaeger (Gast)


Lesenswert?

Wie wärs mit Atmel Studio und nackt auf einem Atmega programmieren in C 
ohne Bootloader und C++ - Bibliotheken ? So lernst du auch den Prozessor 
kennen und arbeitest mit den Registern, die sehr gut in den Datenblatt 
dokumentiert sind.

von jan.F. (Gast)


Lesenswert?

Ich werde mir erstmal Atmel Studio installieren und auf Youtube einige 
Videos ansehen. Vorrang hat erstmal den Umgang mit dem Werkzeug zu 
erlernen bevor es ans programmieren geht.

von Retro N. (retronerd)


Lesenswert?

my2ct schrieb:
> jan.F. schrieb:
>> Welche Sprache hat eine grosse Community und ist zukunftssicher?
> Hast du schon mal an C gedacht. Echte Programmierer verwenden das seit
> 45 Jahren und werden es auch weiterhin tun.

Was sind denn "Echte Programmierer"? Gibt es auch unechte?

von Einer K. (Gast)


Lesenswert?

jan.F. schrieb:
> Hauptsächlich will ich mich dem Arduino Bashing entziehen.

Falscher Ansatz!
Dem kann/darf/sollte man sich nicht entziehen, dem muss man sich 
stellen.
(gilt zumindest für mich)

Tute das was DU für sinnvoll erachtest.
Und wenn dann C++ an der Seite raus fällt, dann ist auch gut.

Baster schrieb:
> Arduino ist auch nur nur eine runde Umgebung aus einfachst gehaltener
> IDE, einer Menge Bibliotheken zu aller möglichen Peripherie und einer
> halbwegs vereinheitlichten Hardwareplatform.
>
> Darunter steckt als Sprache C ..
Eben nicht!

Im Augenblick ist C++11 der Standard.
Aber es geht auch C und Assembler.

Nicht jedem liegt die OOP, aber das macht sie weder gut, noch schlecht.

Stanislaw Jerzy Lec schrieb:
> Auch das Gute hat zwei Seiten.
> Eine gute und eine böse.

von Einer K. (Gast)


Lesenswert?

Retro N. schrieb:
> Was sind denn "Echte Programmierer"?

https://www.bernd-leitenberger.de/echte-programmierer.shtml

jan.F. schrieb:
> und auf Youtube einige
> Videos ansehen.
Ich glaube nicht, dass das der "wahre" Pfad ist.

von Retro N. (retronerd)


Lesenswert?

Arduino F. schrieb:
> Retro N. schrieb:
>> Was sind denn "Echte Programmierer"?
>
> https://www.bernd-leitenberger.de/echte-programmierer.shtml

LOL
You made my day :-))))

von Retro N. (retronerd)


Lesenswert?

jan.F. schrieb:
> Ich werde mir erstmal Atmel Studio installieren und auf Youtube
> einige


Das Atmel Studio basiert auf der Visual Studio IDE und ist schön, aber 
aufgeblasen, erfordert einen modernen Quadcore Rechner mit mind. 8 Gbyte 
RAM, wenn man einigermassen flüssig arbeiten will.

jan.F. schrieb:
> Kurz und knapp gefragt. Welche Sprache hat eine grosse Community und ist
> zukunftssicher? Bei der Arduino Community gab es sehr viel Hilfe und
> verständliche Tutorials.

Eine Übersicht findest Du hier:
https://www.mikrocontroller.net/articles/AVR

C hat IMHO die größere Community, Assembler kommt gleich danach. (Freue 
mich schon auf den Flame War hier im Forum).

Das alte AVRStudio 4.x immer sehr zu empfehlen weil klein, schnell, 
schlank support für debugging mit JTAG + DebugWire, ich programmiere 
damit die billigen China nano Boards. Brauchst aber auch einen passenden 
Programmer. Neben den Atmel China-Billig-ISP_JTAG-Clones ist IMHO immer 
noch der AVRDragon die erste Wahl: Up to Date Programmer mit (fast) 
allen Modi, und debugger.
http://www.atmel.com/tools/avrdragon.aspx?tab=documents

AtmelStudio ist für ganz neue Microchip MCU's, mit Plug+Play inkl. 
debugging speziell auch für die Xplained Boards wie z.B. 
http://www.atmel.com/tools/mega328p-xmini.aspx optimal, aber wie gesagt 
sehr aufgeblasen.

Wenn Du lieber BASIC Programmieren willst, würde ich einen Blick auf 
Luna AVR https://avr.myluna.de/ werfen, die haben inzwischen ziemlich 
viele Freunde und jede Menge libs.

Du kannst natürlich auch Forth oder Pascal nehmen, aber da dürfte die 
Unterstützung nicht nur hier im Forum ziemlich gering ausfallen

: Bearbeitet durch User
von Adam P. (adamap)


Lesenswert?

Hey jan.F.

klar, alle haben Ihre eigene Meinung...
aber, wenn du erstmal weiterhin bei der ATmega Famile bleiben willst:

1. Programmiere in C
2. sollten zeitkritische Dinge dabei sein, greife in C auf "inline 
assembler"
3. Atmel Studio ist für ATmega erstmal die einfachste Lösung

Ich habe auch mit C und nem Pollin AVR Board angefangen.

Wenn man nichts verstehen möchte und nur will das alles tut, sind die 
LIB's usw. vom Arduino echt top. (Doch du willst wohl mehr)

Datenblatt deines µC lesen (bzgl. Peripherie), nach Source Codes suchen 
und versuchen zu verstehen...so lernt man am meisten, ah und das 
"rumspielen" nicht vergessen!

Glaub mir, so wild ist es nicht :)

Ich hab vorhin innerhalb von 5 min. ein fremden Code zu Testzwecken 
implementiert um RGB LEDs anzusteuer. Einmal den Sinn verstanden ist 
alles das gleiche. Viel Erfolg!

Um es korrekt zu halten: (hier der Verweis)
TitelBeitrag "Anzahl PWM Ausgänge zu Anzahl RGB LEDs"

von Adam P. (adamap)


Lesenswert?

Retro N. schrieb:
> mind. 8 Gbyte
> RAM

Wer hat das als Entwickler nicht? ...oder (Gamer)
Win braucht doch schon locker 4 :-D

Retro N. schrieb:
> C hat IMHO die größere Community, Assembler kommt gleich danach. (Freue
> mich schon auf den Flame War hier im Forum).

OH JA, da freu ich mich auch schon drauf, wobei beides seine 
Berechtigung hat...

aber doch bitte kein C++.

Retro N. schrieb:
> AtmelStudio ist für ganz neue Microchip MCU's, mit Plug+Play inkl.
> debugging speziell auch für die Xplained Boards wie z.B.
> http://www.atmel.com/tools/mega328p-xmini.aspx optimal, aber wie gesagt
> sehr aufgeblasen.

Er muss das ASF ja nicht nutzen (falls ich dich richtig verstehe). Für 
die ATmega Serie gibts da eh kaum was.

von Carsten S. (dg3ycs)


Lesenswert?

Hi,
jan.F. schrieb:
> Hauptsächlich will ich mich dem Arduino Bashing entziehen. Ansonsten ist
> es bis jetzt ausreichend für mich.

Sofern du nicht beruflich etwas in Richtung Embedded Devices machen 
willst wäre mir soetwas wie "Arduino Bashing" egal.
Entweder es reicht für deine Ansprüche oder es reicht nicht.
Zudem geht es beim sogenannten "Arduino Bashing" ja noch nicht einmal um 
die Arduino Software selbst, sondern darum das ein nicht gerade kleiner 
Teil der Arduino Nutzer sich da nett aussehnde Projekte nach Copy & Past 
Manier zusammenklickt, dabei nicht mal im Ansatz versteht was sie 
wirklich machen, sich aber gleichzeitig für die ultimativen 
Superprogrammierer halten.

Personen die sich richtig einschätzen und wissen wo sie vom Wissen 
stehen sind da meist aussen vor. Sei es der erfahrene Programmierer der 
aus Bequemlichkeit für ein Projekt (oder einen Test) auf Arduino 
zurückgreift weil es da schon etwas in der Richtung fast fertig gibt, 
sei es der Einsteiger der Arduino nutzt weil er es selbstständig (noch) 
nicht kann, aber sich dessen auch bewusst ist.

jan.F. schrieb:
> Der Gedanke ist folgender, wenn ich eine neue Sprache lernen will, dann
> soll diese dann auch eine sein die eine breite Community hat und
> Zukunftssicher ist.

Ist verständlich!
Wobei man immer unterscheiden muss zwischen dem eigentlichen Syntax der 
Sprache und dem Programmierparadigma das hinter der Sprache steht.
Der Syntax, das sind die Schlüsselwörter. DAvon haben die meisten 
Sprachen nur wenige. Dazu kommen dann noch die wichtigsten Bibliotheken 
usw.
So einen Syntax hat man in wenigen Stunden bis Tagen komplett drinnen.
Das ist kein riesiger Aufwand.

Was viel Erfahrung und Übung braucht bis man es wirklich beherrscht das 
sind die Programmierparadigmen die hinter den Sprachen stehen.
(Z.B. ob es eine objektorientierte oder prozedurale Sprache ist)
Wenn man eine Sprache samt dahinterstehendem Paradigma gut beherrscht 
ist es nur ein sehr kleines Problem bis man eine weitere Sprache aus 
demselben Bereich beherrscht. Selbst wenn sich der Syntax stark 
unterscheidet.

Andersherum ist es für die meisten ein enormer Kraftakt wenn die Sprache 
die man lernen will ein anderes Paradigma verfolgt als man bisher 
gewohnt ist. Da kann die Syntax noch so ähnlich sein!

Bestes Beispiel ist der Wechsel von C nach C++ und umgekehrt.
Der Syntax von C++ baut auf dem Syntax von C auf.
Ja, der komplette Syntax von C ist in C++ enthalten.
(das entweder der größte Vorteil oder der größte Nachteil von C++. Je 
nach Sichtweise)
Die sind sich auf dem ersten Blick daher sehr ähnlich!
Allerdings ist C eine prozedurale Sprache, C++ ist eine 
objektorientierte Sprache (die man als Besonderheit von C++ als 
prozedurale Sprache missbrauchen kann)
Wenn jetzt Jemand der bisher nur objektorientiert Programmiert hat 
plötzlich mit "normalen" C arbeiten soll und dabei effektive Programme 
zu Stande bringen muss, dann hat er, obwohl er den Syntax praktisch 
schon seit  Jahren kennt, damit viel mehr Probleme als wenn er auf Java 
umsteigen muss.
Umgekehrt gilt das natürlich genauso. Ein C Programmierer der auf C++ 
umsteigen soll wird damit viel mehr Probleme haben als wenn er z.B. auf 
Pascal wechseln will. In der Realität endet das gerade bei C++ dann 
damit das zwar die C++ Befehle genutzt werden, aber im Prinzip weiter 
prozedural programmiert wird.
(gilt beides natürlich nur für den jeweiligen Erstkontakt mit dem 
jeweiligen Paradigma)

War bei mir damals nicht anders. Ich habe das mit dem C-Style C++ auch 
erst in den Griff bekommen und die OOP verstanden als ich mich erst auf 
Java konzentriert habe und erst als das ordentlich lief wieder C++ in 
Angriff genommen habe.

>
> Aufgrund fehlenden Wissens kann ich natürlich nicht abschätzen ob jetzt
> C oder C++ es sein soll. Da seid ihr schon gefragt. Ihr seid ja ein Teil
> dieser Community.

Das kommt darauf an WO du hin möchtest...
Nur Mikrocontroller oder auch PC?
Bei Mikrocontrollern: "Kleine" 8 und 16bitter "bare metal" oder aber 
größere Vertreter der 32Bit Familie auf denen ein OS läuft?

Auf dem PC ist im produktiven Einsatz ausser für sehr hardwarenahe 
Programmierung (treiber & Co. untere Schichten des Betriebssystems usw) 
durchweg die Objektorientierte Programmierung das Mittel der Wahl.
Mittlerweile viel Java, immer häufiger C# und natürlich immer noch C++.
Auch bei den "dicken" Mikrocontrollern mit OS ist C++ sehr stark 
vertreten.
(Wobei man alles grundsätzlich auch in C oder gar Basic ebenfalls 
hinbekommen könnte. Nur nicht so "schön")

Aber in dem Bereich den die meisten tatsächlich mit "Embedded Systems" 
verbinden, also der bereich von den kleinen 8Bittern bis zum unteren 
Mittelfeld der 32Bitter, da ist C nach wie vor das Mittel der Wahl!
Es gibt für praktisch jeden aktuellen Controller aus diesem Bereich 
einen praxistauglichen C Compiler. Die Beispiele/Application Notes und 
Libs der Controllerhersteller sind in C geschrieben. Sicher >90% der 
Projekte, egal ob kommerziell oder Freizeit, auf dieser Klasse von 
Controllern wird in C realisiert.

Es gibt auch für diesen Bereich C++ Compiler, teilweise selbst für 
kleine 8Bitter. Aber zum einen lange nicht für alle, zum anderen ist das 
alleine aus Kapzitätsgründen gerade kein "reines C++ nach Lehrbuch" 
sondern in der Realität ein Mischmasch. Je kleiner der Controller wird 
um so mehr verschiebt sich das in Richtung C mit C++ Befehlen...
Und der Grad der Durchmischung und welche C++ Untermenge nun tatsächlich 
nutzbar ist variert von Compiler zu Compiler. Selbst da wo es mehrere 
Compiler für dasselbe Zielsystem gibt.

Das finde ich fürs erlernen absolut suboptimal!

Daher:
Für den Einsatz auf dem Mikrocontroller fange mit C an!
Nicht irgendein Mischmasch sondern mit reinem C!
Dafür kannst du deine bisherige Arduino Hardware problemlos 
weiterverwenden! Das macht es vielleicht auch leichter und sicher kommt 
so auch der eine oder andere AHA Effekt viel schneller.

Die allerersten Gehversuche in C (oder jeden anderen Programmiersprache) 
solltest du aber nicht auf dem Controller machen sondern auf dem PC.
Einfach weil du da viel leichter verfolgen kannst was dein Programm 
macht wenn es nicht das macht was es soll.
Erst nach ein paar Nachmittagen wenn du die Grundlagen sicher beherrscht 
würde ich auf den Controller wechseln.

Wenn du dann in C einigermaßen sicher bist und noch weiter lernen 
willst, dann ist es sicher nicht verkehrt sich mal die OOP bei der PC 
Programmierung anzuschauen.
Alleine schon weil mit fortschreitender Erfahrung auch immer öfter der 
Bedarf kommt seine Anwendung mit dem PC oder neuerdings dem Handy 
koppeln zu wollen. Und wenn man schon mal komplett eigene Projekte macht 
dann gibt es dafür kein Tool das andere für einen geschrieben haben. 
Allerdings gibt es Libs und Frameworks die es auch einem mittelmäßigen 
Programmierer erlauben in übersichtlicher Zeitspanne was auf die Beine 
zu stellen.
Die Libs und Frameworks für den PC und vor allem für das Handy sind aber 
üblicherweise in einer Objektorientierten Sprache geschrieben. (Bei 
Handy abseits von Apple nahezu immer Java)

Wie geschrieben würde ich dann aber nicht mit C++ anfangen sondern 
zumindest bis zu dem Zeitpunkt wo man den Hintergrund der OOP wirklich 
verstanden hat zu Java oder C# greifen wo man gar nicht erst in der Lage 
ist ein Paradigmenwischwasch zu schreiben.
Hat man es verstanden kann man natürlich auch wieder zu c++ greifen.
Dann spricht auch nichts dagegen auf Mikrocontrollern wo es geht und 
sinnvoll ist auch mit C++ zu arbeiten. Ja, wenn man es verstanden hat 
spricht nicht einmal etwas dagegen DA WO ES SINNVOLL IST bewusst mal die 
Grenzen verschwimmen zu lassen und einfach so zu programmieren wie es am 
zweckmäßigsten ist und es der Compiler hergibt. Und man kann sich 
problemlos auf jeden Compiler und jedes Zielsystem einstellen, egal 
welche Untermenge von C/C++ jetzt tatsächlich zur Verfügung steht.

Gruß
Carsten

: Bearbeitet durch User
von Jobst M. (jobstens-de)


Lesenswert?

jan.F. schrieb:
> Ich dachte es wäre Zeit für einen Schritt weiter.

Man nimmt das Werkzeug, mit dem man am besten klar kommt und das Problem 
lösen kann. Wenn man ein passendes Werkzeug hat, benötigt man kein 
anderes. Kann man zwar machen, aber es besteht kein Zwang.

Dafür braucht man sich auch nicht zu schämen, weil jemand anders sagt, 
dass er ein anderes Werkzeug benutzt. ... er mag damit besser klar 
kommen. Vielleicht.


Gruß
Jobst

von il Conte (Gast)


Lesenswert?

@Carsten Sch.

Also wenn du beim 'di-di-da-didit' genauso gut bist wie hier beim 
Schreiben, dann Respekt  ;-)

Ich fasse mal zusammen:
Du brauchst fast 30 Zeilen Text um zu dieser Aussage zu kommen:

Carsten S. schrieb:
> Für den Einsatz auf dem Mikrocontroller fange mit C an!
> Nicht irgendein Mischmasch sondern mit reinem C!

Dann kommen wieder ca. 25 Zeilen Text mit folgender Kernaussage:

Carsten S. schrieb:
> Hat man es verstanden kann man natürlich auch wieder zu C++ greifen.
> Dann spricht auch nichts dagegen auf Mikrocontrollern wo es geht und
> sinnvoll ist auch mit C++ zu arbeiten.

Deine Einlassung zum 'Arduino Bashing' hat 15 Zeilen Text.

In vier Zeilen nun die Information die ich aus deinem
Beitrag für mich herausgefiltert habe:

* Also ein Arduino kann man durchaus mit anderen IDE Werkzeugen 
benutzen.
* Man braucht sich dafür nicht zu schämen, betrachte es als EVAL-Board.

* Schreib deine Programme ausschließlich in 'C'
* Gelüstet dich nach C++ kauf dir eine 'Raspberry'.

73

PS1:
Ich frage mich, woher bei euch Funkern dieser ausschweifende
Mitteilungsdrang her kommt?

PS2: Bernd möge mir verzeihen ob diese Frage.

von Retro N. (retronerd)


Lesenswert?

il Conte schrieb:
> @Carsten Sch.
>
> Also wenn du beim 'di-di-da-didit' genauso gut bist wie hier beim
> Schreiben, dann Respekt  ;-)
> 73
>
> PS1:
> Ich frage mich, woher bei euch Funkern dieser ausschweifende
> Mitteilungsdrang her kommt?
Von Einem auf Alle zu schließen ist jetzt ein bisschen zu allgemein.

Man kann sicher darüber diskutieren, ob ein Post dieser Länge hier im 
Forum sinnvoll ist oder nicht, und am Ende den Einen oder Anderen evtl. 
zu sehr strapaziert.

Ich fand die Ausführungen interessant und mich hat dieser Beitrag 
schließlich mit (diesen 15 Zeilen)

>Deine Einlassung zum 'Arduino Bashing' hat 15 Zeilen Text.

nun tatsächlich motiviert, daß ich jetzt nach Jahren reiner C und asm 
Programmierung auch mal mit den Arduino libs spielen werde, die mir 
bisher eigentlich aus Prinzip zu unsportlich waren -
allerdings nicht mit dieser unsäglichen Arduino-IDE, sondern damit:
http://www.visualmicro.com/

P.S. QED: Es geht auch kürzer, ich bin auch Funkamateur, wenn auch 
derzeit nicht QRV

73

: Bearbeitet durch User
von Pete K. (pete77)


Lesenswert?

Wenn Du Dich weiterentwickeln möchtest, dann schau Dir mal andere 
Prozessoren, z.B. welche mit Netzanbindung an. Das Thema IoT greift ja 
auch immer mehr um sich und ohne Netzanbindung ist das nur halb so 
spannend ;-)

Ich empfehle den ESP8266 mit Programmierung in LUA. Alternativ findest 
Du hier im Forum auch vermehrt Einträge über CortexM3/M4/M7, daher gehe 
ich davon aus, dass diese auch eine gute Zukunft haben.

Die Programmiersprache ist meistens nicht das Problem, es sind die 
Frameworks und Bibliotheken, in die man sich einarbeiten muss.

von Fred R. (Firma: www.ramser-elektro.at/shop) (fred_ram)


Lesenswert?

Kannst dir auch die Compiler von Mikroe ansehen.
Mit denen arbeite ich ganz gern.
Wenn man die Funktionen der Programme schön von der verwendeten Hardware 
abgrenzt,kann man damit gleich mehrere Prozessorfamilien bedienen.

Unter Abgrenzung verstehe ich:
Nicht "Port.4 = 1", sondern "LED2_ON" Aufruf benutzen.
Im Sub "LED2_ON" wird dann erst die Hardwarezuweisung erledigt.

von Rolf H. (b0d0)


Lesenswert?

Pete K. schrieb:
> Die Programmiersprache ist meistens nicht das Problem, es sind die
> Frameworks und Bibliotheken, in die man sich einarbeiten muss.

Das wäre jetzt auch meinen Antwort gewesen. Gerade wenn man nicht 
berufsmäßig programmiert, sind die IDE (Debugger nicht vergessen) und 
gepflegten Bibliotheken (d.h. mit guter Dokumentation und passenden 
Beispielen) das wichtigste.

Für die gängigen Prozessoren wird es dann die Sprachen C/C++ sein.

PS: Bin auch gerade dabei ein paar NodeMCU-Projekte umzusetzen.

von jan.F. (Gast)


Lesenswert?

Guten Morgen Community,

ich habe mir alle Ausführungen eurerseits durchgelesen, und vieles 
erscheint mir schlüssig.

Zu meiner Person, es findet alles im Hobby und im Amateurumfeld statt.
Beruflich wird solches nicht gefordert sein. Von daher kann ich mich auf 
wenige Prozessoren konzentrieren.

Was ich bisher benutzt habe und auch weiter benutzen werde ist der 
Atmega328 und ESP8266.

Projekte waren teils Hausautomatisierung und Hardware für 
Spiele(Simulationen). Wie z.B. Aquariumsteuerung, Tachometer für 
Autorennspiele, diverse Spuleninstrumente ansteuern für 
Raumfahrtsimulationen.

Zuletzt hatte ich bisschen mit UDP Nachrichten und Serialcomistruments 
gearbeitet.

Von der vorhandenen Hardware will ich nicht weg, da sie mir preislich 
sehr entgegenkommen. Baugrösse ist nicht der ultimative Faktor für mich.

Nach dem ganzen lesen gehe ich davon aus, das C für mich das richtige im 
ersten Moment ist. Und falls ich Visualisierungen brauche sollte, könnte 
ich mir Java anlächeln.

Zuletzt ein dickes Dankeschön an die rege Beteiligung an diesem Thema. 
Ich bin mir im klaren das solch ein Thema anstrengend wirken kann und 
schnell in Lagerkämpfe ausartet.

von Einer K. (Gast)


Lesenswert?

jan.F. schrieb:
> Lagerkämpfe
Natürlich!
Denn über Geschmack lässt sich vortrefflich streiten.

Privat hat man freie Auswahl.

Im kommerziellen Umfeld hat man sich meist der Firmenphilosophie/Team 
anzupassen. Kosten für die Entwicklungsumgebung sind da ehe zweit- oder 
fünftrangig.

jan.F. schrieb:
> Was ich bisher benutzt habe und auch weiter benutzen werde ist der
> Atmega328 und ESP8266.
Dann ist Assembler quasi gestorben, da nicht portabel.
C/C++ ist die Wahl.

Die Arduino Umgebung kann beides.

AtmelStudio ist dann die falsche Wahl, denn es kann kein ESP und kein 
Java.

Evtl. Eclipse
Denn das kann ESP, AVR, Java usw.
Eigentlich alle Prozessoren und Sprachen.
Läuft auf allen üblichen Betriebssystemen

Eine Eier-Legende-Woll-Milch-Sau.

von Johannes (Gast)


Lesenswert?

Ich habe deine Frage so verstanden, dass du statt Arduino mit anderen 
Mikrocontroller-Entwicklungsboards arbeiten willst. In dem Bereich wären 
Java und C# aufgrund begrenzter Ressourcen deplaziert. Du wirst deine 
Hardware nich mit virtuellen Maschinen belasten wollen, nur um eine 
programmiererfreundlichere Form der OOP betreiben zu können.

C ist ohne Frage die wichtigste Programmiersprache im Bereich 
Mikrocontroller. Das beherschen von Assembler ist in Ausnahmefällen auch 
wichtig, aber würde ich erstmal hinten anstellen. OOP mit C++. Die Nähe 
zur Hardware ist hierbei ausschlaggebend.

Beim Umstieg von Arduino auf allgemeine Mikrocontroller-Programmierung 
ist das Lernen der Programmiersprache C aber nicht die große 
Herausforderung. Die Kenntnis der Eigenheiten der verwendeten Hardware 
ist da die größere Lernaufgabe. Hast du bei der Arbeit mit dem Arduino 
schonmal in das Datenblatt des ATMega328 geschaut? Das ist ab jetzt dein 
bester Freund.

von chris (Gast)


Angehängte Dateien:

Lesenswert?

>Was sind denn "Echte Programmierer"? Gibt es auch unechte?

Kein Ahnung, aber auf dem Bild kann man sehen, wie echte Programmierer 
aussahen.

von il Conte (Gast)


Lesenswert?

chris schrieb:
> aber auf dem Bild kann man sehen, wie echte Programmierer
> aussahen.

Nur aus Neugierde :
Wer wahr auf dem Bild derjenige der sich  das MS-DOS ausgedacht und
programmiert hat ?
(das Buberl unten links kanns wahrscheinlich nicht gewesen sein ;-)

von chris (Gast)


Lesenswert?

Vielleicht sollte man auch mal Micropython in Betracht ziehen, wenn es 
um Zukunftssicherheit geht:
https://micropython.org/
Boards auf denen das läuft, gibt es mittlerweile genug.

von Johannes S. (Gast)


Lesenswert?

Arduino ist doch C++, man muss es nur nutzen. Man kann C++ auch 
missbrauchen und den ganzen Code in ein ellenlanges loop() reinschreiben 
und jegliche Strukturierungsmöglichen ignorieren. So sehen leider viele 
Arduino Sketches aus. Wenn man ein Programm ordentlich aufbaut halte ich 
es nicht für verwerflich den Luxus von Bibliotheken zu nutzen.
Die 'Marlin' Firmware in Millionen 3D-Druckern zeigt doch das man mit 
dieser Platform durchaus brauchbares erstellen kann.
Ich würde allerdings eher auf 32-Bitter setzen, da ist viel mehr Luft 
nach oben. Und das Preisargument zieht auch nicht, siehe Bluepill board 
für 2 US$. Auch andere Cortex-M0 kosten weniger als 2€ und haben viel 
mehr Flash, RAM und Peripherie als die steinalten ATMegas. Die schon 
genannte 3D Drucker Software ist mittlerweile auch am Limit mit den 
ATMegas und wird jetzt aufwändig in die 32 Bit Welt portiert.

von Verteiler (Gast)


Lesenswert?

il Conte schrieb:
> (das Buberl unten links kanns wahrscheinlich nicht gewesen sein ;-)

Dummerweise ist es genau der :-)

Beitrag #5150997 wurde vom Autor gelöscht.
von Retro N. (retronerd)


Lesenswert?

chris schrieb:
>>Was sind denn "Echte Programmierer"? Gibt es auch unechte?
>
> Kein Ahnung, aber auf dem Bild kann man sehen, wie echte Programmierer
> aussahen.

Microsoft? Bill Gates? Ach Du sch...

Das waren doch die, die nur das MS-Basic selbst programmiert haben, der
Rest wurde zugekauft und von Tim Paterson entwickelt (MS-DOS).
https://de.wikipedia.org/wiki/MS-DOS

Dann schon lieber der
https://de.wikipedia.org/wiki/Dennis_Ritchie

und der
https://de.wikipedia.org/wiki/Tim_Berners-Lee

: Bearbeitet durch User
von Herbert B. (herbert_b)


Lesenswert?

chris schrieb:
> Kein Ahnung, aber auf dem Bild kann man sehen, wie echte Programmierer
> aussahen.

Bärte! Die Leute müssen wieder Bärte haben, dann wird Alles gut. Um mich 
herum sehen auch alle aus, als wären sie die Auswechselspieler von 
ZZ-Top.

Damit eine Vorstellung entsteht:
https://www.youtube.com/watch?v=Z_4ULKpkLNc

Herbert

: Bearbeitet durch User
von Retro N. (retronerd)


Lesenswert?

Herbert B. schrieb:
> chris schrieb:
>> Kein Ahnung, aber auf dem Bild kann man sehen, wie echte Programmierer
>> aussahen.
>
> Bärte! Die Leute müssen wieder Bärte haben, dann wird Alles gut.
Ich finde die aktuelle Bartmode sieht eher aus wie bei meinem 
Ur-Grossvater. Schrecklich!

https://de.wikipedia.org/wiki/Barthaar

>Um mich
> herum sehen auch alle aus, als wären sie die Auswechselspieler von
> ZZ-Top.


Das erinnert mich an die Leningrad Cowboys, die tragen neben ihrer 
adretten Frisur jetzt auch Bärte, außer den weiblichen Bandmitgliedern 
(oder doch?)



https://blog-001.west.edge.storage-yahoo.jp/res/blog-18-ee/marbini0302/folder/348141/75/26871075/img_0_m?1442409718

: Bearbeitet durch User
von Dirk B. (dirkb2)


Lesenswert?

Echte Programmierer:
https://xkcd.com/378/

von Einer K. (Gast)


Lesenswert?


von A. S. (Gast)


Lesenswert?

Retro N. schrieb:
> Microsoft? Bill Gates? Ach Du sch...
>
> Das waren doch die, die nur das MS-Basic selbst programmiert haben

Naja, es waren die, die fast jedem Heimcomputer der damaligen Zeit Leben 
eingehaucht haben. Angefangen mit einem Computer, den es noch gar nicht 
gab, sondern den Paul Allen nur emuliert hatte.

Man kann über solche Cracks (wie auch Steve Woszniak) denken, was man 
will. Sie gehörten zu den genialsten und fleißigsten Programmierern 
ihrer Zeit.

von Info (Gast)


Lesenswert?

jan.F. schrieb:
> Arduino IDE gearbeitet und würde nun auf
> besseres Werkzeug umsatteln.

Die IDE unterstützt auch externe Editoren.
Sieh dir den Aufbau des "Arduino core" an.
Das Framework basiert auf avr-libc. Du kannst C++ und C mischen.
Lasse nach und nach die Arduino-Funktionen weg: z.B. das Serial Objekt 
ersetzen mit etwas eigenem (für C: siehe Tutorial hier).

Viel Erfolg.

von Ben W. (ben_w)


Lesenswert?

irgend eines der sehr günstigen STM32 Nucleo boards (ARM Cortex-M0 - 
M4), die sind auch oft mit Arduino shields kompatibel und werden auch 
oft von ST einfach verschenkt.

Für die ersten schritte die libs und IDE von mbed.

Wenn du einigermaßen den überblick hast dann eine gängige kostenloses 
IDE, z.B. Attolic True Studio, STM Workbench oder gar eine eigene 
toolchain mit GCC aufsetzen (ist mittlerweile relativ simple).

Sobald wie möglich immer mehr C++ Aspekte anschauen und üben. Am besten 
mindestens den C++ Standard 2011.


Alternativ direkt etwas exotischeres wie die Sprache "Rust" :)

von Stefan F. (Gast)


Lesenswert?

Das schöne an C++ ist:

- Du kennst es schon
- Damit kannst du auch PC und Smartphones programmieren
- Es setzt auf C auf, du wirst also alle Anleitungen bezüglich C leicht 
verstehen können
- Wenn du später zusätzlich Java oder C# lernen musst, wird Dir sehr 
vieles sehr bekannt vorkommen. Die ersten Kapitel der Tutorials kannst 
du im Galopp hinter Dich bringen.

von Toxic (Gast)


Lesenswert?

Stefan U. schrieb:
> - Wenn du später zusätzlich Java oder C# lernen musst, wird Dir sehr
> vieles sehr bekannt vorkommen. Die ersten Kapitel der Tutorials kannst
> du im Galopp hinter Dich bringen.

Du meinst so ?
https://youtu.be/hLYg_hnidWI?t=494
;-)

von Noch ein Ham (Gast)


Lesenswert?

Hallo

"Was viel Erfahrung und Übung braucht bis man es wirklich beherrscht das
sind die Programmierparadigmen die hinter den Sprachen stehen.(Z.B. ob 
es eine objektorientierte oder prozedurale Sprache ist).
Wenn man eine Sprache samt dahinterstehendem Paradigma gut beherrscht
ist es nur ein sehr kleines Problem bis man eine weitere Sprache aus
demselben Bereich beherrscht. Selbst wenn sich der Syntax stark
unterscheidet."

Eine klare Aussage lieber Carsten und doch immer noch ein wenig zu kurz 
gegriffen.
Könntest du genauer erklären wie man ein Programmierparadigma 
beherrscht?
Wenn ich nämlich meine "Probleme" beim programmieren erlernen (C für µC 
und 8Bit AVR) analysiere scheint genau das der Knackpunk zu sein.
Gibt es da etwas mehr Möglichkeiten als "nur" Erfahrung und Übung um 
"echtes" Programmieren und das jeweilige Programmierparadigma zu 
verinnerlichen (also nicht "nur" die reine "Grammatik" zu erlernen) so 
das man es nicht nur vom "Kopf" her versteht sondern auch aus dem 
"Bauch" heraus?

Meine "Probleme" liegen desweiteren nicht in den Verständnis wie C im µC 
Umfeld funktioniert, und auch nicht wie ein µC (8Bit AVR) auf 
Hardwareebene funktioniert und z.B. Register behandelt werden - sondern 
ehr darin wie ich ein Projekt angehe (In einzelne Teilaufgaben zerlegen 
ist einfacher gesagt als getan) und wie ich auf die manchmal, von 
Grundsatz und ganz unabhängig von der Programmiersprache her, recht 
"verworrene" Lösung komme wie ein Problem angegangen wird (als 
"billiges" Beispiel z.B. ein in Software erstellter Rastschalter) - wenn 
ich mir eine gute Dokumentation zu z.B. einer Software 
Rastschalterfunktion anschaue kann ich diese nach mehrmaligen 
konzentrierten durchlesen und "Simulieren" im Kopf und auf Papier(!) 
nachvollziehen - aber selbst auf solch eine Lösung zu kommen... (sehr) 
schwierig - bis unmöglich.
Wie erlerne ich so etwas - gibt es mehr Empfehlungen außer Training und 
Übung?
Wie sähe den ein gutes Training aus?
Irgendwie ist mir der immer wieder allgemeine gegebene Tipp: 
"Ausprobieren, Fehler machen und aus den Fehlern lernen" zu wenig und zu 
Oberflächlich - das "muss" ,-) doch auch gezielter und einfacher gehen?!

noch ein Ham

von Stefan F. (Gast)


Lesenswert?

> Wie sähe den ein gutes Training aus?

Es gibt jede Menge Bücher mit dem Wort "Patterns" oder "Entwurfsmuster" 
im Namen, da werden Lösungen für häufige Programmier-Probleme 
aufgezeigt.

Darüber hinaus kommst du aber nicht ums "Learning by Doing" herum.

Wenn Du eine Lösung gefunden hast, die Dir elegant vorkommt, dann 
diskutiere sie mit anderen Entwicklern. Dieser Austausch untereinander 
ist am Ende der wichtigste Aspekt, besser zu werden.

Hier im Forum täglich mit zu lesen ist auch hilfreich. Da werden 
Probleme diskutiert, die du nicht einmal erahnt hast. Und es werden 
Lösungen gezeigt, von denen du etwas lernen kannst.

> In einzelne Teilaufgaben zerlegen ist einfacher gesagt als getan

Und doch ist es die Hauptaufgabe eines jeden Softwarenetwicklers. Eine 
gewisse Portion Talent gehört sicher auch dazu.

Um eine Wald zu roden, muss man viele Bäume umhauen. In diesem Fall 
besteht das "zerlegen" also, sich auf den einzelnen Baum zu 
konzentrieren und zu überlegen, wie man den am schnellsten weg haut.

Ein unfähiger Entwickler würde sagen "Das kann ich alleine mit meiner 
Axt nicht schaffen. Der Wald ist viel zu groß." Während der fähige 
Entwickler längst unterwegs ist, Hilfe oder ein besseres Werkzeug zu 
beschaffen. Und der dumme aber fleißige hat wenigstens angefangen zu 
Hacken, obwohl ein Ende nicht in Sicht ist.

von il Conte (Gast)


Lesenswert?

Noch ein Ham schrieb:
> wenn
> ich mir eine gute Dokumentation zu z.B. einer Software
> Rastschalterfunktion anschaue kann ich diese nach mehrmaligen
> konzentrierten durchlesen und "Simulieren" im Kopf und auf Papier(!)
> nachvollziehen - aber selbst auf solch eine Lösung zu kommen... (sehr)
> schwierig - bis unmöglich.
> Wie erlerne ich so etwas - gibt es mehr Empfehlungen außer Training und
> Übung?

Das geht am besten wenn man sich dem PROBLEM annähert!

Vorne weg mal folgendes:
Ich bin ich der Meinung dass es zwei Typen von Menschen gibt
was das Lernen anbetrifft.

Die eine Hälfte lernt alles auswendig, die verinnerlichen praktisch
die Bedienungsanleitung. Die Kurzform ist die Checkliste:
wenn LED A rot blinkt dann Taster grün drücken usw.

Die 2. Hälfte spielt sich rum und prägt sich die Wege ein die zum Erfolg 
führen. Das sind die:

'Lerning by doing' oder wie du es  ausdrückst
'Ausprobieren, Fehler machen und aus den Fehlern lernen'

Diese beiden Typen sind dir bestimmt schon begegnet:
Man fragt die ganz simpel: Erklär mal wie das funktioniert.

Die Ersteren erklären dir alles wie aus der Pistole geschossen,
die brauchen dazu nicht mal ein Anschauungsobjekt.

Die Zweite Hälfte schaut dich verdutzt an und erklärt dir, dass sie es 
nicht können und erzählt dir weiter dass man da nur einmal oder zweimal 
auf was drückt und dann geht es.

Wenn sich aber nun am Gerät was ändert, wenn die LED nicht mehr rot
sondern gelb blinkt und dann noch der Taster irgendwo anders platziert 
ist
dann haben die 'Auswendigkönner' richtig Stress.

Die 'Ausprobier' Fraktion fangen sofort wieder damit an rum zuspielen 
bis
sie den neuen Weg gefunden haben.

Um den Kreis zu schließen, um dir zu erklären wie man zu einer eigenen 
Lösung kommt ist es von Vorteil wenn man  der 2. Fraktion angehört ;-)

Bezogen auf deine RastSchalterfunktion könnte das folgender maßen 
aussehen:

Als erstes würde ich an einen freien Port-Pin einen Taster anschließen
und eine Entprell-Funktion implementieren.
Das Ergebnis davon auf einen weiteren PIN ausgeben,
sodass man das am Oszi (oder LA) gut darstellen kann.
Dann würde ich das 1. mal 'rumspielen' bis es dann gut funktioniert.

Als nächste käme dann eine Flankenerkennung (gedrückt / nicht gedrückt)
dazu die genau so getestet wird.

Weiter als nächstes käme dann  ein flankengetriggertes Flipflop 
(softwaremäßig) dran, dessen Ausgang wiederum auf den PIN gegeben wird 
um das Resultat zu überprüfen.

Damit das Auge auch was davon hat, kannst du eine LED dranhängen
und dann voller Stolz deinem Partner vorführen ;-)


Wie du vieleicht erahnen kannst  - man lernt sozusagen spielerisch.
Wenn es hinhaut kann das sehr motivierend sein.
Und sollte das gleiche Problem ein 1/4 Jahr später erneut auf dich 
zukommen
machst du sowas dann mit links.

von Retro N. (retronerd)


Lesenswert?

Achim S. schrieb:
> Retro N. schrieb:
>> Microsoft? Bill Gates? Ach Du sch...
>>
>> Das waren doch die, die nur das MS-Basic selbst programmiert haben
>
> Naja, es waren die, die fast jedem Heimcomputer der damaligen Zeit Leben
> eingehaucht haben. Angefangen mit einem Computer, den es noch gar nicht
> gab, sondern den Paul Allen nur emuliert hatte.
>
> Man kann über solche Cracks (wie auch Steve Woszniak) denken, was man
> will. Sie gehörten zu den genialsten und fleißigsten Programmierern
> ihrer Zeit.

Das waren keine Cracks, sondern nur 2 clevere junge Kerle, die es 
verstanden haben mit wenig Aufwand den größtmöglichen Nutzen zu 
erzielen.
https://en.wikipedia.org/wiki/Altair_BASIC

Woz ist da schon ein ganz anderes Kaliber, als die damaligen 3 
Mitglieder des  MS-Gesangsvereins. Neben genial puristischen Hardware 
Designs wo jedes Gatter einzeln optimiert war (AppleII Mainboard Refresh 
Logic+Grafik, DiskII Controller), hatte Steve Wozniak schon für den 
Apple I mal auf die Schnelle, ohne einen Assembler zu benutzen ein 
Integer Basic mit OP-Codes auf Papier geschrieben und als Hexdump 
implementiert.
https://de.wikipedia.org/wiki/Apple_Integer_Basic

Unbedingt sehenswert: 
https://www.amazon.de/Silicon-Valley-Story-Noah-Wyle/dp/B006WVESHW

von Erfahrener Programmierer (Gast)


Lesenswert?

Carsten S. schrieb:
> Zudem geht es beim sogenannten "Arduino Bashing" ja noch nicht einmal um
> die Arduino Software selbst, sondern darum das ein nicht gerade kleiner
> Teil der Arduino Nutzer sich da nett aussehnde Projekte nach Copy & Past
> Manier zusammenklickt, dabei nicht mal im Ansatz versteht was sie
> wirklich machen, sich aber gleichzeitig für die ultimativen
> Superprogrammierer halten.

Leider wird Dir der geistige Horizont fehlen, um zu erfassen dass Du 
gerade mit herunter gelassen Hosen da stehst...

Du bist einer der Zweitklässler die zu fünft einen Erstklässler 
auslachen. Messe Dich stattdessen doch mal mit Dritt- und Viertklässler!

Selten so ein Eigentor gesehen wie Du es hier fabriziert hast...

von Retro N. (retronerd)


Lesenswert?

il Conte schrieb:
> Die eine Hälfte lernt alles auswendig, die verinnerlichen praktisch
> die Bedienungsanleitung. Die Kurzform ist die Checkliste:
> wenn LED A rot blinkt dann Taster grün drücken usw.
>
> Die 2. Hälfte spielt sich rum und prägt sich die Wege ein die zum Erfolg
> führen.

Das ist aber eine extrem einseitige Sichtweise ;-)

Es gibt da die Anderen, die den Anspruch haben, ihre Programmiersprache 
systemunabhängig beherrschen wollen, ihre IDE verstehen wollen, sich 
über entsprechende Frameworks informieren und gelernt haben, eine 
Anforderung analytisch anzugehen.

Die vor dem Hands-On ein strukturiertes Lösungskonzept entwickeln um das 
ganze dann Schritt für Schritt (top-Down oder bottom-up) in Code zu 
verwirklichen.

Man muss dazu kein Profi sein, aber eine solide Ausbildung hilft da 
ungemein.

von jan.F. (Gast)


Lesenswert?

Jetzt bin ich ein bisschen verwirrt. C nur für Mikroprozessoren.
C++ ist Objektorientiert. Also wenn ich später mal mit Java oder C# was 
machen sollte bin ich vorerst auf der Gewinnerstrasse.

Und die Syntax von C ist in C++ drin. Dann ist das Logische also C++ zu 
lernen.

von A. S. (Gast)


Lesenswert?

Retro N. schrieb:
> Das waren keine Cracks, sondern nur 2 clevere junge Kerle, die es
> verstanden haben mit wenig Aufwand den größtmöglichen Nutzen zu
> erzielen.
> https://en.wikipedia.org/wiki/Altair_BASIC

Naja, lange ist's her und natürlich steht Woz mir (wie wohl jedem 
Entwickler) näher. Den beiden sollte man aber zugute halten, dass sie 
das Basic entwickelten, ohne den Prozessor je gesehen zu haben. Und dass 
sie die Maßstäbe gesetzt haben, trotz ihrer Jugend (ein paar Jahre 
jünger also Woz).

von Christopher J. (christopher_j23)


Lesenswert?

jan.F. schrieb:
> Und die Syntax von C ist in C++ drin. Dann ist das Logische also C++ zu
> lernen.

Das ist meiner bescheidenen Meinung nach ein Trugschluss den viele 
machen (und dem ich selber auch mal aufgesessen bin). Nur weil höhere 
Mathematik, z.B. das Lösen von Differentialgleichungen auch 
Multiplikationen einschließt, fängt man nicht in der 2. Klasse mit 
Differentialgleichungen an, sondern eben mit dem kleinen 1x1.

Da C++ per Definition nahezu den gesamten C-Standard einschließt, kannst 
du niemals ein guter C++-Programmierer werden, wenn du den C-Teil nicht 
verstehst.

von Dieter F. (Gast)


Lesenswert?

jan.F. schrieb:
> jan.F. (Gast)

Netter Versuch, wieder mal die alten Streitigkeiten hochkommen zu lassen 
- Du bist aber einen Tag zu früh, morgen ist Freitag :-)

0 Troll-Punkte :-)

Um mal wieder Minus-Punkte zu sammeln:

Spanisch, Englisch und Französich habe die größte "Community" (ich hoffe 
in der richtigen Reihenfolge) :-)

von Dirk (Gast)


Lesenswert?

Du willst von dem Arduino Werkzeug weg, weil die Anderen dich auslachen?

Meiner Meinung nach, muss ein Werkzeug seinen Zweck erfüllen.
Also für mich der beste (wie auch immer man das definiert) Weg zur 
Lösung eines Problems sein.
Ob ich mit einem Besen von Aldi oder von Manufaktum den Hof fege,
ist dem Kunen doch egal.
Der will nen sauberen Hof!
Und wenn auf der Rechnung ein 15% Zuschlag für einen handgeklöppelten 
Besen auftaucht,
darfst du ab sofort andere Höfe fegen.

Disclaimer:
Ich finde gute Werkzeuge sehr wichtig und bin gerne bereit für Qualität 
zu zahlen.
Auch ist die Eigenart, dass jeder Konzern (aka Kapitalsammelbecken) 
alles verkaufen muss, was er verkaufen kann verteufele ich zutiefst.
Das o.g. Beispiel ist damit nicht mit meiner Moral deckungsgleich.

von Dieter F. (Gast)


Lesenswert?

Dirk schrieb:
> Ich finde gute Werkzeuge sehr wichtig und bin gerne bereit für Qualität
> zu zahlen.
> Auch ist die Eigenart, dass jeder Konzern (aka Kapitalsammelbecken)
> alles verkaufen muss, was er verkaufen kann verteufele ich zutiefst.
> Das o.g. Beispiel ist damit nicht mit meiner Moral deckungsgleich.

Ähm ... GCC ist nicht kommerziell ... hust :-) und kann auch C++ ... 
(soweit mir bekannt)

Aber ich kann auch die eingefleischten Arduino-Jünger verstehen - jeder 
nach seiner Fasson.

von Retro N. (retronerd)


Lesenswert?

jan.F. schrieb:
> Jetzt bin ich ein bisschen verwirrt. C nur für Mikroprozessoren.

Schön das wir nach dem ganzen OT  wieder beim eigentlichen Thread-Thema 
sind... ,-)

> Jetzt bin ich ein bisschen verwirrt. C nur für Mikroprozessoren.

Ich vermute mal, Du hast die bisherigen Antworten nicht verstanden, 
oder?

Nr.1: Alles was Du an Sprachen genannt hast, führt am Ende irgendein µP 
aus, auch Java und Python und php.

> C++ ist Objektorientiert. Also wenn ich später mal mit Java oder C# was
> machen sollte bin ich vorerst auf der Gewinnerstrasse.

Nr.2: Jede Sprache hat ihre Daseinsberechtigung, aber eben in ihrem 
eigenen Umfeld und Anwendungsfall.
C ist schnell, effizient und hardwarenah und ist für ziemlich jede 
Plattform verfügbar, bildet die Basis zum Verständnis von C++, was aber 
etwas dann doch etwas ganz anderes ist.
Java ist interpretiert, läuft akzeptabel auf vielen Betriebssystemen mit 
modernen CPUs, und benötigt immer die installierte JRE von Oracle.

> Und die Syntax von C ist in C++ drin. Dann ist das Logische also C++ zu
> lernen.

Ja das glaubst auch nur Du. Beide Sprachen haben völlig unterschiedliche 
Paradigmen und damit unterschiedliche Denkweisen, Probleme zu lösen.
Für das Grundverständnis musst Du bei beiden Sprachen den Umgang mit 
Pointern lernen, sonst programmierst Du Basic in der Syntax von C.

Grundsätzlich gilt: Schlechter Code läßt sich in jeder Sprache schreiben 
und konterkariert die Vorteile der jeweiligen Sprache.

Tip: Lern erst mal C, auch durchaus zunächst auf dem PC, wenn das Ziel 
ist,  einen Microcontroller zu verstehen und hardwarenah zu 
programmieren, danach auch gerne C++ wenn Du für ein Betriebssystem 
programmieren möchtest. (oder C#, wenn es Dir lieber ist: in dem Fall 
auch mal nach "Mono" googlen)

Siehe auch hier: https://www.mikrocontroller.net/articles/C_vs_C%2B%2B

Besorg Dir gute Literatur, für C muss man nicht unbedingt den 
Kernighan-Ritchie nehmen, auch wenn der als Standard-Werk gilt.
Das wurde u.a. auch hier schon mal diskutiert:
Beitrag "C lernen / suche passendes Buch"
Für C++ ist dieses Buch empfehlenswert
https://www.amazon.de/Programmierer-lernen-professionell-anwenden-L%C3%B6sungen/dp/3446443460/ref=sr_1_1?ie=UTF8&qid=1506029570&sr=8-1&keywords=c%2B%2B

P.S. Das Arduino Framework ist in C/C++ geschrieben, verführt aber den 
Anwender dazu, nicht selbst denken zu müssen und nur Codeschnipsel aus 
dem Internet zu kopieren. Der besteht dann oft nur aus dem Aufruf der 
Library-Funktionen und wird als "Basic in C Syntax" verfasst.
Das liegt aber am Programmierer, nicht an der IDE. Als Compiler 
verwendet sogar die ArduinoIDE den avr-g++
Keiner hindert Dich daher also schon die ganze Zeit daran, sauberen 
C/C++ Code zu schreiben, oder anstelle der Libraries Deine eigenen 
Functions oder Objects zu coden, falls Du unbedingt an der ArduinoIDE 
festhalten willst.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

> Nur weil höhere Mathematik, z.B. das Lösen von Differentialgleichungen
> auch Multiplikationen einschließt, fängt man nicht in der 2. Klasse mit
> Differentialgleichungen an, sondern eben mit dem kleinen 1x1.

Der Vergleich hinkt, denn der TO kennt C++ bereits (wegen Arduino). 
Zumindest die Grundlagen davon.

> Java ist interpretiert
Seit Version 1.5 nicht mehr. Der sogenannte JIT Compiler übersetzt den 
virtuellen Maschinencode zur Laufzeit in echten Maschinencode.

> (Java) benötigt immer die installierte JRE von Oracle.
Nein, es gibt auch eine JRE aus der Community namens OpenJava, sowei 
eine von IBM und ich meine, Microsoft hat auch eine im Programm. Für 
Lego Mindstorms gibt es eine abgespeckte JRE aus einer anderen 
Community.

> Das Arduino Framework ist in C/C++ geschrieben, verführt aber den
> Anwender dazu, nicht selbst denken zu müssen und nur Codeschnipsel aus
> dem Internet zu kopieren.

Das hast du gut auf den Punkt gebracht.

von Christopher J. (christopher_j23)


Lesenswert?

Stefan U. schrieb:
>> Nur weil höhere Mathematik, z.B. das Lösen von Differentialgleichungen
>> auch Multiplikationen einschließt, fängt man nicht in der 2. Klasse mit
>> Differentialgleichungen an, sondern eben mit dem kleinen 1x1.
>
> Der Vergleich hinkt, denn der TO kennt C++ bereits (wegen Arduino).
> Zumindest die Grundlagen davon.

Der TO scheint "Arduino" für eine eigene Sprache zu halten. Seine 
C++-Kenntnisse schätze ich dementsprechend eher dürftig ein. Vermutlich 
ist er fähig Objekte zu instanziieren und eine Member-Funktion 
aufzurufen. Bei Leuten die aus der Arduino-Ecke kommen muss man sich 
manchmal schon fragen ob sie jemals eine eigene Funktion programmiert 
haben, geschweige denn eine ganze Klasse. Da fehlen meistens elementare 
Grundlagen, z.B. der sichere Umgang mit Zeigern oder das Verständnis 
welche Variable eigentlich wo im Speicher landet. Natürlich kann man 
sich das auch alles mit C++ erarbeiten und solange man im Arduino-Stil 
lediglich ein bisschen syntaktischen Zucker nutzt macht es die Sache 
auch nicht unbedingt viel komplizierter aber wer nicht einmal den 
Unterschied zwischen Stack und Heap kennt wird durch typische (für 
PC-Programmierung gedachte) C++-Lektüre zu allerlei Dummheiten 
verleitet. Von daher würde ich einem Anfänger eher zu C als zu C++ 
raten, einfach weil es überschaubarer ist.

von Retro N. (retronerd)


Lesenswert?

Stefan U. schrieb:
>> Java ist interpretiert
> Seit Version 1.5 nicht mehr. Der sogenannte JIT Compiler übersetzt den
> virtuellen Maschinencode zur Laufzeit in echten Maschinencode.
>
>> (Java) benötigt immer die installierte JRE von Oracle.
> Nein, es gibt auch eine JRE aus der Community namens OpenJava,

Echt jetzt?

Sorry war mir nicht bekannt, habe mich ehrlich gesagt in letzter Zeit 
nicht tiefer mit JAVA beschäftigt und demzufolge auch nicht aktuell 
gehalten.

Das sind Gründe, sich die Sache mal näher anzuschauen.

Gibt es für JAVA eine Standard IDE, oder nimmt man einen der üblichen 
Verdächtigen (Eclipse etc.)?

von Stefan F. (Gast)


Lesenswert?

neben Eclipse sind zum beispiel auch NetBeans und IntelliJ bekannt.

Auf Mikrocontrollern würde Java allerdings nicht ersthaft einsetzen 
wollen.

von Retro N. (retronerd)


Lesenswert?

Stefan U. schrieb:
> neben Eclipse sind zum beispiel auch NetBeans und IntelliJ
> bekannt.

Danke für den Hinweis, werde ich mir mal anschauen.

>
> Auf Mikrocontrollern würde Java allerdings nicht ersthaft einsetzen
> wollen.
Zumindest nicht auf 8 bit MCUs, bei SBCs mit ARM SoCs schon eher.

von Marcus (Gast)


Lesenswert?

Hier noch ein paar Arduino-Wahrheiten zum Wochenendausklang:

1. Arduino ist nicht AVR
Arduino Frameworks gibt es für viele Prozessoren. Angefangen vom ESP8266 
u.ä. bis zu allen möglichen ARM-Derivaten. Das Arduino Prinzip setzt auf 
Vereinfachung, wo Komplexität durch Nachlässigkeit der Entwickler 
unnötig ist. Das Framework stellt eine HAl dar und ist damit in Linie 
mit moderner Softwareentwicklung für Embedded Systeme.

2. Arduino Software wird nicht nur mit der Arduino-IDE entwickelt.
Viele IDEs werden unterstützt. Angefangen von Atmel Studio, Eclipse und 
viele andere.

3. Auch Profis verwenden Arduinos, wenn es zu den Anforderungen passt. 
Besonders für Testaufbauten lohnt sich oft die Eigenentwicklung eines 
speziellen Prozessor Boards nicht. Die Arbeitszeit eines Profis ist zu 
teuer, um sie zu verschwenden.

4. Echte Arduinospzezialisten kennen den Code des Frameworks und passen 
dieses entsprechend an, wenn es die Umstände erfordern.

5. Ist für eine Problem keine Library verfügbar, weiß der Profi, wie man 
selbst eine schreibt und einbindet.

Frohes Wochenende an alle Ardunauten ;-)

von Marcus (Gast)


Lesenswert?

Ach ja .. hier noch das beste Arduino-Framework für die STM32 MCUs.

https://github.com/danieleff/STM32GENERIC

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Stefan U. schrieb:
> Auf Mikrocontrollern würde Java allerdings nicht ersthaft einsetzen
> wollen.
Warum nicht? Laeuft doch auch auf deiner Sim-Karte und diversen 
Smartcards.

von il Conte (Gast)


Lesenswert?

Marcus schrieb:
> Hier noch ein paar Arduino-Wahrheiten zum Wochenendausklang:

Deine Anmerkungen sind ganz schön keck ! :-(

Mich würde es nicht wundern
wenn sie dich hier durch den Fleischwolf treiben :-(

Wenn ich dein Satement Nr.3 anschaue
und  mir dabei ein 10 fach gestacktes Arduino vorstelle,
dann kommt mir das kalte Grausen.

von Cyberpunk (Gast)


Lesenswert?

Retro N. schrieb:
> Stefan U. schrieb:
>> neben Eclipse sind zum beispiel auch NetBeans und IntelliJ
>> bekannt.
>
> Danke für den Hinweis, werde ich mir mal anschauen.
>
>>
>> Auf Mikrocontrollern würde Java allerdings nicht ersthaft einsetzen
>> wollen.
> Zumindest nicht auf 8 bit MCUs, bei SBCs mit ARM SoCs schon eher.

Wobei ein ARM SoC kein MCU mehr ist...

Kaj G. schrieb:
> Stefan U. schrieb:
>> Auf Mikrocontrollern würde Java allerdings nicht ersthaft einsetzen
>> wollen.
> Warum nicht? Laeuft doch auch auf deiner Sim-Karte und diversen
> Smartcards.

Wo läuft denn darauf Java? Google spuckte darüber auch nichts aus...
Es gibt einen ganz einfachen Grund weshalb Java nicht für MCU-Systeme 
geeignet ist, Java ist für eine Benutzung mit einer JVM zugeschnitten. 
Java, also die Sprache selbst, besitzt viele Eigenschaften die man auf 
diesen Systemen nicht zu gebrauchen sind. Z.B. dass alle außer den 
Standardtypen wie int Referenztypen sind, ergo einen Heap benötigen. Es 
gibt keine unsigned Typen. Objekte tragen viele Typinformationen mit -> 
Overhead. Keinen direkten Zugriff auf Speicher über Adressen. Die Liste 
lässt sich beliebig weiterführen. Es gibt zwar in der Tat Java Kompiler 
z.B. für AVR, das ganze ist aber rein akademischer Natur und ehrlich 
gesagt nicht zu gebrauchen, da Spezialkonstrukte benötigt werden und die 
Sprache letztenendlich nicht mehr Standardkonform ist.

von Sheeva P. (sheevaplug)


Lesenswert?

jan.F. schrieb:
> Nach dem ganzen lesen gehe ich davon aus, das C für mich das richtige im
> ersten Moment ist. Und falls ich Visualisierungen brauche sollte, könnte
> ich mir Java anlächeln.

C ist fein, die Basics von C++ mitzunehmen ist auch keine schlechte 
Idee. Für Visualisierungen ist Java recht aufwändig, da bieten sich eher 
Skriptsprachen wie Python oder ein kleines Webfrontend mit EcmaScript 
und so etwas wie flot, jqPlot oder jqWidgets [1,2,3] an.

[1] http://www.flotcharts.org/
[2] http://www.jqplot.com/
[3] https://www.jqwidgets.com/

von Retro N. (retronerd)


Lesenswert?

il Conte schrieb:
> Marcus schrieb:
>> Hier noch ein paar Arduino-Wahrheiten zum Wochenendausklang:
>
> Deine Anmerkungen sind ganz schön keck ! :-(

Nein, nur zutreffend.

von Sheeva P. (sheevaplug)


Lesenswert?

Arduino F. schrieb:
> Die Arduino Umgebung kann beides.
>
> AtmelStudio ist dann die falsche Wahl, denn es kann kein ESP und kein
> Java.
>
> Evtl. Eclipse

Eigentlich reichen eine ordentliche Shell, ein Build-System wie make und 
ein vernünftiger Editor wie Kate, UlraEdit, Notepad++, Geany, Sublime, 
Atom, vi oder Emacs, wobei die letzten beiden extrem leistungsfähig 
sind, aber nicht unbedingt für Anfänger und Gelegenheitsprogrammierer 
geeignet.

> Eine Eier-Legende-Woll-Milch-Sau.

Das ganze hochintegrierte IDE-Gerümpel eint das Problem, daß es, nunja, 
eben hochintegriert ist. Tausend kleine Fensterchen, in keinem kann man 
wirklich was sehen, tausend kleine Knöpfchen, die im Hintergrund dann 
doch nur wieder die guten alten Kommandozeilenwerkzeuge aufrufen, und 
wenn man mal ein paar Wochen nicht mit der IDE gearbeitet oder ein 
Update gemacht hat, darf man sich erstmal wieder einarbeiten...

Und dann lassen die IDEs nur das komfortabel zu, was ihre Hersteller 
sich ausgedacht haben und vorstellen können. In einem Nachbarthread will 
gerade jemand cmake nicht benutzen, obwohl es zwar sein Problem lösen 
würde, aber nicht mit seiner IDE kompatibel ist. Bestimmt gibt es 
irgendeinen Weg, das hinzubekommen, aber dazu muß man wieder genau die 
Arbeit investieren, die man durch die IDE eigentlich sparen wollte und 
sollte.

Deswegen kenne ich außer mir selbst noch eine ganze Reihe anderer 
Profis, die aus guten Gründen ganz bewußt auf IDEs verzichten. (Und 
bitte, liebe IDE-Freunde: erspart mir die übliche "aber meine IDE kann 
XY"-Debatte, die hab ich schon hundertmal geführt und alles, was Ihr mir 
da anpreist, kann ein vernünftiger Programmiereditor auch. Danke.)

In anderen Kontexten wird den Leuten auch immer wieder geraten, 
unbedingt mit Assembler oder wenigstens in C zu programmieren, damit man 
seinen uC möglichst gut kennenlernt. Nun, Mikrocontroller werden 
gemeinhin nach der zu lösenden Aufgabe ausgesucht und sind daher 
volatil, aber die Werkzeuge, mit denen man seinen Code schreibt, 
meistens nicht. Wäre es da nicht eine gute Idee, erstmal Basics wie den 
Kompiler, den Debugger und dann Build-Systeme wie Make und cmake aud der 
Kommandozeile kennenzulernen, damit man weiß und versteht, was die IDE 
im Hintergrund macht?

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Cyberpunk schrieb:
> Wo läuft denn darauf Java? Google spuckte darüber auch nichts aus...

30C3: Java-SIM Infizierte SIM-Karte schickt Position alle fünf Minuten
https://www.golem.de/news/java-sim-infizierte-sim-karte-schickt-position-alle-fuenf-minuten-1312-103603.html
1
...
2
Möglich ist der Angriff durch Sicherheitslücken in den SIM-Karten,
3
die sich laut Nohl und Melette selbst auf aktuellen Nano-SIM-Karten
4
finden. Meist gibt es eine Java-Anwendung auf einer SIM-Karte, die
5
keine Signierung oder Verschlüsselung braucht.
6
...
7
Nach der Infektion mit Java-Schadsoftware nutzten die beiden
8
Sicherheitsforscher den Umstand aus, dass das iPhone 5S
9
ungefragt Kurznachrichten schickt.
10
...


Smart cards: A primer
Develop on the Java platform of the future
https://www.javaworld.com/article/2077101/learn-java/smart-cards--a-primer.html
1
Smart cards have been getting a lot of buzz lately on the Web,
2
at the JavaOne conference last April (four sessions dealt with
3
the technology), on the big network news stations, and on CNN.
4
In this article we'll bring the smart card to life with a real-world
5
smart-card example. The techniques presented here will allow you
6
to start building Java applications that are smart-card enabled.


JAVA CARD TECHNOLOGY
http://www.oracle.com/technetwork/java/embedded/javacard/overview/index.html
1
Java Card technology provides a secure environment for applications
2
that run on smart cards and other trusted devices with very limited
3
memory and processing capabilities.


JAVA CARD FAQ
http://www.oracle.com/technetwork/java/embedded/javacard/documentation/javacard-faq-1970428.html
1
Java Card technology preserves many of the benefits of the Java
2
programming language - productivity, security, robustness, tools,
3
and portability - while enabling Java technology for use on smart
4
cards. The Virtual Machine (VM), the language definition, and the
5
core packages have been made more compact and succinct to bring
6
Java technology to the resource - constrained environment of smart
7
cards.
8
9
Java Card technology also includes specific smart card features,
10
such as user authentication classes to manage PINs and passwords,
11
as well as specific application isolation features, known as the
12
firewall, that allow applications from several providers to
13
cohabit securely on the same card.


Java-Laufzeitumgebung (Plattform)
https://de.wikipedia.org/wiki/Java-Technologie#Java-Laufzeitumgebung_.28Plattform.29

Java Card
https://de.wikipedia.org/wiki/Java_Card


Cyberpunk schrieb:
> Es gibt einen ganz einfachen Grund weshalb Java nicht für MCU-Systeme
> geeignet ist
Falsch. Ganz genau dafuer wurde Java urspruenglich mal entworfen und 
auch eingesetzt.

Embedded Java - Historie
https://de.wikipedia.org/wiki/Embedded_Java#Historie
1
Java wurde ursprünglich für den Einsatz in eingebettete Umgebungen
2
konzipiert. In den 90er Jahren waren dies Internet-Browser, Settop
3
Boxen und Mobiltelefone der zweiten Generation. Seit Ende der 90er
4
Jahre setzte sich Java jedoch vorwiegend für den Einsatz im
5
Serverbetrieb durch. Für eingebettete Lösungen war eine optimierten
6
Form der Java Virtual Machine, die Java Micro Edition (J2ME), vorgesehen.

So, mehr suche ich dazu jetzt nicht raus ;)

Ich bin so dreisst zu behaupten, dass so ziemlich jeder halbwegs 
aktuelle Mikrocontroller mehr Rechenleistung und Speicher haben duerfte, 
als ein Handy aus den 90ern.

von Cyberpunk (Gast)


Lesenswert?

@Kaj G.

Interessant, da hast du dann natürlich recht. So wie es scheint, wird 
Java dort aber eben deshalb eingesetzt, weil die Sprachbeschränkungen 
diesmal nutzlich sind (Sicherheitsbereich, keine Echtzeit), damit man 
nicht viel kaputt machen kann.

Kaj G. schrieb:
> Cyberpunk schrieb:
>> Es gibt einen ganz einfachen Grund weshalb Java nicht für MCU-Systeme
>> geeignet ist
> Falsch. Ganz genau dafuer wurde Java urspruenglich mal entworfen und
> auch eingesetzt.

Nein, denn Embedded =/= MCU-Systeme.
1
In den 90er Jahren waren dies Internet-Browser, Settop
2
Boxen und Mobiltelefone der zweiten Generation.

Das sind keine Anwendungsfelder für µCs (auch nicht heute). Und hier 
geht es noch weiter:

https://de.wikipedia.org/wiki/Embedded_Java#Historie
1
Aktuelle eingebettete Lösungen auf Java Basis basieren auf der Java Standard Edition und kommen vorwiegend in Geäteklassen mit 32bit CPUs , 500+MHz und 128+MB Speicher zum Einsatz. Eine entsprechendes Gerät hätte in den 90er Jahre als Industrie PC gegolten.

MCU-Systeme müssen meistens Echtzeitfähig sein, da hilft es nicht eine 
abgespeckte JVM zu nehmen und ein RTOS dranzuklatschen.

von Cyberpunk (Gast)


Lesenswert?

Wobei J2ME sogar von Sun für Tod erklärt wurde, weil nie µC angepeilt 
wurden und die Embedded Mikroprozessoren schneller geworden sind.

https://de.wikipedia.org/wiki/Java_Platform,_Micro_Edition
1
Gegenüber CNet hat Sun im Oktober 2007 angekündigt, die Plattform Java ME zugunsten Java Standard Edition aufzugeben. Grund hierfür ist, dass die Geräte, für die Java ME einst geschaffen wurde, immer leistungsfähiger wurden. Die Umstellung soll aber nicht auf einen Schlag passieren, sondern wird sich über die nächsten Jahre vollziehen.

Wie gesagt Java war nie für MCU-Systeme gedacht...

von Christopher J. (christopher_j23)


Lesenswert?

Sheeva P. schrieb:
> Das ganze hochintegrierte IDE-Gerümpel eint das Problem, daß es, nunja,
> eben hochintegriert ist.
> [...]
> Nun, Mikrocontroller werden
> gemeinhin nach der zu lösenden Aufgabe ausgesucht und sind daher
> volatil, aber die Werkzeuge, mit denen man seinen Code schreibt,
> meistens nicht. Wäre es da nicht eine gute Idee, erstmal Basics wie den
> Kompiler, den Debugger und dann Build-Systeme wie Make und cmake aud der
> Kommandozeile kennenzulernen, damit man weiß und versteht, was die IDE
> im Hintergrund macht?

Das ist meiner Meinung nach absolut sinnvoll. Es würde unter anderem 
auch dem, von Arduino ausgehenden, Missverständnis irgendwelche Header 
seien "Libraries" entgegenwirken. Immer öfter lese ich hier im Forum 
auch am Ende eines Beitrags in dem eine Frage gestellt wird 
"Programmiert wird mit Embitz." oder "Programmiert wird mit SW4STM32.", 
obwohl das Problem nicht im geringsten mit dem Compiler, geschweige denn 
mit der IDE zusammenhängt. "Programmiert wird mit Cherry-Tastatur" oder 
"Ich programmiere mit einem Samsung-Monitor" hätten wohl eine ähnliche 
Aussagekraft und ich frage mich dann ob diese Leute überhaupt die 
leiseste Ahnung haben, was ihre IDE im Hintergrund eigentlich macht.

von Stefan F. (Gast)


Lesenswert?

Ich bin erstaunt daß  Sheeva Plug  für seinen kritischen Beitrag zu 
IDE's so viele -1 bekommen hat.

Seine Ausführungen kann ich aus eigener Erfahrung durchaus 
nachvollziehen. Statt einer schlechten bewertung möchte ich darüber 
hinaus nun die für mich wichtigsten Vorteile von IDE nennen:

- Automatische Eingabeergänzung, hilft sehr, wenn man sich nicht mehr 
exakt an die Namen von Klassen und Methonden (z.B. subStr) erinnert. Da 
ich mit vielen wechselnden Programmiersprachen arbeite, passiert mir das 
sehr häufig.

- Hyperlinks auf die Interface, Implementierungen und Dokumentationen. 
Oder anders gesagt: Blitzschnelle Navigation, hilft vor allem in großen 
Projekten.

- Refactoring. Ich habe mich darangewöhnt, schlechte Funktionsnamen und 
Variablen namen blitzschnell einfach zu ändern, ohne die ganzen Stellen 
suchen zu m üssen, wo sie verwendet werden.

- Debugging. Arduino Nutzer kennen das nicht, aber von vielen anderen 
Programmiersprachen bin ich es gewohnt, daß man notfalls mal einen 
Unterbrechungspunkt setzen kann und dann Schritt für Schritt direkt im 
Quelltext mitlesen kann, welche Entscheidungen das Programm getroffen 
hat und welche Zwischen-Ergebnisse bei Berechnungen und 
Strin-Manipulationen entstanden sind. Ich weiß, daß Debugging zumindest 
bei C/C++ auch irgendwie auf der Kommandozeile geht, aber mit der 
Bedienung dieser Variante des Debugger tue ich mich sehr schwer.

Ich möchte noch einen Aspekt gegen eine bestimmte Nutzungsart von IDE's 
ergänzen. Und zwar mag ich es inzwischen nicht mehr, wenn die IDE das 
Projekt ohne Build Script baut.

Gelegentlich nehme ich kleine Entwicklungsaufträge für Geld an. Meistens 
schreiben mir die Auftrraggeber vor, welche IDE ich zu verwenden habe, 
wie sie das Projekt später selbst weiter bearbeiten wollen. meistens ist 
das dann eine ziemlich ale Version der IDE. In einem Fall musste ich 
dazu eine alte Windows Lizenz kaufen und in einer VM laufen lassen. In 
anderen Fällen musste ich meine aktuelle Entwicklungsumgebung 
deinstallieren, um die ältere installieren zu können. Das ist super 
ätzend.

Und trotz der Anpassunf meinerseits sind diese Leute dann später dennoch 
oft nicht imstande, das Projekt weiter zu bearbeiten, weil sie ihre IDE 
falsch konfiguriert haben. Teilweise scheitert sowas auch ganz simpel an 
absoluten Dateipfaden im Projekt, die man leider nicht zu 100% 
verhindern kann.

Für meine eigenen Projekte habe ich daher die Entscheidung getroffen, 
immer mit einem Build Script zu arbeiten. Bei C wäre das dann zum 
Beispiel das gute alte make, und bei Java ant. Solche Projekte kann man 
problemlos auf der Kommandozeile bauen, und zwar sowohl unter Linux als 
auch unter Mac OS und Windows. Es gibt in der Regel nur eine 
Abhängigkeit: Die Toolchain, welche man am Stück herunterladen und 
installieren kann.

Manchmal (eher selten), wenn ich dynamische Code-Generierung oder 
komplexe Sonderlocken im Build Script brauche, setze ich auf Perl 
Scripte. Damit diese unter Windows laufen, lege ich eine alte Version 
des Perl Interpreters mit ins Projektverzeichnis (nur eine *.exe und 
eine DLL). Die anderen beiden Betriebssysteme enthalten Perl bereits 
normalerweise, so daß hierzu nichts extra installiert werden muss.

Diese alten Kamellen sind zwar weniger komfortabel und Zeitaufwändiger 
für den Entwickler, aber sie sind Deppensicher anzuwenden. Und das 
scheint mir der wichtigere Aspekt zu sein, wenn man das Projekt 
veröffentlicht, and andere übergibt oder einfach nur langfristig wartbar 
halten will.

Tools wie Maven in Java sind für mich ein absolutes NoGo, lerider muss 
ich damit täglich arbeiten. Maven verspricht, alles automazisch zu 
machen. In Wahrheit muss man dafür aber (zumindest in komplexen 
Projekten) so viel konfigurieren, daß alleine die 
projekt-Konfigurationsdatei (pom.xml) schon 20x größer ist, als ein 
gleichwertiges ant Script oder Shell Script. Außerdem tun die 
Automatismen oft nicht das, was ich brauche. Zum beispiel fehlen mir 
häufig Libraries für indirekte Abhängigkeiten, während andere unnütig 
dazu geladen werden. Klar kann man etwas dagegen unternehmen, aber das 
macht dann in der Praxis am Ende mehr Arbeit, als alle Libraries einfach 
komplett manuell zusammen zu sammeln.

Außerdem hängt der Build Vorgang bei solchen Tools von Internet 
Dienstleistern ab. Da kann es schnell passieren, daß der Build bei mir 
super klappt, aber beim Kunden plötzlich nicht mehr. Denn er hat keine 
Verbindung zu irgendeinem Repository, oder dort liegen jetzt andere 
Versionen der Libraries herum. Ein GAU Szenario ist für mich (und das 
habe ich tatsächlich erleben müssen), wenn ich ein ehemals abgegebenes 
Projekt nach 6 Jahren wieder bekomme und ändern soll. Dann scheitert der 
Build, weil einige Libraries gar nicht mehr downloadbar sind oder weil 
die Abhängigkeiten falsch vorgegeben sind. Wir brauchten einmal zu zweit 
eine ganze Woche, um ein alten Maven Projekt compilierbar zu machen. Ich 
bin absolut sicher, daß mir mit ant oder Shell Script viel schneller 
gewesen wären.

Zu viel Auto-Magic ist nicht gut. Aber gerade dazu neigen die IDE's 
zunehmend.

Mein Tip: Nutze die IDE als besseren Texteditor und GUI für den 
Debugger. Aber der Build Vorgang sollte auf der Kommandozeile ganz 
unabhängig von der Installtion der IDE laufen.

Selbst SAP macht das so bei einigen sehr prominenten Produkten. Ich 
halte das für eine Weise Entscheidung.

von Einer K. (Gast)


Lesenswert?

Christopher J. schrieb:
> Es würde unter anderem
> auch dem, von Arduino ausgehenden, Missverständnis irgendwelche Header
> seien "Libraries" entgegenwirken.

Ich habe ja nichts dagegen, wenn man die Werkzeuge von der Pike auf 
kennen lernt.

Möchte aber zu bedenken geben, dass ein Anfänger an einem Punkt anfangen 
muss. Alles gleichzeitig geht nicht.

Nicht ohne Grund dauert eine Vollzeitausbildung ca. 3,5 Jahre.
Plus ca. ein 1/2 Jahr, pro jede Sprache und pro Spezialgebiet.

Alles verbunden, mit viel üben, Erfahrung machen.

Es ist also eher ein Prozess über 10 Jahre, oder so, bis man wirklich 
gut ist. Und selbst dann kann man noch nicht alle Tools, Sprachen und 
Anwendungen kennen.

Christopher J. schrieb:
> "Programmiert wird mit Cherry-Tastatur" oder
> "Ich programmiere mit einem Samsung-Monitor" hätten wohl eine ähnliche
> Aussagekraft und ich frage mich dann ob diese Leute überhaupt die
> leiseste Ahnung haben, was ihre IDE im Hintergrund eigentlich macht.

Vorsicht Ironie:
Ich finde, dass man zuerst sein eigenes Betriebssystem incl. Kompiler 
und Toolchain schreiben sollte, damit man das, womit man umgeht, auch in 
der Tiefe verstanden hat. Dann erst sollte man sein erstes eigenes 
"Hello World" Programm schreiben dürfen.

von Retro N. (retronerd)


Lesenswert?

Arduino F. schrieb:
> Vorsicht Ironie:
> Ich finde, dass man zuerst sein eigenes Betriebssystem incl. Kompiler
> und Toolchain schreiben sollte, damit man das, womit man umgeht, auch in
> der Tiefe verstanden hat. Dann erst sollte man sein erstes eigenes
> "Hello World" Programm schreiben dürfen.
<ironie>
Ich plädiere dafür, daß alle Anfänger vor der Nutzung ihres ersten 
Smartphones, Computers, Tablets usw. erst mal die Basics lernen, und 
eine CPU aus diskreten Bauteilen zusammenlöten, um darauf dann ihr 
völlig proprietäres Betriebssystem zu implementieren 8-D,

Beitrag "Rechner aus einzelnen BC547 Transistoren"

oder gleich mit AVR-Z80-Emulation inkl. CP/M... ;-)

https://www.mikrocontroller.net/articles/AVR_CP/M

</ironie>

: Bearbeitet durch User
von Al. K. (alterknacker)


Lesenswert?

Wer fragt, wie er vom Arduino "wegkommen" soll,
ist nach meiner Meinung noch nicht so weit.
jetzt bin ich wieder bei der Picaxe und Arduino.
Auf Grund dessen ,das ich mit dem Arduino angefangen habe und so die 
Klammeraffenprogrammierung erlernen und Nutzen kann, überlege
ich ernsthaft zurück zum AVR und Pic zu gehen.
Ich habe diese Teile ja noch im umfangreichen Sortiment!
Überlege natürlich auch wie ich noch die vielen vorhandenen C-Control/
 Pro 32 nutzen kann.

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
Noch kein Account? Hier anmelden.