A continuación te presento una lista de mis aplicaciones favoritas, que utilizo día con día para para programar en Mac. Cabe resaltar que ésta lista de herramientas está hecha con programadores web en mente. Aplicaciones para programar en Mac

A continuación te presento una lista de mis aplicaciones favoritas, que utilizo día con día para para programar en Mac. Cabe resaltar que ésta lista de herramientas está hecha con programadores web en mente.

  • code XCode

    XCode es el IDE que debes utilizar si quieres desarrollar aplicaciones para iOS y OSX. Técnicamente, no lo necesitas para escribir las aplicaciones. Sin embargo XCode es más que un simple IDE, también provee un sinnúmero de librerías y planillas para tus apps.

    Por otra parte, automatiza la tarea de compilar Objective-C, empaqueta tu aplicación y la firmarla para que la puedas distribuir a través de la Apple Store.

    Aún si no planeas desarrollar aplicaciones para iOS u OSX, necesitas instalar XCode para que puedas instalar el paquete de aplicaciones de línea de comandos, que es indispensable para cualquier programador que utilice computadoras Apple.

    Cuando instalas las herramientas de línea de comando a través de XCode, estás instalando una cantidad considerable de intérpretes de ruby y python, así como los compiladores de C y C++

  • keyboard iTerm

    OSX viene con una aplicación de terminal llamada precisamente Terminal. Si bien es bastante buena, en lo personal prefiero iTerm. Ya que iTerm me permite tener tabs en mi terminal, y dividir mi terminal horizontal y verticalmente. Lo cuál es bastante útil cuando estás trabajando en múltiples servidores remotos. Buscar cadenas de texto utilizando iTerm es exponencialmente más sencillo que utilizando Terminal. Y para los usuarios avanzados, puedes automatizar tareas repetitivas a través de tu terminal sin ningún problema. Además las capacidades de personalización y de configuración de iTerm es muchísimo superior a la de Terminal.

  • library_add Homebrew

    Homebrew es el repositorio de aplicaciones que no tiene Apple. Si vienes del mundo de Linux sabrás que en Linux existen utilerías como yum y aptitude que te permiten instalas herramientas fácilmente en tu sistema. En Mac los equivalentes de esas herramientas eran fink y macports; sin embargo homebrew arregló muchos de los problemas que fink y macports tenían. Además de que tiene una comunidad más activa y paquetes más actualizados. Independientemente del tipo de desarrollador que seas (iOS/OSX/Web) homebrew es indispensable en tu Mac.

  • computer Software de máquinas virtuales VirtualBox/VMWare/Parallels

    Invariablemente, si vas a trabajar en Mac necesitas instalar una máquina virtual. Por ejemplo si desarrollas en algún lenguaje multi-plataforma, te será conveniente poder verificar que tu aplicación se ejecuta correctamente en diferentes Sistemas Operativos.

    Cuando trabajo con Mac, mi software de virtualización favorito es Parallels. Parallels es un software de virtualización exclusivo para Mac, y está optimizado para correr extremadamente rápido sobre ésta plataforma. Sin duda es mucho mejor que VirtualBox, pero no es gratuito. Parallels actualmente tiene un costo de $79.99 USD.

    Otro software de pago para virtualización es VM Ware; ya que es un software de virtualización muy maduro y robusto. VM Ware se siente más profesional que Parallels, y es uno de los mejores softwares de máquinas virtuales que existen en el mercado. Sin embargo, si nunca has virtualizado un sistema operativo con antelación, puede que la curva de aprendizaje de VM Ware sea algo elevada.

    Finalmente, si no quieres gastar dinero en software de máquinas virtuales para tu Mac, puedes utilizar VirtualBox. VirtualBox es gratuito, y es ideal si planeas virtualizar sistemas operativos ligeros (alguna distribución de Linux), con un sistema de archivos relativamente pequeño, y simplemente te interesa hacer pruebas rápidamente. No digo que sea malo, pero una vez que estás acostumbrado a la velocidad y versatilidad de soluciones como VM Ware y Parallels. VirtualBox deja mucho que desear. Si tienes presupuesto limitado, definitivamente tu única opción es VirtualBox.

  • devices other Vagrant (opcional)

    Si eres desarrollador web, necesitas instalar vagrant. Vagrant es una herramienta que te permite virtualizar diferentes sistemas operativos -casi- automáticamente. Por ejemplo, si desarrollas en PHP necesitas instalar PHP, Apache/Nginx y MySQL/Postgres.

    Si no tienes mucha experiencia, o manejas proyectos pequeños quizá se te haga sencillo instalar herramientas como XAMPP o MAMP. Que son paquetes que te instalan la gran mayoría de las herramientas que necesitas.

    Sin embargo, conforme vas creando aplicaciones y creciendo profesionalmente, es muy común que ciertas librerías o aplicaciones requieran una versión específica de una librería, o quizá requiera una versión específica de una base de datos, y en poco tiempo tu ambiente de programación se vuelve muy complejo y difícil de reproducir fácilmente.

    Y es precisamente el problema que vagrant resuelve. A través de vagrant puedes virtualizar diferentes ambientes para cada proyecto, configurar las conexiones de red, el sistema operativo y las dependencias de tu proyecto facilmente.

    A través de Vagrant puedes compartir el sistema de archivos de tu máquina virtual con el de tu computadora real fácilmente de tal manera que puedes utilizar las mismas herramientas que utilizar para programar en máquina real sin ninguna dificultad.

    Es particularmente útil cuando trabajas en equipo, Por ejemplo, con vagrant no hay necesidad de enviar una copia de tu imagen de disco para que el otro programador tenga una réplica exacta de tu ambiente de trabajo.

    Simplemente le envías un archivo de texto con las instrucciones de Vagrant, tu compañero le indica a vagrant que reproduzca tu ambiente de trabajo en su equipo; y en cuestión de minutos, sin necesidad de configuraciones tediosoas o tardadas, tu compañero tiene una réplica exacta de tu ambiente de trabajo en su computadora.

    En lo personal, lo primero que creo en un proyecto nuevo es un Vagrantfile, para poder llevar un control de las herramientas y utilerías que tengo instaladas en mi máquina virtual.

  • memory Sequel Pro (si utilizas MySQL)

    Sequel Pro es cliente para MySQL. Existen un sinnúmero de clientes para MySQL, y en lo personal; yo tengo instalado cerca de 3 o 4 diferentes clientes de MySQL. Sin embargo, mi cliente favorito para correr consultas rápidas es Sequel Pro. No te dejes engañar por su simplicidad. Quizá no tenga herramientas para hacer ingeniería inversa a tu base de datos como MySQL Workbench, o no tenga un coloreado de sintaxis bonito como 0xDBE EAP. Pero es lo suficientemente práctico como para guardar consultas favoritas, editar tablas, ajustar permisos y correr consultas rápidamente. Definitivamente no es un cliente para administradores de bases de datos, pero es un buen cliente para programadores y analistas.

  • web Atom

    Anteriormente había recomendado Sublime Text. Sin embargo, me he convertido en un power user de Atom, y se ha convertido muy rápidamente en mi editor de texto favorito. Primero que nada porque es completamente gratuito, tiene una amplia gama de plugins, es muy versátil, y se siente y luce muy similar a Sublime Text. Por otra parte la comunidad de atom es muy activa, y el editor siempre está en constante actualización.

    El único inconveniente que encontré hace algunos meses (y puede que éste problema ya haya sido solucionado) es que hay ciertas cosas que el editor no puede hacer en algunas versiones de Windows, cosas relativamente sencillas como borrar archivos y renombrarlos. Reitero, puede que ésto ya haya sido solucionado.

    Por otra parte, Atom viene con un panel donde puedes visualizar documentos Markdown muy fácilmente, y dado que Atom es un editor de texto bastante poderoso, puedes editar tus documentos Markdown de una manera muy eficiente.

    Finalmente, Atom tiene un muy buen plugin que emula vim. Si bien el plugin no es perfecto, si eres un vim power user muy rápidamente te darás cuenta que puedes utilizar lo mejor de Atom y lo mejor vim al mismo tiempo sin problema alguno.

  • swap_calls SourceTree

    En lo particular, a mi no me gusta administrar mis repositorios de git con aplicaciones visuales, siento que hacen mi flujo de trabajo más lento. Sin embargo estoy consciente, que no a todos los programadores les encanta aprenderse dos docenas de comandos de git para administrar sus programas a través de la terminal. En esas situaciones, existen aplicaciones como SourceTree que te permiten administrar tus repositorios. SourceTree es un programa gratuito y es un cliente para los VCS git y mercurial.

PHP Avanzado - Traits

En éste módulo hablamos acerca de qué son y para qué sirven los Traits en PHP.

Como encontrar trabajo sin experiencia ¿Cómo encontrar trabajo de programador si no tengo experiencia?

Un lector de blog pregunta:

Alan,

Mi pregunta es sobre el mercado laboral, ya que nunca trabajé como programador por un sin número de circunstancias, pero estudié informática y quiero trabajar en eso. Tengo 30 años y no tengo experiencia profesional como programador, solo he hecho algunas paginas web sencillas.

¿Cómo puedo encontrar trabajo como programador, si no tengo experiencia profesional?

Los lenguajes de programación más fáciles de aprender Los lenguajes de programación más fáciles de aprender

De una vez advierto que éste es un artículo subjetivo, existen muchísimas opiniones al respecto. Un millón de personas pueden estar de acuerdo conmigo, y otro millón pueden pensar que estoy completamente equivocado.

Sin más preámbulo, en mi opinión éstos son los lenguajes más fáciles aprender ordenados por nivel de dificultad ascendiente (del más fácil al menos fácil)

  • Python

    Una de las características del lenguaje de Python es que está diseñado bajo la premisa que declaraciones explícitas, siempre son mejores que declaraciones implícitas. Eso quiere decir que todos los programas en Python son muy claros al momento de comunicar al programador exactamente lo que está sucediendo en el programa, sin necesidad de escribir comentarios.

    Muchas universidades anglosajonas utilizan Python para enseñar programación, debido a que leer programas en Python es -casi- como leer oraciones en Inglés. El hecho de que el lenguaje de programación obligue a los a programadores a indentar el código, hace que los programas se vean organizados y poder detectar inmediatamente que conjunto de instrucciones son independientes de otro conjunto de instrucciones.

    Otra de las filosofías de Python es que idealmente debe haber una, y solamente una, manera de hacer las cosas. Eso es una gran ventaja para las personas que van iniciando, ya que no hay lugar para ambigüedades del lenguaje.



  • Ruby

    En mi opinión, Ruby es el lenguaje más cercano al lenguaje humano y es precisamente lo que lo hace fácil de aprender. Es un lenguaje increíblemente consistente con su diseño, que con tan solo invertir unos cuantos días utilizando lenguaje, notarás de inmediato que ya recuerdas un número considerable de funciones y palabras especiales del lenguaje, sin necesidad de estar viendo la documentación. Es un lenguaje muy natural y amigable para los principiantes.

    Además de ser un lenguaje muy intuitivo, Ruby literalmente tomó lo mejor de un número diverso de lenguajes de programación muy robustos (Perl, Smalltalk, LISP), mejoró la semántica del lenguaje y Yukihiro Matsumoto (creador de Ruby) terminó creando un lenguaje de programación increíblemente poderoso y fácil de aprender.

    Sin embargo, Ruby fue creado con la "felicidad" del programador en mente. Eso quiere decir que desde sus inicios se concibió como un lenguaje de programación diseñado para personas que ya sabían programar. Ruby es un lenguaje multi-paradigma; eso quiere decir que provee soporte para objetos, programación procedural, programación funcional, etc. Sin embargo, casi todo en Ruby es un objeto, así que una persona totalmente nueva al mundo de la programación puede llegar a confundirse un poco con todo el lingo que la programación orientada a objetos acarrea.

  • JavaScript

    Javascript es un lenguaje relativamente sencillo de aprender. A pesar de que muchos detractores del lenguaje tienen muy buenos argumentos acerca del diseño del lenguaje, en mi opinión sigo pensando que es un lenguaje fácil de aprender y es uno de los lenguajes de programación que te ofrece gratificación inmediata.

    Con gratificación inmediata me refiero a que Javascript fue inicialmente concebido como un lenguaje de programación para construir sitios web interactivos. Por lo tanto, en un tiempo relativamente corto puedes empezar a crear proyectos interesantes (y útiles) y empezaras a resolver problemas reales -casi- de inmediato. A diferencia de otros lenguajes, como Python o Ruby, donde generalmente empiezas a escribir los típicos programas de sumar 2 números, u ordenar una lista. En Javascript, generalmente empiezas a escribir programas que realicen animaciones, agregar efectos especiales, crear páginas web interactivas, etc.

    La desventaja de Javascript es que es un lenguaje cuyo modelo de ejecución es complicado de entender. Javascript es un lenguaje dirigido por eventos, eso quiere decir que reacciona a las cosas que suceden dentro del contexto del lenguaje. Por ejemplo en Python o Ruby, las instrucciones se ejecutan una después de otra; mientras que en Javascript ese escenario no es siempre cierto. Hay veces que tienes dos bloques de código contiguos, pero el segundo bloque se ejecuta antes que el primero, o simple y sencillamente nunca se ejecuta. Por lo que resulta frustrante para un principiante, no alcanzar a comprender exactamente que está sucediendo en sus programas.

    Por otra parte, Javascript tiene ésta característica de que no todos los navegadores de Internet interpretan el lenguaje de la misma manera. Es decir que el Javascript que Internet Explorer entiende, no es necesariamente el mismo Javascript que Firefox interpreta. Éste escenario puede causar mucha confusión a los principiantes y puede conducir a abandonar la programación debido a la frustración.

    Para agregar aún mas confusión al asunto de Javascript, recientemente se desarrolló una plataforma llamada Node.js, o node por brevedad. Node no es un lenguaje de programación. El lenguaje de programación es Javascript.

    Históricamente Javascript había sido un lenguaje de programación exclusivo del navegador de Internet. Sin embargo un grupo de programadores vieron los beneficios de un lenguaje de programación como Javascript para realizar tareas del lado del servidor de manera super rápida y eficiente, y decidieron crear una plataforma que permitiera ejecutar Javascript del lado del servidor; y fue así como nació Node.js

    A pesar de que el Javascript de Node.js, sintácticamente es el mismo que el Javascript del navegador de Internet; los programas escritos para Node.js no son compatibles con los programas escrito para los navegadores de internet y viceversa.

    Sin embargo, sin importar el "sabor" de Javascript escojas. Si planeas dedicarte al mundo del desarrollo web, invariablemente, tendrás que aprender Javascript.

  • PHP

    PHP es un lenguaje con muchos detractores y con justa razón; la inconsistencia del lenguaje de programación es increíblemente frustrante. Si bien la curva de aprendizaje es relativamente baja, y también es uno de esos lenguajes de gratificación inmediata (obtener resultados y resolver problemas reales relativamente rápido), la sintaxis del lenguaje tiende a ser algo complicada y a veces confusa para quien va iniciando en programación.

    Por ejemplo, en PHP todas las variables tienen que iniciar con un símbolo de $ (símbolo de dólar) y cada línea tiene que terminar con un ; (punto y coma).

    Utilizar comillas simples ('), no es lo mismo que utilizar doble comillas (").

    Cuando quieres unir dos cadenas de texto tienes que utilizar un punto (.), pero si quieres sumar dos números tienes que utilizar un símbolo de más (+).

    La inconsistencia en la nomenclatura de las funciones, hace que el lenguaje sea poco intuitivo. Por ejemplo, existen funciones para determinar si una variable es de cierto tipo de dato y esas funciones vienen de la forma is_int, is_str, is_float. Sin embargo, si quieres determinar si una variable existe el nombre de la función es isset (no hay guión bajo), y ejemplos como ese abundan en el lenguaje, lo cual hace la memorización del lenguaje más difícil.

    Sin embargo, el lenguaje en sí, no es tan malo como los detractores suelen pintarlo, y una vez que te acostumbras a las inconsistencias del lenguaje, PHP es relativamente simple y poderoso para construir aplicaciones web robustas. Por otra parte, no puedes ignorar que existen más de 200 millones de sitios en Internet que están escritos en PHP. Eso quiere decir que PHP tiene un mercado de trabajo bastante grande.

  • Java

    Hasta ahora hemos visto lenguajes de tipado débil; eso quiere decir que el interprete del lenguaje de programación no obliga al programador a declarar si una variable es numérica o es una cadena de texto.

    Java es un lenguaje de tipado fuerte; eso quiere decir que Java obliga al programador a declarar el tipo de dato que una variable va a contener, antes de poder crear el programa.

    Además Java es por diseño un lenguaje orientado a objetos al 100%. Es decir que absolutamente todo lo que haces en Java tiene que ser declarado dentro de una clase, misma cosa que hace que el programador tenga que aprender todo lo relacionado con programación orientada a objetos, para poder entender exactamente cómo se ejecutan los programas en Java.

    El lenguaje en sí no es difícil de entender, es un lenguaje muy maduro y es otro de los lenguajes de gratificación inmediata. Uno inmediatamente puede empezar a escribir programas portables que pueden ejecutarse virtualmente en cualquier computadora del mundo, dispositivos móviles o embebidos. Uno puede crear aplicaciones de escritorio relativamente rápido, y un montón de cosas más.

    Uno de las cosas que un principiante en Java tiene que entender, es que los programas en Java tienen que pasar por un proceso de compilación que los programas en Python, Ruby, PHP, Javascript generalmente no pasan. Es decir que cuando terminas un proyecto en Java, por un lado tienes el código fuente de tu programa y por el otro tienes un archivo JAR que es todo el código de tu programa, compilado en bytecode JVM listo para ser ejecutado por la máquina virtual de Java (JVM).

  • C/C++

    C y C++ son dos lenguajes de programación diferentes, pero para fines prácticos mucha gente se refiere a ellos como C/C++.

    C es un lenguaje de programación inventado por Dennis Ritchie y Ken Thompson en 1972; C++ es un lenguaje de programación inventado por Bjarne Stroustrup en 1983.

    Ambos lenguajes han inspirado el diseño y desarrollo de un sin número de lenguajes de programación. Por ejemplo Java y PHP tienen han adoptado prácticas de éstos lenguajes para incorporarlas directamente en su diseño. Por ejemplo, el uso del punto y coma para delimitar el fin de las instrucciones o el uso de llaves ({ }) para delimitar bloques de código.

    Y los menciono al final de ésta lista no porque sean difíciles de aprender -- después de todo yo aprendí a programar en C cuando tenía 12 años. Sin embargo, son relativamente más difíciles de aprender que Python.

    Para empezar ambos lenguajes son de tipado fuerte, por lo que los compiladores obligan a los programadores a declarar el tipo de variables que van a utilizar en sus programas. Dado que ambos lenguajes de programación ofrecen mecanismos para controlar la computadora directamente, el programador idealmente tiene que saber como funciona una computadora en su totalidad para poder sacar provecho a C/C++.

    Por ejemplo, es muy útil saber a la perfección cómo funciona la memoria RAM, de tal manera que puedas hacer un uso eficiente de los punteros en C. Los punteros en C sirven para leer y escribir directamente a la memoria de tu computadora, lo cual es frecuentemente un arma de dos filos.

    Sin embargo, en mi opinión pienso que cualquier persona que quiera dedicarse a la Ingeniería de Software profesionalmente, en algún punto de su carrera tiene que escribir programas en C. Si bien no de tiempo completo, al menos no ignorar la existencia y el funcionamiento de éstos lenguajes. A pesar de que ambos lenguajes son los padres de muchos lenguajes modernos, aún hay mucho que aprender de éstas maravillosas piezas de tecnología.

Se puede ser freelance sin experiencia ¿Se puede ser freelancer sin experiencia?

Hace días me llegó una pregunta a mi correo electrónico de parte de Edgar:

Alan quiero ser freelance pero no tengo experiencia, me recomiendas ofrecer mi trabajo gratis o buscar un trabajo para primer ganar experiencia?

Mi respuesta es poco ortodoxa porque a pesar de que ambas opciones son viables y tienen beneficios, no necesitas experiencia para iniciarte como freelancer y a continuación te explico porque: