Seite 1 von 1

wie blutigen anfaenger java lehren

Verfasst: Sonntag 2. September 2007, 18:34
von Costi
folgendes:
ein freund von mir geht ab jetzt mit mir im gleichen informatik kurs
in seinem forherigen kurs hat er angefangen javascript zu lernen seine kentnisse uebers programmieren sind aber noch sehr beschraenkt.
deswegen hab ich ihm versprochen mit ihm kosequent zu "lernen" (man lernt programmieren nicht lernend sondern spielend (= mit spass und interesse lernen))

das problem is aber das wir als erste programmiersprache java lernen....
wie soll ich das also angehen? kann ich ihm den nachdem ich ihm absolute grundlagen erklaert habe gleich von typen, OOP, und syntakische obskuritaeten sprechen (vas ja in java schon fuer ein "helo world" programm erforderlich ist) oder soll er erst ein bischen mit python rumspielen ?


vieleicht hat nhemand damit erfahrung......

Verfasst: Sonntag 2. September 2007, 18:43
von schlangenbeschwörer
Ich denke, wenn jmd. Java lernen will/muss, sollte er auch Java lernen und nicht erst Python. Man kann ja auch in Java erstmal "rumspielen" und gewisse Dinge nicht sofort erklären, sondern fertige Klassen "umbauen". Außerdem wird das Javalernen nicht umbedingt toller, wenn man Python kann. Dann nämlich, fällt es einem psychisch schwerer, weil man sich dauernd fragt "wozu dieses ganze Zeug?". Man überlegt immer, wie einfach das in Python ging etc.
Und wenn ihr in Info Java lernt, ist es zudem vlt. auch etwas viel, nebenbei noch Python zu lernen, das alles auseinander zu halten und dann passend zusammenzubringen (sodass Java einfacher wird).
Du könntest es aber andersrum machen und ihm, wenn er Java einigermaßen kann, sagen, wie toll Python ist. :D

Verfasst: Montag 3. September 2007, 08:57
von Joghurt
Ich finde es besser, erst Python zum lernen/lehren zu nutzen, da man dort erstmal OOP außen vor lassen kann.

Desweiteren besteht bei "Java als erste Sprache" die Gefahr, dass Leute das falsche Bild vom Programmieren bekommen: für sie besteht die Welt nur noch auch Objekten und Java-Konstrukten. Auch Sachen wie Mehrfachvererbung gibt es einfach nicht. Und dann noch die irrige Annahme, dass "protected" und "private" den Code schützen, oder allgemein dass mein seinen Code vor anderen schützen muss.

Verfasst: Montag 3. September 2007, 12:53
von C4S3
Wenn man Java lernen will, so soll man das tun.
Aber als kleiner Tipp, bzw. als Hilfe:

http://www.bluej.org/

http://www.amazon.de/lernen-BlueJ-Einf% ... 233&sr=8-1

Und als IDE am Anfang natürlich BlueJ.

Wenn man gerade mit OOP lernt, finde ich das sehr gut. Ich hatte Anfangs echte Probleme, OOP zu kapieren, aber damit hab ich es hinbekommen. ;)

Die Art und Weise, WIE einem OOP da beigebracht wird, ist einfach toll.

Verfasst: Montag 3. September 2007, 13:31
von penguin-p
Joghurt hat geschrieben:Und dann noch die irrige Annahme, dass "protected" und "private" den Code schützen
Wer verbreitet denn solche Annahmen?
public, protected und private finde ich persönlich eigentlich recht schön, da man damit seine Klasse nicht nur gedanklich, sondern tatsächlich in einen privaten Teil und eine öffentliche bzw. semi-öffentliche Schnittstelle gliedern kann. Manchmal vermisse ich das bei Python ;) ... jaja diese C++ Muttersprachler :D

Eigentlich "schützt" protected den Code ja auch. Es schützt eben Attribute und Methoden vor Zugriffen, die von außerhalb der Klasse kommen. Aber ich denke so war dein Text nicht gemeint ;)

Verfasst: Montag 3. September 2007, 14:30
von BlackJack
Private und öffentliche API wird in Python per Namenskonvention geregelt. Namen mit einem führenden Unterstrich sollte man von aussen nur verwenden, wenn man weiss was man da tut.

Per "reflection" kommt man bei Java in der Regel auch an ``private``-Attribute heran. Bei C++ reicht bei den meisten Compilern ein ``#define private public``.

Verfasst: Montag 3. September 2007, 14:49
von penguin-p
Solche Namenskonventionen sind hässlich, wenn du ein Attribut von public nach private verschieben willst musst du es umbenennen ... und zwar auch überall da wo es verwendet wird. Meiner Ansicht nach sollten Bezeichner keine weitere Semantik tragen.
Der Python Weg hat natürlich auch seine Vorteile. Man kommt beispielsweise um Schlüsselwörter wie friend herum und die Sprache an sich bleibt einfacher.

