An alle Schüler und Studenten mit Informatikproblemen

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.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Beitragvon Pekh » Samstag 12. Dezember 2009, 22:09

lunar hat geschrieben: Aus meiner persönlichen Erfahrung heraus erachte ich es sogar für sinnvoll, an Schulen anfangs völlig auf "echte" Programmiersprachen zu verzichten, und lieber mit etwas wie "Robot Karol" zu beginnen. Denn meist muss man erstmal "Problem lösen" unterrichten, bevor man sich dem "Programmieren" widmen kann.



Dem stimme ich voll und ganz zu. Diese Problemlösungskompetenz zu entwickeln ist das, was ich am Informatik-Unterricht als am Wertvollsten ansehen. Und es ist auch das, woran die meisten zu meiner Zeit scheiterten. Tiefe Einblicke in die Informatik oder auch nur eine bestimmte Sprache lassen sich in der eher knappen Zeit ohnehin nicht vermitteln.

Was ich noch wichtig finde: Ein BWLer, der in der Schule mal Informatik hatte, hat zumindest ne dumpfe Ahnung, wovon ich als Informatiker spreche und vor welchen Problemen ich stehe. Er muß es gar nicht beherrschen, aber es zumindest mal versucht zu haben erweitert den Horizont beträchtlich. Die Wahl der Programmiersprache ist in diesem Zusammenhang irrelevant. Zumal in jeder Nische der Informatik andere Sprachen bevorzugt werden. Aber wer weiß in Schulzeiten schon, in welcher Nische er landen wird?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Samstag 12. Dezember 2009, 22:24

Pekh hat geschrieben:Die Wahl der Programmiersprache ist in diesem Zusammenhang irrelevant.


Nein, ist sie nicht. Weil es Sprachen gibt, die einem den Einstieg in das problemlösende, algorithmische Denken durch völlig unnötigen und für Einsteiger gänzlich unverständlichen Ballast erschweren. Python hilft hingegen, sich auf das Wesentliche zu konzentrieren.
lunar

Beitragvon lunar » Samstag 12. Dezember 2009, 22:37

@numerix: Das sehe ich ganz genauso, auch wenn ich abhängig von Niveau der Schüler noch weiter reduzieren würde. In der Oberstufe oder im Programmierkurs für Informatik-Erstsemester ist Python eine gute Wahl (und um Welten besser als Java), für Schüler der Mittelstufe aber oder bei absolut blutigen Anfängern halte ich "Spielzeug"-Sprachen bzw. -Umgebungen für noch besser. Wenn man keine Ahnung von nichts hat, ist Python schon kompliziert genug ;)
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Beitragvon jbs » Samstag 12. Dezember 2009, 23:07

Ich denke es hängt und scheitert am Lehrer. Ein guter Lehrer kann auch schwierigere Sachverhalte einfach und anschaulich erklären. Nichts destotrotz mag ich Python lieber als Java oder C++.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Samstag 12. Dezember 2009, 23:44

jbs hat geschrieben:Ich denke es hängt und scheitert am Lehrer. Ein guter Lehrer kann auch schwierigere Sachverhalte einfach und anschaulich erklären.

Das koennen die Schueler aber nur dann verarbeiten, wenn sie nicht mit der Sprache kaempfen.
lunar

Beitragvon lunar » Sonntag 13. Dezember 2009, 00:04

@jbs: Problematisch an Java ist, dass einfache Dinge schnell in für Anfänger sehr komplexe Themen führen. Drei Beispiele, die ich aus Erfahrung als problematisch ansehe:
  • Die Verwendung von Listen setzt generische Typen voraus, was wiederum zum Unterschied zwischen Werttyp und Objekttyp führt, weil es den Typ "ArrayList<int>" nicht gibt.
  • Die Verwendung von Zeichenketten führt ebenfalls zum Unterschied zwischen Werttyp und Objekttyp bzw. zum Unterschied zwischen Referenz und Objektwert, da man Zeichenketten nicht mit == auf Wertgleichheit prüfen kann.
  • Die Verwendung von Zeichenketten führt irgendwann auch zur Thematik impliziter Typkonvertierungen, weil einzelne Zeichen in Java implizit in "int" umgewandelt werden, weswegen man einzelne Zeichen anders behandeln muss als Zeichenketten, vgl:
    [code="Java"]Integer.valueOf("10".charAt(0)) * 10;
    Integer.valueOf("10".substring(0,1)) * 10;[/code]

