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.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

BlackJack hat geschrieben:@Darii: Erst sagst Du [...] dann machst Du es doch als ``ord("10"[0]) ``[...]
Genau. Da es kein char gibt muss man in Python halt Integer nehmen. Das wäre zumindest „richtiger“ als einfach ein 1-elementigen Python-String nehmen.
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.
Ich finde es nicht zu viel verlangt, einfach mal zu gucken, was der ominöse Typ char eigentlich ist. Nämlich eine Zahl. Um auf diese „Falle“ zu stoßen, muss man ja schließlich erstmal auf die Idee kommen, mit charAt ein char aus dem String rauszuholen.
`Integer.valueOf` nimmt Zahlen entgegen, weil die Funktion sowohl für ``int`` als auch ``String`` überladen ist.
Ist sie nicht, zumindest nicht laut der API-Dokumentation von Sun.

Edit: Mea culpa, seit 1.5 nimmt sie wirklich Integer entgegen(kann mir jemand sagen warum google immer noch 1.4 als ersten Treffer liefert?), aber wie gesagt, ein char ist eine Zahl. Und kann immer automatisch zu int gecastet werden. Ein Anfänger Kurs/Buch bei dem das nicht erwähnt wird macht etwas falsch.
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Also die Diskussion, die diese beiden so simplen Codezeilen ausgelöst haben, untermauert ja eher Lunars Behauptung, das dieses Verhalten von Java für einen Schüler unnötig kompliziert ist. Was ist ein überladener Operatoren? Was ist Auto(un-)boxing? Was ist eine implizite Cast? Und warum ist das Ergebnis jetzt 49 und nicht 42?

Die Fragen sind rhetorisch. :wink:
Grüße
Gerrit
lunar

@Darii: Du hast mich überhaupt nicht verstanden. Es geht nicht um mich. Ich weiß, was da passiert und warum es passiert, und ich kenne mich in Java und C++ gut genug aus, um nichts anderes zu erwarten, und mich vom Ergebnis nicht überraschen zu lassen. Meines Erachtens ist das Verhalten zwar nicht sinnvoll, sondern nur historisch ererbte Altlast von C, aber darüber lässt sich unter Programmierern sicherlich trefflich streiten.

Hier geht es aber nicht um Programmierer, sondern Schüler bzw. Studenten, die gerade die ersten Schritt auf dem Weg zum Programmierer machen. Da fehlt die Erfahrung, die uns sagt, dass Java Zeichen lieber als Zahlen ansieht. An ihre Stelle tritt die Intuition. Nun, wenn Du ein "a" siehst, dann liest Du in erster Linie erstmal das Zeichen "a", und nicht das erste Zeichen des Alphabets oder das 97. Zeichen der ASCII-Tabelle. Kannst Du Javas Verhalten da mit gutem Gewissen als intuitiv bezeichnen? Zahlen als "richtigeren" Ersatz für Zeichen anzusehen, ist vor diesem Hintergrund dann sehr merkwürdig. Wenn ich Dich nun bitten würde, alle Buchstaben meines Beitrags aufzuzählen, muss ich dann eine Liste mit Zahlenwerten erwarten?

Ebenso befremdlich ist es, ein Anfängerbuch oder ein Kurs als "falsch" hinzustellen, wenn die impliziten Typkonvertierungen nicht erläutert werden. Wenn man anfängt, eine Tabelle mit impliziten Typumwandlungen zu erklären, passiert genau das, über das hier schon lang und breit debattiert wurde: Man verliert über den Besonderheiten einer Sprache das Ziel, nämlich "Programmieren" im Sinne von Problemlösung und Umsetzen vom Probleme in Algorithmen zu lehren. Aber hast Du denn überhaupt je solche Kurse gehalten?
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

