Se trata de dar solución a un problema mediante un ordenador, que es una máquina muy compleja, pero máquina al fin y al cabo. Ni todo es programable ni los problemas programables tienen una única solución.
Años 40 y 50 del siglo pasado: código máquina
Años 50 y 60: Fortran , Cobol (imperativos), Lisp (funcional)
Años 70: Pascal, C, Basic (imperativos), ADA (concurrente)
Años 80 y 90: C++, Java (orientados a objetos), Haskell (funcional), Perl, Python, Ruby, PHP (dinámicos)
Este siglo: .NET, C# (orientados a objetos)
¿Cuáles son los más populares ahora mismo? C y Java, seguidos de C-objeto y a más distancia por C++ En un grupo posterior van (Visual)Basic, C#, PHP y Python
Un primer elemento son los grupos de datos en los que podemos definir a cuál de ellos nos referemos. El segundo son las funciones manipulables: son subprogramas que, junto con los datos con los que trabajan, son modificables por otro programa, a la vez que ejecutables. El tercer elemento es la concurrencia, que es la división de un trabajo en tareas independientes. Un último elementos son las variables, que son cosas que van cambiando de valor, pero a las que nos referimos siempre por el mismo nombre.
Los paradigmas son métodos de organizar el trabajo que debe hacer el ordenador. Suelen responder a un modelo mental, independientemente de que luego el ordenador lo haga así o no. Si el ordenador no lo hace así, se hará una traducción automática. Hay varios paradigmas y están ganando importancia el funcional y el concurrente.
Se centra en definir las operaciones que hay que realizar y organizarlas por el orden en que deben hacerse. Dentro está la programación estructurada y la modular.
Se centra en establecer en qué consisten las relaciones que hay y qué es lo que queremos. Dentro estaría la programación funcional, la lógica, la de restricciones y la reactiva o de flujo de datos.
Se aplican a los anteriores:
orientada a objetos: definir los entes con los que va a trabajar el programa, sus propiedades y asociarles a ellos las tareas que les correspondan. Tiene la importancia de organizar el programa de forma que el uso de datos no se va de las manos.
concurrente: dividir el trabajo entre varios procesadores, aquí el problema principal es que la interacción entre tareas conviene que sea siempre predecible.
orientado a eventos: asociar las tareas a estímulos que llegan
Sacar el mínimo común de divisor de dos números (por ejemplo, para simplificar quebrados)
Imperativo:
Funcional:
Lógico:
Hay que tener muy claro el problema y los datos que se van a manejar (¿qué valores pueden tomar?, ¿están estructurados?), tanto como para poder resolverlo a mano si fuera necesario. Ir descomponiendo el problema en partes más sencillas hasta llegar a elementos que son expresables directamente en un lenguaje de programación. En general no se consigue con éxito en un primer intento y hay que depurar y corregir errores.