Eligiendo tu primer lenguaje de programación

Ciertamente esta es una de las preguntas que más llega a mi bandeja de entrada al momento de hablar de programación. Si vamos a comenzar una serie de artículos que les permitan aprender a programar y devolver el conocimiento gratuito en forma de contribuciones a comunidades de software libre/open source en el mundo, es necesario responder a esta básica aunque un poco difícil pregunta. ¿Qué lenguaje de programación debo aprender?

Un poco de historia

Para poder empezar a comprender y elegir un lenguaje de programación, primero debemos conocer un poco sobre la historia de los mismos, sus usos y funciones, y cómo resuelven distintas necesidades a lo largo del tiempo.

Lenguajes de máquina (bajo nivel)

Conocidos comunmente como Assembly, son lenguajes de programación que podríamos definir como dialectos de un idioma más general… Esto suena un poco complicado pero lo voy a ejemplificar… Sabemos que el lenguaje universal de la computación es la electricidad, esto quiere decir que en última instancia lo que una computadora lee son 0s y 1s, vamos a denominar esto como español de computadora. En este ejemplo, el español es la regla básica, pero como bien sabemos, no es lo mismo el español que hablan los latinos al hablado en España, e incluso así, no es lo mismo el español de Perú con el español de Argentina. Evidentemente todos tenemos casi las mismas palabras (0s y 1s), mas el uso y significado pueden variar de acuerdo al contexto.

Esto sucede a nivel de procesador. Cuando hablamos de arquitecturas de computación, (amd64, intel, arm,…) nos referimos al dialecto de ese español de computadora. Esto se debe a que diversas empresas entienden el orden y significado a su manera, por lo que algunos varian en detalles como el flujo de la corriente, o el orden con el que se van a guardar los 0s y 1s.

Estos lenguajes de programación son sumamente veloces, puesto que trabajan al nivel más bajo posible de programación, pero son sumamente dependientes de la arquitectura y ciertamente son un poco más complicados de aprender que el resto. Estos suelen requerir de una base más amplia de conceptos para poder transformar la data y poder ejecutar cosas útiles en ellas. Para los amantes de los videojuegos, un ejemplo serían las consolas SEGA, las cuales utilizaban Assembly para programar sus juegos. Evidentemente en esa época la cantidad de memoria era mínima comparada con hoy, y era necesario dominar un lenguaje que pudiera ser veloz y producir programas ligeros.

Lenguajes de alto nivel

Este gran grupo contempla aquellos lenguajes que vinieron después de Assembly. La necesidad de obtener codigo portable hizo que surgiera un grupo de lenguajes denominados compilados. Entre estos el primero en tomar ventaja fue C, el cual ha tenido predominancia en la programación a nivel de sistema operativo desde los 70s.

Lenguajes compilados

Vamos a ver un ejemplo práctico de lo que comento. Veamos un programa muy simple en lenguaje C que imprime una línea de código.

Diseño propio. Christopher Díaz Riveros

Tras compilarlo tenemos lo siguiente:

Diseño propio.Christopher Díaz Riveros

Pero ahora veamos lo que tendríamos que escribir para replicar el mismo resultado en código Assembly:

Diseño propio. Christopher Díaz Riveros

Esta es la traducción de nuestras 3 líneas de código de simple.c, el archivo simple.s es creado mediante el comando gcc -S simple.c y es lo que entendería nuestro procesador en un dialecto Assembly. Evidentemente para poder crear un ejecutable que conste de 0s y 1s es necesario procesar el archivo simple.s y conectarlo con las bibliotecas compartidas de nuestro sistema. Esto se hace mediante un ensamblador (as) y un conector (ld).

Los lenguajes compilados brindan una gran ventaja sobre los de bajo nivel, son portables. La portabilidad entrega código que puede ser ejecutado en distintos procesadores sin la necesidad de generar código específico para cada arquitectura. Otra ventaja evidente es la simplicidad que emplea al momento de leer y escribir código. Dentro de sus principales desventajas tenemos una elevada complejidad, puesto que comparado con el siguiente tipo de lenguajes que veremos, la libertad que brinda C puede ser perjudicial si no se sabe controlar, ciertamente es como entregar una pistola, podría suceder que en la falta de experiencia una persona termine disparando a su propio pie en el intento de limpiar el arma.

Lenguajes interpretados

Dentro de este grupo tenemos una gran variedad de lenguajes, entre los más importantes contamos Python, Ruby, Javascript, PHP, etc… La idea básica de estos lenguajes es brindar una forma rápida de creación y ejecución de programas, esto se debe a que muchos de los procesos difíciles son llevados a cabo en el intérprete, y la programación de la lógica es la que se implementa en el código. Veamos el mismo ejemplo anterior pero esta vez escrito en Python:

Diseño propio. Christopher Díaz Riveros

Dentro de las cosas más resaltantes podemos ver que la primer línea se encarga de llamar al intérprete ( el programa que va a ejecutar nuestra aplicación) y el subsiguiente código es más “simple” que su versión en C, puesto que todo el trabajo pesado se realiza en el intérprete.

