Qué hace un programador informático
Artículo publicado en 2020 y revisado en 2023
Me interesaba comprender qué puede hacer un programador informático, la diferencia entre los diversos tipos de lenguajes de programación y el significado de ciertas palabras relacionadas que veo por la red, así que he recopilado alguna información. Además, es un sector en crecimiento y donde el teletrabajo es casi la modalidad por defecto.
A qué se dedica un programador informático o web
Un programador o programadora (programmer) conoce al menos un lenguaje en el que dar instrucciones a un sistema informático (ordenador/servidor, teléfono móvil) para que realice determinadas tareas para los usuarios (por ejemplo, una operación o mostrar o almacenar datos).
El cerebro del equipo solo entiende el código binario, por lo que cualquier mensaje deberá traducirse desde el correspondiente lenguaje formal de nivel alto (código fuente o source) o lenguaje ensamblador (assembler, intermedio) al lenguaje de nivel bajo o lenguaje máquina. Dependiendo del lenguaje simbólico, se traducirá todo por adelantado (a través de un compilador), línea a línea (mediante un intérprete) o mediante un sistema híbrido.
El profesional en programación puede escribir órdenes siendo específico y considerando posibilidades, así como anticipar o percibir errores (bugs) y testear las soluciones. El código evoluciona (iteration).
Con líneas de código se construirá el primer nexo con lo físico (firmware), el sistema operativo de base o bien una colección concreta de instrucciones para un tipo de tarea, conocida como script (si es muy simple) o software. Los programadores también elaboran las interfaces lógicas para que otros programas puedan conectarse a sus creaciones (API).
El software se denomina programa en ordenadores o servidores, aplicación nativa (app) en dispositivos móviles o aplicación web en los navegadores de Internet.
Especialidades de programación informática
Se podría decir que hay diversos tipos de programadores según los criterios de los que se parta. Por ejemplo:
- El entorno: programadores web (sitios web, web apps), aplicaciones móviles, programas de escritorio, firmware, sistema operativo, otros.
- La finalidad: soluciones para empresas (SaaS, ERP), ecommerce, especialistas en CMS (como WordPress, PrestaShop, Drupal, Moodle, etc.), entretenimiento (videojuegos)…
Abordemos ahora los roles de programadores de software o web y los otros puestos que se relacionan con ellos.
Diferencia entre programador, desarrollador, arquitecto e ingeniero
Para desarrollar software o un sitio web no solo hay que escribir código, sino que existen otras fases previas, paralelas y posteriores como el diseño, análisis, implementación (deployment), optimización, documentación o mantenimiento.
Todo empieza con una hoja de requerimientos, lo que quiere el cliente. Según el proyecto del que se trate, las diversas tareas podrían desempeñarlas diferentes figuras. Los conceptos a menudo se intercambian, aunque para muchos poseen matices relevantes.
- Por lo que he deducido, todo aquello que tenga que ver con adaptar el programa lo mejor posible al dispositivo lo dominará el ingeniero de software (engineer), por sus conocimientos técnicos.
- Más concretamente, un arquitecto de software (architect) está especializado en determinar qué bloques son mejores (tecnologías, lenguajes, bases de datos) y las conexiones entre ellos para lograr una estructura del sistema que permita cambios en el futuro sin perder calidad.
- Un diseñador o desarrollador web o de software (developer) o el analista-programador suele responsabilizarse de que se materialicen los bloques elegidos y sean efectivos. Organiza datos y supervisa el testeo.
- Alguien con conocimientos de programación, un programador, escribirá por lo menos parte del código.
A medida que un profesional adquiera más competencias subirá su nivel de título: junior, middle/mid-level, senior, lead. En general, tener una figura que ejerza de mentor contribuirá a avanzar más rápido en ese camino de aprendizaje.
Programador web: front-end, back-end y full-stack
Para que una página web se muestre, ha tenido que haber programación en varios puntos: en el software del servidor, su base de datos y el sitio web, más en el navegador web del ordenador del usuario/cliente.
Hoy se distinguen dos clases de especialización de la programación web en función de si se centra o no en lo que percibe el usuario:
- Front-end: lo visual que llegará al navegador del usuario, es decir, la interfaz (UI) y su experiencia con ella (UX).
- Back-end: aquello que está en los servidores y no nota el usuario.
Últimamente están muy demandados los perfiles que abarcan los dos ámbitos (moverse tanto en frontend como en backend): el programador full-stack para esa determinada empresa.
El concepto de stack se refiere al grupo de tecnologías con los que trabaja un entidad concreta, pues entre varias posibilidades cada una ha elegido sistema operativo, servidor, base de datos, frameworks, librerías o lenguaje/s de programación. Por ejemplo, habrá negocios que implementen LAMP (Linux/Apache/MySQL/PHP) como stack tecnológico y desearán que sus empleados estén familiarizados con al menos parte de estas.
Otros roles del equipo informático
Por su parte, los administradores de sistemas se encargan de que los equipos informáticos rindan y operen lo mejor posible con su información a salvo. Existen a su vez varios roles específicos como el de administrador de redes, administrador de bases de datos o administrador de seguridad.
Para que los departamentos de desarrollo (programación), administración de sistemas (operaciones) y calidad (QA) se comuniquen satisfactoriamente y hacia un objetivo común de mejora constante, algunos siguen el método DevOps.
Qué hace un programador
En su trabajo, un programador usará ciertos modelos, elementos y herramientas:
- El paradigma de programación o forma de programar que definirá o no de antemano los problemas y cómo solucionarlos (flujo).
- Un framework o entorno de trabajo, esto es, una guía de funcionalidades (opcional) para estructurar el software que se va a escribir. Consiste en una sugerencia más o menos detallada y probada por otros para organizarse, ser productivo y conseguir siempre un resultado muy concreto. Por ejemplo, Spring es un framework para programar ciertas cosas en el lenguaje Java, como lo son Angular para Typescript, Django para Python, Symfony o Laravel para PHP o Rails para Ruby (alias Ruby on Rails). Un framework tiene varias bibliotecas.
- En concreto, las bibliotecas (library de ahí librerías) son un solo pack instrucciones (funciones) ya listas en código para que se incluya en otros proyectos sin tener que escribir de cero. Solo hay que insertar el texto junto a una presentación o API. Como ejemplo, JQuery y React son bibliotecas para programar en JavaScript.
- Las bases de datos de donde sale o entra información. Puede trabajarse a veces también con un ORM.
- Los lenguajes en que se escribe el programa/web y sus interacciones con otros elementos.
- Para generar el código y ver resultados se usarán una interfaz de línea de comandos (CLI), un editor de texto o, con más utilidades para el trabajo del programador, los IDE. Para identificar errores se utilizan depuradores (debugger).
- Las diversas versiones de un proyecto se pueden gestionar con un software de control para ello como Git. Su uso al trabajar en equipo es habitual. Si esta información está disponible en abierto en la nube, como en GitHub, los contratadores lo suelen valorar.
Podría haber otros puntos que considerar, como el protocolo de transferencia de datos o su seguridad (evitar vulnerabilidades).
Clasificación de los lenguajes informáticos
En función de lo que se quiera construir (build), se elegirán unos lenguajes u otros, aunque bastantes se adaptan a distintos fines y plataformas. Hay decenas y varias generaciones de estos idiomas artificiales. No todos son abiertos. Cada uno implica una curva de aprendizaje. En la respectiva documentación se indican sus fundamentos. Algunos son preferidos, otros detestados.
Muy a grandes rasgos, en su particular sintaxis los lenguajes de programación acostumbran a componerse de indicaciones para elegir qué instrucción ejecutar (condicionales, bucles), formas de guardar datos (variables) y tareas para llegar a soluciones (funciones que implementan algoritmos).
Aquí un resumen de los principales lenguajes informáticos:
- Lenguajes de marca o marcado para estructurar/jerarquizar el texto: HTML, XHTML.
- Lenguaje de diseño gráfico para documentos (X)HTML: CSS.
- Lenguajes de programación:
- Web frontend (cliente): JavaScript.
- Web backend (servidor): PHP, Ruby, Perl, ASP...
- Bases de datos: SQL.
- Versátiles: Python, Java, C++, R....
- De sistema operativo concreto: Swift (Apple).
Habilidades para ser programador
Teniendo en cuenta las tareas que debe desempeñar cada día, fundamentalmente se esperará que al programador le interese la interacción con las máquinas, acepte el reto de resolver problemas para clientes y no le importe pasar horas frente a una pantalla.
Puede haber jornadas maratonianas y empresas con una cultura no acorde a nuestra forma de ser, así que no está de más recordar la importancia de la salud física y mental.
Por dónde empezar a ser programador
Lo primero sería entender la lógica de cómo funciona un ordenador binario y cómo hay que explicarle para que solucione problemas. Después, según lo que nos interese más, habría que decantarse por un entorno (programas vs web), qué aprender (lenguaje/s) y cómo (oferta formativa). En cuanto sea posible, a practicar, por ejemplo comenzando por unos días escribiendo soluciones algorítmicas en papel para asuntos sencillos.
A cada uno le llamará más una cosa u otra. De lo que he leído, a mí por ejemplo me han intrigado dos caminos. Por un lado, para programar web apps básicas tendría que saber HTML, CSS y sobre todo JavaScript. O si quisiese analizar datos sería útil Python; podría necesitar otros como SQL para comunicarme con las bases de datos relacionales.
Además de significar planificación de proyectos en hitos y fases, creo que en este campo existe otra acepción del concepto de hoja de ruta (roadmap): recomendaciones sobre qué lenguajes y en qué orden es mejor ir aprendiendo para hacerse programador o desarrollador de tal o cual cosa. Seguramente cada programador tenga un recorrido ideal que proponer a los demás.
De querer dedicarnos profesionalmente, no tenemos por qué aspirar al rol mejor remunerado y en la mayor empresa. Y programar puede ser una afición sin más objetivo que aprender y entretenerse.
Hacerse programador con 30 años o más
No es fácil, pero hay gente que se plantea cambiar su trayectoria, lo intenta, trabaja muchísimo y con el tiempo lo puede conseguir. En el mundo laboral no hay garantías.
Lo complicado (a cualquier edad) es dar con un campo y propósito que motiven lo suficiente, porque es probable que la promesa de un puesto, trabajo en remoto y/o buen salario no basten en varios momentos.
Qué hay que estudiar para ser programador
Una vez se haya seleccionado el ámbito que más le llama a uno, habría que analizar las distintas ofertas formativas. Estas son algunas de las más comunes:
- Fuentes bibliográficas sobre programación.
- Educación formal tradicional, como en España los ciclos informáticos de Formación Profesional o los grados y másteres universitarios.
- Certificaciones específicas de reconocimiento internacional que otorgan entidades de prestigio: Cisco, AWS, Google, Microsoft, PMI, ISC, SAS… El examen se puede preparar por cuenta propia, a través de una academia o mediante un curso online.
- Los coding bootcamps son campamentos intensivos para aprender a programar en unos meses. Los hay de menor o mayor calidad.
- Los cursos en línea en plataformas abiertas o cerradas, algunos de universidades de prestigio (MOOC). Las diferentes versiones del CS50 de Harvard se mencionan bastante en Internet.
- Seguir a profesionales en medios sociales. Me he encontrado consejos como la utilidad de tener un corrector ortográfico para el código o un comparador para detectar gazapos.
Algunos puestos se pueden desempeñar sin carrera o título oficial, pero al contratar siempre se pedirá algo para demostrar el conocimiento. Además, es casi una norma que haya pruebas prácticas en las entrevista.
Por cierto, se trata de un ámbito en el que hay que estar actualizado, así que la formación no termina al conseguir un empleo.
¿Para qué programar?
Entre las utilidades de la programación habría varias.
- Ahorrar tiempo.
- Automatizar.
- Evitar errores humanos en la ejecución o el cálculo.
- Reconocer patrones que una persona no es capaz de advertir.
- Entretener.
Y estas se pueden concretar en otras inquietudes que tengamos, como ayudar a otros creando el programa de acceso a la mayor base de datos de tal tema favorito o conseguir mediante el análisis de datos que se detecte algo malo antes de que suceda.
Parece un mundo interesante. Espero que la información anterior sirva como punto de partida.
Este artículo puede tener errores. Simplemente he intentado llegar a una definición razonable de algunos conceptos y categorizar para situarme.