• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

Welche Programmiersprache lernen / Buchempfhelung

Themenstarter #1
hi
Welche Sprachen nutzt Ihr zum Programmieren / wollt Ihr lernen ?

Ich denke jetzt ist es an der Zeit sich eine Programmiersprache anzueignen, Python finde ich interessant wobei man mit Java Kenntnissen vllt. eher im Job voran kommt oder doch Besser die Zeit in Office "hacks" inverstieren . Habt ihr Buch Empfehlungen und /oder Tutorials, alles was lesenswert ist.
für ca 14€
https://www.amazon.de/Python-Progra...=ÅMÅŽÕÑ&keywords=python&qid=1575845990&sr=8-3

ca 45€
https://www.amazon.de/Python-Sprach...=ÅMÅŽÕÑ&keywords=python&qid=1575846198&sr=8-4

kennt jemand die Bücher, sind sie Empfehlenswert ?

ciao
 

Yamagi

Possessed With Psi Powers
Mitarbeiter
#2
Guten Morgen,
es ist zwar völlig logisch eine Programmiersprache lernen zu wollen, aber es irritiert mich andererseits auch immer wieder. Denn man geht ja auch nicht zur Fahrschule und sagt "Ich möchte VW fahren lernen!". ;) Oder anders gesagt, Programmierung ist mehr eine Denkweise, als die Beherrschung eines Werkzeugs. Und kann man eine Sprache, kann man praktisch jede andere, dem gleichen Paradigma folgende Sprache recht einfach lernen. Daher sollte man sich nicht so sehr an der Sprache festklammern, stattdessen besser an dem Problem, welches man lösen möchte. Wer Microcontroller programmiert, kommt beispielsweise um C kaum herum. Wer Dinge automatisieren möchte, wird praktisch zwingend zu Python greifen müssen. Und so weiter.

Wenn es um berufliches Fortkommen geht, ist die Sprache dann auch nur ein Element. Wichtiger ist es, zumindest Teile des um die Sprache herum bestehenden Technologiestacks zu gut beherrschen. Ein Webanwender, der einfach nur PHP kann, wird kaum etwas werden, wenn er nicht auch ein oder zwei aktuelle Frameworks wie Zend als Klassiker oder das gerade sehr beliebte Yii beherrscht. Javascript, sowie Kenntnisse in CSS und natürlich HTML sind auch Pflicht. Das klingt nun nach viel Arbeit, ist es aber nicht wirklich. Denn wenn man sich mit einem Themengebiet beschäftigt, wächst man praktisch automatisch in die Technologie herein. Man muss Neuen gegenüber aufgeschlossen sein, aber das ist ja sowieso eine Voraussetzung um in der IT zu überleben.

Um trotzdem eine Empfehlung zu geben: https://automatetheboringstuff.com/ Das Buch nutzt Python um alltägliche Probleme zu lösen. Es stellt dir also anders als die meisten Bücher keine Aufgaben aus dem Elfenbeintrum, stattdessen bietet es Lösungen, die dir direkt helfen und Dinge vereinfachen. Das ist wesentlich motivierender, als sich mit abstrakten Problemen herumärgern zu müssen. Hinter mit im Regal steht auch noch https://www.rheinwerk-verlag.de/python-3_4467/. Das ist nicht so sehr ein Buch um programmieren zu lernen, stattdessen ein Rundumschlag um Python 3 selbst und die wichtigsten darum bestehenden Technologien. Wenn man sich ersthaft mit Python beschäftigen will, ist es ein gutes Nachschlagewerk und ein guter Einstieg in den Technologiestack darum.

Nachtrag: Die Erfahrung sagt, dass Programmiersprachenfragen auf BSDForen.de oft in einer Grundsatzdiskussion um die optimale Sprache enden, an deren ende C und Lisp. Lass dich davon nicht verunsichern.
 

schorsch_76

FreeBSD Fanboy
#3
Ich nutze beruflich seit ca. 20 Jahren C++. Ich mag diese Sprache, für andere ist sie gleichbedeutend wie Sauron in Herr der Ringe. Hier in meiner Firma ist diese Sprache verbreitet und tief verwurzelt.

Du kannst fast immer alles auch in einer anderen Sprache lösen. Jede Sprache hat ihre Vor- und Nachteile. Ich mag bsp. die statische Typprüfung bei C++. In Javascript krieg ich immer die Krise mit den dynamischen Typen.
 

CommanderZed

OpenBSD User
Mitarbeiter
#4
Ich mache Beruflich vor allem klassische Systemadministration und habe da bislang nur sehr wenig Programmieren müssen, das wenige aus meiner Ausbildungszeit ist lange verschwommen. Ich hatte mir wie du hier vorgenommen auch mal langsam etwas einzusteigen ins Programmieren.
Ich habe die letzten 2 Jahre verschiedene versuche gemacht, bin aber noch aufgrund von Zeit und Energiemangel noch im absoluten Anfängerbereich und habe dabei folgendes für mich festgestellt - villeicht hilt es dir ja weiter:

1.
Anfangs arbeitet man ja meist die "Tutorials" oder "Übungen" des jeweiligen Buches durch, das macht aber nur eine relativ kurze Zeit imho sinn.
Danach braucht man irgend ein (oder mehrere) echtes praktisches "Projekt" das man umsetzen möchte mit dem man sich mal etwas näher in diese Thematik reinfuchst, und nach den Ansprüchen des Projektes und persönlichen Geschmack würde ich mir auch die zu lernenden Sprache(n) aussuchen - ich glaube es gibt keine so richtig "schlechte" bedeutende Sprache mehr für den Einstieg.

Beispiel: Es macht wenig sinn assembler oder C zu lernen wenn du ein Projekt im Web umsetzen willst. Ich bemühe mich jetzt z.B. mit php und python und ich glaube gerade python ist für Anfänger recht brauchbar.
Das Projekt sollte natürlich nicht zu groß/komplex/schwierig sein aber schon irgendetwas sein was du tatsächlich anwenden möchtest damit man nicht so im "Luftleeren raum" arbeitet.

2.
Ich kann weder mit den gängigen Tutorials noch mit den 2,3 Büchern die ich mir gekauft / geliehen habe wirklich viel Anfangen, ich finde Gliederung e.t.c. meist ziemlich bescheiden.
Ich habe mir für ca. 10 EUR / Kurs auf einer großen bekannten Plattform ein paar Videolernkurse gekauft.
Mit dem komme ich recht gut zurecht, aber das ist sicher geschmackssache. Mir gefällt die Struktur, art des rüberbrigens, aber auch die möglichkeit das jederzeit zu stoppen oder noch mal anzuhören - das ist aber natürlich Geschmackssache.
Bei denen für die ich mich entschieden habe steht nach den Basics immer auch so eine art Praxisnahes Übungsprojekt an das man dann immer weiter verfeinert, das hat mir recht gut gefallen.
Auch hat der "Dozent" immer mal wieder sinnvolle ausflüge in die Theorie gemacht, also warum man das jetzt so umsetzt sowie erklärt warum man bestimmte Konventionen einhalten sollte und diese dann auch erklärt e.t.c.
 

Soonwald

Well-Known Member
#5
...Es macht wenig sinn assembler oder C zu lernen wenn du ein Projekt im Web umsetzen willst. ...
Wobei gerade zum grundlegenden Verständnis etwas prozedurale Programmierung in C und auch Assembler - z.B. auf einem 8Bit AVR - eine durchaus sinnvolle Übung sein kann.
Da diese Teile kein Betriebssystem haben und man dieses gleich mit programmieren muss, auch wenn es nur ein
Code:
for(;;){}
im minimalsten Fall ist, bekommt man vor richtigen OS gleich den notwendigen Respekt;-)
 

serie300

Well-Known Member
#6
Wenn man was im Bereich Mathe, Physik, Graphen , Simulation machen wil, werfe ichmal scilab in den Raum . Durch die IDE und den Interpreter hat man immer gut den Überblick , kann sachen ausprobieren , es gibt viele funktionen , eine gute integrierte Hilfe mit beispielen und leistungsfähige Datenstrukturen. scilab.org
 

turrican

Well-Known Member
#7
Ich denke welche Programmiersprache einem tagtäglich begegnet, hängt sehr stark vom Einsatzort jedes einzelnen ab.

Meine Liste (komme aus dem techn./wissenschaftl. Bereich) wäre: C, Python, Fortran - damit kann man in dem Metier etliches bewegen.

