Consejos para Freelancer - ¿Cuánto cobrar por un proyecto?

En éste vídeo te comparto una estrategia para que aprendas a calcular tus honorarios, de tal manera que sean rentables para ti y para tu familia.

El modelo PaaS (Platform-as-a-Service o Plataforma como servicio)

En el modelo de plataforma como servicio (PaaS), el vendedor ofrece un entorno de desarrollo para los desarrolladores de aplicaciones, quienes desarrollan software y ofrecen esos servicios a través de la
la plataforma del proveedor.

El proveedor normalmente desarrolla kits de herramientas y estándares para el desarrollo, y provee los canales de distribución y pago. El proveedor recibe típicamente un pago por
proporcionar la plataforma y los servicios de venta y distribución. Esto permite la propagación rápida de aplicaciones de software, dado el bajo costo de la entrada y la saturación de los canales establecidos
para la adquisición de clientes.

El modelo SaaS (Software-as-a-Service) o Software como servicio

Tradicionalmente, el método más común de adquisición de software ha sido a través de licencias. Principalmente consiste en que uno, como cliente, debe instalar el software en una computadora propia o en una red, y opcionalmente se ofrece un contrato de mantenimiento para recibir actualizaciones al software u soporte técnico.

En el modelo tradicional, los clientes son responsables de la compatibilidad del sistemas operativo con el software, la instalación de actualización, el cumplimiento de los acuerdos de licencia, etc.

En un modelo de Software como servicio o SaaS, el cliente no compra el software, sino más bien lo alquila/renta en un modelo de suscripción. En algunos casos, el servicio es gratuito si el uso del servicio es mínimo. Normalmente, el usuario accede al software a través de Internet.

Qué es el cloud computing (computación en la nube)?

La definición de la computación en la nube o cloud computing se basa en 5 atributos: multiusuario (recursos compartidos), escalabilidad masiva, elasticidad, pagas por lo que usas, y auto-abastecimiento de recursos.

  • groupMultiusuario

    A diferencia de los modelos informáticos tradicionales que asumen que el hardware es dedicado a un solo usuario/propietario, la computación en la nube se basa en un modelo en el que se comparten los recursos (es decir, varios usuarios utilizan el mismo conjunto de equipos) al nivel de red, hardware y aplicación.

  • backupEscalabilidad masiva

    Aunque las organizaciones pueden tener cientos o miles de sistemas, el cloud computing proporciona la capacidad de escalar a decenas de miles de sistemas, así como la capacidad de ancho de banda de la escala masiva y espacio de almacenamiento.

  • compare arrowsElasticidad

    Los usuarios pueden aumentar rápidamente y disminuir sus recursos informáticos, según sea necesario, así como liberar recursos para otros usos cuando ya no son necesarios.

  • shopping cartPagas por lo que usas

    Los usuarios pagan sólo por los recursos que realmente utilizan y sólo por el tiempo que se utilizan.

  • filter 9 plusAuto abestecimiento de los recursos

    Los usuarios se auto abastecen de los recursos adicionales como capacidad de procesamiento, software, almacenamiento y recursos de red.

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.