# Programador

Un programador es aquella persona que elabora programas de computadora. Para la creación de software, los programadores utilizan lenguajes de programación, que son similares a idiomas que permiten entenderse con el ordenador y escribir instrucciones que generan nuevos programas.
Un programador escribe, depura y mantiene el código fuente de un programa informático, que ejecuta el hardware de una computadora, para realizar una tarea determinada.
Los programadores también son denominados desarrolladores de software, aunque estrictamente forman parte de un equipo de personas de distintas especialidades (mayormente informáticas).
La programación es una de las principales disciplinas dentro de la informática.

## Reseña histórica

Ada Lovelace, hija del prestigioso poeta Lord Byron, es considerada la primera programadora de la historia. Su contribución más notable consistió en elaborar un método para calcular los números de Bernoulli en la máquina analítica de Charles Babbage. En homenaje a Ada Lovelace, fue puesto el nombre al lenguaje de programación Ada.

## Funciones del programador

El programador se encarga de la implementación de prototipos mediante un lenguaje de programación, que compilados pueda entender la computadora.
Inicialmente, la profesión se formalizó desde el enfoque tayloriano de la especialización de funciones en la empresa. Así, el proceso de producción de software se concibe como un conjunto de tareas altamente especializadas donde está claramente definido el papel de cada categoría profesional:
* El analista tiene como cometido analizar un problema y describirlo con el propósito de que sea solucionado mediante un sistema de información.
* El programador, cuya única función consistía en trasladar las especificaciones del analista en código ejecutable para la computadora. Dichas especificaciones se recogen en un documento denominado cuaderno de carga, medio de comunicación entre ambos.
Hoy día se reconoce que este enfoque no es válido para organizar tareas de tipo intelectual, como es el desarrollo de software. De manera que la profesión de programador ha ido evolucionando. Las dificultades de comunicación entre analistas y programadores (un mero documento no basta para describir lo que se quiere hacer) dio origen a una categoría de profesional intermedia, denominada analista-programador. La concepción original del programador ha desaparecido, siendo sustituida por la de un profesional mucho más formado y con unas funciones menos «mecánicas».
La profesión de analista también ha evolucionado, surgiendo el concepto de diseñador (de software). Esto se debe a los avances de la ingeniería del software, donde se reconoce que el análisis es una actividad compleja y distinta del diseño. Escuetamente, el análisis describe el problema (es decir, «qué» hacer) mientras que el diseño describe la solución («cómo» hacerlo).
En la mayoría de países industrializados esto ha dado lugar a la categoría diseñador o arquitecto del software.

## Especialidades

Existen diversas ramas por las que se decantan los propios profesionales y que se ven reflejadas en la oferta de empleo. Así, es posible mencionar algunas:
* Programadores de mainframe: aunque se cree extinta la actividad en los viejos grandes sistemas informáticos, lo cierto es que aún existen muchos en funcionamiento que requieren mantenimiento. La tecnología que manejan estos programadores es radicalmente distinta a la del resto, motivo por el que se puede considerar esta como la rama más especializada. Entre sus conocimientos se cuenta COBOL, RPG, JCL, base de datos jerárquicas, etc.
* Programadores de "nuevas tecnologías": esta es una rama que gira en torno a Internet, los nuevos servicios como la Web 2.0 y los negocios por medios electrónicos o e-commerce. Entre sus conocimientos destacan lenguajes del lado del servidor como Java, ASP, .NET, JSP, PHP, Ruby, Python o Perl, y lenguajes del lado de cliente como HTML, XHTML, CSS, Javascript o AJAX (conjunto de tecnologías existentes como XML y Javascript).
* Programadores de firmware y videojuegos, o desarrollador de videojuegos: destacan sus conocimientos de hardware, microprocesadores, ensamblador y C.
* Programadores de "sistemas abiertos": rama asociada a la Arquitectura Cliente-Servidor. Requiere conocimientos de lenguaje de programación C, lenguaje de programación Pascal, etc.
* Programadores de sistemas de control y adquisición de datos: además de conocimientos de hardware, microprocesadores, ensamblador y algunos otros lenguajes, requieren formación específica de física e ingeniería de control.