Entrada

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…
  • 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.
  • 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
  • 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
  • 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
Esta entrada está licenciada bajo CC BY 4.0 por el autor.