Gawayn hat gesagt.:
Das ist exakt der falsche Ansatz. Er ist sogar fatal. Es gibt den schönen Ausspruch, BASIC habe viele potenziell geniale Programmierer korrumpiert und auf ewig für die Praxis untauglich gemacht. Wenn ich sehe, wie an Unis die Studenten mit Java und Konsorten ihren Einstieg in die Programmierung machen, sehe ich schwarz für deren weitere Entwicklung -- es sei denn, es handelt sich um außergewöhnlich begabte Naturen, und die sind leider selten.
Ich beobachte in der Szene an vielen, vielen Beispielen, dass Leute mit Sprachen wie QB oder Java herumhantieren und dabei keine Ahnung davon haben und auch nicht entwickeln, was die Maschine eigentlich tut und wie ihr Programm funktioniert. Die Sprache verbirgt all diese Mechanismen. Dadurch entsteht weder Verständnis für OOP, noch für Design, noch für Problemanalyse. Diese "Programmierer" bleiben oft in diesem Loch stecken und kommen da nicht heraus.
Du wirst jawohl nicht Java mit QB in einen Satz nennen. Kennst du überhaupt Java?
Java ist extrem anspruchsvoll und ist jene Sprache die konzepte moderner Programmiersprachen
am konsquentesten umsetzt.
C++ ist eine alte Sprache die einer anderen Motivation nachgeht, aber es ist garantiert nicht
die Sprache die einem die sauberste Programmierung beibringt.
Gawayn hat gesagt.:
Wer mit Assember beginnt, hat die besten Voraussetzungen für die Praxis. C wird ihm keine Schwierigkeiten bereiten. Wer mit BASIC beginnt, hält C oft für furchtbar schwierig. C ist aber nicht schwierig, C ist sogar sehr einfach. FORTH ist schwieriger zu lernen, und wer FORTH kennt, weiß, wovon ich rede. C ist Kindergarten gegen eine solche Sprache.
Jau gibs mir härter, nur die harten kommen in den garten, habe dennoch schon lange nicht
mehr soviel Mist in 2 Sätzen gehört.
Gawayn hat gesagt.:
Das ist genau verkehrtherum. Die grundlegenden Dinge sind doch nicht objektorientierte Programmierung und Anwendungsdesign! Das ist nur was für Leute, die wissen, was sie tun. Anfänger scheitern an diesen Anforderungen bereits im Ansatz -- was übrigens in den Foren hier jeden Tag aufs Neue zu beobachten ist. Der Anfänger muss mit den Grundlagen der Maschine beginnen. Er muss also wissen, was die CPU tut, was der Program Counter tut, wie der Speicher adressiert wird, was auf Maschinenebene effizient ist und was nicht, was der Unterschied zwischen Division durch 2 und einem Rechtsshift ist. Nachdem er all diese Basics wirklich gründlich verstanden hat, kann er daran gehen, sich mit höheren Themen wie OOP zu beschäftigen.
Es gibt ganz direkte Abstraktionsschemen. Ich stimme mit dir überein das diese Kenntnis von
Vorteil ist, aber schon lange keine Vorraussetzung.
Auch gerade in der Programmierung gibt es eine Evolution. Durch abstraktionsschichten
kann sich der Programmierer auf Dinge konzentrieren die wirkliche Vorteile in diesem Beruf bringen. Der sinn höherer Programmiersprachen ist es eine Verbesserrung zu bringen, dem
Benutzer jener Programmiersprachen die möglichkeit zu geben, sich auf Dinge zu spezialisieren.
So gibt es eine Menge Wissensfelder die mittlerweile extreme Wichtigkeit besitzen und
derren Kentniss eindeutig zu besserer Software führt. So haben sich eben durch diese Abstraktionsschicht Dinge herausgestellt wie Modell Driven Architektur, TestFirst Paradigma...
Es ist absolut unnötig heutzutage Assembler zu lernen. Programmierer die ein interresse an
ihrem Beruf haben, wollen so oder so wissen was Register sind, wie seine Werte gespeichert
werden und ähnlichem. Um dies zu lernen ist es nicht nötig eine Programmiersprache zu lernen
die einem keinen beruflichen und praktischen Nutzen bringt.
Gawayn hat gesagt.:
Ich denke, die ganzen BASIC-Hobbyprogrammierer, die auf unterstem Niveau herumkrebsen und C als Sprache für Masterminds of the highest order betrachten, belegen meine Ansicht. BASIC ist keineswegs einfacher als C -- oder kann hier jemand eine Fourier-Transformation in BASIC einfacher programmieren als in C? Ich wage es zu bezweifeln. BASIC verbirgt nur all diejenigen Dinge vor dem Programmierer, die er wissen müsste, um die Maschine zu verstehen.
Du sprichst von einem Hobbyprogrammierer, weshalb sollte er wenn sein Hobby ihm Spass macht es aufgeben? Deine Logic erschliesst sich mir nicht.
Gawayn hat gesagt.:
C setzt dieses Verständnis für die Maschine ganz generell voraus. Nicht C ist das Problem, sondern dies: mangelndes Wissen über Computer, entstanden durch das Lernen mit Java, BASIC oder anderen Ultra-High-Level-Sprachen.
Gawayn
C hat einen sehr grossen Anteil an der Zeit die allgemein als Softwarekriese in die Geschichte eingegangen ist.
C ist eine veraltete Sprache die mit dafür verantwortlich ist das der meiste Code in den 90`er Jahren nicht weiter nutzbar ist.
Die Anforderrungen an Programmiersprachen sind so unterschiedlich weil die Anforderrungen an die Software exterm unterschiedlich ist.
Die böse Ultra-High-Level Sprache Java hat C / C++ den Rang im grossen Abgelaufen was Kommunikative Programmierung anbelangt, gründe sind sehr restriktive Sicherheit, und typsicherheit und damit verbundene Unanfälligkeit gegen Bufferoverflows.
So basieren 90% aller Produkte der Apache Group auf Java, und deren Web-Strategie geht eindeutig in richtung Java.
Microsoft setzt neuste Produkte auf .net auf, und nimmt Abstand von C / C++ wo es kostentechnisch machbar ist.
IBM setzt voll und ganz auf Java bei neuer Software, und auch Oracle geht den Weg und tauscht
schon eine ganze Weile sämmtliche Sicherheitsrelevante Software gegen Java.
C / C++ hält sich dort wo einerseits Hardwarenahe Programmierung von nöten ist (und dies ist schon lange bei den meisten Projekten nicht mehr nötig) und hält sich bei der Entwicklung von GUI Programmen (dank Javas Katastrophaler GUI Eigenschafften).
Aber auch im Bereich GUI Programmierung gibt es einen Umschwung auf .net. Was früher mit C++ / MFC & VCL bzw WinAPI umgesetzt wurde (auf Windows Seite) wird immer häufiger mit .net umgesetzt (Auf der (Windows GUI Schiene) ist .net im kommen das kann ich zugeben @ Norbert).
C++ wird auch weiterhin eine starke Programmiersprache mit hohem Marktanteil bleiben. C wird mehr und mehr austerben, und auch Stroustroup (wie viele andere) raten davon ab C zu lernen um C++ zu verstehen, was auch meine Meinung ist.
OOP ist nichts was mann nach hinten aufschieben sollte, da OOP grundlegend für moderne Programmiersprachen ist. Langjährige C Programmierer tun sich genauso schwer mit OOP, wenn nicht noch schwerer, als Anfänger.
Natürlich grausts mich wenn ich Anfänger in OOP sehen die irgendwas irgendwo in eine Klasse drängen nur das es wie OOP aussieht, aber ansonsten von Entwurfsmuster + OOA/OOD nichts gehört haben. Aber das gehört zu dem Status des Anfängers, mannche werden es nie lernen, bei anderen wird es irgendwann "klick" machen und verstehen wo der wirkliche Sinn von OOP liegt und damit ein Design erstellen können welches die Kunst der generischen Programmierung / polymorphes Design wunderbar zum Vorteil nutzt.
C & Assembler zu lernen ist aber für korrekte OOP nicht nur nicht notwendig, sondern zudem auch ein schlechter Rat.