Introducción | Apunte Herramientas de Desarrollo
Después de salir de plan común y haber cursado Herramientas Computacionales (CC1000) e Introducción a la Programación (CC1001) los alumnos que entran al DCC se encuentran con ramos de gran profundidad y complejidad relacionados al rubro, pero no existe ningún ramo que sirva de nivelación e introducción a las herramientas “básicas” (no necesariamente fáciles) que son utiliazdas dentro de la carrera de ingeniería en computación. Algunas de estas herramientas son Git, Linux, o Docker. En ramos como Programación de Software de Sistemas se ve un poco de cómo funciona Linux, y en ramos de trabajo colaborativo se “enseña” a usar Git, pero siempre es algo que se ve muy por encima y nunca una materia como tal, siendo que son conocimientos muy necesarios para la carrera.
Es por esto que personalmente creo que es importante que exista un ramo de Herramientas de Desarrollo y que sirva como introducción y profundización a las herramientas que son utilizadas por las y los ingenieros en computación. A continuación se listarán los motivos, objetivos, y contenidos a pasar en este proyecto de ramo:
Motivos
- Focalización en ramos de malla
- En algunos ramos de la malla del DCC actualmente se nos recomienda que utilicemos Git, Linux, Ambientes Virtuales, etc. Parte del ramo se ocupa en enseñar estos “contenidos”, y la existencia de este ramo ayudaría a que los ramos de X cosa se centren en esa cosa X y no en estas herramientas que se pueden considerar “básicas”.
- Evitar repetición // REVISAR MALLA
- Hay muchos ramos que nos piden aprender ciertas cosas, y se pierde tiempo “aprendiendo” lo mismo varias veces y por encima. Ejemplos de esto son: Git -> Batos, Minería, Sensores, Gamedev, … Docker -> IoT, Web, … Linux -> PSS, Sositos, Arqui, Hacking, …
Objetivo
Generar una base de conocimiento sobre las herramientas utilizadas a lo largo de la carrera, mejorando la calidad y preparación de los profesionales egresados de la facultad.
Contenidos
- Documentaciones
- Importancia
- Aprender a leer documentaciones
- Ejercicios
- ¿Cuál es la mejor manera de … en …?
- Entornos de desarrollo
- Definición
- Importancia
- Opciones
- Livianos
- Atom
- VSCode
- Vim
- Pesados/especializados
- Jetbrains
- Anaconda
- Cloud Based
- Colab
- Hay uno para C…
- Livianos
- Consolas/terminales y comandos
- Definición de Shell
- Definición de terminal
- Términos actuales
- Consola
- shells: bash, zsh, posh, fish, “cmd”
- Comandos
- Definición de comando/programa
- basicos: pwd, cd, ls, mkdir, rm, touch, cat, echo
- avanzados: find, grep, fdisk, dig, …
- SSH
- Definición
- Casos de uso
- Conexión remota genérica
- Anakena
- Github
- Concepto de llaves y seguridad
- Git
- Historia *
- Definición de Git
- Casos de uso
- GitHub / BitBucket / GitLab
- Ejercicios
- Funciones: add, commit, push, pull
- Repositorios
- Log
- Merge
- Conflictos
- Fork
- Rebase
- Branches
- Github Actions *
- Reset
- Pull request
- Buenas prácticas
Respaldo / Recuperación / Mantenimiento
- IA
- ChatGPT
- Copilot
- Políticas de uso
- Frontend / Backend
- Concepto
- Máquinas virtuales
- WSL *
- Definición
- Importancia / Casos de uso
- Ejemplos
- Docker
- Historia *
- Definición de Docker
- Importancia / Casos de uso
- Ejercicio
- Crear un contenedor
- Utilizar un contenedor
- Deployear una app simple
- Lenguajes de programación (historia/conceptos/usos)
- Lenguajes comunes (definicion simple, codigo de ejemplo *, uso, popularidad, presencia en el mercado, etc)
- Python / Jupyter
- C/C++
- C#
- Java / JVM
- Sacala
- Kotlin
- Swift
- Go
- Ruby
- Rust
- JS/TS
- HTML (not a programming language tho)
- CSS (not a programming language tho)
- Lua
- … lo ideal sería tener un momento actualidad para hablar de los lenguajes emergentes.
- Lenguajes comunes (definicion simple, codigo de ejemplo *, uso, popularidad, presencia en el mercado, etc)
- Sistemas operativos
- Concepto de OS
- Historia de los OS *
- Ventajas y desventajas
- Linux
- Definición de Linux
- Distribuciones de Linux
- Familias
- Distros
- Usuarios *
- Permiso *
- Windows / macOS
- Definición de Windows
- macOS
- Definición de macOS
- Computadores (partes) < simula arqui?
- Partes de un computador
- Procesador (CPU)
- Intel vs AMD *
- Memoria (RAM)
- Almacenamiento (SSD/HDD)
- Gráfica (GPU)
- Nvidia vs AMD
- Placa madre (MB)
- Perifericos
- Procesador (CPU)
- Partes de un computador
- Computadores (armado y desarmado)
- Armado
- Desarmado
- Computadores (instalación OS)
- Instalación de Windows
- Instalación de Linux
- Instalación de macOS
- Computadores (particiones)
- Concepto de partición
- Uso
- Ambientes virtuales
- Definición
- Casos de uso
- Python > Muchos paquetes
- Importancia (buenas prácticas)
- Programas (conceptualmente)
- Programas en Linux
- binarios
- Programas en Windows
- Programas en Linux
- Variables de sistema (e.g. PATH)
- Concepto
- Uso
- Ejemplos
- PATH
- SHELL?
- APIS
- Concepto de API
- Ejemplos de uso
- Ejemplos
- Buenas prácticas de computación
- Nombres de archivos/carpetas
- Estructura de directorios
- Debugging (puede ser subunidad de cada unidad principal)
Exclusiones
Se excluirán del ramo herramientas que si bien son importantes, ya son cubiertas por otros ramos existentes en la carrera. Estas “herramientas” son:
- HTML / JS / CSS (se ve en Desarrollo de Aplicaciones Web)
- SQL (se ve en Bases de Datos)
- Protocolos de comunicación (HTTP, SFTP, etc)
- Programación específica
- Puertos
Requisitos
Nada, pero tal vez Introducción a la Programación (CC1001)
Problemas
- Prof2
- Es un ramo muy tecnológico, y por lo tanto
- Prof3
Ideas
- Prof4
- Puede ser una batería de contenido disponible en la web
- V
- Puede implementarse como el EOL
- TV
- Pueden orientarse/enforcarse por año de la carrera (las herramientas utilizadas son distintas)
- Toko
- Hay que pedir opiniones de
- Profesores; para entender qué herramientas son necesarias para los cursos que son dictados en la carrera
- Alumnos; para tener un catastro sobre qué herramientas les son exigidas sin habérselas enseñado en un espacio dedicado
- Profesionales; para tener un mapeo de las tecnologías obsoletas y las que sí se utilizan en el mundo post-egreso.
Nombre
Ideas:
- Herramientas de Desarrollo / Devtools / Develop
- Herramientas Computacionales 2
- Kit de Herramientas / Toolkit
- Introducción al Desarrollo