¿Qué es la programación?

Código de un lenguaje de programación
Si vamos a reclutar (entre otros roles, pero principalmente) programadores/as… Habrá que saber qué es programar, ¿no?

Esta clase pertenece al curso de reclutamiento IT. Partiremos desde la clase anterior. Te aconsejo que hagas el curso de forma secuencial, y en caso de que estés perdido/a, puedes acceder al índice del curso aquí.

A partir de esta clase empieza la parte técnica IT del curso. Técnica IT en el sentido de que iremos aprendiendo sobre los distintos roles y distintas tecnologías que reclutamos, información básica que nos permitirá reclutar mejor y además filtrar mejor a los candidatos. Todo, por supuesto, adaptado a personas que tienen 0 conocimientos de informática, ya que un profesional de Gestión de Personas no tiene por qué saber nada de eso, aunque en Reclutamiento IT unas nociones básicas como las que conseguiremos en este curso son muy necesarias y, desde mi punto de vista, serán muy valoradas por la mejora en los resultados que te ofrecerán.

¿Qué es un ordenador?

Aviso: no voy a entrar en detalles excesivamente técnicos. Simplemente que para comprender qué significa programar, tendremos que partir de la base. Un ordenador es una máquina que recibe unos inputs/entradas de datos y te da unos outputs/salidas de datos, tras un procesamiento de los mismos. Por ejemplo: si yo en el ordenador escribo en el teclado «Hola Mundo» en el bloc de notas por ejemplo, veré como en pantalla me aparece en el documento del bloc de notas «Hola Mundo«. Es decir, el ordenador recibe una entrada de texto a través del teclado, la procesa (es decir, hay un programa que coge la información que entra a través del teclado y la lleva a pantalla) y la devuelve al usuario mediante dicha información visible en la pantalla. Es decir, hay un esquema muy básico:

Datos de entrada ——> Procesamiento de datos ——> Datos de salida

Por supuesto, el ordenador tiene distintas unidades de hardware, una determinada arquitectura, pero no vamos a entrar en eso. Con que sepas esto es suficiente.

Imagen de un PC portátil
Tras esta clase, no verás un PC jamás de la misma forma.

¿Qué es un sistema operativo?

Digamos que estamos construyendo un ordenador, y ya tenemos el hardware (es decir, toda la electrónica -hablando a grosso modo-) listo para funcionar. Pero ahora yo quiero poder gestionar ese poder computacional del ordenador (ese poder de procesamiento, recordemos el esquema anterior de qué es el procesamiento de datos) de forma gráfica y fácil, de forma que sea fácil su uso. Para eso necesito un sistema operativo: Windows, Linux, MacOS, Android en móviles etc.

Por tanto, y explicado de forma llana, el sistema operativo es una interfaz gráfica (interfaz porque comunica el hardware con el software o programas que yo instale en el ordenador) que me permite manejar el hardware del ordenador a mi antojo sin necesitar conocimientos de informática (sólo saber manejar un sistema operativo). Por ejemplo: cuando yo navego en Internet, al final estoy realizando un montón de operaciones a nivel de hardware, implicando a procesador, tarjeta de red, memoria caché etc. Pues todo eso que suena tan complicado tú lo haces con unos simples clicks y sin darte cuenta. Y eso es gracias a la interfaz gráfica del sistema operativo. Un sistema operativo que es así porque también está programado, por supuesto.

Ahora con esta base tan sencilla, ya podemos lanzarnos a comprender qué es la programación.

Dos personas hablando
Si utilizas un lenguaje para hablar con una persona… ¿Por qué para hablar con un PC iba a ser distinto?

¿Qué es la programación?

La programación no es otra cosa que la forma que como seres humanos tenemos de comunicarnos con los ordenadores. Un ordenador es una máquina creada por el ser humano que procesará los datos como un ser humano le indique. Pero se lo ha de indicar de forma clara y precisa, sin ambigüedades, porque si hay confusión, tendrás errores y el programa que hayas creado no funcionará de forma correcta.

Pongamos, por ejemplo, que hacemos un programa que es una calculadora. Tú has de introducir dos números y decirle si quieres que los sume (+), los reste (-), los multiplique (*) o los divida (/). Si esto se programa de forma clara, evidentemente, cuando yo le diga a la calculadora «oye, súmame 2 + 2» pues saldrá 4 como resultado. Si yo me equivoco, y al ordenador le digo que para sumar use el símbolo de la resta (-), al decirle al ordenador «oye, súmame 2-2» el resultado será 0. Y no porque el ordenador se haya equivocado, sino porque el ordenador recibe datos, los procesa y te los devuelve. Si durante ese procesamiento (que es el programa que tú hayas hecho) le dices que sumar se hace con el símbolo de la resta, pues el PC cuando le digas que sume restará. Por tanto, es necesaria precisión.

Imagen de una placa base
La programación a bajo nivel es dependiente del hardware y eso creaba muchos problemas, como veremos a continuación.

Programación a bajo nivel.

¿Has escuchado alguna vez aquello de que un PC sólo comprende 0 y 1? Pues eso. Por cómo está diseñado el hardware de los ordenadores, con la electrónica actual, un PC sólo habla en lenguaje binario (0 y 1). Por ejemplo, contemos de 0 a 2 en binario: cero (0000), uno (0001), dos (0010). ¿Ves? El hardware sólo entiende de 0 y 1, sólo comprende binario.

El lenguaje binario, también llamado código máquina (por motivos obvios, es el único que entiende la máquina), tenía una serie de evidentes problemas, pero sólo mencionaré uno: hacía super complejo programar. Si un dos se representa así (0010) imagínate hacer una calculadora (que es un programa muy sencillo) en binario. Sería muy complejo, fácil equivocarse, en cuanto te equivoques en un número el programa ya no funcionará o funcionará mal etc.

Por tanto, se inventó un lenguaje de programación que resultara más fácil a los seres humanos: lenguaje ensamblador. Es un lenguaje que igual que el binario depende directamente de las características del hardware sobre el que corre el programa, pero al menos ya es algo más parecido a lenguaje humano. Por ejemplo, multiplicar en ensamblador se expresaría como «MUL«. Pero claro, entre otros problemas del lenguaje ensamblador, yo no quiero hacer un programa que sólo funcione en un determinado tipo de hardware. Imagínate, no sé, Microsoft cuando lanzó Windows 95. Si aquello sólo hubiera funcionado en un determinado tipo de hardware, ¿Qué haces? ¿Todo el mundo se puede comprar sólo un tipo de ordenador? ¿Y los que tienen un ordenador distinto qué? Realmente, esto presentaba muchísimos problemas.

Por todo esto, se llaman lenguajes de programación de bajo nivel, porque presentan la característica de que dependen del hardware sobre el que se ejecuten, lo que hacía muy complicada la informática comercial y de uso doméstico.

Programación a alto nivel.

Los informáticos de la época decidieron que era necesario hacer lenguajes de programación independientes del hardware, que funcionaran independientemente del ordenador que tuvieras y que, además, fueran más parecidos al lenguaje humano, para así facilitar el aprendizaje de los mismos, cometer menos errores programando etc. Este tipo de lenguajes se llaman lenguajes de programación de alto nivel.

Para ello, inventaron unas tecnologías, los compiladores y los intérpretes (no voy a entrar en detalles técnicos aquí) que básicamente traducen los lenguajes de programación de alto nivel a código máquina de forma automática. Así los seres humanos nos podíamos comunicar con el ordenador de forma infinitamente más sencilla que antes.

Algunos ejemplos de lenguajes de alto nivel: C, C++, Java, JavaScript, PHP…

Ejemplo sencillo de algoritmo en JavaScript
Aquí tienes un sencillo ejemplo de un algoritmo en JavaScript, que simplemente te comprueba si el valor que introduce el usuario es un número o no y te informa de ello.

¿Qué es un algoritmo?

No podíamos acabar esta clase sin desentrañar esa palabra que parece tan complicada cuando eres IT Recruiter, porque piensas que un algoritmo tiene que ser algo relacionado con matemáticas, y super complejo y todo eso… Y bueno. Vamos a aprender el concepto de algoritmo de forma super sencilla.

Un algoritmo es realmente un conjunto de instrucciones lógicas que, ante una entrada de datos, nos permiten procesar los datos y en función de dicho procesamiento ofrecer una salida de datos. Qué complejo, ¿no? Veamos con un ejemplo y lo comprenderás super rápido.

Yo tengo una empresa de trenes y en mi página web sólo permito comprar billetes a los usuarios que tienen más de 18 años. Por tanto, vamos a esquematizarlo.

Entrada de datos (edad del usuario).

Procesamiento de datos (si tiene más de 18 años, le dejo comprar billete; en caso contrario, no le dejo comprar billete)

Salida de datos (el usuario con más de 18 años accede a la pantalla de compra de su billete, el usuario con menos de 18 años recibe un mensaje en la pantalla de su ordenador que le indica «Lo sentimos mucho, por ser menor de edad no puede comprar un billete»).

Pues esto es un algoritmo, expresado en pseudocódigo, es decir, expreso la lógica pero en lenguaje humano. Esto se podría implementar tal y como está expresado en cualquier lenguaje de programación (JavaScript, PHP, Java, Python etc.).

Si lo comprendes mejor, puedes hacerte un esquemita del proceso de entrada, procesamiento y salida de datos, pero creo que ha quedado bastante claro. Evidentemente esto es un algoritmo sencillísimo, pero a partir de ahora cuando escuches la palabra algoritmo, sabrás a qué se refiere.

Persona programando
Al fin sabrás lo qué es la ingeniería de software…

¿Qué es la ingeniería de software?

Te habrás hartado de escuchar esta palabra. ¿Es lo mismo que programar? Pues a ver, un ingeniero de software sabe programar, pero no todos los programadores son ingenieros de software. Vamos al detalle: la ingeniería de software es una de las ramas de la ingeniería informática que se dedica a la aplicación del conocimiento de las ciencias de la computación para ofrecer soluciones software lo más eficientes y mantenibles posibles.

Vamos a comprenderlo con unos sencillos ejemplos ante un mismo problema. Lo exageraré mucho para que se comprenda de forma más sencilla. El problema es el de una librería con gran arraigo en la comarca pero siempre vendían en físico. Ahora necesitan una página web para poder vender online y competir con la competencia.

  • Lucas es un programador autodidacta que ha ido aprendiendo sobre la marcha y principalmente te hace páginas webs basadas en sistemas de gestión de contenidos o CMS (plantillas webs, aunque esto ya lo profundizaremos más adelante) como WordPress, por ejemplo. En este caso, al ser una tienda online, va a hacer un Shopify o Prestashop y listo. Es una forma rápida de tener una tienda online y les va a cobrar un buen dinero por la tienda y el mantenimiento. ¿Soluciona el problema de no tener una tienda online? Sí. ¿Es eficiente? Probablemente no, ya que no está usando una solución a medida de las necesidades del cliente (que, además, como no sabe de tecnología, necesita un asesoramiento más allá de simplemente colocarle una web «precocinada» por así decirlo).
  • Ana es una programadora que hizo la FP de Desarrollo de Aplicaciones Web (DAW) en España, ahora está cursando Ingeniería Informática a distancia y está trabajando como fullstack developer en una multinacional. Está acostumbrada a trabajar en proyectos exigentes y ofreciendo soluciones a medida. Estudia detalladamente el problema del cliente, elige qué lenguajes de programación son los más adecuados para solucionar dicho problema, cómo es mejor diseñar la base de datos, qué algoritmos permitirán un mantenimiento más sencillo y una optimización del código (ofrecer el mismo servicio con menos líneas de código implica menos errores, más fácil mantenimiento y menos coste a largo plazo) y mil cosas más.

Lucas no piensa mucha el por qué de las cosas. ¿Hace falta una tienda online? Pues genial, te coloco un Shopify/Prestashop, que te lo hago relativamente rapidito y a correr. Mucho más barato que Ana, pero te puedo asegurar que peores resultados a medio-largo plazo y, por tanto, más caro. Ana, más cara a corto plazo, pero más barata a medio largo plazo y mejores resultados.

Lucas es un programador chapucilla. Ana es una ingeniera de software. La diferencia es clara. Importante: técnicamente sólo podríamos llamar ingeniera de software a alguien que haya cursado Ingeniería Informática y se haya especializado en dicha área. Ana, técnicamente, simplemente sería según la titulación española, una desarrolladora de aplicaciones web (2 años de formación profesional superior frente a un Grado en Ingeniería Informática que son 4 años de formación universitaria).

Para mí (pero es mi humilde opinión), la diferencia entre un ingeniero de software y el que no lo es radica entre el que hace cosas a lo loco sin pensar y el que hace software sabiendo el por qué de cada detalle. La diferencia entre no optimizar por falta de conocimiento y entre optimizar gracias al conocimiento y a la experiencia. Hay grandes ingenieros de software con la FP porque se han preocupado de formarse por su cuenta y tener una experiencia TOP y hay auténticos chapucillas con la FP hecha. E imagino que, aunque menos probable ya que tienen más conocimiento, también habrá ingenieros informáticos especializados en ingeniería de software bastante chapucillas. Lo bueno de la informática es que reina la meritocracia: todo depende de tus ganas de aprender, las horas que le eches y lo bueno que seas picando código y dando soluciones lo más sencillas posibles a problemas complejos (como este ejemplo que hemos visto de la tienda online).

Índice del curso

Recuerda que para seguir nuestro curso de Reclutamiento IT sólo tienes que ir al índice y seguir por la clase de tu interés. ¡Feliz aprendizaje!

Si tienes dudas, recuerda que puedes preguntarle a la comunidad con el hashtag #SoySalvajeReclutamientoIT en Twitter y que puedes contactar con nosotros (aunque no me comprometo a responder por falta de tiempo, aunque responderé si puedo)  por TwitterInstagram o por nuestro formulario. Por supuesto, recuerda que si quieres que te ayudemos a crecer como profesional de forma más personalizada, no dudes en consultar nuestros servicios.  Y si estás pensando en comprar algún producto relacionado con informática, no dudes en consultar nuestras recomendaciones en la sección Productos. Nos vemos en la siguiente clase.