Todas estas operaciones y cualquiera que podamos imaginar tienen unos elementos en común:
- Entrada (Input): Cualquier cosa con la que empezar (entrada de teclado, archivo, sensor, etc...).
- Salida (Output): Un resultado de la operación (salida por pantalla, enviar un dato, etc...).
- Cálculo: Cualquier manipulación que puede reducirse a un cálculo matemático (aunque sea en una capa muy interna del computador).
- Decisión: Permite controlar la ejecución del programa partiendo de condiciones.
- Repetición: Muchas veces habrá que repetir parte de la operación sobre una colección o simplemente iterar con alguna variación.
Cualquier operación por muy complicada que sea se puede reducir a lo anterior.
Definir paso a paso cómo desarrollar una actividad es lo que se conoce como algoritmo.
Si aplicamos la algorítmia a los elementos anteriores podemos definir las instrucciones de un programa con pseudocódigo que no estará ligado a ningún lenguaje de programación (se conoce como language-agnostic)
Un programador transforma un algorítmo en una serie de instrucciones que sea capaz de interpretar un computador. Genera lo que se llama código fuente (o de alto/medio nivel) que está en un lenguaje que puede comprender un ser humano. Para que una máquina lo ejecute debe transformarse en código máquina (o de bajo nivel). Compilar es la transformación de código fuente a código máquina y lo lleva a cabo un compilador (otro programa).
Cuando existe un fallo de programación se llama bug. La forma de encontrarlos y verificar el correcto funcionamiento de un programa es lo que se llama depurar (debugging)
Como hay muchas formas de llegar a una misma solución, la maestría está en saber encontrar la mejor de ellas (más eficiente, acertada, flexible, reutilizable, estable, sin bugs, etc...)
Hasta aquí no hemos hablado nada de Java. Toda la experiencia genérica sirve para cualquier otro lenguaje de programación, por eso cuando uno conoce bien un lenguaje es mucho más fácil poder usar otro. De hecho, esta parte es la más importante: pensar como un programador te estructurará la cabeza de tal forma que puedas ir visualizando una solución y sus posibles abstracciones de manera ágil, un conocimiento que incluso te servirá para tomar decisiones en tu vida personal. Por eso también es importante empezar a programar cuanto antes (la escuela)
Os invito a que animéis a los más pequeños a aprender a pensar así con sitios web como Code.org. No sólo lo digo yo, lo dicen otras personalidades como puedes ver en este vídeo:
Programar en Java
Antes decíamos qué es compilar, el problema es que hay muchos tipos de computadora. Hay diferencias en la arquitectura (distintos microprocesadores, memoria, etc...), en el sistema operativo que da servicio (Windows, Linux, Android, iOS, etc...) e incluso sistemas embebidos hechos ad-hoc.Esto implica que partiendo de un código fuente en un lenguaje determinado, tendremos que compilar para cada computadora con un distinto código máquina (como pasa cuando programamos en C++ por ejemplo).
- write once, run anywhere -
Una solución a ese problema es la que usan los lenguajes interpretados con máquina virtual como Java: Se compila a un código llamado bytecode que puede interpretar la Máquina Virtual de Java (JVM) a favor de cada computador. Para eso necesitamos tener una JVM que proporciona la plataforma Java y que se ha compilado en el código máquina específico (nativo). Se instala automáticamente en todas las computadoras que tienen instalado Java (entendido como Java Runtime Environment - JRE)
De este modo podemos compilar nuestro código fuente en Java y ejecutarlo en cualquier computadora que cuente con una JVM lo que nos proporcionará una gran flexibilidad ahorrándonos mucho trabajo con el concepto conocido en inglés como WORA, o "write once, run anywhere" (escribe una vez y ejecuta donde quieras).
Continua aprendiendo más sobre programación con el resto de entradas de nuestro Curso JAZZ.