Introducción
Sistema Operativo
Los sistemas operativos son programas de software que gestionan los recursos de hardware y proporcionan servicios comunes para otros programas que se ejecutan en una computadora.
Básicamente, actúan como intermediarios entre el hardware de la computadora y el software de aplicación. Los sistemas operativos realizan tareas como la gestión de memoria, la gestión de archivos, el control de dispositivos, la administración de procesos y la interfaz de usuario.
Algunos ejemplos comunes de sistemas operativos son Windows, macOS, Linux, Android e iOS.
💡 Recomendaciones
- 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.
- Una alternativa es Windows Subsystem for Linux, pero lamentablemente no se asegura un 100% de compatibilidad.
- En el caso que poseas un equipo con macOS no debería haber problema.
Interfaz de Línea de Comandos (Command Line Interface / CLI)
La Interfaz de Línea de Comandos es un tipo de interfaz de usuario que permite a los usuarios interactuar con un sistema informático mediante comandos de texto introducidos a través de una línea de comando. En lugar de utilizar elementos gráficos como ventanas, botones y menús, los usuarios ingresan comandos específicos en un símbolo del sistema o terminal.
En una CLI, los usuarios escriben comandos y argumentos de texto plano para ejecutar diversas tareas, como administrar archivos, manipular configuraciones del sistema, ejecutar programas y realizar diversas operaciones informáticas.
Esto proporciona un nivel de control y flexibilidad avanzado para usuarios experimentados, aunque puede tener una curva de aprendizaje más pronunciada en comparación con las interfaces gráficas de usuario (GUI).
Python
Python es un lenguaje de programación interpretado que destaca por su claridad y legibilidad en el código. Es multiparadigma, lo que significa que admite diferentes estilos de programación, incluyendo orientación a objetos, programación imperativa y, en menor medida, programación funcional. Además, es dinámico y multiplataforma, lo que lo hace versátil y ampliamente utilizado en diversos entornos de desarrollo.
En el ámbito científico y de análisis de datos, Python cuenta con una variedad de bibliotecas especializadas. Algunas de las más importantes son:
- Numpy: para computación científica.
- Pandas: ideal para el análisis de datos.
- Matplotlib: proporciona herramientas para visualización de datos.
- Scikit-Learn: una biblioteca esencial para machine learning.
Además, durante el curso se explorarán otras bibliotecas complementarias, como scipy, seaborn y statsmodels, entre otras. Estas herramientas amplían las capacidades de Python en áreas específicas, como estadísticas, visualización avanzada y análisis científico.
Entorno Virtual
Problemas recurrentes: - Incompatibilidad entre dependencias de librerías (packages). - Dificultad para compartir y reproducir resultados debido a la falta de conocimiento sobre las versiones de las librerías instaladas. - Tedioso y costoso tener que usar una máquina virtual diferente para cada desarrollo. - Temor constante a la interrupción del funcionamiento del script al instalar nuevas herramientas o librerías.
Solución: Aislar el desarrollo para mejorar la compatibilidad y la reproducibilidad de los resultados.
Para el curso (recomendado):
Gestión de paquetes, dependencias y entornos para cualquier lenguaje: Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN.
¿Por qué Conda? - Es de código abierto. - Permite gestionar tanto librerías como entornos virtuales. - Compatible con Linux, Windows y macOS. - No está limitado a un solo lenguaje de programación (aunque se desarrolló inicialmente para Python). - Fácil de instalar y utilizar.
Otras alternativas:
- pip + virtualenv
: Pip es el gestor de librerías preferido en Python, mientras que Virtualenv es un gestor de entornos virtuales. Sin embargo, esta combinación es exclusiva de Python.
- Pipenv
o Poetry
: Librerías especializadas en la gestión de dependencias (altamente recomendadas).
🔑 Nota: Las sugerencias anteriores están orientadas principalmente al trabajo en entornos locales. Sin embargo, dado que todo el curso está diseñado para trabajar en Google Colab.
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 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
Otros Proyectos
Entre los más conocidos se encuentran:
- JupyterHub: Distribuir Jupyter Noterbooks a múltiples usuarios.
- nbviewer: Compartir Jupyter Notebooks.
- Jupyter Book: Construir y publicar libros de tópicos computacionales.
- Jupyter Docker Stacks: Imágenes de Jupyter para utilizar en Docker.
Versionamiento de Código
-
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.M
Configuraciones
- GitHub: Crear una cuenta directamente en el sitio oficial.
- Google Colab: Herrramienta de trabajo oficial. Cada clase con código tendrá el siguiente logo (donde deben hacer click):
- Portafolio Personal: Para los entregables del curso, utilizaremos la plantilla de MAT281-Portfolio.
🔑 Nota: Las instrucciones de uso se encuentran en el siguiente archivo.