Alan Kay: cómo enseñaría Computer Science 101

«Una de las razones para realmente matricularse en la universidad es trascender la simple formación profesional y en su lugar aferrarse a ideas más profundas.»

Alan Kay: cómo enseñaría Computer Science 101

Reflexionemos un poco sobre esta cuestión. Hace unos años, los departamentos de Computer Science me invitaron a dar conferencias en varias universidades. Casi por casualidad, pregunté a mi primera audiencia, compuesta por estudiantes de último año, posgraduados y profesores, su definición de «Computer Science». Todos solo pudieron ofrecer una definición ingenieril. Hice esto en cada nuevo lugar, y los resultados fueron similares en todas partes.

Otra pregunta fue: «¿Quién es Douglas Engelbart?». Algunas personas dijeron: «¿acaso no estaba relacionado con el ratón de computadora?». (Y eso me decepcionó mucho, ya que mi comunidad científica ha hecho grandes esfuerzos para que la respuesta a esta pregunta fuera accesible después de dos o tres clics y asegurarse de que Engelbart realmente tenía alguna conexión con el ratón de computadora).

Parte del problema radicaba en la falta de curiosidad, en parte en la estrechez de los objetivos personales que no estaban relacionados con el aprendizaje, y en parte en la falta de comprensión de lo que realmente representa esta ciencia, y así sucesivamente.

He trabajado medio tiempo en el departamento de ciencias de la computación de la Universidad de California durante varios años (en esencia soy profesor, pero no necesito asistir a las reuniones del departamento). Ocasionalmente imparto clases, a veces a estudiantes de primer año. A lo largo de los años, el ya bajo nivel de curiosidad hacia Computer Science ha disminuido significativamente (pero también ha aumentado la popularidad, ya que la computación se considera un camino hacia un trabajo bien remunerado si sabes programar y has obtenido un certificado en una de las 10 mejores escuelas). Por lo tanto, ¡ningún estudiante se ha quejado de que el primer lenguaje en la Universidad de California sea C++!

Me parece que nos encontramos en una situación donde ambos valores, 'Computadora' y 'Ciencia', han sido desactivados por conceptos masivos débiles para crear un nuevo término — una especie de etiqueta en unos jeans — que suena bien pero es suficientemente vacío. El término relacionado, que ha sido igualmente desechado, 'ingeniería de software', que, nuevamente, no utilizó las ideas más brillantes de 'programación' e 'ingeniería', sino que simplemente las combinó (esto se hizo intencionadamente en los años sesenta, cuando se inventó el término).

Una de las razones para realmente ingresar a la universidad es salir de la simple formación profesional y, en cambio, aferrarse a ideas más profundas. Me parece bastante razonable que, como introducción a la especialidad, se intente — si es posible, a través de ejemplos — hacer que los aprendices se involucren en problemas reales y empiecen a entender lo que realmente es interesante, importante y central en este campo.

Los estudiantes de primer grado se emocionan cuando se les muestra cómo una regla sobre otra regla se convierte en un ábaco, con el que pueden superar a los chicos de quinto grado al sumar fracciones. Y luego estarán felices de participar en el desarrollo de ábacos mejorados. Han tocado una computadora real — una herramienta física y mental que nos ayuda a pensar. Han aprendido un método realmente efectivo para representar números — ¡más efectivo que lo que se enseña en las escuelas!

Pudieron conectar su idea saludable de 'suma' como 'acumulación' con algo similar con nuevas propiedades poderosas. Lo programaron para que pudiera resolver una variedad de problemas.

También lo ampliaron. Y así sucesivamente. No es una computadora digital. Y no es una computadora con un programa almacenado. Pero es la esencia de una computadora. De la misma manera que el mecanismo de Anticitera — es en realidad la esencia de la computadora y los cálculos.

Alan Kay: cómo enseñaría Computer Science 101

El mecanismo de Anticitera

¿Hasta dónde podemos llegar y cuántas cosas podemos hacer antes de que todo se descontrole y nos perdamos en las abstracciones? Siempre me ha interesado la característica de Alan Perlis — el primer laureado del premio Turing, que posiblemente inventó el término «Ciencia de la Computación» — que en los años 60 dijo: «La Ciencia de la Computación es la ciencia de los procesos». En todos los procesos.

Por la empresa Quora, no intentemos llevar esto más lejos o transformarlo en una dogma religiosa. Simplemente disfrutemos de la idea. Alan Perlis, para pensar mejor sobre nuestro campo. Y especialmente sobre cómo enseñarlo. Ahora necesitamos mirar el significado moderno del término «ciencia», y Perlis estaba bastante seguro de que no debería diluirse con los viejos significados (por ejemplo, como «acumulación de conocimientos») y usos (como «bibliotecología» o incluso «ciencias sociales»). Por «ciencia», él intentaba comprender el fenómeno creando modelos/mapas que intentan mostrar, «rastrear» y predecir fenómenos.

Alan Kay: cómo enseñaría Computer Science 101

