viernes, 2 de noviembre de 2018

MÁQUINAS QUE CONTROLAN NUESTRA VIDA

¡Hola de nuevo! Una vez que hemos visto muchas de las características de la programación, vamos a ver cómo interfieren estos programas en nuestra vida. Es lo que los ingenieros informáticos llaman "computación física".

Hasta ahora nos hemos movido en el mundo de las ideas, el mundo lógico. Nuestros programas resolvían problemas abstractos que, como mucho, nos mostraban imágenes o sonidos, pero su interacción con el exterior era limitada.

Ahora queremos saber cómo interactuar con el mundo real mediante mecanismos electricos y mecánicos (electromecánicos). Con esta idea debemos darnos cuenta que nuestro sistema (o robot) contará con unos elementos que nos den información del entorno (sensores) y otros elementos que ejecuten las acciones (actuadores) decididas por el programa que corre en el cerebro (unidad de control).


La unidad de control es lo que podemos programar y es equivalente al "cerebro" de nuestro sistema. Los sensores serían los "ojos", "oidos" y demás sentidos de nuestro cuerpo, que  mandan información del entorno. Por último, los actuadores son los "brazos", "piernas", "boca" y cualquier mecanismo que envíe señales al exterior.

En los mecanismos actuales se distinguen básicamente dos tipos de unidades de control: los microprocesadores y los microcontroladores. Ambos son parecidos pero si los miramos de cerca, vemos que los segundos son más completos que los primeros.

Los microprocesadores son las unidades de control de nuestros ordenadores. Son complejos sistemas electrónicos que ejecutan instrucciones a una velocidad endiablada pero no poseen memoria y no tienen capacidad de interactuar con el exterior. Por ello nuestros ordenadores acompañan el microprocesador con memorias y tarjetas periféricas para impresoras, video y sonido.

En el otro extremo los microcontroladores son elementos electrónicos que se han creado para procesar entradas y salidas de señales que permitan controlar elementos electromecánicos. Cuentan con memoria, escasa, pero suficiente para ejecutar programas prefijados en su interior. En los últimos años han aparecido placas microcontroladoras que amplían la potencia de los microcontroladores añadiendo más memoria y aumentando la cantidad de conectores de entrada y salida.


Algunos ejemplos de microprocesadores históricos son:
  • Intel 4004, el primer microprocesador integrado de la historia.
  • Intel 8086 y 8088, el micro del IBM PC, el abuelo de los ordenadores personales.
  • MOS 6502, el micro del Apple I, primer ordenador Apple.
  • Z80A, el cerebro del ordenador Spectrum.
  • AMD K5, el primer microprocesador de AMD, la gran competidora de Intel.
  • Intel Pentium, que dio lugar a una gran familia antes del salto al multinúcleo.

Algunos de los microcontroladores más representativos son:
  • TMS1000, el primer microcontrolador creado por Texas Instruments.
  • Intel 8051, que tuvo una producción de más de 40 años.
  • Motorola MC68HC805, el primer microcontrolador con firmware grabada en memoria EEPROM.
  • Microchip PIC16C84, que fue el primer microcontrolador con una memoria EEPROM borrable electrónicamente.
  • ATMega 328P, el microcontrolador del mítico Arduino.
Por último las placas microcontroladoras más famosas en la actualidad serían:
  • Arduino, una familia que comprende desde el modelo UNO hasta la MKR1000.
  • Raspberry PI, un microordenador con funciones robóticas de origen británico.
  • Intel Edison, es la placa microcontroladora de Intel con gran potencia y alto precio.
  • Beaglebone Blue, y su familia de potentes placas microprocesadoras.
  • Crumble de Redfern Electronics, es una sencilla placa accesible a los más pequeños.
  • PICAXE, es una familia de placas educativas para introducirse en la robótica.

Con esta extensa visión de la conexión entre el mundo lógico y el físico nos adentramos en el fantástico campo de la robótica. Miles de horas de diversión, nervios y misterios nos esperan ante la disciplica más retadora de la ingeniería moderna. ¿Te atreves a acompañarnos?

J. Carlos Avendaño
Ingeniero Industrial y profesor.

lunes, 18 de junio de 2018

HEROES DE LA COMPUTACIÓN

"Toda búsqueda de un héroe debe empezar por algo que todo héroe requiere: un villano"

Con esta frase lapidaria empieza la película "Misión Imposible II". Como en las películas de héroes y villanos, todo el conocimiento tiene una colección de personajes que pueden considerarse héroes, e incluso villanos, que han conseguido hacerlo avanzar o sumergirlo en la más oscura de las noches.

Tratando de recoger algunos de los individuos más influyentes de la historia de computación hoy os presentamos a los siguientes investigadores y pensadores que han permitido que disfrutemos de la tecnología actual.

Nos remontamos a 1854 donde un profesor de matemáticas y lógica escribe "Las leyes del pensamiento", sentando la base del álgebra que manejan los ordenadores actuales. Se trata de George Boole, el padre del álgebra booleana y en cuyos principios descansan los cálculos de unos y ceros de la electrónica digital. Trabajó como profesor del Queen´s College en Cork (Dublín) y fue un matemático autodidacta al no poderse pagar la ayuda de un profesor. Lamentablemente, su mujer era una persona de creencias infundadas y, ante el enfriamiento que Boole tuvo en un día de lluvia, decidió someterle a una cura de agua que empeoró su estado hasta causarle la muerte. Pero este genio ya había sentado la base para la era digital.



En 1904 el español Leonardo Torres Quevedo presenta en París el telekino, un autómata que recibía órdenes por ondas de radio. Además construyó el primer autómata capaz de jugar al ajedrez, el ajedrecista, y algunas de las primeras máquinas de cálculo analógico.

















Entre las mujeres que aparecen en el mundo de los ordenadores cabe destacar la actriz de origen austriaco llamada Hedy Lamarr. Además de su carrera en Hollywood, nos dejó la creación del precursor del Wifi moderno como sistema de comunicación protegida frente a ataques enemigos. Esta bella actriz demostró al inicio de la Segunda Guerra Mundial no sólo poseer un bello físico, sino un gran cerebro.



Bletchley Park es el nombre del lugar donde nuestros siguientes héroes salvaron más de 14 millones de vidas y acortaron la Segunda Guerra Mundial en dos años. Se trata de Alan Turing y Joan Clarke, responsables, entre otros, de descifrar la máquina Enigma y Lorenz de la armada nazi. Dentro del mundo de la computación destaca el planteamiento de la primera máquina programable de propósito múltiple, la máquina de Turing, que marca el inicio de la era de los ordenadores.









De la misma época que Alan Turing, llega nuestro siguiente héroe, el húngaro John Von Neumann que desarrolló la arquitectura que rige gran parte de los microprocesadores modernos. Este científico poseía una de las mentes más brillantes que han existido y se decía que podía aprender a hablar un idioma de forma fluida en menos de tres meses. Su trabajo abarcó el mundo de las Matemáticas, la Computación, la Física Nuclear y la Lógica. Lamentablemente era abiertamente militarista y promovió el uso del armamento nuclear como política disuasoria.





Nos aproximamos al tiempo en que aparecen los ordenadores en una forma similar a la actual. Para ello fue necesario que los ingenieros electrónicos Shockley, Bardeen y Brattain inventaran el transistor, que es el alma de la electrónica actual. Estos ingenieros acabaron con su "sociedad"  en los tribunales discutiendo sobre cuál era el responsable de la patente. Finalmente los tres recibieron el premio Nóbel de Física por este desarrollo y su importancia en la electrónica.



Adentrándonos en el siglo XX nos encontramos con dos de los personajes más controvertidos y famosos en el mundo de la informática, el creador de Microsoft y el de Apple. Personajes de la misma época, Bill Gates y Steve Jobs desafiaron al gigante de los ordenadores, IBM, y le vencieron en su campo. Pero esta guerra se extendió a sus imperios y a raíz del sistema operativo Windows ambos colegas iniciaron una de las guerras comerciales más famosas del mundo de los ordenadores. Frases como "el único problema con Microsoft es que no tiene gusto" alimentarían una guerra, que años después continuó Jobs con Google diciendo que iba a destruir Android usando cada penique de la fortuna de Apple porque el sistema operativo de los móviles era una copia. Todo un carácter.


En un tono más tranquilo traemos al creador del sistema operativo Linux, el finlandés Linus Torvalds. Este sistema operativo es uno de los más utilizados entre los sistemas de código abierto y tiene infinidad de variantes que permiten acercar el mundo de la informática a los entornos más desfavorecidos económicamente.



Dejamos al final al creador del manifiesto del software libre, Richard Stallman, un informático a medio camino entre la tecnología y la militancia política. Deseoso de volver a los tiempos de la universidad, donde los programadores intercambiaban código para conseguir mejorar sus creaciones, Stallman desarrolló las 4 libertades del software libre.




Todos los personajes mencionados en este artículo se han ganado aparecer en el salón de la fama de la Computación por sus aportaciones. Es cierto que muchos otros son merecedores de este honor, pero este artículo ya ha llegado a su fin y te queda a ti, ávido lector, continuar conociéndoles. Y no olvides enviar tus comentarios para añadir a otros héroes (o villanos).



jueves, 31 de mayo de 2018

PARA ORDENAR TU HABITACIÓN SÓLO NECESITAS UN ALGORITMO

Uno de los primeros problemas que surgieron en computación fue el de ordenar listas de elementos (números, letras, palabras en orden alfabético...) Ya en 1951, una de las programadores del ENIAC desarrolló un algoritmo de ordenación para uno de los primeros superordenadores.

La ordenación permite analizar listas de elementos de una forma más sencilla o agruparlos para su posterior proceso (imagina un diccionario). Para que exista una ordenación debe existir un orden preconcebido que dependerá del tipo de elemento que analicemos: los números suelen depender de la cantidad que representan, las letras dependen del alfabeto empleado, los colores dependen de la longitud de onda...

Si piensas en algún método sencillo de ordenación puedes llegar a encontrar los principales algoritmos empleados. Por ejemplo, en una ordenación de números ascendente, podríamos tomar el primer elemento y compararlo con el segundo. Si el primero es menor que el segundo dejamos este par como está. Si no, cambiaríamos el orden. A continuación, haríamos lo mismo con el segundo y así, hasta llegar al penúltimo. Pero de este modo no garantizamos que todos los elementos estén ordenados. Debemos repetir este proceso desde el segundo al último, y luego del tercero al último y así hasta el final. En realidad hasta el penúltimo. ¿Has seguido el proceso?

Pues este proceso se denomina "ordenamiento de burbuja" y es uno de los más sencillos pero también de los más ineficientes.

A continuación podéis ver el diagrama de flujo para un ordenamiento ascendente según este método. A partir de aquí realizaríamos el programa en el lenguaje elegido y lo depuraríamos para "afinarlo".




Una variante de este método sería empezar por el último elemento y ordenar de último a primero. Como supondrás no hay variaciones en este caso en cuanto a eficacia. Pero existe otra idea que consiste en tomar el primer elemento y compararlo con el siguiente. A continuación tomamos el tercer elemento (recuerda que el primer y el segundo elementos se han ordenado entre sí) y se compara con los elementos primero y segundo para ordenarse. Avanzamos por el cuarto, el quinto... hasta llegar al final y cada elemento se va ordenando con sus precedentes de forma que llegamos a una lista ordenada. Esta sería una "ordenación por inserción".

Este método tampoco es muy eficiente pero es uno de los más simples de implementar porque se parece mucho a la forma natural de ordenar de los seres humanos.

Existe una rama de la computación dedicada a la tarea de ordenar y encontrar la forma más eficiente de realiza esta tarea. Otros métodos, como el Quicksort, son más rápidos y requieren menos memoria de almacenamiento pero son más complejos. Este último es el considerado como más rápido, aunque esto depende de la naturaleza de las listas a ordenar. Se basa en crear sublistas que se ordenan a los lados de elementos pivote y empleando recursividad reducen el número de comparaciones y facilitan su implementación.

Ahora que sabes un poco más del mundo de los algoritmos de ordenación, te animo a que cojas tu ordenador y trates de crear un programa que ordene una lista de números aleatorios con veinte o más elementos, empleando estas técnicas. Te auguro horas de diversión sin límites. No olvides enviar tus comentarios.

Sorting Algorithms in GameMaker:Studio studio sorting radix quicksort programming merge insertion gamemaker bubble algorithms algorithm GIF

viernes, 6 de abril de 2018

Y AHORA, ¿CÓMO EMPIEZO A PROGRAMAR?



Llegados a este punto, parece que la pregunta más lógica es cómo empezamos en el mundo de la programación. Pero primero, dejadme que empiece por el final (¡eeeh!).

Sí. Creo que es importante que sepas que aprender a programar no acaba nunca. Todavía recuerdo cuando empecé a programar con 13 años en Basic y luego aprendí código máquina en mi ZX Spectrum. Era una máquinita de 48 kB de memoria RAM (hoy cualquier ordenador mediocre multiplique esta capacidad por mil veces). Yo estaba satisfecho porque había alcanzado la cumbre de la programación, para mi escaso entender. Poco sospechaba yo que en menos de dos años la programación estructurada iba a dejarme en el punto de partida y debería aprender Pascal. Después vino el C, tan de moda en los años 90, y a continuación la programación por objetos con el C++. Después me descolgué durante años y llegó Internet y la multitarea. Lo cierto es que nunca he dejado de aprender y el comentario entre los profesionales del tema es que nunca terminan de estar al día.

Por eso, te aviso que esta tarea no acaba nunca y con ella la fiesta de aprender nuevas técnicas.

Pero cuando aprendes a programar una computadora casi nunca obtienes lo que quieres la primera vez. Aprender a ser un maestro programador es aprender a ser diestro en localizar y corregir bugs, las partes que evitan que el programa funcione. La pregunta que debe hacerse sobre un programa no es si está bien o está mal, sino si es que éste puede ser corregido. (Seymour Papert)

Ahora, es importante que conozcas algunas plataformas actuales para aprender a programar de una forma sencilla. Entre ellas destaca una categoría única como es la programación por bloques gráficos. Actualmente el rey de esta categoría sería Scratch, pues cuenta con una comunidad a nivel mundial de 26 millones de usuarios y creciendo. La idea básica es la creación de programas a través de bloques de construcción al estilo Lego (de hecho esta empresa colaboró en el proyecto financiándolo) y con múltiples ayudas interactivas. Con una comunidad de más de 30 millones de proyectos que se pueden usar, cambiar y estudiar posiblemente sea el lenguaje de iniciación más popular. Es gratuito y está avalado por una institución ampliamente reconocida como es el MIT.

Una versión mejorada de Scratch es Snap!, una creación de la Universidad de Berkeley que permite hacer programas de consola (que corren en el ordenador sin necesidad de más añadidos) y permite características mejoradas.
De este estilo podemos encontrar el gigantesco proyecto de Google llamado Blockly. Este lenguaje está pensado para crear plataformas de programación de estilo bloque gráfico, con lo cual es un lenguaje de lenguajes.

Scratch-Logo-and-Cat.jpg











Existen muchos más, pero puede que lo que te interese sea introducirte al pensamiento computacional de una forma más amena. En ese caso existen múltiples organizaciones que plantean retos en forma de juegos para aprender los principios básicos de la programación. Así, puedes acercarte a Codecombat o Tynker si quieres jugar divertidos juegos en línea basados en primeros pasos hacia la programación.

Sin embargo el rey de la categoría de las actividades destinadas a aprender es la todopoderosa organización de los hermamos Partovi, Code.org, donde encontrarás cursos, juegos y plataformas de programación para la web, móviles y mucho más. Además convoca todos los años "la Hora del Código", un evento destinado a promover el aprendizaje de la programación entre los más jóvenes.



Sólo me queda recordarte que "el movimiento se demuestra andando", así que agarra tu ordenador y lánzate al proceloso mundo de la programación. Grandes aventuras te esperan. Y no olvides dejar tus comentarios.

viernes, 16 de febrero de 2018

LAS IDEAS QUE MUEVEN EL MUNDO DE LA PROGRAMACIÓN

Cuando nos ponemos a pensar cuál es la fuerza que mueve el mundo, es fácil llegar a la conclusión de que las ideas tienen mucha culpa de lo que ocurre. Ideas de supremacía, intelectualidad, igualdad, riqueza, belleza y muchas más han supuesto la aparición de guerras, pasiones e historias de todo tipo que han conmocionado al ser humano.

El mundo de la programación no es ajeno a este fenómeno y las ideas principales que lo han movido han conducido nuestra tecnología al estado actual. Desde el primer momento la programación de ordenadores estuvo dirigida a que la máquina ejecutase instrucciones según un algoritmo previamente diseñado para solucionar el problema. Es lo que se conoce como paradigma imperativo. Es el más utilizado y el más antiguo. Un buen ejemplo de esta práctica es el código máquina, un lenguaje de bajo nivel, cercano al microprocesador, donde el programa es un conjunto de instrucciones básicas del circuito electrónico que se ejecutan en un orden preestablecido.

En este tiempo, los programas se ejecutaban mayoritariamente mediante un intérprete, es decir, instrucción a instrucción el código fuente del programa se traducía al código máquina que los microprocesadores entendían.

File:Programming paradigms.svg

Con los primeros lenguajes de alto nivel en los años 60, empezaron a aparecer ciertos problemas en la secuencia de programación, es decir, el orden de ejecución se hizo muy complejo, principalmente por saltos inciertos en el orden de ejecución. Esto, unido a la mayor complejidad de los programas, hizo que los desarrolladores empezasen a pensar en "ordenar el patio". Y de repente, surgió un lenguaje llamado Algol, con estructuras de programación basadas en subrutinas y orden preciso de ejecución. Esto facilitó las tareas de revisión de código ("debugging" o depuración), así como la reutilización de partes fundamentales del mismo. Había nacido la programación estructurada, que ha permanecido hasta hoy. Los programadores se habían desecho del tedioso "código spaguetti", término utilizado para hablar de los programas cuyo orden de ejecución daba vueltas y se enredaba como un plato de espaguettis. Mientras tanto, el Algol permitió el desarrollo de lenguajes fundamentales como el Pascal, Fortran y C.

Junto con la programación estructurada se empieza a extender el uso de compiladores, programas que traducían todo el código fuente del programa original en instrucciones de código máquina de una sola vez, para que la ejecución fuera más rápida en el microprocesador.

En los años 80, Bjarne Stroustrup decidió elevar el épico lenguaje  C a un nivel máximo y desarrolló C++. Una de las grandes aportaciones de Bjarne fue la idea de los objetos, un código que representaba realidades que tenían propiedades, realizaban acciones y reaccionaban al entorno. Un objeto es un código que permite heredar propiedades y métodos de otros objetos padre, que encapsula el código y que permite distintas formas para las acciones que puede realizar el objeto (polimorfismo). Esta idea fundamental, que sostiene los lenguajes modernos, es la programación orientada a objetos (POO).




Tiempo después de crearse la programación orientada a objetos, surgió la necesidad de una mayor interacción con el usuario. Esto dio lugar a un tipo de programación orientada a recoger en tiempo real lo que ocurría, los eventos. Un evento es "algo que ocurre". Puede ser un click de ratón, una apertura de una ventana o un cambio de algún texto en pantalla. Cuando estos eventos ocurren, un analizador de eventos los "captura" e informa a los objetos de que algo ha ocurrido. Los objetos se adaptan en función a su programación interna. Este paradigma se denomina programación dirigida por eventos y actualmente, es el segundo paradigma fundamental, junto con POO.

En 1995 una pequeña compañía, Sun Microsistems con James Gosling al frente, desarrolló el primer lenguaje para cualquier sistema operativo, el famosísimo JAVA. Esto suponía que cualquier código podía ser ejecutado en cualquier tipo de computadora (Apple, Windows, Unix, Linux...). Aquello fue una idea revolucionaria, pues hasta ese momento los programas de una plataforma no corrían en las de otros. Antes había que especificar para qué sistema operativo se escribía cada programa. Desde ese momento, los programas servirían para cualquier plataforma y un único código fuente sería necesario. Había nacido el paradigma de programación multiplataforma, la tercera pata de los lenguajes modernos.



En este entorno surge la idea de la máquina virtual Java (JVM). El código fuente del programa se compila a un estado intermedio, conocido como bytecode, y después una máquina virtual realiza la ejecución paso a paso del bytecode dependiendo de la plataforma donde se desarrolle. Otras máquinas virtuales vendrán a continuación como Dalvik y ART para dar servicio a Android, el sistema operativo de los teléfonos homónimos.

Por si vuestra cabeza todavía no ha explotado, debo recordaros que todavía nos queda el paradigma de la programación multihilos o multitarea. Si bien es una idea tiene más que ver con la ejecución de varios procesos en el hardware, conviene no olvidar que ya en 1995 el sistema operativo Windows 95 permitía realizar varios procesos mediante un astuto sistema de compartición de tiempos en el núcleo del procesador. Sería 5 años más tarde cuando Intel y AMD desarrollarían sus primeros procesadores multinúcleo, que permitirían realizar varios procesos al mismo tiempo de forma real y no mediante software, como el descrito en Windows 95.

En la programación multihilos, se desarrollan hilos o procesos paralelos para ejecutarse al mismo tiempo que permiten controlar y realizar distintas acciones. Lenguajes como C++ y Java llevan implementada esta idea en su interior y gozan de una riqueza inmensa a la hora de resolver distintos problemas de manera flexible.

Existen muchas más ideas, o paradigmas, que han hecho avanzar el mundo de la programación pero estas serían las principales. Si echas en falta alguna más, o quieres aclaraciones sobre las mostradas, no dejes de enviarnos tus comentarios. Recuerda que esto sólo es el principio de una gran aventura para construir el futuro.

miércoles, 17 de enero de 2018

¿EN QUÉ LENGUAJE HABLAS, MÁQUINA?

Para que haya una comunicación es necesario un emisor, un receptor, un mensaje y un código entre otros. En esta ocasión nos interesa investigar el código que podemos utilizar para comunicarnos con nuestro ordenador.

A lo largo del tiempo han ido apareciendo diversas variantes en función de las necesidades de los ordenadores empleados. Lo cierto es que, en los inicios de la computación, primero se creaban los ordenadores y después se generaban los lenguajes que los manejaban.

El primer programa de ordenador se atribuye a Ada Loveloce en 1843, gracias unas notas añadidas a la traducción de un trabajo de Luigi Menabrea sobre la máquina analítica de Charles Babbage. Estamos hablando de máquinas que empleaban dispositivos mecánicos, no electrónicos. Este primer programa era una nota en la traducción, donde se describía una forma mecánica de calcular los números de Bernouilli. Os recomiendo que visitéis la alternativa en forma de cómic a esta interesante historia.



La siguiente generación de lenguajes serán tarjetas perforadas en superordenadores, allá por 1943. Como podéis imaginar, su uso era principalmente militar. De esta época datan los Z3 alemanes de Konrad Zuse, el Colossus inglés o los Mark1 y Eniac estadounidenses. Todas eran máquinas electromecánicas que, en su mayoría, empleaban tarjetas perforadas como medio de programación. No existía un lenguaje como tal, sino que se empleaba la lógica de la electromecánica para generar un código comprensible para la máquina. Otro dato interesante es que la mayoría de los programadores de estas máquinas eran mujeres, muy al contrario de la tendencia actual.


En 1948 el ingeniero Nathaniel Rochester desarrolló el primer lenguaje de programación de bajo nivel o sea, cercano a las operaciones de la máquina, para el primer ordenador de propósito general producido en serie, el IBM 701. El nombre de su lenguaje era ensamblador y consistía en dar nombre a los distintos pasos que las máquinas desarrollaban en su tarea. Estos pasos son lo que, comúnmente, se denomina código máquina.

A continuación aparecerían lenguajes de alto nivel, más cercanos al lenguaje del ser humano. De este tipo serán el LISP, un lenguaje de listas; el COBOL, el lenguaje del mundo financiero; el FORTRAN, el primer compilador; y el ALGOL, el primer lenguaje estructurado.

A partir de esta época surgieron multitud de lenguajes y el estudio  de la programación provocó un rico ecosistema, donde los paradigmas de programación luchaban por sobrevivir en una evolución darwiniana.

El lenguaje C empezó a establecerse como un importante ejemplo de las características de programación estructurada, obligando a seguir unos esquemas preestablecidos para los elementos, y en camino intermedio entre los lenguaje s de alto nivel y el bajo nivel.

Tan importante fue la influencia de este lenguaje, que su heredero no cambió de nombre y se llamó C++, recordando el inmenso poder que su figura paterna mantuvo. Con este lenguaje, y otros, se introdujo el paradigma actual de programación orientada a objetos (POO), donde los objetos reales tienen su equivalente en el programa y poseen características, realizan acciones y responden al entorno mediante eventos.

Al mismo tiempo se establece la idea de realizar varias operaciones simultáneamente, lo que se conoce como multitarea. La aparición de máquinas multinúcleo reforzará esta idea que surge en primer lugar en el software como partición de tiempos de uso del procesador.

En la herencia de C figuran lenguajes como JAVA, Javascript y Android. En este punto aparece Internet y revoluciona el mundo de la programación con el paradigma de la multiplataforma, es decir, desarrollar programas que corren en varios sistemas operativos. Ahora no vale con programar para una computadora, sino que se hacen programas para todos los ordenadores. En este punto aparecen conceptos como la máquina virtual.

Pero esto será en otra ocasión. Os invito a enviar los comentarios y a que sigáis investigando sobre este apasionante mundo.

J. Carlos Avendaño
Club Tecnológico

lunes, 18 de diciembre de 2017

LAS HERRAMIENTAS DE LA PROGRAMACIÓN

Una vez que hemos determinado cuál es el problema que tenemos que resolver y se ha diseñado el proceso de resolución, a través de un algoritmo y su correspondiente diagrama de flujo, llega el momento de empezar a programar.

En primer lugar debemos elegir el lenguaje de programación que emplearemos para solucionar en cada caso. Por ejemplo, el lenguaje típico del mundo financiero era el Cobol, el Prolog era un lenguaje clásico para la inteligencia artificial y Java ha sido ampliamente utilizado para programar dispositivos electrónicos.



En una entrada futura realizaremos una revisión de los principales lenguajes de programación y su evolución, pero ahora es momento de encontrar las herramientas para realizar los programas.

La herramienta básica para realizar un programa sería un editor de textos, el más sencillo es el Wordpad que viene junto con Windows. En su versión más sencilla esta es la única herramienta que necesitamos para desarrollar nuestro programa. Como os podéis imaginar existen mejores herramientas para realizar nuestro trabajo. Los editores más sencillos no comunican nada sobre errores de sintaxis y tampoco permiten depurar el programa, ni realizar seguimiento de errores.

Por eso existen editores específicos para programadores, o desarrolladores, que se suelen conocer como IDE (Integrated Development Environment) o Entornos de Desarrollo Integrado (EDI en español). Estos programas de edición nos informan sobre errores en sintaxis, sugieren instrucciones específicas y permiten realizar limpiezas (depuración o "debugging").



Entre los edi´s más conocidos están Netbeans, Eclipse, InteliJVisual Studio y Brackets. Cada uno incorpora características propias que facilitan la labor de programación. Al final del proceso de realización del programa, generalmente conseguiremos un fichero que será el código fuente de nuestra aplicación.

Dependiendo del lenguaje de programación escogido este código fuente será utilizado por la máquina de una forma o de otra.

En algunas ocasiones desde el editor se creará un fichero procedente del código fuente que se puede ejecutar directamente en el ordenador. En este caso estamos ante un lenguaje compilado, como pueden ser C/C++ o Pascal. Si el código fuente se va ejecutando paso a paso desde el ordenador, sin traducir el conjunto completo a código máquina, estamos ante un intérprete. De este tipo son Basic y Python. Como tercera variante, el uso de máquinas virtuales permite escoger lo mejor de los dos mundos anteriores. El código fuente se transforma en un código intermedio, llamado bytecode, y después cada máquina lo ejecuta con ayuda de un intérprete, paso a paso. De este tipo son los lenguajes multiplataforma como Java y Android.

Si todavía no habéis tirado la toalla en este artículo, es que sois unos grandes "tekkies" y el mundo de la informática os apasiona. Por hoy, hemos terminado, y ya tenemos nuestras herramientas para realizar grandes programas. Ahora se trata de empezar a realizarlos y convertirse en unos grandes desarrolladores, pero sin perder la cabeza como Steve Ballmer, CEO de Microsoft, en una conferencia de la compañía. ¡No dejéis de enviar vuestros comentarios!

J. Carlos Avendaño
Club Tecnológico