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
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).