[1][2][3][4] Programar viene a ser el proceso de crear un software fiable mediante la escritura, prueba, depuración, compilación o interpretación, y mantenimiento del código fuente de dicho programa informático.Para facilitar el trabajo, los primeros operadores de computadoras decidieron crear un traductor para reemplazar los 0 y 1 por palabras o abstracción de palabras y letras provenientes del inglés; este se conoce como lenguaje ensamblador.El histórico equipo Fortran de John Backus consistió en los programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Lois Haibt y David Sayre.Los equipos de ordenador (el hardware) han pasado por cuatro generaciones, de las que las tres primeras (ordenadores con válvulas, transistores y circuitos integrados) están muy claras; la cuarta (circuitos integrados a gran escala) es más discutible.Los paradigmas difieren unos de otros, en los conceptos y la forma de abstraer los elementos involucrados en un problema, así como en los pasos que integran su solución del problema, en otras palabras, el cómputo.El paradigma de programación que actualmente es más utilizado es la «orientación a objetos» (OO).Esto provocó que grandes desarrollos tuvieran problemas de fiabilidad, mantenimiento, adaptación a los cambios y escalabilidad.La OO parece estar ligada en sus orígenes con lenguajes como Lisp y Simula, aunque el primero que acuñó el título de «programación orientada a objetos» fue Smalltalk.Por ejemplo, en Java, si deseamos guardar una cadena de texto debemos especificar que la variable es del tipo String.A continuación, un listado con los tipos de variables y vectores más comunes: En el caso de variables booleanas, el cero es considerado para muchos lenguajes como el literal falso («False»), mientras que el uno se considera verdadero («True»).Las funciones se crearon para evitar tener que repetir constantemente fragmentos de código.Una función podría considerarse como una variable que encierra código dentro de si.Usando el lenguaje natural, por ejemplo, puede no ser posible asignarle significado a una oración gramaticalmente válida o la oración puede ser falsa: El siguiente fragmento en el lenguaje C es sintácticamente correcto, pero ejecuta una operación que no está definida semánticamente (dado que p es un apuntador nulo, las operaciones p->real y p->im no tienen ningún significado): Si la declaración de tipo de la primera línea fuera omitida, el programa dispararía un error de compilación, pues la variable «p» no estaría definida.Pero el programa sería sintácticamente correcto todavía, dado que las declaraciones de tipo proveen información semántica solamente.Los lenguajes que permiten construcciones que permiten al programador alterar el comportamiento de un analizador hacen del análisis de la sintaxis un problema sin decisión única, y generalmente oscurecen la separación entre análisis y ejecución.La semántica estática define las restricciones sobre la estructura de los textos válidos que resulta imposible o muy difícil expresar mediante formalismos sintácticos estándar.Para poder minimizar esta desventaja, algunos lenguajes incluyen lagunas de tipos, conversiones explícitas no verificadas que pueden ser usadas por el programador para permitir explícitamente una operación normalmente no permitida entre diferentes tipos.Inferencia total de los tipos suele asociarse con lenguajes menos populares, tales como Haskell y ML.En otras palabras, los tipos están asociados con valores en ejecución en lugar de expresiones textuales.Cualquier intento de llevar a cabo una operación sobre el tipo equivocado dispara un error.Estas conversiones implícitas son útiles con frecuencia, pero también pueden ocultar errores de programación.Las características de estáticos y fuertes son ahora generalmente consideradas conceptos ortogonales, pero su trato en diferentes textos varía.El intérprete elimina la necesidad de realizar una compilación después de cada modificación del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una ejecución del código.También se han implementado lenguajes educativos infantiles como Logo mediante una serie de simples instrucciones.En la actualidad son muy populares algunos lenguajes especialmente indicados para aplicaciones web, como Perl, PHP, Ruby, Python o JavaScript.Con lenguajes como Scheme y Forth, los implementadores pueden considerar que los estándares son insuficientes, inadecuados o ilegítimos, por lo que a menudo se desviarán del estándar, haciendo un nuevo dialecto.En otros casos, se crea un dialecto para su uso en un lenguaje específico de dominio, a menudo un subconjunto.Como es común que un lenguaje tenga varios dialectos, puede resultar bastante difícil para un programador sin experiencia encontrar la documentación correcta.Para escribir programas que proporcionen los mejores resultados, cabe tener en cuenta una serie de detalles.Los programas que usan un lenguaje imperativo especifican un algoritmo, usan declaraciones, expresiones y sentencias.