
Paroxython es un conjunto de herramientas de línea de comandos que etiquetan y filtran por características algorítmicas de su colección de ejercicios de programación de Python.
Eres un maestro, a cargo de un curso de programación introductorio en una institución educativa. Con los años, ha acumulado muchos, demasiados, programas y fragmentos de código que pueden ser de interés para sus alumnos.
O, como desarrollador experimentado, le gustaría compartir su conocimiento ayudando a un ser querido a aprender a codificar. Una búsqueda superficial de material pedagógico produce una cantidad abrumadora de sitios web y repositorios llenos de programas de Python de varios niveles (por ejemplo, 1, 2, 3, 4, 5, 6, y mucho más de Awesome Python in Education).
En cualquier caso, los códigos fuente de Python que ha reunido son típicamente numerosos (cientos o incluso miles), de tamaño razonable (cualquier cosa por debajo de 100 líneas de código) y de naturaleza educativa (por ejemplo, fragmentos, ejemplos, manchas, soluciones de ejercicio, algoritmos clásicos). Los conceptos de programación que planea enseñar siguen siendo un nivel relativamente bajo (por ejemplo, tareas, bucles anidados, patrones de acumulación, funciones recursivas de cola, etc.).
Si todo eso suena familiar, sigue leyándome.
Paroxython tiene como objetivo ayudarlo a seleccionar, desde su colección, el único programa que mejor se adapte a sus necesidades. Por ejemplo, con mucho gusto responderá a las siguientes preguntas:
- ¿Cómo se puede ilustrar este concepto?
- ¿Qué problemas utilizan las mismas estructuras algorítmicas y de datos que esta?
- ¿Qué tarea debo dar a mis alumnos para que puedan practicar el contenido de la última lección?
Además, dado que Paroxython sabe lo que su clase sabe, puede recomendar el programa correcto en el momento adecuado:
- ¿Qué haría un buen ejercicio de revisión?
- ¿Qué ejercicios puedo dar en este examen?
- ¿Cuál es el costo de aprendizaje actual de este ejemplo?
A la larga, Paroxython puede guiarte y de alguna manera te hace repensar el esquema de tu curso:
- ¿Cuáles son los requisitos previos para el concepto de asignación?
- ¿Tengo suficiente material para introducir subrutinas antes de hablar sobre condicionales y bucles?
- Entre los bucles, que deben ser lo primero: el más poderoso (
while), o el más útil (for)?- ¿Cómo estructurar lógicamente este montón de patrones iterativos habituales?
- ¿Cuáles son exactamente lo básico ?
¡Todos los problemas sobre los que el autor cambió de opinión desde que comenzó a trabajar en este proyecto!
En un mundo ideal, Paroxython incluso podría poner fin a las guerras religiosas más mortales, con argumentos racionales basados en datos:
- Padre, ¿es un pecado salir temprano?
- ¿Debería un byte real usar una máscara?

Paroxython comienza desde una carpeta dada de programas . Su contenido se analiza, y todas las características que cumplen con las especificaciones proporcionadas están etiquetadas y asociadas con sus tramos (por ejemplo, "assignment_lhs_identifier:a": 4, 6, 18 o "loop_with_late_exit:while": 3-7, 20-29 ).
Estas etiquetas constituyen solo un conocimiento disperso. El siguiente paso es asignarlos a una taxonomía diseñada con limitaciones jerárquicas básicas en mente (por ejemplo, el hecho de que la introducción del concepto de salida temprana debe venir después de la de Loop, que requiere que el flujo de control, se expresa por el "flow/loop/exit/early" ).

Extracto de la taxonomía generada a partir de los algoritmos - Python.
Haga clic para saltar a su versión dinámica completa en el manual del usuario.
Entonces todo se persiste en una base de datos de etiqueta, que luego se puede filtrar a través de una tubería de comandos, por ejemplo:
El resultado es una lista de recomendaciones de programas ordenadas al aumentar el costo de aprendizaje.
Supongamos que el directorio programs contiene estos programas simples.
Primero, cree esta base de datos de etiqueta:
> paroxython collect programs
Labelling 21 programs.
Mapping taxonomy on 21 programs.
Writing programs_db.json.Luego, filtle a través de esta tubería:
> paroxython recommend programs
Processing 5 commands on 21 programs.
19 programs remaining after operation 1 (impart).
18 programs remaining after operation 2 (exclude).
12 programs remaining after operation 3 (exclude).
10 programs remaining after operation 4 (include).
10 programs remaining after operation 5 (hide).
Dumped: programs_recommendations.md.Et voilà, su informe de recomendación!
Para que nadie sea sorpresa:
python -m pip install paroxython
El siguiente comando debe imprimir un mensaje de ayuda y salir:
paroxython --help
Si usa el cuaderno/laboratorio Jupyter, también acaba de instalar un llamado comando mágico. Cargarlo así:
% load_ext paroxython Esto debería imprimir "paroxython 0.7.0 loaded." . Ejecutarlo en una celda del código de Python:
% % paroxython # Lines
def fibonacci ( n ): # 2
result = [] # 3
( a , b ) = ( 0 , 1 ) # 4
while a < n : # 5
result . append ( a ) # 6
( a , b ) = ( b , a + b ) # 7
return result # 8| Taxón | Pauta |
|---|---|
call/subroutine/method/sequence/list/append | 6 |
condition/inequality | 5 |
def/subroutine/function/impure | 2-8 |
def/subroutine/parameter/arg | 2 |
flow/loop/exit/late | 5-7 |
flow/loop/while | 5-7 |
meta/count/program/sloc/8 | 2-8 |
meta/count/subroutine/sloc/7 | 2-8 |
meta/count/variety/3 | 2-8 |
meta/program | 2-8 |
operator/arithmetic/addition | 7 |
style/procedural | 2-8 |
type/number/integer/literal | 4 |
type/number/integer/literal/zero | 4 |
type/sequence/list | 6 |
type/sequence/list/literal/empty | 3 |
type/sequence/tuple/literal | 4, 4, 7, 7 |
var/assignment/explicit/parallel | 4 |
var/assignment/explicit/parallel/slide | 7 |
var/assignment/explicit/single | 3 |
var/assignment/implicit/parameter | 2 |
var/scope/local | 2-8, 2-8, 2-8, 2-8 |
Como puede ver, en este programa, Paroxython identifica entre otros:
style/procedural );def/subroutine/function/impure );while ( flow/loop/while ) con una salida tardía ( flow/loop/exit/late );type/sequence/list/literal/empty y call/subroutine/method/sequence/list/append );var/assignment/explicit/parallel ). Tenga en cuenta que distinguimos entre tareas explícitas (con = ) e implícitas (parámetros y variables de iteración);var/assignment/explicit/parallel/slide ). Si la denominación es exclusiva para nosotros, el patrón en sí ocurre en varios programas: implementaciones de secuencias de finitos C con C más de 1, el mayor divisor común, Quicksort, etc.var/scope/local );meta/count/variety/3 ), dependiendo del número de líneas, características y características distintas. El comando mágico %%paroxython (correspondiente a la tag del subcomando) solo rasca la superficie del sistema. Como se muestra anteriormente, para estimar el costo de aprendizaje de las características y obtener recomendaciones procesables, primero necesitará construir la base de datos de etiquetas con collect , y luego llame a recommend en una tubería suya.
Aunque este sigue siendo un trabajo en progreso, Paroxython ya debería estar bastante bien documentado:
Finalmente, una batería de ejemplos y cobertura de prueba integral debería ayudar a responder cualquier pregunta restante.