De PHP a Java. ¿Algún consejo?

He estado haciendo desarrollo de aplicaciones web durante los últimos 3 años en PHP. Ahora estoy a punto de darle una oportunidad a Java. Mi último uso del lenguaje fue hace casi 8 años y era principalmente académico.

Estoy razonablemente familiarizado con el modelo de objetos de PHP (versión 5) y he codificado casi exclusivamente en OO. Ahora me gustaría transportar esa experiencia y usarla para desarrollar en Java.

De donde vengo

  • Linux como escritorio y servidor
  • Complementos Vim / gVim + como editor
  • MySql para db
  • apache httpd
  • experiencia con un montón de frameworks de PHP, siendo Zend + Doctrine los que uso más

Lo que obtuve hasta ahora sobre un cambio a Java:

  • Necesito un IDE: IntellijIDEA, NetBeans o Eclipse
  • Necesito elegir un marco de desarrollo. Algunos nombres recurrentes: Spring MVC, stripes, wicket.

Ahora necesito una idea que podría ayudar a hacer esta transición más fluida. Pero por la forma en que la gente habla de eso, Java parece ser una bestia completamente nueva con su propio ecosistema. Parece que cambiarse a Ruby o Python sería más fácil, lo cual es curioso ya que, cuando lo miro, Java conceptualmente parece ser lo más parecido a PHP, aunque más estricto y precomstackdo.

Por extraño que pueda parecer, muy pocas personas han documentado públicamente su experiencia de tales movimientos. He buscado en google, amazon y stackoverflow preguntas similares y los resultados me dejan desear. Simplemente no puedo creer que necesite comenzar igual que un novato si quisiera ser productivo como desarrollador web en Java rápido.

Alguien puede responder, pero creo que las personas con alguna experiencia valiosa en ambos idiomas enriquecerían más esta discusión.

  • ¿Qué te ayudó a ponerte en marcha rápidamente en Java?
  • ¿Qué conceptos están omnipresentes en Java y ausentes de PHP y viceversa?
  • Algunas trampas para los desarrolladores de PHP van a Java.
  • ¿Cuánto tiempo antes de que sintiera que la transición estaba completa?

No trataría de aprender un IDE al mismo tiempo que aprendía un idioma. Una transición más fácil sería atenerse a su shell y al editor de texto habitual, y utilizar las siguientes herramientas compatibles con el shell:

  • ant, para organizar su proyecto, ejecutando conjuntos de pruebas automatizadas, comstackciones incrementales
  • BeanShell para pruebas interactivas, probando cosas rápidamente
  • Un truco rápido: javap desde la línea de comandos dará firmas de métodos para cualquier clase en la biblioteca estándar. Similar a php -r pero da más información desde que se tipea Java.

La documentación en línea para Java es precisa, profesional y consistente en tono y formato. A diferencia de PHP, donde todas las funciones están en un espacio de nombre plano, las bibliotecas estándar en Java son jerarquías de clase. Debes conocer bien la biblioteca estándar, lo que significa conocer jerarquías + responsabilidades : por ejemplo, debes saber que java.util.List es una subinterfaz de java.util.Collection con la adición de un concepto de entradas ordenadas. Con esa información en tu cabeza, una búsqueda en google de java.util.List te llevará al Javadoc para la clase, y el Javadoc te dirá las firmas de método exactas y te vinculará con una selección de implementaciones concretas.

Algunas distinciones misceláneas:

  • Las cadenas son secuencias de caracteres en lugar de secuencias de bytes. Absolutamente la forma correcta de hacerlo.
  • Los sistemas producen y consumen flujos (de bytes o caracteres) en lugar de búferes de bytes. Por ejemplo, si desea filtrar el resultado en PHP, una práctica estándar es pedir ob_get_contents para un búfer de bytes y luego transformar todo el búfer. En Java, agrega un filtro a su servlet que transforma el resultado en un byte o carácter a la vez. Es un poco imponente trabajar con él inicialmente, pero es más simple y más parecido a Lego cuando te acostumbras: tu procesador de flujo no tiene que saber de dónde vienen las cosas ni a dónde van.
  • Casi todo lo útil es una interfaz, y crear una instancia de una interfaz puede ser complicado, no estandarizado y no siempre bien documentado. En PHP, puede new DOMDocument() XML con el new DOMDocument() . En Java, org.w3c.dom.Document es una interfaz, por lo que new () no funcionará. Javadoc es muy preciso sobre cómo se comportan las instancias de interfaz una vez que aparecen, pero puede ser bastante tímido y mojigatos cuando intenta averiguar cómo nace realmente un objeto. Muy a menudo, tendrás que buscar tutoriales y ejemplos de código y copiar y pegar un trozo de repetición que te brinde una instancia de DOMDocument o java.sql.Connection o lo que sea. Una razón por la cual los frameworks como Spring son populares es porque separan el feo código de creación de objetos y te presentan un mundo en el que las implementaciones de interfaces están mágicamente allí.

De hecho, cambié en la dirección opuesta. Descubrí que Java funciona muy bien en una gran empresa en la que podría estar trabajando en un único componente y entregárselo a otra persona que integra ese componente en un sistema más grande, que luego se empaqueta y se entrega a un equipo de operaciones separado, eso es donde toda esta indirección y configurabilidad (abstracciones de tipo FactoryBuilderFactory , archivos web.xml, etc.) tiene sentido y hace algo útil. En una compañía pequeña donde los progtwigdores son el personal de operaciones, Java es mucho más trabajo. Con Java, tendrá que acostumbrarse a conceptos como iniciar el proceso de Java, monitorear el proceso de Java para asegurarse de que no se mueva, monitorear el proceso de Java para asegurarse de que no entre en estado de coma, sino que esté vivo. no responde, apaga y reinicia el proceso de Java con una interrupción mínima cuando está actualizando el código, etc., etc. Si tiene personal de operaciones separado, está bien, es su trabajo, son muy buenos en eso. Si eres progtwigdor, cuidar un proceso de Java puede ser una distracción y difícil de hacer bien.