lunar hat geschrieben:@Darii: Du hast mich überhaupt nicht verstanden.
Natürlich habe ich dich verstanden, bloß du mich nicht. Du kreidest speziell Java irgendetwas an, was in allen Programmiersprachen so funktioniert. Mehr wollte ich nicht sagen. Siehe das Smalltalk-Beispiel das BlackJack also so unpassend bezeichnet hat. Genau das selbe Spielchen, Zeichen -> Integer -> ASCII-Code. Wenn man damit also in Java einmal hinfliegt hat man etwas fürs Leben gelernt.
Ebenso befremdlich ist es, ein Anfängerbuch oder ein Kurs als "falsch" hinzustellen, wenn die impliziten Typkonvertierungen nicht erläutert werden.
Ich erwarte nur einen kleinen Satz, zu jedem Datentyp der gerade verwendet wurde. Wenn ich charAt erwähne, muss ich auch erwähnen das da rauskommt. Und wenn das keine Kleinigkeit sondern ein häufiger Fallstrick, dann muss ich dass erst recht erwähnen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lunar hat geschrieben:Wenn ich Dich nun bitten würde, alle Buchstaben meines Beitrags aufzuzählen, muss ich dann eine Liste mit Zahlenwerten erwarten?
Wenn du Ruby 1.8 verwendest - ja. Was scheinbar nicht nur mich so dermaßen gewundert hat dass es in Ruby 1.9 an das Python-Verhalten angepasst wurde.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Meine 5 €ent: Java ist gut, um die Konzepte der Objektorientierung und strikten Typisierung zu lehren. Außerdem ist Java sinnvoll, weil es in der Industrie und Wissenschaft sehr große Verbreitung gefunden hat. Des weiteren ist Java verwandt mit vielen anderen sehr verbreiteten Sprachen (C, C++, C#) aber einfacher zu handhaben und für Universitäten leichter zugänglich, da mit Eclipse eine kostenlose und brauchbare IDE zur Verfügung steht und keine Lizenzen gekauft werden müssen. Daher kann ich gut verstehen, warum sie in Schulen und Universitäten zu Lehrzwecken eingesetzt wird. Aber freiwillig würde ich nie ein Projekt in Java beginnen, weil die Sprache einfach furchtbar umständlich und hässlich ist.

Der besagte Fallstrick ist eigentlich keiner, da das Verhalten von charAt() und char Datentypen wohl definiert ist. Es ist nicht intuitiv aber Java hat nie den Anspruch erhoben, intuitiv zu sein. Ohne Debugger und API-Docs ist Java nicht zu gebrauchen. Das war schon immer so. Hier ist Python eine (positive) Ausnahme, aber zur Softwareentwicklung gehört nunmal auch der Umgang mit eher umständlichen Sprachen, wenn es die Aufgabenstellung verlangt. Was bringt es, Studenten in einem Rolls-Royce mit Automatik Getriebe im Kreis fahren zu lassen, wenn sie später im Job einen 25 Jahre alten Traktor durch den Schlamm fahren müssen?

Python als Lehr-Sprache ist gefährlich, da es viele Konzepte enthält, die einzigartig für Python sind. Das gilt eigentlich für alle Script-Sprachen. C und Java sind und bleiben Marktführer. Wer sich auf eine berufliche Laufbahn als Software Entwickler vorbereiten will, kommt da nun mal nicht drum rum.
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Defnull hat geschrieben:Python als Lehr-Sprache ist gefährlich, da es viele Konzepte enthält, die einzigartig für Python sind. Das gilt eigentlich für alle Script-Sprachen. C und Java sind und bleiben Marktführer. Wer sich auf eine berufliche Laufbahn als Software Entwickler vorbereiten will, kommt da nun mal nicht drum rum.
Bitte an die angegebene Zielgruppe denken. Von beruflichen Softwareentwicklern war nicht die Rede. Es geht darum, Schülern und Studenten grundlegende Konzepte des Programmierens beizubringen. Und da ist so wenig Ablenkung vom Kern des Geschehens wie möglich äußerst hilfreich.
lunar

@Darii: Mit Verlaub, aber eine implizite Umwandlung von Zeichen in Zahlen gibt es beileibe nicht in allen Programmiersprachen. In Python ist eine explizite Umwandlung mit "ord" erforderlich, in OCaml gibt es ebenfalls keine implizite Konvertierung, und in Javascript auch nicht.

Sicher kann man diese Umwandlung durch "ord()" oder das entsprechende Pendant einer anderen Sprache erreichen, nur ist das dann explizit und hat denn auch gar nichts mehr mit der Ausgangssituation zu tun. Deswegen ist das Smalltalk-Beispiel unpassend: Der Punkt ist nicht, dass man Zeichen in Zahlen konvertieren kann, sondern dass dies bei Java implizit geschieht.

Sicher, dass kann man einem Studenten/Schüler auch erklären, aber schau Anfängern mal beim Programmieren einfachster Aufgaben zu: Da treten so völlig grundsätzliche Probleme auf, dass für solche Kleinigkeiten schlicht kein Platz ist.

@Defnull: Ich erkläre auch Dir gerne, was ich sma bereits geantwortet habe: Es geht um Studenten im ersten Semester und Schüler, die meilenweit von ernstzunehmenden Jobs entfernt sind, und erstmal die absoluten Grundlagen lernen müssen.

Wer da meint, es wäre sinnvoll, sich im Kleinkrieg mit impliziten Konvertierungen und dergleichen zu begeben, dem wünsche ich ernsthaft, dass er besagte Zielgruppe mal in Java unterrichten muss.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

lunar hat geschrieben:@Darii: Mit Verlaub, aber eine implizite Umwandlung von Zeichen in Zahlen gibt es beileibe nicht in allen Programmiersprachen. In Python ist eine explizite Umwandlung mit "ord" erforderlich, in OCaml gibt es ebenfalls keine implizite Konvertierung, und in Javascript auch nicht.
Was ist denn jetzt eigentlich dein Kritikpunkt? In deinem letzten Post war es noch die Tatsache, dass es unintuitiv ist, dass ASCII-Codes rauskommen, wenn man Zeichen in Zahlen umwandelt. Dafür ist es doch völlig egal ob das implizit oder explizit erfolgt.
Der Punkt ist nicht, dass man Zeichen in Zahlen konvertieren kann, sondern dass dies bei Java implizit geschieht.
Nein, der Punkt ist, dass Zeichen in Java Zahlen sind und Zahlentypen unter gewissen Umständen implizit ineinander umgewandelt werden können.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Darii hat geschrieben:In deinem letzten Post war es noch die Tatsache, dass es unintuitiv ist, dass ASCII-Codes rauskommen, wenn man Zeichen in Zahlen umwandelt. Dafür ist es doch völlig egal ob das implizit oder explizit erfolgt.
Sorry, aber da herrscht ein gewaltiger Unterschied. Während du einmal explizit sagst, dass du das Zeichen als Zahl haben willst bekommst du beim anderen mal implizit eine Zahl, ohne dass du das erwartet hast (und bei einem Schüler und Studenten ist es unerwartet).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Leonidas hat geschrieben:Sorry, aber da herrscht ein gewaltiger Unterschied. Während du einmal explizit sagst, dass du das Zeichen als Zahl haben willst bekommst du beim anderen mal implizit eine Zahl, ohne dass du das erwartet hast (und bei einem Schüler und Studenten ist es unerwartet).
Was ist bitteschön, an Integer.valueOf('1') implizit? Expliziter kann man wohl kaum sagen: Wandel das Zeichen in eine Zahl um. Nenn mir doch mal bitte einen Fall, wo man wirklich einen Grund hat, sich zu wundern.

Davon abgesehen ist char in Java immer eine Zahl, da wird nichts implizit von Zeichen zu Zahl konvertiert. Der eigentliche Kritikpunkt wäre also, dass chars in Java Zahlen sind. Und ich denke das der Tatsache geschuldet, dass Java überhaupt zwischen primitiven Datentypen und Objekten unterscheidet. Das ist etwas, ich wiederum als potentiell verwirrend erachte.
Zuletzt geändert von Darii am Dienstag 15. Dezember 2009, 09:43, insgesamt 1-mal geändert.
BlackJack

@Darii: Also ich finde der Grund zum Wundern liegt bei der Ausgabe/Zeichenkettendarstellung von ``char``\s. Denn da wird für '1' wird nicht "49" ausgegeben, sondern "1". Das unterscheidet ``char`` von den anderen Zahlentypen. Und Anfänger denken oft "in Zeichenketten", weil es dass ist, was sie sehen und eingeben.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Ich glaube die Diskussion führt zu nichts, wir reden offensichtlich aneinander vorbei. Aber wir sind uns glaube ich einig, das Java nicht ideal für Anfänger ist.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

:lol: endlich mal einer, der das gemerkt hat

Die Diskussion hätte längst ausgelagert werden müssen.

Lasst diesen Thread zur Ruhe kommen und inhaltlich das repräsentieren, wofür er initial erstellt wurde.
Benutzeravatar
daemonTutorials
User
Beiträge: 171
Registriert: Sonntag 6. Februar 2011, 12:06
Kontaktdaten:

Gi hat geschrieben:Also ich (auch Informatikstudi) habe noch keine Erfahrungen mit Python. Letztens habe ich jedoch gelesen, Python wäre aufgrund seiner Einfachheit vorteilhaft. Begründung war, dies würde rein wirtschaftlich gesehen in weniger Arbeitszeit zu mehr gelösten Programmierproblemen führen. (der Wortlaut war anders, aber sinngemäß)
Ich habe nun einen kurzen Blick in Python bei Wikipedia gewagt, und konnte den Code eigentlich mit meinen C bzw. Java Vorkenntnissen ganz gut verstehen. Im hinblick auf Teamwork und stetig leistungsfähigere Computer glaube ich, das die obige Aussage bezüglich der Wirtschaftlichkeit Sinn macht!

Einzig die Tatsache, dass Python ein Interpreter ist hält mich noch etwas zurück mich näher damit zu beschäftigen. Nutzen würde ich Python weitgehend fürs Internet, wie seht ihr da die Vor- bzw. Nachteile zum Beispiel im Bezug auf PHP?

Freue mich auf jeden, der mich überzeugt ;-)!

