What was Coding like 40 years ago?

Este video es
presentado por Nebula Classes. Hola, y bienvenidos a un
desafío de codificación muy especial aquí mismo en The Coding Train. Ahora, no estoy seguro de cuándo
estás viendo esto. Si tuviera que adivinar, es
probable, tal vez, 40 años más o menos en el futuro. Voy a intentar
programar mi desafío de codificación más popular en esta computadora Apple II
Plus en Apple Basic. Ahora, si nunca antes has programado
en Basic, no te preocupes. Voy a mostrarte todo lo que
necesitas saber, paso a paso, mientras intento hacer este juego.

Empecemos. (CANTANDO) Codificando juntos. Siempre seremos los mejores
amigos para siempre. Estaré allí cuando sea. Si te sientes mal,
lo haré mejor. Nadie puede medir
el bucle for que tenemos: la alegría, el placer. Así que vamos a
disfrutar del clima. Estos son los días
que siempre atesoraré. [REPRODUCCIÓN DE MÚSICA] Oh, bebé, estamos programando juntos. Siempre seremos los mejores
amigos para siempre.

Codificando juntos. Codificando juntos. ESTÁ BIEN. La plantilla está lista. Estas son gafas falsas. No hay
lentes recetados en ellos. No puedo ver nada. Me estoy poniendo mis
anteojos reales, ¿de acuerdo? Hoy es… dispara. Este reloj Casio no me dice
la hora ni la fecha correctas. Es agosto de 2022. Aquí estoy. Esta es la
computadora Apple II Plus de mi infancia. Empecemos
a ver el código básico. Entonces, lo primero que
quiero mostrarles es que solo en
el símbolo del sistema, con ese cursor parpadeante,
puedo escribir código, como Imprimir– [TECLADO] Oh, escuchen ese
hermoso teclado– "¡Hola, mundo!" También puedo poner una línea
de código en un programa escribiendo un número de línea. Así es. De hecho, tengo que especificar
un número de línea, como la línea 10. No tengo un editor de texto con
números de línea automatizados y todas esas cosas futuras sofisticadas
que tienes.

Ahora, puedo escribir Lista y puedo
ver el contenido de mi programa. Puedo escribir Ejecutar y
puedo ejecutar el programa. Imprime Hello, world! Incluso puedo agregar
otra línea de código, uno de mis
comandos favoritos: Ir a 10. Puedo poner eso en la línea 20. Escriba Inicio para borrar la pantalla,
Lista, ejecute este programa. Y aquí vamos. Va a
imprimir Hello, world! por los siglos de los siglos hasta que
apago la computadora y la vuelvo a encender. [PITIDO] Oh, hermoso pitido. Así que hay mucho más en
Basic, por supuesto, que eso.

Tengo un manual completo aquí. Me encantaría hacer
muchos videos sobre esto. Entonces, si te gusta este,
hazme saber en los comentarios que te gustaría ver
más videos de Apple II. Pero veamos hasta dónde
puedo llegar mostrándoles todo lo que
hay que saber, o lo que sé,
sobre AppleSoft Basic simplemente haciendo el juego Snake. Ahora, una de las cosas
que encontraría en este manual es el hecho de que
hay un modo de gráficos. Y creo que si escribo G-R
, entrará en modo gráfico. Eso fue genial. E incluso está
HGR, que entrará en un modo de gráficos de alta resolución. Tal vez eso sea para otro momento. Hoy, voy a
tratar de hacer Snake simplemente imprimiendo caracteres
en ubicaciones específicas en la pantalla y
animándolos. Así que lo primero que
quiero hacer… oo, tengo que salir de
ese modo de gráficos. Trama, PDL, Texto– ah. Creo que solo escribo Texto. Y estoy de vuelta en el modo de texto.

