Welche Progammiersprache wird denn heutzutage in der Schule im Fach Informatik verwendet?
-
... und noch eins:
Warum lernt man in der Schulphysik, wie man ein Drehmoment berechnet, aber nicht, wie man einen Schiffsdiesel schmiert?
Warum lernt man im Sprachunterricht in der Schule Latein und nicht einen gängigen Dialekt, mit dem man sich in der Disko viel besser verständigen könnte ?
Eben. Es geht darum, Konzepte zu vermitteln. Abstrakte Konzepte, die man verstanden haben sollte, um später die praxisnäheren Details verstehen zu können, die man im Beruf braucht.
Wie man eine Speicherverwaltung implementiert oder wie man mit Zeigerarithmetik im Speicher spazieren geht und daß ASCII 64 = "@" ist, gehört meiner Meinung nach nicht zu dem, was ein Neuling unbedingt über OOP wissen müssen sollte.
-
zum beispiel schrieb:
Es geht darum, Konzepte zu vermitteln. Abstrakte Konzepte, die man verstanden haben sollte, um später die praxisnäheren Details verstehen zu können, die man im Beruf braucht.
Kinder (die meisten) interessieren sich nicht für abstrakte Konzepte. Das endet dann nur im so übel gescholtenen, "langweiligen" Lehrstil der angeblich an allem Schuld ist.
Bei mir schlagen da auch zwei Herzen in der Brust. Es erscheint "richtig" den Weg vom Abstrakten zum Prakischen zu gehen, aber um Interesse bei jemandem zu wecken muss man es meist andersherum angehen.Als ich angefangen habe zu programmieren (mit ca. 12) wollte ich einfach lustige Textadventures in BASIC machen und nicht lernen was ein Pointer ist.
Ich hatte z.b. in der Mittelstufe einen Physiklehrer der äußerst beliebt war weil er z.b. eben nicht so abstrakt angefangen hat sondern ein Thema immer interessanten praktischen Fragen eingeleitet hat. Die physikalische Gesetzmäßigkeit die eigentlich Thema ist stand dann eher am Ende einer Kette vom Beobachtungen, Überlegungen und Experimenten und wurde so hergeleitet.
Beispiel: Wird die Küche kälter wenn man die Kühlschranktür offenlässt? - zum Thema Energieerhaltung. Nachdem er verlautete dass 90% der Klasse sich irrt waren eigentlich alle an einer ausführlichen Erklärung interessiert.Bei Studenten kann man dann von etwas anderen Voraussetzungen ausgehen, aber auch bei "fachfremden" hilft es bestimmt wenn man ein Thema erst mal interessant macht bevor man sich ins Abstrakte stürzt.
-
illuminator schrieb:
Kinder (die meisten) interessieren sich nicht für abstrakte Konzepte. Das endet dann nur im so übel gescholtenen, "langweiligen" Lehrstil der angeblich an allem Schuld ist.
Kinder interessieren sich auch selten für das kleine Einmaleins oder Druckbuchstaben. Soll man es deshalb weglassen ?
Man muß und kann abstrakte Konzepte vermitteln, wenn man die Lehrinhalte richtig darstellt. Darstellung ist eminent wichtig.
D.h. vor allem mit Beispielen - wohl mit das wichtigste Verständnismittel überhaupt -, und zwar mit Beispielen, an denen genau das Prinzip erkannt werden kann, ohne von weiteren Details verwirrt zu werden.
illuminator schrieb:
und nicht lernen was ein Pointer ist.
sage ich doch: Pointer sind nicht gut, um OOP für Neulinge zu erklären.
illuminator schrieb:
aber auch bei "fachfremden" hilft es bestimmt wenn man ein Thema erst mal interessant macht bevor man sich ins Abstrakte stürzt.
Absolut richtig.
Also das OOP-Konzept anschaulich erklären mit bekannten Strukturen wie "Tier - Säugetier - Affe - Meerkatze" oder "Fortbewegungsmittel - Fahrzeug - motorisiertes Fahrzeug - Auto", aber nicht mit Pointerarithmetik und Speicherklassen. Zumindest nicht für Kinder, die sich vielleicht nicht einmal dafür interessieren und später Archäologe oder Forstwirt werden.
-
Kinder interessieren sich auch selten für das kleine Einmaleins oder Druckbuchstaben. Soll man es deshalb weglassen ?
Nein, aber vernünftig am Beispiel erklären, so wie das Kühlschrankbeispiel oben.
-
zum beispiel schrieb:
Fedaykin schrieb:
Leider sind gehen bei solchen sachen dann Pointer, Speicherreservierungen, Referenzen etc unter.
Das sind wieder Details, welche viele Programmiersprachen gemeinsam haben und gerade für das verstehen des, "Programmierens" für Prozeduralen/OOP Sprachen, sehr wichtig sind.
sorry, wenn ich da anderer Meinung bin.
Pointer, Speicherreversierungen und Referenzen sind für das Verständnis der OOP vollkommen unwichtige Details.
Was hat das überhaupt mit OOP zu tun ? Das hat eher was mit System-Programmierung und Low-Level zu tun.
Reine OOP-Sprachen haben typischerweise eine automatische Speicherverwaltung und gar keine Syntax für Zeiger.
Und nun programmiere mir ein Programm was möglichst wenig Speicher verbraucht in Java. Du hast in Java keinen direkten zugriff auf Ponter, Speicherreservierungen etc. , das stimmt. Aber man muss wissen, was das ist um effektiv programmieren zu können. Es ist schön das man bei GC Programmiersprachen nicht so sehr auf das Speicherhandling achten muss, aber wenn man das zu sehr schlauchen lässt. Kommt man spätestens dann, wenn man auf Speicher achten muss, in teufels Küche.
Wenn ich also Weiß wo und Wie Java sein Speicher reserviert. Und wie es die übergaben von Klassen realisiert wird, weiss ich wie ich dort "Sparmaßnamen" umsetzen kann. Aber dazu brauch ich die Basics.
-
Fedaykin schrieb:
Und nun programmiere mir ein Programm was möglichst wenig Speicher verbraucht in Java.
mission impossible
-
Fedaykin schrieb:
Und nun programmiere mir ein Programm was möglichst wenig Speicher verbraucht in Java.
Wo wir wieder bei den Anforderungen wären: Es ist für stinknormale Schüler, die müssen keine Programme mit möglichst wenig Speicherverbrauch schreiben.
-
Fedaykin schrieb:
Und nun programmiere mir ein Programm was möglichst wenig Speicher verbraucht in Java. Du hast in Java keinen direkten zugriff auf Ponter, Speicherreservierungen etc. , das stimmt.
warum sollte ein Schüler das wissen müssen?
Von den Schülern des Informatik-Unterrichts an allgemeinbildenden Schulen wird ein geringer Prozentsatz beruflich programmieren, und von denen wird wiederum nur ein gewisser Prozentsatz System- oder Anwendungsprogrammierer und muß dann Speichermanagement und Pointer kennen. Das wird er dann aber sowieso lernen.
Und deshalb sollen die restlichen 90+x% Schüler mit solchen Details belastet werden ... ?
-
Ein Schüler muss auch nicht Integrieren oder Differentieren können. Aber er sollte die Grundrechenarten können wenn er das Später mal lernen will.
-
Genau hier sollte man nun differenzieren, was Schulinformatik bieten sollte. Soll es Grundlagen liefern. Dann reicht zu wenn man Betriebssystembedienung lernt. Ein Bissl Word, Excel, Was sind Bits Bytes, wie funktioniert grundlegendes in einen PC. Das sollte reichen. Oder soll man Programmieren lernen im Informatik unterricht, dazu gehören nunmal die Dinge die ich Angesprochen habe.
-
Fedaykin schrieb:
Ein Schüler muss auch nicht Integrieren oder Differentieren können. Aber er sollte die Grundrechenarten können wenn er das Später mal lernen will.
Welch ein Vergleich. Ich kann nicht mal erkennen, ob du nun Integrieren oder doch die Grundrechenarten mit Pointern vergleichst.
Fedaykin schrieb:
Oder soll man Programmieren lernen im Informatik unterricht, dazu gehören nunmal die Dinge die ich Angesprochen habe.
Tun sie eben nicht. Man kann wunderbar Programme schreiben, ohne jemals etwas von Pointern gehört zu haben (inkl. Pointerarithmetik etc.).
-
Bei den Pointern gebe ich dir recht, muss man in Programmiersprachen die keinen direkten Pointerzugriff haben nicht unbedingt kennen. Aber es wäre dennoch Sinnvoll.
Für einen Schnupperkurs, ob Informatik was für mich ist, reichen auch solche sachen. Aber meiner Meinung nach ist das wie Informatik heutzutage vielmals gelehert wird, nichts halbes und nichts ganzes.
Für Grundlagen fehlen geht es schon zu tief in die Konkrete Programmierung.
Für Konkrete Programmierung fehlen zu viele Grundlagen (der Programmierung).Daher finde ich es nicht unbedingt so toll das man den leuten irgendeine Programmiersprache beibringt (ohne Basics), dann doch lieber nur Grundlagen.
-
Naja, Schulinformatik ist sowieso oft eine reine Frickelei.
Unser erster Programm in Pseudo-C++ sah in etwa so aus (nein, wir haben nicht mit Hello World begonnen):#include <iostream.h> void main() { int z1,z2 /*,...,...*/ ; cout<<"Zahl 1 eingeben: "; cin>>z1; //... }
Dazu muss ich wohl nicht viel sagen. Funktioniert hats, mehr aber auch nicht.
Welche Sprache man lernt, kommt auf die jeweilige Vertiefung an würd ich sagen. Manche legen mehr Wert drauf, manche weniger. Im Prinzip finde ich Programmierung in allgemeinen Schulen sowieso umsonst.
-
@Fedaykin Was hat das denn mit Schul-IT zu tun? Schule soll weder Spreu vom Weizen trennen noch fertig ausgebildete Softwareentwickler hervorbringen.
-
Was soll deiner Meinung nach die Schule tun?
Meine Meinung ist dazu, dass die Schule Grundlagen schaffen soll. Für eine mögliche Berufswahl bzw spätere Ausbildung.
Entweder behandelt sie wirklich Grundlagen der Programmierung. Oder eben nicht. Wenn schon im Unterricht Programmiersprachen beigebracht werden, dann richtig. Und soviel gehört nun auch nicht dazu zu wissen was Referenz,Pointer etc ist. Es geht ja nicht da drum das sie jegliche Pointerarithmetik verstehen. Es geht darum das den Schülern meist was beigebracht wird, ohne zu wissen was es für Konsequenzen hat.
Point p1 = new Point(1,0); MyRectangle myRectangle = new MyRectangle(pl,10,10); pl.Y = 5;
Der Code ist nicht wirklich kompliziert. Kann aber unterschiedliche folgen haben, je nach implementation von MyRectangle.
myRectangle könnte urplötzlich auf einer anderen Position stehen. Und der "neuling" der nichts von Referenzen weiss sucht sich nen wolf warum das denn so ist.
Daher würde ich Programmierung entweder aus den Lehrplan herausnehmen und lieber Grundlagen der Informatik schaffen. Und Pogrammierung als eine art Wahlfach lehren, für die leute die sich dafür interessieren. Aber dann müssen sie damit rechnen das es dort nicht nur darum geht "Hammergeile Games" zu proggen. Informatik ist nun manchmal trocken.
-
zum Beispiel schrieb:
Fedaykin schrieb:
Und nun programmiere mir ein Programm was möglichst wenig Speicher verbraucht in Java. Du hast in Java keinen direkten zugriff auf Ponter, Speicherreservierungen etc. , das stimmt.
warum sollte ein Schüler das wissen müssen?
Von den Schülern des Informatik-Unterrichts an allgemeinbildenden Schulen wird ein geringer Prozentsatz beruflich programmieren, und von denen wird wiederum nur ein gewisser Prozentsatz System- oder Anwendungsprogrammierer und muß dann Speichermanagement und Pointer kennen. Das wird er dann aber sowieso lernen.
Und deshalb sollen die restlichen 90+x% Schüler mit solchen Details belastet werden ... ?
Genau! Und gerade deswegen ist es viel wichtiger, dass die Schüler lernen, wie ein Computer funktioniert, anstatt eine praktisch in der Wirtschaft häufig verwendete Programmiersprache zu lernen. Mit Computern muss sich der Schüler nämlich sein Leben lang auseinandersetzen und ein grundlegendes technisches Verständnis könnte ihm da sehr gut weiterhelfen.
Je nach der Ausstattung der Labore würde ich erstmal möglichst anschaulich erklären, was überhaupt Bits und Bytes sind, wie man Zahlen im binären System darstellt und mit ihnen rechnet und ganz grob das Prinzip eines Prozessors. Und zwar nicht von einer mathematischen Sichtweise wie sie oft im Informatikstudium gelehrt wird, sondern von einer technischen Sichtweise. Das heißt man setzt praktisch auf den Digitaltechnik-Unterricht in Physik auf. Um den Schülern weiter zu lehren, wie ein Computerprogramm funktioniert, ist jetzt, meiner Meinung nach, zwingend eine prozedurale Vorgehensweise zu erklären. Denn das ist das Prinzip, dem ein Computer folgt: Es führt nacheinander eine Liste von Befehlen durch. Pointer und Speicherverwaltung gehören für mich dazu, man sollte es aber auch nicht übertreiben, da die Themen sehr trocken, langweilig und auch schwerer zu verstehen sind. Zumindest würden mir da keine Möglichkeiten einfallen, an denen man diese Konzepte effizient und interessant lehren könnte.
Ich finde Pascal einfacher zu lernen als C oder C++ und es ist in den meisten Bundesländern sogar als Prüfungsfach anerkannt. Daher bietet sich Pascal auch an. Soll es weiter in die Programmierung von echten, brauchbaren Anwendungen gehen, springt man eben auf Delphi/FreePascal um. Soll es tatsächlich nur ums Programmieren gehen, dann kann man auch mit Java um sich werfen. Das ist, glaube ich, auch häufig anerkannt.
-
@Fedaykin
Tuh mir doch mal hier den gefallen und erkläre das was Langi da gemacht hat.
Ich kopier beides einer Freundin ins ICQ und werd mal gucken ob sies versteht.
Würd mich echt mal interessieren ob einer bei sowas simplem schon das hantuch werfen muss, weils eben doch nicht so einfach ist.Also wirklich erklären wofür die << sind und wieso da cout steht und wieso man damit auch ints ausgeben kann. warum es << ist und nicht <;
warum man bei cin >> diese richtung braucht... Sollte ja nicht all zu lange dauern bei den 3 zeilen code da
-
Fedaykin schrieb:
Meine Meinung ist dazu, dass die Schule Grundlagen schaffen soll. Für eine mögliche Berufswahl bzw spätere Ausbildung.
Das ist auch meine Meinung, aber Pointer und Speichermanagement sind m.M.n. keine Grundlagen für Anfänger mehr, sondern spezielle Themen für Fortgeschrittene, wie C++ eigentlich überhaupt. Bedenke, daß ein Schüler nicht einmal wissen muß, was eine CPU ist, geschweige was indirekte Adressierung ist.
Fedaykin schrieb:
Point p1 = new Point(1,0); MyRectangle myRectangle = new MyRectangle(pl,10,10); pl.Y = 5;
Der Code ist nicht wirklich kompliziert.
Aber auch nicht wirklich einfach.
Ich würde mir als Schüler so etwas wünschen:
myPoint := 1 @ 0. myRectangle := Rectangle origin: myPoint extent: 10 @ 10.
oder noch einfacher so etwas wie
myPoint := 1 @ 0. myRectangle := myPoint extent: 10 @ 10.
- für jeden auf Anhieb verständlich.
-
zum beispiel schrieb:
Ich würde mir als Schüler so etwas wünschen:
myPoint := 1 @ 0. myRectangle := Rectangle origin: myPoint extent: 10 @ 10.
oder noch einfacher so etwas wie
myPoint := 1 @ 0. myRectangle := myPoint extent: 10 @ 10.
- für jeden auf Anhieb verständlich.
Würdest du mir bitte erklären was das bedeutet?
-
wie "erklären" ? - was verstehst du denn nicht ?