He dado algunas entrevistas sobre cómo los mejores mapas y modelos a menudo pueden ser adecuados para una camiseta, como lo son las ecuaciones de Maxwell y otras. La analogía es que existe una «ciencia de los puentes», aunque la mayoría de los puentes son hechos por humanos. Pero una vez que el puente está construido, representa fenómenos que los científicos pueden estudiar, se pueden hacer modelos de muchos tipos a partir de los puentes y formar teorías de «puentes» completas y útiles. La diversión es que luego se pueden diseñar y construir nuevos puentes (ya he mencionado que probablemente no hay nada más divertido que la colaboración de científicos e ingenieros para resolver grandes e importantes problemas).

Alan Kay: cómo enseñaría Computer Science 101

Herbert Simon — ganador del premio Turing y del Premio Nobel — llamó a todo esto «ciencia del artificial» (y escribió un magnífico libro con el mismo título).

Alan Kay: cómo enseñaría Computer Science 101

Permítanme dar un ejemplo. En los años 50, las empresas y universidades construían computadoras de programa almacenado y empezaban a programarlas — y hubo un momento especial, cuando en 1956 apareció Fortran — que no fue el primer lenguaje de alto nivel, pero posiblemente el primero que se hizo tan bien que se utilizó en muchos campos diferentes, incluyendo muchos que anteriormente solo se habían realizado en lenguaje de máquina.

Todo esto generó «fenómenos».

Alan Kay: cómo enseñaría Computer Science 101

John McCarthy

La historia de Lisp es más compleja, pero John McCarthy se interesó por el intento de encontrar una «teoría matemática de la computación» y estaba decidido a hacer que todo funcionara perfectamente. ¡La función eval, que interpreta Lisp, se puede fácilmente imprimir en una camiseta! En comparación con un «sistema de programación», es insignificante. Lo que es más importante, esta «teoría de la computación» tenía una concepción más poderosa que Fortran. ¡Era la mejor idea del puente!

La minuciosidad de Lisp permite que toda la idea de la programación se capte con un par de pulsaciones a un nivel más profundo y se piense en un plano que parece simplemente imposible cuando observas los enormes artefactos (esa es una de las razones por las cuales a los científicos les gusta que la matemática sea compacta y poderosa). La matemática utilizada aquí es nueva, ya que permite conceptos como «antes» y «después», lo que lleva a la «lógica de variable de magnitud», que permite conservar tanto la dependencia funcional como el razonamiento lógico, al mismo tiempo que admite la posición y marcha del tiempo. (Esto todavía no se comprende en nuestra era en el duro mundo de la programación situacional).

Lisp, actuando como un poderoso lenguaje de programación y metalenguaje que puede presentar su propia teoría, es un ejemplo de verdadera ciencia computacional. Si lo aprendes a él y a otras cosas similares, podrás pensar más profundamente y tener más responsabilidad sobre tu propio destino que si simplemente aprendieras a programar en Fortran o sus equivalentes modernos (… así podrás acercarte a los programadores!).

Aprenderás mucho más sobre los tipos especiales de diseño que son necesarios en la computación (por ejemplo, no se suele valorar cuando las computaciones a menudo requieren salir del entorno computacional: una de las características especiales de los cálculos de programas almacenados es que no solo son materiales para el programa, sino materiales para una computadora completamente nueva).

Otra razón para elegir la definición de Perlis es que, en general, la computación está mucho más relacionada con la creación de sistemas de varios tipos que con algoritmos, 'estructuras de datos' o incluso la programación como tal. Por ejemplo, una computadora es un sistema, los cálculos son sistemas, una red local e Internet son sistemas, y la mayoría de los programas deberían representarse como mejores sistemas de lo que son (el estilo de programación antiguo de los años 50 ha perdurado hasta el punto en que parece que la programación debería ser así; nada podría estar más alejado de la verdad).

Internet es un buen ejemplo: a diferencia de la mayoría de los programas en nuestra época, Internet no necesita detenerse para reparar o mejorar algo; se asemeja más a un sistema biológico, según nuestras intenciones, que a lo que la mayoría de la gente considera un sistema computacional. Además, es mucho más escalable y confiable que casi todos los sistemas de software existentes hoy en día. Es algo que realmente vale la pena considerar antes de enseñar a los principiantes en programación conceptos menos potentes.

Entonces, lo que necesitamos hacer en el primer curso de Ciencias de la Computación es tener en cuenta lo que los estudiantes pueden hacer al principio, y luego intentar mantenernos dentro de su 'carga cognitiva', para ayudarles a llegar a lo que realmente importa. Es muy importante 'mantenerse auténtico' y encontrar formas que sean intelectualmente honestas y adecuadas para quienes recién comienzan su aprendizaje. (Por favor, no enseñen malas ideas solo porque parecen un poco más simples; ¡muchas malas ideas en realidad son más simples!).

Los estudiantes deben comenzar creando algo que tenga muchas características importantes que he discutido aquí. Debe ser un sistema de varias partes que interactúan dinámicamente, etc. Una buena manera de decidir qué lenguaje de programación usar es simplemente hacer algo que tenga miles de partes interactivas. Si no lo hay, deberías encontrar uno. Lo peor que se puede hacer es poner a los estudiantes en un camino de fluidez demasiado débil que limite gravemente ideas amplias. Simplemente los mata, y queremos hacerlos crecer, no matarlos.

Sobre la escuela GoTo

Alan Kay: cómo enseñaría Computer Science 101

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster