Inicio

Cuando decidí estudiar la carrera de Ingeniería en Sistemas Computacionales, fue, de cierta manera, el destino caprichoso. La verdad, no me quejo: me ha gustado y es algo sumamente útil en el día a día. Sin embargo, en ocasiones hay tantas asignaturas que parecieran no tener nada que ver unas con otras, como si fueran disciplinas aisladas...

Los 5 pilares

La carrera se divide principalmente en cuatro pilares:

  • Programación
  • Bases de Datos
  • Redes
  • Electrónica
  • Matemáticas

Nota: Hay asignaturas como Administración o Contabilidad; sin embargo, su disciplina, al final del día, es la misma que en otras áreas como Química o Física: son útiles, pero para saber más a un nivel de aplicación.

Conocer estos cuatro pilares, y saber de qué va cada uno, siento yo, que es lo que se necesita para decir que alguien es realmente ingeniero.

A decir verdad, es preocupante —aunque común— que se llegue a semestres superiores con carencias en ciertas ramas o partes. Lo cual, en ocasiones, es normal; sin embargo, esta clasificación nos da un buen punto de partida para saber qué tan perdidos estamos.

Programación

Aquí entra desde el clásico scripting hasta la ingeniería de software, con enfoque ágil y deploys.

Algunas cosas que se deben y necesitan saber son:

  • Programación —desde fundamentos hasta POO y estructuras de datos— en terminal.
  • Gestión de proyectos de software con metodología ágil: saber qué hacer, paso a paso y en qué orden.

Es normal iniciar desde los clásicos script.py o main.cpp, donde hacemos el:

hello world

De hecho, la mayoría de profesionistas afines, como físicos, químicos o matemáticos, saben programar a nivel scripting con un solo archivo principal —o editando algunos proyectos ya hechos—. Lo importante aquí es ya saber programar a nivel de proyectos: con $n$ archivos, versionado, patrones de diseño, pruebas unitarias, bases de datos y lanzamiento en producción, así como su respectiva —aunque no necesariamente amplia— documentación y mantenimiento.

Siento que eso es lo que diferencia y le da valor al programador.

Bases de Datos

Esta es única y especial, ya que el tema de "Bases de Datos" se enseña y es con base a quien le preguntes, sin embargo lo fundamental es...

  • Saber como funciona el motor por dentro desde los hash hasta su composición
  • Aprender a diseñar diagramas entidad-relación en función de los requerimientos del cliente
  • Si es necesario (aunque poco común en software tipo SaaS o de consumo) hacer una normalización y saber cuando vale la pena hacerla.
  • Operaciones en Bases de Datos (Aunque muchas veces el framework ya lo hace por nosotros)
  • Vincular la base de datos a nuestros sistemas, hacer migraciones, y mantenimiento.

Redes

Lo mínimo que se podría solicitar son los fundamentos del diseño de una red, como el cálculo de la máscara de red, la configuración de AP, routers y switches para la comunicación local de una oficina, o las clásicas VLANs. Eso es lo fundamental.

Sin embargo, redes tiene algo en común con programación, ya que entra dentro de la parte de administración de servidores —que es donde corre lo que está en producción—; por lo cual es sumamente importante:

  • Tener conocimientos de configuración, al menos, en Cisco Packet Tracer.
  • Tener conocimientos de sistemas operativos tipo GNU/Linux y, de ser posible, UNIX —por ejemplo, FreeBSD—.
  • Saber hacer trabajo operativo, desde el mantenimiento de un equipo y su limpieza lógica y física, hasta el manejo adecuado y la creación de cableado.

Matemáticas

Un paso más abstracto —que incluso pongo antes de electrónica— son las matemáticas.

Si necesitamos álgebra lineal para resolver ecuaciones, y si necesitamos matrices para hacer los cálculos de la red, las matemáticas en esta carrera son un poco distintas, comparadas con la idea de usar un simple modelo y aplicarlo a un problema en específico.

Aquí, lo que es útil es que nos permiten, o nos entrenan, para razonar. Y no es cualquier tipo de matemáticas: sirven como instrumentos para reducir problemas y hacerlos más digeribles, tanto para nosotros como para la computadora.

  • Matemáticas Discretas: conteo, grafos, sistemas numéricos, lógica proposicional, lógica discreta o los clásicos 0 y 1.
  • Álgebra Booleana: operaciones como AND, OR y NOT, y cómo usarlas para sumar, restar, multiplicar, dividir, etc.
  • Lenguaje y Automátas: útil en compiladores.

Electrónica

La mayoría de profesionales en el área de sistemas es común que sepan lo anterior, pero si les damos una serie de transistores, es bastante común que no tengan ni la más mínima idea de cómo sumar dos números. Es más, no sabrán cómo escalar la electrónica hasta crear la CPU más primitiva que existe.

Primitiva, ya que tengo la sospecha de que entender los procesadores incluso de los años 90 requeriría al menos un doctorado.

Sin embargo, eso no nos impide que nosotros sepamos cómo la electricidad que hace funcionar nuestra licuadora nos permite jugar videojuegos.

Por lo cual, es importante tener conocimientos de:

  • Electricidad.
  • Fundamentos de electrónica digital: encender un LED, usar una batería, conocer qué es un circuito integrado y comprender el funcionamiento de un transistor.
  • Electrónica digital: cómo lo que hacíamos con álgebra booleana lo hacemos realidad con transistores; cómo se construye un AND, NOT, OR y NAND; cómo hacer un sumador, contador, registro, etc.
  • Arquitectura de computadoras: cómo las piezas anteriores o los sumadores forman una ALU, registros, interfaz de salida e interfaz de entrada, y cómo unirlos todos. Además, está el reto de la sincronización, ya sea con una arquitectura punto a punto o mediante el uso de buses.

Epílogo

Hay un nivel en la computación en el que estas cuatro disciplinas se unen. Cuando llegues a ello, realmente creo que habrás superado incluso los límites del nivel licenciatura.

Por ejemplo, cuando crees una computadora primitiva con solo compuertas lógicas, habrás mezclado:

  • Matemáticas, para la creación de los planos lógicos y tablas de verdad.
  • Electrónica, para hacerlo realidad.
  • Programación, para programar esa máquina primitiva.

Aunque no redes... a no ser que lo publiques en tu blog, claro.

O cuando crees tu servidor de Minecraft, será programación y redes en su expresión más pura...

Sea como sea, espero tocar todos esos temas en este blog.

Gracias.

         __
      -=(o '.
         '.-.\
         /|  \
         '|  ||
jangelab  _\_):,_