Gruß Guido
Jo, also PHP ist ja extra für das Internet entwickelt und Python wird oft als Skriptsprache nur für Internet gedacht. Aber nein, Python kann GUI's erstellen, man kann Algorithmen programmieren und sogar eigene Projekte zusammenbasteln, siehe Bottle oder PyLucid. Sehr schick ist auch Inyoka und MoinMoin.

Also ich kann beides, PHP und Python.

PHP nutze ich meist für meine Webprojekte und Python als GUI Sprache mit Tkinter. Trotz allem, Web ist auch mit Python möglich und die wunderbare Integration eines Pythonscripts das als Server läuft und ein Clientscript das die Daten sendet. Wenn das nicht mal schön ist!

Kurz gesagt:
PHP - Webentwicklung
Python - GUI, Serveranwendung, Hintergrundanwendung (auf schnellen Servern auch Webentwicklung)

PHP ist standardmäßig für das Web ausgelegt, bei Python muss man meist folgende Imports tätigen:

Code: Alles auswählen

import urllib
import socket
import sys, os
import cgi
import cgitb; cgitb.enable()
os, socket und urllib nur in Fällen die was mit dem System, Serveranbindung oder Url manipulieren zutun haben!

Ich persönlich nutze PHP am meisten. Python ist jetzt im Moment sehr gut für meine Seele!
LG Maik
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

daemonTutorials hat geschrieben: PHP ist standardmäßig für das Web ausgelegt, bei Python muss man meist folgende Imports tätigen:

Code: Alles auswählen

import urllib
import socket
import sys, os
import cgi
import cgitb; cgitb.enable()
os, socket und urllib nur in Fällen die was mit dem System, Serveranbindung oder Url manipulieren zutun haben!
Diese Aussage ist imho zu allgemein; in Python nutzt man sinnvoller Weise Frameworks für Webprojekte. Auf unterster Eben zu arbeiten ist heutzutage unüblich und vor allem idR. unnötig.
Ich persönlich nutze PHP am meisten. Python ist jetzt im Moment sehr gut für meine Seele!
Wenn Du Python beherrschst, arbeitest Du freiwillig mit PHP weiter??? :mrgreen:

SCNR
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

daemonTutorials hat geschrieben:Jo, also PHP ist ja extra für das Internet entwickelt und Python wird oft als Skriptsprache nur für Internet gedacht.
Nein. Fakt ist, dass Python und Web nur relativ spät erst populär geworden sind, eigentlich erst seitdem Ruby on Rails die Bühne betreten hat und davon inspirierte Frameworks wie TurboGears und Django entstanden sind.
daemonTutorials hat geschrieben:PHP - Webentwicklung
Python - GUI, Serveranwendung, Hintergrundanwendung (auf schnellen Servern auch Webentwicklung)
Von welchen schnellen Servern redest du? CPython ist eher schneller als PHP, vielleicht meinst du ja andersrum?
daemonTutorials hat geschrieben:PHP ist standardmäßig für das Web ausgelegt, bei Python muss man meist folgende Imports tätigen:

Code: Alles auswählen

import urllib
import socket
import sys, os
import cgi
import cgitb; cgitb.enable()
os, socket und urllib nur in Fällen die was mit dem System, Serveranbindung oder Url manipulieren zutun haben!
Quatsch. Das braucht man vielleicht wenn man CGI nutzt, aber davon wird seit, uhm, Jahren abgeraten. Und Tracebacks einfach so unkritisch zu aktivieren ist auch so eine Sache die man vielleicht besser bedenken sollte... denn man will ja schließlich nicht dass ggf. irgendwelche Passwörter in den Tracebacks auftauchen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
daemonTutorials
User
Beiträge: 171
Registriert: Sonntag 6. Februar 2011, 12:06
Kontaktdaten:

Entschuldigung wenn ich etwas falsches gesagt haben sollte, aber so mach ich das!
Mit den Imports meine ich!

Und die anderen sachen, das nehme ich mal so mit!
LG Maik
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

daemonTutorials hat geschrieben: PHP ist standardmäßig für das Web ausgelegt, bei Python muss man meist folgende Imports tätigen:

Code: Alles auswählen

import urllib
import socket
import sys, os
import cgi
import cgitb; cgitb.enable()
os, socket und urllib nur in Fällen die was mit dem System, Serveranbindung oder Url manipulieren zutun haben!
Nein, niemand programmiert heutzutage noch für cgi…
Benutzeravatar
daemonTutorials
User
Beiträge: 171
Registriert: Sonntag 6. Februar 2011, 12:06
Kontaktdaten:

Also, ich benötige CGI für mein Projekt, da ich keinen Webserver mitliefern möchte, der massig Groß ist. Und in Django und andere programmiere ich grundsätzlich nicht. Ist mir zu Aufwendig und schwierig.
Außerdem mag ich es gerne, die Prozesse selber zu steuern.
LG Maik
Antworten