jueves, 22 de mayo de 2014

La informática que nos rodea

Cuando alguien me dice que va a estudiar informática me da algo de miedo porque creo que esa persona no sabe dónde se está metiendo. Ni siquiera creo que sepan lo que significa ese término. Es un mundo de inmensas posibilidades y no se puede tomar a la ligera.

Por cierto, que la gente suele decirme estas cosas del mismo modo que me dicen que han dejado de fumar; como si yo fuera la policía de la salud o un experto en informática. Cosas que no me considero en absoluto.

No me considero informático aunque haya hecho trabajos propios de un informático. Y puede que tenga más conocimientos de algún tema que algunos profesionales. Pero cada día hay novedades y cambios en este mundo y no estoy puesto en ellos, ni me intereso activamente por informarme de todo. Al margen de que es inabarcable y está lleno de incertidumbre sobre qué métodos son mejores para hacer según qué cosas.

Pero ahora mismo, en este artículo, quiero explicar en qué consiste "esto de los ordenadores" desde mi punto de vista "apasionado del software". Porque es cierto que no debemos dar la espalda a la informática o su evolución que sería el mundo de Internet, la Aldea Global; o lo que llaman las I.T. (Tecnologías de la Información). Y que aunque tengamos cierta habilidad adquirida puede que nos abrume tanta posibilidad, o el simple hecho de desconocer esas posibilidades.

No prestar suficiente atención a esto te convierte ya, hoy día, en un analfabeto.

A mi me empezó a enganchar la informática con menos de 10 años. Y por entonces ya programé en Basic en un cuaderno en los recreos (sin ordenador), y poco después algunas chicas me preguntaban, también en los recreos, si leía la biblia, porque tenía un pequeño libro muy gordo... que en realidad era un diccionario de términos informáticos de bolsillo. jajaja.

El caso es que a mí la informática nunca me atrajo como una profesión sino como una herramienta para crear contenidos, comunicarme con ella, divertirme y como un cosmos de exploración infinito.

Como yo, otras personas vieron en su día algunas posibilidades de la informática que les permitió ganarse la vida gracias a que también les gustó algún aspecto de la tecnología o los sistemas informáticos; bien sea el hardware como evolución de la electrónica, la programación, edición de contenidos, análisis de datos científicos, o algún otro uso divulgativo, literario, artístico o del mundo del entretenimiento.

Así que hubo un tiempo en que era suficiente con saber decir "ordenador" para tener trabajo. Ya que las aplicaciones de "esta tontería" son casi ilimitadas.

Pero ¿qué es un ordenador?

Un ordenador no es más que una serie de circuitos integrados o micro-chips conectados a varios periféricos con un sistema que permite al usuario dar órdenes y recibir respuesta a ellas.

Gracias a los programas estas órdenes pueden ser automatizadas para evitar tareas que de otro modo serían tediosas y rutinarias.

Pero las cosas no son tan maravillosas y sencillas como parece.

Un procesador, CPU, (o Unidad Central de Procesado) es un micro-chip que, como otros micro-chips con distintas funciones en el ordenador, recibe datos binarios y devuelve respuestas correspondientes según lo recibido, siendo capaz de realizar millones de cálculos y operaciones por segundo.

Toda pieza de hardware tiene micro-chips que reciben y envían datos binarios; Unos y ceros.

Por ejemplo, un teclado recibe las señales de cada pulsación y envía el código correspondiente en un estándard establecido para que el ordenador interprete qué teclas se están pulsando.

Las tarjetas gráficas tienen procesadores que reciben datos con ordenes para ser convertidas en señales de vídeo que se representan en el monitor.

Una impresora tiene un procesador que recibe señales para hacer mover sus mecanismos e imprimir en papel lo envíado.

El código binario de las máquinas es algo más que complicado para que las personas corrientes podamos comunicarnos con ellas al nivel más directo (bajo nivel). Además, cada fabricante, en ocasiones, inventa su propio juego de órdenes binarias para sus aparatos que luego han de ser "estandarizadas" con pequeños programas que podríamos llamar drivers, o controladores.

Y todo el hardware debe controlarse con programas. Pero hay tantas formas de programar como granos de arena en una playa, o modelos de iPhone.

Programación a Bajo Nivel:
La programación a bajo nivel está reservada a mentes superdotadas. No digo que haga falta ser un genio, pero podemos sacar de este grupo a políticos o tertulianos de TV y el mundo del "famoseo".

Programar a bajo nivel significa que das las instrucciones, no al sistema operativo (que se instala en un ordenador) sino directamente a los micro-chips que controlan el ordenador (o dispositivo).

El código máquina son órdenes en lenguaje que el procesador puede entender directamente sin necesidad de aplicaciones que hagan de interprete para hacer su tarea. De modo que las aplicaciones hechas a este nivel o en ensamblador, lenguaje (también de bajo nivel) un poco más "humano" que el código máquina pero igual de complicado, funcionan con más eficiencia y velocidad que otras aplicaciones hechas a otros niveles.

Lenguajes compilados:
Entre medio hay diversos lenguajes de programación, con distintos tipos de estructura, que pueden ser compilados, generando un programa similar a los que genera el ensamblador, para que el ordenador haga lo que se le pida. La mayoría de aplicaciones profesionales se hacen en estos lenguajes; usando C, C++, Java (aunque este lenguaje es una excepción, dentro de la categoría, ya que emplea un intérprete creando una máquina virtual que se comunica con el procesador, de modo que no es tan eficiente), etc.

Lenguajes de alto nivel / scripting:
Aunque se llamen de alto nivel, no son los lenguajes con los que puedas presumir de tener un "nivel alto" en informática; Aunque desde luego programar está muy por encima de eso que ponen algunos en su currículum de "Conocimientos medio-alto de informática a nivel usuario".

Para presumir aprende código máquina de varios tipos de procesador comunes en smartphones, tablets y aparatos raros que nadie entiende y entonces estaríamos hablando de un erudito. jejeje.

Estos lenguajes de programación usan un intérprete intermedio que adapta las órdendes para realizar las tareas ordenadas por el programa. Tiene la ventaja de que la sintaxis es más fácil de entender; al no estar compilado puedes ver cómo están hechos otros programas y aprender más fácilmente.

Además ofrecen una facilidad muy grande para interactuar con otros programas y por tanto crear aplicaciones más útiles y complejas.


Este es el tipo de lenguaje que conozco un poco. Y es también de los más utilizados para hacer algunas aplicaciones, incluso algunas bastante potentes. En ocasiones puede llegar a compilarse para no requerir intérprete pero nunca llegarán a funcionar tan bien como las programadas en lenguajes compilados o a bajo nivel.

En esta categoría están lenguajes como Python, Perl, PHP, REXX, ARexx, AppleScript, VBScript, Ruby, Lua, etc.

Conocer las peculiaridades de cada lenguaje se queda a vuestra curiosidad.

A mayor curiosidad mejor. Aunque podéis caer en un pozo sin fin. Porque, a menos que seais muy disciplinados, el tiempo que os puede robar la "informática" pueden ser eones.

No se deben despreciar tampoco los conocimientos en lenguajes de consulta de bases de datos como SQL y derivados. Puesto que en muchas ocasiones lo único que se hace en un ordenador es almacenar, crear, modificar y eliminar datos; Cosa que se hace muy eficientemente desde muchos de estos lenguajes de programación y pueden ahorrar reescribir aplicaciones que hacen las mismas cosas pero usan contenidos diferentes.
Temible
Código Máquina
/ Ensamblador
de ZX Spectrum

Esto es algo que aprendí gracias a PHP y pelearme con sistemas de contenido web que emplean bases de datos para todo.

Si quieres aprender a hacer páginas web, lo tienes muy sencillo y bien estructurado en lugares como http://www.w3schools.com/

Ahora bien, no le debes tener miedo al inglés. ¡Al menos no es código máquina! Eso sí que da miedo.

Scripting:
Abrir una consola y teclear órdenes en vez de hacer click en el icono de un complaciente entorno gráfico del sistema operativo (que probablemte abra un script ya programado) es también un modo más directo de hacer algunas cosas en el ordenador. Se puede programar una serie de órdenes mediante scripts que permiten automatizar todo tipo de tareas. En PCs con Windows se emplea DOS o cosas más avanzadas como Windows Powershell, mientras que en sistemas Linux o Mac lo suyo es el Bash scripting.

En móviles Android he visto que existe alguna implementación de Lua, Luarida. Que puede ser interesante para hacer cierta automatización de tareas. Y tímidos intentos de portar otros lenguajes de script. Y es posible acceder a la consola y usar Bash con algunas limitaciones, ya que es un sistema Linux con una máquina virtual integrada, a'lla Java.

Cualquiera de estos lenguajes no sirve para nada sin una cabeza abierta para la lógica, razonamiento, algunos cálculos matemáticos, bastante intuición o capacidad de concentración, y un montón de imaginación para hacer realidad cualquier cosa que te propongas.

Más en wikipedia:
Historia de la computación
Timeline of computing

Esto es muy largo. Si hay algún error o imprecisión o quieres comentar algo... cuéntamelo en un comentario (abajo).