web-dev-qa-db-fra.com

De PHP à Java. Aucun conseil?

Je développe des applications Web depuis 3 ans en PHP. Je suis maintenant sur le point d'essayer Java. Ma dernière utilisation de la langue remonte à presque 8 ans et était principalement académique.

Je connais assez bien le modèle objet de PHP (version 5) et je code presque exclusivement en OO. J'aimerais maintenant transmettre cette expérience et l'utiliser pour la développer en Java.

D'où je viens:

  • linux en tant que bureau et serveur
  • Vim/gVim + plugins en tant qu'éditeur
  • MySql pour db
  • Apache httpd
  • expérience avec un tas de PHP frameworks, Zend + Doctrine étant ceux que j'utilise le plus

Ce que j'ai recueilli jusqu'à présent au sujet d'un déménagement vers Java:

  • J'ai besoin d'un IDE: IntellijIDEA, NetBeans ou Eclipse
  • Je dois choisir un cadre de développement. Quelques noms récurrents: Spring MVC, stripes, wicket.

Maintenant, j'ai besoin d'un aperçu qui pourrait aider à rendre cette transition plus douce. Mais de la manière dont les gens parlent, Java semble être une toute nouvelle bête avec son propre écosystème. Il semblerait que passer à Ruby ou à Python serait en fait plus simple, ce qui est curieux, car j’estime que Java semble conceptuellement le plus proche de PHP, bien que plus strict et précompilé.

Aussi étrange que cela puisse paraître, très peu de personnes ont publiquement documenté leur expérience de tels mouvements. J'ai cherché google, Amazon et stackoverflow pour des questions similaires et les résultats laissent à désirer. Je ne peux tout simplement pas croire que je devrais commencer comme un novice si je voulais être productif en tant que développeur Web rapide en Java.

Tout le monde est le bienvenu pour répondre, mais je pense un peu que les personnes ayant une expérience précieuse dans les deux langues enrichiraient le plus la discussion.

  • Qu'est-ce qui vous a aidé à démarrer rapidement en Java?
  • Quels concepts sont omniprésents en Java et absents de PHP et vice versa?
  • Quelques pièges pour PHP développeurs utilisant Java.
  • Combien de temps avant de sentir que la transition était terminée?
45
Michael Ekoka

Je n'essaierais pas d'apprendre un IDE en même temps que d'apprendre une langue. Une transition plus facile consisterait à vous en tenir à votre shell et à votre éditeur de texte habituel et à utiliser les outils conviviaux pour Shell suivants:

  • ant, pour organiser votre projet, exécuter des suites de tests automatisées, des compilations incrémentielles
  • BeanShell pour des tests interactifs et des tests rapides
  • Une astuce: javap de la ligne de commande donnera des signatures de méthode pour toutes les classes de la bibliothèque standard. Identique à php -r mais donne plus d'informations depuis que Java est saisi.

La documentation en ligne pour Java est précise, professionnelle et cohérente dans le ton et le format. Contrairement à PHP où toutes les fonctions sont regroupées dans un seul espace de noms plat, les bibliothèques standard en Java sont des hiérarchies de classes. Vous devez vous familiariser avec cette bibliothèque standard, ce qui signifie connaître hiérarchies + responsabilités : par exemple, vous devez savoir que Java.util.List est une sous-interface de Java.util.Collection avec l'ajout d'un concept d'entrées ordonnées. . Avec cette information dans votre tête, une recherche Google pour Java.util.List vous mènera à la Javadoc de la classe, et la Javadoc vous indiquera les signatures de méthodes exactes et vous liera à une sélection d'implémentations concrètes.

Quelques distinctions diverses:

  • Les chaînes sont des séquences de caractères plutôt que des séquences d'octets. Absolument la bonne façon de le faire.
  • Les systèmes produisent et consomment des flux (d'octets ou de caractères) plutôt que des tampons d'octets. Par exemple, si vous souhaitez filtrer la sortie en PHP, il est généralement demandé de demander à ob_get_contents un tampon d'octets, puis de transformer tout le tampon. En Java, vous ajoutez un filtre à votre servlet qui transforme la sortie en octet ou en caractère à la fois. Travailler avec est un peu imposant au début, mais quand on s'y habitue, c'est plus simple et plus semblable à Lego - votre processeur de flux n'a pas besoin de savoir d'où viennent les choses et où elles vont. 
  • Presque tout ce qui est utile est une interface et la création d'une instance d'interface peut être délicate, non normalisée et pas toujours bien documentée. En PHP, vous pouvez vous familiariser avec XML avec new DOMDocument(). En Java, org.w3c.dom.Document est une interface, donc new () ne fonctionnera pas. Javadoc est très précis sur le comportement des instances d'interface une fois qu'elles ont été créées, mais il peut être assez timide et prude de chercher à savoir comment un objet est réellement né. Très souvent, vous devrez chercher des tutoriels et des exemples de code et copier-coller un morceau de passe-partout qui vous donne une instance de DOMDocument ou Java.sql.Connection ou autre. L'une des raisons pour lesquelles les frameworks tels que Spring sont populaires est qu'ils séparent le code de création d'objet laide et vous présentent un monde où les implémentations d'interface sont là, comme par magie.

J'ai effectivement basculé dans la direction opposée. J’ai trouvé que Java fonctionnait très bien dans une grande entreprise où vous travaillez peut-être sur un seul composant, en le confiant à une autre personne qui intègre ce composant dans un système plus grand, qui est ensuite conditionné et transféré à une équipe d’exploitation distincte. où toute cette indirection et cette configurabilité (les abstractions de type FactoryBuilderFactory, les fichiers web.xml, etc.) ont un sens et sont utiles. Dans une petite entreprise où les programmeurs sont le personnel des opérations, Java est une tâche bien plus ardue. Avec Java, vous devrez vous familiariser avec des concepts tels que le démarrage du processus Java, le suivi du processus Java pour s’assurer qu’il reste en place, le suivi du processus Java pour s’assurer qu’il ne tombe pas dans le coma où il est toujours en vie. ne répondez pas, arrêtez et redémarrez le processus Java avec un minimum de perturbations lorsque vous mettez à jour du code, etc., etc. Si vous avez un personnel d'opérations distinct, c'est bien, son travail lui convient parfaitement. Si vous êtes un programmeur, garder un processus Java peut être distrayant et difficile à bien faire. 

22
user8599

Commencez avec le tutoriel Java

http://Java.Sun.com/docs/books/tutorial/getStarted/index.html

Alors allez acheter Head First Java

http://oreilly.com/catalog/9780596004651

Cela vous permettra de parler assez rapidement de la langue, ce qui est essentiel, peu importe ce que vous voulez faire.

8

À proprement parler, vous ne devez pas un IDE pour travailler en Java. Je code beaucoup en Java depuis plus de 10 ans (et sur d’autres sujets depuis plus de 25 ans) et je n’aime pas beaucoup les IDE. Peut-être que cet indicateur implicite de mon âge fait partie du problème :-) C'est un compromis, comme toute autre chose.

Je vais brancher Stripes dans un cadre simple et sympa, mais c'est surtout parce qu'il est relativement petit et limité. Les grands frameworks tels que Spring sont des écosystèmes "d'évier de cuisine" et l'apprentissage de Java avec l'un de ces frameworks peut atténuer certaines des difficultés, tout en laissant mystérieux d'autres aspects fondamentaux. Encore une fois, c'est une question de préférence personnelle.

C'est bien d'avoir quelqu'un autour de qui connaît la langue. Oh, et à ce point, faites un ami de la documentation de l'API Java. En ce qui concerne les plateformes, l’API Java connaît des hauts et des bas, mais dans l’ensemble, la documentation est au moins assez complète et précise.

Vous voudrez également vous familiariser avec JSP et ses relations avec les architectures de services Web Java et Java, car ce sera ce que vous lierez le plus directement à votre expérience PHP (je pense). .

8
Pointy

Le meilleur coup que j'ai fait était de Java à PHP.

Attention à la complexité. La simplicité d’un bon logiciel est avant tout la clé, et c’est pourquoi PHP, combiné à un bon framework, tue Java. 

