Facebook
Twitter
Google+
Kommentare
21

Lernt Java!?

Ok, ihr kennt mich von provokativen Überschriften und natürlich soll auch diese provozieren. Aber eigentlich meine ich es ernst. Ja ich weiß, das ist ein PHP Blog und wir sind alle PHP Entwickler und wollen das auch bleiben. Zumindest ist das bei mir so. Aber warum sollte ich dann Java lernen, fragt ihr euch? Eigentlich ganz einfach. (Anmerkung: Wer will kann jetzt im Hintergrund „Know your enemy“ von „rage against the machine“ anmachen)

Meine Theorie hat zwei Säulen, auf die sie sich stützt. Die erste ist der Spruch „Du kannst eine Sprache erst beherrschen, wenn du mindestens eine zweite Sprache kannst“ und die zweite ist ganz einfach „Java hat ein paar nette OOP Konzepte und ist PHP sehr ähnlich“. Jetzt muss ich das auch noch erklären, oder? Kein Problem.

Lerne eine zweite Programmiersprache. Bei mir hat es eine Weile gedauert, bis ich gemerkt habe, dass die meisten Probleme, die ich habe, gar keine PHP Probleme, sondern allgemeine Programmierprobleme sind. Ich glaube auch, dass ich fast jede OOP Sprache innerhalb eines Monats einigermaßen lernen könnte. Natürlich würde ich nicht so schnell so gut sein, wie ich es in PHP bin, aber eigentlich ist es doch in allen Sprachen das Gleiche. Zumindest sind die richtig fiesen Probleme in allen Sprachen gleich fies. Wer das Buch „Mythos Mann Monat“ kennt, der kennt vielleicht auch den Essay „No Silver Bullet„. Dort wird ein Teil meiner These aufgenommen. Also was bringt es hier Java zu lernen? Wir können besser zwischen Sprach- und essentiellen Problemen unterscheiden.

Der zweite, vielleicht noch wichtigere Grund, sind die Entwicklungsparadigmen hinter Java. Ich habe das Gefühl Java Code ist viel objektorientierter strukturiert. Man sieht viel mehr Muster in dem etwas programmiert wurde und man hält sich öfter an Standards. Meist ist man auch viel strikter an Vorgaben gebunden. Die Frameworks, die existieren sind sehr gut durchdacht, bis auf das kleinste in Objekte gekapselt und für die meisten Fälle vorbereitet. Ok, vielleicht übertreibe ich gerade, aber der meiste Java Code, den ich bis jetzt gesehen habe, war durch die OOP Brille betrachtet sauberer. Wenn man Java beherrscht, dann ist meistens das Verständnis von Objekten ein besseres. So … bevor ihr nun eure Fackeln anzündet und der Lynchmob loszieht noch eine kleine Ergänzung.

Wenn mein OOP gut genug ist, dann kann ich wieder zu PHP wechseln. PHP hat den große Vorteil, dass ich schön pragmatisch an Dinge rangehen kann. Ich muss nicht die OOP Lösung wählen, wenn es keinen Sinn macht. Wenn ich jetzt also OOP beherrsche, weiß ich auch, wann ich es besser nicht einsetzen sollte. Manchmal schießt man nämlich auch mit Kanonen auf Spatzen und das ist eines der ganz großen Probleme von Java (unbedingt lesen: „Why I hate frameworks„). Was ich also sagen will. Lerne die Regeln, um sie dann zu brechen (Lerne die Regeln, damit du sie richtig brechen kannst!, Dalai Lama). Seid selbstbewusst genug auch mal was nicht in OOP umzusetzen. Dafür müsst ihr aber OOP können, denn sonst wird es derzeit schwer.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

