Mit was anfangen?!

  • Vielleicht bin ich ja einfach nur viel dümmer als der
    durchschnittliche Java-Programmierer, aber ich finde "du gibst eine
    Callback-Funktion an, die aufgerufen wird, wenn dieser Button geclickt
    wurde--weil James Gosling eine Gurke ist, mußt du die Funktion in eine
    anonyme Klasse ohne sonstigen Sinn verpacken, sorry" ...

    Vielleicht bist Du ja auch viel viel klueger? Die meisten Einsteiger
    haetten mit deiner Erklaehrung z.B. einige Probleme:

    - Was ist eine Callback-Funktion?
    - Wo in meinem Code gebe ich diese Callback-Funktion an?
    - Wo in meinem Code rufe ich diese Funtion auf?
    - Wer ist James Gosling und warum ist der eine Gurke?
    - Was ist eine anonyme Klasse?

    Dann gibt es Punkte die Du ueberhauopt nicht erklaehrt hast:

    - Warum macht man das denn ueberhaupt so?
    - Wann koennte ich das auch so machen wollen?
    - Wann sollte ich es besser bleiben lassen?

    Ein Buch ueber Design Patterns ist nichts weiter als deine
    Erklaehrung, aber hoffentlich mit weniger Bashing und mehr
    Information.

    ...bevor er sein erstes Java-GUI schreiben
    darf, muß er erstmal einige Kapitel im GOF-Buch lesen.

    Das GOF Buch habe ich nicht empfohlen. Ich finde es ist ein gutes
    Buch, aber ich habe es bei meinen Einsteigerbuechern nicht
    erwaehnt. Das man es lesen sollte bevor man sich mit Java GUIs
    auseinandersetzt hab ich schon gar nicht gesagt.

    Du beschreibst hier zwei Implementierungen eines Patterns und bemerkst
    (voellig korrekt), das eine der beiden Varianten einfacher ist als die
    zweite. Was hat das damit zu tun ob man etwas ueber das Pattern
    selber wissen sollte? Fuer mich klingt das eher danach das Du
    Iteratoren nicht gerne in C++ implementierst.


    Der Name ist do: . Der Name ist map. Der Name ist mapcar und
    Konsorten.

    Alles Namen von konkreten Implementierungen, und keiner davon nur fuer
    die Implementierung eines Iterators zu gebrauchen. Ein Iterator ist
    ein Pattern der eine bestimmte Form von Kommunikation zwischen zwei
    Objekten beschreibt. Wenn ich Kollegen vorschlage irgendwo in einem
    Design einen Iterator zu verwenden, dann haben die ein genaues Bild
    davon wie die Schnittstellen aussehen.

    Namen vergibt man um zu abstrahieren und zur Kommunikation.
    Du selbst machst das auch, ueber dein ganzes Posting verteilt.
    Du sprichst z.B. von 'callbacks' und gehst davon aus das ich
    weiss was du damit meinst. Ueberleg mal wie praktisch es ist
    dass ich mir etwas darunter vorstellen kann.

    Abstraktion ist gut. Wenn ich ein Problem allgemein Beschreiben kann,
    dann kann ich es besser erkennen wenn ich es antreffe.

    Abstraktion ist der Grund weshalb wir komplexe Probleme ueberhaupt
    beaeltigen koennen. Abstraktion macht es moeglich das ich mir morgens
    Kafee machen kann, ohne jedes mal die einzelnen Schritte durchzugehen,
    die dafuer notwendig sind.

    Wenn ich ein Buch ueber Softwareentwicklung schreiben wuerde, dann
    ginge es im ersten Kapitel ueber die Bedeutung von Abstraktion. Die
    Authoren von 'Structure and Interpretation of Computer Programs' haben
    das verstanden. Leider ist das Buch sonst nicht ganz so
    einsteigerfreundlich, sonst haette ich es gleich als erstes empfohlen.

    und immer schön brav multiplies, bind2nd
    und project1st verwenden, weil der Bjarne leider auch falsche
    Prioritäten gesetzt hat.

    *Klatsch Klatsch!* Bleib doch bitte bei uns! was hat denn jetzt
    Stroustrup mit unserer Pattern Diskussion zu tun?


    Was kümmert mich, ob GOF Jahrzehnte nach der ersten
    Implementierung von Lisp einen tausendsten Namen erfunden haben? Das
    Konzept war vor ihnen da und allgemein bekannt.

    Was kuemmert es mich wer als erster da war? Hier werden ja keine
    Pokale verteilt. Im uebrigen behauptet die GOF nicht, die Patterns in
    ihrem Buch erfunden zu haben.

    Du brauchst also gar keine Buecher zum lernen? Du tippst einfach drauf
    los und alles andere kommt von selbst? Das bestaetigt meine Theorie von
    oben, das Du einfach viel klueger bist als der Rest von uns: Ich habe
    z.B. sehr viel lesen und lernen muessen, bis ich Vererbung
    einigermassen verstanden habe. Und was es ueber Methoden alles zu
    wissen gibt finde ich auch alles andere als offensichtlich.

    Woher weisst du das du etwas wirklich verstanden hast? Ich muss jedes
    Jahr ueber mein naives Ich aus dem Vorjahr laechelen. Vielleicht wird
    es Dir naechstes jahr ja auch so gehen?

  • Die meisten Einsteiger haetten mit deiner Erklaehrung z.B. einige Probleme:

    - Was ist eine Callback-Funktion?


    Ich hatte nicht den Eindruck, daß es ab dem Punkt, an dem mir unterstellt wurde, Swing auf die schwierige Tour gelernt zu haben, noch um Einsteiger gegangen ist. Außerdem hatte ich nicht den Eindruck, daß du wirklich keine Abstraktion verstehst und glaubst, ich würde Einsteiger diesbezüglich mit einem saloppen Halbsatz abkanzeln. (Ja, ich bin arrogant. Aber auf andere Weise.)

    Zitat

    Dann gibt es Punkte die Du ueberhauopt nicht erklaehrt hast:

    - Warum macht man das denn ueberhaupt so?


    In Bezug auf Swing? Weil es anders nicht geht. Allgemein? Das ist nicht das Thema von Swing.

    Zitat

    - Wann koennte ich das auch so machen wollen?
    - Wann sollte ich es besser bleiben lassen?


    Sinnvolle Fragen, wenn es um Software Engineering geht. Keine sinnvollen Fragen, wenn es darum geht, wie man in Swing auf einen Click reagiert.

    Zitat

    Das GOF Buch habe ich nicht empfohlen.


    Ich weiß. Ich hab mir die Freiheit genommen, das Book-Containing-A-Description-Of-The-Observer-Pattern-Pattern zu erkennen.

    Zitat

    Das man es lesen sollte bevor man sich mit Java GUIs auseinandersetzt hab ich schon gar nicht gesagt.


    Du hast aber gesagt, man sollte über Observer lesen, bevor man mit Java GUIs programmiert, no? Ist die Beschreibung des Observer im GOF-Buch so mies?

    Zitat

    Du beschreibst hier zwei Implementierungen eines Patterns und bemerkst (voellig korrekt), das eine der beiden Varianten einfacher ist als die zweite. Was hat das damit zu tun ob man etwas ueber das Pattern
    selber wissen sollte?


    Nichts. Da ich generell nicht der Meinung bin, daß man groß versuchen sollte, Patterns zu formalisieren, bin ich auch nicht der Meinung, daß man irgendwas über ein konkretes Pattern wissen sollte.

    Zitat

    Alles Namen von konkreten Implementierungen


    Und obwohl ich nicht klug bin, sondern mich nur so gebe, habe ich erkannt, daß sie auf einer abstrakten Ebene alle was gemeinsam haben. Genau wie ein neuer Swing-User das Callback-Prinzip auch erkennen und verstehen wird, auch ohne vorher ein Patterns-Buch gelesen zu haben. Klar kann man danach ein Patterns-Buch lesen und sehen aha, das ist eine Instanz von Observer; man kann sogar vorher ein Patterns-Buch lesen und dann erkennen, daß es eine Instanz von Observer ist; aber wenn du behauptest, es wäre viel schwieriger, Swing ohne Patterns-Buch zu lernen, dann hältst du Java-Programmierer pauschal für inkompetente Idioten. (Ich auch, aber ich tue es aus Arroganz, siehe oben; deine Motivation scheint eine andere zu sein.)

    Zitat

    Wenn ich Kollegen vorschlage irgendwo in einem Design einen Iterator zu verwenden, dann haben die ein genaues Bild davon wie die Schnittstellen aussehen.


    Für sehr abstrakte Werte von "genau", ja.

    Zitat

    Abstraktion ist gut.


    Abstraktion ist ein Werkzeug. Abstraktion kann zu high-level sein, wenn sie einem ohne Anwendungsbezug top-down eingetrichtert wird. (Hallo Mathe-LVAs.) Insbesondere wenn man etwas neues (wie Swing) lernt, ist es oft sinnvoller, mal was konkreteres zu lernen und das später zu verallgemeinern. (Nicht nur zu verallgemeinern, auch zu vervollständigen; solang ich keine removeListener-Methode brauche, suche ich sie nicht in der API und hab nur ein partielles Modell von Swing im Kopf. Wenn ich mal allgemeiner über das "Pattern" nachdenke oder nachlese, könnte mir einfallen rauszufinden, wie detach in Swing heißt. An dem Punkt ist das gut, aber muß ich das als Newbie gleich wissen? Das lenkt mich doch nur von meinem konkreten Problem ab, mal irgendeine Reaktion auf irgendeine Aktion zu kriegen.)

    Zitat

    Wenn ich ein Problem allgemein Beschreiben kann, dann kann ich es besser erkennen wenn ich es antreffe.


    Habe ich ein brauchbares Modell für sowas im Kopf, wenn ich nur eine abstrakte Beschreibung des Patterns gelesen habe? Vielleicht. Kann ich ein sinnvolles Modell für etwas mir völlig unbekanntes aufbauen, indem ich das konkrete Problem studiere? Vielleicht. Deine Antworten (mein mentales Modell deiner Antworten!) auf diese Fragen scheinen mir zu allgemein und zu falsch zu sein.

    Zitat

    Abstraktion macht es moeglich das ich mir morgens
    Kafee machen kann, ohne jedes mal die einzelnen Schritte durchzugehen,
    die dafuer notwendig sind.


    (Hast du jeden Morgen eine andere Kaffeemaschine?) Ich hab nix gegen Abstraktion per se, wenn sie richtig angewendet wird. Ich hab was gegen Leute, die meinen ich würde die Bedienungsanleitung meiner Kaffeemaschine nie verstehen, ohne vorher ein allgemeines Buch über Kaffeemaschinenbedienungsmuster gelesen zu haben.

    Edit: Wobei "Kaffeemaschine" da noch viel zu konkret ist. Auf die Beziehung von Observer zu Swing umgemünzt ginge es im Buch vielleicht eher allgemeines Gebrabbel über Maschinen mit n verschiedenen Eingabesubstanzen, die daraus m verschiedene Ausgabesubstanzen produzieren.

    Zitat

    Was kuemmert es mich wer als erster da war?


    Gar nicht. Du blendest aus, daß die Leute auch ohne Patterns-Bücher irgendwie über die Runden gekommen sind. Und du scheinst deswegen leider zu folgern, daß es ohne Patterns-Bücher gar nicht oder nur sehr schwer geht. Ich habe darauf hingewiesen, daß ich diese Ansicht mit Hinblick auf die Geschichte nicht teile.

    Zitat

    Im uebrigen behauptet die GOF nicht, die Patterns in ihrem Buch erfunden zu haben.


    (Phew, da bin ich aber erleichtert, daß ich das auch nie behauptet habe.)

    Zitat

    Du brauchst also gar keine Buecher zum lernen?


    Ich habe gesagt, ich brauche kein Buch, das mir die Lösung meiner derzeitigen konkreten Aufgaben vorkaut, weil ich diese Lösungen aus meinem bisher angesammelten Wissen und meiner Erfahrung (ein verschleiertes Wort für "Patterns") und meiner Kenntnis der Problemdomäne synthetisiere.

    Zitat

    Woher weisst du das du etwas wirklich verstanden hast?


    Was heißt "wirklich verstehen"? Wenn ich ein Muster erkenne, das jemand in einem Buch beschrieben hat, was hat das mit meinem Verständnis zu tun? Sind solche philosophischen Fragen relevant, wenn es darum geht, meinen Job zu machen? (Nein.)

    *plantsch*

  • Du hast aber gesagt, man sollte über
    Observer lesen, bevor man mit Java GUIs programmiert, no? Ist die
    Beschreibung des Observer im GOF-Buch so mies?

    Ja. Das GoF ist ein guter Pattern Katalog aber eine sehr schlechte
    Einfuehrung in Design Patterns. In dem Buch das ich empfohlen hatte
    (Head First Design Patterns) werden die Patterns ausgiebig erklaehrt
    und diskutiert (auf eine etwas kindliche Weise muss man dazu
    sagen). HFDP verschlingt ein Programmierer mit Grundkentnissen + ein
    wenig OOP in unter einer Woche. Und es macht auch noch Spass.

    Abstraktion ist ein Werkzeug. Abstraktion
    kann zu high-level sein, wenn sie einem ohne Anwendungsbezug top-down
    eingetrichtert wird. (Hallo Mathe-LVAs.)

    Wenn einem eine Abstraktion "ohne Anwendungsbezug top-down
    eingetrichtert wird", das macht sie das nicht 'zu high level', sondern
    die Abstraktion wird einfach nur schlecht erklaehrt. In HFDP wird
    z.B. das Observer Pattern (unter anderem) anhand von Swing Events
    diskutiert.

    Abstraktion ist nicht etwas schlechtes, nur weil sie Detailkenntnisse
    nicht gleichermassen unbedeutend macht.


    muß ich das als Newbie gleich
    wissen? Das lenkt mich doch nur von meinem konkreten Problem ab, mal
    irgendeine Reaktion auf irgendeine Aktion zu kriegen.)

    Ich hab doch gar nicht gesagt das man Patterns als erstes Lernen
    sollte. Zu dem Zeitpunkt, an dem ich ein Pattern Buch empfohlen habe,
    hat man nach meinem vorgeschlagenen Plan bereits mind. 2 Buecher
    gelesen und kann bereits alle moeglichen praktischen Programme
    schreiben.

    Die Frage war ob man Swing bereits in seinem Erstlingswerk lernen
    sollte. Swing ist nun wirklich keine besonders wichtige
    Bibliothek. Ich habe sie (abgesehen fuer Antworten hier im Forum)
    seit Jahren nicht mehr verwendet.

    Gleich das zweite Buch auf meiner Liste (K&R in Phase II) enthaelt den
    Code von zahlreichen Programmen, die offensichtlich sehr nuetzlich
    sind, zumindest werden sie jeden Tag millionenfach benutzt. Der
    Studierende kann solche Programme bereits nach dem ersten Buch auf
    meiner Liste schreiben. Noch ganz ohne Design Patterns.

    (Hast du jeden Morgen eine andere
    Kaffeemaschine?)

    Ich muss eine ganze Reihe von Dingen machen bevor ich meinen Kaffee
    habe. Die abstrahiere ich allesamt zu einem einzigen Begriff. Ich
    denke mir "Ich moechte jetzt einen Kaffee machen", nicht "Ich moechte
    in die Kueche gehen, meinen Wasserbehaelter auffuellen, die Maschine
    starten ...".



    Gar nicht. Du blendest aus, daß die Leute auch ohne Patterns-Bücher
    irgendwie über die Runden gekommen sind.

    Die Frage ist ob sie mit dem Konzept Design Patterns besser ueber die
    Runden kommen. 'Irgendwie' sind wir auch mal ohne Feuer ausgekommen.
    Die Frage ist ob es was nuetzt wenn manche Menschen Patterns aus dem
    Code raussuchen und sie Katalogisieren. Du bist offenbar der Meinung
    das ist nicht der Fall, ich sage es ist extrem hilfreich. Zum
    Verstaendnis von Softwaredesign und vor allem zur Kommunikation.

  • Kann mir jetzt noch jemand bitte den "Compiler" erklären? wäre super nett.
    soviel ich weiß wird er benötigt um die sprache java umzuwandeln quasi zum auslesen. Meine Frage ist vielmehr jetzt, woher ich den Compiler bekomme bzw. wie ich dieses ding im Dos-Fenster öffne (wie ich bereits irgentwo gelesen habe).

    vielen dank.

    super forum hier :)

  • Falls du wirklich mit Java anfangen willst, musst du dir zuerst mal unter http://java.sun.com/javase/downloads/index.jsp das JDK runterladen und installieren.

    Danach schreibst du deine Java Programme mit einem Texteditor (für Windows würde ich jEdit empfehlen, unter Linux z.B. gEdit), speicherst sie und kompillierst sie dann mit dem Befehl "javac programm1.java" ... starten kannst du sie dann mit "java programm1"

    Hier findest du auch eine Anleitung für Windows:
    http://tosca.inflab.tuwien.ac.at/eprip/faq.do;j…D2324F9AC11C960

    lg Stefan

  • Falls du wirklich mit Java anfangen willst, musst du dir zuerst mal unter http://java.sun.com/javase/downloads/index.jsp das JDK runterladen und installieren.

    Danach schreibst du deine Java Programme mit einem Texteditor (für Windows würde ich jEdit empfehlen, unter Linux z.B. gEdit), speicherst sie und kompillierst sie dann mit dem Befehl "javac programm1.java" ... starten kannst du sie dann mit "java programm1"

    Hier findest du auch eine Anleitung für Windows:
    http://tosca.inflab.tuwien.ac.at/eprip/faq.do;j…D2324F9AC11C960

    lg Stefan

    Und vorher nicht vergessen PATH zum Verzeichnis zu speichern!

  • ich hoff, es ist in ordnung, dass ich hier gleich reinschreibe.

    ich möcht nämlich java wieder ein bisschen durchkauen und arbeite schon diverse bücher durch. aber da ist natürlich einiges erklärt usw., aber, wie es wahrscheinlich schon viele kennen, mangelts an beispielen und ich will ja nicht nur theoretisch arbeiten.

    deshalb wollt ich fragen, obs vielleicht irgendwo eine beispielsammlung von alten eprog-angaben gibt (meine hab ich leider irgendwie verschlamt) oder von software-engineering irgendwo ein paar angaben herumkullern.

    wäre super, wenn mir da jemand einen tipp geben könnte. :shinner:

    Lass das Vergangene nicht das Heute regieren,

    aber lass es dir in Zukunft ein guter Ratgeber sein.

  • danke dir für die schnelle antwort! hätt ich gar nicht gedacht, dass da so schnell was kommt :o.
    das ist ja eine tolle seite. da finde ich schon mal ein paar sachen, an denen ich mich testen kann. danke dir! :)

    Lass das Vergangene nicht das Heute regieren,

    aber lass es dir in Zukunft ein guter Ratgeber sein.

  • how to think like a computer scientist kann ich auch jedem ans herz legen. ebenfalls den rat eher mit einer höheren sprache wie etwa python oder ruby zu beginnen. ich kann aber auch nachvollziehen dass jemand der info studiert im ersten semester nicht unbedingt die motivation hat sich neben java auch noch gleichzeitig eine andere sprache anzueignen. wenn man aber selbst an die materie herangeht ist eine scriptsprache sicher empfehlenswert.

    aus eigener erfahrung würde ich auch php empfehlen. die sprache selbst gefällt mir rückblickend zwar nicht besonders toll aus unterschiedlichen gründen. aber eignet sich für anfänger eventuell recht gut.

    es gibt viele communities, man kann die sprache einfach in verbindung mit html verwenden und hat dadurch sehr schnell ansehnliche ergebnisse was zur motivation beitragen kann. die dokumentation auf php.net ist auch ziemlich umfangreich und bietet viele code beispiele. die syntax ist sehr c-ähnlich und ermöglicht dadurch einen recht einfachen umstieg auf andere sprachen mit c-ähnlicher syntax. man muss nichts kompilieren und muss sich dadurch eher mit laufzeitfehlern auseinandersetzen was sehr hilfreich sein kann um fehleranalyse und debugging zu meistern.

    sprachen wie ruby oder python die eine interaktive umgebung zur verfügung stellen können auch sehr gut zum verständnis beitragen wenn man sich nicht vor der kommandozeile scheut. so gesehn finde ich dass interpretierte sprachen einen komfortableren einstieg ermöglichen.

    das thema ist jedenfalls sehr interessant und viele wege führen nach rom. wie bereits erwähnt hat wohl jeder so seine eigenen ansichten wie man am besten einen zugang zum programmieren findet. im grunde läuft es aber wohl hauptsächlich darauf hinaus nicht die motivation zu verlieren. idealerweise setzt man sich immer kleine ziele die greifbar sind.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!