Wie @Yamagi schon meinte, die Sprache an sich ist eigentlich nicht das Thema, "das Programmieren" an sich sollte man verinnerlicht haben, also ein Problem in kleine Teile zu zerlegen und diese Rechnerlösbar darzustellen; quasi einen Lösungsweg erarbeiten, ohne erstmal überhaupt eine Zeile zu programmieren;

Kann mir aber auch vorstellen, worauf der OP raus wollte - eine Sprache muss man für sich persönlich erarbeiten, z.B. Befehlsworte, wie will der Compiler Schleifen dargereicht bekommen, Semikolon am Ende, wann? Gibt es switch/case, "fällt" ein leeres case nach "unten durch" usw, man muss jede Sprache somit "erlernen" - ggf wollte der OP auf dieses hinaus, also bewußt aufs "BMW fahren" und nicht "VW" um beim Vergleich von Yamagi zu bleiben?
 
#10
Ich mag und bin seit einiger Zeit sehr fasziniert von der Programmiersprache "Elixir". Das ist eine funktionale Sprache, aehnlich wie Lisp (plus interaktiver REPL), allerdings mit einer eingaengigen, Ruby-aehnlichen Syntax und einem rock stable, performanten, fehlertoleranten und skalierenden Unterbau aus Erlang/OTP samt selbigem Oekosystem. Dank des Phoenix-Frameworks koennen damit auch sehr easy Web-Applikationen geschrieben werden, die sowohl im Browser (Client / Server) als auch auf Smartphones oder auf dem Desktop laufen.

https://elixir-lang.org/
 
#11
Meine Liste (komme aus dem techn./wissenschaftl. Bereich) wäre: C, Python, Fortran - damit kann man in dem Metier etliches bewegen.
Ich würde hier noch als Vertreter der "Hoch"sprachen Matlab (und die freien Alternative Octave; es gibt noch andere Matlab-artige). Diese haben den "Vorteil", dass man sich nicht um jedes bisschen Speicher einzeln kümmern muss und werden im Ingenineurbereich sehr häufig eingesetzt. Das liegt sicher auch daran, dass es recht viele Toolboxen mit fertigen Lösungen aus den verschiedensten Bereichen gibt.

Wichtig bei all dem ist, dass man lernt, wie sich ein Problem in kleine, einfach zu programmierende Schritte zerlegen lässt. Die Syntax wird bei allen Sprachen anders sein und die verwendbaren Datenstrukturen wahrscheinlich auch. Trotzdem wird man früher oder später mit allen auf eine Lösung kommen. Wie genau die dann aussieht, wie elegant die ist, und wie effektiv die sich dann auf dem entsprechenden System ausführen lässt, ist eine andere Frage (und hängt z.B. vom Umfeld (= Firma, Chef, verwendete Tools und Librairies, Einsatzzweck etc.) ab.

Persönlich habe ich noch Erfahrung mit Mathematica, was aber schon noch eine Stufe "abgehobener" ist. Damit lassen sich sehr mathematische Probleme formulieren; entsprechend formal kann das aussehen. Wenn man's mag, kann das sehr schön sein. Aber es findet sich kaum in der freien Wildbahn, so dass ich das auch das letzte mal vor ca. 15 Jahren genutzt habe.

Ciao,
Photor
 
Themenstarter #12
hi

danke für die Antworten

Kurz zudem was ich mir als Anfänger vorgenommen habe...

in einer .txt Datei würde ich gerne einige Zeichen durch andere ersetzten z.B soll aus a und A eine 1 werden aus b und B eine 2 . Die Datei soll nach der Verarbeitung als neu name.txt Datei abgespeichert werden.

Gedanken

Datei öffnen / einlesen mit r und w

strings suchen und ersetzen ...ps wenn man nur nach strings sucht wird man(n) angenehm von google überrascht :)

muster angeben zum bearbeiten

"a", "1":
"A", "1":
usw.

oder in der Art
(a,A,b,B usw. durch 1,2,usw, ersetzetn)

Speichern name.txt

schließen


Sollte dies als neu Einsteiger in Python machbar sein?


ciao
 

sebast

Well-Known Member
#13
Das sollte in Python machbar sein, ob das für ein Einsteiger machbar ist, kann ich nicht sagen.
Ich habe mit Bash Scripting angefangen und bin dann zu C/C++ übergegangen.

Über Google könntest du folgendes suchen.

* Python read write file
* Python string.replace

Bitte darauf achten, zwischen Python 2 und Python 3 können unterschiede existieren. Bei Beispielen immer schauen, ob die ggf. für Python 2 oder Python 3 sind ggf. einfach testen und notfalls anpassen.

Der Rheinwerk Verlag hat recht brauchbar kostenlose Bücher https://www.rheinwerk-verlag.de/openbook/ und sonst find ich https://www.oreilly.de/ immer recht gut.

Deine Aufgabe lässt sich am einfachsten mit Bash lösen.

https://stackoverflow.com/questions/525592/find-and-replace-inside-a-text-file-from-a-bash-command
 

cabriofahrer

Well-Known Member
#14
Wie @Yamagi schon meinte, die Sprache an sich ist eigentlich nicht das Thema, "das Programmieren" an sich sollte man verinnerlicht haben, also ein Problem in kleine Teile zu zerlegen und diese Rechnerlösbar darzustellen; quasi einen Lösungsweg erarbeiten, ohne erstmal überhaupt eine Zeile zu programmieren;
Und gibt es dafür ein empfehlenswertes Tutorial oder Buch, wie etwa "Grundlagen der Programmierung"?

"Freude an: (West)BRD-Spiessbügerlichkeit wie eine Monstranz vor sich her tragen"
Manchmal merkt man hier hin und wieder, wer "ost" oder "west" ist. Ich frage: Macht das seit nunmehr 30 Jahren noch einen Sinn? Gehört hier natürlich nicht rein, aber vielleicht ein separates Thema für "Geplauder"?
 

Yamagi

Possessed With Psi Powers
Mitarbeiter
#15
Ich halte immer noch "Objects first with Java" für einen sehr guten Einstieg. Die deutsche Ausgabe ist z.B. hier erhältlich: https://www.amazon.de/Java-lernen-mit-BlueJ-Einführung/dp/3868949119 Anders als der Titel vermuten lässt, ist es nicht sehr eine Java-Einführung, sondern eine Einführung in objektorientierte Programmierung. Es beginnt wirklich bei Null, es setzt nichts voraus. Man kann allerdings darüber streiten, ob der objektorientierte Ansatz im Jahr 2019 noch zeitgemäß ist.
 

Yamagi

Possessed With Psi Powers
Mitarbeiter
#17
Das ist ein bodenloses Fass und ich würde mich nicht unbedingt als Entwickler sehen. Java, C# und co. sind immer noch sehr beliebt und werden es sicher auch noch lange bleiben. In den letzten Jahren geht der Trend aber weg von dieser "klassischen" Form der Objektorientierung, einerseits zu einfacheren, an reine prozedurale Programmierung erinnernden Ansätzen (z.B. Go) oder funktionalen Ansätzen (z.B. Rust). Aber ich denke, wenn man am Anfang steht, ist das alles erstmal egal.
 

lme

FreeBSD Committer
#18
Das ist ein bodenloses Fass und ich würde mich nicht unbedingt als Entwickler sehen. Java, C# und co. sind immer noch sehr beliebt und werden es sicher auch noch lange bleiben. In den letzten Jahren geht der Trend aber weg von dieser "klassischen" Form der Objektorientierung, einerseits zu einfacheren, an reine prozedurale Programmierung erinnernden Ansätzen (z.B. Go) oder funktionalen Ansätzen (z.B. Rust). Aber ich denke, wenn man am Anfang steht, ist das alles erstmal egal.
Gut, dann bleibe ich bei objektlosen Sprachen. :)
 
#20
Es kommt immer drauf an, was Du damit "erschlagen" möchtest. Um mal eben schnell Q+D (quick and dirty) Buchstaben auzutauschen, Texte bearbeiten und so weiter: Shell + awk + sed. Oder halt gleich Perl nehmen. Python ist auch nicht schlecht, aber Obacht! Version 2 und 3 sind nicht mehr kompatibel zueinander. Sofern also vorhandene Scripte verwendet werden sollen, ist eine Überprüfung auf jeden Fall anzuraten. Für diese Überprüfung kann man awk nutzen. Nur so am Rande erwähnt. Ein echter Methusalem, aber mächtig ohne Ende. Stammt ja auch aus der Feder der Entwickler von C.

