domingo, 15 de enero de 2012

¿Qué lenguaje de programación escoger?

Una pregunta habitual al empezar a programar es qué lenguaje utilizar.

Lo habitual es intentar documentarse y leer foros donde hay seguidores que defienden a sus lenguajes como si fuera su equipo de fútbol. Lo que hace estos foros bastante divertidos, pero a veces es difícil tomar la decisión correcta.



Otra alternativa es leer libros sobre los lenguajes en sí y conseguir código fuente de aplicaciones libres para ver cómo lo utilizan.



El objetivo humilde de este artículo es hacer una lista abierta con el campo de actuación de cada lenguaje, sus ventajas y sus inconvenientes, espero que os ayude y os animo a participar:




Ranking de lenguajes de programación


Fuente: Infojobs




Diferentes organismos publican ranking de popularidad de los lenguajes de programación. Los resultados están muy condicionados por la metodología pero puede servir para hacernos una idea.Quizás, el ranking más famoso es el índice TIOBE que en mayo del 2009 tiene los siguientes resultados:



Posición Lenguaje Porcentaje
1 Java 19,537%
2 C 16,128%
3 C++ 11,068%
4 PHP 9,921%
5 (Visual) Basic 8,631%
6 Python 5,548%
7 C# 4,266%
8 JavaScript 3,548%
9 Perl 3,525%





Java



El un lenguaje desarrollado por Sun microsystems con una sintaxis basada en C++.

La principal novedad que Java aporta es que no se compila habitualmente en código nativo sino en bytecode. La compilación en código nativo no se realiza hasta la ejecución de la aplicación a través de la máquina virtual. Es un camino a medias entre la interpretación y la compilación.

La estrategia de no compilar en código nativo hasta la ejecución de la aplicación tiene el objetivo principal de mejorar la portabilidad de las aplicaciones desarrolladas en Java.

De hecho el lema de Java es:
Write once run everywhere
(Escríbelo una vez y ejecútalo donde quieras)
Java en sus comienzos tenía una fama de lenguaje lento. Actualmente su rendimiento ha mejorado considerablemente, debido a la mejora de los compiladores JIT (Just in Time) que "compilan" en la memoria el código al cargar partes de él.





Valoración personal


Concepto Valoración Comentarios
Productividad Bien

Sencillez Bien

Conexión a bases de datos Muy Bien

Portabilidad en diferentes sistemas operativos Muy Bien

Rendimiento Bien La carga de la aplicación puede ser lenta.
Protección del código Mal Es fácil con ingeniería inversa extraer el código fuente si no se usa un ofuscador
Precio Muy Bien Gratuito
Popularidad Muy Alta

Software Libre




Python




El objetivo de Python es la sencillez, código sencillo y entendible.


El Python es un lenguaje interpretado, eso significa que no se compila ni se enlaza. Sino que el mismo código fuente hace las veces de exe y para eso siempre se necesita tener instalada la plataforma del intérprete. Se le pasa de parámetro al intérprete el código en un archivo *.py. En general los lenguajes interpretados son sencillos, pero tienen un rendimiento mucho más bajo por ello, las librerías de Python están programadas en C++. 
Entorno (shell) de Python


Python está de moda. Y una de las razones es que el lenguaje favorito de Google junto a C++. Por eso no sorprende, que la plataforma de Google para alojar aplicaciones, AppEngine, sólo soporte Python en estos momentos (aunque soportará Java en un futuro muy cercano).


La gran desventaja de este lenguaje es su rendimiento y aunque Google está tratando de mejorarlo, en general, todos los lenguajes interpretados son lentos.


CPython, Jython y Ironpython

La sintaxis del Python es extremadamente popular lo que ha provocado el nacimiento de 2 nuevos lenguajes: el Jython y el Ironpython que son las implementaciones en Java y en .NET de Python.
Para evitar confusiones al Python original implementado en C++ se le denomina también CPython. 


Campo de actuación:

Único lenguaje soportado en AppEngine (tecnología de Google para alojar aplicaciones Web)
Lenguaje óptimo para aplicaciones pequeñas y muy flexibles y sin necesitad de un rendimiento elevado.


Valoración personal de Python




Concepto Valoración Comentarios
Productividad Bien

Sencillez Bien

Conexión a bases de datos Muy Bien

Portabilidad en diferentes sistemas operativos Muy Bien

Rendimiento Muy Mal



Protección del código

Muy Mal



Precio

Muy Bien

Gratuito

Popularidad Alta

Software Libre






NET