21 Comments

  1. Wenn sich Java und PHP kaum unterscheiden, ist der Effekt, eine neue Programmiersprache zu erlernen nicht groß. Um wirklich weiter zukommen und vor allem neue Denkweisen zu lernen sollte man ein anderes Programmierparadigma erlernen (z.B. funktionale oder logische Programmierung).
    Wenn es unbedingt eine andere objektorientierte Sprache sein soll, dann würde ich auch nicht Java wählen, sondern eher so was wie Eiffel – vor allem für Lernzwecke.
    Jedenfalls kann man das, was man in Java lernen könnte, auch sofort in PHP erlernen – nur erfordert das Disziplin. Aus Sicht des Lerneffekts ist der Unterschied weniger gravierend.

    Reply
  2. Da ich momentan beruflich genau diese Phase des Java-Lernens durchmache, kommt dieser Artikel wie gerufen. Ich persönlich finde, dass man durch Java etwas mehr in die OOP-Denkrichtung geschupst wird. Man kann sich eben nicht auf die prozudurale Ebene zurückziehen. Dadurch bekommt man auch mehr gefühl für Design Patterns und deren Nutzung. Erfahrene Kollegen sind hier natürlich von Vorteil.
    Als besonders interessant finde ich die Tools, die Java umgeben. Also Dinge wie junit, checkstyle, findbugs etc. Die PHP Varianten wurden hier ja auch vorgestellt, aber gefühlt sind die gerade jetzt in der PHP Welt angekommen.
    Ein extremer Unterschied zwischen Java und PHP sind mE auch noch die JSR und ich würde fast so weit gehen und sagen, dass dies PHP fehlt. Dadurch könnten bestimmte Komponenten austauschbarer gestaltet werden. Wäre doch toll, wenn man bspw Propel mit geringem Aufwand durch Doctrine ersetzen könnte, weil beide sich an eine PHP Persistence API hielten.

    just my 2 cents

    Reply
  3. Ich habe nach 2 Jahren PHP anfang dieses Jahres auch mit Java angefangen und mir ging es so das ich erst danach die OOP auch in PHP richtig sinnvoll eingesetzt habe. Kurz vorher hatte ich mir das PHP Design Patterns Buch gekauft und fast alle Beschriebenen Entwurfsmuster in Java wieder gefunden und so auch sehr schnell auch in eigenen Programmen umsetzen können, weil man in Java sehr gut sieht wo diese im Einsatz sind und wie gut sich dann auch solche APIs einsetzen lassen.
    Das man Java lernen soll um in PHP besser zu Programieren wusste ich übrigens vorher nicht das war nur ein netter nebeneffekt, Java hab ich aus anderen Gründen als neue Programmiersprache für mich erwählt.

    Reply
  4. Einige Jahre ist es schon her… als ich die Ausbildung und das Studium gleichzeitig gemacht habe.

    Wenn ich heute ein paar Jahre zurück blick, bleibt nur zu sagen: das war der beste Schritt!! … wenn ich mir überlege nur HTML, PHP, JavaScript und CSS in den Berufsschulen zu lernen würde mir doch ein großes Stück fehlen. Meiner Meinung nach schadet es nie den eigenen Horizont zu erweitern und irgendwann behaupten zu können: Hey… vor Jahren hatte ich mal mit Java experimentiert, aber ich bin etwas eingerostet.

    Ahja… noch ein Aufruf: lernt Ook! – http://de.wikipedia.org/wiki/Ook! ;))))

    Gruß,
    Luke

    Reply
  5. @Andre: Die Sprachen unterscheiden sich kaum, aber die Denkweise dahinter. Vorteil von Java ist auch, dass es viele hervorragende Bücher dazu gibt und sie bei Dingen wie statische Code-Analyse, Continuous Integration, Unit testing, … einfach einen Schritt voraus sind.

    Reply
  6. Java ist nicht „viel objektorientierter strukturiert“.
    Java ist „objekter“ strukturiert.
    In Java ALLES ist ein Objekt.

    Das ist nicht mit PHP. Aber PHP ist sehr nützlich auch, hosting ist einfacher und also wir haben sehr gute MVC frameworks.

    Reply
  7. „Lerne die Regeln, um sie dann zu brechen.“

    Mit einer kleinen aber entscheidenden Aenderung wuerde ich dem uneingeschraenktzustimmen:

    „Lerne die Regeln und dann sie dann zu brechen.“

    UM sie zu brechen muss ich sie nicht erlernen und wenig zielfuehrend waere es ausserdem. Aber der manchmal sinnvolle Bruch moechte bitteschoen auch gelernt sein.;)

    Reply
  8. Also noch eine Programmiersprache zu lernen bringt wohl nicht viel.
    Klar wenn man Java lernt neben PHP kann man wenigstens eine vernünftige Sprache, aber will man das als PHP Entwickler?

    Im Ernst: die Syntax einer zweiten Programmiersprache zu beherrschen zwingt zur Abstraktion vom Sourcecode und man gewinnt automatische einen Blick für das Wesentliche weil Fragen wie „ist echo schneller als print?“ keine Bedeutung mehr haben.

    Was wirklich sinnvoll ist: lernt eine Metasprache! Die liegen von der Abstraktion über PHP und Jave. Und ich bin immer wieder überrascht wie wenig damit gearbeitet wird.
    UML wäre zu nennen, aber auch Petrinetzen, Flowcharts, BPMN, IDEF etc.

    Reply
  9. +1 für diesen Beitrag
    Um gut, sinnvoll, effektiv und nachhaltig PHP programmieren zu können, sollte man Java können. Ich glaube auch, dass alle richtig guten PHP-Programmierer (die Framework- und Tool-Entwickler) alle Java beherrschen. Der Grund ist auch relativ einfach: PHP versucht bei Programmier-Paradigmen und Tools Java nachzueifern (natürlich alles immer auf einer kleineren Ebene).

    @Jan
    Auch in Java sind nicht alles Objekte. oder wo packst du sonst die Literal (int, boolean char, array usw.) hin? Aber ansich stimmt natürlich deine Aussage in Java ist (fast) alles ein Objekt.

    Reply
  10. Prinzipiell halte ich PHP eher für ne Skriptsprache, also müsste es ja eher heißen lernt mal eine richtige Programmiersprache 😉
    Ich musste herzlichst hierbei lachen „Ich habe das Gefühl Java Code ist viel objektorientierter strukturiert.“ das liegt daran, dass Java von Anfang an auf Basis der OO geschrieben wurde.
    Zwar wurden auch bei Java ein paar Sachen unsauber umgesetzt, aber es ist auf jedenfall besser gemacht als eine Sprache wie PHP der man später mal „weiches“ OOP beigebracht hat.
    Wenn ich privat mal was in PHP schreibe krieg ich das Kotzen, dass es so wenig Vorgaben, Frameworks whatever gibt, man kann alles halten/machen wie man will. Statt einen guten Weg gibts 1000 kleine Wege die Sache schlecht umzusetzen. Der einzige Vorteil darin liegt, dass man alles mal eben Quick and Dirty machen kann.
    Von meinem Standpunkt aus kann ich es nur begrüßen, dass du die Meinung vertrittst eine vernünftige OO Sprache zu lernen (ich pers. empfehle ja ObjectPascal/Delphi und dann Java). Wenn man einmal das Prinzip des OOP verstanden hat ists wirklich so: Kennst du eine Sprache kennst du jede Sprache 🙂

    Reply
  11. Ich persönlich finde, man sollte sich so schnell wie möglich von eine Sprache trennen – damit meine ich nicht, das man nichts mehr in der Sprache schreiben sollte, sondern das man Literatur nicht mehr „für“ diese Sprache holt und liest. Denn nach dem Grundverständnis (Standard-Funktionen, Libraries, Syntax, Eigenarten) kommt der Part, der in jeder Sprache gleich ist: Best Practices. Und da ist es auch egal ob OOP oder ein anderes Paradigma … denn du hast es schon richtig gesagt: Die meisten Probleme sind gar nicht Sprach-Spezifisch 🙂

    Reply
  12. Du hast bestimmt Recht: Die meisten PHP Bücher, die auf die OO eingehen sind oftmals von Menschen, die aus der Java Welt kommen, geschrieben worden. Ich habe zumindest keines hier, wo das nicht der Fall wäre. Ich habe aber auch im Gegenzug ungefähr doppelt so viele Java als PHP Bücher in meinem Regal.

    Wir hatten damals mit C angefangen, danach kam Java. Das ist der größte Fehler, den man beim Erlernen von Programmiersprachen machen kann, denn zuerst eine prozedurale Sprache zu lernen, um später auf eine OO umzusteigen kann dir echt Probs mit dem Verständnis bereiten. Zumindest war das bei mir so. Mittlerweile hat das das Unterrichtsministerium auch verstanden und die Lehrpläne umgestellt: Zuerst Java, danach der Rest.

    Reply
  13. Bei mir war es etwa die Reihenfolge: Basic, Prolog, VisualBasic, (Turbo)Pascal, Delphi, PHP3, PHP4, .NET/C#, Java, PHP5, Lisp, Perl, Python. Es gab einfach für jede Zeit die richtige Sprache. Die (Basis-)Probleme blieben weitestgehend die gleichen und die Lösungen wurden mit der Zeit eleganter.

    Ich rate JEDEM Programmierer egal welcher „Muttersprache“ dazu mindestens 1-2 andere möglichst fremde Programmiersprachen zu lernen und (wichtig) deren Gebrauch auch zu pflegen. Auch als Java-Programmierer sollte man mal nen Abstecher nach C# oder Delphi gemacht haben. Und als PHP-Programmierer liegen ja Pyhton, Perl und Ruby nicht weit um mal was ähnliches auszuprobieren.

    Reply
  14. Die Kommentare von Bastian (#15) und unset (#13) treffen den Punkt schon ziemlich genau.
    Ob man C#, Java oder PHP programmiert ändert nichts daran, dass es das gleiche Paradigma ist. Nach dem Erlernen der Syntax – und das ist mit Sicherheit der einfachste Part – geht es um das Paradigma, um Probleme zu lösen und diese Problemlösungen in Quellcode auszudrücken. Letzteres ist wieder trivial, während das Entwickeln jener Lösungen die eigentliche Arbeit darstellt. Und gerade hier geht es darum, seinen Horizont zu erweitern und das schafft man nicht, indem man von Java auf C# oder von PHP auf Java wechselt, sondern indem man seine Perspektive wechselt, d.h. ein anderes Programmierparadigma (abseits vom imperativen) wählt.
    Man kann viel von der Umgebung dieser Programmiersprachen lernen, aber im Endeffekt deprimiert es nur, wenn man sieht, dass andere Programmiersprachen ein größeres und besseres Repertoire an Tools haben, die es in PHP nicht gibt.

    Ich bin jedenfalls der festen Ansicht, dass man, um guten PHP-Code schreiben zu können, nicht Java beherrschen, sondern sehr diszipliniert sein muss. Möglicherweise ist Java also nur eine gute Disziplinierungsmaßnahme. 😉

    Reply
  15. Irgendwie hast du Recht, irgendwie auch nicht.

    Ich habe jetzt knapp einen Monat in Java Paint nachprogrammiert. Davor hatte ich absolut keine Java-Kenntnisse.
    Natürlich lernt man dadurch die OOP ein bisschen besser kennen. Geht mir auch so, zumindest setzte ich jetzt vermehrt auf Interfaces, wo ich früher gedacht habe „hmm, brauchst du nicht“.

    Warum das „irgendwie auch nicht“?
    Weil Java und PHP doch einen sehr großen Unterschied haben. Java ist nicht an irgendwelche Requests gebunden. Daher bestehen die einzelnen Objekte im Gegensatz zu PHP auch viel länger.

    Würde ich in PHP jetzt so streng wie in Java arbeiten, würden die meisten Objekte vllt. im ganzen Skript 0 bis 1 mal benutzt werden.

    Meine Meinung 😉
    Simon

    Reply
  16. Klar, durch PHP werden gewisse Problemdomänen (z.B. Desktop-Anwendungen) nur unzureichend abgedeckt. Dieser Aspekt wurde bisher vernachlässigt, ist aber auch relevant, da man deshalb andere Ansätze ausprobieren und schließlich neue Erkenntnisse gewinnen kann. Vor allem für PHP-Entwickler, die fast ausschließlich im Web arbeiten, ist das sehr interessant und hilfreich.

    Reply
  17. Hallo,

    „Lernt Java!“, „Know your enemy“ sollte mann wirklich jedem PHP Programmierer nahe legen. Dann merkt der PHP’ler, das Java nicht wirtschaftlich genung ist. Die Entwicklung von Applikationen, insbesondere im Web Bereich, dauert einfach um ein Vielfaches länger als in PHP. (ja ich weiß, bei anderen Umgebungen bsp. Desktop lässt man von PHP besser gleich die Finger weg)

    Grüße

    Loaden

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen