Tecnologías Web: ¿Con cual inicio?

Hace años que tuve mi primer contacto con la creación de contenido web con el gran HTML, conforme avanzo el tiempo fui metiendo mano en otras cosa pues yo tenia interés en un verdadero lenguaje de programación, aunque en ese entonces no lo sabia a ciencia cierta. Entonces, le dije adiós a mi precoz encuentro con el diseño web. Paso el tiempo y en la universidad nos dieron el gran tema de programación web bajo el manto del tan amado PHP. Yo desde tiempo atrás había escuchado de este lenguaje y observaba que todos los de la carrera lo alababan con gran entusiasmo, no solo los de mi generación sino los de otras, siempre he sido de los que van contra la corriente así es que yo le di la espalda al tal PHP y en el curso me limitaba a realizar solo lo que pedían y nada mas. Total, que no aprendí gran cosa sobre programación web.

Tiempo después (osea en la actualidad) me encuentro con que muchos de mis compañeros se están volviendo una chuchas cuereras para el PHP y en la programación web en general, pero yo no me quiero quedar atrás así es que me puse a investigar que podía hacer y dado que mis lenguajes preferidos son Java y Python: me encontré que en Python esta Django con criticas bastantes positivas y en Java resulta que hay muchas cosas así es que no se que hacer. Se que en Java lo básico son los JSP, Servlets y otras pócimas.

Como resultado estoy en un dilema. No se cual es mejor para iniciar en aplicaciones web, este sitio es de Java por lo que ustedes pueden darme respuestas certeras sobre este pero si de casualidad conocen Django pues acepto todos los comentarios sobre este ultimo.

Perdón por haberme ido por las ramas y escribir mas de lo necesario, pero sentí que se vería muy feo solo una preguntilla y nada mas.
Espero sus consejos y comentarios. Gracias y saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de jasistemas

Pues con Java + eclipse, o

Pues con Java + eclipse, o bien con .net, a mi me gusta mas .net pero si un cliente requiere algo con php o java trato tambien de resolverlo.

Imagen de santos.r09

Empieza por los Conceptos

Yo te recomendaría que inicies entendiendo bien los conceptos y las buenas prácticas de programación, al final, el ambiente que elijas para hacer tus desarrollos va a ser lo de menos; Empieza por comprender los conceptos básicos de POO (Herencia, polimorfismo, encapsulamiento, alta cohesión, bajo acoplamiento, etc.), conoce y entiende los principales patrones de diseño, el primero que te recomiendo el MVC, aprende a separar en capas tu proyecto(DAO, services y model ) y como comunicarla por medio de interfaces, investiga el Diseño Orientado a Interfaces; utiliza Loggers en lugar de System.ou.println(), utiliza pruebas unitarias. Por el momento eso es lo que se me viene a la mente; ahora si requieres una opinión sobre que IDE de desarrollo usar, yo te recomendaría que utilices Eclipse, porque muchos otros IDE's estan basados en Eclipse (ej: Spring Tool Suite, ADT(Android), etc.). Eso es lo que te puedo decir basándome en mi corta experiencia.
Saludos José Manuel.

Java se volvió muy popular y

Java se volvió muy popular y como consecuencia se crearon decenas de frameworks web, todos con diferentes características y tanta oferta hace difícil la decision.

Puedes revisar Spring MVC parte del Spring framework:

Imagen de sr.bug

Investiga sobre

JSF - PrimeFaces

Imagen de ElderMael

JSF si no sabes JavaScript, Spring MVC si ya lo sabes

JSF es una buena opción si quieres empezar rápido. Es tan fácil como escribir algo de HTML con tags nuevos y algo de Expression Language (e.g. #{algunBean.algunMetodo}); Primefaces es una especie de wrapper sobre jQuery UI asi que casi casi vas a tener un buen UI desde cero y prácticamente no necesitas saber JavaScript.

El detalle es cuando necesitas algo que no te da Primefaces o JSF. Tendrás que meterte a moverle a JavaScript y leer documentación arcana sobre como modificar o crear tus propios Widgets y la curva de aprendizaje es muy alta si quieres hacer algo complejo.

Ahora que si ya sabes bien JavaScript y lo que realmente necesitas es puramente Backend, yo me inclinaria por Spring MVC porque es muy flexible y fácil de aprender si ya tienes conocimiento del protocolo HTTP y esas cosas.

Variedad y más variedad

En Java los hay desde simplistas hasta complejos... desde micro-frameworks hasta frameworks fullstack. Y por tanto es muy difícil elegir.

Si a esto le agregas que cada parte del stack puedes hacerla con diferentes frameworks (ej. la persistencia con Hibernate, la vista con Thymeleaf, los controladores con Spring, etc.) es complicado.

Si lo que buscas es algo parecido a Django, creo que la mejor opción que tienes sería Yalp, Yalp es justo lo mismo que Play 1.x, solo que la rama 1.x de Play! dejó de ser prioridad al aparecer Play 2; pero para desarrollo web general es muy buen framework.

Otra es que quizá te guste más hacer partes aisladas Java tiene Spark que es muy parecido a Flask en Python.

Elije el que mas te guste.

Hola Jose mira deja te comento los que me hizo que me decidira por Java.

Hace varios años entre a un diplomado de empredurismo tecnologico, por que mi idea era desarrollar aplicaciones web para comercializarlas, yo sabia desarrollar en PHP (Tengo usandolo 14 Años) y bueno pensaba desarrollar las aplicaciones en este lenguaje y venderlas (despues de todo de
eso vivo.).

Asi que esta puede ser una razón por la que quiza te decidas a no escojer PHP.

De java no te quiero decir mucho mas por que apesar de que llevo 2 años desarrollando en Java, para nada soy experto.

En cuanto al framework Java pues depende de cual te sintas mas comodo. Yo empece a con JSF y JPA pero como vengo del mundo web, y estoy acostumbrado a usar JQUERY pues como que con primerfaces se pierde el encanto. Ahorita estoy probando SPRING MVC con el que se supone que puedo usar JQUERY con mayor libertad. Aunque cabe mencionar que con JSF tambien se puede hacer pero es mas complicado.

Es mas sabes que te recomiendo que aprendas los dos lenguajes, PHP y JAVA. Por que hay clientes que te van a poder pagar un desarrollo en JAVA y otros en PHP.

Por que al final al cliente no le importa la tecnologia con la que se desarrollo, le importa que funciones. Y afinal de cuentas es mas importante la usabilidad del sistema, los procesos del cliente y los resultados que la propia tecnologia con que se desarrollo.

Diagrama de flujo para elegir un lenguaje... :)

 

Quizás el siguiente diagrama pueda ayudarte a tomar una decisión. :)

 

NOTA: Fuente primaria de la imagen: The Different Programming Languages - Learneroo

~~~

Imagen de Jose Manuel

Gracias por sus respuestas.

Aun no me he decidido pero, el diagrama que proporciono @jpaul se ve bastante útil. Ademas de los consejos de los demás que obviamente tratare de darles el mejor uso. Pero por ahora no tengo tiempo pues estoy dando mis practicas profesionales, en cuanto tenga tiempo me dedicare de lleno a tecnologías web.

De nuevo, gracias por sus respuestas.

Imagen de Ziklónico

Si no quieres usar nada de

Si no quieres usar nada de HTML puedes usar (para java) el GWT (Google Web Toolkit). El propio framework se encarga de traducir a JavaScript y HTML.

Si en algún momento te decides por PHP tienes Seagull , que es un CMS al mismo tiempo y además tiene interfaz gráfica.

Saludos!

RE: Tecnologías Web: ¿Con cual inicio?

Vale más tarde que nunca, dicen.

El punto es que por ejemplo en Python, Java, Ruby (de cierta manera), Scala y los lenguajes libres tienes muchas opciones, pero si nos enfocamos a Java hay tropecientos miles de frameworks, depende cómo te guste desarrollar a ti.

En mi caso, veo que la plataforma estándar de Java para web, o lo que llamamos Java EE tiene cosas muy muy interesantes con su stack que consiste en:

  • JPA: Java Persistence API. Esta es la capa de acceso a datos, con JPA puedes hacer consultas a objetos de Java en vez de lidiar con SQL, la ventaja que te da usar JPA es que es el estándar de Java. Y a otro nivel es que te da potabilidad entre bases de datos, esto es que si usas Oracle y de pronto quieres cambiar a Postgres, no hay tanto lío haces unos ajustes menores y funciona todo sin hacer grandes cambios.
  • EJB: Enterprise JavaBeans. Esta tecnología es increíble para guardar toda la lógica de tu aplicación, especialmente la compleja. Digamos que pones las clases principales de tu aplicación, lo subes a un servidor y si usas aplicaciones Java puedes invocar esos objetos de manera remota y en caso de usar otra tecnología es muy simple hacer estos objetos disponibles en un servicio web y ya está. Además puedes tener aplicaciones distribuidas muy fácilmente, justamente EJB tiene un diseño para ello.
  • JSF: Java Server Faces. Es una tecnología encargada de hacer componentes web, y en cierta manera, es cómo desarrollar aplicaciones de escritorio pero en la web. Casi todo funciona en base a eventos y además es fácil de aprender, se me hizo muy similar a Swing/Awt.

Si la plataforma estándar de Java no te agrada puedes probar con Spring Core + Spring MVC + Spring JdbcTemplate. En este caso eres dependiente de lo que haga Spring, pero, el framework funciona tanto en contenedores de servlet cómo en contenedores de aplicaciones. Además desde la versión 3 te olvidas del XML puedes generar todo usando JavaConfig, a través de anotaciones y tal. En mi trabajo la API monolítica que tenemos funciona con esto.

¿Servlets + JSP? ¿Por qué no? A mí me parece que es muy buena herramienta, especialmente los servlets... ESO SI, si vamos a usar servlets tenemos que aprender un poco más de concurrencia, nadie quiere tener métodos sincronizados en una aplicación web. Y pues sobre todo aprender a usar las vistas y entender que JSP es eso, una tecnología de vistas, no una tecnología de acceso a datos, no una tecnología de lógica de negocios.

Si buscas algo más robusto yo me lanzaría por Play!, de hecho con Play! 2 la cosa es una locura, escalabilidad y concurrencia a tope. Francamente lo recomiendo, eso si, puede parecer un tanto raro el cómo se hacen las cosas con Play! pero funciona de mil maravillas.

Ahora si nos vamos a algo más ¿hipster?, puedes intentar con Node.js + ExpressJS. A mí me parece un gran enfoque, tienes algo cómo Node.js que escala de una manera increíble que es básicamente sin configuración y además con ExpressJS tienes casi todo armado. A mí me parece simple, sencillo y tiene muy buen desempeño. Además una vez aprendiendo ciertos tips, Javascript deja de ser tan malo cómo parece.

En el caso de cosas para Vista me gusta Vaadin (aunque no sé Vaadin, ni lo he usado, pero me parece un enfoque increíble).