Introducción

Sistema Operativo

  • Personalmente recomiendo Linux, en particular distribuciones como Ubuntu, Mint o Fedora por su facilidad a la hora de instalar.

  • En ocasiones las implementaciones en Windows no están completamente integradas e inclusive en ocasiones no están disponibles.

  • En el caso que poseas un equipo con macOS no debería haber problema.

Interfaz de Línea de Comandos (Command Line Interface / CLI)

  • Es un método que permite a los usuarios interactuar con algún programa informático por medio de líneas de texto.

  • Típicamente se hace uso de una terminal/shell (ver imagen).

  • En el día a día dentro de la oficina facilita flujo de trabajo.

  • Permite moverse entre manipular directorios y ficheros, instalar/actualizar herramientas, aplicaciones, softwares, etc.

Screenshot of a sample bash session in GNOME Terminal 3, Fedora 15. Wikipedia

Python

Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en la legibilidad de su código.

Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, dinámico y multiplataforma.

Las principales librerías científicas a instalar y que ocuparemos durante el curso son:

Durante el curso se ocuparán más librerías a modo de complementación (ejemplo, scipy, seaborn, statsmodels ,etc.)

Entorno Virtual

Problemas recurrentes:

  • Dependencias de librerías (packages) incompatibles.

  • Dificultad a la hora de compartir y reproducir resultados, e.g. no conocer las versiones de las librerías instaladas.

  • Tener una máquina virtual para cada desarrollo es tedioso y costoso.

  • Miedo constante a instalar algo nuevo y tu script vuelva a funcionar.

Solución

Aislar el desarrollo con tal de mejorar la compatibilidad y reproducibilidad de resultados.

Para el curso (es recomendable)

Conda

Package, dependency and environment management for any language—Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, FORTRAN. (Link)

¿Por qué Conda?

  • Open Source

  • Gestor de librerías y entornos virtuales.

  • Compatible con Linux, Windows y macOS.

  • Es agnóstico al lenguaje de programación (inicialmente fue desarrollado para Python).

  • Es de fácil instalación y uso.

Otras alternativas

  • pip + virtualenv: el primero es el gestor favorito de librerías de Python y el segundo es un gestos de entornos virtuales, el contra es que es exclusivo de Python.

  • Pipenv o Poetry: librerías enfocadas al manejo de dependencias (muy recomendables!)

Entorno de desarrollo integrado

  • Un entorno de desarrollo integrado, en inglés Integrated Development Environment (IDE), es una aplicación informática que proporciona servicios integrales para facilitarle al desarrollador o programador el desarrollo de software.

  • Normalmente, un IDE consiste de un editor de código fuente, herramientas de construcción automáticas y un depurador. La mayoría de los IDE tienen auto-completado inteligente de código (IntelliSense).

  • Algunos IDE contienen un compilador, un intérprete, o ambos, tales como NetBeans y Eclipse; otros no, tales como SharpDevelop y Lazarus.

Existen varios IDE populares que sirven para varios lenguajes de programaci+on. En python, el más recomendable es Pycharm.

Pycharm

PyCharm es un IDE para desarrolladores profesionales. Fue creado por JetBrains, una empresa conocida por crear excelentes herramientas de desarrollo de software.

Hay dos versiones de PyCharm:

  • Community: versión gratuita de código abierto, ligera, buena para Python y desarrollo científico

  • Professional: versión de pago, IDE con todas las funciones con soporte para desarrollo web también

Observación

Se recomienda que puedan descargar Pycharm (en su versión gratuita) para poder familiarizarse con este tipo de herramientas, aunque el curso está orientado a trabajar sobre la terminal y con jupyter notebook.

Project Jupyter

Project Jupyter exists to develop open-source software, open-standards, and services for interactive computing across dozens of programming languages.*

Jupyter Notebook

Es una aplicación web que permite crear y compartir documentos que contienen código, ecuaciones, visualizaciones y texto. Entre sus usos se encuentra:

  • Limpieza de datos

  • Transformación de datos

  • Simulaciones numéricas

  • Modelamiendo Estadístico

  • Visualización de Datos

  • Machine Learning

  • Mucho más.

Jupyter Notebook Example

Jupyter Lab

  • Es la siguiente generación de la interfaz de usuario de Project Jupyter.

  • Similar a Jupyter Notebook cuenta con la facilidad de editar archivos .ipynb (notebooks) y heramientas como una terminal, editor de texto, explorador de archivos, etc.

  • Eventualmente Jupyter Lab reemplazará a Jupyter Notebok (aunque la versión estable fue liberada hace algunos meses).

  • Cuenta con una serie de extensiones que puedes instalar (y desarrollar inclurisve.

  • Más información en: https://github.com/jupyterlab/jupyterlab-demo

Puedes probar Jupyter Lab con solo dos clicks!

  1. Ingresar a este link: https://github.com/jupyterlab/jupyterlab-demo

  2. Hacer click en el icono de binder: Binder

Otros Proyectos

Entre los más conocidos se encuentran:

Versionamiento de Código

https://i1.wp.com/help.lieberlieber.com/download/attachments/32342017/image2019-7-2_14-53-19.png?w=1080&ssl=1
  • Permite compartir el código fuente de nuestros desarrollos y a la vez mantener un registro de los cambios por los que va pasando.

  • Herramienta más importante y fundamental dentro del desarrollo.

  • Tipos de versionadores de código:

  • Sistemas Centralizados: Son los más “tradicionales”, por ejemplo SVN, CVS, etc.

  • Sistemas Distribuidos: son los que están en auge actualmente como: Git, Mercurial, Bazaar, etc.

Git

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Es importante comprender que Git es la herramienta que permite versionar tus proyectos, sin embargo, a la hora de querer aprovechar más funcionalidades, como compartir o sincronizar tus trabajos se hace necesario utilizar servicios externos. Los más famosos son:

  • GitHub

  • GitLab

  • Bitbucket

Piensa lo siguiente, cualquiera podría implementar un correo electrónico entre dos computadoras conectadas entre ellas por LAN pero no conectadas a Internet. Sin embargo la gente utiliza servicios como Gmail, Outlook, etc. con tal de aprovechar de mejor manera las funcionalidades que ofrece la tecnología del correo electrónico. Esta es una analogía perfecta entre las diferencias de Git y los servicios como GitHub o GitLab.

GitHub

GitHub is a development platform inspired by the way you work. From open source to business, you can host and review code, manage projects, and build software alongside 30 million developers.

Gitlab

Gitlab is an open source end-to-end software development platform with built-in version control, issue tracking, code review, CI/CD, and more. Self-host GitLab on your own servers, in a container, or on a cloud provider.

Bitbucket

Bitbucket is more than just Git code management. Bitbucket gives teams one place to plan projects, collaborate on code, test, and deploy.

.

Resumen

  • Sistema operativo: Cualquiera, sin embargo se recomiendan alternativas basadas en Unix.

  • Lenguaje de programación: Python

  • Entorno virtual: Conda, preferentemetne a través de miniconda.

  • Entorno de trabajo: Jupyter Lab.

  • Versionamiento: Git & GitHub.