Eligiendo el Lenguaje Apropiado para Desarrollo Web

Recientemente y por el calor del día lancé un comentario en twitter https://twitter.com/#!/johnnydc/status/195918555491995648 que dejé llegar a facebook http://www.facebook.com/johnny.de.castro/posts/10150769545781358, el punto es que el comentario generó un par de respuestas online y otras offline, pero sobre todo despertó en mí el interés por aclarar lo que considero un punto válido frente a la elección de las herramientas para el desarrollo de proyectos enfocados a la Web.


Eligiendo un lenguaje de desarrollo

Desde que decidí aprender informática por mi cuenta me he topado con guerras santas y comentarios sin sentido a favor de X o Y, en el tema de OS gente a favor y en contra de Windows, Linux, *BSD, MAC y ni que decir de las bifurcaciones entre los grupos, ej: prefiero RedHat en lugar de SUSE ó Ubuntu es basura y un largo etc., cuando empecé a interesarme por la programación sucedió igual, he visto gente gente a favor de C, de C++, VB(.NET), Java, PHP y un inmenso etc….

Ahora frente a la tarea de elegir el lenguaje correcto surge la pregunta ¿cual es el lenguaje ideal?, la respuesta corta es: ¡Ninguno!.

En la programación y el desarrollo de aplicaciones Web en general debes tener presente cientos de consideraciones pero una por encima de todo: La Web es texto, simple y vulgar texto plano que se envía a al visitante, así que para la presentación del contenido debes procurar complicarte lo menos posible.

Lo que no es.

Flash y applets de java están fuera de escena, esto no es "Web o programación Web", son como muchos otros elementos, solo algo más para descargar y visualizar (o procesar), son parte de la información y para este fin son tratados como simples archivos descargados y están a la misma altura de documentos en pdf, doc, xls, odt, etc. es decir, son solo elementos (por ahora no hablamos de diseño visual).

El proyecto.

Es lo que nos interesa, la razón de que tengamos que darnos a la tarea de programar alguna cosa.

No te engañes, sin importar donde te encuentres o los retos frente a ti, el proyecto es lo importante, busca hacerlo simple, pero sobre todo "hacerlo posible" si tu proyecto es una galería, busca opciones antes de darte a la tarea de montar tu propia galería, o simplemente hazla, nadie te limita.

El funcionamiento

A grandes rasgos la web funciona así:
La información se alberga en un servidor, un cliente solicita esta información (a través de su web browser, app, servicio, aplicación, etc.) y es entregada/presentada al cliente quien luego decide que hacer con ella (leerla, procesarla, almacenarla, etc.).

Servidor

Llama servidor a una maquina, un cluster, grid, cloud, p2p, etc. que provee un servicio demonio capaz de responder a peticiones y entregar los contenidos, dichos contenidos pueden estar alojados en la misma maquina o distribuidos en otras, es aquí donde juegan su labor los lenguajes de programación, en realidad si no los necesitáramos sería genial, pero alguien debe encargarse de responder a nuestros caprichos, esa es su labor.

Cliente.

Tradicionalmente los navegadores web renderizan la información recibida a través de la Web, así que el texto plano enviado por el servidor es recibido, parceado, analizado y procesado, luego se presenta. Nuestra tarea es simple: proveer la información, sea imágenes, juegos, video, texto, o links a diversos documentos, aquí el principal lenguaje de programación que requieres conocer es javascript idealmente todo lo que puedes requerir, incluso puedes prescindir de su uso, pero que sería de la vida sin algo de diversión.

El cliente no siempre es un usuario frente a su navegador, es más, muchos de tus clientes probablemente sean otros servicios por lo que el formato de salida no siempre será (x)HTML(5), puede ser xml, json, cvs, o que se yo, un nuevo formato creado por ti, texto o binario, el asunto es que tu cliente te presentará diversos requisitos.

La Plataforma

La elección de la plataforma es tan importante como la elección del lenguaje que dará vida a tu proyecto, esto se debe a que puedes obtener mayor rendimiento o soporte en una plataforma en particular para algún lenguaje.

J2EE, LAMP, WISA.NET estas son las principales plataformas Web disponibles en el mercado, tienen grandes variaciones pero en general los nombres te resultarán orientativos.

J2EE

J2EE, alternativa JBoss, lenguaje Java-jsp, en realidad el lenguaje a evolucionado, ahora puedes utilizar Scala, JRuby, Cylon y otros, se trata de una plataforma enterprise, sin embargo no te confundas, Java es completamente open source, todo lo que puedes encontrar a través de Oracle lo consigues en alternativas libres, tiene una comunidad gigantesca, miles de desarrollos integrados y aislados, cantidad inmensa de código basura, cantidad inmensa de código interesante y reutilizable.

El principal IDE de desarrollo es Eclipse seguido por NetBeans, las ventajas de java van desde su diseño (sobredimensionado), rendimiento, soporte hasta el hecho de que por la misma complejidad del lenguaje, se han desarrollado muchas alternativas para el desarrollo sin código (o con poco código), así que te centras en el modelo de negocio y el IDE hace el resto, tu solo ajustas detalles (aunque la realidad es una muy distinta).

Cuentas con depuradores, asistentes, en fin, todo lo que requieres para el desarrollo rápido de aplicaciones, también para el desarrollo lento y tedioso, así que no te confundas.

Una de las expresiones de las que más se hace eco en la red viene de la mano de Shaun Connoly (JBoss’s vice president) "Java is great, PHP sucks and .NET can’t scale", la verdad es que refleja el pensar y actuar de gran parte de la comunidad Java.

LAMP

LAMP lo conforman el stack Linux, Apache, Mysql y PHP, aunque su ecosistema actual es muy amplio y poco corresponde, en bases de datos Mysql y PosgreSQL, pero la base real es Software Libre, así que puedes reemplazar esta base de datos por la que gustes. PHP no es la única P, están Perl y Python, "pero" muchos incluyen a Ruby con ROR en este stack.

Sin mencionar que Apache + FastCGI funciona genial no solo en Linux, sino en sistemas *BSD (MAC OS incluido) incluso en Windows, muchos siguen llamando LAMP sistemas en los que Apache ha sido reemplazado por NGINX (o Linux por Windows, aunque esto último rompe el paradigma de solución Open Source).

IDE, PHP adolece en este sentido, no tienes entornos en los que simplemente diseñes el modelo y la lógica del negocio y ya está, usualmente debes toquetear mucho, mucho código para completarlo todo. Para PHP tienes NetBeans PHP como el editor más completo, te permite debuguear, indexar toda la aplicación, autocompletar código y correcciones de sintaxis y más, luego tienes también a Eclipse con PDT+WTP+Aptana ó Zend Studio (básicamente Eclipse con esteroides). Perl aunque es por mucho el lenguaje de mayor antigüedad y madures, no tienes lo que llamaríamos un IDE completo, solo editores que proveen resaltado de sintaxis, marcado de errores y autocompletado, resaltan en este aspecto Komodo IDE y Eclipse+EPIC. Python yo apuntaría tres IDE, Komodo IDE, Eclipse + PyDev y ERIC, tienes disponible lo típico, además del modelado UML de la solución y otras tantas herramientas.

El stack LAMP adolece por la aparente falta de características enterprise, sin embargo existe un muy interesante número de empresas que se dedican a cubrir este aspecto, se proveen frameworks que refuerzan la seguridad, escalabilidad, agregan características SOA, en fin hacen de LAMP un entorno que encaja perfectamente en la arquitectura empresarial.

WISA.NET

Plataforma conformada por Windows, IIS (Internet Information Services), Microsoft SQL Server y el ASP.NET, siempre he considerado que si buscas la mejor herramienta, utiliza .NET, aunque la realidad es que no estás amarrado a Microsoft para conseguirlo, con un esfuerzo mínimo adicional puedes conseguir desarrollos que funcionarán sobre Linux, Apache (ó nginx), MySQL/PostgreSQL y mono.

Lo interesante de .NET es que puedes utilizar literalmente cualquier lenguaje soportado para realizar tus desarrollos, mientras exista un interprete a CIL lo tienes, solo por mencionar algunos tienes: C#, Visual Basic.NET, C++, F#, J#, Perl (a través de perl-dev-kit de http://www.activestate.com/perl-dev-kit/features), Python, Fortran, Prolog, PHP, Boo, Java y mucho más, pero esta no es su magia, la gracia está en que puedes reutilizar por ej. la librería que hiciste en Python y llamarla en tu aplicación C# y el resultado presentarlo con Boo, es decir, lo que quieras.

IDE, esta es la mejor parte de .NET, el más completo IDE disponible funciona solo en una plataforma, microsoft, se trata de Microsoft Visual Studio, seguido (de lejos) por SharpDevelop, en realidad son para objetivos muy diferentes, SharpDevelop es para desarrolladores que intervienen más en el desarrollo del código mvs permite la generación automática de mucho código. La alternativa multiplataforma es Monodevelp.

Mi conclusión es: si buscas la mejor herramienta, utiliza mono (.NET), si tu enfoque es enterprise, Java es lo tuyo, si requieres escalabilidad y desarrollos relajados, decantate por LAMP.

El lenguaje

Esta es la razón del post y de las discusiones que dieron su origen, pero la realidad es que se trata solo de una distracción más y de algo totalmente irreal, lo importante es el proyecto en si mismo, más que el lenguaje debes preocuparte por la plataforma, ten presente que muchos proyectos pueden gestionarse a través de plataformas mixtas, así que la decisión podría no ser crucial.

Los Programadores

Son los encargados de llevar a producción las ideas y son quienes se interesan (o no) por temas como "la legibilidad del código", la escalabilidad, etc., son ellos quienes hacen (o no) realidad los proyectos y no un lenguaje. Además las ventajas de un lenguaje frente a otro serán explotadas solo por la capacidad y el estilo del desarrollador.

La decisión frente a la elección del lenguaje/Framework/Plataforma más que una decisión técnica se vuelve una decisión personal o de estrategia empresarial, en la que eliges el lenguaje que mejor se adapta a tu estilo (de vida, de trabajo, de clientes), a tu forma de hacer las cosas, además en la programación como en la vida, tendrás diversas formas de manejarte según lo que tengas que hacer, así que probablemente variarás entre plataformas recordando que no existe la mejor solución, siempre se pueden dar múltiples soluciones al mismo problema, solo que una de ellas será la apropiada para ti dadas las circunstancias.

  • Yesica

    buen post!!!

  • Luis Almanza

    wrw

A %d blogueros les gusta esto: