Masio IT: Tecnologia e informacion

Guerra de lenguajes? Irrelevante

Cual es mejor? Php o Ruby? Java o C#? Python o Perl? La respuesta definitiva es: No importa.

Me resulta muy divertido como la mitad del Internet se puede resumir en discusiones irrelevantes como esta. (La otra mitad se dedica a otra cosa). Lo dudas? Mira esta tabla:

búsqueda en Google Numero de resultados
Php sucks 286,000
Perl sucks 298,000
Java sucks 139,000
C# sucks 248,000
You suck 10,300,000

Tal vez decir “la mitad” fue una exageración, pero aun así, litros y litros de tinta se han escrito sobre si tal o cual lenguaje es mejor o porque java apesta o porque Php es un lenguaje de juguete. Pero todas esas discusiones están respondiendo a la pregunta incorrecta:

¿Para que me sirve ese lenguaje?

Un lenguaje de programación no es mas que una herramienta para lograr un fin. Así como puedo escribir un CRM en ensamblador o en bash, si eres lo suficientemente masoquista, también puedes escribir un script para shell en C#. O en cobol. O en whitespace.

Dadas las suficientes herramientas, cualquier lenguaje es capaz de cualquier cosa. La diferencia es el esfuerzo necesario para lograrlo.

¿Que quiero decir con todo esto?

Conoce tu lenguaje.

Y no me refiero a que te aprendas todos los namespaces o clases o funciones del lenguaje, sino que aprendas los conceptos que son posibles con el lenguaje y que entiendas para que sirve.

En especifico:

  1. Paradigma: Es procedural? OOP? Funcional? Lógico?
  2. Acepta programación funcional (aunque no sea lenguaje puramente funcional)?
  3. Es compilado o interpretado?
  4. Es tipado o no tipado?
  5. Es estáticamente tipado cada expresión tiene un tipo)  o dinámicamente tipado (solo los valores tienen tipo)?
  6. Es fuertemente tipado (no puedes convertir un valor sin un cast) o es débilmente tipado (se puede convertir el tipo dinámicamente)?
  7. Es latentemente tipado (no es necesario escribir la declaración de tipo) o manifiestamente tipado (debes explícitamente declarar el tipo)?
  8. Es nominalmente tipado o estructuralmente tipado (similar al duck typing)?

Tu sabes a que categoría pertenece tu lenguaje de preferencia?

Para que me sirve esto (a parte de la cultura general)? 
Para crear código mas eficiente, o para hacernos la vida mas fácil.

Por ejemplo:

Si necesitas hacer un programa que recibe datos del usuario, un lenguaje fuertemente tipado hace mas fácil la programación en cuanto a seguridad, ya que si el dato que recibes, no concuerda con el dato que esperas, simplemente lanzas una excepción. En comparación, si tu lenguaje es dinámicamente tipado tienes que hacer comprobaciones extras. Sin embargo en el segundo ejemplo es mas fácil de programarlo y en muchas menos líneas de código, ya que te ahorras toda la conversión de tipos.

Caso especifico: Quieres construir una cadena de SQL y no sabes que campos usaras y tampoco los tipos de estos campos (por ejemplo, si quieres construir tu ORM). En un lenguaje latente, dinámico y débilmente tipado (como Php, por ejemplo), es un trabajo sumamente sencillo . En un lenguaje como Java que es prácticamente todo lo contrario, se requieren líneas y líneas de definiciones de tipos, casts y otras cosas. Y a mas líneas de código, mas posibilidad de errores y dificultad de mantenimiento.

O tocando el punto de los lenguajes funcionales. En un lenguaje funcional (o que acepta programación funcional) típicamente se pueden escribir funciones con mucho menos líneas de código.

Por ejemplo, estas dos funciones en Python son equivalentes:

   1: target = [] # create empty list
   2: for item in source_list: # iterate over each thing in source
   3:    trans1 = G(item) # transform the item with the G() function
   4:    trans2 = F(trans1) # second transform with the F() function
   5:    target.append(trans2) # add transformed item to target
   1: compose2 = lambda F, G: lambda x: F(G(x))
   2: target = map(compose2(F,G), source_list)

Tal vez la segunda función parezca mas complicada, para aquellos expertos en programación funcional, les parecerá de lo mas sencillo. Y justamente ese es el objetivo.

Volviendo al punto, y concluyendo. No importa que lenguajes uses: Aprende a usarlo. Y si vas a discutir por cual es el mejor o por cual tiene la declaración de tipos mas grande[jeje], por lo menos conocelo bien a fondo. Así por lo menos las discusiones irán mas allá del típico “java sucks”.

 

  • how can i make in python with the use of lambda the next thing

    where f(x) and g(a,b)
    f(g(a,b)) then call it

    h(x,y) = (2x + 3) / 2

  • El gran problema de que un lenguaje no sea fuertemente tipado no es tanto el que has mencionado de que hay que hacer comprobaciones extras. El problema es que es complicado crear grandes aplicaciones. Hay una máxima que dice que cuanto antes se detectan los errores menos probabilidades hay de que se produzcan. En un lenguaje compilado fuertemente tipado, en tiempo de compilación se detectan muchísimos errores de lógica. Por contra en un lenguaje debilmente tipado, los errores sólo se detectan cuando se ejecuta la sección de código, lo que puede tardar un tiempo indeterminado en producirse.

You can follow any responses to this entry through the RSS 2.0 feed.