ESTÁ BIEN. ¡No necesito Google! tengo un manual Tomen eso, futuros programadores. De hecho, voy a
comenzar mi programa en la línea 10 con Inicio. Entonces, cada vez que lo ejecute,
comenzará limpiando la pantalla. También quiero realizar un seguimiento
de los datos asociados con el programa Snake, el
ancho y el alto de mi lienzo, por así decirlo, así
como la posición x e y de la serpiente
y el trozo de comida que está tratando de come. Así que necesito algunas variables. Esto pasa a ser
una pantalla de 40 por 24. Y sea W igual a 40, ese
soy yo creando una variable, asignándole el valor de 40. Y en realidad también
puedo decir sea H igual a 24. Así que puedo poner dos líneas de
código, esencialmente, en una uniéndolas con dos puntos. Y podemos echar un
vistazo al programa. Y vemos lo que tengo hasta ahora. Ahora, es
importante que deje espacio entre la línea 10
y la línea 20 porque ¿adivinen qué? Si quiero poner una línea
de código entre esos, no tengo copiar y pegar.

No tengo cosas para mover
, no puedo editar. Tendría que
escribir una nueva línea de código. Y ahora, solo puedo poner– 1, 2, 3, 4, 5, 6, 7,
8, 9– líneas de código entre 10 y 20. Hasta ahora, no necesito eso. Comencemos con la
posición x de la serpiente. Así que solo diré x– y en el medio
de la pantalla– y. ESTÁ BIEN. Entonces, ¿cómo coloco un personaje
en un lugar en particular? Podría
buscarlo en el manual. Pero sé que
los comandos son HTab y VTab para posición horizontal
y vertical. Y luego, puedo decir
Imprimir, y usemos S.

Y digamos rápidamente
Ir a 40 en la línea 60, para que el programa siga
ejecutándose, como un ciclo de dibujo, por así decirlo. [DING] Y ahí vamos
, tengo una S justo en el medio de la pantalla. Y puedo presionar Control-C para
salir del programa en la línea 60. Lo siguiente que me
gustaría hacer es animar S. Entonces, en lugar de simplemente
imprimirlo en una ubicación, quiero incrementar el valor
de x e imprimirlo otra vez.

Incrementa el valor de
x e imprímelo de nuevo. O, en realidad, y o decrementan
según la interacción del teclado. Ahora, estoy notando que solo
tengo flechas izquierda y derecha. No hay flecha arriba y abajo
en este teclado. Así que usemos W para arriba,
S para abajo, A para la izquierda, D para la derecha. Necesito manejar la
interacción del teclado. Ah, ja. Me gustaría tener una
función separada que se encargue de leer la
entrada del teclado y luego cambiar los valores de
x e y en función de la entrada que reciba del teclado. ¿Cómo escribo una función? Bueno, otra palabra que
podría usar es subrutina.

Y de hecho, eso es exactamente
lo que voy a hacer. Y si crees que te
gustó el comando GoTo, bueno, tengo noticias para ti. Hay otro comando que
me encanta aún más llamado GoSub, o Go Subroutine. Así que en realidad voy
a borrar la línea 60 y decir ir a GoSub con
un número de línea muy, muy lejano que no pueda
estropear con las líneas de código que estoy escribiendo en este momento , digamos 1000. Luego, agregaré mi GoTo
línea 40 en la línea 70. Ahora, necesito escribir mi
subrutina, mi función, en la línea 1,000. ¿Qué debo hacer? Necesito escribir una línea de
código que me diga qué tecla se presionó por última vez en el teclado. Y esa información
está en algún lugar de la memoria de la computadora. Y si pudiera tener acceso
a la memoria de la computadora. Sé que está en este manual aquí. Pero también es… ven conmigo. También está aquí
en este cartel : Peeks, Pokes y Pointers.

