viernes, 14 de noviembre de 2008

Aprende Linux

Linux es otro conocimiento importante para agregar a tu Currículum Vitae, en el ámbito laboral te servirá para poder manejarte en un servidor, pero si en realidad te gusta sistemas, encontraras en el un juguete con el cual hacer lo que te plazca.


¿Que es Linux?

Linux es un sistema operativo (OS) creado por Linus Torvalds cerca del año 1991, que junto con los programas del proyecto GNU, nos permiten disfrutar de un UNIX totalmente gratuito y de código abierto.

Comenzó como un juguete para aficionados a la informática, y aun lo es, aunque de a poco fue desplazando a los demás UNIX comerciales de la época, las empresas lo utilizaban y utilizan como sistema operativo de sus servidores, los aficionados como su OS personal, algunas empresas incluso lo utilizan como OS de escritorio.

En un pasado la compatibilidad de las aplicaciones era lo importante, es decir que era importante que sistema operativo utilizaras, ya que la mayoría de los programas estaban escritos para Microsoft Windows y si usabas Linux, un UNIX o un OS de Apple, quedabas afuera.

Hoy en día ha cambiado, ya que todo es el mundo web, lo importante es el navegador (podemos usar el Firefox en Linux) y en cierta medida las aplicaciones de oficina (también podemos usar el Open Office en Linux, que permite leer y guardar archivos en el formato de Microsoft Office). Y los drivers del hardware que compremos, como así muchos otros programas ya soportan Linux.


¿Como Empiezo?

Lo principal es instalarlo, lo primero es elegir que distribución utilizar, una distribución (o distro) es simplemente un individuo o una empresa que tomo el Kernel de Linux (es decir la base del sistema operativo), aplicaciones GNU, otras aplicaciones open source, librerías y el sistema de ventanas X (la aplicación que se utiliza en UNIX para mostrar una interfaz gráfica de escritorio) y los grabo en un CD.

La ventaja de una distro es que alguien se ha tomado el trabajo de hacer eso por vos, trabajo que no es simple ya que juntar y compilar las diferentes versiones de cada aplicación es todo un desafío, la otra ventaja es que al ser la base de usuarios grande, cualquier problemas que tengas es seguro que alguien lo ha tenido y ya este solucionado.

Por eso, si sale una nueva versión de alguna aplicación GNU y quieres usarla en tu Linux, la mejor opción es bajarte una actualización de la distro que uses, ya que esa aplicación ya estará probada por mas gente y los problemas de compatibilidad (que siempre ocurren al cambiar una versión) ya resueltos.

En cuanto a cual elegir, hay muchas, cuando seas experto elegirás la mas conveniente a tus gustos, para un principiante conviene utilizar las mas usadas (a mayor base de usuarios, menos problemas, en teoría), entre ellas:

  • Debian: Distribución muy popular, aunque tal vez no la mejor para un principiante.
  • Red Hat: Otra también muy popular, pero es paga (Linux y GNU son gratis, pero también es valido, es decir legal según la licencia, empaquetarlos en una distribución y cobrar por ello, y eso es lo que hiso esta gente).
  • Fedora/CentOS: Estas dos distros (gratuitas) están basadas en Red Hat (que es comercial), la diferencia esta en que el soporte en estas lo da una comunidad de usuarios. CentOS es estable y 100% compatible (hablando de los binarios) con la versión comercial de Red Hat. El objetivo de Fedora es tener lo ultimo, por lo que puede no ser tan estable, lo que es ideal para aficionados, pero un problema para una empresa.
  • Ubuntu: Distro basada en Debian, relativamente nueva (el primer release fue en el 2004), y también popular. Esta distro de focaliza en la usabilidad y es muy usado para maquinas de escritorio, además de servidores.
  • Slackware: Una gran distro, de las viejas, simple y muy buena para aficionados, aunque creo que dificil para un novato.
Entonces para aprender pueden conseguirse un CD de CentOS (para evitar problemas con Fedora) o uno de Ubuntu.


¿Como lo instalo?

Ya saben que distro usar, el problema ahora es, ¿Como los instalo?, hay varias opciones:

  • En una maquina nueva: Esta puede no ser buena opción, no todo el mundo tiene dinero y espacio para una nueva maquina donde probar este sistema operativo. Si no tienes problema con esto, la instalación es simple, pones el CD en la lectora y sigues los pasos.
  • En una partición: Para alguien nuevo en esto, especialmente si también es nuevo en sistemas, esto puede ser traumático, ya que a veces ni se sabe que es una partición. Una partición es una división lógica de tu disco rígido, probablemente tengas solo una, y esta contiene tu Windows. Es la manera que yo instale el Linux por primera vez, fue divertido, el método consistía en utilizar un programa llamado FIPS.EXE con el cual achicaba una partición de MS-DOS y así podía crear una o mas particiones nuevas para mi Linux. Luego, al igual que con una maquina nueva, podía bootear (arrancar) con el CD y seguir los pasos de instalación, o creabas (lo mas común) dos diskettes de booteo para poder comenzar.
  • Usar VMWare: Esto es lo mas fácil para un principiante, y también muy útil no solo para aprender. El método consiste en instalar el VMWare Player, que es un programa que corre una imagen de disco como si fuera una nueva PC, es decir una PC virtual dentro de tu PC real. Con las computadoras actuales esta emulación casi no se nota (es decir no se ve una perdida de performance), y en cuanto a la estabilidad hoy en día también es casi un 100% estable., además el VMWare Player es gratuito. De la misma pagina de VMWare puedes bajarte imagenes de disco hechas por otras personas, allí tienes cientos de distros de las versiones que quieras. ¡Utilizar Linux con esta opción es tan simple como instalar el player, la imagen y ejecutarla!

Si eliges una de las opciones que requiere instalación (algo que también recomiendo ya que ayuda a que aprendas), hoy en día no tendrás mayores problemas ya que Linux se instala fácilmente, en el pasado, cada paso requería haber leído documentación y entender mucho mas.



X Windows

Al finalizar la instalación estarás en un entorno gráfico parecido al Windows, como ya dijimos es el X Windows System, un programa de ventanas que es estándar en los UNIX, para interfaces gráficas.

Sobre X existen innumerables sistemas de manejo de ventanas (o Gestor de Ventanas). En Windows por lo general minimizamos o maximizamos las ventanas, las movemos, tenemos una barra de tareas, etc, en UNIX solo tenemos el protocolo para comunicarnos con el servidor X, todo el trabajos de maximizar, mover, etc es hecho por otro programa, el gestor de ventanas.

En Linux tenemos varios gestores, como GNOME o KDE entre los mas usados y conocidos, sobre cual usar, eso si lo dejo a su elección.


El Shell

Si utilizaran el Linux solo como un sistema de escritorio, como Windows, entonces, tal vez no es necesario continuar aprendiendo. Pero el verdadero corazón esta en utilizar el shell (en Linux el mas usado es el Bash) y escribir comandos, ya que esto es lo que vale, nadie te contratara por saber GNOME, pero si por saberte manejar en un shell.

Los servidores se acceden generalmente por SSH y todo se maneja con un shell, hay programas en varios UNIX y Linux (como en GNOME y KDE) para la administración de servidores a través de herramientas gráficas en X, actualmente la tendencia sigue siendo o usar el shell o una interfaz web, sea lo que fuere, el shell se seguirá utilizando.


Documentación

El siguiente paso es leer la documentación para aprender. En Linux existen tres fuentes de información tradicionalmente usadas (todo aficionado que aprendió sobre Linux las han utilizado):

  • Linux Guides: Son libros o guias sobre diferentes programas o temas relacionados a Linux.
  • HOWTOs: Los famosos HOWTOs (del ingles "how to"= "como"), también son guias para aprender.
  • Man pages: En Linux (como en cualquier UNIX), en el shell pueden escribir "man" (por "manual") seguido por el nombre del comando del cual quieren saber, y tendrán allí la pagina de ayuda o "manual". No es una pagina amigable (para los acostumbrados a los entornos gráficos y web), pero es lo tradicional en UNIX.

Comandos

A continuación una breve reseña de comandos de Linux (también de UNIX) para que un principiante pueda aprender y manejarse rápidamente en este sistema operativo:

(muchos de los comandos son de dos o tres letras, esto es así ya que en la época del primer UNIX, en vez de pantallas, se utilizaban teletipos, que eran rollos de papel, por lo que escribir muchos caracteres significaba mas gasto de tiempo, papel, tinta, etc).

  • ls: Tal vez el comando mas utilizado, lo que hace es listar el contenido de una carpeta (como cuando en Windows haces clic en una carpeta y vez que archivos contiene).
  • cp: Copia archivos.
  • mv: Mueve archivos (entre carpetas) o los renombra.
  • rm: Elimina un archivo.
  • cat: Muestra el contenido de un archivo
  • man: Muestra el manual o página de ayuda de un comando, por ejemplo: man ls
  • chmod: Cambia los permisos de acceso a un archivo.
  • chown: Cambia el "owner" (dueño) de un archivo.
  • more: Muestra un archivo por paginas, también en Linux se utiliza el comando less (obvia referencia al more) que hace lo mismo, pero permite volver a una pagina anterior.
  • mkdir: Crea un nuevo directorio (carpeta).
  • cd: Cambia de directorio.
  • pwd: Muestra el directorio actual.
  • vi: El vi es uno de los editores de texto de UNIX mas utilizados (también lo es el emacs).
  • grep: Busca un patrón de texto en el o los archivos especificados.
  • bash: Ejecuta un nuevo shell, el bash (Bourne Again Shell).
  • gcc: El compilador de lenguaje C (originalmente cc es el compilador C de un UNIX, gcc es por GNU C Compiler).
  • clear: Limpia la pantalla.
  • ps: Muestra la lista de procesos.
  • date: Muestra la fecha.
  • time: Muestra la hora.

Recuerda también que Linux (y UNIX) es case sensitive, es decir tanto en los comandos como en los nombres de archivos hay distinción entre mayúsculas y minúsculas, escribir "LS" no es lo mismo que "ls".

La lista de comandos, obviamente es mucho mas amplia, y depende de que paquetes de software estén instalados, algunos comandos son del shell (como el echo, set, history, exit, cd, etc), es decir no son binarios ejecutables sino que forman parte del interprete del shell que utilicemos. Y los comandos básicos están en los paquetes Fileutils, Shellutils, Textutils (ahora unidos en un paquete llamado Coreutils).


Jerarquía de directorios


También es útil conocer la estructura de directorios de un Linux (para saber donde esta cada cosa). En Linux hay un estándar que se respeta entre las diferentes distros. A continuación, una breve reseña:

/: El directorio raíz.
/bin: Binarios ejecutables esenciales, como ls, cp, cat, etc.
/boot: Archivos de arranque.
/dev: Dispositivos (en Linux puedes acceder por ejemplo a la memoria o a un disco rígido, como si fuera un archivo).
/etc: Archivos de configuración.
/home: Directorio home de cada usuario del sistema.
/lib: Librerías.
/mnt: Directorio donde montar sistemas de archivos.
/opt: Aquí se instalan paquetes opcionales.
/proc: Es un directorio virtual, provisto por el kernel de Linux, que provee como archivos de texto datos internos sobre el estado de procesos, sobre la red, u otro tipo de información del sistema.
/root: Archivo home del usuario root (root es el usuario con privilegios de administrador en un Linux o UNIX).
/sbin: Binarios esenciales, generalemente utilizados por un administrador.
/tmp: Archivos temporales.
/usr: Este directorio provee una segunda jerarquía de directorios.
/usr/bin: Binarios ejecutables para todos los usuarios (como el compilador de C).
/usr/include: Archivos "headers" del lenguaje C.
/usr/lib: Librerías.
/usr/sbin: Mas binarios ejecutables, generalmente servicios, como el servidor de FTP.
/usr/src: Código fuente.
/usr/X11R6: Todos los archivos del sistema de ventanas X (aquí se repite también una jerarquía /usr/X11R6/bin, /lib, etc).
/usr/local: Una tercera jerarquía, contiene datos y programas específicos a la maquina donde uno se encuentre.
/var: Archivos variables, como archivos de log, email, y demás archivos temporales.




Otra opción interesante y útil

Instalar Linux en una nueva partición puede no ser sencillo para un novato, y utilizar el VMWare puede no ser tan práctico para el uso diario. Pero no aun hay otra opción, utilizar Cygwin.

Cygwin es, en simples palabras, una serie de DLLs (unas librerías de Windows) que emulan los llamados a sistema de Linux, esto significa que provee para cada función de Linux su equivalente en Windows. Además de estas librerías, contiene casi todos los programas que existen en Linux, pero compilados de nuevo en Windows (es decir, son los mismos fuentes que Linux, con algunas modificaciones).

Lo bueno de usar Cygwin es que contiene casi exactamente lo mismo que utilizas en Linux, pero en Windows, hasta tiene un ¡Servidor X! Puedes abrir un shell en Windows, y ejecutar cualquier comando que ejecutas en Linux! Además es gratuito.

Obviamente al estar corriendo bajo Windows, lo que no tienes es acceso a un kernel de Linux (por ejemplo no puedes programar módulos de kernel o LKMs), además de otras diferencias mínimas.


Conclusión

En conclusión Linux es un gran sistema operativo, gratis e ideal para aficionados, ya que lo que provee a un Nerd es:


¡Diversión!


Tienen feedback? Escribanlos en los comentarios.

jueves, 13 de noviembre de 2008

¿Como aprendo Java?

Trabajar en sistemas a menudo significa tener un mejor sueldo que en otras profesiones (aunque el estrés te puede dejar pelado), dentro de sistemas, programar en Java (o ser un profesional en SAP) puede también significar tener un sueldo aun mayor.

Por eso, muchos profesionales que programan en PHP, .NET u otro lenguaje, a menudo preguntan ¿Como aprendo Java?

A la hora de aprender, no se sabe por donde empezar, y libros hay muchos, en mi opinión lo primero es leer el tutorial de Java de Sun (Sun es la empresa que creo Java):

http://java.sun.com/docs/books/tutorial/