Auf der anderen Seite: Es gibt aus meiner Sicht nicht die "richtige" Programmiersprache. Diese Definition kommt meist von Personen, die von Programmierung genauso viel Ahnung haben wie eine Kuh vom Schlittschuhlaufen. Da werden Buzzwords durch die Gegend geworfen, dass einem schwindelig wird. Kenne ich von unserer IT (Inkompetenz-Team).

Such dir doch einfach ein Problem. Was auch immer das sein mag. So als Beispiel: Automatisches Auslesen der Log-Files und eine bestimmte Aktion erzeugen sofern ein definierter Zustand eintritt. Nur mal so in den Raum geworfen. Da gibt es viele Möglichkeiten, sich dem Thema zu nähern. Wo in der Skala ist das Problem angesiedelt? Ist das Problem mit Bordmitteln zu lösen? Usw, usw.

Mir ist in den vergangenen 20 Jahren die Inflation der Programmiersprachen ehrlich gesagt sauer aufgestoßen. Anstatt die vorhandenen Sprachen weiter zu entwickeln, wurden jede Woche gefühlt 2 oder 3 neue Dinger auf den Markt geworfen. Oder, die Sprachen wurden weiterentwickelt, aber die Kompatibilität zur verherigen Version wurde gekappt (Python). Oder der Hersteller verändert die Lizenzbedingungen, Java ist ein sehr gutes Beispiel dafür. Ich selber verweigere das Ding soweit es geht. Ist aber meine persönliche Meinung. Das mache ich auch mit MySQL. Wer Gemeinsamkeiten findet, darf sich gerne seinen Teil denken.

Beginne als Anfänger einfach mit der Programmierung in der Shell und arbeite dich dann hoch. Erst die Basis, dann nach Höherem streben. Hat auch etwas mit Grundverständnis zu tun, was ich selbst als ganz wichtig erachte.

Mach dir also nicht wirklich den Kopf um die Programmiersprache, analysiere das Problem. In vielen Fällen kann man hier mit der Shell-Programmierung und Scripten eine Lösung finden. Und das, kann auch schon mal sehr komplex werden.
 
#21
Ich kann auch das Buch "Sieben Wochen, sieben Sprachen" empfehlen. Ich zitiere einfach mal die Buchbeschreibung von O'Reilly [1]:

Mit diesen sieben Sprachen erkunden Sie die wichtigsten Programmiermodelle unserer Zeit. Lernen Sie die dynamische Typisierung kennen, die Ruby, Python und Perl so flexibel und verlockend macht. Lernen Sie das Prototyp-System verstehen, das das Herzstück von JavaScript bildet. Erfahren Sie, wie das Pattern Matching in Prolog die Entwicklung von Scala und Erlang beeinflusst hat. Entdecken Sie, wie sich die rein funktionale Programmierung in Haskell von der Lisp-Sprachfamilie, inklusive Clojure, unterscheidet.

Erkunden Sie die parallelen Techniken, die das Rückgrat der nächsten Generation von Internet-Anwendungen bilden werden. Finden Sie heraus, wie man Erlangs "Lass es abstürzen"-Philosophie zum Aufbau fehlertoleranter Systeme nutzt. Lernen Sie das Aktor-Modell kennen, das das parallele Design bei Io und Scala bestimmt. Entdecken Sie, wie Clojure die Versionierung nutzt, um einige der schwierigsten Probleme der Nebenläufigkeit zu lösen.

Hier finden Sie alles in einem Buch. Nutzen Sie die Konzepte einer Sprache, um kreative Lösungen in einer anderen Programmiersprache zu finden - oder entdecken Sie einfach eine Sprache, die Sie bisher nicht kannten. Man kann nie wissen - vielleicht wird sie sogar eines ihrer neuen Lieblingswerkzeuge.
[1]https://www.oreilly.de/buecher/120185/9783897213227-sieben-wochen,-sieben-sprachen.html
 

Zirias

Well-Known Member
#22
Objektorientierung und funktionales Programmieren sind nicht unbedingt ein Widerspruch, allerdings sind beim funktionalen Programmieren Objekte in der Regel immutable. Wer "klassisches OOP" gewöhnt ist muss sich also umgewöhnen. Ich habe durchaus den Eindruck, dass die Reise dahin geht. Es hat auch viele Vorteile, z.B. lässt sich häufig locking bei paralleler Abarbeitung komplett vermeiden.