Si quiero leer la
memoria de la computadora directamente, solo puedo echar un vistazo a la memoria. Si quiero escribir en
la memoria de la computadora, puedo empujar la memoria. Tenemos acceso directo a
la memoria de la computadora. Y en algún lugar
aquí, me va a decir que para
leer el teclado, necesito mirar
la dirección de memoria 49152. Así que voy a
poner una variable, llamémosla K. Mire, miremos la dirección de memoria 49152
Luego, solo para
fines de depuración , imprimamos ese valor. Y luego, cuando la
subrutina haya terminado, debemos volver a donde
estábamos previamente en el código. Esa es la línea 70. Y la forma en que lo
hacemos es con Return. Echemos un vistazo
a todo el programa de nuevo. Y démosle una oportunidad. Entonces, la última tecla que presioné fue 13. No estoy seguro de qué presioné
para obtener el valor de 13. Pero veamos qué es W: 215.

S es 211. 196 es D. 193 es A. Así que en la línea
10 I Voy a consultar si K es– es igual a– y, por cierto,
esta es una declaración if. Así es como se escribe una
instrucción if en Apple Basic. Creo que 196 fue D? Entonces x es igual a x más 1. Así que solo verifiquemos
si presionamos hacia la derecha. Así que creo que si presiono D, ahí vamos. ¡Guau! ESTÁ BIEN. Así que S llenó la pantalla. Pero esto es emocionante
porque está funcionando. Y dio un poco de
vuelta, y luego llegó a una cantidad ilegal. Nos ocuparemos del manejo de algunos errores
en un momento. Vamos a empezar a sumar,
ahora, a la izquierda. Creo que eso fue 193? 215 estaba arriba, creo. 211, creo, estaba caído.

Necesito mi Retorno. Intentemos darle una oportunidad. Mira este. ¡Vaya! ¡Guau! Eso fue divertido. ESTÁ BIEN. Ahora, está animando un
poco rápido, lo cual está bien. Pero me gustaría
poder ralentizarlo. Creo que va a ser bastante
difícil para mí jugar a este juego corriendo tan rápido. Entonces creo que, si la memoria no
me falla, la forma en que esto
se hace normalmente es escribiendo un
ciclo for que solo cuenta un montón de
números antes de que pueda pasar a la siguiente línea de código.

Y uno pensaría que eso
no causaría mucho retraso. Pero en esta computadora,
es una buena solución para esto. Entonces, en realidad, justo antes de la
línea 70, donde digo Ir a 40 , pongamos esto en la línea 65 , escribamos un bucle for. ¿Cómo escribo un bucle for? Digamos que For N
es igual a 1 a 100 , intentemos correr
de 1 a 100, Next N. Así que no pasará nada
en ese bucle for. Solo voy a ejecutarlo. Y veamos. Y mira. Ahora, está funcionando un poco más lento. Y podría sentarme aquí y
dibujar una hermosa espiral.

Entonces, ¿qué más necesito? Necesito agregar algo de comida. Y luego, necesito que la serpiente
crezca cuando coma la comida. Pero en este momento, la serpiente solo está
creciendo porque solo veo todas las S. Lo que debo hacer es borrar
la S después de imprimirla. Así que podría agregar,
en la línea 35, Inicio. Y luego, a los 70, podría
decir GoTo 35 en su lugar. Probemos eso. En realidad funciona bien. Me preocupaba tener
demasiado parpadeo allí. Y eso podría convertirse en un problema
en algún momento, en cuyo caso, lo que en realidad
querría hacer es simplemente imprimir un espacio sobre
la ubicación anterior de la S. Pero veamos hasta dónde
podemos hacer que funcione simplemente usando Inicio esencialmente
como un fondo– borrar el fondo. Y luego, me estoy dando cuenta aquí– espera. Me estoy poniendo la gorra para pensar, no, espera, mis
anteojos para pensar. Ah, ja. Agreguemos una matriz. Entonces, la serpiente, en lugar
de ser una x y una y, en realidad debería ser una serie
de x e y, dependiendo de qué tan larga sea la serpiente.

