A través de este artículo, quiero pedir a la gente que empiece a programar en el sistema operativo GNU/Linux (de aquí en adelante, referido simplemente como ‘Linux’). Los estudiantes que se están iniciando en la programación; los educadores que enseñan o tienen un papel en la enseñanza de la programación a los nuevos estudiantes; los aficionados que programan en Windows – les pido a todos ustedes que por favor lean y den a Linux una buena oportunidad durante al menos una semana. Si estáis de acuerdo en que programar en Linux es realmente una experiencia mejor que vuestra plataforma anterior, entonces quedaos con ella, y disfrutad de la libertad que el resto de nosotros tenemos.
Sólo para aclarar cualquier malentendido, no pretendo que escribáis código para el núcleo de Linux en sí mismo (aunque eso bien podría seguir a medida que vuestra comodidad y competencia en programación crezcan). En su lugar, estoy hablando de escribir programas de espacio de usuario – incluyendo los ejercicios, tareas y proyectos que la mayoría de los cursos de estudio de ciencias de la computación incluyen. Antes de empezar, aquí hay un descargo de responsabilidad: este artículo contiene fuertes opiniones y creencias personales; no pretendo de ninguna manera ser ofensivo, pero algunas de estas ideas podrían valer la pena ser probadas – por usted – para ver si se siente de la misma manera!
Atacando la mentalidad
Se cree comúnmente que Linux es «difícil de usar». Claro, es diferente de lo que la gente acostumbrada a Windows está acostumbrada – pero no es difícil. Una vez que te adaptes a las diferencias, probablemente te reirás de esta idea errónea y les dirás a los demás lo equivocada que es su percepción
Sólo hay que pensar en los muchos estudiantes de informática que se han inspirado en el revuelo que ha creado Linux desde hace tiempo. Se han puesto decididamente a aprender a usarlo por iniciativa propia, haciendo preguntas en listas de correo, foros y a través de canales de IRC. En un par de semanas, están preparados para hacer algo más que desplazarse. A menudo, en un mes, se sienten tan a gusto con Linux que empiezan a introducir a otras personas en el sistema operativo. ¿Asombroso? Puede parecerlo – pero es que esos estudiantes estaban decididos a explorar y aprender, e ignoraron los gritos de «es difícil».
Siempre hay una curva de aprendizaje involucrada cuando uno está adquiriendo una nueva habilidad, y Linux no es una excepción. Si se enseña a los estudiantes a usar y programar en Linux, no sólo aprenderán, sino que les resultará sencillo. Les parecerá natural: aprender algo que no conocían antes. «Linux es difícil» es un mito moderno que hay que romper. Si eres un educador, por favor, pon tu granito de arena. Usted es la persona a la que los estudiantes admiran, y si les muestra el camino correcto, ellos seguirán su ejemplo.
Cómo poner en marcha Linux
Bien, una vez que ha decidido usar Linux, ¿cómo lo hace? Seguramente habrás oído hablar de un montón de «distros» (también llamadas distribuciones) de Linux: Ubuntu, Fedora, Debian y otras. ¿Por qué tantas «Linuxes»? Te lo explico. Técnicamente, «Linux» es el nombre de un núcleo (para más información, consulta este artículo de Wikipedia o la página oficial de Linux). Dado que un núcleo es de poca utilidad por sí mismo, las herramientas del espacio de usuario del proyecto GNU (incluyendo la implementación más común de la biblioteca C, un shell popular, y muchas herramientas comunes de UNIX que llevan a cabo muchas tareas básicas del sistema operativo) se combinaron con el núcleo de Linux para hacer un sistema operativo utilizable. La interfaz gráfica de usuario (o GUI) utilizada por la mayoría de los sistemas Linux está construida sobre una implementación del sistema X Window. Diferentes proyectos de software libre y vendedores construyen diferentes combinaciones de paquetes y características, para proporcionar diferentes experiencias de Linux a diferentes audiencias, lo que resulta en una miríada de distribuciones de Linux.
Entonces, ¿qué distribución de Linux debe usar? Tanto Ubuntu como Fedora han hecho, individualmente, que la experiencia de Linux sea muy fácil de usar para los usuarios ocasionales del ordenador – para la navegación por Internet, el correo electrónico y las necesidades de procesamiento de documentos. Cualquiera de ellas es ideal para empezar.
La instalación de Linux puede ser algo complicada, sin embargo, sobre todo si pretendes configurar un sistema de arranque dual en el que puedas arrancar tanto Linux como tu viejo Windows. Por lo demás, es bastante sencillo: descargue la imagen del CD (ISO), grábela en un disco, arranque su ordenador desde ella y ¡deje que se instale! La mejor manera de hacer una configuración de arranque dual la primera vez es conseguir a alguien en tu escuela, localidad u oficina que sepa de esto, y pedirle que te guíe.
Además, hay otras opciones si quieres probar Linux ya sea sin instalarlo, sin reemplazar Windows o haciendo una configuración de arranque dual. Vea la sección «Cómo lidiar con los aspectos prácticos» hacia el final de este artículo, para algunas de estas ideas.
La Guía Definitiva para Novatos en Linux es una buena referencia para ayudarle a aprender las cosas por sí mismo. Con Linux, un enfoque experimental para el aprendizaje ayuda mucho. Así que, haz una copia de seguridad de tus datos, y empieza con esos discos de instalación si no encuentras a nadie que te ayude. Hoy en día, la mayoría de las distribuciones de Linux vienen con sólo las aplicaciones y bibliotecas esenciales instaladas – lo que probablemente no será suficiente para las necesidades de programación.
Para permitir una fácil instalación de nuevo software, la mayoría de las distribuciones tienen un gestor de paquetes (en el mundo de Linux, el software se distribuye en forma de «paquetes»), que se utiliza para descargar e instalar fácilmente el nuevo software desde Internet. La Guía Definitiva para Novatos en Linux es una buena referencia para este tema.
Para que este artículo sea de máxima utilidad, intentaré ser más general, y evitar favorecer a alguna distribución en particular.
Elegir un editor de texto
No usaremos un Entorno de Desarrollo Integrado (IDE), al menos, inicialmente. Lo haremos de la forma más sencilla: escribir código con un editor de texto, guardarlo y compilarlo/interpretarlo con un compilador/interpretador adecuado. En el mundo de Linux, tienes una plétora de editores de texto para elegir. Uno de los editores, como gedit o kwrite, estará definitivamente instalado cuando instales Linux – puedes usar cualquiera de ellos. Si instalas una distribución como Ubuntu, que tiene el entorno de escritorio GNOME, entonces tendrás gedit ya instalado. Es como el Bloc de notas, sólo que más útil y con más funciones.
Programación en C/C++ en Linux
C suele ser el primer lenguaje que se enseña a muchos estudiantes en las escuelas y universidades de ingeniería de la India, así que veamos primero cómo programamos en C en Linux. Tenga en cuenta que el código C que escribirá en Linux será el mismo que escribiría en Windows/DOS, siempre y cuando esté escribiendo código ANSI C. Algunas funciones de biblioteca, como las proporcionadas por conio.h
y graphics.h
, no forman parte del estándar ANSI. Por lo tanto, no podrás utilizarlos en Linux.
El compilador de C que se utiliza en Linux es GCC. Forma parte de la colección de compiladores de GNU. Abre un terminal y ejecuta el comando: gcc
. Si ves algo como la siguiente salida, significa que GCC ya está instalado.
gcc: no input files
Sin embargo, si ves algo como «Command not found», entonces tendrás que instalar GCC usando el gestor de paquetes.
Además de un compilador, también necesitarás la biblioteca estándar de C, llamada glibc
, para compilar tus programas en C correctamente. Escribe en locate glibc
y comprueba la salida. Si muestra estructuras de directorios de la forma /foo/bar/glibc
o similar, entonces tienes glibc
instalado; si no, necesitas instalarlo.
Bien, ahora que hemos confirmado la presencia de un editor de texto, un compilador y la biblioteca estándar, escribamos nuestro primer código en C en Linux. Para el propósito de este artículo, vamos a crear un subdirectorio llamado ‘codes’ bajo tu directorio ‘home’, en el que almacenaremos todo nuestro código fuente.
Inicia gedit e introduce este sencillo código en C para imprimir el factorial de un número:
#include<stdio.h>int main(int argc, char **argv){ int n, i,fact=1; printf("Enter a number for which you want to find the factorial:: "); scanf("%d", &n); for(i=1;i<=n;i++) fact=fact*i; printf("Factorial of %d is :: %dn", n,fact); return 0;}
Guarda este código en el subdirectorio codes con el nombre fact.c
. Lanza tu programa shell (terminal), y ejecuta cd codes
para ir a este directorio. Una vez allí, emite el siguiente comando:
gcc factorial.c
Después de ejecutar el comando, ejecuta ls
y verás un archivo a.out
en el directorio actual. Este es el archivo ejecutable de su programa C, compilado y enlazado con las bibliotecas apropiadas. Para ejecutarlo, ejecuta (fíjate en el ./
inicial, ¡que es esencial!):
./a.outEnter a number for which you want to find the factorial:: 5Factorial of 5 is :: 120
¡Felicidades, acabas de escribir tu primer programa en C en Linux! Eso era el C normal que se escribe en DOS o Windows, ¡no hay sorpresas! Un poco más sobre este archivo a.out
: Este es el equivalente en Linux del archivo .exe que verías en DOS/Windows; es la forma ejecutable de tu código. Como ya habrás adivinado, este archivo no puede ser ejecutado en DOS o Windows, ya que está en un formato diferente.
Ahora, en lugar de tener que renombrar tu archivo ejecutable cada vez que compilas, puedes especificar el nombre del archivo de salida al compilador:
gcc -o factorial factorial.c
Intenta algunos programas más de tus clases de programación en C y estructuras de datos.
El lenguaje de programación C es un conocido libro de programación de Brian Kernighan y Dennis Ritchie, que te enseña a programar en C con un fuerte sabor a Linux. Sería una buena idea probar los ejemplos y programas de ejercicios de este libro para tener una idea de la programación en C en Linux.
Escribamos ahora nuestro primer programa en C++ en Linux. El ciclo de codificación, compilación y ejecución es muy similar al de C, excepto por el compilador que utilizamos, que es g++
. Comprueba si ya está instalado ejecutando el comando en un terminal, como hicimos para gcc
. A continuación, utiliza tu gestor de paquetes para comprobar si libstdc++
, la biblioteca estándar de C++, está instalada (si no es así, instálala). Una vez instaladas ambas, abre gedit y escribe este sencillo programa C++:
#include<iostream>#include<string>using namespace std;int main(int argc, char **argv){ string s1="Hello"; string s2="World"; cout <<s1+" " + s2 << "n"; return 0;}
Guarda este archivo como string-demo.cxx
en el subdirectorio de códigos.
Compila y ejecuta el archivo:
g++ -o string-demo string-demo.cxx./string-demo
Ejecutando el comando anterior debería aparecer lo siguiente en la terminal:
Hello World
El código C++ que ves es C++ estándar, con el .h
omitido en los archivos de cabecera. Los archivos fuente C++ utilizan convencionalmente uno de los sufijos .C
.cc
.cpp
.c++
.cp
, o .cxx
.
Escribamos ahora un sencillo programa en C++ que utilice las clases:
#include<iostream>using namespace std;class Circle{ float r; public: void init(float x) /* Inline function */ { r = x; } float area();};float Circle::area(){ return 3.14*r*r;}int main(int argc, char **argv){ float radius; Circle circle; cout << "Enter the radius of the circle:: "; cin >> radius; circle.init(radius); cout << "Area of the Circle:: "<<circle.area()<<"n"; return 0;}
Guarda el archivo en el subdirectorio de códigos como class-demo.cxx
.
Compílalo y ejecútalo:
g++ -o class-demo class-demo.cxx./class-demoEnter the radius of the circle:: 4Area of the Circle:: 50.24
Asumiendo que has podido compilar estos programas con éxito, ahora te recomendaría que siguieras adelante y escribieras, compilaras y probaras algunas de tus tareas y problemas en C/C++ utilizando gcc y g++. Si te encuentras con algún problema, eres bienvenido a enviarme un mensaje.
Programación en Java en Linux
Java es quizás el siguiente lenguaje más enseñado en las escuelas y colegios de la India después de C/C++. Lo mejor de programar en Java en Linux es que utilizas las mismas herramientas que usarías en Windows – sí, el Sun Java Development Kit.
Para instalar el JDK en Linux, descarga el instalador para Linux desde su página oficial.
Elige el archivo .bin
, y no el archivo *rpm.bin
, a menos que sepas lo que estás haciendo. (El archivo .bin
es el equivalente a .exe
en Windows). Una vez completada la descarga, en tu terminal, cd
al directorio donde se ha descargado el archivo, y utiliza los siguientes comandos:
chmod +x jdk-6u18-linux-i586.bin./jdk-6u18-linux-i586.bin
Los nombres de los archivos anteriores pueden diferir dependiendo de la versión del JDK que hayas descargado. La primera línea hace que el instalador sea ejecutable, y la segunda lo ejecuta. El instalador debería iniciarse ahora, y debería ver el «Acuerdo de licencia de código binario de Sun Microsystems, Inc. Binary Code License Agreement».
Acepte la licencia, y la extracción del JDK debería comenzar. Una vez que el instalador haya salido, debería ver un nuevo subdirectorio llamado ‘jdk1.6.0_18’ dentro del directorio actual. Si estás familiarizado con la programación Java en Windows, esto debería ser fácilmente reconocible. Dentro de este directorio está el subdirectorio bin, que tiene el compilador de Java (javac
), el intérprete de Java (java
), y otros.
Con esto, ya tenemos todo listo; vamos a escribir nuestro primer programa Java en Linux. Enciende gedit y escribe el siguiente código Java, que muestra el uso de un array de enteros:
import java.util.Random;class ArrayDemo { public static void main(String args) { int arr = new int; for(int i=0;i<10;i++) arr = (new Random()).nextInt(); for(int i=0;i<10;i++) System.out.println("Element at index " + i + "is::" + arr); }}
Guarda el código en un archivo ArrayDemo.java
, luego compílalo y ejecútalo de la siguiente manera:
/home/amit/jdk1.6.0_18/bin/javac ArrayDemo.java/home/amit/jdk1.6.0_18/bin/java ArrayDemo
Nota los dos primeros comandos, donde he dado la ruta completa a la ubicación de los ejecutables javac y java. Dependiendo de dónde hayas extraído el JDK, tu ruta variará.
Ejecutando el segundo comando debería salir lo siguiente en tu terminal:
Element at index 0is:: 480763582Element at index 1is:: -1644219394Element at index 2is:: -67518401Element at index 3is:: 619258385Element at index 4is:: 810878662Element at index 5is:: 1055578962Element at index 6is:: 1754667714Element at index 7is:: 503295725Element at index 8is:: 1129666934Element at index 9is:: 1084281888
Así es como puedes compilar, ejecutar, probar y depurar tus programas Java.
OpenJDK
Un artículo sobre programación Java en una revista de código abierto estaría incompleto sin hablar de OpenJDK. Es bueno que conozcas este proyecto. Como ya habrás adivinado, se trata de una implementación de código abierto con licencia GPL de Java Standard Edition – es decir, el código fuente del JDK con el que estás tan familiarizado, ahora también está disponible para tu escrutinio, en caso de que no te guste algo del JDK actual.
Entonces, ¿es este un Java diferente? No – se escribe el mismo código Java. Puedes instalar OpenJDK desde el gestor de paquetes de tu distribución de Linux (puede venir preinstalado con algunas distribuciones). Las instrucciones de instalación están disponibles aquí.
Cómo lidiar con los aspectos prácticos
Debido a varias razones, el despliegue de Linux en todo el laboratorio puede no ser siempre posible. En tales casos, es una buena idea tener una sola máquina Linux en el laboratorio, que actúe como servidor SSH; se puede instalar el software cliente SSH necesario en otros sistemas operativos, lo que permitirá conectarse a la máquina Linux de forma remota.
Esta máquina debe tener una configuración relativamente buena, dependiendo de cuántos estudiantes la utilizarán para su codificación y compilación – una CPU de doble o cuádruple núcleo con 4 GB de RAM y un disco duro de al menos 320 GB es una buena idea. Para Windows, Putty es un cliente SSH muy utilizado. Si se escribe el código en Windows y se copia a la máquina Linux para compilarlo y ejecutarlo, también será necesario descargar el programa pscp
del sitio, que permite copiar archivos de la máquina local al servidor SSH de Linux.
Si necesita que una sesión GUI del servidor Linux sea accesible en la máquina Windows (por ejemplo, mientras se hace la programación de la GUI) entonces investigue el servidor OpenNX (que debe ser instalado en la máquina del servidor Linux) y el cliente NoMachine NX para Windows. Una máquina con la configuración indicada anteriormente debería soportar unas 10 sesiones de usuario antes de empezar a ralentizarse. Afinar el gestor de escritorio (utilizar uno ligero como LXDE o XFCE) y utilizar editores más ligeros como GVim para escribir código, es un buen comienzo.
Otra opción (que no necesita una máquina servidor Linux dedicada) es instalar Linux en una máquina virtual en su escritorio. Esto también podría resultar útil en un ordenador doméstico. VirtualBox es un software de virtualización que, cuando se instala en su sistema Windows, le permitirá crear una máquina virtual, dentro de la cual puede instalar Linux sin interrumpir su instalación de Windows. Por supuesto, necesitarás algo de espacio libre en el disco (8 GB o más) para el archivo de disco de la máquina virtual. En este caso, no es necesario grabar la ISO de instalación de Linux en un CD: basta con indicar a VirtualBox que utilice el archivo de imagen ISO como un disco insertado en la unidad de CD-ROM de la máquina virtual.
También es una buena manera de practicar la instalación de Linux, y de ver lo fácil que puede ser. Para Ubuntu, en particular, existe Wubi que permite instalar (y desinstalar) Ubuntu como cualquier otra aplicación de Windows, de forma sencilla y segura, «con un solo clic». Los archivos de Ubuntu se almacenan en una única carpeta en su unidad de Windows, y se añade una opción para arrancar Ubuntu en el menú del cargador de arranque de Windows.
Sin embargo, el acceso al disco duro es ligeramente más lento que la instalación en una partición dedicada. Si su unidad de Windows está muy fragmentada, el rendimiento degenerará aún más. La hibernación no es compatible con Wubi. Además, el sistema de archivos Wubi es más vulnerable a los reinicios duros (apagar la energía) y a los fallos de alimentación que una instalación normal en una partición dedicada, que proporciona un sistema de archivos más robusto que puede tolerar mejor tales eventos.
En general, la programación en Linux también requerirá un nivel decente de familiaridad en lo que respecta a trabajar con los comandos del shell. Familiarícese con el trabajo con el shell. Intenta minimizar el uso del ratón 🙂
Usando tu IDE favorito en Linux
Si has estado usando algún IDE para tus necesidades de desarrollo, debería ser una gran noticia que dos IDEs muy populares – NetBeans y Eclipse – tengan también versiones para Linux, y ambos soportan el desarrollo en C, C++ y Java. Para las distribuciones de Linux basadas en GNOME, Anjuta DevStudio es otro potente IDE para C, C++ y Java (y otros lenguajes también). Los tres deberían estar disponibles en el gestor de paquetes de tu distribución.
Para concluir este artículo, me gustaría instarte a que hagas un esfuerzo honesto por abrazar Linux para programar. Es un mundo mucho mejor en el que estar. Me encantaría atender cualquier duda/preocupación/comentario/sugerencia que tengáis, respecto a este artículo.
Recursos
- Funcionalidad similar a la degraphics.h usando GCC
- Colección de compiladores de GNU
- De Brian W. Kernighan y Dennis M. Ritchie, The C Programming Language
- Bjarne Stroustrup, The C++ Programming Language
- Neil Matthew, Richard Stones, Beginning Linux Programming
- StackOverflow es un foro de la comunidad donde puedes publicar tus preguntas relacionadas con la programación. Es neutral en cuanto a idiomas, lo que lo hace muy atractivo.
- Una introducción básica a SSH
- VirtualBox. Manual de usuario.
- yolinux.com es un buen recurso para información general sobre Linux.