Este tutorial es un libro online gratis, que existe desde la época donde se creo el lenguaje (cerca del 95/96). Pueden aprender el lenguaje rápidamente, no hace falta leerse todo el libro, lean a continuación de que se trata cada sección y cuales deben leer:

  • Getting Started: Es una introducción a Java, mas o menos cortita, leanla con detenimiento.
  • Learning the Java Language: Esta sección explica el lenguaje mas a fondo, también deben leerla completa, es importante ya que explica conceptos básicos, como la programación orientada a objetos (POO o OOP en ingles, y Java es orientado a objetos) y la sintaxis del lenguaje.
  • Essential Java Classes: Explica las clases base del lenguaje (algo así como el API básico), esto pueden leerlo todo, o prestarle mas atención solo a la parte de Excepciones e I/O básico. La parte de concurrencia y expresiones regulares (aunque es muy usado) no es tan necesario para un principiante. Finalmente lean con detenimiento la parte final que explica las variables de entorno (PATH y CLASSPATH) ya que es donde un novato se encuentra con mayores problemas.
  • Collections: Explica las clases y conceptos sobre como manejar en Java, estructuras de datos, si tienen tiempo leanla con detenimiento, mas adelante necesitaran tener a lado la referencia (explicare mas de esto adelante), ya que es algo que siempre se utiliza al programar.
  • Swing: Swing es para programar interfaces de usuario para aplicaciones de escritorio, la mayoría de los trabajos en Java es para aplicaciones web, así que pueden saltearse por completo esta sección.
  • Deployment: De esta sección, lo importante es que aprendan el concepto de JAR (Java ARchive) que es un archivo ZIP que contiene el programa que hicieron en Java, compilado.
  • Preparation for Java Programming Language Certification: Las certificaciones son examenes en los cuales se prueba que ustedes conocen el lenguaje, básicamente sirven para certificar que saben y así obtener un empleo, o cobrar mas, si están interesados, lean esta sección.
  • Custom Networking: Pueden saltearse esta sección.
  • The Extension Mechanism: También salteense esta sección.
  • Full-Screen Exclusive Mode API: Esto también salteenlo, es algo de bajo nivel, que sirve para hacer juegos de escritorio.
  • Generics: Esto es muy utilizado, aunque este capitulo es mas avanzado, leanlo.
  • Internationalization: Aunque no es una sección muy importante, leanla, ya que como vivimos en Argentina, probablemente tengamos que modificar aplicaciones Java para que utilicen el formato de fecha y monedas local.
  • JavaBeans: Todo lo que es Java Beans es muy importante, leanlo, ya que es bueno saber de esto cuando aprendan sobre J2EE (mas sobre J2EE adelante).
  • JDBC Database Access: Este es el API para acceder a la base de datos, es necesario aprenderlo.
  • JMX: Pueden leerlo o no, se utiliza en algunos servidores de aplicación (mas sobre esto abajo).
  • JNDI: También conviene saber sobre JNDI para cuando utilicen J2EE.
  • RMI: API para invocar funcionalidad remotamente, también utilizado en J2EE, así que leanlo.
  • Reflection: Es una sección un tanto avanzada, pueden saltearla (aunque es bueno que la lean en un futuro).
  • Security: Pueden saltearla.
  • Sound: Salteenla.
  • 2D Graphics: Otra mas a saltear.
Como he dicho mas arriba, la mayoría de los trabajos en Java son para la web, así que todo lo que es sonido, imagenes y todo lo que sea para aplicaciones de escritorio, pueden saltearselo.


¡Ya aprendí todo rapidísimo! ¿Y ahora como sigo?

Una vez que tengan todo en su cabeza, sigue hacer sus primeros programas, para ello, lo esencial es tener instalado el JDK, que es la maquina virtual donde sus programas Java correrán, y además contiene el API.

El JDK también esta en la pagina de Sun:

http://java.sun.com/javase/downloads/index.jsp

Hoy en día bajense la versión 6, allí tendrán el JDK y el JRE. El JRE es un interprete, sirve solo para ejecutar programas Java, si ustedes serán programadores conviene que se bajen el JDK (que contiene el compilador y el runtime, es decir, también trae el JRE).

Cuando tengan el compilador y el interprete, necesitaran un IDE, que le hará el desarrollo mucho mas fácil (hay gente que utiliza su editor de texto favorito, aunque esto no es recomendable para un principiante).

Hay muchos IDEs de Java, en mi opinión los mas utilizados son el NetBeans (de Sun, que también se pueden bajar de la pagina de downloads que puse arriba) y el Eclipse (muy utilizado para crear IDEs para también otros lenguajes y entornos). ¿Cual elegir? quizá no es bueno influir en ello, cada uno tiene sus gustos y existen varios IDEs, yo prefiero el Eclipse, aunque si son principiantes, les recomiendo el NetBeans, ya que tienen todo integrado y solucionado.


J2EE

Ya saben programar en Java e hicieron lindos programas, ahora para conseguir trabajo, les piden saber J2EE, termino el cual he nombrado anteriormente.

J2EE significa Java Enterprise Edition, es una plataforma para desarrollar aplicaciones que correrán en un servidor. En simples palabras, es un conjunto de APIs para crear aplicaciones web que accederán a una base de datos, de manera segura, multi-capa, distribuida, tolerante a fallos, etc.

Lo primero es aprender, por eso, a leerse el tutorial de J2EE de Sun:

http://java.sun.com/j2ee/1.4/docs/tutorial/doc/

Aquí también hay varias secciones que se podrían saltear, como la del XML y APIs para manejo de XML, DOM, XSLT, aunque es necesario saber esos conceptos, ya que hoy en día se utiliza esto se utiliza para la comunicación entre servidores por medio de Web Services.

Luego es esencial leer la parte de servlets (aplicaciones web hechas en Java) y JSP (paginas HTML con código java incrustado).

Las secciones sobre EJB (Enterprise Java Beans) son esenciales, ya que junto con la parte web, es el corazón de J2EE.


El servidor de aplicaciones

Además del JDK, para correr aplicaciones web hechas en Java, es necesario utilizar un servidor de aplicaciones. Aquí las opciones son varias, paso a detallar:

  • Tomcat: Es un servidor muy utilizado para aplicaciones web Java, es relativamente rápido, y utiliza pocos recursos. Pero es solo para aplicaciones web, no contiene la parte Enterprise JavaBeans de J2EE.
  • GlassFish: Es un nuevo (desde el 2005) servidor de aplicaciones de Sun para J2EE que esta ganando popularidad.
  • JBoss: Otro servidor J2EE muy popular.
  • OC4J: U Oracle Application Server 10g, es el servidor J2EE de Oracle, como esta compro a BEA Systems, es mejor utilizar el WebLogic.
  • WebLogic: U Oracle WebLogic Server, otro servidor J2EE de BEA Systems, que fue adquirida por Oracle. Servidor robusto, muy utilizado y comercial.
  • WAS: O WebSphere Application Server, es el servidor J2EE de IBM, también robusto y comercial.
Y hay otros, la elección dependerá de varios factores (como dinero para servidores, ya que algunos necesitan muchos recursos, como dinero para licencias, algunos son muy caros, otros gratuitos).

Para aprender, si utilizan Netbeans, tendrán Tomcat y GlassFish para todo lo que es desarrollo J2EE, solo fijense de bajarse la versión correcta de http://www.netbeans.org/downloads/index.html.


¿Que mas necesito saber?

J2EE es muy lindo, pero necesita muchos recursos y no es tan rápido, especialmente para la parte de Entity Beans (Beans de Entidad), por lo que algunos arquitectos de sistemas han tenido que implementar otras soluciones (muchas veces al ver la realidad). Entre ellas tenemos:

  • Acceso directo a la base de datos: Es decir, hacer aplicaciones web que solo utilizan Tomcat (el contenedor web) y utilizan el API JDBC para ejecutar SQL para acceder a la base de datos. Es simple, rápido, y se utilizan pocos recursos.
  • Hibernate: Es una herramienta para mapear objetos java con tablas en la base de datos, siempre fue una alternativa a los beans de entidad, aunque no mas fácil de utilizar.
  • Spring: Otra herramienta que es una alternativa a los EJBs.

Personalmente, utilizar Tomcat con JDBC ha solucionado todos mis problemas, aunque esto es tema de debate, lo dejo al criterio de cada uno.


Jakarta

No solo para la programacion J2EE, sino para todo en general, el proyecto Jakarta (otro proyecto de Apache) es un conjunto de librerias y herramientas para Java para solucionar todo tipo de problemas.

De las librerías, la mas utilizada es el Commons, que es incluida en casi todos los proyectos.

Luego el Maven, que es una herramienta de manejo de proyectos, que se puede utilizar para compilar y desplegar aplicaciones en un servidor, entre otros usos.

Dentro de Jakarta, también tenemos a Tomcat, y a Struts, una herramienta para el desarrollo de aplicaciones web, muy utilizado, que ayuda a implementar el patrón MVC (que separa el modelo de datos de la parte de presentación y control de una aplicación web). Una nueva alternativa a Struts es el JSF (Java Server Faces) de Sun.


Patrones de diseño

Mas arriba leímos sobre MVC, en Java (como también en otras tecnologías) además de J2EE, se utilizan mucho los patrones de diseño, que son soluciones a problemas comunes de diseño.

Una aplicación contiene muchos problemas a resolver, y por lo general un arquitecto de software utiliza los patrones en el diseño de cada solución, por ello, conviene tener el concepto de los patrones mas utilizados.

Para J2EE, se utilizan los patrones de Sun:

http://java.sun.com/blueprints/patterns/
http://java.sun.com/blueprints/corej2eepatterns/Patterns/