.NET es un proyecto de Microsoft crear para una plataforma de desarrollo SW y en esta plataforma hay desarrollados varios lenguajes de programación entre los que destacan:

  • Visual Basic .NET

  • C#, J#

  • C++/CLI (versión Managed)



Los lenguajes de programación dentro de .NET tienen diferente sintaxis pero comparten las mismas librerías y los mismos conceptos, por lo que a nivel práctico no hay mucha diferencia entre un lenguaje y otro dentro de la plataforma .NET. Esto en cuanto al manejo de la GUI, ya que la sintaxis original se mantiene.




Principales Conceptos de .NET

La arquitectura de .NET ha sido muy influenciada por Java por lo que los conceptos a continuación descritos tienen una equivalencia en Java.

Common Intermediate Language (CIL)

El resultado de la compilación .NET es un ensamblado "semicompilado" en el lenguaje CIL antes llamado Microsoft Intermediate Language (MSIL). Los ensamblados en CIL pueden ser ejecutados teóricamente en diferentes sistemas. Equivale al Bytecode de Java.

Common Language Runtime (CLR)

Los ensamblados no son compilados en código nativo hasta su ejecución. La tarea de compilación JIT (Just in Time) la realiza el CLR. Equivale a la máquina virtual de Java.



Base Class Library (BCL)

BCL es el conjunto de librerías de sistema de .NET contenidas en el espacio de nombres System.



Common Language Infrastructure (CLS)

Es la especificación ECMA 335 con las condiciones que tiene que tener un lenguaje para ser compatible con .NET




ASP.NET

ASP .NET  es la tecnología de lado servidor de la plataforma .NET para implementar páginas web dinámicas.




Visual Basic.NET

Visual Basic siempre a sido sinónimo de lenguaje sencillo (para los partidarios) o de lenguaje de juguete (para los detractores, muchos de ellos programadores de C o C++). Y realmente, hasta la versión 6 esto ha sido más o menos así. La actual versión 9 (VS2008) es realmente potente y bastante más compleja que la versión 6 (la última antes de la plataforma .NET). Pero por su pasado tiene connotaciones todavía de lenguaje de juguete, aunque a día de hoy no sea del todo cierto. Desde la versión 6 se ha venido implementando la orientación a objetos y en la última versión ya posee casi todos los elementos de dicha paradigma. La versión 5 y anteriores sólo utilizaban objetos, pero el lenguaje en sí no daba soporte para clases, herencia, polimorfismo, etc.

Para evitar confusiones hay 4 "entornos" de Visual Basic incompatibles entre sí aunque comparten una sintaxis muy similar.



  • Visual Basic .NET (Versiones desde la 7.0 [Visual Studio 2003] hasta la actualidad). Cuando alguien se refiere actualmente a Visual Basic a secas normalmente se refiere a Visual Basic .NET.
  • Visual Basic Clásico (Versiones desde la 1.0 hasta 6.0 de Microsoft Visual Basic).
  • Visual Basic for Applications (VBA). Lenguaje para programar las macros de Microsoft Office.
  • Visual Basic Script. Lenguaje desarrollado por Microsoft para competir con JavaScript. Cuya finalidad principal era dotar de lógica en el lado cliente a Internet Explorer. Visual Basic Script en la actualidad tiene una popularidad muy escasa.



C#

C# (pronunciado C Sharp) es el lenguaje favorito dentro de la plataforma .NET para Microsoft y la mayoría de los programadores. C#, J# Visual Basic.NET son prácticamente equivalentes en cuanto a funcionamiento, aunque la sintaxis es ligeramente diferente.




Entorno de Visual Studio (C#,VB, etc)
Una ventaja de C# es que no tiene las connotaciones negativas que tiene Visual Basic para el ámbito profesional. 




C++/CLI

El C++/CLI es el lenguaje más complejo y más difícil de usar de la plataforma .NET. Es una adaptación de C++ para trabajar en el entorno .NET con código gestionado (managed code).



Nishant Sivakumar expone las ventajas que ofrece C++/CLI con respecto a C# o VB:

  • Reutilización de código existente en C++ para compilarlo en CIL
  • Liberación de memoria determinista
  • C++/CLI ofrece mejor interoperatividad con el código nativo


Campo de actuación de .NET:

  • Óptimo para aplicaciones pequeñas/medianas de escritorio en Windows.
  • Puede usarse junto con ASP.NET para construir páginas Web (pero licencias de los Windows Server son bastante caras).


Valoración personal de .NET




Concepto Valoración Comentarios
Productividad Muy Bien

Sencillez Bien Excepto C++/CLI
Conexión a bases de datos Muy bien

Portabilidad en

diferentes sistemas operativos
Regular Window + Linux(sin VS, con Mono)
Rendimiento Bien Mal en la carga de la aplicación (mejora ligeramente con la aplicación Ngen)

Bien en la ejecución

Protección del código Mal Riesgo de ingeniería inversa

Precio Regular

La versión básica (express) gratuita

Popularidad Alta

Software Libre No



Links de interes:










C

El C (junto con Assembler) es uno de los lenguajes más conocidos y utilizados en toda la historia de la programación. Sistemas operativos como Windows o Linux han sido programados casi enteramente en este lenguaje. Fue el lenguaje de programación idóneo para utilizar el conjunto de bibliotecas de funciones estándar de Windows (Win32 API). Ha sido lentamente desplazado por las nuevas bibliotecas y lenguajes como son MFC y C++, aunque muchos programadores opinan que MFC no es más que un "wrapper" orientado a objetos de Windows API, ya que no disminuye mucho la complejidad y, en algunos casos, incluso la aumenta. Antes de existir C++ era el lenguaje más utilizado para todo tipo de aplicaciones, debido a su versatilidad y rendimiento. Aún hoy no es un lenguaje que esté olvidado. Al buscar en Internet se pueden encontrar muchísimos proyectos (en SourgeForge, por ejemplo) que aún utilizan C como lenguaje. La programación orientada a objetos, a pesar de lo que digan sus defensores, no es para todo tipo de aplicaciones (o gustos).



No es un lenguaje limitado tampoco. Prácticamente cualquier programa que se quiera se puede hacer con él, desde bases de datos, programas con una interfaz de usuario complicada, software de oficina, científico, multimedia, de inteligencia artificial, robótica, etc. La curva de aprendizaje de C con respecto a Visual Basic es mucho mayor, sin embargo, no es tanto como se piensa. Como con todo, algo puede parecer difícil si no se conoce a fondo.



Es particularmente útil en el campo de los videojuegos o en software que requiera explotar los recursos del computador en tiempo real. Assembler y C han sido los únicos lenguajes posibles en el mundo de las consolas de entretenimiento. El Atari 2600, el Nintendo, el Super Nintendo se programaban principalmente en Assembler. A partir de las nuevas versiones de Gameboy (en el mundo de Nintendo) se comenzó a utilizar el C (y últimamente el C++, después del Game Boy Color) para programar los videojuegos. Los videojuegos siempre han sido un asunto de "bajo nivel", aunque las herramientas han evolucionado bastante.



Las consolas modernas se programan con C/C++, principalmente. Las plataformas Xbox y Xbox 360 utilizan C/C++ y una versión especial de DirectX (de ahí el nombre de la consola, viene de DirectX Box), por lo que no es un lenguaje del pasado, es algo aún vivo.



Está basado completamente en el paradigma de programación estructurada. Sin embargo, puede usar elementos de la orientación a objetos, simulándolos con apuntadores y tablas virtuales de funciones (que es básicamente como funciona C++), por lo que es versátil. Genera código directamente ejecutable, es un lenguaje compilado y no interpretado.



Tiene algunos problemas, que se pueden subsanar con la experiencia. En particular, los errores de "Access violation" debido al uso indebido de apuntadores, carece de un tipo de datos "string" por lo que se tiene que usar el "char *", la falta de un sistema de memoria de reciclado (garbage collection), entre otros. Sin embargo, cuando se tiene experiencia, estas desventajas se pueden sortear y prueba de ello es software robusto como Linux y las innumerables aplicaciones hechas con este lenguaje.




C++

El C++ es uno de los lenguajes más utilizados. La programación se realiza a bajo nivel, lo que significa que se tiene un mayor control de la aplicación y un mejor rendimiento, pero esto implica un importante incremento de la dificultad y una disminución de la productividad. Es desaconsejable para iniciarse en la programación por su dificultad.



C++ genera código nativo en la compilación que es directamente ejecutable por el sistema operativo sin necesidad de una máquina virtual. 

Cuando fue construido, se quiso que fuera compatible con el C ANSI, por lo que tiene 2 paradigmas: programación estructurada (heredada de C) y programación orientada a objetos. Estos 2 paradigmas pueden ser mezclados en el mismo programa

Por tanto C++ no es puramente orientado a objetos como puede ser el C# o Java, lenguajes construidos de cero hace unos pocos años.

Es muy famosa la cita de Alan Kay:
Yo inventé el término "Orientado a Objetos", y te puedo asegurar que C++ no era en lo que estaba pensando.


El C++ es un estándar abierto del que existen multitud que compiladores de diferentes fabricantes (Microsoft, Borland, etc.)

La dificultad del C++ no son las instrucciones o la sintaxis (añadir un "if"). Sino las llamadas a las librerías, declaración de eventos, visualización, punteros, control de la memoria,  etc. Programar en C++ bajo MS-DOS no es demasiado es difícil, pero hacerlo bajo Windows es bastante más farragoso.

Campo de actuación:

  • Óptimo para aplicaciones comerciales de escritorio. (tipo Office)
  • En el entorno Web cuando se necesita un rendimiento muy elevado (por ejemplo el buscador Google está programado en C++)


Valoración personal de C++




Concepto Valoración Comentarios
Productividad Mal

Sencillez Mal

Conexión a bases de datos Regular

Portabilidad en diferentes sistemas operativos Regular El lenguaje es estándar para todos los sistemas operativos. El problema está en las librerías que en muchas ocasiones son dependientes del sistema operativo
Rendimiento Muy Bien

Protección del código Muy Bien

Precio Bien Hay versiones gratuitas
Popularidad Alta

Software Libre según Versión



Links de interés:

Breve introducción a C++

http://www.lsi.us.es/~javierj/cursos_ficheros/Cpp.pdf




Labview

Lenguaje gráfico de la compañía National Instrument. La programación de aplicaciones simples es extremadamente sencillo. Pero a medida que la aplicación crece es inevitable el caos más absoluto. Las aplicaciones se pueden compilar en ejecutables o en dll ´s nativas.

Entorno de programación de Labview



Campo de actuación:

Óptimo para aplicaciones pequeñas que quieran disponer de una interface de usuario vistosa. Muy potente en funciones gráficas, matemáticas y de adquisición de datos.







Valoración personal de Labview




Concepto Valoración Comentarios
Productividad

Regular

Bien (proyectos pequeños)

Muy Mal (proyectos grandes)
Sencillez Muy Bien

Conexión a bases de datos Muy Mal

Portabilidad en diferentes sistemas operativos Bien

Rendimiento Mal

Protección del código Bien

Precio Muy Mal

Popularidad Muy escasa

Software Libre No




JavaScript


JavaScript es un lenguaje con una sintaxis derivada del Java, en el que todas las funcionalidades potencialmente peligrosas están deshabilitadas. Como competencia sólo cuenta con VBScript de Microsoft (que sólo funciona en Internet Explorer por lo que no es aconsejable su uso).

Es JavaScript es un lenguaje interpretado, lo que ha provocado que su rendimiento fuera bajo. La competencia entre los navegadores está provocando que para las empresas SW la mejora del rendimiento del JavaScript sea estratégica para ganar cuota de mercado.

Campo de actuación:

Sirve para añadir lógica en el navegador Web (lado cliente). Es el único lenguaje funciona en los principales navegadores.



No se incluye valoración dado que en su campo de actuación no se puede usar otro lenguaje.



Estamos trabajando para seguir añadiendo otros lenguajes de programación como PHP, etc. Así mismo intentaremos ampliar este artículo con las sugerencias y matizaciones de los usuarios.

2 comentarios:

  1. Muy buena exposición. Y el comentario inicial es importantisimo: No hay una oponion que sea CIERTA y otra falsa.
    Cada programador suele tomar cariño a un lenguaje y mania a otro.
    Todo depende de a que sector vaya orientada la aplicación a desarrollar. Es como la Medicina: Quiero ser medido y me voy a especializar en ?¿?¿?
    Mi experiencia y opinion me conduce a Visual Basic. El 6.0 ya esta medio muerto, aunque hay tal cantidad de codigo fuente y programas funcionando que no puede morir. Su sustituto vb.net o c# al principio cuesta, pero luego permite hacer maravillas, aunque está orientado todo para windows, pero ¿Cuantas empresas trabajan son el S.O. Windows?, pue que cada uno haga su respuesta y saque su conclusión.
    Sobre JAVA, no se ahora (marzo 2012), pero es duro el pelearse con él, simplemente para hacer una triste instalacion (baja el SDK, para el entorno de desarrollo, baja no se que, configura, crea variables de entorno.). A mi me desanimó hace años y hasta lo tengo un poco mania, pero estoy seguro que es tan potente como .NET.
    Los demás lenguajes, los deconozco, pero seguro que es ponerse y lo mas importante, tener claro cual es nuestro objetivo de desarrollo.

    ResponderEliminar
  2. Yo recomendaría Java por su popularidad o Ruby porque parece que es el futuro y es sencillo.

    http://instintobinario.com/elegir-lenguaje-de-programacion/

    ResponderEliminar