Ahora, no tengo la capacidad
de tener una matriz de tamaño variable. Solo tengo una matriz fija. Pero si pido, digamos, 100,
200 o 1000 puntos en la memoria , no sé
cuánto espacio puedo pedir, entonces
puedo suponer que la serpiente nunca tendrá
más de una cantidad fija. Así que cambiemos la
línea 30 a, en lugar de Let x, digamos Dim x– Dim para Dimensionalidad. ¿Cuál es la dimensionalidad
de la matriz? Y podría ser de
múltiples dimensiones. Voy a quedarme con
una matriz unidimensional. Y vamos con una
longitud fija de 100 por ahora. Así que ahora tengo una
matriz con 100 puntos para x y 100 puntos para y. Luego en línea, quedando sin
espacio para mis líneas de código. Luego, deje que el primer
elemento de la matriz sea 20. Y el primer elemento
de la matriz y sea 12. Pero en realidad no
quiero usar 1. Lo que quiero usar es
¿cuál es la longitud actual de la serpiente? Así que necesito otra
variable, a la que llamaré L. ¿Qué tal
si la llamo L por Longitud? Así que pongámoslo en la línea 15.

Deje que L sea igual a 1. Entonces, lo que quiero
es decir x índice L. Probablemente debería haber
mantenido mi variable x e y y simplemente poner el nuevo
resultado en la matriz porque ahora tengo que
arreglar en todas partes. Pero me siento bien
por hacer eso. Puedo hacerlo. Puedo manejarlo. Es solo escribir. Y de hecho, esta
línea 40 va a cambiar pronto, como verás. Pero vamos a obtener lo
que teníamos antes de trabajar. [REPRODUCCIÓN DE MÚSICA] ¿Es este el mismo
programa que teníamos antes? Vamos a averiguar. Luciendo bien. Ahora, debemos elegir una
ubicación para la comida que la serpiente está tratando
de obtener y luego imprimirla también en la pantalla. Me estoy quedando sin
líneas de código aquí. Entonces, escribamos una
subrutina para tratar con la inicialización de la comida. Voy a poner
eso en la línea 17. Voy a decir GoSub 2000. Así que 2000 será mi trabajo
con la comida. Y de hecho puedo poner
comentarios en mi código con R-E-M, Rem, para comentarios. Luego, escojamos un lugar
para la exposición de comida.

Lo llamaré Fx. Y necesito obtener
un valor aleatorio. Así que voy a buscar en
mi manual aquí, otra vez. R-N-D para aleatorio está en la página 102. "Devuelve un número real aleatorio
mayor o igual que 0 y menor que 1". Ah, y requiere
un argumento, donde si paso un número
mayor que 0, obtengo un nuevo número aleatorio
cada vez que se usa. Este va a ser un
número entre 0 y 1, multiplícalo por el
ancho y conviértelo… oh, no. [RISAS] Esto no es un editor de texto. Y luego
conviértalo a un número entero porque la posición de la comida
no puede ser un número decimal. Creo que esto es bueno. Luego, la posición en Y
para la comida… OK. Entonces, Regreso. Entonces, entre las líneas 50
y 60, ahora querría imprimir F para la comida
en la ubicación Fx y Fy. Así que hagamos eso en la línea 55. Oo. Oh chico. Algo loco
está pasando aquí. ¡Ay, mira eso! HTab Fy– eso es un error. Probablemente lo hayas notado. No hice. VTab. Error de cantidad ilegal en 55.