La mayoría de ellos son muy utilizados, paso a detallar algunos:

  • Transfer Object: Comúnmente también llamado VO (Value Object), se trata de un objeto java que encapsula los atributos de una entidad, por ejemplo, si tenemos una entidad Cliente con atributos: nombre, dirección, teléfono, edad, etc, entonces el value object representara a ese objeto. Los VO generalmente se llenan con datos en el código que accede a la base de datos y después se transfiere a la capa de presentación para mostrarlo por ejemplo en una pagina web.
  • DAO: Data Access Object, desde la capa de presentación, podríamos necesitar los datos de los clientes, si accedemos a la base de datos directamente tendríamos código de base de datos en la capa de presentación, lo que dificulta hacer cambios, entonces al utilizar un DAO, lo que hacemos es encapsular en este todo el acceso a base de datos, por ejemplo, un DAO puede tener un método llamado getClientes() que revolvería una lista de clientes encapsulados en Value Objects de Clientes.
  • Front Controller: Se trata de una clase Java que centraliza todos los llamados web a una aplicación.
  • Service Locator: Mas atrás en este articulo dije que había que leer la sección JNDI, ya que para las aplicaciones J2EE, es lo que se utiliza para localizar un servicio dentro de una aplicación distribuida. Un service locator, centraliza el código necesario para localizar por ejemplo a un Session Bean u otro tipo de EJB o recurso.

Sun provee de una aplicación ejemplo, llamada Petstore (viene con el código fuente), que implementa todos los patrones de diseño J2EE y es un muy buen ejemplo para aprender.


Base de datos


Obviamente, también necesitaran una base de datos para probar los ejemplos, MySQL es una buena opción (empresa que también fue adquirida por Sun), pueden bajársela del sitio de MySQL o también junto al NetBeans.


UML

El UML o Lenguaje Unificado de Modelado (Unified Modeling Language en ingles) es un lenguaje gráfico de modelado para sistemas, que utilizan algunos analistas para diseñar un sistema. Los programadores toman ese diseño y lo vuelcan en un sistema real (es decir escriben el código, por ejemplo en Java).

Algunas empresas no lo utilizan, algunos artículos por la red dicen que lleva a problemas (por experiencia se que es así), aunque generalmente se piden conocimientos de este lenguaje para los trabajos, por lo que conviene aprenderlo (aunque solo se dediquen a programar).

Para aprenderlo hay infinidad de tutoriales, yo prefiero leer directamente la referencia oficial del lenguaje.

En cuanto al software, pueden utilizar el Rational Rose de IBM (pago, pero uno de los mas usados), el Enterprise Architect (también pago), el modulo UML que viene con el NetBeans o muchos otros mas.


Documentación y Javadoc

El Javadoc es una de las herramientas del JDK para generar documentación en base a los comentarios del código fuente. Pero esto seguramente lo leyeron en el tutorial, lo importante es que en Java la documentación se ve en HTML y es generada por Javadoc.

Nadie puede tener toda la documentación del API en la cabeza, por lo que es bueno tener en la sección de Favoritos de su navegador el link al Javadoc del API, para ser usado a diario.


Sitios de utilidad

Frecuentemente utilizaran Google para buscar cualquier problema, y frecuentemente caerán en sitios de Sun, o en el Java Glossary (Es un sitio de la A hasta la Z de Java, muy recomendado para leer).


Conclusión

Creo que he cubierto todas las bases para que usted como programador PHP u de otro lenguaje, aprenda Java rápidamente y tenga "punteros" rápidos a todo lo que maneja un programador Java.

Tienen algún feedback, preguntas frecuentes? dejen todo en los comentarios, son bienvenidos!

viernes, 24 de octubre de 2008

¿Donde comprar hardware en Argentina?

Lo mejor es ir al microcentro porteño a las Galerías Jardín (Florida 537), allí esta lleno de locales de computación, con mucha variedad y buenos precios.

Datasoft (que es uno de los locales de esa galería), fue siempre el local mas famoso, de mejor precio y variedad, pero hoy en día la galería esta llena de locales y también de precio similar o mas bajo.

Otra opción es comprar en algún sitio de subastas online como Mercado Libre, DeRemate, o Mas Oportunidades, a vendedores con buena calificación, esos sitios pueden servir como un termómetro para saber cuanto cuesta alguna placa de video en especial, memoria, un micro, etc.

Si conocen algún negocio o galería donde se consiga buen precio y variedad, escriban un comentario!

miércoles, 22 de octubre de 2008

Sitios de busqueda laboral

Aqui dejo una lista de sitios de busqueda laboral informatica en Argentina:

El IT en Argentina del 99 a la actualidad

El "boom" Dot-Com y el Y2K.




En Argentina también se vivió el famoso "boom" de las empresas punto COM, durante el gobierno de De La Rua se seguían acentuando los problemas económicos, pero el sector informático recibió un tremendo impulso debido a este "boom" y al Y2K.


Las empresas y particulares invertían dinero en poner oficinas, tener una idea, comprar un dominio ".COM" para esa idea, contratar programadores, diseñadores gráficos y luego buscar inversores o compradores de la empresa. Esto y la inversión para solucionar los problemas del Y2K generaron una gran demanda de programadores y también la suba de sueldos a valores astronómicos para este país (un programador PHP podía cobrar en esa época fácilmente 4000 o 5000 pesos, que eran equivalentes a dolares antes del 2001).


