Atom como alternativa de editor de código

Una de las herramientas mas básicas en el ordenador de un programador es un software de edición de código. A nivel más básico en Windows se suele tirar Notepad++ (porque seamos sinceros, el bloc de notas y el wordpad apestan), y en sistemas Linux basados en Gnome se suele tirar de gEdit, que tiene su coloreado sintáctico pero también va cortito.

Atom como alternativa de editor de código

En general, Sublime Text suele ser de lo mejor en el mercado, pero como siempre, intento encontrar una alternativa de software libre y que esté para para cualquier sistema operativo de sobremesa, y en este caso lo mejor con lo que he dado hasta la fecha es Atom. En principio es muy parecido a Sublime, hasta tiene los paneles laterales con explorador de ficheros de proyecto y el minimapa, pero tiene 2 grandes ventajas competitivas.

La primera es el uso de plugins, de manera que se puede expandir al gusto, o eliminar los componentes que no necesitamos para optimizar el consumo de recursos y espacio. Así puedes tener diversos sistemas de revisión de sintaxis y autompletado para los distintos lenguajes a usar, el típico selector de colores si vas a hacer diseño web, diversos auto-formateadores para que nos quede el texto bonito sin tener que ir contando espacios, una terminal integrada para poder compilar

La segunda, al estar hecho por los chicos de GitHub, es su sistema de control de versiones, que va muy fino en Git, que para algo es marca de la casa.

La pega es que al estar basado en Chromium, se toma su tiempo para cargar, y el extra friki: el power mode que podéis ver en gif abajo.

Cuestiones de APIs

Cuando en términos de programación se habla de una API, hablamos de una serie de especificaciones: una “Interfaz de Programación de Aplicaciones” contiene una serie de prototipos, es decir, los nombres de las funcionalidades, los parámetros que usa como entradao salida, y una descripción de lo que se espera que ésta haga. Pero cuando nos preguntamos cómo hace eso que dice, se queda en blanco. El cómo se hace, que es donde está la chicha, es la implementación.

¿Qúe es lo bueno de las APIs? Pues que se pueden implementar de diversos modos, generando patrones de uso y facilitando el buen diseño de aplicaciones. Para los programadores es una herramienta fantástica, pues nos permiten no solo ayudar a afianzar buenas prácticas, sino que el manteniemiento del código es mejor: si tienes que cambiar un componente por dentro pero mantienes la interfaz, los cambios son invisibles desde otras capas de código, pues desde ellas solo ven los prototipos.

Cuestiones de APIs

¿Deberían patentarse las APIs? Evidentemente el derecho de autoría sobre los patrones es algo que debe reconocerse, pero aplicar copyright sobre algo que a fin de cuentas es humo es absurdo. Las implementaciones pueden tener copyright, evidentemente, pues hay un trabajo y un desarrollo de ideas tangible y real, pero no las APIs. Cerrar su uso solo llevaría al empobrecimiento del desarrollo software, lo que a todas luces es algo malo.

De ahí que espero que Oracle pierda una vez su caso contra Google, porque las APIs de Android son básicamente las mismas que las de Java, aunque sus implementaciones se parezcan como un huevo a una castaña. Que compartan las interfaces nos permite a los programadores de Java ser capaces de trabajar con Android con una transición prácticamente nula, permitiéndonos poder tener nuestras aplicaciones en entornos y dispositivos diferentes “picando el código” una única vez, lo que es algo fantástico. Oracle debería alegrarse de que de esta manera, Java siga siendo un lenguaje muy vivo, en lugar de intentar ahogarlo con patentes y falta de atención a su mantenimiento tal como está haciendo con MySQL, al que MariaDB cada vez le está comiendo más y mas terreno.

Por qué es interesante saber programar (y por qué defiendo el software libre y el ideal de código abierto)

Si bien hace meses comenté mi opinión sobre aprender a programar a nivel de planes de educación, esta vez lo haré a nivel personal. Siempre me gustó la programación: es un mundo basado en las matemáticas en la física, donde mediante lógica todo es cuestión de causas y consecuencias. Incluso en los comics que leí de adolescente ya tenía a varios informáticos entre mis personajes preferidos (como no, siempre secundarios o terciarios), teniendo como capacidad principal el entender el por qué de las cosas, o la capacidad de ver cosas ocultas para el resto del mundo. Pero de lo que no tenía ni idea era que en el futuro, al saber informática, yo misma me sentiría como si tuviese superpoderes.

