sábado, 15 de febrero de 2014

¿Existen lenguajes de programación mejores que otros?

Este artículo trata sobre si existen lenguajes de programación mejores que otros, ya que para muchos es una cosa de gustos y de adaptación, pero yo no opino lo mismo. Opino que un lenguaje de programación debe ser lo más sencillo posible de aprender, pero a la vez debe ser complejo para cubrir la mayoría de las necesidades y de una forma elegante.




[caption id="attachment_861" align="aligncenter" width="640"]Alternativas en informática Alternativas en informática[/caption]

Antes de empezar, debo aclarar, que esto no se trata de un flame, sino que de una mirada crítica al mundo de los lenguajes de programación. ¿Qué se puede hacer para mejorar un lenguaje de programación?, ¿Qué características son deseadas en un lenguajes de programación?, ¿Es necesario que los lenguajes de programación se parezcan tanto?.



Un poco de ciencia


El ser humano es una de las especies que nace con la mente casi en blanco en relación con la de las otras especies. Aunque es cierto que hay muchas capacidades primitivas que son innatas en el ser humano, como el miedo, altruismo, sexo, la violencia y muchas más. La mayoría de las capacidades se desarrollan a lo largo de vida, por eso es que también el ser humano tiene un mayor periodo de apego con sus familiares. Necesita tener un apoyo y gente que lo guíen cuando están indefensos.


Cuando somos niños y adolescentes tenemos un gran potencial de adaptación en nuestro cerebro, o una gran capacidad de plasticidad cerebral, que es la capacidad de transformación de las estructuras cerebrales, nos cuesta mucho menos cambiar de opinión (por ejemplo) que cuando somos adultos. Cuando somos más adultos esta capacidad de adaptación se empieza a perder, pero no esta del todo perdido, ya que el resultado de esto es una mejora en la estructuración del cerebro, tenemos menos neuronas pero están mejor estructuradas y también hay formas para mejorar la plasticidad. ¿De todas formas, sirve de algo ser consciente de esto?.




El determinismo biológico produce desesperanza.


Louann Brizendine



¿Y esto qué tiene que ver?


Bueno a lo que voy, cuando nosotros criticamos un lenguaje de programación lo hacemos casi siempre desde una perspectiva adulta y quizás poco autocrítica. Creemos que un leguaje de programación es bueno porque es el que hemos aprendido, no porque sea mejor realmente. Tendríamos que pensar que lenguaje es mejor para todos y no sólo para mi.


El primer lenguajes en el cuál aprendí a programar fue el lenguaje C luego sin aprenderlo completamente quise aprender el lenguaje C++ que al final y al cabo es una extensión del lenguaje C. Por el momento mi lenguaje favorito es el lenguaje C# ya que también mantiene muchas cosas de C/C++ y aparte tiene muchas características modernas. Pero aunque C# sea un lenguaje del 2003 (Bastante nuevo) sigue manteniendo los ; para delimitar el final de una expresión. Para mi no es un problema escribir un ; para delimitar una expresión ya que yo estoy
acostumbrado a esto, pero si miramos a las personas que están aprendiendo a programar con algún lenguaje que utilice los puntos y comas, les será muchas veces un lío ya que les dará un error en tiempo de compilación. Para reconocer un buen lenguaje de programación debemos ponernos en los zapatos de las personas que están aprendiendo a programar y ver que cosas les parecen contra intuitivas.



¿Qué cosas son positivas en un lenguaje de programación?


Intuitivo


Un lenguaje de programación debe ser intuitivo para las personas que están aprendiendo a programar, por ejemplo un típico error de la gente que esta aprendiendo a programar en Java es confundir el operador relacional "igual a" == con el operador de asignación = , al momento de utilizarlo en una estructura condicional como el if o el else if, etc.


Yo opino que el operador de asignación sea : y que el operador de relacional de "igual a" podría ser = .


Java:
a = 10;
b = 10;

if (a == b) System.out.println("Iguales");

Mi Pseudolenguaje:
a: 10
b: 10

if a = b _ debug 'Iguales'

 En Mi Pseudolenguaje el carácter _ sirve para avisar que esto va a estar en una sola línea.

Evidentemente esto no es un gran problema, pero según mi opinión que los lenguajes de programación sean más intuitivos es un punto a favor.



Fácil de escribir y de leer


Otro punto a favor es la legibilidad del lenguaje. Por ejemplo, a mi me gusta mucho Ruby, por que es un lenguaje que es muy fácil de leer. También es fácil de escribir al no tener tantos signos raros.



# define la clase Perro  
class Perro

# método inicializar clase
def initialize(raza, nombre)
# atributos
@raza = raza
@nombre = nombre
end

# método ladrar
def ladrar
puts 'Guau! Guau!'
end
end

No debe tener muchas formas de hacer lo mismo


Hay lenguajes que son muy permisivos, por ejemplo C++, permite utilizar todo lo de C, ya que es una extensión. Pero hay un problema con esto. Es que si la persona que aprende no tiene un buen educador o es autodidacta, le va a ser fácil perder el norte al ver mucha documentación en la cuál se utilice mezclado el lenguaje C con el lenguaje C++. Claro que con la experiencia esto se puede arreglar, pero al principio es un letargo, ver que cosas se deben hacer y que cosas no. Pienso que un lenguaje de programación debe ser lo más fácil de aprender posible, porque al principio aprender a programar es difícil.


Un ejemplo de que no se debe hacer en C++



#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
printf ("Hola ");
cout << "Mundo!" << endl;

return 0;
}

Estamos utilizando funciones de C como printf y el objeto cout. A parte de esto hay muchas cosas más que se pueden mezclar de C y C++, pero este es un ejemplo simple.



Innovación


Sí, innovación. No tengo bien claro el motivo, quizás es difícil innovar en un lenguaje de programación maduro. Muchos lenguajes de programación se limitan a añadir clases y más clases para cumplir las nuevas necesidades dentro de la programación. Pero pienso que un cambio de sintaxis es muy positivo en los lenguajes de programación, quizás no hace el cambio porque es costosa la implementación y es más fácil añadir y añadir nuevas clases. Creo que es positivo para un lenguaje de programación deprecar algunas características de su sintaxis y remplazarlas por nuevas.


Tratando de innovar quise crear una clase Phone y SmartPhone en mi pseudolenguaje, luego me dirán su opinión en los comentarios.



class Phone
private int numero
private int saldo
private int minRecarga: 500
private str dueño

constructor
in _ -> numero, -> dueño
end

_ public _

method call
in _ int numero
out _ bool call

if saldo > 0 _ call: true
else _ call: false
end

property Saldo to saldo
set
if Saldo > minRecarga _ Saldo: saldo
get _ saldo -: 100 # que robo
end
end

class SmartPhone extends Celular

group so
str nombre
int version
end
end

No es necesario que se parezca a otros lenguajes, sólo debe buscar la mejor forma de hacer las cosas


En especial los lenguajes C, luego C++ y luego C# fueron copiando la mayoría de las cosas de los lenguajes que le preceden para facilitar el traslado de los programadores. Pero pienso que esa no es la idea. La idea es copiar las características positivas de los lenguajes que preceden y olvidarse de las negativas, por ejemplo olvidarse de los ; . Un lenguaje de programación debería ser indiferente a todos los demás, pero sí debe copiar las cosas positivas de todos los demás. Que un lenguaje de programación nuevo se parezca a otro ayuda a que los programadores se trasladen de lenguaje, pero puede dificultar el aprendizaje de éste nuevo lenguaje a las personas que están aprendiendo a programar.

2 comentarios:

  1. no creo que determinar si un lenguaje es bueno o malo dependiendo si usa o no los " ; " o una escritura permisiva o no, es algo irresponsable.
    Si estoy de acuerdo que, cuando el lenguaje usado es permisivo (c# o php) depende mucho del programador o como mencionaste del educador.

    que sea intuitivo es una ventaja, pero quien que este recién aprendiendo entiende mejor una linea que otra, aunque hagan lo mismo,
    ahí también depende de tu primer lenguaje y tu educador.

    si tiene o no muchas formas de hacer lo mismo considero que es una ventaja, mientras se haga de la manera correcta no debería tener problemas,
    ahora si mezclas dos lenguajes será algo confuso.

    por la innovación, siempre es bueno para un lenguaje, pero, ahí parte la interrogante de mantener la forma antigua de hacer las cosas o no,
    siempre hay cosas que se pueden mantener y otras que desechar, y ahí volvemos a que con esto podemos hacer las mismas cosas de manera distinta, y repito, que mientras se haga bien, no hay problema.

    concuerdo en que deben buscar la mejor forma de hacer las cosas y evolucionar.

    pero estás comparaciones son muy triviales, debería enfocarse más a las funciones de un lenguaje,
    quiero decir, que puede hacer un lenguaje que otro no haga, ejemplo,
    php recién en su versión 5 posee un sistema POO decente, y aún falta por completar.

    ResponderEliminar
  2. Gracias por tu comentario seba.

    El artículo es crítico hasta con cosas pequeñas! y de eso se trata de ser críticos. Pienso que todos los lenguajes se pueden criticar y mejorar.

    Saludos

    ResponderEliminar