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