Verfasst: Montag 3. September 2007, 15:14
von Costi
public, protected und private finde ich persönlich eigentlich recht schön
ich find sogar goto`s (apropo, wieso beinhaltet dein anzeigebild dieses museumsstueck :lol: ) schoener als public, protected und private

es kann ja situationnen geben, indenen man zum beispiel einem top kriminellen verbrecher seine ``TopSecretFTPConn`` instanz zur veruegung stellt und das attribut ``password`` daher nur fuer die interne benutzung freigegeben werden soll.
aber in de regel braucht man sowas nicht

Verfasst: Montag 3. September 2007, 16:20
von penguin-p
Ohje, goto :D ... keine falschen Vorstellungen, so böse bin ich dann doch nicht ;)

Es geht nicht darum, dass irgendwelche Attribute der Klasse geheim wären oder verschlüsselt werden sollen, sondern darum, dass eine Klasse über eine innere und äußere Schnittstelle verfügt. Das heißt, dass jemand, der deine Klasse durch ein Modul einbindet und instanziiert kein Attribut der internen Schnittstelle beschreiben kann und damit die Instanz aus Unwissenheit in einen undefinierten Zustand versetzt. Durch public, protected und private kannst du die Konsistenz deiner Klasse bzw. deren Instanzen garantieren.

Verfasst: Montag 3. September 2007, 17:31
von BlackJack
Wenn dem so wäre, dürfte es keine Java-Programme geben bei denen Objekte in einem inkonsistentem Zustand wären. ;-)

Und wie gesagt gibt es führende Unterstriche, das erfüllt die gleiche Aufgabe wie ``private``. Ausser das es keinen Zugriffsschutz bietet. Aber wie ich mal in einem Perl-Text sinngemäss gelesen habe: Bei uns betritt man fremde Häuser (Objekte) aus Respekt und Rücksichtnahme nicht, und nicht weil uns ein Elektrozaun daran hindert.

``goto`` in C ist übrigens manchmal ganz nützlich. Bis zu einem gewissen Grad kann man damit innerhalb einer Funktion zum Beispiel Ausnahmen nachahmen, die ja auch eine Art Sprung ausserhalb des normalen Programmflusses zu einer Marke darstellen.

Verfasst: Montag 3. September 2007, 19:33
von penguin-p
BlackJack hat geschrieben:Wenn dem so wäre, dürfte es keine Java-Programme geben bei denen Objekte in einem inkonsistentem Zustand wären. ;-)
Zu Java kann ich leider nichts sagen, da kenn ich mich nicht aus.
Und wie gesagt gibt es führende Unterstriche, das erfüllt die gleiche Aufgabe wie ``private``. Ausser das es keinen Zugriffsschutz bietet. Aber wie ich mal in einem Perl-Text sinngemäss gelesen habe: Bei uns betritt man fremde Häuser (Objekte) aus Respekt und Rücksichtnahme nicht, und nicht weil uns ein Elektrozaun daran hindert.
Ja es ist bis auf den Zugriffsschutz dasselbe (schönes Zitat übrigens :D). Allerdings habe ich ja schon gesagt, dass ich es ungünstig finde, sowas über den Bezeichner zu regeln.

Aber ich sehe ein, dass private etc. in Python auch nicht optimal wären, da dadurch die Sprache ein Stück weit aufgebläht würde.

Verfasst: Montag 3. September 2007, 20:40
von lunar
penguin-p hat geschrieben:Solche Namenskonventionen sind hässlich, wenn du ein Attribut von public nach private verschieben willst musst du es umbenennen ... und zwar auch überall da wo es verwendet wird.
Hast du mal in Java ein von anderen Klassen verwendetes Attribut von public nach private verschoben, und dann beobachtet, was der Compiler dazu sagt?

Wenn nicht, dann solltest du das einfach mal tun... danach wirst du das "Umbenennen" in Python mit anderen Augen sehen.

Sofern es nur um die Verwendung innerhalb einer Klasse geht, dann erfordert das Umbenennen genau einen Klick und eine Eingabe in meinem emacs. Wenn das bei dir komplizierter ist, solltest du dir vielleicht mal einen vernünftigen Editor suchen, der das Konzept des sogenannten "Suchen und Ersetzen" oder besser noch des "Refactoring" kennt...

Was Namenskonventionen angeht, die verwendet man doch sowieso täglich, wie z.B. die Java-Konventionen, dass Namen von Methoden in Camel Case geschrieben werden, und Attribute klein. Da macht eine Konvention mehr doch auch nicht viel aus ;)

Verfasst: Montag 3. September 2007, 22:54
von Leonidas
lunar hat geschrieben:Was Namenskonventionen angeht, die verwendet man doch sowieso täglich, wie z.B. die Java-Konventionen, dass Namen von Methoden in Camel Case geschrieben werden, und Attribute klein. Da macht eine Konvention mehr doch auch nicht viel aus ;)
In einigen Sprachen ist die ungarische Notation auch sehr populär (ich muss wohl nicht sagen in welchen *g*). Schlimmer ist, wenn Leute anfangen das nach Python zu portieren, das ist dann natürlich total sinnlos.

Verfasst: Dienstag 4. September 2007, 13:49
von Y0Gi
Ungarische Notation in PHP ist der Hammer...

Verfasst: Mittwoch 5. September 2007, 12:39
von CrackPod
Leonidas hat geschrieben:
lunar hat geschrieben:Was Namenskonventionen angeht, die verwendet man doch sowieso täglich, wie z.B. die Java-Konventionen, dass Namen von Methoden in Camel Case geschrieben werden, und Attribute klein. Da macht eine Konvention mehr doch auch nicht viel aus ;)
In einigen Sprachen ist die ungarische Notation auch sehr populär (ich muss wohl nicht sagen in welchen *g*). Schlimmer ist, wenn Leute anfangen das nach Python zu portieren, das ist dann natürlich total sinnlos.
Ungarische Notation?

Verfasst: Mittwoch 5. September 2007, 12:46
von lunar
CrackPod hat geschrieben:
Leonidas hat geschrieben:
lunar hat geschrieben:Was Namenskonventionen angeht, die verwendet man doch sowieso täglich, wie z.B. die Java-Konventionen, dass Namen von Methoden in Camel Case geschrieben werden, und Attribute klein. Da macht eine Konvention mehr doch auch nicht viel aus ;)
In einigen Sprachen ist die ungarische Notation auch sehr populär (ich muss wohl nicht sagen in welchen *g*). Schlimmer ist, wenn Leute anfangen das nach Python zu portieren, das ist dann natürlich total sinnlos.
Ungarische Notation?
Wikipedia?

Verfasst: Mittwoch 4. Juni 2008, 12:45
von mpathy
Ungarische Notation?
In Python gibt es nur das "Dirty Hungarian Phrasebook".. :) :)

Hehe..

Naja, ich finde das bei Python eigentlich auch ganz nett, mit dem führenden Unterstrichen, allerdings sollte das vom Interpreter restriktiv umgesetzt werden.

Klar betritt man fremde Häuser normalerweise aus Respekt nicht - aber wenn man abends mal schlaftrunken an die falsche Haustür torkelt, will ich gleich an der Türe merken das es das falsche Haus ist, weil der Schlüssel nicht passt - und nicht erst wenn ich am nächsten Tag neben einer fremden Frau samt wütendem Ehemann aufwache :) :)

Verfasst: Mittwoch 4. Juni 2008, 13:14
von lunar
mpathy hat geschrieben:Klar betritt man fremde Häuser normalerweise aus Respekt nicht - aber wenn man abends mal schlaftrunken an die falsche Haustür torkelt, will ich gleich an der Türe merken das es das falsche Haus ist, weil der Schlüssel nicht passt - und nicht erst wenn ich am nächsten Tag neben einer fremden Frau samt wütendem Ehemann aufwache :) :)
Das kommt stark auf die Frau an, neben der man aufwacht...

Außerdem: besser in einem fremden Haus geschlafen als im Straßengraben.

So ergibt eben auch der Zugriff auf "private" Attribute in Python mitunter Sinn.

Verfasst: Mittwoch 4. Juni 2008, 13:15
von CM
edit:
**** sorry, habe einige Posts übersehen ****

Verfasst: Mittwoch 4. Juni 2008, 16:22
von numerix
C4S3 hat geschrieben:Wenn man Java lernen will, so soll man das tun.
Aber als kleiner Tipp, bzw. als Hilfe:

http://www.bluej.org/

http://www.amazon.de/lernen-BlueJ-Einf% ... 233&sr=8-1

Und als IDE am Anfang natürlich BlueJ.

Wenn man gerade mit OOP lernt, finde ich das sehr gut. Ich hatte Anfangs echte Probleme, OOP zu kapieren, aber damit hab ich es hinbekommen. ;)

Die Art und Weise, WIE einem OOP da beigebracht wird, ist einfach toll.
Dem kann ich mich nur vorbehaltlos anschließen, sowohl was die IDE BlueJ angeht als auch insbesondere, was das passende Buch angeht.
Von den zahlreichen Büchern zu Java und sonstigen Programmiersprachen, die mir im Laufe meines Lebens schon untergekommen sind, ist das wirklich eines der wenigen herausragenden Bücher!

Wer damit keinen Zugang zu Java findet, der kann es dann auch ganz lassen.