Definitiv (und zurecht) "out" sind komplexe Vererbungshierarchien. Die haben sich als schwer durchschau- und wartbar herausgestellt. Lieber Komposition und "pipes" (da sind die Unix shells richtig "modern" ;) )

Für den Einstieg zum "programmieren lernen" (da gebe ich Yamagi völlig Recht, das Ziel sollte nicht sein, eine konkrete Sprache zu lernen, aber mit irgendwas muss man natürlich anfangen) halte ich ISO C für sehr geeignet, weil man damit IMHO recht viel lernen kann.

Funktionale Programmierung eher nicht, das geht in C nur recht eingeschränkt bzw mit schlimmen Verrenkungen. OOP allerdings durchaus, das klappt in C (wenn man auf komplexen Kram wie Polymorphie verzichten kann) ziemlich gut, aber man muss die Mechanismen selbst implementieren -- eine gute Übung um ein Verständnis zu bekommen, wie sich die Abstraktionen auf Hardware abbilden.

Für den Anfang wird man aber klassisch imperativ/prozedural programmieren, und ich denke das ist auch das Modell, das man als Anfänger am einfachsten versteht. Dabei lehrt einen C eine gewisse Sorgfalt, da es keine Resourcen managet und auch keine geordneten Laufzeitfehler vorsieht (undefiniertes Verhalten kann einfach zu allem führen, ist also gefährlich) -- das hilft einem später auch, in anderen Sprachen "sauber" zu programmieren.
 
Zuletzt bearbeitet:

Kamikaze

Warrior of Sunlight
#23
Das ist ein bodenloses Fass und ich würde mich nicht unbedingt als Entwickler sehen. Java, C# und co. sind immer noch sehr beliebt und werden es sicher auch noch lange bleiben. In den letzten Jahren geht der Trend aber weg von dieser "klassischen" Form der Objektorientierung, einerseits zu einfacheren, an reine prozedurale Programmierung erinnernden Ansätzen (z.B. Go) oder funktionalen Ansätzen (z.B. Rust). Aber ich denke, wenn man am Anfang steht, ist das alles erstmal egal.
Bei C++ entwickelt es sich in mehrere Richtungen gleichzeitig. Hier spielen Immutability und funktionale Ansätze eine große Rolle.

Es gibt quasi drei Ebenen der Sprache, der Teil der nur zur Compilezeit ausgeführt wird, das Typsystem ist quasi eine eigene funktionale Programmiersprache. Damit fingen die Leute an Probleme zu lösen für die es ursprünglich nicht gedacht war, das sogenannte Template Metaprogramming. Sehr mächtig aber der Code ist sehr schwer zu lesen. Nicht unmöglich, dass liegt daran, dass sich gewisse Idiome und Konventionen durchgesetzt haben, die man zumindest als geübter TMP Autor wiedererkennt.

Die Community um das Komitee reagierte mit C++11 auf diese Entwicklung indem es einen Teil der zur Laufzeit gedachten Sprache mit dem `constexpr` Schlüsselwort zur Compilezeit ausführbar machte. Hier galt am Anfang strikte Funktionalität und Immutability. Ob der Code zur Compilezeit oder zur Laufzeit ausgeführt wird hängt vom Kontext und den Inputs ab. Die Regeln was alles constexpr sein darf wurden seitdem immer weiter aufgeweicht, was vor allem für Programmierer praktisch ist, denn dadurch kann man immer mehr Code für Compilezeit und Laufzeit zusammenführen.

Am Schluss bleibt noch das reguläre Laufzeit C++. In dieser Domain sind interessante Probleme wie Concurrency zu lösen. Mit C++11 kam primitives Threading, das übliche mit locks. Dazu kommen Promises und Futures. Ich denke es wird schließlich in Richtung des Go Modells gehen. Die Sprache ist aber noch nicht da.