Esto provoco mas rotación de trabajos, el ingreso de mas gente a este mercado laboral, mejores condiciones de contratación (relación de dependencia en vez de trabajo en negro) y el uso de acciones de la empresa como incentivo. La idea de la época era que al tener las acciones de una empresa que se vendería a millones de dolares uno se haría rico. Por lo que se trabajaba al extremo como si realmente se ganaran millones (aunque algunas empresas tenían baja productividad por el uso masivo de programas como Napster).


Pero la verdad fue otra, como toda burbuja, esta se desinflo, muchas punto COM no fueron compradas, las acciones no valían nada y hubo despidos.


Post-caída


A pesar de la caída de la burbuja, el mercado IT no estaba en la ruina, los sueldos aunque mas bajos, no eran tan bajos como la época pre-dot-com, un programador web que supiera Java podía ganar desde 2000 a 3000 pesos por mes. Debido a la crisis económica Argentina de la época, mucha gente era contratada y debía pagar Monotributo (que es una manera simplificada de pagar impuestos y ser un trabajador autónomo) en vez de estar en relación de dependencia.


El Monotributo ya se utilizaba en la época Dot-Com (debido a los altos sueldos, las cargas sociales eran altas si se tomaba al programador como empleado). Un monotributista no tenia indemnización si era despedido, ni otras ventajas de un empleado (como el aguinaldo, y en algunos casos, sin vacaciones pagas). El incentivo de la época, ya no eran las acciones, sino tener un sueldo relativamente mas alto que otras profesiones.


Otro problema de la época era la contratación por medio de consultoras, en vez de una contratación directa de la empresa donde se prestaba el servicio. Esto no era mas barato para
la empresa, ya que las consultoras cobraban una comisión por cada empleado.


Crisis del 2001


En el final del 2001, se desato una de las peores crisis del país, se entro en default (no se podía pagar la deuda externa), se devaluó el peso, que paso de estar uno a uno con el dolar a 2:1, luego a 3:1 y hasta 4:1, en momentos donde por la incertidumbre la gente compraba dolares (luego se estableció a aproximadamente 3:1 hasta el día de hoy) y se estableció un "corralito" bancario (debido a la fuga de depósitos) y la pesificación de depósitos y plazos fijos.


Estos problemas provocaron despidos masivos y grandes problemas para pagar sueldos, en las empresas de sistemas que conocí, prácticamente casi todos los contratados (monotributistas o contratados a través de consultoras) fueron despedidos, sin indemnización.


Post Crisis (2002)


Luego de la crisis comenzó un cambio por el cual se recupero el empleo, debido a la devaluación y el desempleo los sueldos eran muy bajos en comparación al resto del mundo (en pesos se cobraba menos o lo mismo que en la crisis del 2001). Empresas extranjeras y locales comenzaron a instalar "Software Factories", que eran oficinas llenas de empleados produciendo software de exportación (offshore), por la devaluación, se podía cobrar en dolares y pagar sueldos en pesos.


Algunas empresas comenzaron a utilizar la contratación directa y en relación de dependencia como incentivo para atraer empleados, aunque en otras, las consultoras se siguieron utilizando.


El Monotributo se uso mucho menos, tal vez porque luego de la crisis y los despidos, se produjeron muchos juicios por indemnizaciones que en general fueron resueltos a favor de los empleados (con montos muy grandes).


Además de la industria de exportación de software, otro sector que creció exponencialmente fue el del hosting (alojamiento de paginas web), debido a la devaluación, casi todo aquel que tenia paginas alojadas en el extranjero, las repatrio a empresas locales que mantuvieron su valor en pesos. Las PyMES necesitan presencia web, pero lo importante para la gente de sistemas es que muchos programadores compran dominios y arman paginas de proyectos propios como una manera de tener un ingreso extra o tener una futura empresa propia.


2004 a 2008


Desde el 2004, debido a la demanda de programadores para proyectos offshore, los sueldos de sistemas se han duplicado y hasta triplicado, un programado Java cobraba en el 2004 desde 2000 a 3500 pesos, desde esa época los valores se incrementaron hasta 4000, 4500, 5000, y hoy en día hay sueldos de 6000 y mas.


Aun existen consultoras, aunque algunas solo se dedican a conseguir un empleado a empresas, para que estas lo tomen en relación de dependencia.


Hoy en día también se ofrecen sueldos extra (aparte del aguinaldo), bonos por buena performance u objetivos.


También se copiaron las políticas de empresas americanas como: almuerzo, caramelos, snacks y bebidas gratis, capitación (en ingles o alguna tecnología), casual dressing, planes de carrera, clases de yoga, consolas Playstation y otros beneficios. Aunque en general se muestran como políticas de reclutamiento y retención, en las entrevistas, son en realidad políticas utilizadas para incrementar la productividad.


Debido al offshore, también es común que los programadores viajen al exterior, a Estados Unidos o Europa, para recibir capacitación o trabajar unas semanas en la empresa cliente.