Mag der Lehrer noch so gut sein, die nötigen Erklärung übersteigen die Fähigkeiten eines Programmieranfängers, sei er Informatikstudent oder noch Schüler.

Die Qualität des Unterrichts hängt ohne Zweifel sehr an den Fähigkeiten des Lehrers, doch nicht minder hängt sie auch an der Angemessenheit des Stoffs. Es ist meines Erachtens nicht angemessen, Anfängern Fehler erklären zu müssen, die aus den oben beschriebenen Eigenheiten der Sprache resultieren.

In anderen Fächern zäumt man den Gaul ja auch nicht von hinten auf. In Mathematik sind Vektoren am Anfang nur Koordinaten aus dem zweidimensionalen kartesischen Koordinatensystem, und keine speziellen Matrizen in n-dimensionalen Vektorräumen. In Biologie sind Gene auch erstmal nur "Merkmale" und keine Codon-Sequenzen zur Proteinbiosynthese. Da sollten Zeichenketten im Informatik auch erstmal nur "Werte" sein, und Listen erstmal einfach nur Objekte, in denen man andere Objekte ablegen kann. Java macht diese künstliche, aber notwendige Vereinfachung mehr als schwer.
cos4
User
Beiträge: 23
Registriert: Freitag 30. November 2007, 21:17

Beitragvon cos4 » Sonntag 13. Dezember 2009, 00:14

Ich hab in der Schule Delphi gehabt und lebe auch noch. Aber im ernst, in def Schule geht es darum in kurzer Zeit übersichtlich Dinge zu schreiben und dafür ist python ideal, fehlt nur noch die Anbindung an ne IDE mit simplem GUI-Designer.
Alternativ zu python finde ich smalltalk interessant, die Sprache macht oop sehr anschaulich.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Sonntag 13. Dezember 2009, 11:17

lunar hat geschrieben:Die Verwendung von Zeichenketten führt irgendwann auch zur Thematik impliziter Typkonvertierungen, weil einzelne Zeichen in Java implizit in "int" umgewandelt werden, weswegen man einzelne Zeichen anders behandeln muss als Zeichenketten, vgl: [code="Java"]Integer.valueOf("10".charAt(0)) * 10;
Integer.valueOf("10".substring(0,1)) * 10;[/code]
Das ist ja eigentlich überall so. Viel interessanter finde ich, dass der * Operator offenbar bei Integer überladen ist.
lunar

Beitragvon lunar » Sonntag 13. Dezember 2009, 13:01

Darii hat geschrieben:
lunar hat geschrieben:Die Verwendung von Zeichenketten führt irgendwann auch zur Thematik impliziter Typkonvertierungen, weil einzelne Zeichen in Java implizit in "int" umgewandelt werden, weswegen man einzelne Zeichen anders behandeln muss als Zeichenketten, vgl: [code="Java"]Integer.valueOf("10".charAt(0)) * 10;
Integer.valueOf("10".substring(0,1)) * 10;[/code]
Das ist ja eigentlich überall so.

Überall? Ich kenne das nur von Java, C#, C und C++, alles verwandte Sprachen.

Viel interessanter finde ich, dass der * Operator offenbar bei Integer überladen ist.

Der Operator ist nicht überladen, es findet Auto(un-)boxing statt.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Sonntag 13. Dezember 2009, 14:15

lunar hat geschrieben:Überall? Ich kenne das nur von Java, C#, C und C++, alles verwandte Sprachen.
Jetzt hat du das kleine Wörtchen fast unterschlagen, das steht da nicht ohne Grund. Ich habe nichtbehaupt, alle Sprachen zu kennen, aber Python, Ruby, Javascript und Smalltalk handhaben es genauso. Einzelne Zeichen sind nunmal etwas anderes als Zeichenketten.

Viel interessanter finde ich, dass der * Operator offenbar bei Integer überladen ist.

Der Operator ist nicht überladen, es findet Auto(un-)boxing statt.[/quote]Was es im Endeffekt auch nicht besser macht, bzw. aufs Selbe hinausläuft. Was das angeht, kenne ich keine Sprache die noch inkonsistenter ist.
lunar

Beitragvon lunar » Sonntag 13. Dezember 2009, 14:25

