top of page
Foto del escritorBraulio Madrid

8 Lenguajes que recomiendo aprender sin importar las circunstancias.




Tiempo atrás había hablado de los programas que uso en mi día a día, casi todos ellos de código abierto y gratuitos, desde esa época mi intención era migrar en a #Linux y estaba tratando en ese momento a acostumbrarme a usar alternativas para evitar posibles problemas por #licencias y hacer menos traumática la migración.


Cuando migras a Linux lo primero que se hace evidente es qué, por mínimo que sea cualquier editor de texto, este ya viene con un resaltador de sintaxis y si pruebas algunos comandos de #terminal, mínimo habrás visto un #compilador, lo que quiero decir es que Linux es sinónimo de desarrollo de software, es el ambiente perfecto para que te choques con el aprendizaje de nuevos lenguajes.


En mi experiencia con #ZorinOS, tiene el comando Nano y el editor de textos #Gedit, pero es que también en la tienda te encuentras editores de texto gratuitos como #Geany o #Vim, actualmente estoy usando Geany que es super-simple de usar, apenas pesa y tiene sintaxis para un montón de lenguajes incluso lenguajes de marcado.


Cuando usas Geany a priori puede parecer que soporta muy pocos lenguajes solo por las plantillas, pero cuando miras mas a fondo puedes encontrar un montón. A continuación una lista de todo los lenguajes que soporta.


Compilados:
---------------
	Bajo nivel
	----------------
		Assembler: *.asm
		(O)Caml
		
	Medio nivel
	----------------
		C : *.c,*.h	imperativo, estructurado
		Objective-C : *.C,*.h,*.m,*.mm	orientado a objetos

	Alto nivel
	----------------
		C++ : *.h *.hh, *.hpp, *.hxx, *.h++, *.cc, *.cpp, *.cxx, *.c++	generica, estructurada, imperativo
		C# : *.cs *.csx *.cshtml *.razor	estructurado, imperativo, POO, funcional, reflexivo, eventos
		D : *.d	POO, imperativo, funcional, meta
		Vala : *.vala *.vapi *.gir	POO, estructurado, imperativo
		Go : *.go	concurrente imperativo estructurado
		Rust : *.rs	imperativo, estructurado, POO, concurrente, funcional
		Genie : *.gs	imperativo, estructurado, orientado a objetos
		Cython : *??	POO, imperativo, funcional, reflexivo
		Lisp : *.??	declarativo, funcional, POO

		ABC : estructurado
	Sin definir
	----------------
		PHP : *.php *.phtml *.php3 *.php4 *.php5 *.php7 *.phps *.php-s *.pht *.phar	imperativo, reflexivo, POO, funcional
Interpretados
---------------
	Python : *.py *.pyc *.pyd *.pyo *.pyw *.pyz *.pyi	POO, imperativo, funcional, reflexivo
	Ruby : *.rb *.rbw	POO reflexivo
	Lua : *.lua	POO, basado en prototipos, imperativo
	JavaScript : *.js	funcional, basada en prototipos, imperativo
	Tcl : *.tcl *.tbc	POO, funcional, eventos *interfaz gráfica
	Traducción gettext : *.po *(sirve para traducir interfaz de programas hechos en C, Lisp, Python entre otros)
Ambos
---------------
	Java : *.java *.class *.jar *.jad *.jmod	POO
	Clojure : *.clj *.cljs *.cljc *.edn	funcional

Lenguajes de marcado
--------------------
	HTML : *.html *.htm
	XML : *.xml
	YAML : *.yaml *.yml
	JSON : *.json
	CSS : *.css

	Markdown : *.markdown *.md
	reStructuredText : *.rst
	
	LaTeX
	Txt2Tags
	Asciidoc
	Graphviz : *.DOT

Lenguaje de Hardware
--------------------
	VHDL
	Verilog
	Arduino

Lenguaje de Instalador
----------------------
	NSIS
	Makefile
	CMake


Archivo configuración: *.conf
CUDA
GLSL

Abaqus
ActionScript
Ada
Diff

Pascal
Perl

R

COBOL
CoffeScript
Erlang
Ferite
Forth
Fortran(F77)
Fortran(F90)
FreeBasic
Haskell
Haxe

Scala
SQL

MatLab/Octave

Zephir
PowerShell
Shell
Batch

Viendo esta lista tan enorme la pregunta obvia, qué lenguajes de toda la lista es necesario aprender, evidentemente hay que tener la vida Highlander el inmortal para aprendérselos todos, pero como nuestras simples vidas mortales son tan limitadas es bueno tratar de tener un criterio a la hora de escoger un lenguaje el cual aprender, debido a esto existe el índice #TYOBE o esta las encuestas anuales de github y stack overflow, pero mi opinión acerca de estos índices es que tienden una moda a veces pasajera otras veces por el capricho del mercado o las empresas, pero no se fijan en los lenguajes fijos y mas necesarios sin importar la época y aunque esta introducción está bastante larga, aun así daré mi opinión y las razones por las cuales elegir aprender estos lenguajes.


C.


El alma de todo sistema operativo sin importar cuál sea es actualmente C, tanto así que en Linux y cualquier sistema basado en Unix, tiene el lenguaje C disponible, es un lenguaje de medio nivel y es prácticamente la madre que parió todos los lenguajes que conoces de forma directa o indirecta.


Aprender este lenguaje, no solo garantiza que nunca va a pasar de moda, sino que también es el lenguaje que te da el mayor control posible y el mejor rendimiento.


Es el lenguaje con mayor literatura, antiguo y tiene una dificultad enorme.


C++.


Este lenguaje es una extensión del lenguaje C, que le dio características del paradigma orientado a objetos, su rendimiento es casi tan bueno como C, además si has cacharreado lenguajes, habrás visto que tanto la sintaxis, como su filosofía tiende a copiar este lenguaje. Entonces para que buscar copias si tienes al original.


Además es el lenguaje principal para el desarrollo de videojuegos y de programas de escritorio, prácticamente se puede compilar en cualquier sistema.


C#.


Pues si ya sabes C y C++ que te cuesta aprender C#, que vendría siendo la evolución de estos dos lenguajes tomando algo de la sintaxis de Java y es un lenguaje de alto nivel.


Este lenguaje también se está abriendo paso en la industria de los videojuegos como en el caso del motor Unity y de Godot, mi crítica es que igual que Objetive-C es propiedad de una compañía pueden cambiar las condiciones en cualquier momento.


Java.


Hasta el momento hemos visto lenguajes compilados y el inconveniente que tienen es que los programas hechos en ese lenguaje es posible que no funcionen en otros sistemas operativos a menos que se cuente con el código fuente y el compilador apropiado.


Java apunta a solventar este problema usando una máquina virtual, JVM permite correr cualquier programa hecho en Java sin importar el sistema operativo, pero esto tiene su precio y es que al tratarse de un lenguaje medio interpretado y medio compilado, que a su vez es emulado en una máquina virtual, penaliza un poco el rendimiento.


Mi queja es que es propiedad de Oracle y ya una vez se cerró a la comunidad.


JavaScript.


El lenguaje por defecto de internet, es fácil de aprender, no es fuertemente tipado como los anteriores, es también un lenguaje multi-paradigma y es interpretado.


Últimamente tiene tanto poder este lenguaje que es capaz de generar vulnerabilidades a los procesadores, prácticamente tiene el mismo acceso que puede tener el lenguaje C.


Nada mas poderoso que crear una aplicación que corra a través de internet, garantizando que funciona en cualquier máquina.


Tiene el problema que al no ser un lenguaje de tipado fuerte, tiende a generar errores en programas grandes, haciendo mas difícil la escalabilidad, además por ser un lenguaje interpretado penaliza el rendimiento y por eso mismo no es un candidato en videojuegos.


Python.


Es el lenguaje que prácticamente te encuentras últimamente en la sopa, ha ganado mucha relevancia, pues su sintaxis es muy fácil de aprender y tiene ventajas muy notorias a la hora de manejar tipos de datos complejos como matrices y bases de datos.


Tiene prácticamente los mismos problemas de JavaScript, pero tiene mejor rendimiento.


OpenGL.


Es el contrincante de HLSL o DirectX, pero recomiendo aprender OpenGL o GLSL, porque es de código abierto, lo que lo hace mas universal y no importa que sistema operativo uses, prácticamente todas las gráficas lo soporta y es el lenguaje de gráficos para la internet a través de WebGL.


Todo motor de videojuegos ofrece soporte a OpenGL, todo software de modelado 3D ofrece soporte a OpenGL y su sintaxis es prácticamente lenguaje C. El único inconveniente es que es un pelin lento y demora mas en implementar las últimas tecnologías.


Rust.


Un problema que tiene C y C++ es que el manejo de la memoria es manual y no cuenta con un recolector de basura en memoria. Rust mejora muchas de las características de C y C++, ofreciendo una sintaxis mas moderna, previene el cometer errores con el uso de la memoria, es un lenguaje multi-paradigma, pero lo que lo hace especial es que también es un lenguaje muy enfocado a la concurrencia, aprovechando así el uso de todos los hilos del procesador, además fue creado por la fundación Mozilla para aprovechar las bondades de C en los navegadores.


Este es un lenguaje de código abierto, que puede recibir las mejores ideas de la comunidad, debido a esto Google le hizo competencia con el lenguaje Go, que también es open source, pero conociendo a google, a ellos no se les da nada privatizar el acceso.


No dudo que en un futuro este lenguaje pueda dar paso a sistemas operativos mas seguros, mas rápidos y a una internet mas rápida y muy posiblemente tendrá lugar en la industria de los videojuegos, pues es un pelin mas lento que C++ por el nivel de seguridad que tiene, pero si C++ usara el mismo nivel de seguridad, seguro sería mas lento.


WebAssembly.


Es un compilador para la web, donde puedes compilar programas escritos en C, C++, Rust y JavaScript, no sé si me habré dejado alguno sin mencionar.


Conclusiones.


Mi recomendación esta basada en que los lenguajes sean multiplataforma, de alto rendimiento, de código abierto, que pueden ser posibles candidatos para ser usados para páginas web y servidores, también posibles candidatos para la industria de los videojuegos y ser de propósito general a excepción de OpenGL que es para gráficos no mas.


Eso es todo por ahora, escribe cuál de estos lenguajes te llama la atención y cuáles recomendarías que no estén en la lista. No siendo mas nos vemos en un próximo blog.


Entradas recientes

Ver todo

Comentários


bottom of page