Jedenfalls hat C++ die Fesseln des Objektorientierten abgeworfen und versucht verschiedene Paradigmen zu unterstützen, damit in einer Sprache für jedes Teilproblem auf das beste Paradigma zurückgegriffen werden kann. Auch Objektorientierung entwickelt sich weiter, die tiefen Vererbungshierarchien wie man sie aus der Uni kennt sind ein historischer Fehler der dadurch kommt das man mit der Idee des Objekts zu dicht an unserem Modell der uns umgebenden Welt bleibt. Vererbung ist kein gutes Werkzeug für Code Reuse, dafür gibt es Komposition und Aggregation.
Bei Vererbung geht es um Interfaces für Laufzeitpolymorphismus. In C++ ist dieser Laufzeitpolymorphismus Opt-In (Stichwort virtual/override/final), das heißt man kann sich diese Kosten, die man in Sprachen wie Java immer mitbezahlt, sparen. Das befördert einen Stil in dem man einige wenige klar definierte Interfaces für Laufzeitpolymorphismus hat, die Implementierungen dahinter können dann intern möglichst effizient ohne weiteren Overhead laufen.
 
#24
Moin,
mir fällt noch was ein, da hier vom „Sprachen/Programmieren lernen“ die Rede ist:

ich selbst habe in der Schule (80er Jahre) als erste Sprache Pascal gelernt (weil es einen Lehrer gab, der das so wollte). Das war sehr weise. Pascal ist wohl tatsächlich mal als Lernsprache konzipiert worden. Das merkt man ihr auch an; alles, was später verwendet werden soll, muss vorher definiert sein (keine impliziten Typen, keine Deklaration von Variablen bei Verwendung). Und es wird sehr genau auf Typen geachtet (mal eben ein Integer einer Float-Variablen zuweisen wird angemeckert). Das mag am Anfang nervig sein, lehrt einen aber, sich genau zu überlegen, was man eigentlich macht und was man eigentlich machen will. Es gibt Umwandlungsfunktionen, die man nutzen muss.

Diese Erfahrung hat mir bei allen Sprachen, die ich nachher lernen musste/wollte/durfte, geholfen. KeineAhnung, ob es modernere Sprachen gibt, die das ebenso machen (habe eher das gegenteilige Gefühl: alles mögliche wird einem abgenommen).

Ciao,
Photor
 

Zirias

Well-Known Member
#25
Ja, Pascal ist als Lernsprache entworfen und dafür in der Tat gut geeignet, auch ich bin damit in meiner Gymnasialzeit in Berührung gekommen. Inzwischen muss man auch in C recht diszipliniert sein (schon mit der ersten ISO Standardisierung ist vieles nicht mehr erlaubt, was wirklich Murks war), allerdings hat es implizite Conversions. Ich finde das auch gut so, da zu viele explizite Casts und Conversions nur den Code unleserlich machen, weil sie vom eigentlichen Inhalt ablenken -- aber ich stimme zu, für einen Anfänger ist es eine gute Schule, diese schreiben zu müssen -- sonst übersieht man leicht, was im Hintergrund passiert, dass man Präzision verlieren könnte oder schlimmeres.

Ich bin nicht auf die Idee gekommen, Pascal zu empfehlen, weil ich nicht genau weiß, wo man da heute ansetzen kann. "Damals" gab es mit TurboPASCAL für DOS eine ziemlich brauchbare Entwicklungsumgebung mit guten Laufzeitbibliotheken. Wie sieht das denn heute aus? Man könnte, wenn man auf Windows gehen will, Delphi hernehmen. Davon würde ich einem Anfänger aber eher abraten, denn da herrscht der Ansatz vor, Dinge zusammenzuklicken und nur an bestimmten Stellen mit eigenem Code zu "füllen" -- sicher ein Ansatz, der schnelles Entwickeln von GUI-Applikationen erlaubt, aber dem Anfänger steht das beim Lernen wohl eher im Weg. Ich weiß, es gibt den GNU Pascal Compiler, den habe ich mir aber nie angesehen. Kann jemand etwas dazu sagen, wie "sinnvoll" es heute ist, in Pascal zu programmieren?

Ich persönlich habe meine ersten Schritte beim Programmierenlernen in Microsoft's "C64 BASIC V2" unternommen -- eine absolut grauenhafte Sprache, inkonsistent im Aufbau, dazu mit diversen Bugs in der Implementierung -- geschadet hat es mir aber wohl auch nicht. So betrachtet stützt auch das wieder die Aussage, dass die Wahl der ersten Sprache nicht so wichtig ist, wenn das Ziel ist, ~Programmieren~ zu lernen.