Si de por si en los 90 ya se comenzó una primera informatización a nivel de estructuras, hoy en día informática está en nuestra vida personal con la “Smart Technology”: tenemos SmartPhone, SmartBand, SmartGlass, SmartWatch… el “Quantified Self”, o la medición utilizando medios informáticos de los datos de nuestra vida, está al orden del día: pulso, calorías, gastos, posicionamiento… La cantidad de información que existe sobre ti es tremenda, y la gran pregunta es: ¿sabes cómo se maneja? Esa es la habilidad que te da saber programar: puedes leer el código (si es que puedes acceder a él, cosa que no siempre es legalmente posible) y descubrir qué hace y cómo lo hace. Lo mejor es que podrás tomar decisiones de forma responsable al estar informado, y lo peor será que tus amigos te miren con cara rara cuando te pregunten que por qué no usas tal o cual servicio y respondas “He visto el código…¡Y ES HORRIBLE!”.

En consecuencia, puedes tener la capacidad de mejorarlo y hacerlo menos horrible en tu ámbito personal. Puedes hacer que tus sistemas sean mas de tu gusto a nivel visual, o directamente mas eficientes y seguros (evitando que se envíe datos que no deseas que sean enviados), e incluso llegar a repararlos cuando haya algún problema. Lo mejor de todo es crear nuevos sistemas que manejen una inmensa cantidad de información por ti, ahorrándote horas y horas de trabajo y haciendo tu vida mas fácil, puesto que existen límites para tus posibilidades mas allá de las patentes de software. Esta línea de pensamiento probablemente te llevará a que te guste el ideal del software libre o el código abierto, en el sentido de poder acceder libremente al código fuente y así poder mejorarlo o modificarlo a tu gusto, promoviendo la innovación y securización. A veces te sentirás como un personaje de Shadowrun en la eterna lucha contra las megacorporaciones, pero merece la pena defenderlo.

Por qué es interesante saber programar

La situación de ocultar el funcionamiento de un sistema puede llevar a situaciones absurdas, como las que ese han dado con los “electrodomésticos inteligentes”. Si, este concepto existe: hay lavadoras que se conectan al wifi de tu casa para enviarte una notificación al móvil cuando van a acabar, frigoríficos que cuando detectan que te falta algo lo piden directamente al supermercado para que te lo manden a casa. La necesidad de estos sistemas es discutible (mi objeto “inteligente” absurdo preferido es una dispensadora de comida para gatos que se abre cuando le envías un tweet con mención a su cuenta), pero existir, existen. Ahora imagina que el sistema está mal programado y lleva una “ruleta rusa de código” dentro, similar a esto:

int min = 1;
int max= 6;
int value = (Math.random()*(max-min))+min;
if (value == min){
    die();
}else{
    //your code goes here
}

En este caso muy simplificado se simularía que si tiras un dado de 6 caras (los sistemas informáticos no tienen capacidad de aleatoriedad, generalmente usan una de las últimas cifras de la hora del reloj del sistema para seleccionar el “valor aleatorio”), y sale un valor del 2 al 6, todo funcionará correctamente, pero si sale un 1 el código “se suicida”. Esto podría provocar tontamente obsolescencia programada en el peor de los sentidos del término, y si fuese el frigorífico inteligente que mencioné antes, estaría pidiendo que te trajesen tomates hasta el día del juicio final, cosa que igual no es buena para tu cartera. Arreglarlo sería tan simple como todo ese eliminar todo lo que rodea el “your code goes here”, ganando eficiencia (son 7 líneas menos a ejecutar) y seguridad, pero si fuese código privativo técnicamente no puedes (o mas bien debes) hacerlo.

Esta situación es un atraso (o si piensas mal, un negocio muy retorcido), y por eso siempre defenderé que los sistemas que no ocultan lo que llevan debajo, permitiendo su revisión y mejora. Esto no significa que el creador pierda el control, puesto que existen licencias creative commons que se ajustan correctamente a cada modelo de  negocio, respetando el derecho de autoría, remuneración económica y obras derivadas. Solo hay que elegir la adecuada y problema resuelto. Hacer una modificación o hack no significa intrínsicamente hacer algo dañino, sino hacer una modificación, que puede arreglar muchos problemas. Eso sí, hay que recordar que las claves de securización nunca se comparten.

“Todo el mundo debería aprender a programar”

Esta es una frase que tiene un regusto especial para mí. Cuando estaba en el colegio tuve la suerte de tener clases de informática. No solo me enseñaron el típico curso de mecanografía y manejo básico de  WordPerfect 5.1 (si, han pasado bastantes años), sino que nos dieron unas bases de programación en Basic. Mientras yo pensaba la en la suerte que tenía, la chica que se sentaba en la banca de al lado dijo “¿Y para qué estudiar, esto? Si no sirve para nada”. Cuando el pobre profesor intentaba explicarle que la informática, en aquel momento una asignatura complementaria y sin nota, sería importante en el futuro llegó la frase lapidaria de la niña “Pues ahora no sirve para nada, y si lo necesito en el futuro mi papá me pagará un curso”.

Bueno, muchos años después se demostró que aquel hombre tenía razón: la informática está en todas partes: en las oficinas, en los coches, en nuestros bolsillos… y ahora diversas celebridades animan a que “todo el mundo debería saber programar”.

"Todo el mundo debería aprender a programar"

Para mi, programar no es tanto el saber codificar en un lenguaje, sino crear una solución duradera a un problema aplicando la lógica, esa materia que se supone que se enseña en filosofía, pero que no parecía ser muy interesante durante los planes educativos del primer año del plan educativo LOGSE. Hacer un buen programa no solo es cuestuón de ciencia, sino que también incluye su arte: hay que tener una estructura detrás, pero también gusto a la hora de hacer su diseño y su interfaz, es como hacer un puzzle y además dibujar a la vez, creando un medio para un fin, por lo que las aplicaciones son infinitas. Además ayuda a amueblar la cabeza, lo que siempre es positivo.

¿Es para todo el mundo? Considero que todos deberían conocer una base, y que en general debería ser mas importante que “aprender a manejar la suite de Microsoft Office” (tema que me indigna, porque se debería enseñar que hay vida mas allá de Microsoft), puesto que es algo que ayuda a conocer cómo funciona el mundo hoy en día. Es más, teniendo en cuenta las herramientas que se usan a diario, se debería tener una base mínima de código HTML, aunque solo sea por hacer un uso correcto de la plataformas colaborativas en entornos educativos. A nivel mas avanzado ya debería ser una opción personal, aunque desde luego hoy en día resultaría mas productivo en cuanto estudios de tecnología que cortar madera o encender bombillas.

En cuanto a nivel de usuario, mas que codificar en C, Java, o Ruby a esas edades tal como dicen los “entendidos”, sería mas importante dar una educación básica sobre un buen uso de las tecnologías digitales de uso diario: que se lean los términos y condiciones de los servicios que usan es una batalla completamente perdida, pero unos conocimientos mínimos de seguridad la red, aprender a diferenciar entre espacios públicos y privados, y que “lo gratis” no siempre es gratis sino que se paga con datos, no resultan ser ideas tan difíciles de meter en la cabeza.

Programando en Vala (y por qué es interesante)

Siempre me ha interesado programar cosas para Linux usando GTK, que es una de las librerías para generar los entornos gráficos. Por desgracia, siempre me hechó para atrás el hecho de que su desarrollo vaya muy ligado a C (que es de bajo nivel) y Mono, que es la implementación libre de .NET y contiene orientación a objetos. Por desgracia, el uso de Mono significa usar la API de Microsoft .NET, lo que expone a entrar en guerra de patentes con el gigante, cosa que no me agradaba especialmente. Bastante está gorroneando ya de Android para que siga aprovechándose de mas tecnología opensource.

Programando en Vala (y por qué es interesante)
El logotipo de GNOME, que mantiene GTK

Vala ha resultado una alternativa muy agradable, puesto que usando una sintaxis similar a la de Java compila ficheros de C sin tener que pasar por todo el lío de punteros propio de los lenguajes de bajo nivel.

class Demo.HelloWorld : GLib.Object {
    public static int main(string[] args) {
        stdout.printf("Hello, World\n");
        return 0;
    }
}

Jürg Billeter y Raffaele Sandrini están haciendo un gran trabajo para facilitarnos la gestión de recursos, y espero que su proyecto tenga mucho éxito. De entrada, ElementaryOS ya lo ha adoptado para desarrollar las aplicaciones de su entorno, y el buen resultado salta a la vista.