Comience con el tutorial de Java

http://java.sun.com/docs/books/tutorial/getStarted/index.html

Entonces ve a comprar Head First Java

http://oreilly.com/catalog/9780596004651

Te pondrá en marcha rápidamente en el idioma que es esencial independientemente de lo que quieras hacer.

Estrictamente hablando, no necesita un IDE para trabajar en Java. He codificado mucho en Java durante más de una década (y en gran medida en otras cosas durante más de 25 años), y no me gustan mucho los IDEs. Tal vez ese indicador implícito de mi edad sea parte del problema 🙂 Es una compensación, como cualquier otra cosa.

Conectaré Stripes como un marco simple y agradable, pero sobre todo porque es relativamente pequeño y de scope limitado. Los grandes frameworks como Spring son ecosistemas de “sumidero de cocina”, y aprender Java con uno de esos frameworks puede suavizar algunas de las partes difíciles pero deja misteriosos otros aspectos básicos. Nuevamente, es una cuestión de preferencia personal.

Es bueno tener a alguien cerca que conozca el idioma. Ah, y hasta ese punto, hazte amigo de la documentación de la API de Java. A medida que avanzan las plataformas, la API de Java tiene sus altibajos, pero en su mayor parte la documentación es al menos bastante completa y bastante precisa.

También querrás familiarizarte mucho con JSP y su relación con las architectures de servicios web de Java y Java, porque eso será lo que más te relacionará con tu experiencia PHP (creo).

El mejor movimiento que hice fue de Java a PHP.

Cuidado con la complejidad Principalmente, la clave del gran software es la simplicidad, y es por eso que PHP combinado con un buen framework mata a Java.

Con Java, corre el riesgo de convertirse en esclavo de su contenedor y marco de servlets. Elija el marco más simple y flexible. Los controles y las tags personalizadas son el diablo. Perderá días aprendiendo cosas que fueron diseñadas para acelerar el desarrollo, pero que en última instancia son demasiado complejas e inflexibles. Java ralentizará el desarrollo debido a: complejidad, comstackción y tipos estáticos. Llegarás a detestar las excepciones del puntero nulo.

Editar: Herramientas a un lado, Java y PHP son lenguajes de estilo “C” muy similarmente estructurados. Mucho más que Python o Ruby. Es el tipado estático y las herramientas complejas que hacen que Java sea tan extraño.

Esto parece ser un post viejo, pero oye …

Pasé de C # a Java y acabo de comenzar un rol y me estoy moviendo de Java a PHP …

Primero: Java es increíble 🙂

  • para que su IDE obtenga Eclipse, una vez que se acostumbre, nunca tendrá que abandonar el IDE (aparte de los bits de SQL). Gestiona proyectos muy bien, puede descargar una gran cantidad de complementos, como los complementos SVN. Le permite ejecutar un servidor Tomcat dentro de Eclipse y generará errores directamente en la consola de Eclipse.

  • para el marco, utilicé Struts y Tiles y Torque para el ORM, me tomó un tiempo entenderlos, pero una vez que hicimos amigos, no puedo imaginarme ninguna otra forma de desarrollo. ¡Aunque me imagino que para un proyecto pequeño sería mucho sobrecarga!

  • de acuerdo con una publicación anterior: obtenga HEADFIRST JAVA, así es como aprendí y lo usé para muchos otros idiomas, tienen un método visual de aprendizaje que es mucho más fácil que los libros de texto puros, bueno para mí de todos modos. Estuve despierta y corriendo en un día y confiada dentro de un par de semanas, supongo, pero siempre aprendiendo 🙂

  • yip Java es estricto, pero a ti te encanta, porque perderme el PHP es un poco extraño.

  • también necesitarás descargar Tomcat para ejecutar tus bits de Java, es fácil de ejecutar.

  • Java organiza todas tus clases muy bien, nada de esto ‘require_once (some_text_file.php)’ basura, solo ‘import myClass’ y listo.

  • Una de las cosas que me molesta es que no hay forma de saber qué bibliotecas JAR NO estás usando, así que después de un par de años trabajando en un sitio, tu carpeta lib puede volverse un poco desordenada, especialmente si varias personas están eliminando y agregando funcionalidad.

Podría seguir.

Pablo

Recomiendo golpear JavaBat aquí

Te dará algunas buenas ideas. Me tomó 1 año sólido en un entorno profesional para obtener una comprensión muy firme de Java y he podido moverme a otros lenguajes de OO con bastante facilidad una vez que tuve los pensamientos golpeados en mí.

Para mi caso, solo traté con gran cantidad de encoding de procedimientos en el php, así que saltando a Java, no solo encontré todo para ser más detallado y menos permisivo que php (pero ahora sé por qué debe ser así, y yo amo mucho a Java) pero aprendí a organizar mi código en clases y también aprendí el eclipse. IDE tomó aproximadamente 1.5 años de retoques, prueba y error, hacer cosas por mi cuenta (principalmente aplicaciones de swing).

Creo que solo crear cosas por tu cuenta, utilizar la gran cantidad de bibliotecas de Java para crear tus propias cosas es divertido, es la forma más rápida. También creo que podría haber ahorrado más tiempo leyendo los tutoriales de java sun a fondo. Ahorrar aún más tiempo es asegurarse de haber realizado una búsqueda exhaustiva de bibliotecas que eviten “reinventar la rueda”.

¡Buena suerte!