Hallo,
wusste nicht wie ich den Threadtitel gestalten sollte... Ich möchte eine
Programmiersprache lernen, bin mir aber unsicher welche. Das Thema wurde
hier schon oft behandelt und ich habe auch bereits einige andere Threads
durchgelesen.
Erst mal ein paar Infos:
- Ich bin jetzt 50 und werde sicher nicht mehr beruflich damit arbeiten.
Also bleibt es im Hobbybereich. Ich will aber was neues und
interessantes lernen und mich dabei nicht unbedingt mit dem Mainstream
treiben lassen.
- Mein späteres Ziel sind einfache Programme und dass ich ein paar
IO-Ports auf dem Board lesen/ansteuern kann (und den USB-Port).
- Ich nutze ausschließlich Linux.
- Die Sprache soll leicht erlernbar sein. Wobei da sicher keine
pauschale Aussage getroffen werden kann und es auch darauf ankommt was
einem liegt.
- Mittlere Erfahrung habe ich mit PHP. Aber da schreibt man sich
irgendwie die Finger wund. Mir ist da jedenfalls zu viel überflüssiges
in der Syntax und mir machte das zuletzt immer weniger Spaß. Mir geht’s
auch nicht darum Webanwendungen zu schreiben, wollte PHP nur erwähnen um
zu beschreiben was mir liegt und was nicht.
- Auch wenn C zu den führenden Programmiersprachen gehört, kann ich mich
nicht so recht damit anfreunden. Ich hab mich schon ein paar mal damit
befasst und es kam nie Freude auf. Und bei Java verstehe ich schon
gleich nur Bahnhof. Mir geht schon diese Dot-Syntax total auf den Keks.
Vielleicht ist das auch der Grund, dass ich nie früher programmieren
gelernt habe. Mir haben diese Sprachen einfach noch nie gefallen. Da ich
gerne auch Mikroprozessoren programmieren würde, würde ja fast wieder
nur C in Frage kommen, aber davon will ich meine Wahl wirklich nicht
abhängig machen.
- Phyton ist gerade total in Mode, soll leicht erlernbar sein und hätte
den Vorteil einer großen Community. Der Code gefällt mir aber auch nicht
so richtig.
So bin ich nun auf Lisp gestoßen, genauer gesagt Common Lisp. Sehe ich
mir den Beispielcode an, erscheinen mir auch ohne Vorwissen bereits
Teile davon logisch und leserlich und ich habe das Gefühl, das mir das
Spaß machen könnte. Aber kann man damit heute überhaupt noch was
anfangen?
Weitere Sprachen wären vielleicht noch Smalltalk und Swift. Dazu habe
ich mir zwar noch zu wenige Codebeispiele angesehen, bin dafür aber auch
noch völlig unvoreingenommen.
C# über .NET Core 2.0
Ruby
Python
Dietmar schrieb:> Ich nutze ausschließlich Linux
Können alle drei Sprachen
Dietmar schrieb:> Mein späteres Ziel sind einfache Programme und dass ich ein paar> IO-Ports auf dem Board lesen/ansteuern kann (und den USB-Port)
Wenn du eine virtuelle serielle Schnittstelle als USB-Bridge nimmst,
kein Problem. "Natives" USB willst du nicht schreiben (ohne gute Libs
darunter)
Dietmar schrieb:> Ich will aber was neues und> interessantes lernen und mich dabei nicht unbedingt mit dem Mainstream> treiben lassen.
Finde ich den falschen Ansatz. Die Sprachen werden meinst zum
Mainstream, wenn sie gut zu schreiben/lernen sind oder es keine
(sinnvolle) Alternative gibt.
Wenn du Lisp sagst, ist Smalltalk nur logisch ;-) allerdings wirst du
mit beiden im uC-Umfeld nicht glücklich werden (schade eigentlich, ich
halte Lisp nach wie vor für eine der klarsten und effizientesten
Sprachen überhaupt)
Ich denke es kommt darauf an, wie viel Erfahrung du im uC-Umfeld schon
hast, und was du so vorhast.
Wenn du auch im uC-Umfeld "Einsteiger" bist, empfehle ich Arduino:
Hardware sehr klar und offen (wichtig!), und die Sprache ist zwar C++,
aber "reduced to the max", also ohne das ganze abgehobene Gedöns.
ich spiele altersmäßig in einer ähnlichen Liga ;-) hatte zwar
Elektronik- und Programmier-Vorkenntnisse, aber habe mit Arduino einen
sehr sanften aber spannenden Einstieg gefunden (auch wenn ich dem
mittlerweile "entwachsen" bin)
Mein Favorit im uC-Bereich ist aber nach wie vor C, ohne ++
Dietmar schrieb:> Der Code gefällt mir aber auch nicht> so richtig.
Der Wurm muss dem Fisch schmecken und nicht dem Angler, und der Code dem
Computer.
Warum willst du dir unbedingt ein Hobby antun, an dem dir, nach deinem
Post, eigentlich alles missfällt? Unbewusster Masochismus? Dafür spräche
auch dein Hang zu besonders exotischen Programmiersprachen.
Für lustbasiertes Programmieren kann ich dir keine der Sprachen
empfehlen, genau genommen überhaupt keine der hunderte von
Programmiersprachen, das war auch nie die Absicht bei deren Definition.
Ich bin erheblich älter als du und habe in letzter Zeit einige neue
Sprachen gelernt, aber das ist echte Arbeit und geht auch nicht mal so
an einem Nachmittag.
Nebenbei, PHP würde ich nicht nehmen für direktes Hardware-I/O, ist aber
nur meine persönliche Meinung. Im Prinzip kann man in jeder Sprache
alles machen, schon Turing hat bewiesen dass seine Turingmaschine jedes
denkbare Programm ausführen kann.
Georg
Schau Dir Nim an -- zunächst das Tutorial Teil 1 und 2. (Ich gehe mal
davon aus Du kannst etwas englisch, sonst bleibt Dir eh nicht viel
Auswahl.) Ein Job mit Nim ist leider noch fast aussichtslos, aber das
erwartest Du ja auch nicht. Aber natürlich gibt es eine Reihe netter
neuer Sprachen -- Nim ist wohl aber am universellsten einsetzbar,
prinzipiell auch für Microcontroller. Für Apple-Fans ist vielleicht eher
Swift die erste Wahl, und für Android das alte häßliche Java. Oder jetzt
Kotlin. Rust ist natürlich interessant, aber wie C++ eher für
Fortgeschrittene, und man hat nicht so viel Spaß damit. Und wenn Du die
Einrückungen nicht magst, dann vielleicht Crystal. Die anderen Sprachen
wie etwa Julia, Elixir, Red, Scala sind eher etwas spezieller
ausgerichtet. Go ist nicht sehr innovativ und verliert auch schon etwas
an popularität. Haskell wäre natürlich eine nette Herausforderung, wenn
Du es Dir zutraust. Die Zeit von Ruby und Python ist meiner Ansicht eher
vorbei, auch wenn Python noch sehr populär ist. Mit JavaScript könnte
man natürlich nette Web-Spielerein machen, wenn man das mag, aber die
Sprache an sich ist ja nicht so schön. Na ja, ist eben ein weites
Feld...
Überwinde Dich - und lerne C, bleibe bei Linux, schau die auch mal
SystemD-freie unixoide OS wie z.B. die BSDs an.
Unter Linux machst Du am besten alles mit der Shell und somit im
Terminal.
Benutze den vi bzw. vim als Editor.
Wenn Du keine großen Projekte vor hast, dann meide alles was mit OOP zu
tun hat und programmiere prozedural.
Später kannst Du C noch mit Assembler und Forth ergänzen.
Chris schrieb:> C# über .NET Core 2.0
Davon würde ich dringend abraten...
Vril schrieb:> Forth
Das meinst du nicht ernst, oder? (Ja, ich habe Forth programmiert)
Stefan schrieb:> Nim ist wohl aber am universellsten einsetzbar,> prinzipiell auch für Microcontroller.
Wie genau meinst du "prinzipiell"?
Vielleicht lese nur ich "uC" raus, aber da wäre eine einfache und
funktionierende Toolchain (speziell unter Linux) nicht ganz unwichtig...
Und wenn Du noch unsicher bist, sieh dir Rosetta-Code an:
http://rosettacode.org/wiki/Category:Programming_Tasks
Und ja, C sollte man schon können, da man dann eher versteht, was der
Computer eigentlicht macht. Man muss es später ja nicht verwenden.
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/
Da wird dir C sehr ausführlich erklärt sehr zum empfehlen.
Assembler würde ich nicht unbedingt mehr anfangen aber C ist sehr gute
Grundlage, ohne das man Blabla Code schreibt es nimmt einem nicht viel
Arbeit ab, aber viele Beispiele sind in C und wenn du C verstanden hast
dann verstehst du auch Python.
Auch ist C noch näher am uC.
Arbeite denn Link oben durch und dann schau dir die Beispiele bei z.B.
http://www.ulrichradig.de/home/index.php/avr an bisschen damit spielen.
Vril schrieb:> Benutze den vi bzw. vim als Editor.
Genau. Und programmiere am Besten in Malbolge. :D
Ich denke, Python dürfte gut für dich sein. Das wurde als
Anfängersprache entwickelt und es macht sehr viel sehr einfach.
Wenn man diese Frage in einem Software-Forum stellt welches keinen Fokus
auf Embedded-Programmierung hat, würde keiner mit "C" antworten... C hat
einfach so viele Fallstricke und selbst simple Sachen wie
String-Verarbeitung sind unnötig kompliziert.
Wenn also die Mikrocontroller-Programmierung keine Pflicht ist, und du
"normal" auf Linux z.B. auf einem Raspberry-PI programmieren möchtest,
nimm lieber eine der vielen High-Level-Sprachen. Diese sind intuitiver
und einfach frustfreier. Der große Vorteil von Mainstream-Sprachen
(Java, Python, Go, ...) ist, dass es sehr gute Tools gibt und man zu
jedem Problem eine Antwort findet. Bei Nischen-Sprachen wird man da
schneller allein gelassen.
Die Schönheit von Code ist allerdings wirklich kein Argument. Die
Dot-Notation ist absoluter Standard; in C++ kannst du immer -> nehmen
wenn du es unbedingt willst, aber welchen Zweck häte das? Eine
konsistente logische Syntax ist viel wichtiger, aber die haben C und C++
nun wirklich nicht.
Michael R. schrieb:> Wie genau meinst du "prinzipiell"?
1. Der uC sollte schon mindestens 64k Ram haben.
2. Man darf teile der Standardbibliothek nicht verwenden, weil sie den
GC verwenden.
3. Man muss sich die Register und Hardwareadressen definieren.
Gut, ist schon eine gewisse Einschränkung momentan. Such mal nach "Nim
embedded" da findet man schon einige Projekte. Für die Fraktion "Dumm,
faul und gefräßig" die alles fertig vorgekaut haben wollen ist das wohl
noch nichts. Das mit der Standardbibliothek wird sich wohl demnächst
auch ändern, die soll dann weitgehend ohne GC auskommen.
Dr. Sommer schrieb:> Wenn man diese Frage in einem Software-Forum stellt welches keinen Fokus> auf Embedded-Programmierung hat, würde keiner mit "C" antworten... C hat> einfach so viele Fallstricke und selbst simple Sachen wie> String-Verarbeitung sind unnötig kompliziert.
Das ist natürlich Unfug - ganze Betriebssysteme wurden in C
geschrieben...
und die gibt es schon seit 30 Jahren und mehr - ganz im Gegensatz zur
Halbwertszeit des trashes, namens Blue_Screen_irgendwas aus Redmond.
Und was die hier auch erwähnten Mainstream-Sprachen wie Java und Co.
betrifft:
Schlecht programmierte Software, die zusätzlich noch extrem langsam ist:
garantiert Java!
Vril schrieb:> Das ist natürlich Unfug - ganze Betriebssysteme wurden in C> geschrieben...
Was genau ist Unfug? Nur weil das OS darin geschrieben ist, muss man die
Anwendung nicht auch darin schreiben.
Vril schrieb:> Schlecht programmierte Software, die zusätzlich noch extrem langsam ist:> garantiert Java!
Ja, weil Java so einfach ist dass es jeder kann, und somit auch viele
Anfänger damit arbeiten und schlechten Code produzieren. Würde man diese
schlechten Algorithmen nach C überführen, wären sie dann kein bisschen
besser. Selbstverständlich kann man auch mit Java sehr gute Software
produzieren. Und für Anfänger-Programme ist die Performance sowieso
nicht so wichtig. In C instabile Software zu schreiben ist jedenfalls
deutlich einfacher, dank Buffer-Overflows, mangelnder Typsicherheit usw.
Ich kenn das hier von den ETechnik-Studenten - die werden mit C gequält
und müssen lustiges Typ-und-Syntax-Raten betreiben, ala "was bedeutet
void (*A [4]) (int* [], char**, int (*) (void*, signed*, unsigned*),
char);"? So wird sichergestellt dass die garantiert keine Lust mehr auf
Programmieren haben. Das geht ja schon los damit, die drei Bedeutungen
des Sternchens zu erläutern, oder was ein void* ist. Alles nur unnötiger
Frust und Hirnverrenkung.
Es gibt so hübsche bunte Programmierlernbücher für Grundschulkinder zum
Ausmalen mit süßen Tieren. Ich glaube das wäre das richtige für dich.
Oder einfach mal Brainfuck googeln.
wendelsberg schrieb:> Wenn Du auf dem PC bleibst und der halbwegs (>= 1 GHz) ist, dann kannst> Du mit Perl auch so ziemlich Alles erschlagen.
Allerdings Dummschwätzer kann man auch mit Perl nicht wirklich
erschlagen.
Michael R. schrieb:> was zu bezweifeln wäre ;-)
Alle möglichen großen Websiten sind da (serverseitig!) drin geschrieben,
wie z.B. Twitter, Google (teilweise), Amazon... An PC-Software könnte
man LibreOffice oder Minecraft (ja ich weiß, frühe Versionen davon waren
langsam), Umlet, Plantuml nennen.
genervt schrieb im Beitrag #5303969:
> Michael R. schrieb:>> Dr. Sommer schrieb:>>> Selbstverständlich kann man auch mit Java sehr gute Software>>> produzieren>>>> was zu bezweifeln wäre ;-)>> womit an deiner Dummheit nicht mehr zu zweifeln wäre
Smiley vergessen?
Dieser Vogel ist tot. tot tot tot. Sozusagen ein gewester.
https://www.youtube.com/watch?v=UE0Jk0KqKRc
Da Du nicht von Irgendjemandem zum Programmieren getriebn wirst und
selbst wählen kannst, schalge ich "Pure-Basic" vor
https://www.purebasic.com/german/introduction_linux.php
Die damit geschriebenen Programme lassen sich für verschiedene
Betriebssysteme kompilieren und zerren nicht einen Wust von .Net und
sonstwas für Zeug hinterher. Das Programm hat eine deutsche Hilfedatei
und es gibt ein Forum mit vernünftigen Leuten.
(Ich kam von Algol und Pascal her und das C-artige Zeug verursacht mir
Übelkeit und Brechreiz.)
MfG Paul
georg schrieb:> Ich bin erheblich älter als du und habe in letzter Zeit einige neue> Sprachen gelernt, aber das ist echte Arbeit und geht auch nicht mal so> an einem Nachmittag.
Wer Alles können will, kann am Ende Nichts richtig. Das Fassungsvermögen
des Menschen ist nicht unbegrenzt.
Paul B. schrieb:> chalge ich "Pure-Basic" vor
Eine Kindergartensprache, die nicht OpenSource ist und auch noch Geld
kostet? Gut, wenn er sogut wie kein Englisch kann vielleicht. Wobei ich
mal vermute, dass es für die älteren populären Srachen wie Python auch
deutsche Foren und Bücher gibt?
Stefan schrieb:> Eine Kindergartensprache, die nicht OpenSource ist und auch noch Geld> kostet?
Geld kostet sie in der Probeversion nicht. Das hättest Du selbst
herausgefunden, wenn Du den Link geklickt hättest.
...und ihr habt die Sprache tatsächlich im Kindergarten gelernt? Bist Du
dort schon in der grossen Gruppe? Da sieht man aber, daß die Sprache
doch recht leicht zu erlernen sein muß.
-Paul-
Dr. Sommer schrieb:> Vril schrieb:>> Schlecht programmierte Software, die zusätzlich noch extrem langsam ist:>> garantiert Java!> Ja, weil Java so einfach ist dass es jeder kann, und somit auch viele> Anfänger damit arbeiten und schlechten Code produzieren.
Genau. Nun die Frage: Ist das ein Vor- oder ein Nachteil?
wendelsberg schrieb:> Wenn Du auf dem PC bleibst und der halbwegs (>= 1 GHz) ist, dann kannst> Du mit Perl auch so ziemlich Alles erschlagen.
Ja, sogar dich selber, wenn du den Code später jemals wieder lesen
willst.
Rolf M. schrieb:> Genau. Nun die Frage: Ist das ein Vor- oder ein Nachteil?
Zum Lernen ist es ein Vorteil, wenn es leicht zu erlernen ist. Für den
Nutzer ist es von Nachteil, wenn der Hersteller einer Software keine
Qualitätssicherung betreibt und somit von Anfängern programmierte
schlechte Software veröffentlicht - dafür ist der Preis vermutlich
niedriger.
genervt schrieb:> Es gibt so hübsche bunte Programmierlernbücher für Grundschulkinder zum> Ausmalen mit süßen Tieren. Ich glaube das wäre das richtige für dich.> Oder einfach mal Brainfuck googeln.
++++[++++>---<]>-.---[----->+<]>-.+++[->+++<]>++.--[--->+<]>.+[->+++<]>+
.+++++.---.--[--->+<]>-.-[--->++<]>-.------.+++++.--[--->+<]>--.+[----->
+<]>+.-----.------.+++++.++++++++++++.[++>---<]>--.------------.-[--->++
<]>--.-------.+.+++.--[--->+<]>-.-[--->++<]>-.------.+++++.--[--->+<]>--
.++[->+++<]>+.--.+++++++++++++.+++[->+++<]>++.+++.+.--[--->+<]>-.-[->+++
+<]>--.--[->+++<]>+.+++++++++++.-----------.----.+++++++++++++.++.[++>--
-<]>.++[--->++<]>.++++[->++<]>+.[->+++++<]>..--------.+++++++++++++.[-->
+++++<]>+++.---[->++++<]>-.+++[->+++<]>+.+++++.>----------.--[-->+++<]>.
-[->+++++<]>-.--[->++++<]>--.-------.-.-[->+++++<]>-.+++++[->+++<]>.----
---------.+++.+++++++++.-[->+++++<]>-.-[--->++<]>--.---.+++++++++++++.++
+[->+++<]>++.+.++[->+++<]>.------------.++[->+++<]>+.--.+++++++..-------
.>----[---->+<]>.+[-->+<]>.---[->+++<]>.+++[->++++<]>+.----.--[--->+<]>-
.-[--->++<]>+.++++.--..+++++++.[---->+<]>+++.+[->+++<]>+.---.--[--->+<]>
--.[->+++++<]>.+[-->+<]>.+[->++<]>.-[--->+<]>--.++++++++++.+.[---->+<]>+
++.+[->+++<]>+.--[--->+<]>-.-[---->+<]>+++.+[----->+<]>.----.+++++++++++
.[---->+<]>+++.++++[->++<]>.-[--->+<]>++.------------.+++++.------.+++.+
+.------.+.[--->+<]>-.-------.-------.-[--->+<]>--.++[->+++<]>+.--.---.+
++++++++++++.+++.-------------.+++++++++.-[->+++++<]>-.+++++[->+++<]>.--
---------.+.+++++++++++++.[-->+++++<]>+++.--[->++++<]>-.-[->+++<]>-.--[-
-->+<]>---.-------------.+++++++++.-[->+++++<]>-.+[->+++<]>+.+.++++.++++
+.---------.--[--->+<]>-.[-->+++++<]>.[--->+<]>++.---.--------.+++++++++
++.+++[->+++<]>++.++++++++++++..----.----.+++++++++++++.-------.------.+
++++++++..++++++.------.-----.++++++++++..++++[->+++<]>.--[--->+<]>-.-[-
-->++<]>-.++++.[->+++++<]>-.+[->++<]>.[-->+++<]>--.+.[--->+<]>+++.---[->
+++<]>.[--->+<]>----.-------------.++++.[--->+<]>---.--[->++++<]>--.+[->
+++<]>.+++++++++++++.+.+.+++[->+++<]>.--.++++++++.+++++++++.[++>---<]>.+
+[--->++<]>.++++[->++<]>+.--[->+++++<]>.+++++.--[--->+<]>--.+[->+++<]>+.
+.+++++++++.---.------.--[--->+<]>-.+[->+++<]>+.--[--->+<]>-.-[---->+<]>
+++.-[--->++<]>--.-------.--[--->+<]>--.+.[---->+<]>+++.[->+++<]>+.--[--
->+<]>.+[->+++<]>+.+++++.--[--->+<]>--.+[----->+<]>.------------.+++++++
++++.[++>---<]>--.[->+++<]>+.+++++++++++++.-------.--.+.-----.++++++++++
+++.-------.--.+++++++++.[----->++<]>++.
Den anderen danke für die konstruktiven Ratschläge.
Rolf M. schrieb:> Ja, sogar dich selber, wenn du den Code später jemals wieder lesen> willst.
Das kannst Du aber mit jeder Programmiersprache hinkriegen (oder mit
sinnvoller Kommentierung vermeiden)
wendelsberg
georg schrieb:> Der Wurm muss dem Fisch schmecken und nicht dem Angler, und der Code dem> Computer.
Für den Computer wurden sicher nicht mehrere 1000 Programmiersprachen
erfunden...
Achim S. schrieb:> Für den Computer wurden sicher nicht mehrere 1000 Programmiersprachen> erfunden...
Für den Computer gibts Assembler. Zurück zum Ursprung!
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
J. S. schrieb:> Welches Board meinst du bei Punkt 3?
X86 oder ARMLothar schrieb:> Und es gibt auch zu Linux bessere Nicht-Mainstream Alternativen:>> https://www.riscosopen.org/
Linux war etwas eng gefasst. Ich bin auch für andere Betriebssysteme
offen, solange es kein Windows oder was anderes proprietäres ist.
Dr. Sommer schrieb:> Die Schönheit von Code ist allerdings wirklich kein Argument.
Na ja, schön muss er nicht sein. Aber er sollte mir schon liegen. Wenn
es mein Ziel wäre damit Geld zu verdienen, könnte ich mir natürlich
alles reinpauken. Es wäre jedoch utopisch daran zu denken, dass ich
damit beruflich noch jemals eine Chance hätte. Also entscheide ich mich
lieber für das, bei dem ich mich am ehesten frei entfalten kann.
Meine Güte Ihr macht den armen Kerl völlig Banane im Kopf. Wofür soll er
sich denn jetzt entscheiden?
Dietmar schrieb:> - Mein späteres Ziel sind einfache Programme und dass ich ein paar> IO-Ports auf dem Board lesen/ansteuern kann (und den USB-Port).
Wie schon meine Vorredner erörtert haben sind
Mainstream-Programmiersprachen nicht Mainstream weil sie
ungerechtfertigt gehyped werden sondern weil sie einfach gut und
zweckmäßig sind, das sollte für dich also als Kriterium wegfallen. Wenn
du auf deinem Board (Linux-Single Board Computer?) GPIOs und den
USB-Port ansteuern willst solltest du vorzugsweise eine Sprache nehmen,
für die es entsprechende Libraries gibt, und das dürfte vermutlich bei
fast jeder Sprache der Fall sein. Wenn du zusätzlich noch µCs
programmieren möchtest dann schränkt das die Auswahl schon etwas ein und
geht gegen C/C++.
Dass eine Sprache dir nicht gefällt sollte kein Kriterium für dich sein!
Die meisten Programmiersprachen sind sich in ihren Grundkonzepten sehr
ähnlich und unterscheiden sich in einigen (wenigen) Sprachfeatures
untereinander. Lediglich die Syntax ist meist der große Unterschied aber
sobald du erst mal eine Sprache in ihrem Grundkonzept verstanden hast
kannst du superschnell auf eine andere, geeignetere Sprache umsteigen.
Das habe ich selbst festgestellt, nachdem ich die ersten 1..2 Sprachen
gelernt habe. Es ist genaugenommen gar nicht so wichtig, mit was du
anfängst, hauptsache zu fängst erst mal an. Worauf du beim Programmieren
tatsächlich Wert legst wird sich hinterher schon herauskristallisieren,
keine Sorge. Es ist nicht so, dass du dich ein mal entscheiden musst und
dann auf deiner Entscheidung festhängst. Insofern: Nimm eine beliebige
Sprache die deine Anforderungen erfüllt und die populär ist, d.h. für
die es eine ausreichend große Community gibt, die dir bei Problemen zur
Seite steht und leg los. Kauf dir notfalls für 20..30€ ein Buch dazu und
arbeite das mal durch.
Generell würde ich dir einfach Java oder Python empfehlen. Mit denen
kannst du schon mal sehr sehr viel machen. Wenn du bei Java nur Bahnhof
verstehst: kauf dir ein Buch, arbeite dich rein! So schwierig ist das
nicht, höchstens ungewohnt. Die Sprache ist in sich völlig logisch und
nicht widersprüchlich. D.h. alle Fragezeichen in deinem Kopf lassen sich
letzendlich - auch für dich - noch auflösen, sei dir da sicher.
Konzepten wie Objektorientierung wirst du in den meisten Sprachen
begegnen. Objektorientierung macht aber auch einfach Sinn und ist ne
tolle Sache, wenn man sie mal verstanden hat. Man kann sie aber für den
Anfang auch - obwohl sie in der Sprache verankert ist - einfach erst mal
komplett links liegen lassen.
Viel Spaß! Ich lerne übrigens gerade Python und VBA. Nachdem ich schon
JavaScript, PHP, C und C# gelernt hatte habe ich Java quasi innerhalb
von zwei Tagen erlernt.
Paul H. schrieb:> Die meisten Programmiersprachen sind sich in ihren Grundkonzepten sehr> ähnlich und unterscheiden sich in einigen (wenigen) Sprachfeatures> untereinander.
Welch kühne Theorie! Manche Sprachen sehen sich zwar oberflächlich
ähnlich, unterscheiden sich aber darunter dramatisch. Klassisches
Beispiel sind Java und C++. Die ganze Laufzeitumgebung ist komplett
anders, das Speichermodell, die Art wie Funktionen definiert werden,
RAII-Unterstützung, und natürlich das komplette Metaprogrammierungs-Zeug
von C++, was in Java quasi fehlt. Das ist nicht nur "ein Sprachfeature",
das ist die halbe Sprache... Dafür hat Java eine riesige
Standard-Bibliothek und Reflection.
Von dem "Unter der Haube" her sind sich C# und Java sehr ähnlich, und
beide weit von C++ entfernt. Da ist Pascal näher dran, was aber rein
oberflächlich komplett anders aussieht.
Dietmar schrieb:> Jetzt fängt es an interessant zu werden. Läuft auch auf> Illumos-Systemen, wie ich gerade las.
Wie war das mit den Nischen-Sprachen ;-) ... Aber okay, es ist .NET und
läuft dann wie alle anderen .NET Sprachen auf allen davon unterstützten
Systemen.
Daniel -. schrieb:> Ocaml bzw F#> Haskell>> Beide stammen vom Lisp ab und haben keine C Syntax
Letzteres: ja, ersteres: Nein. Ocaml/F# sind Ableger von Ocaml/Standard
ML/ML/ISWIM. Haskell wurde durch viele Sprachen beeinflußt u.a. Lisp,
Miranda, ML etc.
Zurück zum Thema: Wenn dem Threaderöffner LISP gefällt, dann kann er
sich Clojure ansehen. Direkter LISP-Ableger und auch auf
Mikrocontrollern zu finden. Letztere Variante nennt sich Ferret. Erzeugt
C++-Code und kommt bei Bedarf auch ohne GC aus. https://ferret-lang.org
Direkt unterstützt werden u.a. auch div. Arduinos und Teensys. Eine
andere Möglichkeit wäre http://www.ulisp.com/ ebenso u.a. auf Arduinos
Dietmar (Gast) schrieb:
> Ich möchte eine> Programmiersprache lernen, bin mir aber unsicher welche.
Damit bist du nicht allein.
> Ich bin jetzt 50 und werde sicher nicht mehr beruflich damit arbeiten.
Gut. Damit hast du prinzipiell schon mal alle Freiheiten zur Auswahl.
> Mein späteres Ziel sind einfache Programme und dass ich ein paar> IO-Ports auf dem Board lesen/ansteuern kann (und den USB-Port)
Suche nach Prg-Sprachen die dir diese Anforderung in einer DIR genehmen
Art ermöglichen.
> Ich nutze ausschließlich Linux.
Damit sind typische bzw. primär auf Windows ausrichtete
Programmiersprachen/Umgebungen wohl nicht die erste Wahl für dich.
> Die Sprache soll leicht erlernbar sein.
Das ist subjektiv bzw. Programmiersprachen können einem leicht erlernbar
erscheinen, wenn man sie interessant und motivieren findet und sie
können genau das Gegenteil an Gefühlen auslösen, wenn sie einem wie
Kauderwelsch vorkommen.
> .. PHP. Aber da schreibt man sich> irgendwie die Finger wund. .. zu viel überflüssiges> in der Syntax und mir machte das zuletzt immer weniger Spaß.> bei Java verstehe ich schon> gleich nur Bahnhof. Mir geht schon diese Dot-Syntax total auf den Keks.
Damit wird es schwierig für dich werden eine Begeisterung für C# oder
Java zu entwickeln und die Auswahl wird deutlich eingeschränkt.
> Auch wenn C zu den führenden Programmiersprachen gehört, kann ich mich> nicht so recht damit anfreunden.
Da scheint immerhin noch Hoffnung zu bestehen.
> Vielleicht ist das auch der Grund, dass ich nie früher programmieren> gelernt habe.
Kann sein, aber das lässt sich auch mit 50 noch nachholen. Heutzutage
sogar viel leichter, weil es viel mehr Möglichkeiten gibt guten
Beispielcode als auch guten Lesestoff zu erhaschen.
> Da ich> gerne auch Mikroprozessoren programmieren würde, würde ja fast wieder> nur C in Frage kommen, aber davon will ich meine Wahl wirklich nicht> abhängig machen.
Du meinst wahrscheinlich eher Mikrocontroller. Da ist zwar C quasi die
erste Wahl, aber es gibt auch käufliche meist auf "modernem
BASIC"-Dialekt basierende (nicht allzu teure) Komplettpakete bestehend
aus einer integrierten Entwicklungsumgebung, die vielleicht in Frage
kommen.
> Phyton ist gerade total in Mode, soll leicht erlernbar sein und hätte> den Vorteil einer großen Community.
Hat wohl seine Gründe.
> Der Code gefällt mir aber auch nicht> so richtig.
Tja.
> So bin ich nun auf Lisp gestoßen, genauer gesagt Common Lisp. Sehe ich> mir den Beispielcode an, erscheinen mir auch ohne Vorwissen bereits> Teile davon logisch und leserlich und ich habe das Gefühl, das mir das> Spaß machen könnte.
Seit geraumer Zeit kaum mehr verbreitet. Nach meinem Gefühl ist Lisp
eher was Historisches aus der Ära der Computer-Anfangszeit.
> Aber kann man damit heute überhaupt noch was> anfangen?
In Bezug auf Mikrocontroller? Eher nicht ..
> Weitere Sprachen wären vielleicht noch Smalltalk und Swift. Dazu habe> ich mir zwar noch zu wenige Codebeispiele angesehen, bin dafür aber auch> noch völlig unvoreingenommen.
Dann wirf auch einen Blick auf Pascal/Lazarus. Vielleicht ist das ja was
für dich.
Dietmar schrieb:> Also bleibt es im Hobbybereich. Ich will aber was> neues und interessantes lernen und mich dabei nicht> unbedingt mit dem Mainstream treiben lassen.
Tcl/Tk.
> - Mein späteres Ziel sind einfache Programme und dass> ich ein paar IO-Ports auf dem Board lesen/ansteuern> kann (und den USB-Port).
Board?! Mikrocontroller?! Dann bleibt nahezu nur C.
> - Ich nutze ausschließlich Linux.
Ok. Ich auch :)
> - Die Sprache soll leicht erlernbar sein.
Trifft mMn auf Tcl zu.
> - Auch wenn C zu den führenden Programmiersprachen> gehört, kann ich mich nicht so recht damit anfreunden.> Ich hab mich schon ein paar mal damit befasst und es> kam nie Freude auf.
"Führende Programmiersprache"?!
Das ist mMn der falsche Ansatz. Die Syntax der Programmier-
sprache selbst ist nur ein ganz kleiner Teil; man muss das
gesamte Ökosystem sehen: Standardisierung, Präprozessor,
Sprachdefinition, Compiler, Bibliotheken. C ist als
"portabler Assembler", also für Systemprogrammierung und
systemnahe Dinge super, aber für Anwendungen eher suboptimal.
C hat einige gute Seiten, aber die vollkommen kranke Syntax
gehört mMn nicht dazu.
> Da ich gerne auch Mikroprozessoren programmieren würde,> würde ja fast wieder nur C in Frage kommen, aber davon> will ich meine Wahl wirklich nicht abhängig machen.
Warum nicht? Das ist doch das richtige Kriterium.
> - Phyton ist gerade total in Mode, [...]> So bin ich nun auf Lisp gestoßen, [...]> Aber kann man damit heute überhaupt noch was anfangen?
Merkwürdige Frage. Es geht doch um Hobby?!
Aber ich wiederhole meinen Vorschlag: Tcl/Tk.
Mein eigener Weg: Ich hatte Assembler, BASIC, Pascal,
AWK (in dieser Reihenfolge) durch und suchte um 2000
herum eine...
- Scriptsprache, die
- reguläre Ausdrücke kennt und
- elementare Graphikausgabe ermöglicht und
- mit meiner beschränkten Intelligenz erlernbar ist.
Perl fiel wegen Verstoß gegen den letzten Punkt heraus;
Python gefiel mir wegen der Einrückerei nicht, und Java
habe ich auf meiner Linuxkiste nicht zum Laufen bekommen.
Durch mehrere Zufälle bin ich bei Tcl/Tk gelandet und bin
letztlich dabei geblieben.
Für Tcl/Tk sprechen aus meiner Sicht folgende Gründe:
1. Tcl/Tk ist sehr portabel, d.h. für Windows und Linux
(und sicher auch viele andere Systeme) verfügbar.
Sauber programmierte Anwendungen laufen ohne Änderungen
auf anderen Systemen (selbst getestet).
2. Tcl hat in Form des Toolkits "Tk" ein Graphikframework,
das sowohl alle üblichen GUI-Elemente (Buttons, Eingabe-
zeilen, Listboxen, ...) wie auch freie Vektorgraphik bietet.
Diagramme, Schaltpläne, ... sind kein prinzipielles Problem.
Ausdrucken (=PostScript-Export) kostet eine einzige
Programmzeile.
Tk scheint so überzeugend zu sein, dass es in Form von
Perl/Tk, Python/Tk, ... für andere Sprachen übernommen
wurde.
3. Viele "Anweisungen" (vordefinierte Worte) sind identisch
zu C definiert. Späterer Umstieg auf C wird also stark
erleichtert :)
4. Die Ausdrucksweise ist ähnlich kompakt wie in C -- aber
zahlreiche Krankheiten von C wurden vermieden. Beispiele:
- ++ und -- gibt es nicht,
- die blödsinnige Verwechslung von = und == ist ausgeschlossen,
- Pointergefrickel ist überflüssig,
- die Regeln für Verbundanweisung ("Anweisungsblöcke") sind
einfacher und mMn konsistenter als in C.
5. Alles, was mit Strings ausdrückbar ist, ist einfach und
kompakt machbar. Eine ASCII-Datei einlesen und zeilenweise
bearbeiten ist fast ein Einzeiler.
6. Tcl kennt Listen als elementare Datenstrukturen. Das führt
nach meiner Erfahrung mit der Zeit dazu, dass man Algorithmen
von vornherein anders denkt. Man muss sich weniger mit ärger-
lichem technischem Krempel beschäftigen ("muss der Index jetzt
bis n oder bis n+1 laufen?"), sondern man schreibt einfach
"foreach element $inputliste {...}"
Tcl hat aber auch Nachteile:
1. Die Tcl-Syntax wird als "krude" bzw. "gewöhnungsbedürftig"
bezeichnet. Das ist im Kern auch richtig: Klassische
Zuweisungen der Art "x=1+2" gibt es nicht; die Anweisung
"set x 1+2" bewirkt, dass x anschließend den Wert "1+2"
hat.
Wenn man 1+2 RECHNEN will, muss man "set x [expr 1+2]"
schreiben :)
2. Verarbeitung von Binärdaten ist machbar, aber ein Krampf.
Will man nicht wirklich.
3. Alles, was man normalerweise mit Arrays ausdrücken würde,
geht beschissen (Beispiel: Bildverarbeitung). Machbar, aber
ein Krampf.
4. Ein Typsystem existiert (offiziell) nicht. Das kann lästig
sein, wenn Zahlenrechnung notwendig ist. "10/11" ist nicht
dasselbe wie "10.0/11.0".
Mit "foreach zahl {01 02 03 04 05 06 07 08} {...}" kann man
grandios auf die Nase fallen (weil Zahlen mit führender Null
als Oktalzahlen (!!!) interpretiert werden).
5. Tcl ermöglicht gut strukturierte Programme, unterstützt
das aber nicht sonderlich. Aufgrund der SEHR mächtigen
Stringmanipulation kann man leicht komplett unverständliche
Programme formulieren. ("Man kann in jeder Sprache in FORTRAN
programmieren" :)
6. Tcl ist nicht objektorientiert. Klassen, Objekte, Vererbung
werden nicht unterstützt. Das kann man aber auch als Vorteil
sehen: Kapselung wird durch Namespaces unterstützt, aber mit
dem OOP-Gefrickel (Vererbung, Klassenbibliothek) muss man sich
nicht befassen.
Man braucht aber Disziplin, um lesbare Programme zu schreiben.
Ich bin Pascal-sozialisiert; mir fällt das leicht :)
7. Die Tcl-Gemeinde ist nicht sonderlich "einladend". Das mag
merkwürdig und esoterisch klingen, entspringt aber meiner
Erfahrung: Es gibt unheimlich viel gutes Zeug, aber es wird
recht wenig propagiert, dass es dieses gute Zeug gibt.
Alles in allem ist Tcl die optimale Sprache für mich. Ich
programmiere seit Jahren von Zeit zu Zeit an diversen Tools
herum (u.a. einem speziellen Installationstool für Debian-
Pakete) und habe nie das Gefühl, dass mich die Sprache
einschränkt. Der Projektfortschritt hängt nur von meinen
Fähigkeiten ab, nicht von der Sprache.
Was den Einstieg in die Programmierung betrifft, finde ich folgenden
Artikel von Peter Norvig (seines Zeichens "Director of Research" bei
Google) sehr lesenswert:
http://norvig.com/21-days.html
Speziell seinen Empfehlungen zur Wahl einer sinnvollen ersten
Programmiersprache (im Abschnitt "Appendix: Language Choice", fast am
Ende des Artikels) kann ich mich nur anschliessen; sie lauten:
* "Keep it simple" - Für den Einstieg eine leichte Programmiersprache,
ohne statische Typisierung etc., kein C/C++/Java oder Ähnliches.
* "Play" - Nimm für den Einstieg eine Programmiersprache, die eine
REPL-Shell bietet
* "Use your friends" - Nimm eine Programmiersprache, für die Du leicht
Unterstützung findest, z.B. eine, die Freunde von Dir benutzen. Denn
gerade am Anfang wirst Du häufig auf Probleme stossen; dann ist es
wichtig, dass Du schnell Hilfe bekommst)
Das dürften tatsächlich so mit die drei wichtigsten Einflussfaktoren
sein, die darüber entscheiden, ob der Einstieg in die Programmierung
erfolgreich ist, oder man schon bald frustriert das Handtuch wirft.
Als konkrete Empfehlungen nennt er drei Programmiersprachen:
- Python
- Scheme/LISP
- Javascript (hauptsächlich deshalb, weil es dafür so viele Tutorials
etc. im Internet gibt)
Wenn Dir LISP/Scheme zusagt, würde ich mir an Deiner Stelle übrigens
"Racket" (früher DrScheme genannt) anschauen.
Zum Einstieg in die Programmierung mit "Racket" kann ich da ganz
besonders die Einführung "How to design programs" an's Herz legen; das
"Prolog"-Kapitel dieses kostenlosen Buches ist die beste Einführung in
Programmierung, die ich bislang gesehen habe; innerhalb eines einzigen
Kapitels lernt man da bspw., eine Animation einer startenden Rakete zu
programmieren:
http://www.ccs.neu.edu/home/matthias/HtDP2e/part_prologue.html
Da LISP/Scheme allerdings deutlich weniger verbreitet ist als andere
Sprachen, und es daher als Einsteiger deutlich schwerer ist, da Hilfe zu
bekommen, wäre meine persönliche Empfehlung unter'm Strich aber wohl
trotzdem Python. Es hat schon gute Gründe, warum Python seit Jahren DIE
Einsteiger-Programmiersprache schlechthin ist.
Dieter schrieb:> Für den Computer gibts Assembler. Zurück zum Ursprung!
Das ist jetzt auch nur eine der mehrere Tausend Sprachen, aus denen ein
Compiler, Assembler, Interpreter oder was auch immer, für den Computer
Schmackhaftes (um im Bild zu bleiben) erzeugt.
Assembler hat seine Berechtigung, ist aber keine *Hoch*Sprache sondern
prozessor-spezifisch.
C ist eine Hochsprache, auch wenn es einige IDB gibt.
Die breite Verwendung von C zeigt, dass sie dem Programmierer schmeckt,
und ich will auf die Gründe gar nicht eingehen.
Dem Computer ist die Programmiersprache egal, er kann sie gar nicht,
bzw. nur über einen Compiler/Assembler/Interpreter verstehen.
Achim S. schrieb:> Die breite Verwendung von C zeigt, dass sie dem Programmierer schmeckt,
Ich glaube nicht daß dieser kausale Zusammenhang existiert. Das fängt
schon damit an daß es sehr weit hergeholt ist zu postulieren C würde
einem Programmierer "schmecken". Ich kenne keinen auf den das zutrifft.
Man arrangiert sich einfach nur mit dem Übel und versucht damit zu
leben.
Arc N. schrieb:> https://ferret-lang.org> Direkt unterstützt werden u.a. auch div. Arduinos und Teensys. Eine> andere Möglichkeit wäre http://www.ulisp.com/ ebenso u.a. auf Arduinos
Was es alles gibt! Da finden sich ja sogar kleinere Hardwareprojekte.
Joachim S. schrieb:> Zum Einstieg in die Programmierung mit "Racket" kann ich da ganz> besonders die Einführung "How to design programs" an's Herz legen; das> "Prolog"-Kapitel dieses kostenlosen Buches ist die beste Einführung in> Programmierung, die ich bislang gesehen habe; innerhalb eines einzigen> Kapitels lernt man da bspw., eine Animation einer startenden Rakete zu> programmieren:> http://www.ccs.neu.edu/home/matthias/HtDP2e/part_prologue.html
Die Einführung ist tatsächlich sehr verständlich geschrieben.
Danke euch beiden, tolle Tipps! Bei den Seiten habe ich mit Sicherheit
nicht zum letzten mal reingeschaut.
Dr. Sommer schrieb:> Ich kenn das hier von den ETechnik-Studenten - die werden mit C gequält> und müssen lustiges Typ-und-Syntax-Raten betreiben, ala "was bedeutet> void (*A [4]) (int* [], char**, int (*) (void*, signed*, unsigned*),> char);"? So wird sichergestellt dass die garantiert keine Lust mehr auf> Programmieren haben. Das geht ja schon los damit, die drei Bedeutungen> des Sternchens zu erläutern, oder was ein void* ist. Alles nur unnötiger> Frust und Hirnverrenkung.
Beruhigend, dass ich nicht alleine dastehe. Und ich dachte schon ich
wäre total verblödet.
Nach all dem was ich bis jetzt an Antworten gelesen habe, bin ich
bestärkt darin, das Lisp die richtige Wahl für mich ist. Ich weiß nur
noch nicht welchen Dialekt. Aber das werde ich sicher leicht
herausfinden.
Bernd K. schrieb:> Man arrangiert sich einfach nur mit dem Übel und versucht damit zu> leben.
OK, dann analog zu Churchills Demokratie:
C ist (für Mikrocontroller, bzw. für eine Reihe von Aufgaben) die
schlechteste aller Programmiersprachen. Abgesehen von denen, die von
Zeit zu Zeit ausprobiert worden sind.
Joachim S. schrieb:> Was den Einstieg in die Programmierung betrifft, finde ich folgenden> Artikel von Peter Norvig (seines Zeichens "Director of Research" bei> Google) sehr lesenswert:> http://norvig.com/21-days.html
Dieser Artikel hat mir einiges klar gemacht. Gut manchmal etwas
empfohlen zu bekommen. Wenn ich nur zufällig über diesen Artikel
gestolpert wäre, hätte ich mir vermutlich nicht die Zeit genommen ihn in
Ruhe zu lesen.
Paul B. schrieb:> Da Du nicht von Irgendjemandem zum Programmieren getriebn wirst und> selbst wählen kannst, schalge ich "Pure-Basic" vor
PureBasic habe ich jahrelang gemacht, allerdings hat es einen großen
Nachteil: Keine ARM-Unterstützung und auch keine geplant. Also läuft es
nicht auf dem Raspberry Pi.
Daraufhin habe ich rumgesucht und bin nach einem Ausflug zu C - bäh! -
bei FreePascal (https://www.lazarus-ide.org/) gelandet. Pascal hatte ich
in Schule und Studium mal, aber dann mangels Compiler nie wieder
genutzt.
Mit Freepascal geht: GUI und Kommandozeilenprogramme auf Windows und
Linux PC, ebenso auf dem Raspberry, GUI mit Qt und GTK, Crosscompiling
von Windows auf Linux PC und umgekehrt, Crosscompiling von PC auf
Raspberry und .... Crosscompiling auf AVR Controller. Du kannst also
Deinen AVR Controller in der gleichen IDE mit der gleichen Sprache
programmieren wie Deinen Raspberry, und dabei sogar die gleichen
Bibliotheken verwenden (z.B. für nRF Kommunikation).
Ich würde Dir an sich nicht unbedingt LISP zum Einstieg empfehlen.
Allerdings spricht in Deinem Fall dafür, dass Du LISP anziehend findest.
Motivation ist zunächst das allerwichtigste Element in so einer
Situation. Versuch das einfach. Es wird Dir in jedem Fall wertvolle
Erfahrungen verschaffen.
Kennst Du das hier? http://www.ulisp.com/ Das gibts auch für die
Arduino-Hardware, so dass der Einstieg nicht so teuer ist.
Du solltest allerdings am Anfang mit einigen Schwierigkeiten rechnen.
Die Tutorials dort helfen Dir aber und hier im Forum kannst Du
nachfragen, wenn Du Probleme hast die Software zu installieren oder das
LISP bzw. Deine Programme auf den uC zu bekommen. (Vielleicht manchmal
mit etwas Verzögerung, da eher weniger Leute LISP auf dem uC laufen
lassen).
Theor schrieb:> Ich würde Dir an sich nicht unbedingt LISP zum Einstieg empfehlen.>> Allerdings spricht in Deinem Fall dafür, dass Du LISP anziehend findest.> Motivation ist zunächst das allerwichtigste Element in so einer> Situation. Versuch das einfach. Es wird Dir in jedem Fall wertvolle> Erfahrungen verschaffen.
Da kann ich nur voll zustimmen.
LISP (Scheme etc.) ist toll, eine Sprache, die imho eh viel mehr
Beachtung verdient hätte. Gerade wenn Dir (@Dietmar) die
LISP/Scheme-Syntax eh sympathisch ist, würde ich auf jeden Fall
empfehlen, Dich mit dieser Sprache zu befassen.
Allerdings würde ich tendenziell das erst als zweite Sprache machen, und
mich zuerst kurz mit Python beschäftigen. Denn gerade zum Einstieg hat
Python ein paar Vorteile:
- Python ist unter'm Strich doch noch ein gutes Stück leichter zu lernen
- gerade unter Linux, was ja das Betriebssystem Deiner Wahl ist, sind
Python-Kenntnisse mittlerweile äusserst hilfreich
- Es ist deutlich schwieriger, Leute mit LISP-Kenntnissen zu finden, die
einem bei Problemen helfen können; Leute mit Python-Kenntnissen hingegen
gibt's wie Sand am Meer
- Du hast geschrieben, dass Du grundsätzlich auch gerne Mikrocontroller
programmieren würdest. Obwohl Mikrocontroller wegen der extrem
begrenzten Ressourcen in den meisten Fällen in der Tat mit C/C++
programmiert werden, können leistungsfähige Mikrocontroller (mit viel
RAM) auch in diversen höheren Programmiersprachen programmiert werden.
Die Mikrocontroller von Esprissif - der ESP8266 und dessen noch viel
leistungsfähigerer Nachfolger ESP32 - bspw. haben innerhalb kürzester
Zeit eine unglaubliche Fan-Gemeinde gesammelt, weil sie zu einem extrem
günstigen Preis so hervorragend ausgestattet sind (WLAN, viel RAM, ESP32
auch Bluetooth), dass sie problemlos auch in vglw. hohen Sprachen wie
LUA, Python etc. programmiert werden können. Und für diese
ESP-Mikrocontroller ist die Programmierung in Python vglw. populär
("MicroPython"); wenn Du Python kannst, kannst Du daher auch direkt
diese extrem populären ESP-Mikrocontroller programmieren. Mit LISP
hingegen sieht es da deutlich schlechter aus; für den älteren ESP8266
scheint es zwar eine Art LISP namens "esp-lisp" zu geben, aber die
scheint weder besonders ausgereift/sinnvoll nutzbar noch verbreitet zu
sein, wird offenbar nicht mehr weiterentwickelt und für den aktuellen
Nachfolger ESP32 scheint es bislang noch gar kein LISP zu geben.
Lange Rede, kurzer Sinn: -> Hole Dir für ein paar Euro ein Development
Board mit ESP32, und beschäftige Dich (auch) mit Python - dann kannst Du
Deine neuen Programmierkenntnisse nicht nur am PC nutzen, sondern kannst
Dich auch direkt mit der Programmierung von Mikrocontrollern befassen.
Ein passendes Development Board wäre z.B. das hier:
https://www.amazon.de/AZDelivery-NodeMCU-Development-Nachfolgermodell-ESP8266/dp/B071P98VTG/
wenn Du ein paar Wochen warten kannst, kriegst Du das gleiche Board bei
Aliexpress incl. Versand auch für weniger als Hälfte.
Joachim S. schrieb:> Da LISP/Scheme allerdings deutlich weniger verbreitet ist als andere> Sprachen, und es daher als Einsteiger deutlich schwerer ist, da Hilfe zu> bekommen, wäre meine persönliche Empfehlung unter'm Strich aber wohl> trotzdem Python. Es hat schon gute Gründe, warum Python seit Jahren DIE> Einsteiger-Programmiersprache schlechthin ist.
Es hat ja auch gute Gründe, warum Python seit vielen Jahren die
beliebteste Allround-Skriptsprache ist. Dazu zählen sicher seine
Einfachheit, Performanz, Robustheit, Stabilität, Erweiterbarkeit,
Konsistenz, Kompaktheit, Lesbarkeit, Plattformunabhängigkeit, eine
herausragende Infrastruktur von Bibliotheken, Werkzeugen und
Dokumentation sowie wohl nicht zuletzt auch die Tatsache, daß es
Bestandteil der Linux Standard Base ist.
Sheeva P. schrieb:> Es hat ja auch gute Gründe, warum Python seit vielen Jahren die> beliebteste Allround-Skriptsprache ist.
Die Frau Dr. Merkel unter den Programmiersprachen!
:-)
muuuha - Zeit für Relegionskriege.
Mimm Lisp,
functional rulez! (Java/c++/etc wersucht gerade da hin zu kommen wo Lisp
vor 30 Jahren schon war - mit grausiger Syntax)
Gibt es sogar für den Arduino. Selbst wenn man hinterher doch wieder
imperativ/oo macht, bildet es ungemein.
Python wäre meine nächste Alternative, da es Funtional/OO/Imperativ
gleich gut unterstützt.
michi42 schrieb:> Mimm Lisp,> functional rulez!
Lisp ist eigentlich alles: nicht nur funktional, sondern auch
prozedural, objektorientiert (mit CLOS) und vieles mehr.
Und wenn es irgendein neumodisches Programmierparadigma geben sollte,
das von Lisp noch nicht unterstützt wird, programmiert man es einfach
mit hinzu. Nicht umsonst hat John Foderaro Lisp als "programmable
programming language" bezeichnet.
Deswegen ist es kein Fehler, sich Lisp einmal etwas näher anzuschauen.
Ob man die schier unbegrenzten Möglichkeiten, die die Sprache bietet,
dann auch gewinnbringend nutzen kann, muss jeder für sich selber
entscheiden und ist eher eine Frage des bevorzugten Programmierstils.
Ein Lisp-Programm wird ganz unterschiedlich aussehen, je nachdem, ob
sein Programmierer vorher hauptsächlich mit Basic, C++ oder Haskell
gearbeitet hat.
Nun ja, es hängt natürlich auch davon ab, ob man eher aus Spaß und
Freude programmieren möchte, oder eher um mit möglichst wenig Aufwand
eine konkrete Aufgabe zu lösen bzw. einen Job zu finden. Für den
letzteren Fall ist man mit den neueren modernen bzw. "exotischen"
Sprachen sicher nicht so gut beraten. (Wobei ich noch immer nicht recht
verstanden habe, was der Threadstarter eigentlich genau vor hat, er
weiss es wohl selber noch nicht so genau. PC-Programmierung und AVR-tiny
Programmierung unterscheiden sich eben doch stark.)
Hallo Dietmar,
ich bin zwar in der Embedded Welt zu Hause und codiere fast
ausschliesslich in C/C++, aber für Testutilities, Decoder und Anderes
benutze ich (von gelegentlichen Ausflügen in C# abgesehen) sehr gerne
Racket. Racket ist der Enkel von Lisp. Lisp ist heutzutage eigentlich
ziemlich out, aber die nächste Generation Scheme (ein "Lisp ohne
Fehler") ist sowas wie der Rolls Royce unter den Programmiersprachen.
Die Weiterentwicklung von Scheme (Racket) ist eine
Metaprogrammiersprache, d.h. Du kannst für jede Programmiersprache einen
Übersetzungslayer in Racket schreiben oder schon finden (oder eben
native Racket ~ Scheme codieren).
Wer sich erstmal auf Scheme eingelassen hat, kommt so schnell nicht mehr
davon los. Es hat eine sehr eigene Ästhetik und Eleganz und kommt auf
der untersten Ebene mit gerade einer Handvoll Sprachelementen aus, die
aber so mächtig sind, dass man so gut wie Alles damit machen kann.
Für Embedded eignet sich Racket nicht, aber auf Linux/Windows macht es
Riesenspass. Du findest den kostenlosen Download auf racket.org. Dort
sind auch ein paar recht gute Tutorials zum anfixen.
Yalu X. schrieb:> Und wenn es irgendein neumodisches Programmierparadigma geben sollte,> das von Lisp noch nicht unterstützt wird, programmiert man es einfach> mit hinzu. Nicht umsonst hat John Foderaro Lisp als "programmable> programming language" bezeichnet.> Ein Lisp-Programm wird ganz unterschiedlich aussehen, je nachdem, ob> sein Programmierer vorher hauptsächlich mit Basic, C++ oder Haskell> gearbeitet hat.
Ist das wirklich die Situation? Das man sich von BASIC aus gerne
weiterentwickeln möchte ist meines Erachtens verständlich, ergibt sich
ja schon aus daraus, dass BASIC mal als einfache
Einstiegs-Programmiersprache für jedermann angedacht war "Beginner’s
All-purpose Symbolic Instruction Code". Aber warum sollte jemand der in
C++ oder Haskell sich sicher fühlt ausgerechnet zu Lisp greifen? (und
auf wievielen Hochzeiten kann man gleichzeitig tanzen wenn man KEIN Nerd
ist??) Welchen Vorteil bietet das? Das erschließt sich mir nicht ganz.
Wie viele von uns sind eigentlich nach ihrer BASIC Anfangszeit (die bei
einigen Jahrzehnte zurückliegt) anschließend bei Lisp gelandet und dort
auch wirklich bis heute verblieben, anstatt zu C/C++, C#, Java, Pascal,
Nim, Rust, go und wie sie alle heißen zu wechseln?
Wie viel Lisp ist in diesem Forum hier bisher aufgeschlagen im vergleich
zu Bsp. C/C++, C#, Java, Pascal?
Warum brauchte es überhaupt erst neue Sprachen wie Nim, Rust, go, wenn
doch mit Lisp eigentlich alles machbar ist? Und warum sind genau diese
Sprachen dann auch noch erfolgreich?
Ruediger Asche (Firma: keine) (rac) schrieb:
> Lisp ist heutzutage eigentlich> ziemlich out, aber die nächste Generation Scheme (ein "Lisp ohne> Fehler") ist sowas wie der Rolls Royce unter den Programmiersprachen.> Die Weiterentwicklung von Scheme (Racket)
Na schön, Lisp ist also "out" und Scheme (Racket) ist nun "in". Aha!
Kurz gegockelt und ..
http://docs.racket-lang.org/quick/index.html
.. über das hier gestolpert
An expression can also be a function call. To call a function, put an
open parenthesis before the function name, then expressions for the
function arguments, and then a close parenthesis, like this:
> (circle 10)
Kreis erscheint
Stellt sich einem doch irgendwie sofort die Frage, warum in Gottes Namen
muss ein Funktionsaufruf SO aussehen?
Was ist falsch daran Funktionen so zu definieren, dass sie einem SOFORT
ins Auge springen
circle()
circle(10)
Warum kommt ständig jemand auf die "Idee" das Rad nochmal neu erfinden
zu müssen, nur diesmal so, dass die Felge nach innen gekrempelt wird und
das ganze nicht mehr nach Rad aussieht?
Mode Hype?
Erschließt sich das nur einem Nerd?
Wer braucht so was?
PS: Nicht aufregen! Nur meine Meinung.
Alles Humbug schrieb:> Ruediger Asche (Firma: keine) (rac) schrieb:>>> Lisp ist heutzutage eigentlich>> ziemlich out, aber die nächste Generation Scheme (ein "Lisp ohne>> Fehler") ist sowas wie der Rolls Royce unter den Programmiersprachen.>> Die Weiterentwicklung von Scheme (Racket)>> Na schön, Lisp ist also "out" und Scheme (Racket) ist nun "in". Aha!>
Weil Lisp einige inherente Probleme hat (z.B. dynamic scoping), die mit
Scheme gefixt wurden.
>> Stellt sich einem doch irgendwie sofort die Frage, warum in Gottes Namen> muss ein Funktionsaufruf SO aussehen?>> Was ist falsch daran Funktionen so zu definieren, dass sie einem SOFORT> ins Auge springen>> circle()> circle(10)>> Warum kommt ständig jemand auf die "Idee" das Rad nochmal neu erfinden> zu müssen, nur diesmal so, dass die Felge nach innen gekrempelt wird und> das ganze nicht mehr nach Rad aussieht?>
Hallo A.H.,
das liegt daran, dass in Scheme Funktionen First Class Objekte sind,
d.h. Du kannst Funktionen als Parameter an Funktionen übergeben und als
Rückgabewerte von Funktionen bekommen. Grob gesagt gibt es also zwischen
Funktionen (genauer Lambda Expressions bzw. closures) und anderen
Datentypen keinen Unterschied. In Scheme gibt es noch Andere
faszinierende Dinge, die First Class Objekte sind (z.B. continuations,
was aber hier zu weit führt). Also kann im Prinzip an jeder Stelle
innerhalb der Klammern () jeder Objekttyp stehen. Wenn eine closure an
erster Stelle so einen Ausdruckes steht, wird sie halt "als Funktion
aufgerufen." Das hat hauptsächlich historische Gründe (war schon in Lisp
so, obwohl der First Class status erst in Scheme festgeschrieben wurde).
In Racket kannst Du ohne Probleme jegliche syntaktische Abstraktion
schreiben, durch die die Syntax
(circle 10)
durch
circle(10);
oder
invoke (circle,10):
oder
{call function circle with parameter 10}!
oder was auch immer ersetzt werden kann. Das ist aber nicht der Punkt.
Wie viele Andere Leute bist Du scheinbar prozedural sozialisiert, d.h.
für Dich gibt es zunächst mal Funktionen und ihre Parameter, und das
sind traditionell verschiedene Konzepte. Aus der Sicht heraus hast Du
natürlich recht, dass es Geschmackssache ist, wie man den Aufruf
syntaktisch formuliert. Aber wenn man erstmal das Konzept von Funktionen
mit ihren aktuellen scopes als Objekte verstanden hat, eröffnet sich
eine völlig neue Sichtweise der Dinge. Und Möglichkeiten, die Andere
Programmiersprachen nicht bieten. Beispiel:
(define (genericop operator operand1 operand2)
(operator operand1 operand2))
(define (addition op1 op2) (genericop + op1 op2))
(define (multiplication op1 op2) (genericop * op1 op2))
(define (genericop_with_constant operator operand1)
(lambda (operand2) (operator operand1 operand2)))
; oder gleichwertig:
;(define (genericop_with_constant operator operand1)
; (lambda (operand2) (genericop operator operand1 operand2)))
(define (add1 operand) ((genericop_with_constant + 1) operand))
(addition 2 3) => 5
(multiplication 2 3) => 6
(add1 4) => 5
(add1 ((genericop_with_constant * 2) 3)) => 7
Das sieht jetzt erstmal wie akademischer Spielkram aus, bietet aber in
der Praxis eine Menge Anwendungen, die sich mit keiner anderen
Programmiersprache so gut und modular lösen lassen.
Ob Du Dich darauf einlassen magst, ist deine Entscheidung.
> Mode Hype?> Erschließt sich das nur einem Nerd?> Wer braucht so was?>
Wie gesagt: Ob Du Dich darauf einlassen magst, ist deine Entscheidung.
Inwieweit das "code is data" paradigma von Lisp in gefährlichen Zeiten
wie diesen ein Risiko darstellt, wage ich nicht zu beurteilen. Aber ja,
es ist unheimlich elegant ;-)
ich dachte schon, ich würde auf reines Unverständnis stoßen, als ich
hier Beitrag "Re: Welche Programmiersprache lernen? (C, Phyton, Lisp, Swift, Smalltalk?)"
schrieb:
Michael R. schrieb:> ich halte Lisp nach wie vor für eine der klarsten und effizientesten> Sprachen überhaupt
aber es freut mich dass ich mit meiner Meinung nicht alleine bin.
Was man auch noch erwähnen sollte: Lisp lässt sich ungeheuer effizient
implementieren (kein Wunder, zur Zeit der Entstehung von Lisp konnte man
Performance-Probleme noch nicht mit GHz bewerfen... was ich im Übrigen
für eins der entscheidenden Probleme heutiger SW halte, ich sag nur C#)
Auch wenn der Mythos über CAR/CDR und die direkte Entsprechung in
Assembler nicht ganz der Wahrheit entspricht.
anyway: my other car is a CDR ;-)
Michael R. schrieb:> Lisp lässt sich ungeheuer effizient implementieren
Obwohl es GC, dynamische Typisierung und automatische
Speicherverwaltung hat? Java z.B. hat zweiteres nicht, müsste also noch
schneller sein?
Dr. Sommer schrieb:> Java z.B. hat zweiteres nicht, müsste also noch> schneller sein?
Ja, müsste, könnte, ...
Die Herren Hätti und Wäri sind doch bekannterweise Millionäre, oder?
Wenn ich schon bisher nicht auf Unverständnis gestoßen bin, dann jetzt:
Java ist eine Krankheit, ein "pain in the ass", aber gottseidank ist es
angezählt...
(ist zwar nur meine ganz persönliche Meinung, aber ich treffe auf immer
mehr Firmen, wo Java für neu angeschaffte Software ein NoGo ist)
Michael R. schrieb:> Java ist eine Krankheit, ein "pain in the ass", aber gottseidank ist es> angezählt...
Witzig finde ich, dass bei dem ganzen Fluchen über Java immer nur auf
die große/langsame JVM geschossen wird. Hätte LISP o.ä. eine derart
umfassende Bibliothek, wäre das auch so groß. Es gibt ja auch winzige
und anspruchslose Java-VM's. Die Dinge, die mich an Java stören,
greift aber nie einer auf...
Michael R. schrieb:> (ist zwar nur meine ganz persönliche Meinung, aber ich treffe auf immer> mehr Firmen, wo Java für neu angeschaffte Software ein NoGo ist)
Na, die benutzen dann hoffentlich keine Google-Produkte o.ä., denn
insbesondere im Web-Bereich ist das ja (serverseitig) auch sehr
verbreitet.
Was ich u.a. an Java cool finde: Selbst gigantische Java-Projekte mit
Millionen LoC sind superschnell übersetzt, und Code-Vervollständigung
funktioniert auch da supi. C und C++ brauchen Größenordnungen länger.
Klar, LISP und Konsorten muss man gar nicht übersetzen, aber man hat ja
auch was davon: Eine ganze Reihe von Fehler-Prüfungen, insb. auf
korrekte Typen.
Dr. Sommer schrieb:> Witzig finde ich, dass bei dem ganzen Fluchen über Java immer nur auf> die große/langsame JVM geschossen wird. Hätte LISP o.ä. eine derart> umfassende Bibliothek, wäre das auch so groß.
Du setzt JVM und Bibliothek(en) gleich?
Ich schieße übrigens nicht (primär) auf die langsame VM...
Dr. Sommer schrieb:> im Web-Bereich ist das ja (serverseitig) auch sehr> verbreitet.
Ja, aber wie gesagt, angezählt.
Dr. Sommer schrieb:> Eine ganze Reihe von Fehler-Prüfungen, insb. auf> korrekte Typen.
Das ist wirklich eine offene Flanke. Ich behaupte, das Zeitalter der
stark typisierten Sprachen ist vorbei. Aber ganz ohne gehts wohl auch
nicht... an der Stelle ist noch viel zu tun.
Michael R. schrieb:> Du setzt JVM und Bibliothek(en) gleich?
Mir viel gerade der Begriff nicht ein; ich meinte die JavaSE welche man
normalerweise auf dem Desktop installiert und die die HotSpot JVM und
die Bibliotheken enthält.
Michael R. schrieb:> Ja, aber wie gesagt, angezählt.
Könnte sein dass es durch PHP verdrängt wird, aber ob das besser ist?
Michael R. schrieb:> Ich behaupte, das Zeitalter der stark typisierten Sprachen ist vorbei
Totgesagte leben länger. Statisch typisierte Sprachen sind sehr
vorteilhaft für große Projekte. Da gibt es m.W. kein besseres
praktikables Konzept, höchstens hybride Varianten.
Dr. Sommer schrieb:> Könnte sein dass es durch PHP verdrängt wird, aber ob das besser ist?
PHP eher nicht, denke ich... eher Node.js & Co, aber da bin ich
zugegebenermaßen auf dünnem Eis.
Dr. Sommer schrieb:> Statisch typisierte Sprachen sind sehr> vorteilhaft für große Projekte. Da gibt es m.W. kein besseres> praktikables Konzept, höchstens hybride Varianten.
Ja, das ist sicher keine Schwarz/Weiss Entscheidung.
Aber wenn man sich anschaut (und ich sehe das täglich, stündlich) was
uns stark typisierte Sprachen eingebrockt haben (man nehme ein fast
beliebiges XML, insbesondere aus dem MS-Ökosystem) dann wird schon klar,
dass es das nicht sein kann...
Nimm einen x-beliebigen (aber geistig flexiblen)
C++/Java/C#-Programmierer, und erklär im Hashes, Hash-Strukturen, und
dynamische Objektstrukturen in einer (fast) beliebigen schwach
typisierten Sprache, und wer wird in Tränen ausbrechen.
Dr. Sommer schrieb:> Michael R. schrieb:>> Lisp lässt sich ungeheuer effizient implementieren>> Obwohl es GC, dynamische Typisierung und automatische> Speicherverwaltung hat? Java z.B. hat zweiteres nicht, müsste also noch> schneller sein?
Da bin ich (leider) ganz bei Dir. Die Lisp Welt ist für Embedded aus
mehreren Gründen untauglich. Es gibt (Insel-) Versuche, es zu
realisieren, und ich habe mich auch mal dran gemacht, aber aufgegeben.
Das Modell von Lisp/Scheme/Racket lässt sich einfach nicht gut auf
Embedded aufsetzen, u.A. aus folgenden Gründen:
1. L/R/S bietet keinerlei Kontrolle über Speicher, d.h. es lässt sich
nicht einfach ein Interface realisieren, um z.B. auf memory mapped
registers gezielt zuzugreifen. Grundsätzlich sind Treiber für Hardware
und Peripherie fast unmöglich darin zu realisieren. GC ist notwendig für
jede L/R/S Implementation und damit für Echtzeitanwendungen so ziemlich
out.
2. L/S/R sind interpretierte Sprachen, wobei viele Interpreter
metazirzulär ist, d.h. mit Funktionen wie eval und apply lassen sich
Ausdrücke zur Laufzeit interpretieren. Wer diese Konstrukte benutzt
(Sinn und Unsinn davon werden in der Community so lange diskutiert wie
es die Sprachen gibt), benötigt einen residenten Interpreter, der das
footprint recht stark aufbläht.
3. Die meisten modernen L/S/R Systeme compilieren Quellcode in Bytecode
(ähnlich zu Javas P-Code), so dass ein Bytecodeinterpreter ebenfalls
resident sein muss.
4. Es lässt sich ein Multitasking Betriebssystem komplett in Scheme
schreiben (da gibt es ein Konstrukt namens engine, das vollständig
zeitscheibengesteuerte preemption von Berechnungen realisieren kann). Da
das aber eben wieder auf Scheme aufsetzt, muss untendrunter eben
mindesetns der GC und der Bytecodeinterpreter sitzen.
Schade, ist aber so. Als Alternative zu Java auf PCs taugt Scheme aber
allemal (ein Webserver ist in 2 Zeilen geschrieben).
Michael R. schrieb:> Nimm einen x-beliebigen (aber geistig flexiblen)> C++/Java/C#-Programmierer, und erklär im Hashes, Hash-Strukturen, und> dynamische Objektstrukturen in einer (fast) beliebigen schwach> typisierten Sprache, und wer wird in Tränen ausbrechen.
Hah! Das akribische Annotieren von Typen ist zwar nervig und für
Anfänger schwer, sodass dynamisch typisierte oder gar untypisierte
Sprachen zwar wie eine Erlösung erscheinen, aber auf verschlungenen
Pfaden zur Laufzeit auftretende Typfehler können auch ganz schön lästig
sein.
Wenn man das Typsystem verstanden hat (und über den Zustand des Haderns
über char* vs. char[42] hinaus ist), freut man sich über jeden
Typ-Fehler den der Compiler anzeigt - ein Fehler weniger, der einen
irgendwann später in den Hintern beißt! Ich benutze jedenfalls sowohl
dynamisch als auch statisch typisierte Sprachen und bevorzuge für große
Projekte definitiv letztere.
Kleines Beispiel: Der Log meines OwnCloud-Servers ist voll von Fehlern,
dass irgendein Objekt eine Funktion nicht hat. Das wäre mit Java nicht
passiert... (aber ok, OwnCloud ist generell ziemlich buggy)
Ruediger A. schrieb:> Schade, ist aber so. Als Alternative zu Java auf PCs taugt Scheme aber> allemal (ein Webserver ist in 2 Zeilen geschrieben).
Du meinst, die Bibliothek für den Webserver ist in 2 Zeilen eingebunden.
Wenn du eine HTTP-Bibliothek für Java nimmst, ist die auch in 2 Zeilen
gestartet. Ich meine Glassfish hat sowas.
In den letzten zwei Tagen habe ich echt viel neues gelernt, besonders
über die Unterschiede der einzelnen Programmiersprachen. Jetzt bin ich
erst recht begeistert und bereit mich da noch mal richtig reinzuknien.
Zunächst war ich durch die Vielfalt noch mehr verwirrt, doch nun
tendiere stark zu Common Lisp. Aber ich frage mich gerade, ob es nicht
besser wäre, zunächst mit Scheme zu beginnen. Da finde ich jedenfalls
viel mehr Information und auch die verständlicheren Tutorials.
Zu Common Lisp habe ich, was mir anfängertauglich erscheint, eigentlich
nur dieses gefunden: https://www.cse.buffalo.edu//~shapiro/Commonlisp/
Zu Scheme gibts einfach mehr und dazu habe ich ja auch hier schon gute
Tipps bekommen.
Stefan schrieb:> Nun ja, es hängt natürlich auch davon ab, ob man eher aus Spaß und> Freude programmieren möchte, oder eher um mit möglichst wenig Aufwand> eine konkrete Aufgabe zu lösen bzw. einen Job zu finden.
Wie gesagt, einen Job finde ich damit nicht mehr, das anzunehmen wäre
utopisch. (Belehrt mich, wenn ich mich irre). Also bleibt nur das
Interesse und ich denke ich habe einiges an Bildung in diesem Bereich
nachzuholen. Ich finde das ist doch ein gute Sache und verstehe nicht
warum es dann Zeitgenossen gibt, die mit einem so blöden Kommentar
daherkommen:
Beitrag "Re: Welche Programmiersprache lernen? (C, Phyton, Lisp, Swift, Smalltalk?)"> (Wobei ich noch immer nicht recht> verstanden habe, was der Threadstarter eigentlich genau vor hat, er> weiss es wohl selber noch nicht so genau. PC-Programmierung und AVR-tiny> Programmierung unterscheiden sich eben doch stark.)
Als ich meinen Eingangspost erstelle, wusste ich das tatsächlich nicht
so genau. Im Grunde schon beides. Nur werde ich das wohl nicht unter
einen Hut bringen. Wichtiger ist mir jetzt aber die Programmiersprache
zu erlernen, Mikroconroller lasse ich erst mal Nebensache sein. Und wenn
ich irgendwann fitter bin, wurden mir ja schon interessante
Möglichkeiten wie Ferret und uLisp genannt, die für meine Zwecke völlig
ausreichen sollten.
Für meine Basteleien hätte ich halt schon öfter mal einen
Mikrocontroller brauchen können, statt ein CMOS-Grab zu erschaffen.
Kürzlich habe ich eine Auswertungsschaltung für einen Drehgeber
aufgebaut. O.k. sie funktioniert und bei einem Hobbyprojekt ist das
sicher nicht weiter tragisch, aber im Prinzip trotzdem irre 7 Logic-IC
dafür reinzuknallen. Natürlich hätte ich einfach einen Beispielcode aus
dem Netz kopieren können, aber am Ende wäre der Aufwand doch wiederum
größer gewesen, als die 7 Logikbausteine zusätzlich auf die Eurokarte zu
löten.
Ruediger A. schrieb:> Wer sich erstmal auf Scheme eingelassen hat, kommt so schnell nicht mehr> davon los. Es hat eine sehr eigene Ästhetik und Eleganz und kommt auf> der untersten Ebene mit gerade einer Handvoll Sprachelementen aus, die> aber so mächtig sind, dass man so gut wie Alles damit machen kann.>> Für Embedded eignet sich Racket nicht, aber auf Linux/Windows macht es> Riesenspass. Du findest den kostenlosen Download auf racket.org. Dort> sind auch ein paar recht gute Tutorials zum anfixen.
Macht mir echt Mut und Lust zu mehr und beantwortet im Prinzip meine
Frage am Anfang dieses Beitrags.
Alles Humbug schrieb:> Was ist falsch daran Funktionen so zu definieren, dass sie einem SOFORT> ins Auge springen>> circle()> circle(10)>> Warum kommt ständig jemand auf die "Idee" das Rad nochmal neu erfinden> zu müssen, nur diesmal so, dass die Felge nach innen gekrempelt wird und> das ganze nicht mehr nach Rad aussieht?
Wieso neu erfinden? LISP wurde 1958 spezifiziert, Scheme 1975. Das ganze
ist eine normale S-Expression und sieht nicht von ungefähr ähnlich aus
wie Lambda-Kalkül https://en.wikipedia.org/wiki/Lambda_calculusDr. Sommer schrieb:> Michael R. schrieb:>> Nimm einen x-beliebigen (aber geistig flexiblen)>> C++/Java/C#-Programmierer, und erklär im Hashes, Hash-Strukturen, und>> dynamische Objektstrukturen in einer (fast) beliebigen schwach>> typisierten Sprache, und wer wird in Tränen ausbrechen.> Hah! Das akribische Annotieren von Typen ist zwar nervig und für> Anfänger schwer,
Das nehmen einem die besseren, statisch typisierten, Sprachen wieder ab
und machen das ständige Annotieren überflüssig (Typinferenz, ML, OCaml,
F#, Haskell etc.)
> sodass dynamisch typisierte oder gar untypisierte> Sprachen zwar wie eine Erlösung erscheinen,
Es gibt keine dynamisch typisierten oder untypisierten Sprachen ;)
Die kennen schlicht nur einen einzigen Typ und verlagern Arbeit, die die
Maschine machen sollte, wieder zurück auf den Menschen (und in die
Laufzeit des Programms)
Dietmar schrieb:> Wie gesagt, einen Job finde ich damit nicht mehr, das anzunehmen wäre> utopisch. (Belehrt mich, wenn ich mich irre).
Von Paul Graham gibt's dazu ein schönes Zitat: "The more of an IT flavor
the job descriptions had, the less dangerous was the company. The safest
kind were the ones that wanted Oracle experience. You never had to worry
about those. You were also safe if they said they wanted C++ or Java
developers. If they wanted Perl or Python programmers, that would be a
bit frightening. If I had ever seen a job posting looking for Lisp
hackers, I would have been really worried."
Arc N. schrieb:> Das nehmen einem die besseren, statisch typisierten, Sprachen wieder ab> und machen das ständige Annotieren überflüssig (Typinferenz, ML, OCaml,> F#, Haskell etc.)
Typinferenz hat C++ auch. An Schnittstellen (z.B. Funktionsparameter)
will man die explizite Annotation aber explizit haben.
Arc N. schrieb:> Es gibt keine dynamisch typisierten oder untypisierten Sprachen ;)https://de.wikipedia.org/wiki/Dynamische_Typisierung
"Vor allem Skriptsprachen wie JavaScript, Python und Ruby verwenden die
dynamische Typisierung."
"Untypisiert" war der falsche Begriff, ich meinte "schwach typisiert".
Ein Beispiel ist PHP: https://de.wikipedia.org/wiki/PHPArc N. schrieb:> If I had ever seen a job posting looking for Lisp> hackers, I would have been really worried."
Weil das kaum einer kann, droht da eh keine Gefahr.
Stefan schrieb:> Sheeva P. schrieb:>> Es hat ja auch gute Gründe, warum Python seit vielen Jahren die>> beliebteste Allround-Skriptsprache ist.>> Die Frau Dr. Merkel unter den Programmiersprachen!>> :-)
Na, wir wollen mal nicht übertreiben. Keine Programmiersprache hat so
viel Lob verdient, noch nicht einmal Python.
Ruediger A. schrieb:> Alles Humbug schrieb:>> Warum kommt ständig jemand auf die "Idee" das Rad nochmal neu erfinden>> zu müssen, nur diesmal so, dass die Felge nach innen gekrempelt wird und>> das ganze nicht mehr nach Rad aussieht?
Ach, Humbug, Lisp stammt von 1958, Scheme von 1975, C von 1972. Wer hat
da wohl "das Rad neu erfunden"? ;-)
> das liegt daran, dass in Scheme Funktionen First Class Objekte sind,> d.h. Du kannst Funktionen als Parameter an Funktionen übergeben und als> Rückgabewerte von Funktionen bekommen.
Das geht in Python natürlich auch, und ist zum Beispiel die Basis zum
Beispiel von Dekoratoren. Dabei wird dann eine Funktion oder Klasse in
einer anderen Funktion deklariert und die innere Funktion oder Klasse
zurückgegeben.
Ein einfaches Beispiel ohne Dekoration:
1
def createMainForm():
2
class MainForm(FlaskForm):
3
@classmethod
4
def append_field(cls, name, field):
5
setattr(cls, name, field)
6
return cls
7
for field in INPUT_FIELDS:
8
f = field[FIELDTYPE](field[LABEL], **field[FIELDPARAMS])
9
MainForm.append_field(field[NAME], f)
10
return MainForm
11
12
# Usage:
13
form = createMainForm()()
> In Scheme gibt es noch Andere> faszinierende Dinge, die First Class Objekte sind (z.B. continuations,> was aber hier zu weit führt).
Das entspräche in Python wohl einem Generator oder einem Iterator. Eine
Generator-Funktion mit dem Schlüsselwort 'yield':
1
def func(jump, end):
2
start = 1.1
3
while start < end:
4
yield start**2
5
start += jump
6
7
# Usage:
8
f = func(0.3, 5)
9
for result in f:
10
print result
oder objektorientiert mit weiteren Möglichkeiten als Iterator:
1
class kls(object):
2
def __iter__(self): return self
3
4
def __init__(self, start, jump, end):
5
self.start = start
6
self.jump = jump
7
self.end = end
8
9
def next(self):
10
if self.start > self.end:
11
raise StopIteration
12
self.start += self.jump
13
return self.start**2
14
15
# Usage:
16
k = kls(1.1, 0.3, 3)
17
for r in k:
18
print r
Natürlich sind Klassen, Instanzen und Funktionen First-Class-Objekte,
die anderen Klassen und Funktionen übergeben oder als Rückgabewert von
diesen übernommen werden können.
> wenn man erstmal das Konzept von Funktionen> mit ihren aktuellen scopes als Objekte verstanden hat, eröffnet sich> eine völlig neue Sichtweise der Dinge. Und Möglichkeiten, die Andere> Programmiersprachen nicht bieten.
Daß man in Scheme allerdings auch Operatoren als First-Class-Objekte
übergeben kann, finde ich wirklich nett, aber den Rest können andere
Sprachen wie Python oder modernes C++ natürlich auch. Auch als recht
erfahrener Emacs-Lisp-Nutzer frage ich mich da nach dem Benefit.
> Das sieht jetzt erstmal wie akademischer Spielkram aus, bietet aber in> der Praxis eine Menge Anwendungen, die sich mit keiner anderen> Programmiersprache so gut und modular lösen lassen.
Magst Du das in einem separaten Thread besprechen?
Kleine Anekdote: Ein Prof hat den Lambda-Kalkül in der Vorlesung auf
Basis von Python und dessen Lambda-Funktionalität erläutert, statt eine
"klassische" funktionale Sprache zu nehmen... ;-)
Sheeva P. schrieb:> Ruediger A. schrieb:>> Das sieht jetzt erstmal wie akademischer Spielkram aus, bietet aber in>> der Praxis eine Menge Anwendungen, die sich mit keiner anderen>> Programmiersprache so gut und modular lösen lassen.>> Magst Du das in einem separaten Thread besprechen?
Ok, zugegeben: "Keine Andere Programmiersprache" ist etwas weit aus dem
Fenster gelehnt. Bitte um Vergebung und würde die Aussage relativieren,
wenn das Forum es zulassen täte. Da muss ich mich mal in Python genauer
einlesen, um Jemandem von deinem Kenntnisstand etwas bieten zu können...
Michael R. schrieb:> Java ist eine Krankheit, ein "pain in the ass", aber gottseidank ist es> angezählt...
Ich fand Java schon Scheiße, als ich noch bei Sun Microsystems
angestellt war, sehr zum Mißfallen meiner Vorgesetzten. James Gosling
kenne ich sogar persönlich, das ist ein extrem kluger und sympathischer
Typ, auch wenn wir unterschiedliche Ansichten über Java haben.
Aber das ändert heute leider nichts daran, daß Java heute die mit
Abstand verbreitetste Programmiersprache ist. 70% bis 80% der
Enterprise-Software, die ich kenne, ist in Java implementiert. Das geht
schon mit den "alten" Systemgeschichten wie Legato NetWorker (heute EMC,
IIRC) und der Solstice Disksuite los, über Web Application Server wie
Websphere von IBM, bis zu wirklich aktuellem Zeug: im Distributed
Computing kommst Du heute nicht um Java herum, egal, ob Du Batch
Processing mit Apache Hadoop, Realtime Stream Processing mit Apache
Storm, -Spark oder -Gearpump machst, Machine Learning mit Tensorflow
nutzen oder Graphendatenbanken mit Neo4j, Oracle Spatial, SAP Hana oder
OrientDB nutzen willst: der Große Integrator(c) ist leider Java. Und
wenn Du irgendwas Spannendes mit einer Oracle-Datenbank machen willst,
dann rate, womit das am Besten geht.
Versteh' mich bitte nicht flashc: mich kotzt das auch an, aber Java ist
tatsächlich immer noch die verbreitetste Programmiersprache. Sogar wenn
Du Java auch nur halb so Scheiße findest wie ich -- was ziemlich schwer
sein dürfte -- ist es leider da und wird leider vermutlich bis zumindest
meinem Lebensende da bleiben. Tut mir auch leid, ist aber so. Sorry.
Ruediger A. schrieb:> Ok, zugegeben: "Keine Andere Programmiersprache" ist etwas weit aus dem> Fenster gelehnt. Bitte um Vergebung und würde die Aussage relativieren,> wenn das Forum es zulassen täte. Da muss ich mich mal in Python genauer> einlesen, um Jemandem von deinem Kenntnisstand etwas bieten zu können...
Herzlichen Dank für die Blümchen -- aber es gibt keinen Anlaß dafür,
Dich kleiner zu machen, als Du bist. Offenbar kennst Du Dich mit
funktionaler Programmierung viel besser aus als ich. ;-)
Aber wenn ich in meiner Karriere eins gelernt habe, dann sind es drei
Dinge: erstens, es gibt immer einen, der besser ist als Du; zweitens, es
gibt immer etwas Neues zu Lernen; drittens: neue Denkweisen sind dabei
das Beste!
Sheeva P. schrieb:>> Alles Humbug schrieb:>>> Warum kommt ständig jemand auf die "Idee" das Rad nochmal neu erfinden>>> zu müssen, nur diesmal so, dass die Felge nach innen gekrempelt wird und>>> das ganze nicht mehr nach Rad aussieht?>> Ach, Humbug, Lisp stammt von 1958, Scheme von 1975, C von 1972. Wer hat> da wohl "das Rad neu erfunden"? ;-)
Ach Sheeva, ihr Fanboys von kruden Dialekten seid alle sooo helle, könnt
aber keine zwei Zeilen mal im Kontext aufnehmen, ohne immer alles
wortwörtlich auszulegen. Lies mal nach was ich weiter oben bereits zu
Lisp schrieb:
Der TE schrieb:
>> So bin ich nun auf Lisp gestoßen, genauer gesagt Common Lisp. Sehe ich>> mir den Beispielcode an, erscheinen mir auch ohne Vorwissen bereits>> Teile davon logisch und leserlich und ich habe das Gefühl, das mir das>> Spaß machen könnte.
ich schrieb dazu:
Seit geraumer Zeit kaum mehr verbreitet. Nach meinem Gefühl ist Lisp
eher was Historisches aus der Ära der Computer-Anfangszeit.
Ich bin kein "Lisp Fachmann", noch nicht mal ein Novize. Ich leiste mir
nur den Luxus bei Programmiersprachen (nicht nur dort) ein persönliches
spontanes Gefühl beim ersten Blick darauf zuzulassen, wie solche
Dialekte in einem ersten Eindruck auf mich wirken und da fiel zufällig
sofort der Blick auf diesen Beispiel der Funktionen-Definition. Da stört
mich einfach der Anblick schon. Nur mal als kleiner Vergleich. Als ich
vor einiger Zeit mal auf Julia stieß, war mein Eindruck genau anders
herum. Gefällt mir. Auch die umgekehrt Polnische Notation meines alten
HP 48x mochte ich immer, mag ich noch heute, weil sie mir logisch
erscheint. Bei C fühle ich mich wohl. C# finde ich prächtig ausgebaut
und komfortabel. Der Sprung von C# zu Java ist kurz. C++ finde ich
insgesamt sehr mächtig aber auch anspruchsvoll und bisweilen schwierig.
F# scheint interessant (leichter Zugang durch MS - ich bin kein Linuxer
(mehr)). Mit Pascal hab ich mal begonnen (tolle Zeit gewesen; nach
BASIC). Go-lang hab ich mir schon mal reingezogen, bin aber nicht so
richtig mit warm geworden (alles noch offen). Nimrod (Nim) mal ein paar
Blicke riskiert und ein paar weitere Sprächlein noch. Ich bin IMMER
neuem gegenüber aufgeschlossen. Aber .. ich laufe nicht jedem Hype blind
hinterher bzw. nehme aufmerksam wahr, was gepflegt wird und was vor sich
hin gammelt. Wenn mir so eine hipp polierte Webseite (die sehen ja
inzwischen fast alle gleich aus) nach kurzem stöbern nicht wenigstens
auch MASSIG Beispielcode bietet und zwar OHNE dass ich mir erst die
Finger danach wund suchen muss, dann verliere ich die Lust daran und
gehe davon aus, dass auch die Macher keine Lust hatten ihr Pamphlet für
andere mit Leben zu füllen. Das heißt nicht zwangsläufig, dass ich dann
nie mehr dort hineinschaue.
Mir war nicht geläufig, dass es Lisp-Weiterentwicklungen gibt. Mir ist
Lisp ehrlich gesagt auch bei vielen Recherchen zum Thema
Programmiersprachen kaum bis gar nicht über den Weg gelaufen, was für
mich den Schluss nahe legt, es hat wenig bis keine Bedeutung allenfalls
für kleine Fangrüppchen, die das "Spezielle" lieben, meist auch aus
einem speziellen Hintergrund heraus. So stellt sich mir die Situation
auch hier dar. Ein 50-jähriger OHNE (nach eigenen Angaben) großartige
Programmiererfahrungen, der nach Hilfe in einem Forum zu dieser Frage
aufschlägt, dem würde ich NIE Lisp, Brainfuck, Haskell oder ähnliches
anempfehlen. Zu exotisch, zu speziell, zu wenig Foren, zu wenig Leute
die man um Hilfe bitten könnte. Warum sich das Leben schwer machen, wenn
es auch leichter geht. Über den TIOB man man schimpfen
https://www.tiobe.com/tiobe-index/
aber das Krude Argument, Recherche hätte keine Aussagekraft über
Interessen halte ich für abwegig und wenn man sich die dort aufgeführten
Programmiersprachen anschaut kommt das nach meinem Gefühlt schon recht
gut hin. Lisp rangiert dort auf Platz 36 (immerhin noch vor Julia ;)).
Hier allerdings hat der TE anscheinend bereits eigene Erfahrungen mit
Lisp gemacht, so dass sich die Sachlage mir anders darstellt. Wenn er
damit glücklich wird, ich bin der Letzte der da etwas gegen hätte. Für
mich kommt Lisp allerdings nicht in Frage. Es bereitet mir keine
Anfangslust mich damit näher zu beschäftigen.
Ruediger Asche (Firma: keine) (rac) schrieb:
> Aber wenn man erstmal das Konzept von Funktionen> mit ihren aktuellen scopes als Objekte verstanden hat, eröffnet sich> eine völlig neue Sichtweise der Dinge. Und Möglichkeiten, die Andere> Programmiersprachen nicht bieten.
Rüdiger, erst mal Danke für deinen Einlass weiter oben. Klar, wenn man
sich näher mit der Syntax beschäftigt fängt man auch an darin zu denken.
Deinen Absatz, den ich gerade nochmal zitiert habe, halte ich für
fragwürdig. Solche Sätze fallen in JEDER Programmiersprache, die im
entstehen oder gerade in einer starken Weiterentwicklung sich befinden
und suggerieren dem Leser immer, man bekäme nun etwas was es vorher so
nicht gegeben hat. (meist hat man's vorher auch nicht gebraucht)
Es gibt nun seit mehr als einem halben Jahrhundert Software-Entwicklung
und so ziemlich alles erdenkliche ist bereits schon in allen möglichen
Programmiersprachen zusammengecoded worden (nicht abfällig gemeint). Ich
glaube nicht, dass noch irgend etwas wirklich ELEMENTAR neues
herauskommt, was den "Nobelpreis" zu erwarten hätte (vielleicht mit
Ausnahme der KI, wer weiß?!).
In Wahrheit verführen bestimmte Paradigmen vor allem die (meist
jüngeren) "Nerds" dazu ihre Programmier-Probleme den Werkzeugen
anzupassen (man denkt halt dann in Haskell oder Lisp oder wie beim alten
C noch stark in Pointern mit all den Macken) und je nach Problem ist das
mal bei der einen Sprache bequemer, effizienter und dann mal wieder bei
der anderen. Zudem wird das Thema Programmiersprachen immer wieder von
aufkommenden Hypes beschwingt. Mal war es der Haskell-Hype, dann kam go
dran. Ich kann mich noch erinnern, als sogar das öffentlich-rechtliche
Fernsehen junge bärtige Männer von der wörtlich "sagenhaften neuen
Sprache namens JAVA" schwärmen ließ, mit der sich alle Probleme lösen
ließen. Mit der Zeit verliert sich der Hype, Ernüchterung tritt an deren
stelle dann kommt ein neuer Hype, der alle Vorteile in sich vereint
sehen möchte (und die Nachteile klein reden oder gleich ganz unter den
Tisch fallen lässt). Was auf den ersten Blick bloß interessant - weil
neu - erscheint und was man wirklich braucht (und auch längerfristig
verwendet, weil's im Gedächtnis bleibt) sind erfahrungsgemäß zwei paar
Schuhe.
Achja Stichwort "Hype", Bitcoins sind gerade am abstürzen.
Gute Nacht!
Alles Humbug schrieb:> Mit der Zeit verliert sich der Hype, Ernüchterung tritt an deren> stelle dann kommt ein neuer Hype
Und mit der Zeit bleiben die Sprachen übrig, die am meisten praktikabel,
realitätsnah und erlernbar sind, trotz aller Macken und Kanten. Beim
TIOBE-Index sind das dann die, die lange oben bleiben. Kurioserweise
gehört Java dazu...
Stefan schrieb:> bzw. einen Job zu finden. Für den> letzteren Fall ist man mit den neueren modernen bzw. "exotischen"> Sprachen sicher nicht so gut beraten.
Also bei mir hätte jemand der (auch) Lisp oder Haskell im Repertoire hat
ein paar gewaltige Pluspunkte, auch wenn es bei uns nie zum Einsatz
käme, es zeigt daß der Kandidat nicht nur das 08/15 Pflichtprogramm
beherrscht sondern auch einen unstillbaren Drang hat seinen Horizont zu
erweitern.
Ruediger A. schrieb:> Schade, ist aber so. Als Alternative zu Java auf PCs taugt Scheme aber> allemal (ein Webserver ist in 2 Zeilen geschrieben).
Du meinst ein Webserver aus einer Bibliothek (den jemand anders
geschrieben hat) ist in zwei Zeilen instantiiert und gestartet. Das geht
in jeder Sprache, sogar in C, sogar in Assembler. Das ist also nicht
unbedingt eine Eigenschaft der Sprache. Interessanter wäre es sich
anzuschauen wie der Webserver aussähe müsste man ihn in der jeweiligen
Sprache komplett selber schreiben.
Bernd K. schrieb:> Stefan schrieb:>> bzw. einen Job zu finden. Für den>> letzteren Fall ist man mit den neueren modernen bzw. "exotischen">> Sprachen sicher nicht so gut beraten.>> Also bei mir hätte jemand der (auch) Lisp oder Haskell im Repertoire hat> ein paar gewaltige Pluspunkte, auch wenn es bei uns nie zum Einsatz> käme, es zeigt daß der Kandidat nicht nur das 08/15 Pflichtprogramm> beherrscht sondern auch einen unstillbaren Drang hat seinen Horizont zu> erweitern.
Heißt du mit richtigem Namen vielleicht Paul Graham? ;-)
Der hat nämlich schon 2004 einen schönen Artikel zu diesem Thema
gechrieben:
http://www.paulgraham.com/pypar.html
Da Python inzwischen stark an Popularität hinzugewonnen hat, müsste man
das "Python Paradox" in "$NMPL Paradox" umbenennen", wobei $NMPL für
irgendeine "Non-Mainstream-Programming-Language", also bspw. die von dir
genannten Lisp oder Haskell, steht.
Obschon der TE es von BEGIN (oder "{" für jene die mit mehr als 4
aneinandergereihten Grossbuchstaben überfordert sind) an so geäussert
hat, sind wir noch vor dem 100sten Beitrag mehr oder minder zum Konsens
angelangt dass es AUCH um Horizonterweiterung geht, dass mehr als genug
Auswahl da ist und dass es bei Allen noch Neuland in Aspekte rund um
Programmierdenkweisen gibt.
Es sind gute Beiträge dabei, mich dünkt es v.a. die längeren.
Der Vollständigkeit halber will ich noch folgende Programmiersprachen
auflisten, welche durchaus auch für eine sehr breite Spanne an
"Sytemgrösse" taugen (von 8- bis 64- Bit Systeme, aka Embedded bis
Distributed MP, RT bis Batch)
- FORTH (auch auf sehr kleinen uC interaktiv on-target, schnell)
- Lua (s.a. eLua f. Embedded, kompakt, modular, "OO", auch auf uC
interaktiv on-target)
- Modula-2 (kompakt, modular, skaliert gut f. Grossprojekte, NOCH OHNE
OO)
- Oberon (wie M2, MIT OO, nicht verbreitet...)
- Ada (OO &Typstrikt, Besenstiel im Axxch wird mitgeliefert)
(ich bestehe weder auf demontierende Besprechung noch auf Jubelpersertum
dazu. Es sei die Anmerkung erlaubt dass diese meist jüngere Kreationen
sind als alles bisher im Thread besprochene mit ausnahme v. Java)
Zur Wahl der Programmiersprache scheint es also 2 Arten v. "Hauptwege"
zu geben, die mindestens Orthogonal zueinander stehen:
- "Herdentrieb": an TIOBE o.Ä. ausgerichtet, "Schafe folgen Schafe und
sehen nur Schafhinterteile", eigener Geschmack (Syntax) muss
weggeschlossen werden, "Wer Zahlt befiehlt" & "das haben wir schon immer
so gemacht, es kann nix besseres geben"
- "Pioniertum": exotisch, wild, speziell, selten, Freiheit, no Limits,
das muss doch besser/eleganter/kompakter/weniger umständlich zu machen,
"geht nicht gibt's nicht", "think outside of the box"
Am Ende des Tages sind beide Wege möglich, haben unterschiedliche
Kompromisse eingehe müssen und unterschiedliche Tribute bezahlt - aber
beide das Ziel erreicht (passendes Können vorausgesetzt).
Nur etwas scheint mir Pflicht zu sein: man sollte beide Wege
beschritten haben und 1, besser 2+, Representanten aus beiden Bereichen
"im Köcher haben" (beherrschen wäre zuviel verlangt, jedoch
anzustreben).
Monokulturen, Einseitigkeiten und limitierte Denke sind bäh.
Was wenn ich mich für die Details einer Mainstream Sprache interessiere,
z.B. wie Java Bytecode jetzt genau funktioniert oder die C++ Value
Semantics und wie die Optimierungs-Algorithmen des Compilers arbeiten...
bin ich dann ein Mainstream-Schaf oder hipp und "aufgeweckt"?
Programmiersprachentheaterintendant schrieb:> - Modula-2 (kompakt, modular, skaliert gut f. Grossprojekte, NOCH OHNE> OO)
Modula-3 wäre noch eine weitere Erweiterung von Modula-2 Richtung OO.
Habe ich in freier Wildbahn aber bislang auch nur einmal erlebt
(FreeBSDs "cvsup" zum Synchronisieren von CVS-Trees).
Ich will doch noch meine 2 Rupien zu Tcl/Tk abgeben.
Ich hab mal was damit gemacht: oh Wunder, eine Art Installationshilfe
mit minimalem GUI.
Was mich damals (ca.'96, war so um die Transitionszeit von Perl4 zu 5
und Py1 zu 2 - damals beide mir noch unbekannt) an Tcl/Tk massivst
irritierte, war das ich immer Fallunterscheidung auscodieren musste ob
da nun Liste(mehr als 2 Elem.)/Einzelobjekt(u. entspr. Typ)/oder NULL
vorlag.
Liste in jedem Fall (egal ob 2+, nur 1 Element oder leere Liste) hätte
meinem kleinen Projekt den Code um 1/3 kompakter gemacht. (Merke: jede
Fallunterscheidung ist zu Testen --> Testaufwand!)
Wenige Jahre danach (ca.Jahrtausendwende) stiess ich dann auf Py2.x und
u.A. sein Duck-Typing + natürlicheren Umgang m. Listen, Tuples, Dicts
hat mich NIE wieder Tcl/Tk anfassen lassen.
Immerhin wusste ich nach dieser Erfahrung um einen Bewertungsaspekt mehr
auf den ich achten wollte.
OT:
Programmiersprachentheaterintendant schrieb:> Was mich damals (ca.'96, war so um die Transitionszeit von Perl4 zu 5> und Py1 zu 2 - damals beide mir noch unbekannt) an Tcl/Tk /massivst/> irritierte, war das ich immer Fallunterscheidung auscodieren musste ob> da nun Liste(mehr als 2 Elem.)/Einzelobjekt(u. entspr. Typ)/oder NULL> vorlag.> Liste in jedem Fall (egal ob 2+, nur 1 Element oder leere Liste) hätte> meinem kleinen Projekt den Code um 1/3 kompakter gemacht. (Merke: jede> Fallunterscheidung ist zu Testen --> Testaufwand!)
Hast Du dazu ein Beispiel?
Wir nutzen hier Tcl auch schon seit 1996 recht intensiv (unter anderem
als Portierung auf STM32 inkl. Tk) und ich hatte ehrlich gesagt noch nie
dieses Problem. Daher interessiert mich das :-)
/OT
Dr. Sommer schrieb:> Was wenn ich mich für die Details einer Mainstream Sprache interessiere,
:
> bin ich dann ein Mainstream-Schaf oder hipp und "aufgeweckt"?
Tja, dann hast Du m.M.n. den falschen Thread erwischt: wenn ich hier
"aufgeweckt" bin, ist das nicht die Perspektive des TE.
Die von Dir angesprochenen Details haben separate Threads verdient.
Nur meine 2 Drachmen. (hier eher Drachen, vom "Dragon Book" & Co.
assoziiert)
Programmiersprachentheaterintendant schrieb:> Der Vollständigkeit halber will ich noch folgende Programmiersprachen> auflisten, welche durchaus auch für eine sehr breite Spanne an> "Sytemgrösse" taugen
Du hättest dann vielleicht auch Zig und Terra erwähnen sollen, beide mit
C-ähnlicher low-level Priorität, und damit prinzipiell für uC
interessant. Ich kenne beide aber nicht, und deren Namen war mir auch
entfallen.
www.ziglang.org
www.terralang.org
Ich habe mich nun für BSL und DrRacket entschieden.
(http://www.htdp.org/)
Das war ein guter Tipp! Habe heute schon mit den Unterlagen gearbeitet
und es macht mir enorm Lust auf mehr! Hätte ich jetzt in diesem Maße gar
nicht erwartet. Schade dass ich nicht schon früher darauf gekommen bin.
Dabei verbessere ich auch gleich noch mein Englisch. Wobei ich
inzwischen eine auf dem Skript basierende deutsche Fassung gefunden
habe:
http://ps.informatik.uni-tuebingen.de/teaching/ws15/info1/script/index.html
Ich möchte hier einfach mal meine persönliche Erfahrung beschreiben,
wobei das jeder hier auch anders sehen könnte.
Auf Aspekte, die Objekt orientiert Programmierung betreffen gehe ich mal
nicht ein, weil es für die Fragestellung hier zu fortgeschritten wäre.
Ich arbeite beruflich mit C++, weil hardwarenah aber mit Objekten und
Templates. C habe ich mal für Mikrocontroller verwendet, aber
mittlerweile setze ich auch dort C++ ein. Das würde ich aber nur Profis
empfehlen, weil nicht alles was teuer aussieht auch teuer ist es aber
auch umgekehrt sein kann.
Einem Anfänger würde ich diese Sprachen aber nicht empfehlen, weil man
durch Pointer und kontrolliert Speicherallokation zwar viel Kontrolle
hat, greift man aber einmal daneben verhält sich das Programm evtl.
komisch ohne dass man weiß warum.
Assembler habe ich mal auf einem AVR gemacht. Ich finde es interessant,
wenn man besser verstehen möchte, wie ein Prozessor funktioniert. Sonst
war es mir aber zu mühselig und der Compiler soll das übernehmen.
JavaScript ist die einzige Möglichkeit für webbasierte Scripte im
Browser. Debugger bringen die Browser schon mit. Nachteil ist, dass im
Browser Dateisystem und IO Pins nicht möglich sind. Über Node.js kann
man aber auch normale Programme in JavaScript schreiben.
Java verwende ich wenn es ohne Kompilierung auf verschiedenen Systemen
laufen muss. Die Syntax ist ähnlich wie C++, aber ich habe das Gefühl
man ist weiter weg von der Hardware und Fehler werden verständlicher
über Exceptions gemeldet. Mir gefällt die starke Typisierung, weil man
dadurch Typfehler schon zur Compilezeit erkennt (ich bin es aber auch
von C++ gewöhnt).
Python nutze ich für Basteleien und um Dinge zu automatisieren. Mir
gefällt an Python die konsequente Logik in der Sprache und der
Bibliothek. Das tolle an Python ist, dass man als Anfänger alles selbst
schreiben kann (mit for loop und so), wenn man aber fortgeschritten ist
auch die entsprechende Funktion aus der Bibliothek verwenden kann.
Da ich aus der C/C++ Welt komme, fallen mir Sprachen, die diesen ähneln
leichter, weshalb hier z.B. Lisp fehlt. Das muss aber nicht heißen, dass
andere Sprachen für einen Anfänger nicht besser wären.
Alles Humbug schrieb:> Sheeva P. schrieb:>>> Alles Humbug schrieb:>>>> Warum kommt ständig jemand auf die "Idee" das Rad nochmal neu erfinden>>>> zu müssen, nur diesmal so, dass die Felge nach innen gekrempelt wird und>>>> das ganze nicht mehr nach Rad aussieht?>>>> Ach, Humbug, Lisp stammt von 1958, Scheme von 1975, C von 1972. Wer hat>> da wohl "das Rad neu erfunden"? ;-)>> Ach Sheeva, ihr Fanboys von kruden Dialekten seid alle sooo helle, könnt> aber keine zwei Zeilen mal im Kontext aufnehmen, ohne immer alles> wortwörtlich auszulegen.
Ach, Humbug, leider wieder daneben. Ich bin gar kein Freund von Lisp und
benutze es ausschließlich zur Konfiguration meines GNU Emacs.
Wenn du weitere Übersichten von anderen Programmiersprachen brauchst und
die passende für dich finden willst solltest du mal auf unsere Seite
vorbeischauen: https://datensprache.de/