Alternativen z. "Imperativen Programmierung" die ihr schätzt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
fermion
User
Beiträge: 20
Registriert: Sonntag 9. März 2014, 16:54

Natürlich könnt ihr ausrufen: "Ein Programmierneuling will über etwas über Paradigmen in der Programmierung erfahren! Totaler Quatsch!" :)

Aber vielleicht hat ja doch jemand von Euch erfahrenen Programmierern Lust, Python mal von ganz oben anzusehen.

Anlass für das Posting ist ein Statement eines Informatikers und Programmierers, der leider im Moment keine Zeit für ein Treffen hat. Der jedoch meine Neugier für Grundlegendes, Konzeptionelles geweckt hat.
Klar, Python ist gut geeignet um Programmieren zu Lernen. Wenn Du den Einstieg machen möchtest in das Paradigma, das heutzutage nunmal Mainstream ist -- die imperative Programmierung -- dann ist es im Grunde egal, ob Du Ruby, Python, Java, PHP oder C++ lernst (in etwa absteigende Attraktivitätsreihenfolge). Letztendlich sind deren Unterschiede Geschmackssache. Und mit Python zeigst Du auf jeden Fall Geschmack :-)

Ich persönlich finde die imperative Programmierung (inzwischen) eher langweilig, und halte sie für eine ganz schwache Brücke zwischen der darunterliegenden Von-Neumann-Hardware Architektur und dem Programmierer, die den Anforderungen an Softwareentwicklung nicht gewachsen ist. Sei es die Kardinalanforderung seit Anbeginn der Softwareindustrie -- Wartbarkeit -- oder seien es die modernen Anforderungen: Parallelität und Sicherheit. Eine interessante und intelligente Alternative sehe ich in der Funktionalen Programmierung (Haskell, Clojure) und in der Flow-Based Programmierung
Vielleicht hat ja der eine oder andere von Euch Lust, zu diesem Thema etwas beizutragen?
Freuen würde ich mich, wenn die Antworten auch für Nicht-Informatiker und Programmierneulinge verständlich wären.

Danke.
Python 3.3.4 | Windows 7 (64bit)
BlackJack

@fermion: Objektorientierung und funktionale Programmierung finde ich noch toll. Und darum auch Python, weil man sich dort das passende Paradigma zum Teilproblem raussuchen kann. Es ist zwar keine reine funktionale Sprache, aber es enthält einige Bausteine aus der funktionalen Programmierung die sehr nützlich sind, und abstrakteren Code erlauben als traditionelle imperative Programmierung.

Mit reinen funktionalen Sprachen habe ich so meine Probleme weil letztlich die ganze Umgebung in der die Programmierung üblicherweise zustandsbehaftet ist, und sich die Schnittstelle zur Aussenwelt bei rein funktionalen Programmen für mich irgendwie immer wie ein Fremdkörper anfühlt. Da ist ein Bruch an dem man immer umdenken muss. Vielleicht bin ich auch einfach nur zu festgefahren an der Stelle.

Wobei ich bei den genannten Sprachen nicht von imperativer Programmierung alleine reden würde, denn nur imperativ wäre noch mal etwas anderes als die ganzen objektorientierten Sprachen die dort aufgezählt wurden, abgesehen von PHP wo OOP, äh, sagen wir mal komisch ist, und soweit ich das sehe (noch) nicht so weit verbreitet.
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Die Funktionale Programmierung empfinde ich als sehr interessant und "synapsenfördernd". Ich finde Haskells sehr knappe Syntax und das Typsystem recht ansprechend.

Ein Beispiel für eine Funktionssignatur:

Code: Alles auswählen

isPrefixOf :: Eq a => [a] -> [a] -> Bool
(Btw.: Warum gibts kein Syntax-Highlighting für Haskell?)

Zugegeben, es hat zwei oder drei Anläufe gebraucht, bis ich warm wurde. Auch fällt es mir schwer, die OOP-Gedanken auszublenden ... dabei bin ich nicht java-verseucht.

Darum empfehle ich dir sogar, Dich mit unterschiedlichen Paradigmen zu beschäftigen, bevor Dein Verstand völlig mit OOP vermauert ist. ;)
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich weiß nicht genau was ich dir dazu sagen soll, bzw. was genau deine Frage ist. Ja, es gibt ein Leben nach der imperativen Programmierung und ja, damit bekommt man durchaus auch Sachen auf die Reihe.

Generell würde ich der Aussage deines Kumpels zustimmen, auch wenn ich eventuell die Reihenfolge der imperativen Sprachen etwas ändern würde, aber das ist wie er schrieb Geschmackssache und teils einfach von der Umgebung in der das Problem gelöst werden soll abhängig (Java ist momentan wohl noch die pragmatischste Wahl für Android-Apps, C++ für entweder Systemnahes oder Performancekritisches, Python für alles andere. Wenn man das ganze vertauscht und C++ für Webapps nutzt kommt in der Regel ein Schuh raus).

Funktionale Programmierung ist in der Tat interessant und da ist Python meiner Meinung nach gar nicht so weit von Clojure entfernt (ich kann mich noch an die Aussage erinnern dass Haskell nach Python die pythonischste Sprache wäre, aber persönlich würde ich dazu eher Clojure nominieren): man kann Probleme in beiden Sprachen funktional lösen, aber der Fokus der jeweiligen Communities liegt etwas anders: Clojure mehr auf dem funktionalem, Python mehr auf dem imperativen/objektorientiertem. Das spiegelt sich dann oft an den eingebauten Datentypen, der Standardlibrary und den verfügbaren Libraries und deren APIs wieder.

(Das ist übrigens auch warum Node.js trotz all seiner Nachteile zumindest ein wenig interessant ist: das Ökosystem ist sehr auf eventbasierte Programmierung ausgelegt. Python bietet mit Twisted/Tornado/asyncio zwar ganz ähnliche Möglichkeiten, jedoch sind die Libraries meist blokierend, so dass man für rein eventbasierte Programmierung sich oft selbst sachen zusammenstöpseln muss).

Wenn man "tiefer" einsteigen will kommt man um Haskell kaum herum, ich denke dass OCaml in der Hinsicht auch keine bessere Alternative (mehr) ist. Ob es mehr synapsenfördernd ist als andere funktionale Sprachen ist wohl die Frage wie tief man einsteigen will. Haskell hat mit GHC hier den Vorteil dass die Implementation *extrem* gut gelungen ist, das ist wenn man andere Sprachen nutzt oftmals nicht so praktisch. Allerdings kann man bei Haskell durchaus auch in das bodenlose Loch der Komplexität fallen, und ob Code wie Prickler.hs sonderlich lesbar oder verständlich ist, steht auf einem anderen Blatt.

Ich habe mir auch eine logische Programmierung angesehen, mit Prolog, aber irgendwie ist das in der Regel eher gimmicky als nützlich. Wenn man logische Programmierung nutzen will, dann wirkt auf mich das praktikabelste eine Implementation von miniKanren oder ähnliches zu nehmen und das von seiner "Hostsprache" aus zu bedienen. Die Probleme die mit logischer Programmierung sauberer lösbar sind, sind meist einfach zu selten um den kompletten Einsatz von Prolog zu rechtfertigen. Wie ich finde.

Stackbasierte/konkatenative Sprachen sind ebenfalls interessant, aber da ist die entsprechende Community leider sehr klein, so dass sich das für den Real-World-Einsatz derzeit eher nicht so eignet.

Ein interessantes Buch zu dem Thema ist Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages, wo in 7 Wochen eine Menge Sprachen mit unterschiedlichen Paradigmen gezeigt werden. Ich hatte mir das letztes Jahr angeschaut und auch meine Gedanken dazu gebloggt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
fermion
User
Beiträge: 20
Registriert: Sonntag 9. März 2014, 16:54

Herzlichen Dank Euch dreien für Eure Kommentare, Wertungen, Betrachtungen.

Deinen Blogpost, Leonidas, zu "7 Languages" werde ich lesen.

Kürzlich kam das Buch "Weniger schlecht programmieren" von Kathrin Passig raus.
http://www.oreilly.de/catalog/wenschleprogger/

Mal sehen, ob meine Stadtbibliothek das hat.
Python 3.3.4 | Windows 7 (64bit)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

fermion hat geschrieben:Kürzlich kam das Buch "Weniger schlecht programmieren" von Kathrin Passig raus.
http://www.oreilly.de/catalog/wenschleprogger/
Das beschäftigt sich dem Inhaltsverzeichnis nach hauptsächlich (wenn überhaupt dann) mit OOP. Muss nichts schlechtes sein, nur zu dem Thema wirst du im Buch nichts finden. Aber sieht schon interessant aus, vielleicht Blätter ich da auch mal rum.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten