Muy bien. Gracias a todos por venir. Éste es el "Semestre Perdido" en Ciencias de la Computación. Al menos así decidimos llamarle. Si no estás aquí por ésto, estás en la habitación equivocada. Estaremos aquí alrededor de una hora. Primeramente, quiero hablarles un poco sobre por qué creamos este curso. Esta clase se extiende de una observación que Anish, José y yo hicimos cuando fuimos profesores de apoyo en varias clases aquí en el MIT. Básicamente, todos los científicos de la computación, sabemos que las computadoras son excelentes en el desarrollo de tareas repetitivas y automatizando. Sin embargo, se nos pasa que hay muchas herramientas que mejoran nuestros procesos de desarrollo. Podemos ser mucho más eficientes en el uso de nuestras computadoras ya que las empleamos como una herramienta para nosotros, no sólo para crear páginas web o software o ese tipo de cosas… y esta clase es un intento de abordar ésto. Es un intento de mostrarles algunas de las herramientas que pueden aprovechar enormemente en su día a día, en sus investigaciones y en sus estudios. Y será una clase donde les enseñaremos tanto cómo sacar el mejor provecho de las herramientas que ya usan pero ojalá, enseñarles herramientas que no conocían antes y cómo juntarlas para producir cosas más poderosas y cómo juntarlas para producir cosas más poderosas que las que pudiesen coseguir con lo que conocen ahora. Serán 11 clases, cada una de 1 hora tocando un tema en particular. Pueden ver el sitio web en la descripción (https://missing.csail.mit.edu/) con la lista de temas y en qué fecha serán las clases. En su mayoría, serán independientes. Por lo tanto, pueden asistir a las que consideren interesantes. Sin embargo, asumiremos que las tomaron una a una a medida que progresemos, por lo que no se repetirán temas pasados. Por ejemplo, no les estaré enseñando bash de nuevo. También publicaremos las notas de la clase y las grabaciones en el sitio web. No sabemos cuándo exactamente, pero lo haremos. [Nota del traductor:] Obviamente ya están disponibles! Si no no estaría viendo esto usted. La clase la darán 3 maestros: su servidor John, Amish, quien está sentado por allá y José quien no pudo estar hoy pero dará la clase de mañana. Tengan en cuenta que abordamos demasiado para tan poco tiempo, por lo que avanzaremos a pasos agigantados pero en caso de que se atoren en algún tema, no duden en contactarnos. (Concerniente a la clase presencial) Debido a la carencia de tiempo no será posible tocar todas las herramientas detalladamente. Se mencionarán herramientas interesantes y maneras útiles. No necesariamente profundizaremos en los detalles de cómo funcionan o casos de uso más complejos (Concerniente a la clase presencial) Esta clase, en específico, cubrirá prinicipios básicos que utilizaremos en las siguientes clases. Por ejemplo, cómo usar el shell en su terminal. Explicaré qué es para los que lo desconozcan, y después avanzaremos a herramientas más avanzadas. Probablemente, ya se pueden dar una idea de qué vendrá basado en las notas de la clase. Y eso nos trae a la clase de hoy. En esta clase hablaremos de el Shell. Será una de las principales maneras en las que interactuamos con nuestra computadora. cuando quieran empezar a hacer cosas que las interfaces gráficas no les permite hacer. Las interfaces visuales están, de alguna manera, limitadas porque sólo se pueden hacer las cosas que tienen botones, deslizadores o campos de entrada. La mayoría del tiempo, estas herramientas de texto están diseñadas para ser modulares y funcionar entre sí. Y también tener muchísimas maneras de combinarse y programarse. En esta clase nos estaremos centrando en herramientas de texto, también conocidas como herramientas de la terminal. (command line utilities) El shell será en donde harán la mayoría de su trabajo. Para los que no conozcan lo que es un shell, la mayoría de las plataformas proveen un shell por defecto. En Windows, es Powershell, pero también hay otros disponibles... En Linux, encontrarán cientos de terminales, es decir, ventanas que te permiten ver shells. Asimismo, encontrarán diferentes tipos de shell, el más común siendo bash. Conocido como el Shell Resusitado. (Bourne-Again-SHell) Como éste es un shell tan común, será el que utilizaremos en la clase. Si están en MacOS, probablemente tendrán una versión de bash. (Nota del traductor): Las nuevas versiones de MacOS Catalina (10.15) usan zsh, bastante similar a bash. Se abre con la app conocida como Terminal. Tengan en cuenta que la mayoría de esto estará centrado en Linux en términos de cómo lo enseñamos. Sin embargo, la mayoría de estas herramientas funcionan con otros sistemas operativos. Si quieren instalar una terminal y un shell, y no saben cómo hacerlo les podemos ayudar a hacerlo en las horas de tutoreo. También pueden simplemente buscarlo en google como su plataforma + terminal. Entonces... cuando abrimos una terminal, usualmente se verá así. Tendremos una línea hasta arriba. esto se conoce como el Shell Prompt, contiente mi nombre de usuario, el nombre de mi computadora y el directorio en donde estoy. Hablaremos de `paths` o directorios más tarde. Y después sólo hay un cursor esperando a que reciba alguna entrada. Y este es el shell en donde le decimos lo que queremos que haga. Podemos personalizar este prompt, puede no necesariamente verse exactamente como el mío pero se puede ver de diferentes maneras, así, así y así. En esta clase no hablaremos mucho de cómo personalizarlo, eso lo haremos en otra clase. Hoy hablaremos de cómo usamos un shell para hacer cosas útiles. Y esta es la interfaz de texto principal en donde escribimos comandos de texto. En el shell, escribimos comandos. Estos comandos pueden ser bastante simples, usualmente, ejecutaremos programas con argumentos, bueno... y ¿cómo se ve eso? Un programa que podemos ejecutar dentro del shell es `date`. Escribimos "date" y presionamos Enter. Y, naturalmente, nos muestra la fecha y la hora. Asimismo, podemos ejecutar un programa con argumentos, también conocidos como parámetros. Existe un programa llamado `echo`, el cual simplemente imprime los argumentos que le damos. Los argumentos son "cosas" separadas por espacios que le damos al programa. Entonces, podemos decirle "hola" y nos imprime hola. Nuevamente, no del todo sorprendente, pero estos son los básicos de argumentos. También, si se dieron cuenta, dije que los argumentos están separados por espacios. Y podrían preguntarse, pero cómo le hago para que un argumento tenga espacios. Bueno. pues también podemos ponerlo entre comillas y escribir algo como "Hola mundo" en comillas y ahora contiente un argumento nuestro programa que contiene espacios. También se pueden usar comillas simples en lugar de dobles. Hablaremos de las diferencias cuando empecemos a hacer scripts en bash. También podemos utilizar el caracter de escape para un sólo caracter. Todas estas reglas las cubriremos más en específico después. Esperemos que no les den contratiempos con esto. Por ejemplo, si quiero crear un directorio llamado Mis Fotos se crearán 2 directorios, uno llamado Mis y otro, Fotos. Y probablemente eso no es lo que queremos. Ahora... una cosa que probablemente se preguntarán es cómo sabe a qué programas me refiero y cómo sabe dónde están esos programas y qué tienen que hacer? Y bueno, la respuesta es que su computadora tiene programas que vienen instalados dentro de sus computadoras. Justo como podría ir con Windows Explorer, la aplicación de la terminal, Windows Explorer, etc. también viene con aplicaciones centradas a la terminal. Y, estas, literalmente están en el sistema de archivos. Y, el shell, tiene una manera de determinar dónde están esos programas. Báicamente, tiene una manera de buscar en dónde está cada uno de estos programas. Y lo hace con algo llamado, una variable de entorno (conocida en inglés como ENVIRONMENT variable). Es simplemente como una variable que podrían encontrarse en un lenguaje de programación. De hecho resulta que el shell, y el BASH en particular, es un lenguaje de programación. Este prompt que tenemos aquí también puede realizar bucles while, for, condicionales. Podemos definir funciones, entre otras cosas. Esto lo hablaremos en la siguiente clase. Mientras tanto, veamos esta variable de entorno. Debo notar que las variables de entorno se asignan cada vez que iniciamos nuestro shell en automático. No son variables que tenemos que cambiar siempre que abrimos un shell. Hay variables de entorno que nos dicen dónde esta nuestro directorio de HOME (casa), el nombre del usuario y también, muy importante, la variable PATH (en español, camino). Entonces, si imprimimos con `echo` la variable $PATH esto nos mostrará todos los paths (caminos) en donde el shell buscará programas. Se darán cuenta de que esto es una lista separada por dos puntos, lo cual es bastante difícil de leer, pero lo esencial es que cada vez que escribamos el nombre de un programa buscará dentro de esta lista de paths, por un archivo ejecutable que tenga el mismo nombre que escribimos. En mi caso, cuando escribo `echo` buscará en cada uno de estos directorios hasta que encuentre un programa llamado `echo` y lo correrá. SI queremos saber dónde está el programa que corre podemos usar el comando llamado `which`. podemos escribir `which echo`. Esto quiere decir que si fuéramos a correr un programa llamado `echo` lo correríamos de ese archivo en específico. Es imporante mencionar lo que es un path (camino). Los paths son una manera de mencionar la ubicación que tienen tus archivos en tu computadora. En Linux y MacOS los paths están separados por diagonales, específicamente, diagonales para adelante. En inglés conocidos como `forward slashes`: / Y verán aquí que estamos en el directorio `root`, eso es lo que indica el primer slash (diagonal) y nos dice que nuestro path empieza en la raíz del sistema de archivos (file system). Entonces nos vamos al directorio llamado `usr`, después ve en el directorio `bin`y luego encuentra el archivo llamado `echo`. En Windows, los paths se separan por diagonales hacia atrás \\ En Windows, hay una raíz por cada partición. Puede que hayan visto algo como `C:\` a diferencia de Linux o macOS que traen todo bajo la misma 'raíz'. Tal vez se dieron cuenta de que dije la palabra path absoluto (camino absoluto). Los absolute paths son caminos que determinan completamente la ubicación de un archivo. En este caso, estamos hablando de un archivo llamado `echo` en específico. Y nos está dando el camino completo al archivo. También tenemos caminos relativos. Y estos, como su nombre lo indica, están basados en donde estamos al momento. Podemos obtener el path en donde estamos con el comando `pwd`, el cual significa imprime el directorio de trabajo (print working directory).