Darii hat geschrieben:aber Python, Ruby, Javascript und Smalltalk handhaben es genauso.

Python und Javascript haben gar keinen Typ für ein einzelnes Zeichen, und es gibt daher auch keine implizite Konvertierung zwischen einem einzelnen Zeichen und einer Ganzzahl. Bei Python sind beide Ausdrücke äquivalent, es ist egal, ob ich ein einzelnes Zeichen entnehme, oder eine einelementen Teilzeichenkette (weil beides Zeichenketten sind):

Code: Alles auswählen

int("10"[0])*10 == int("10"[0:1])*10

Bei Python wird ein einzelnes Zeichen nirgends implizit in seine Ordinal-Zahl bzw. seinen Codepoint umgewandelt.

Ist Dir denn klar, was beim Java-Quelltext für Ergebnisse rauskommen?
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Beitragvon gkuhl » Sonntag 13. Dezember 2009, 14:35

lunar hat geschrieben:Ist Dir denn klar, was beim Java-Quelltext für Ergebnisse rauskommen?

Mir nicht! Ich beherrsche "leider" kein Java. 8)

Edit: Ich habe so ne Ahnung, das es etwas mit ASCI-Zeichen zu tun hat :?
lunar

Beitragvon lunar » Sonntag 13. Dezember 2009, 14:44

@gkuhl:

Code: Alles auswählen

Integer.valueOf("10".charAt(0)) * 10 == 490;
Integer.valueOf("10".substring(0,1)) * 10 == 10;

Der implizite Cast von char (Rückgabe von charAt) nach int (erwarteter Parameter für valueOf) ergibt entsprechend dem Code-Point der '1' 49.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Sonntag 13. Dezember 2009, 15:34

lunar hat geschrieben:Python und Javascript haben gar keinen Typ für ein einzelnes Zeichen, und es gibt daher auch keine implizite Konvertierung zwischen einem einzelnen Zeichen und einer Ganzzahl.
Du vergleichst da Äpfel und Birnen. Du übergibst an valueOf zwei verschiedene Typen und wunderst dich, dass da verschiedene Ergebnisse rauskommen. Wie du selbst sagst, kennt Python keinen Typ für ein einzelnes Zeichen deswegen kannst du "10".charAt(0) nicht mit "10"[0] in Python übersetzen, die Python-Version des Java-Codes wäre ord("10"[0]) wo dann auch 49 rauskommt. Ein einzelnes Zeichen ist nunmal etwas anderes als eine Zeichenkette mit genau einem Element, das gilt auch für Sprachen die keinen „char“-Typ kennen. Und um es nochmal in Smalltalk zu sagen:

Code: Alles auswählen

('10' at: 1) asInteger = 49
Ist also beileibe keine seltsame Java-Eigenheit.

Der implizite Cast von char (Rückgabe von charAt) nach int (erwarteter Parameter für valueOf) ergibt entsprechend dem Code-Point der '1' 49.
Ja was erwartest du denn anderes? char lässt sich nunmal nicht nach String casten. Was ist eher verwirrend finde ist, dass Integer.valueOf(some_integer) überhaupt funktioniert. Eigentlich erwartet die Funktion einen String.
BlackJack

Beitragvon BlackJack » Sonntag 13. Dezember 2009, 19:42

@Darii: Erst sagst Du man kann das Java-Snippet nicht nach Python übersetzen weil es in Python keinen ``char``-Typ gibt, und dann machst Du es doch als ``ord("10"[0]) `` was aber aus Javasicht auch wieder falsch ist, denn in Java ist es eben keine Zahl sondern ein Zeichen, dass nur in bestimmten Fällen zur Zahl gecastet wird. Und genau *das* findet Lunar zu schräg um es Anfängern zuzumuten. Sowohl bei Deinem Python-Snippet als auch beim Smalltalk-Beispiel musst Du *explizit* in eine ganze Zahl umwandeln.

`Integer.valueOf` nimmt Zahlen entgegen, weil die Funktion sowohl für ``int`` als auch ``String`` überladen ist.

Ich denke Lunar hätte an der Stelle entweder einen Fehler zur Übersetzungzeit erwartet, oder dass das Ergebnis dem eines Aufrufs mit einer Zeichenkette mit genau dem Zeichen entspricht.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder