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



martes, 14 de noviembre de 2017

¿CUÁL ES EL COLOR Y LA FORMA DE LAS IDEAS?

El paso previo para resolver un problema es tener claro que existe un problema y la naturaleza del mismo. Este paso previo es fundamental, pues no será la primera vez que queremos solucionar un problema inexistente o desconocido. Esto da lugar a situaciones ridículas como los puentes a ningún sitio, los aeropuertos vacíos o las carreteras fantasma que pueblan nuestro país y en realidad, el mundo entero.

Una vez identificado el problema buscaremos un algoritmo que lo resuelva, entre los existentes o ideándolo nosotros mismos. Y a continuación llega el momento de traerlo a la realidad, fuera de nuestra mente.

Para ello existen ingeniosos medios de uso común en programación. El primero de ellos es el pseudocódigo que consiste en una serie de instrucciones, a modo de consejos entre amigos, que desglosan el algoritmo y permiten la resolución del problema.

// Juego simple que pide al usuario que adivine un numero en 10 intentos

Proceso Adivina_Numero

    intentos<-10
    num_secreto <- azar(100)+1
    
    Escribir "Adivine el numero (de 1 a 100):"
    Leer num_ingresado
    Mientras num_secreto<>num_ingresado Y intentos>1 Hacer
        Si num_secreto>num_ingresado Entonces
            Escribir "Muy bajo"
        Sino 
            Escribir "Muy alto"
        FinSi
        intentos <- intentos-1
        Escribir "Le quedan ",intentos," intentos:"
        Leer num_ingresado
    FinMientras
    
    Si num_secreto=num_ingresado Entonces
        Escribir "Exacto! Usted adivino en ",11-intentos," intentos."
    Sino
        Escribir "El numero era: ",num_secreto
    FinSi
   
FinProceso

Otro medio más avanzado sería la realización de diagramas, o dibujos, que permiten expresar la consecución de acciones para resolver el problema. En este caso, destacan dos formas empleadas comunmente: el diagrama de Nassi-Shneiderman y el diagrama de flujo.

El diagrama de Nassi-Shneiderman es una representación gráfica mediante polígonos conectados que muestra las fases de resolución del problema. Sin entrar en detalles, su aspecto es el de un juego de piezas encajadas con texto en su interior. Las piezas tienen distintas formas según la acción que realizan. Por ejemplo la ejecución de acciones son piezas rectangulares, las decisiones son triángulos que se complementan con acciones triangulares y los bucles son bloques en forma de L.


Los diagramas de flujo son representaciones de los algoritmos mediante bloques interconectados por flechas. No sólo se utilizan en programación sino en la industria por lo que existen normas industriales que regulan su forma de uso (ANSI, ASME, ECMA...) No obstante, existen símbolos estándar que son los más utilizados en todos los sistemas, como el óvalo para inicio y fin del proceso, el rectángulo para una accion o proceso y el rombo para una decisión.

Los gráficos de este artículo han sido realizados con el programa de diseño Pseint, de licencia GNU GPL v2.

Esta batería de herramientas nos permite poner "negro sobre blanco" la idea que tenemos para solucionar un problema (dígase, hacer un huevo frito para solucionar nuestro problema de hambre o acercarse a un/a chico/a que nos gusta).

Ya veis que primero debemos ordenar las ideas antes de escribir líneas de código. Ahora empezaremos a "quemar" el teclado, escribiendo nuestro código. Recuerda que primero debe existir un problema real, no vaya a ser que construyamos "puentes a ninguna parte".

J. Carlos Avendaño
Club Tecnológico

martes, 17 de octubre de 2017

BIENVENIDOS A ALGORITMIA

En un mundo fantástico existe un lugar donde viven las soluciones a todos los problemas y se llama Algoritmia. Esta rama de la ciencia de la computación y las matemáticas estudia los algoritmos. Como hemos visto antes, un algoritmo es una secuencia de pasos lógicos que permiten solucionar un problema.

Estos procedimientos se remontan a la Grecia Antigua donde Euclides (300 A.C.) planteó la resolución del problema del máximo común divisor mediante un ingenioso sistema de divisiones geométricas. Con toda probabilidad existieron algoritmos anteriores a los griegos, pues tanto egipcios como babilonios fueron excelentes geómetras y tuvieron que lidiar con problemas de todo tipo.



La importancia de los algoritmos en la programación se entiende cuando recordamos que los ordenadores son elementos mecánicos que repiten secuencias de instrucciones. Esas secuencias pueden ser extremadamente complejas, pero siguen siendo mecánicas.

Cuando en 1980 un fabricante de juguetes puso a la venta un endiablado cubo con seis colores por cara, no se imaginaba la fiebre que generaría la resolución del mismo, entre los 43 trillones de posibilidades. Esto supuso que miles de matemáticos y aficionados en todo el mundo buscaran el algoritmo del famoso cubo de Rubik, que tardó un año en encontrarse, pero continuó durante una década ocupando la mente de los más concienzudos estudiosos. Por cierto, os adjuntamos un algoritmo para la resolución del tradicional cubo de 6x6x6.



Los algoritmos más sencillos, como la ordenación de elementos o resolución de operaciones aritméticas simples, pueden ser desarrollados por cualquiera de nosotros. Sin embargo existen bases de datos en todo el mundo que recogen las mejores soluciones para estos problemas. Entre ellas destaca LEDA (Library of Efficient Data Types and Algorithms) que es un conjunto de algoritmos desarrollados en el lenguaje C++ por la empresa alemana Algorithmic Solutions. Algo más asequible, pero muy completa, es la lista de algoritmos con su desarrollo que nos ofrece Wikipedia (en inglés).

Hay que tener en cuenta que nuestra civilización descansa en varios algoritmos y esto determina nuestra forma de vida. Si crees que esto es una exageración te invitamos a que pienses que harías sin:

  1. El buscador de Google.
  2. El secuenciador genético del proyecto Genoma Humano.
  3. El reconocimiento facial de Facebook.
  4. Las recomendaciones de compra Google Adwords, Amazon y demás.
  5. La compresión de imágenes en Netflix o en tu cámara de fotos.
  6. La comprobación de suma (checksum) de los mensajes por Internet.
  7. El buscador de ruta eficiente en los GPS y Google Maps.
  8. Encriptación de operaciones bancarias y compras por Internet.
  9. Expedición automática de multas de tráfico por reconocimiento de matrículas.
  10. Trading algorítmico de alta frecuencia en la bolsa.


Efectivamente, los algoritmos lo controlan casi todo. Pero esto no es el final. Debemos tener en cuenta que la Inteligencia Artificial se basa en algoritmos complejos que son reprogramados por ellos mismos. Actualmente existen los algoritmos genéticos, las redes neuronales, los sistemas expertos y la lógica borrosa como técnicas más prometedoras en cuanto a simulación de la mente humana.

Después de este resumen, no olvides que la secuencia de tareas que realizas cada día para llegar al colegio, o alimentarte, se pueden considerar un algoritmo. Esperamos que ahora puedas ver la vida con otros ojos: los ojos de la algoritmia. Y no olvides enviarnos tus comentarios...

J. Carlos Avendaño Cuéllar
Club Tecnológico



lunes, 18 de septiembre de 2017

CÓMO HABLAR CON TU ORDENADOR. APRENDE A PROGRAMAR.

Desde que en 2013 los hermanos Partovi pusieron en marcha Code.org, cada vez más figuras influyentes han apoyado la enseñanza de la programación en los colegios como una materia fundamental para el siglo XXI. Presidentes del gobierno, magnates empresariales y figuras mediáticas han cedido su imagen para concienciar al mundo entero sobre la importancia de la programación en la sociedad del nuevo siglo.

Las ventajas del aprendizaje de la programación suponen la estructuración de los procesos mentales, entrenamiento en atención mantenida y obtención de resiliencia frente a los fracasos. A esto se une la innegable comprensión de los procesos que ocurren en los dispositivos, que cada día inundan nuestra vida corriente.

Poca gente sabe que los primeros programadores de la historia fueron mujeres, de las cuáles la primera reconocida en los libros de texto era la hija del poeta inglés Lord Byron, Miss Ada Lovelace. Desde las pesadas tareas de perforar las tarjetas de papel en código máquina hasta la programación por objetos actual, ha pasado más de dos siglos de historia.



Para comenzar, podemos decir que programar es establecer un conjunto de instrucciones que una máquina ejecutará secuencialmente (una detrás de otra) o en paralelo, según un conjunto de normas sintácticas establecidas previamente. Una analogía muy útil es la de cocinar, pues el programa sería una receta, en un lenguaje dado, que un cocinero va ejecutando según las normas básicas de higiene y orden. Así, por ejemplo, la receta dirá que para hacer un huevo frito se debe echar el huevo en un sartén con aceite caliente. Sin embargo, las normas de comportamiento le han enseñado que no debe dejarlo caer bruscamente para no convertir la receta en huevos revueltos.

Cualquier programa surge de una necesidad que hay que cubrir. Así, si queremos resolver nuestra necesidad de comer habrá que establecer la secuencia de pasos para que nuestro "cocinero automático", pueda resolverlo. La solución al problema se llama ALGORITMO, que es la receta del plato que queremos cocinar. Así, la receta de "freír un huevo" es un algoritmo que soluciona el problema del hambre para muchos "rodríguez" que pasan solos parte del verano.

Los algoritmos se suelen representar mediante diferentes técnicas, siendo las más habituales el PSEUDOCÓDIGO y los DIAGRAMAS DE FLUJO. El primero es una especie de programa en lenguaje humano, que establece la secuencia de acciones a realizar para resolver un problema. El segundo hace uso de unos símbolos estandarizados para crear una secuencia ordenada de instrucciones.



Una vez en este punto, el programador debe elegir el tipo de LENGUAJE DE PROGRAMACIÓN a utilizar para crear su programa. Hasta ahora no hemos escrito ni una línea de código. Por cierto, los programas están realizados mediante líneas de código, unas detrás de otra, siendo común el uso de números que ordenan la posición de estas líneas para facilitar su identificación posterior.

Cada lenguaje tiene un conjunto de instrucciones particular que, unido a su sintaxis, permiten escribir los programas finales a ejecutar en los ordenadores. La sintaxis es un conjunto de reglas de escritura similares a las que rigen el español y que, por ejemplo, obligan a poner un punto al final de las frases.



Así, que ya sabéis, si deseáis comer bien primero debéis buscar un algoritmo, luego representarlo mediante su diagrama de flujo para posteriormente poder escribir el código adecuado que os permita resolver el problema. Siempre podéis comer algo de comida rápida, pero nada sabe mejor que un buen plato cocinado por uno mismo. ¡Hasta pronto!


J. Carlos Avendaño
Club Tecnológico


viernes, 23 de junio de 2017

BUENOS HÁBITOS EN EL USO DE NUEVAS TECNOLOGÍAS

Llevamos ya varias entradas ("posts") hablando de los riesgos identificados en el uso de las nuevas tecnologías. Llega el momento de hablar de buenos hábitos para hacer frente a estos riesgos.

Estas recomendaciones que presentamos son preliminares, pero pensamos que serán muy útiles para todos. Tanto adultos como jóvenes y niños nos encontramos con situaciones nuevas debido a la irrupción de Internet, los móviles y resto de dispositivos electrónicos. Hace 20 años casi nadie se preocupaba por los virus y el malware. Hace 15 años nadie tenía problemas para gestionar su email, hoy en día muchos de nosotros estamos desbordados. Hace 10 años pocos se preocupaban por el consumo de datos en su móvil, ni buscaban una red wifi donde engancharse. En 5 años el ancho de banda ha sido un problema en casi todos los hogares, cuando antes no existía esta preocupación.

Con el espíritu de conseguir un conjunto de  recomendaciones, abierto a la crítica y a la mejora, os exponemos este decálogo de buenas costumbres en el uso de nuevas tecnologías:

1.- Protégete con antivirus. Este principio engloba la protección en el uso de ordenadores, tablets, móviles y el uso de Internet en general. Los elementos de protección pueden ser antivirus, antimalware, firewall, claves de acceso y muchas más. La idea general es ser precavido y protegerse.

2.- Socializa y comparte. La actividad digital no tiene porque ser individual, pues existen medios de socialización a través de redes sociales y comunidades de aprendizaje virtual. También contemplamos en este principio dedicar espacios de tiempo amplios al mundo real y las relaciones con amigos y familia, a los cuales podemos hacer partícipes de nuestras "aventuras virtuales".

3.- Acuerda normas. El establecimiento de normas antes de iniciar el uso de dispositivos electrónicos supone acordar "en frío" la forma de uso y los mecanismos de control. Entre estas normas se recomienda el uso de ordenadores en lugares públicos del hogar, evitar su uso en horas cercanas al amanecer y anochecer para evitar la supresión de melatonina, desconectar cuando se está en reuniones y cualquier forma de control que evite interrupciones a nuestro ritmo natural.

4.- Mantén horarios de uso. En relación con la anterior, esta recomendación supone evitar las nuevas tecnologías a determinadas horas del día para desconectar, reservar espacios para familia, amigos y compañeros y evitar la consulta excesiva de correo electrónico y redes sociales estableciendo horarios periódicos.

5.- Crea, no consumas. Sin pretender el autoconsumo, os proponemos que no seáis sólo consumidores. Aprender a crear con las nuevas tecnologías nos permite aumentar nuestras formas de expresión y evita la pasividad propia de los medios de pantalla.

6.- Evita la multitarea. Es difícil imponerse hacer una tarea cada vez, pues las nuevas tecnologías nos empujan a lo contrario. Está demostrado que es perjudicial para nuestra concentración el realizar varias tareas al mismo tiempo. La opción a la multitarea es organizarse para tratar "en serie" cada una de nuestras ocupaciones, evitando nervios y estrés innecesarios.

7.- No des datos privados a desconocidos. Mantener la privacidad en la Red es fundamental, pues cada día aumentan los delincuentes que pretenden aprovechar esta fuente de información para su beneficio. Hay que mantener presente siempre que no conocemos a los individuos con los que nos relacionamos y que nuestros datos son fácilmente "secuestrables" en un entorno poco seguro (wifi abierta o redes http).

8.- Sé respetuoso en la red. El fenómeno de la globalización supone que individuos de todo el mundo entren en contacto. Si en la vida normal es deseable el respeto, aún más resulta recomendable en un entorno de diferentes culturas, razas y costumbres como es Internet.

9.- Tu mejor herramienta es el conocimiento. "El conocimiento es poder", esta frase de sir Francis Bacon es rescatable hoy en día. Cuanto más sepas, más consciente eres de lo que ocurre y más seguro podrás navegar por estos "mares". Afortunadamente hoy existen cientos de modos fiables de obtener información que conviene aprovechar, como pueden ser la Wikipedia y tutoriales de organizaciones internacionalmente reconocidas (Incibe, Agencia de Protección de Datos, Mozilla...)

10.- Combinar técnicas te enriquece. Las nuevas tecnologías son un medio, no un fin. Como todas las  herramientas, cuantas más poseas y sepas utilizar, mejor será tu desarrollo. Además de evitar deficiencias neurológicas, el uso de herramientas tradicionales y modernas nos permite ser más versátiles y adaptarnos mejor a cada circunstancia. Como ejemplo, el uso del diseño con lápiz y papel es ampliamente utilizado complementando al diseño digital para la realización de primeros bocetos en el mundo del cine y la arquitectura.


Para los que queréis profundizar más en el tema os proponemos un libro muy interesante en línea con estas recomendaciones. Está escrito por D. Juan Martínez Otero, profesor de la Universidad CEU Valencia, y se titula "Tsunami digital, hijos surferos".

Como complemento hemos preparado una infografía como recordatorio de estas recomendaciones.



Este es un primer trabajo que pretende ser perfeccionado gracias al aporte de toda la comunidad interesada. Así que envíanos tus comentarios y aporta tu experiencia. De este modo construiremos un conocimiento más rico y compartido.




J. Carlos Avendaño
Club Tecnológico