OK. Línea 55. ¿Acabo de elegir un
valor aleatorio incorrecto? Vamos a depurar esto. [MUSIC – "EYE OF THE TIGER"] Podemos unir más de
una cosa mientras imprimimos con punto y coma. Así que imprime Fx, dos puntos,
espacio, luego Fy. ¿Y por qué esos valores son 0? ¡Ay! [RISAS] No puedo creer que me perdí esto. Está bien, mira esto. Línea 17– GoSub 2000. ¿Qué sucede en 2000? Establezca Fx e y en función de un
número aleatorio multiplicado por W. ¿Cuál es el valor de W? Bueno, ¡estoy inicializando
el valor de W en la línea 20! ¡Eso es después de la línea 17! ¡Todo este tiempo! ESTÁ BIEN. Lo tengo ahora. Cambiemos esas
dos líneas. Entonces, 17 será Sea W igual a 40. Sea H igual a 24. La línea 20 será GoSub 2000. Puedo deshacerme de un montón
de otras cosas de depuración que agregué allí. Limpiando la pantalla, Inicio, atrás.

Y vamos Aquí vamos. Tengo mi comida. ¿Ver? Está parpadeando. Me está molestando. Me molesta el parpadeo. Voy a
deshacerme de la pantalla de Inicio, borrar, en la línea 35,
que si recordará, ahora estoy viendo el
rastro completo de la S. Tomemos la línea 40, donde
voy a la x y la posición y e imprime S, y
pongámoslo en su propia subrutina. Porque en última instancia,
ahí es donde voy a tener que hacer un ciclo
para la matriz y todo de todos modos, así que necesito
hacerlo en otro lugar. Línea 3000. Y tampoco dirijo más la línea
50. Así que 3000– lo que
debo hacer es decir– ah. Ah, ja. Espera un segundo. Espera un segundo. Este ir sub 1000,
que mueve la serpiente, también debería ser parte de
lo que estoy a punto de hacer. Así que deshagámonos
de la línea 60 también. Si solo tuviera lo que tenía antes,
diría HTab x index L, VTab tab y index
L. Luego, Print– ahora, esto es un
poco loco, pero voy a imprimir el espacio porque
lo que Lo primero que voy a imprimir es borrar la S anterior.

Luego
puedo ir y mover la serpiente en función de la interacción del teclado
, que es GoSub 1000. Y luego, puedo
actualizar la ubicación. Esto finalmente será un bucle, que haré a continuación, Imprimir "S". Y 3050 sería Retorno. ESTÁ BIEN. Entonces la S está parpadeando. Eso es lo que quiero. Pero fíjate, la F no lo es. Ahora, solo para que esto
funcione más correctamente, en lugar de hacer HTab
x(L), VTab y(L), Imprimir "S", eso debería ser un bucle allí. Tengamos 3025
porque quiero agregar el bucle antes de ese HTab. Para I– usaré Index, I–
es igual a 1 a L. Luego, 3030 debe ser HTab
x(I), VTab y(I). Y luego, imprime "S". Y luego, 3050 es Next I.
Y 3060 sería Return. Ahora, eventualmente, la
serpiente tendrá sus posiciones más antiguas en la matriz. Tal vez su
posición reciente debería estar siempre al final de la matriz,
y su posición más antigua al comienzo de la matriz. En cuyo caso, la línea 3000 en
realidad debería ser HTab x(1) — índice 1 — porque siempre
quiero borrar solo la posición más antigua de la serpiente.

Ahora, averigüemos si la
serpiente se ha comido la comida. Justo antes de ir y hacer
la entrada del teclado, no, justo después de hacer la entrada del teclado
, voy a hacer otra subrutina, 4000. Y luego, quiero decir Si , bueno, en realidad, solo quiero
haz esta subrutina si la serpiente ha conseguido la comida. Entonces, en lugar de que If
esté en la subrutina,
digamos en la línea 3022 si x índice L, que sería el
lugar más reciente para la serpiente, es igual a Fx e y índice L
es igual a Fy, entonces GoSub 4000. Y ahora mismo en 4000,
digamos Imprimir "Yum". A ver
si consigo esa comida. ¡mmm! Bien, eso está funcionando. Pero en lugar de imprimir
yum, ¿qué quiero hacer? Quiero decir que L es igual a L más 1. Entonces, ¿debo decir que la
nueva posición L de la serpiente es igual a la posición más reciente? L menos 1? Intentemos esto ahora.

¡Vaya! No, no Corre, ahí. Retorno. Oh sí. ESTÁ BIEN. Esto es bueno porque
ahora, la serpiente está funcionando
con un punto adicional y no estoy borrando correctamente. No hay problema. En cada cuadro de animación,
necesito barajar todas las posiciones en la matriz. Muy bien, estoy
viendo mi subrutina 3000. Estoy borrando el punto más antiguo
de la serpiente. Luego, antes de ir a animar
la serpiente según el teclado, deslicemos todo hacia abajo
en la matriz, que será una subrutina en la línea 5000. Lo refactorizaré más adelante. (CANTANDO)
Refactorizaré esto más tarde. Porque I es igual a 1 a L menos 1. X índice I– I más 1. Y índice I es igual a
y índice I más 1. Esto es barajar
todo en la matriz. Ahora, aquí está la pregunta. Cuando L es 1, ¿
va a hacer esto? no debería Pero no sé qué
va a hacer este ciclo For con For I igual a 1 a 0.

Así que digamos que solo si L
es mayor que 1, entonces GoSub 5000. ¿Correcto? No quiero hacer esto si
L es 1 porque esto no va a funcionar. Esos valores no existen. ESTÁ BIEN. Eso tiene más sentido. Ahora, oh, Dios mío, ¿ cuál es la probabilidad de que esto funcione? No, baja. ESTÁ BIEN. ¡Sí, ahí vamos! Mire, mi serpiente tiene una longitud de 2. Mi serpiente es… vaya. De alguna manera funcionó. Esperar. Todo bien. Así que una cosa también debería suceder. Cuando utilizo GoSub 4000, también
necesito mover la comida. Y creo que eso va a
ser… tal vez esté causando un problema. Así que también necesito
GoSub 2000 nuevamente. Así que 4000… antes de que
salte de aquí, 4025, vamos a GoSub. Estoy bastante
seguro de que fue 2000 el que eligió una nueva ubicación de comida. Intentemos esto. Sí. ESTÁ BIEN. La comida se movió. Saltó después de que me lo comí.

Oo, por qué– funcionó
para los dos primeros. No sé si
este es el problema, pero me estoy dando cuenta de
que el hecho de que estoy imprimiendo F una y otra
vez es innecesario aquí. ¿Dónde imprimo F? Línea 55. Como ya no estoy limpiando
con mi casa, solo necesito
imprimir F en el momento en que escojo la ubicación
para la comida aquí, subrutina de la línea 2000. Así que agreguemos 2025. Y luego, la línea 55
ya no es necesaria. Entonces, veamos. Para que la comida esté ahí. Captura la comida. Tengo dos S. ¡Vaya! Espera un segundo. Puedes ver que
continúa borrando lo mismo– ah. De alguna manera, ese primer
lugar en la matriz no se mueve junto con él. ¿Derecho? Porque solo está
parpadeando allí. Eso es en realidad una buena pista. ¡Vaya! (RÍE) Sé
cuál es el problema. ¿Por qué solo funcionaba cuando
la matriz tenía dos pero no tres? Me falta un
aspecto clave del ciclo aquí.

Miren este ciclo donde
estoy imprimiendo todas las S– Next I. Miren este loop–
no Next I. Muy bien, amigos. Bien, dos S. Tres S. ¿Puedo ver un cuatro S? ¿Cuatro? ¿Cinco? Creo que tenemos nuestro
juego de serpientes, gente. Esto está funcionando
muy, muy lento. Justo aquí,
dupliquemos la velocidad. Ahora, por supuesto, no he
incorporado nada para probar si estoy golpeando
el borde de la pantalla o si la serpiente se está
pasando por encima de sí misma. Pero eso
arruinaría la diversión de poder jugar esto para siempre.

Voy a deshacerme
de ese bucle por completo. En realidad, no voy
a deshacerme de él por completo. Hagamos
un ciclo de 1 a 2. Supongo que HTab y VTab
realmente ralentizan las cosas. Creo que es solo
una computadora vieja. Quiero decir, no pretendo
ser mala contigo. Eres mi amigo, Apple II Plus. [PITIDO] Oh. Cantidad ilegal en 2025. Ah. Por lo tanto, eligió una ubicación no válida
para la comida, probablemente porque una de
las posiciones que podría elegir es 0, que no es una posición válida de
columna o fila. Así que hay más que
tengo que hacer aquí, ¿verdad? Necesito hacer una
verificación de errores para asegurarme de que la comida siempre se elija
entre 1 y 40, y 1 y 24. Necesito asegurarme de
que no se permita que la serpiente se salga del borde (el juego terminó) o
corra en sí mismo: el juego ha terminado. Voy a escribir
ese código básico, reorganizarlo,
limpiar los números de línea, agregar algunos comentarios de código,
mostrarles cómo se ve aquí. También, en caso de que no
tenga su propio Apple II Plus sentado
y quiera probarlo usted mismo, voy a incluir enlaces a
un montón de emuladores diferentes que encontré en la web que usted
podría intentar ejecutar este código y modificarlo.

Y realmente espero que hagas
tu propia versión del juego de la serpiente en Basic y la
compartas conmigo en el enlace del
sitio web de Coding Train que te estoy mostrando ahora mismo. Pero si le gusta aprender acerca de la
programación básica de AppleSoft en un Apple II Plus,
tal vez tenga un amigo que nunca antes haya programado
y quiera aprender a programar desde cero en Basic. ¿Adivina qué? Acabo de hacer un
curso completo sobre cómo codificar, qué
es codificar, con Basic, relacionándolo con los
lenguajes de programación modernos tal como están hoy. ¿Y dónde está esa clase? Lo estoy mirando ahora mismo. Se encuentra en la
primera biblioteca curada del mundo de clases prácticas que
pertenecen y son operadas por creadores. Hay nuevas clases que se
lanzan todo el tiempo. Si estás interesado
en hacer videos, como yo, una de las
clases que estoy viendo estos días
para mejorar mi juego es el
video Rapid Turnaround de Rene Ritchie.

Quiero decir, ciertamente, si
estás interesado en Apple, es posible que conozcas
el canal de YouTube de Rene Ritchie. Tiene un curso. El curso que he estado
viendo en este momento, ya que hago muchas transmisiones en vivo,
es ser tú mismo frente a la cámara con Luria Petrucci. Está el curso de Philip Damico
sobre animación de siguiente nivel. Hay negocios
101 para creadores. Tantas clases
y charlas de nebulosas, que son
conferencias invitadas inspiradoras de formato corto. Si ya está
suscrito a Nebula, del que he hablado
antes en mi canal , puede actualizar a Classes
por solo $5 al mes. Si es nuevo en Nebula,
nunca ha oído hablar de él, vaya a
nebulaclasses.com/CodingTrain. Son $10 al mes, o
$100 al año. Sin embargo, a través de ese
enlace puede obtenerlo por $ 80 durante todo el año.

Suscribirse a Nebula
Classes también te da Nebula. Hay más de 14 000 videos
de tus creadores favoritos, así como docenas de
originales de alta producción, contenido que
no puedes encontrar en YouTube. Al suscribirte a Nebula
y ver mi clase– Todo sobre Apple
Basic y Qué es el código– estás apoyando a
The Coding Train. Y creo que también
descubrirás un montón de otros contenidos que realmente te encantarán. Espero verte allí. Gracias por ver. Y hasta la próxima. No sé dónde… JavaScript,
procesamiento básico, ¿quién sabe? Dígame usted. Adiós. [TEMA MUSICAL].