scala - katas - katawars
¿Alguna práctica de codificación de dojo/kata de ideas? (4)
Me pidieron que dirigiera un taller y un dojo de codificación pronto para que las personas prueben Scala e intenten construir algo con él. Todos los asistentes serán nuevos en Scala, y podrían provenir de cualquiera de varios idiomas (supongo que pueden codificar en al menos un idioma general; estoy incluyendo comparaciones de sintaxis con Java, C #, Python y Ruby ).
Parte del atractivo de Scala es que es práctico: puede usarlo como un "power Java" (Java con menos desorden sintáctico, cierres, inmutabilidad, FP, rasgos, objetos singleton, manejo de XML ingenioso, inferencia de tipo, etc. ) que aún se ejecuta en la JVM (y en el .NET CLR supuestamente) y no requiere que cambie las herramientas de compilación, la infraestructura del servidor, las bibliotecas, los IDE, etc. La mayoría de los katas que he visto han sido divertidos, pero no "reales": desafíos matemáticos como el Proyecto Euler, etc. Esto no parece apropiado, ya que estamos tratando de explorar el uso de éste como un lenguaje práctico y del mundo real que la gente podría considerar usar tanto para piratear como para trabajar, y porque la gente no necesariamente estará demasiado familiarizada con ninguno de los dos. Partes más profundas de la sintaxis de Scala o necesariamente de los conceptos detrás de la programación funcional.
Entonces, ¿alguien ha encontrado katas más prácticos y cotidianos en lugar de aritméticos de "resolución de problemas"? Katas, es decir, que pueden probar si el lenguaje, las bibliotecas y las herramientas pueden satisfacer los casos de uso de la programación diaria real que la mayoría de la gente tiene que hacer en lugar de probar. (No es que los que no son prácticos no sean divertidos, pero no son apropiados para el tipo de cosas que me pidieron que ejecutara).
Si no puedo encontrar buenos ejemplos, pienso que podría ser útil intentar construir un catálogo de bibliotecas, el evento es para programadores que trabajan principalmente en la construcción de infraestructura para universidades (y en educación y cultura: museos, galerías, escuelas, bibliotecas y así sucesivamente). Sin embargo, es un poco aburrido, pero es el tipo de cosas en el que los asistentes trabajan en su existencia diaria. ¿Alguna sugerencia?
Aquí hay un curso de capacitación introductoria con licencia de Creative Commons con ejercicios prácticos aquí:
http://github.com/javaBin/scala-training-slides
http://github.com/javaBin/scala-training-code
Las diapositivas están en formato Open Office. Si no lo tiene instalado, puede subirlos a SlideShare, que los convertirá para verlos en línea.
Eche un vistazo a Scala con el ejemplo de Martin Odersky (creador de scala)
La mayoría de los ejemplos de programación en mi blog son, efectivamente, los ejercicios de dojo de codificación. Particularmente la serie de matrices , pero también los puzzles y las 99 cervezas . Ahora, no ignore la serie de matrices por ser "matemática", porque los problemas que me preocupan están relacionados con la construcción de clases en Scala, no con algoritmos sofisticados. De hecho, me saltea los algoritmos matemáticos.
Ahora, 99 problemas de Scala y casi todo, desde el Proyecto Euler, son buenos ejercicios para la parte funcional de Scala, pero entiendo que no es tu énfasis. Recomiendo la answer . El Código Rosetta , al no estar orientado funcionalmente, podría tener ejemplos más generales. Por supuesto, hay muchos ejemplos de Scala , aunque es posible que también desee considerar otras tareas para obtener ideas.
Hay muchas cosas interesantes que aprender sobre Scala, pero hay que tener cuidado al nivel de principiante. Por ejemplo, no hablaría de la inyección de dependencia (tipos propios y el patrón de la torta) o de las clases de tipo (el patrón que simula este tipo de implicaciones).
Mire también el material en el sitio de Scala Lang , particularmente el documento Scala by Example .
EDITAR
Ahora he supervisado varios dojos de Scala, así que aquí hay algunas cosas que he aprendido de entonces:
Problemas: tienen que ser divertidos, no muy fáciles, no tan difíciles, y esa debe ser la opinión de todos .
Utilizamos el sitio Dojo Puzzles , que está en portugués, por lo que no será de utilidad para la mayoría de las personas aquí. Si hay un sitio similar en inglés, me encantaría saberlo.
La forma en que funciona es solicitar un problema aleatorio, examinarlo y discutir para ver si lo recogerá o no, y luego indique que lo usará, que no lo usará, o tal vez lo haga. Lo usaré pero te gustaría ver otro. Esta votación se registra y se puede ver cuántas personas detectaron un problema, lo que ayuda a decidir si lo recogerá o no en primer lugar.
Conocimiento de Scala: resulta que no es tan importante introducir conceptos clave del lenguaje Scala de antemano, especialmente si algunos de los participantes tienen conocimientos básicos.
En mi experiencia, configurar el entorno de prueba con una prueba trivial de "aprobación" y explicar cómo las personas deberían escribir las pruebas a menudo es suficiente para que la gente comience. Si sientes que alguien está luchando para escribir algo, da una explicación rápida y continúa con eso.
Enseñando a Scala: si se propone enseñar a Scala, mantenga las lecciones cortas y haga un seguimiento con un dojo. En este caso, mantenga un conjunto de problemas de dojo que sean adecuados para la lección y, dependiendo de cuántas lecciones desee en un día, abrevie.
Ayuda a imponer restricciones artificiales sobre cómo se debe resolver un problema. Algunos ejemplos de restricciones que he puesto en práctica son clases y métodos de expresión única (es decir, no hay declaraciones múltiples o declaraciones
val
/var
). El punto de estas restricciones es hacer imposible que las personas resuelvan el problema de la forma en que están acostumbradas, lo que les permite explorar el lenguaje en busca de alternativas.
Tengo los resultados finales de tres dojos en mi trabajo actual en este repositorio .
En este momento estamos usando el formato de Kata de Randori , pero sin tiempo ni interrupción fijos, y con retrospectiva al final del dojo, no al comienzo del siguiente. Esto, sin embargo, es justo donde estamos actualmente: hemos experimentado muchas variaciones y todavía estamos evolucionando.
Quizás puedas echar un vistazo al material de Ruby Quiz para inspirarte.