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:
- Paradigma: Es procedural? OOP? Funcional? Lógico?
- Acepta programación funcional (aunque no sea lenguaje puramente funcional)?
- Es compilado o interpretado?
- Es tipado o no tipado?
- Es estáticamente tipado cada expresión tiene un tipo) o dinámicamente tipado (solo los valores tienen tipo)?
- Es fuertemente tipado (no puedes convertir un valor sin un cast) o es débilmente tipado (se puede convertir el tipo dinámicamente)?
- Es latentemente tipado (no es necesario escribir la declaración de tipo) o manifiestamente tipado (debes explícitamente declarar el tipo)?
- 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”.