Para reducir costos, muchas empresas abren oficinas en el interior del país (Córdoba, Rosario, Tandil), ya que los programadores allí cobran menos. También se implementa el telecommuting (trabajar desde casa) ya que como el cliente en general es extranjero, no se necesita estar on-site, además de ser algo que beneficia al empleado (ya que no viaja, y gasta menos), el beneficio de la empresa es que paga menos por el alquiler de la oficina, (y otros gastos, como electricidad, seguridad, etc), el empleado produce mas (aunque no siempre es el caso) y hay menos rotación.


Otro factor importante es que debido al crecimiento económico, los precios de los alquileres (de cualquier tipo de inmueble) subieron a precios astronómicos, por lo que las oficinas, también debido a la mayor cantidad de empleados necesitada, muchas empresas las ubicaron en el Gran Buenos Aires (por el alquiler mas bajo), además de implementar el Telecommuting.


La actualidad


Hoy estamos viviendo un clima de incertidumbre mundial debido a lo que comenzó como la crisis de las hipotecas en Estados Unidos. Aunque aun estamos en medio de esta crisis, es probable que se crezca menos o no se crezca en el sector informático de exportación de software en los meses que vienen. Los sueldos actuales son mas altos que los años anteriores, pero también la inflación, alquileres y el valor actual del dolar hacen que el offshore sea menos rentable (Otros países también hay devaluado su moneda, por lo que eso también nos quita competitividad).

El IT en Argentina (pre-1999)

Este blog esta basado en mi experiencia en el mercado informático argentino, comenzare con artículos referentes a la historia del IT en este país.

Comencé a trabajar en el año 1999, por lo que se de la época previa a esa fecha es acotado, pero interesante.

Los primeros años del uno a uno (1990-1994)

En los primeros años de la década del noventa, con el uno a uno (un dolar = un peso) que aumentaba el déficit de la balanza comercial y generaba mas deuda, y con las privatizaciones de las empresas del estado, el desempleo comenzaba a subir, aunque el mercado informático se vio menos afectado debido a la creciente demanda e informatización de las empresas (que sirve para competir mejor y bajar costos).

En esa época se estaba terminando de consolidar el dominio de la PC por sobre las demás plataformas (Commodore, Apple, etc.), las PC usaban el DOS (como sistema operativo), y tenían CPUs 8086/8088 (las XTs), en general eran chips no hechos por Intel, sino por otros fabricantes, como el NEC V20 (un 8088). Algunos tenían ATs (maquinas con CPUs 80286), y casi todos tenían monitores monocromaticos (verdes o ámbar) con placas Hercules.

Los trabajos de sistemas de esa época no eran bien remunerados (no eran mejores que otras profesiones), se trabajaba en bancos, en servicio técnico y reparación de PC, cuentapropistas realizaban programas a medida para PyMEs, como programas de sueldos y jornales, manejo de stock y facturación, programas de videoclub (en esa época estos estaban de moda, como paso varias veces en la Argentina, como con los remises, canchas de paddle, etc). Se utilizaban lenguajes como Basic (Basica, Quick Basic), Clipper, dBase, Pascal y otros.

En general el software y hardware utilizado en esa época se había utilizado en USA en la década del 80 (8088, monitores monocromaticos, juegos y lenguajes), es decir estábamos atrazados unos cuantos años.

Pre-Internet

Era una época pre-internet,  la comunicación entre computadoras se realizaba con modems, en general con velocidades menores a 14400 bps, y existían varios BBSs donde la gente se conectaba para intercambiar programas (en general juegos y aplicaciones). El chat era poco frecuente ya que muy pocos BBSs eran multilinea (como Los Pinos).

También se utilizaban foros de discusión y la red Fidonet. El "Google" de la época era una lista de BBSs mantenida por Alejando Szykula, la LoCoLIST, que venia también en el formato de directorio telefónico utilizado por el Terminate (uno de los programas mas utilizados de la época para conectarse a los BBSs). 

En general los BBSs particulares eran de acceso gratuito, el "dinero" utilizado allí era el ratio de download, que en simples palabras significaba que si subías un juego de 1 Mb, podías bajarte otro mega o mega y medio de juegos u otro programa. 

1995-1999

A principios de este lustro, algunos BBS multilinea comenzaban a ofrecer acceso a Internet (se utilizaba el modem usando el protocolo PPP o SLIP, con velocidades de 56Kbps). La gente ya tenia computadoras 386 y 486 con pantallas color VGA, utilizaban Windows 95 y Mosaic como web browser (luego se comenzo a utilizar el Netscape Navigator). El buscador web de la época era Yahoo!, que luego hicieron populares otros como Altavista, y Google (después del 2000).

El acceso a Internet era caro y mas caro aun los pocos servicios de hosting locales. Había que sumar a esto el costo telefónico, que luego se redujo gracias a la implementación de los números 0610 (que tenían una tarifa reducida).

También existía un grupo reducido de aficionados que comenzo a utilizar Linux, el cual también se empezó a utilizar como sistema operativo de servidores.

Mas historia en el próximo articulo.