Avec Java, vous risquez de devenir un esclave de votre conteneur de servlets et de votre framework. Choisissez le cadre le plus simple, le plus flexible. Les contrôles et les balises personnalisées sont le diable. Vous allez perdre des journées à apprendre des choses conçues pour accélérer le développement, mais qui sont finalement trop complexes et inflexibles. Java ralentira le développement pour les raisons suivantes: complexité, compilation et types statiques. Vous viendrez à détester les exceptions null pointeur.

Edit: en dehors des outils, Java et PHP sont des langages de style "C" très similaires. Beaucoup plus que Python ou Ruby. C'est le typage statique et les outils complexes qui rendent Java si étranger.

5
rick

Je recommande de frapper JavaBat à ici

Cela vous donnera de bonnes idées. Il me fallut une année solide dans un environnement professionnel pour maîtriser parfaitement Java et j’ai été capable de passer assez facilement à d’autres OO langues une fois que mes pensées me sont devenues.

2
Woot4Moo

Cela semble être un peu un vieux post, mais bon ...

Je suis passé de C # à Java et je viens juste de commencer un rôle et je passe de Java à PHP ...

Tout d'abord: Java est génial :)

  • pour votre IDE get Eclipse, une fois que vous y êtes habitué, vous n’avez jamais à quitter le IDE (à l’exception des bits SQL). Il gère très bien les projets, vous pouvez télécharger d’autres plugins, tels que les plugins SVN. Il vous permet d’exécuter un serveur Tomcat dans Eclipse et d’envoyer les erreurs directement à la console Eclipse.

  • pour le framework, j'ai utilisé Struts and Tiles and Torque pour l'ORM, il m'a fallu un certain temps pour les comprendre, mais une fois que nous nous sommes fait amis, je ne peux imaginer aucune autre façon de se développer. Bien que j'imagine que pour un petit projet, ce serait beaucoup de frais généraux!

  • je suis d'accord avec ce qui précède - obtenez HEADFIRST Java, c'est comme ça que j'ai appris et que je l'ai utilisé pour beaucoup d'autres langues, ils ont une méthode visuelle d'apprentissage beaucoup plus facile que les manuels scolaires purs - bien pour moi de toute façon. J'étais opérationnel en une journée et confiant après quelques semaines, mais j'apprends toujours :)

  • yip Java est strict, mais on en vient à adorer ça, pour moi, lâcher PHP est un peu bizarre.

  • vous aurez également besoin de télécharger Tomcat pour exécuter vos bits Java, il est facile de s’exécuter.

  • Java organise très bien toutes vos classes, aucune de ces ordures 'require_once (some_text_file.php)', juste 'import myClass' et c'est parti.

  • une des choses qui me dérange, c’est qu’il n’ya aucun moyen de dire quelles bibliothèques JAR vous n’utilisez PAS, donc après quelques années de travail sur un site, votre dossier lib peut devenir un peu brouillon - surtout si plusieurs personnes la suppriment et ajout de fonctionnalités.

Je pourrais continuer.

Paul

2
Paul

Pour mon cas, je n’ai traité qu’avec beaucoup de codage procédural sur le php, alors j’ai sauté en Java, non seulement j’ai trouvé que tout était plus verbeux et moins indulgent que le php (mais je sais maintenant pourquoi cela doit être ainsi, et je j'aime beaucoup Java), mais apprendre à organiser mon code en classe et à apprendre Eclipse IDE a pris environ un an et demi de bricolage, de tâtonnements et d’erreurs, réalisant des choses par moi-même (principalement des applications swing). 

Je suppose que créer simplement des choses par vous-même, utiliser le grand nombre de bibliothèques Java disponibles pour construire vos propres choses est amusant, c'est le moyen le plus rapide. De plus, je pense que j'aurais pu gagner plus de temps en lisant attentivement les tutoriels Java Sun Pour gagner encore plus de temps, vous devez effectuer une recherche en profondeur des bibliothèques empêchant de "réinventer la roue". 

Bonne chance!

0
KJW