Diseño propio. Christopher Díaz Riveros

Los lenguajes interpretados brindan al desarrollador una capa de seguridad mayor, puesto  cuentan con controles de seguridad más rigurosos (OJO que no son perfectas, puesto que hasta los mejores pueden cometer errores) y ya no sufrimos el riesgo de disparar un arma sin darnos cuenta, puesto que al primer intento, el intérprete soltaría una alerta y se cancelaría la ejecución. La principal desventaja se hace evidente al momento de ejecutar el programa, puesto que este es más lento que su contraparte binaria, esto precisamente debido a la mayor cantidad de procesamiento para poder asegurar que el código funciona. Si el programa no requiere de plazos extremadamente cortos, la diferencia puede pasar desapercibida, pero si hablamos de miles o millones de datos por segundo, la diferencia se hace exponencialmente notable en los lenguajes compilados.

Tipado

Esta es una caracteríscia de los lenguajes de programación, estos pueden ser fuertemente débilmente tipados. Este tema lo voy a dejar para otro post, puesto que es necesario y curioso entender cómo se almacena la memoria en un programa, pero por ahora solo necesitamos hacer la distincion: Los lenguajes fuertemente tipados son aquellos que requieren conocer el tipo de dato que va a trabajarse en una variable o constante, mientras que los débilmente tipados pueden realizar conversiones de manera implícita y todo dependerá de una jerarquía de conversión seguida por el lenguaje. (si no se entiende ahora, no hay problema, lo dejaremos para después)

Paradigmas

Al igual que todo en el mundo GNU/Linux, los lenguajes de programación se basan de acuerdo a paradigmas, y se generan comunidades en torno a estos. Por ejemplo tenemos la Fundación Python o Ruby o PHP o Bash (en cuyo caso es la comunidad GNU). A lo que quiero llegar con esto es que no puedo expresar la gran cantidad de pros y contras que tiene cada uno, pero si puedo decirles que donde existe un lenguaje de programación libre, existe una comunidad donde aprender y participar. Vale la pena mencionar que muchos si es que no son todos los intérpretes de lenguajes están escritos en C, o algún derivado cercano, y el desarrollo de los mismos suele llevarse a cabo por un grupo más reducido de la comunidad, quienes se encargan de tomar decisiones que afectarán a todos los usuarios del lenguaje. Pueden incluso formarse instituciones que velen por el desarrollo correcto del lenguaje, como es el caso de C.

¿Cuál elegir?

Ya hemos hablado bastante sobre los lenguajes y todavía no respondo a lo más importante 😛 . Pero espero que tras haber revisado este pequeño artículo no sea necesario que sea yo mismo quien te diga qué lenguaje elegir, puesto que con esta información estás en toda la capacidad de buscar uno que te genere curiosidad. Evidentemente si deseas aprender a programar en un lenguaje Assembly requerirás de bastante tiempo antes de poder tener algo funcional, el tiempo se reducirá bastante si optas por un lenguaje compilado, donde además de contar con la portabilidad en sistemas *NIX, podrás aprender información referente a el funcionamiento del mismo sistema, puesto que estar en contacto con C o derivados te hace de una manera u otra aprender cómo funciona de manera general un sistema operativo. Por último, si lo que quieres es aprender algo ligero y que te permita hacer mucho sin la necesidad de comprender mucho, los lenguajes interpretados son una manera entretenida de aprender y desarrollar habilidades de programación.

Aprende con algo emocionante

Este es el mejor consejo que puedo darles, si quieren aprender algo, es necesario encontrar algo apasionante primero, sino será bastante difícil sobrepasar la curva de aprendizaje típica de todo lenguaje de programación. Supongamos que administran sistemas, en ese caso tal vez sea necesario aprender un lenguaje ideal para scripting (interpretado), dentro de estos contamos con Perl, Python, Bash, etc etc… Tal vez lo tuyo son los juegos, existen muchos proyectos en lenguajes como Javascript, Lua, C++, dependiendo del tipo de juego que desees realizar. Tal vez te gustaría crear una herramienta a nivel de sistema, pues tenemos C, Python, Perl, como verás algunos se repiten, y esto es debido a que muchos lenguajes pueden ser utilizados para muchas tareas, por eso la definición de lenguajes multipropósitos en la mayoría de estos.

Comienza un proyecto

Con esto no me refiero a que crees el siguiente compilador, o incluso el siguiente lenguaje de programación, un proyecto puede ser arreglar un pequeño bug en tu programa favorito, tal vez incluso ayudar a mejorar la documentación. ¿Por qué la documentación? porque no hay mejor forma de aprender cómo funciona el software que leyendo y ayudando a escribir su documentación, porque luego del código fuente, es la mayor fuente de información que se va a encontrar sobre el programa. En otro momento veremos cómo leer el código de un proyecto y entender las funciones y valores que adquieren.

Muchas gracias por haber llegado hasta aquí y como siempre, sus comentarios me ayudan a generar mejor contenido y saber dónde enfocar la atención, Saludos.


Categorías

Programación

ChrisADR

https://blogs.gentoo.org/chrisadr/ Hola, me mudé a mi blog dado que perdí el acceso a desdelinux... ahí encontrarán más contenido ;) saludos,

37 comentarios

  1.   Anónimo dijo

    Como siempre un 10!!!!!! Gracias por tus articulos. Saludos y que vengan mas!!!!

    1.    ChrisADR dijo

      Muchas gracias 🙂 me anima bastante a seguir escribiendo. Saludos

  2.   Rubén dijo

    Creo que es un error hacerse la pregunta “qué lenguaje elegir?”. Yo soy de los que piensan que el lenguaje es lo de menos, lo importante es aprender los fundamentos de la programación y a “pensar computacionalmente”. Decantarse por una sintaxis, su tipado, si soporta OOP, su utilidad, etc. creo que es algo que vendrá de forma natural en el estudio y al fin y al cabo, todo programador conoce más de 1, 2 y 3 lenguajes…y gracias a los conceptos de programación (y no de sintaxis) que tiene es capaz de programar en un lenguaje en el que aún no tiene experiencia.
    No obstante, para los iniciados, creo que un buen lenguaje puede ser Python por su sencillez, pero sobre todo, ir un poco más allá, estudiar algoritmos y saber como funcionan las cosas “por dentro”.

    Un saludo ChrisADR

    1.    ChrisADR dijo

      Hola Rubén, gracias por compartir
      Hay algo que he aprendido con el paso del tiempo en el mundo de la programación, y es que “el que mucho abarca poco aprieta” y con esta conocida frase me refiero a que muchas veces, y sobre todo los más entusiastas, deciden probar de todo un poco, y tener giros muy rápidos en cuanto a su forma de aprender a programar. Yo considero, y es opinión personal, que un buen desarrollador debería conocer y dominar un lenguaje de compilador y un lenguaje de intérprete, además de tener nociones de algún dialecto de Assembly.
      El motivo es el siguiente, el prototipado siempre debe ser algo sencillo y rápido, fácil de generar y que muestre de manera general un resultado, pero en caso de no ser suficiente, debe haber un “plan B” para recurrir cuando el intérprete ha llegado a su límite.
      Conocer un dialecto de Assembly no solo te da confianza sino que te enseña a pensar “computacionalmente”, pero evidentemente esta parte es la más complicada de todas, y ciertamente es algo a lo que no todos los programadores llegan.
      Pero volviendo al tema, pues la idea central creo que es, “escoge un lenguaje y practica MUCHO”, porque en realidad la única forma de hacerse bueno programando es leyendo y escribiendo código, y esto es algo que he aprendido de la comunidad del kernel, cuando uno mantiene la misma sintaxis por mucho tiempo, deja de ver la forma y se empieza a preocupar por el FONDO. La idea de escoger un lenguaje o sintaxis desde el principio es que uno sea capaz de acostumbrar su lectura y escritura de tal manera que pueda empezar a leer el SIGNIFICADO del programa en lugar de la sintaxis del mismo.
      Este es el motivo central de este post, que cada uno elija su lenguaje para que en los siguientes podamos explicar los conceptos, tal vez con esto se aclaran las dudas 🙂
      Saudos y gracias por compartir.

  3.   deibis contreras dijo

    gracias por el posr estubo bueno.

    Saludos

    1.    ChrisADR dijo

      Hola Deibis, gracias a ti por compartir 🙂 Saludos

  4.   JorgeFS dijo

    Mi consejo: cualquier cosa que no sea PHP. Hace 20 años PHP tenía sierto sentido en su existencia debido al alto nivel de complicación que era programar la Web en otro lenguaje utilizando CGI. Pero hoy en día existe una gran variedad de Frameworks para hacer el desarrollo Web mucho más ameno en potentes lenguajes, como Django para Python, Spring para Java o Rails para Ruby. Aunque actualmente PHP aparece en todas las listas de popularidad de lenguajes, en mi opinión PHP perderá su relevancia con el tiempo.
    Aconsejo fuertemente comenzar con C\C++ para entender la realidad de la programación, aunque la curva de aprendizaje es altísima.
    Saludos.

    1.    ChrisADR dijo

      Hola Jorge gracias por compartir, solo recordar Laravel, el cual es un Framework bastante sólido 🙂 a mí personalmente nunca me gustó Spring ni Java para el desarrollo web, lo encuentro bastante engorroso, pero supongo que es parte de la cantidad de tiempo que llevan en el mercado, en su momento fueron pioneros y ciertamente hoy por hoy las alternativas modernas (Js, Python y Ruby) han sabido mejorar la manera de presentar código que sea legible y modificable sin mucho trabajo.
      Yo también me inclino a que la gente aprenda C/C++ en algún punto de sus vidas, yo empecé con Java, pero supongo que esa es la belleza de la programación, puedes empezar con el que quieras, siempre y cuando seas consistente será provechoso 🙂 Saludos

    2.    Rubén dijo

      No puedo estar más en desacuerdo contigo. Yo empecé hace muchos años con C y VB, para luego centrarme en PHP y JS (ya que me enfoqué al desarrollo web) y posteriormente mientras estudiaba aprendí C/C++ y Java principalmente.
      PHP tiene una cantidad de ventajas que no podría enumerar en este mensaje. PHP7 es rápido (más que Python…sin usar hhvm, diferentes caches, frameworks como Phalcon o bytecode en el caso de Python), tiene una cantidad de librerías y frameworks enorme, tiene una cantidad enorme de funciones directamente implementadas para usarlas en cualquier momento, su sintaxis tan parecida a C hace que sea muy fácil migrar a otros lenguajes.
      El 30% de los sitios webs a nivel mundial están hechos con Wordpress (PHP) y eso parece que no va a cambiar, Wikipedia lo usa, Facebook (con hhvm) y una gran cantidad de sitios, en total, un 80%.

      Te recuerdo que Ruby on Rails al igual que Django tienen 12 años! Qué cuota han conseguido en este tiempo? Y por supuesto, hablamos de 2 frameworks que prácticamente tienen el monopolio y no existe ningún tipo de fragmentación. Qué otras alternativas serias tengo? Decir que PHP va a perder relevancia tiene muy poco sentido.

      Que ahora Python esté de moda porque tiene una curva de aprendizaje rápida, sea un lenguaje sencillo y te lo vendan como el “hazte programador en 20 horas con Python y trabaja de ello”, con el respaldo de empresas como Google y que ahora exista la moda de buscar nuevos lenguajes (Go, Dart….) para diferenciarte en un CV (o como el nacimiento diario de 50 frameworks para Javascript!), no quiere decir que las cosas cambien.

      Ruby es un lenguaje muy interesante, pero rompe tanto con los patrones establecidos que me cuesta creer que se hiciera más popular que PHP. Por supuesto, Ruby creo que es el peor lenguaje para empezar a programar de todos.
      Entiendo que me digas que Python puede ser ameno para programar, incluso Ruby con su infinidad de peculiaridades…pero Spring con Java? Really? Java puede ser muchas cosas…pero más ameno que Python y PHP?

      Está muy bien empezar con Python, pero como te quedes solamente en Python, corres el riesgo de que muchas empresas crean que tu nivel de programación no es “profundo” (aunque seas muy bueno en Python). Esto se debe a que compites con otros lenguajes “multiproposito” como C++ o Java. Se puede programar en Python sin saber la diferencia qué carajos es un puntero, operaciones bitwise, cómo funciona un garbage collector y un largo etcétera.
      Python es quizás lo menos parecido a la “programación clásica” que existe y se puede ver como un “lenguaje para niños” (entiéndase la metáfora), y eso a su vez es una ventaja y una desventaja.

      1.    JorgeFS dijo

        “Python es quizás lo menos parecido a la “programación clásica” que existe y se puede ver como un “lenguaje para niños” (entiéndase la metáfora), y eso a su vez es una ventaja y una desventaja.” LOL, esta es una de las cosas más cómicas que ví decir sobre Python. Alguna vez usted aprendió Python en serio?
        Hace cuánto tiempo no se dá una vuelta por el mundo fuera de PHP?
        Amigo PHP nació muerto. PHP(\d+) tiene muchisimo lastre consigo debido a un muy mal diseño inicial y con tal de mantener la comunidad de usuarios sigue arrastrando todos esos errores de diseño iniciales muy a fondo. PHP nació sin modularidad, con muchisimas funcionalidades al estilo C (que de paso, no sé de donde usted sacó que como su sintaxis es similar a C puede ser facilmente portado a otros lenguajes). Un lenguaje de alto nivel, como debería comportarse PHP, tiene cosas tan feas como este reguero de funciones listadas en su sitio oficial http://php.net/manual/en/indexes.functions.php, esto es debido a que nació sin modularidad, por tanto todo está cochinamente mezclado y sin espacios de nombres.
        Esto es un pedaso de código PHP:
        “stream_notification_callback”);
        stream_context_set_params($ctx, $params);
        var_dump(stream_context_get_params($ctx));
        ?>
        en algún punto se puede determinar de donde se importaron todas estas funcionalidades ‘stream’? NO, se pudiera decir entonces que son buildin functions, pero entonces todo el ecosistema es buildin functions?. Y así, hay muchísima basura en el código PHP, que si usted no es capaz de entender la complejidad e inutilidad de tan mal diseño, perdoneme pero tiene muchisimo mundo que ver todavía.
        Wordpress es una excelente solución de software, pero esto no quiere decir que tenga una buena base tecnológica. Usted puede martillar con una piedra y sacar clavos con los dientes, y aún así puede hacer excelentes trabajos de carpintería, pero claro está, con muchisimo más trabajo que otro carpintero que utiliza un buen martillo.

        Por otra parte: “hazte programador en 20 horas con Python y trabaja de ello”, núnca he visto semejante estupidez. Puede que en PHP hagas un sitio Web en 20 horas y sin tener conocimiento alguno de como funciona la programación Web, o la programación en si. De hecho este es el porque PHP es tan popular, porque los novatos al entrar a este mundo ven en PHP un punto de rápido desarrollo (por esto tanto código PHP sucks so hard).
        Referente a carencias de Python, la única en la que acertó fué en el trabajo con punteros, pero al caso, Python es un lenguaje de alto nivel (como lo es Java) y no hace uso a nivel de sintaxis de estos; pero operaciones bitwise, serio?, se refiere usted a esto x << y, x >> y: https://wiki.python.org/moin/BitwiseOperators. Lo del garbage collector en serio lo entendí mucho menos: https://docs.python.org/3/library/gc.html.
        Carencias de PHP:
        -PHP tiene un muy pobre diseño de programación orientada a objetos (OOP).
        -Aún no se puede hacer sobrecarga de operadores.
        -Sorpresa, function overloading en PHP no es lo que esperas naturalmente de este concepto.
        ….. y me acabo de aburrir jeje.
        Saludos.

        1.    Rubén dijo

          Puse entre paréntesis “entiéndase la metáfora” (por la comparación de Python con C++/Java en un mismo entorno de trabajo), está claro que tu no la entendiste. Podría decirte que un programador C++ puede aprender Python de una manera mucho más rápida, que un programador Python aprender C++, al igual que no es sorpresa que la media de salario de un programador C/C++ sea más alta que uno de Python.
          Te lo podría explicar con otros ejemplos, incluso con algún dibujo! pero parece que tu solo te centras en descontextualizar y ridiculizar lo que pongo.

          Yo en ningún momento he dicho que PHP sea el mejor lenguaje del mundo ni que tenga un diseño ejemplar, no sé de donde sacas eso. Creo que antes de juzgar el conocimiento de los demás deberías mejorar tu comprensión lectora. Lo que si es cierto (y dije en mi mensaje) es que desarrollar con el es muy ágil, además de todo el ecosistema de frameworks, librerías y utilidades que puedes encontrarte.
          Además, qué tipo de comparación hacemos? Python como lenguaje multipropósito o para web? En ese caso, por qué lo comparamos con PHP? PHP tiene un campo concreto, y es en ese campo donde Python (con una cuota del 0.2%, que no ha llegado a cambiar en todo este año) palidece al lado de PHP.
          Ahora vamos a ver los trends de PHP; del 82,4% en Enero de 2017 a 83.1% en Enero de 2018: https://w3techs.com/technologies/history_overview/programming_language

          Es Python el que va a destronar a PHP? En qué año? en qué lustro? década?
          Python podrá usarse en muchas otras tareas, e incluso llegar a ser más usado que PHP, pero Python como lenguaje de desarrollo web está a años luz de ser siquiera relevante, 0.2% estancando frente a 83.1% (con subida en este año).

          También das cosas por hecho diciendo que no me doy una vuelta fuera de PHP, haciendo alusión de que solo conozco PHP, cuando precisamente hace mucho que no programo en PHP jaja. Actualmente por cuestiones laborales programo sobre todo en Java.
          Tampoco he dicho que por programar en Python no se tenga el conocimiento sobre bitwise, un garbage collector o un puntero. Sino que se puede programar en Python sin siquiera saber que es esto. Sin embargo, dudo mucho que ese sea el caso de un programador C++. Y obviamente hago la comparación cuando Python entra en ese campo del “lenguaje multipropósito”, no para la programación web.

          Lo de hazte programador en 20 horas es simplemente un chiste, una exageración. Sin embargo, te podría poner aquí diversos enlaces sobre plataformas de educación online y cursos que prometen cosas parecidas. No me culpes a mi, culpa a un mercado laboral que piensa que hacerse “experto programador” es cuestión de hacer un cursillo de 20 horas. Y siendo Python uno de los lenguajes de moda y además, con la curva de aprendizaje más rápida…blanco y en botella.

          Insisto, basas tu mensaje en decir lo malo que es PHP (que en cierta parte, estoy de acuerdo). Me parece correcto, salvo porque mi mensaje no trata sobre eso, sino por qué PHP se va a seguir usando y no va desaparecer mañana como tu crees.

          Un saludo

  5.   nadie dijo

    C -> Go -> (Lisp|Haskell|Java|lo-que-sea)

    1.    ChrisADR dijo

      Hace poco un lector me envió a mi correo una recomendación de un libro de Go, ciertamente un lenguaje para tener en cuenta en el futuro y del cuál tal vez habrá algun post aquí 🙂 Muchas graicas por compartir

  6.   mvr1981 dijo

    Bien… ¿y que programo? ¿para que aprender un lenguaje de programación hoy en día con tan buenos y experimentados programadores que ya existen? Qué problemas puedo resolver yo que otros no hayan resuelto ya de una forma mucho más eficiente?… en definittiva: ¿Qué tan original es ser programador hoy en día? ¿como puedo colaborar con otros sin que me pateen o me autoexcluya por mi falta de conocimientos y experiencia?.

    1.    ChrisADR dijo

      Hola mvr1981, preguntas interesantes realmente 🙂 vamos a desgranarlas de la última hacia la primera.

      ¿como puedo colaborar con otros sin que me pateen o me autoexcluya por mi falta de conocimientos y experiencia?.

      Si no quieres que te pateen, el primer paso es aprender el proceso, no te imaginas la cantidad de gente que llega a proyectos queriendo hacer las cosas exclusivamente a su manera, queriendo que la comunidad se adapte a sus deseos. Ciertamente es como que yo llegue a tu casa y me ponga a hacer un desorden y faltar el respeto a tu familia (así es como se siente muchas veces). Si quieres evitar que suceda esto, presta mucha atención a las pautas para contribuir, los medios por los cuales hacerlo, y no mandes algo incompleto, si necesitas ayuda siempre hay medios para comunicarse, pero un trabajo mal hecho probablemente creará malas primeras impresiones. Si no quieres autoexcluirte, eso ya depende de ti, puedes verlo como el programador inútil que no sabe lo que hace o el que está en camino a convertirse en un excelente programador, y eso solo sucede con práctica y ciertamente con errores en el camino. Yo me he equivocado muchas veces antes de adquirir mi status de developer en Gentoo, y eso no me detuvo a seguir intentando a pesar del “mal momento” 🙂 .

      ¿Qué tan original es ser programador hoy en día?

      -No se trata de originalidad, es una necesidad hoy por hoy, solo piensa lo siguiente, hace 20 o 30 años, escribir a máquina era una necesidad, muchos trabajos inferían que sabías o por lo menos lo podías hacer. Hoy saber Ofimática es una necesidad, practicamente no existe trabajo que no te ponga frente a documentos de Ofimática. Mañana, dentro de muy poco, programar será una necesidad. Y esto también aplica desde un punto de vista personal, saber qué sucede en los programas a los cuales confías cosas tan importantes como tu dinero, salud, familia, es algo lógico para mí, porque solo puedes conocer sus limitaciones si sabes cómo funcionan y para saberlo, necesitas saber programar.

      ¿Qué problemas puedo resolver yo que otros no hayan resuelto ya de una forma mucho más eficiente?

      -Te sorprendería la cantidad de features que se requieren hoy por hoy, y a decir verdad, no importa que existan los mejores programadores del mundo en la comunidad, el trabajo siempre será mayor a la capacidad de trabajo de los desarrolladores, esto lo puedo comprobar en Gentoo, existe gente que desarrolla el kernel, gente trabajando para Google, Sony, etc etc… lo único que todos tenemos en común es que nadie tiene tanto tiempo como quisiera para poder realizar todo el trabajo pendiente.

      ¿para que aprender un lenguaje de programación hoy en día con tan buenos y experimentados programadores que ya existen?

      -Esto se responde en la segunda pregunta 😉 Pero ahora puedo agregar que las generaciones deben poder soportar el trabajo que ya se ha desarrollado, con esto quiero decir que aquellos “experimentados” desarrolladores poco a poco irán desapareciendo y será necesario que los más “jóvenes” desarrolladores tomen las responsabilidades y ayuden a mantener le ciclo vivo, una comunidad que no cuenta con gente jóven e inexperta es propensa a desaparecer a lo largo del tiempo, precisamente porque no habrá oportunidad para transmitir el conocimiento.

      ¿y que programo?

      -Esto tal vez es lo más difícil de responder, pero intentaré darte un ejemplo 🙂 Hace poco empecé a sufrir los problemas de GNOME 24 y su conexión a Wayland que impiden a programas como Shutter tomar capturas de pantalla. Este es un problema para mí porque cuando escribo mis artículos, necesito mostrarles lo que digo 🙂 buscando un poco llegué a la aplicación de Captura de pantalla de GNOME, algo “minimalista” por decir lo menos. Dentro de sus funciones, existe una de tomar una región de pantalla, pero ¿qué sucede si no tomé bien la foto? Pues debo salir y volver a entrar al programa, algo tedioso ciertamente, a mí me serviría mucho un botón que diga “Volver a tomar” o algo por el estilo que me permita tomar una nueva captura sin tener que salir y entrar de nuevo… Ese es un pequeño proyecto de programación, yo nunca he programado algo en el framework de GNOME así que evidentemente tengo mucho que aprender antes de mandar mi “parche” con el botón nuevo, pero en el camino aprendo a programar y con un poco de suerte esta feature será de ayuda para más de uno cuando esté a disposición de todos.

      Este es un ejemplo, es algo sencillo y que seguro cualquier otro programador “experto” podría haberlo hecho ya, pero por evidente falta de tiempo, no ha sido así, ahora soy yo quien tengo la posibilidad de hacerlo, sin ser en realidad un super programador.

      Ahora solo te toca a tí encontrar algo que haría tu vida más “simple” en ese software que usas tan seguido, la belleza de eso es que si seguimos los consejos que les voy a dar en los siguientes artículos, no importará el lenguaje, porque sabrán lo básico para poder empezar a comprender el código que leen y modificarlo para hacer lo que ustedes deseen, esa es una sensacion muy especial 🙂

      Saludos y gracias de nuevo

      1.    nadie dijo

        creo que solo una ves he abierto el programa de capturas de gnome, lo mas sencillo es ir a los atajos de teclado y asignarle tres combinaciones print para capturar todo alt-print para capturar la ventana activa y super-print para hacer una seleccion de la region de captura, ya viene los atajos disponibles, simplemente es cosa de asignarlos

        1.    ChrisADR dijo

          Eso por eso que le decimos ejemplo 🙂 porque cosas pequeñas como ese botón, son programación, pueden ayudar a algunos como pueden pasar desapercibidos para otros, pero ciertamente cumplen con el objetivo principal, ayudar a aprender a programar, y dar paso a nuevas features, tras ese botón pueden iniciarse muchas cosas, como un manejo de sesión, o una pantalla de vista previa de todas las fotos tomadas, o en fin, un montón de cosas que podrían hacerse. La idea es que tu encuentres algo que te haga saltar la curiosidad, cualquier software que corra en tu sistema puede que necesite mejoras o nuevos features que por falta de tiempo o personal no han sido implementados todavía 🙂

      2.    mvr1981 dijo

        Gracias a tí. son muy buenas respuestas.

    2.    Guillermo dijo

      Pues para alguien que no vaya a ser profesional en la materia, habría que ver en qué entorno trabaja, tanto para tareas administrativas como directivas puede ser interesante conocer por ejemplo Python/Basic y saber programar macros en paquetes ofimáticos como LibreOffice o MS Office. Hay ocasiones en que ello puede salvarte muchas horas de trabajo a ti o a otros trabajadores que te rodeen y les pidan realizar cualquier tarea repetitiva, te puedes crear un cuadro de mando para calcularte rápidamente los principales ratios de la empresa tras conectar con la base de datos de la misma y realizar alguna consulta SQL.
      Como todo, si conoces las herramientas a tu alcance podrás pensar en cómo sacarle jugo. No todo está inventado.

  7.   Marcelo dijo

    Guillermo, totalmente de acuerdo contigo, “No todo está inventado” y lo que está inventado es modificable. Hay que sacarle jugo a las herramientas y usar la que más se adapta a nuestras necesidades.

  8.   Ricardo dijo

    Para programación el primer lenguaje que se debe aprender es el Ingles, luego el que mas les apacione y les parezca mas bello

    1.    ChrisADR dijo

      No lo había escrito, pero cierto 🙂 saber inglés ayuda bastante puesto que la mayoría de lenguajes están escritos en el mismo, pero también porque la mayor cantidad de información de primera mano también 🙂 Muchas gracias por compartir

  9.   Ruben Salgado dijo

    Excelente articulo, ademas de motivador.

    1.    ChrisADR dijo

      Muy amable, muchas gracias 🙂 Saludos

  10.   Gonzalo Martinez dijo

    Programar es saber razonar y traducir ese razonamiento a instrucciones.

    Dos aclaraciones sobre el articulo:

    1) Basado en mi experiencia como docente de programacion de casi 10 años, no importa el lenguaje con el que aprendas, sino como aprendas y que tan complejo es el mismo.

    Creo que es mas facil un lenguaje que se pueda aprender de forma estructurada, y luego pasar a otras cosas mas complejas, que empezar con un lenguaje como Java desde el principio.

    Es mas facil aprender como base algo como un Hello World en C o Pascal, que con pocas lineas (PROGRAM en caso de Pascal, o #include <stdio.h> en el caso de C) ya puede empezar a desarrollarse el algoritmo y a codificar programa con su logica directamente, que en Java, que de por si se necesita una clase, un metodo, y algunas cosas mas que para un principiante es una sobrecarga de informacion innecesaria, y que puede bien ignorarse y pasar a otras cosas, pero son conceptos que estan ahi, y en mi opinion, pasar por alto las cosas no es buena forma de aprender, mas si el lenguaje te obliga a utilizarlas. Es como empezar una practica de tiro la primera vez con una M-16, y disparar por meses en modo semiautomatico tomando el mango con las dos manos como si fuera una pistola.

    2) Si un lenguaje es interpretado o complilado depende de su implementacion, no del lenguaje en si mismo. Por poner un ejemplo, si se utiliza Python, para una app web que utilice wsgi (sea mod_wsgi en apache, o uwsgi para Nginx), el codigo python se compila al iniciar el modulo correspondiente, generando archivos .pyc

    Tambien hay generadores de archivos binarios para java (que generan binarios nativos en lugar de bytecode), o compiladores de scripts php en binarios puros.

    Respecto a lo que dicen sobre PHP, simplemente es un lenguaje diseñado en otra epoca, con otras cosas en mente, y sin considerar aspectos que no existian en su momento. Claramente que sea el mas usado no lo convierte en mejor por nada del mundo, pero hay una realidad: es el lenguaje con el que mas chance de conseguir trabajo existe en toda la programacion. Saberlo no esta de mas, por mas que no guste.

    Hasta yo que trabajo ya hace varios años como Administrador de Sistemas y abandone el trabajo de desarrollador, cada tanto tengo que meter codigo PHP en algo.

    1.    ChrisADR dijo

      Hola Gonzalo, gracias por compartir,

      Ciertamente hablando de sobrecargas de información innecesaria, saber que un mismo lenguaje puede ser interpretado o compilado es algo que no es necesario en esta etapa 🙂 Ciertamente la implementación es importante, pero si decimos eso a este nivel, no generamos más que confusión. De la misma manera no se abordan temas de programación orientada a objetos, u otros conceptos que deben ser dosificados de manera gradual para no marear a las personas.

      Puesto que el espacio es reducido, el objetivo principal del post es mostrar a los lectores que deseen programar, que existen dos grandes mundos de lenguajes, que los “tradicionalmente” interpretados son más “sencillos”, que los “tradicionalmente” compilados son un poco más “complejos” pero que vale la pena ese nivel de complejidad para tener un entendimiento más sólido y que es cuestión de cada persona el elegir el lenguaje, puesto que dependiendo del enfoque de programación, podrán escoger sus proyectos favoritos y al mismo tiempo podrán comprender lo que leen y/o escriben 🙂

      Muchas gracias nuevamente, saludos.

      1.    Gonzalo Martinez dijo

        Es que eso es un error, no existen lenguajes compilados o interpretados, existen interpretes y compiladores para cada lenguaje, ambos para casos distintos.

        No es una sobrecarga de informacion mencionarlo ahora, sino que es un error hacer dicha afirmacion. En mi opionion, hubiera sido mas productivo obviar los interpretes si no se queria sobrecargar de informacion.

        1.    ChrisADR dijo

          Gracias por la aclaración, lo tendré en consideración al momento de volver a tocar el tema. Saludos

  11.   Ares dijo

    ¿Qué lenguaje me recomiendan para lado servidor tomando en cuenta que php cayó en desgracia?.
    Lo mismo para base de datos, no sé si ya habrá algo mejor y más moderno que mySQL.

    1.    ChrisADR dijo

      PHP no ha caído en desgracia… Cada lenguaje tiene su ciclo de vida, y php ciertamente ya es un lenguaje que entra en la escala de “maduros”, lo que lo hace útil a nivel empresarial, donde la estabilidad está por encima de todo… Como algunos bancos donde todavía se desarrolla en java, el cual es más “maduro” que php y ciertamente tiene sus seguidores y detractores… Y ni qué decir de COBOL…

      Si lo que buscas es uniformidad y modernidad, javascript se está convirtiendo en uno de los preferidos de los autodenominados “full stack developers”, aunque el paradigma de ruby o la “simplicidad” de python son buenos referentes también…. Incluso perl podría ser la opción dependiendo de las necesidades 🙂

      Hoy en día el ORM (object relational mappers) está tomando bastante fuerza en cuanto al manejo de data relacional. Se pasa de sintaxis de SQL a manejo de clases y atributos… Casi todos los lenguajes (si no son todos) manejan algún ORM.

      Ps. Mongo DB es una alternativa a las bases de datos relacionales que ha tomado bastante importancia, es necesario sin embargo conocer sus pros y contras y validar si sería la mejor solución dependiendo de la necesidad concreta.

      Espero te ayude, saludos 🙂

      1.    Ares dijo

        Gracias, revisaré eso.

      2.    Ares dijo

        Se me olvidaba.

        ¿Qué me recomiendas para trabajar con JAVA en Linux?.
        Si puedes diferenciar entre libre y cerrado mejor.

        1.    ChrisADR dijo

          Eclipse y NetBeans son de código abierto, no estoy seguro si existe alguno que sea netamente software libre, yo tengo costumbre de usar vim porque a veces la cantidad de código hace que usar todo un IDE sea lento y propenso a errores de ejecución. Saludos 🙂

        2.    PaulZeta dijo

          Para trabajar con java en Linux yo uso IntelliJ te recomiendo .

          1.    ChrisADR dijo

            PS, IntelliJ es software privativo 🙂

  12.   je dijo

    Chicos tambien recuerden que… Trabajo en un banco y les cuento que los lenguajes de programacion toman un segundo plano para dejar pasar al prinero a SQL y los Stored procedure .

    1.    Gonzalo Martinez dijo

      Hay que tenerlos muy en cuenta los stored procedures, pero al no usar un lenguaje portable entre motores, al menos en mi experiencia, siempre se trata de evitarlos a menos que no quede mas remedio.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *