Programación

Chámase **programación** á creación dun programa de computadora, un conxunto concreto de instrucións que unha computadora pode executar. O programa escríbese nunha linguaxe de programación, aínda que tamén se pode escribir directamente en linguaxe máquina, con certa dificultade. Un programa pódese dividir en diversas partes, que poden estar escritas en linguaxes distintos.

Software é o substantivo que denomina ós programas e datos da computadora.

## Programas e algoritmos 
Un algoritmo é unha secuencia non ambigua, finita e ordenada de instrucións que deben seguirse para resolver un problema. Un programa normalmente pon en funcionamento (traduce a unha linguaxe de programación concreto) un algoritmo. Un algoritmo pode expresarse de distintos xeitos: de xeito gráfico, como un diagrama de fluxo, en forma de código como en pseudocódigo ou nunha linguaxe de programación, en forma explicativa...

Os programas acostuman a dividirse en partes menores (módulos), de modo que a complexidade algorítmica de cada unha das partes sexa menor que a do programa completo. Isto axuda ó desenvolvemento do programa.

Segundo Niklaus Wirth un programa está formado por algoritmos e estrutura de datos.

O obxectivo das diversas técnicas de programación propostas é mellorar tanto o proceso de creación de software como o seu mantemento. Entre elas pódense mencionar as programacións estruturada, modular, declarativa e orientada a obxectos.

## Compilación 
O programa escrito nunha linguaxe de programación (comprensible polo ser humano, aínda que adoitan corresponder con linguaxes formais descritas por gramáticas independentes do contexto) non é inmediatamente executable nun ordenador. A opción máis común é compilar o programa, aínda que tamén pode ser executado mediante un intérprete informático.

O código fonte do programa sométese a un proceso de transformación para converterse en linguaxe máquina, interpretable polo procesador. A este proceso chámaselle compilación e resulta nun programa executable (un típico .exe para os usuarios de Windows). O proceso faise en dous pasos. O primeiro paso é a compilación propiamente dita e traduce o código fonte escrito nunha linguaxe de alto nivel a código obxecto, máis próximo á linguaxe máquina. O segundo paso chámase enlazado (ou ás veces mal chamado *linkado* do inglés *link*) e traduce o código obxecto a código máquina. Un programa podería ter partes escritas en varios linguaxes, que se poderían compilar de xeito independente e enlazar xuntas para formar un único executable, aínda que non é unha práctica habitual.

Outra alternativa son os programas interpretados, nos que un intérprete realizan a tradución da linguaxe de alto nivel a código máquina a medida que sexa necesario. O resultado da tradución normalmente non se almacena, senón que se volve a traducir no caso de que se volva a precisar.

## Programación e enxeñería do software 
Existe unha tendencia a identifica-lo proceso de creación dun programa informático coa programación, que é certa cando se trata de programas pequenos para uso persoal, e que dista da realidade cando se trata de grades proxectos.

O proceso de creación de software dende o punto de vista da Enxeñería ten os seguintes pasos:
# Recoñece-la necesidade dun programa para solucionar un problema ou identifica-la posibilidade de automatización dunha tarefa.
# Recolle-los requisitos do programa. Debe quedar claro que é o que debe face-lo programa e para que se necesita.
# Realiza-la análise dos requisitos do programa. Debe quedar claro como debe realiza-lo programa as cousas que debe facer. As probas que comproben a validez do programa pódense especificar nesta fase.
# Deseña-la arquitectura do programa. Debese descompoñe-lo programa en partes de complexidade abordable.
# Implementa-lo programa. Consiste en realizar un deseño detallado, especificando completamente todo o funcionamento do programa. Despois disto a codificación debería resultar inmediata.
# Implantar (instalar) o programa. Consiste en poñe-lo programa en funcionamento xunto cos compoñentes que poden necesitar (bases de datos, redes de comunicacións etc.)

A enxeñería do software céntrase nos pasos de planificación e deseño do programa, mentres que antigamente (programación artesanal) a realización dun programa consistía unicamente en escribi-lo código.

## Referencias históricas 
miniatura|Ada Byron.
A primeira programadora de computadora coñecida foi Ada Lovelace, filla de Anabella e Lord Byron. Anabella introduciu nas matemáticas a Ada, quen despois de coñecer a Charles Babbage traduciu e ampliou unha descrición da súa máquina analítica. Aínda que Babbage nunca completou a construción de ningunha das súas máquinas, o traballo que Ada realizou con elas fíxolle gaña-lo título de primeira programadora de computadoras do mundo. O nome da linguaxe de programación Ada foi escollido como homenaxe a esta programadora.

## Obxectivos da programación 
A programación de ordenadores debe perseguir tres obxectivos fundamentais:

* Corrección: Un programa é correcto se fai o que debe facer. Para determinar se un programa fai o que debe facer é moi importante especificar claramente que debe face-lo programa antes de desenvolvelo e unha vez rematado comparalo co que realmente fai.
* Claridade: É moi importante que o programa sexa o máis claro e lexible posible para mellora-lo mantemento do software. Cando se acaba de escribi-lo código de programa, débense busca-los erros e corrixilos. Máis concretamente, cando o programa está rematado, é necesario facerlle ampliacións ou modificacións, segundo a demanda dos usuarios, este traballo pode ser levado a cabo polo mesmo programador que implementou o programa ou por outros.
* Eficiencia: Debe consumir a menor cantidade posible de recursos. Normalmente ó falar de eficiencia adóitase facer referencia ó consumo de tempo e/ou memoria.

A eficiencia e a claridade dun programa pode ser obxectivos contrapostos: pódese conseguir maior claridade sacrificando parte da eficiencia ou viceversa. Pero hai que ter en conta que o tempo do programador é caro, e que hoxe en día o prezo dos ordenadores é razoable e cada vez son máis baratos.

## Véxase tamén 
### Outros artigos 
* Linguaxe de programación
* Programación dirixida por eventos
* Programación estruturada
* Programación orientada a obxectos