Una época de regalos

Una época de regalos

Esta charla se presentó como keynote de PyCon Latam 2022, 2022-08-27

Buenos días. Estoy encantada de hablar con ustedes hoy. Es un honor y un reto dar esta charla tanto en español como en portugués, hablando a (casi) toda América Latina.

Antes de empezar, quiero compartir mi proyecto actual. Me jubilé hace dos meses y ahora tengo tiempo para apoyar a las comunidades de Python. Quiero ofrecer mis 20 años de experiencia como regalo a cualquier comunidad de Python en todo el mundo que lo desee. Si desean consejos sobre cómo construir y administrar comunidades, mejores prácticas, códigos de conducta, inclusión, lo que sea, me encantaría ofrecerles mi consejo y ayudarlos a pensar en esos temas. Para obtener más información, visiten naomiceder.tech/community o ponganse en contacto conmigo en info@naomiceder.tech.

El título de esta charla es "Una época de regalos", inspirado por una joyita de memorias de viaje escrita por Patrick Leigh Fermor. En los años 30 Fermor, después de ser expulsado de su último año de "public school" por no haberlo tomado en serio lo suficientemente, decidió caminar desde Los Países Bajos por el Rin, a través de Europa, por el Danubio y finalmente a Estambul. El tardó más de un año en hacerlo, y el enfoque del libro no es los lugares que visitó, ni los eventos históricos que se desarrollaron a su alrededor (cruzó Alemania y Austria cuando los Nazis llegaron al poder, pero parece que apenas se dio cuenta). Más bien, Fermor está siempre más interesado en las personas que conoció en el camino: barqueros y camioneros, granjeros y comerciantes, incluso un aristócrata ocasional, cuyos regalos de comida, refugio y compañía lo ayudaron a mantenerse en el camino.

Para mi, tal vez para muchos de ustedes, mi tiempo en esta comunidad ha sido un época de regalos, regalos que me han sostenido de muchas maneras en mi viaje durante los últimos 20 años a través de vários continentes, a través de dos géneros y a través de mi vida. Eso me hizo pensar sobre cómo valoramos y compartimos los regalos de nuestra comunidad y cómo muchas personas han comparado las comunidades Open Source como la de Python a una economía de regalos.

En PyCon US escuché a alguien decir, "En Python la gente entiende cómo funciona Open Source." Quizás. Pero tengo dudas de que ese entendimiento sea el mismo para todos. Existen muchas formas de ver las comunidades y yo creo que tienen sus diferencias entre ellas. Pero creo que sí es importante que las comunidades piensen y articulen sus principios, y quiero presentar una forma de pensar en nuestra comunidad que tenga sentido para mí. Ojalá que inicie unas discusiones.

Yo creo (espero al menos) que lo que voy a decir tenga resonancia para la gente de América Latina, ya que muchos de ustedes han experimentado culturas de regalo similares en sus redes familiares y también han visto el daño que puede causar la explotación de recursos y comunidades por dinero.

Por supuesto, lo que voy a decir es solamente mi opinión - me jubilé de la junta directiva de la PSF hace dos años, por favor no les echen la culpa a ellos.

Yo diría que, como una comunidad centrada en un lenguaje y un ecosistema open source, tenemos una orientación de regalos. La definición breve de esta orientación es que la gente contribuye cuando y cuanto puede, y a su vez confía en recibir recursos y ayuda de otros en la comunidad cuando los necesitan.

Estamos tan acostumbrados a los valores de una economía de mercado que nos resulta difícil entender cómo funcionan estos regalos. La entrega de regalos no es como el trueque: los regalos generalmente no se intercambian al mismo tiempo, ni el objetivo es dar regalos de valor equivalente, de modo que todos salgan "iguales".

Más bien, una persona contribuye con algo y en algún momento recibirá algo que necesita de otra persona. Nadie tiene derecho a exigir un regalo, pero aún así, se acepta que todos contribuirán como puedan. Por ejemplo, en las sociedades de cazadores-recolectores, si alguien mata o encuentra algo de comida, lo comparte con todo el grupo, sabiendo que todos los demás harǻn lo mismo.

Este estilo de dar regalos o contribuciones mutuas es lo que vemos en nuestras comunidades de Python - algunas personas están contribuyendo con código, otras con documentación, y trabajan para realizar eventos para su comunidad. Todos estos regalos se otorgan sin obligación y todos disfrutan de los beneficios, ¿no? Algo así como una comuna anarcosindicalista, o como lo que tenían los animales en Animal Farm hasta que los cerdos se convirtieron en dictadores totalitarios.

Y creo que para muchos de nosotros que amamos a esta comunidad, esta es la narrativa a la que recurrimos, particularmente en esos momentos nostálgicos que al menos los ancianos como yo experimentamos en cada PyCon.

Sin embargo en esos momentos nos olvidamos de que las cosas nunca son tan perfectas, tan sencillas o tan idílicas. Como Python, nuestra comunidad, nuestros proyectos y nuestras reuniones han crecido, la situación no es tan clara. De hecho, mucha gente tiene dudas sobre si este modelo de open source alimentado por regalos todavía sigue siendo sostenible.

Supongo que una parte del problema es que el mundo de open source en general y de Python en particular han tenido casi demasiado éxito. Si bien hemos crecido en casi todos los aspectos, el número de usuarios y sus demandas han crecido exponencialmente más rápido. ¿Cómo pueden grupos tan pequeños de voluntarios sostener una comunidad y un lenguaje utilizado por millones?

Es fácil de encontrar varios ejemplos de cosas que salen mal. Un problema es el agotamiento por parte de los voluntarios que hacen que todo funcione. Muchas veces he visto lo que llamo 'estrellas fugaces', personas que irrumpen en escena y comienzan a contribuir a la comunidad, a menudo de múltiples maneras, mostrando cantidades sobrehumanas de energía y entusiasmo. Parece que solo unos meses después de sus primeros eventos, están organizando otros eventos, impartiendo cursos, contribuyendo con código y más. Estos recién llegados son tal exitosos, tan ansiosos de ayudar, que nosotros felizmente les damos más y más que hacer, hasta el punto de que los veteranos como yo comenzamos a preguntarnos, "¿cómo es posible que alguien pueda hacer todo eso?"

La respuesta suele ser que no pueden, al menos no por mucho tiempo. En estos casos, comenzamos a notar que se ven cansados, que el entusiasmo se desvanece mientras la carga de trabajo continúa aumentando. Algunos me han llevado a un lado para preguntarme cómo lidiar con el estrés, cómo mantener todas las pelotas en el aire… y cuando les digo que la respuesta es hacer menos, nunca lo aceptan. Oh, se nota que les encantaría creerlo, pero ahora no tienen tiempo. Tienen un evento para organizar, una revisión o blog post para editar, código para escribir, o llamadas para unirse.

Y después de pocos meses, o un par de años, ellos desaparecen. Los correos quedan sin respuesta, los plazos se retrasan, las pull requests se ignoran, las llamadas se pierden, y tal. Las demandas de todo lo que estaban haciendo como voluntarios combinadas con las demandas del trabajo, las necesidades de la familia, etc, literalmente les han quitado toda la energía. El tanque está vacío y no tienen más para dar, y la relación entre ellos y la comunidad se daña, a menudo de manera irreparable.

También he visto personas que comenzaron más moderadamente, y construyeron su trabajo a lo largo de los años hasta que se convirtieron en key developers, o maintainers, o organizadores clave de la comunidad. Han estado haciendo lo que hacen durante mucho años, por lo general reciben más quejas que elogios, y sienten que su trabajo se da por sentado. En muchos casos, creo que han invertido demasiado para alejarse, pero están cansados, y se preguntan cuánto tiempo más podrían aguantar.

A veces estos líderes han dado más que nadie, y resulta que ellos manejan su proyecto solos. Poseen todas las credenciales, y cada vez que se necesita hacer algo, todo tiene que pasar por ellos. Cuando se les anima compartir la carga, tienden a explicar que pueden manejarla bien y, además, es más trabajo capacitar a nuevas personas que hagan el trabajo. O tal vez sienten que no tienen el conocimiento ni el tiempo para incorporar a nuevas personas.

Cualquiera que sea la causa, todo el tiempo también vemos personas que están ansiosas por unirse a un proyecto de código o un esfuerzo comunitario y ayudar, que terminan siendo rechazadas. Al menos una vez a la semana veo alguien cuyas ofertas de ayuda sinceras, incluso ansiosas, terminan siendo ignoradas por una variedad de razones: nadie tiene el tiempo para incorporarlos, lo que les interesa tiene suficiente gente involucrada, están preguntando en el lugar equivocado, están tratando de entrar en un nivel demasiado avanzado, o lo que sea.

Muchas veces me parece que muchos otros simplemente pasan desapercibidos. Y en estos casos, cada vez que intentan involucrarse y de alguna manera son rechazados, es menos probable que lo intenten otra vez, y terminamos perdiéndolos

El resultado es que nuestros proyectos y nuestras iniciativas comunitarias corren el riesgo de ser abandonados, cuando las personas se agotan sin ser reemplazadas. Así resulta que muchas veces nos encontramos proyectos de open source abandonados, con asuntos sin respuestas, PR's ignoradas, y dependencias desactualizadas. O iniciativas con listas de correo silenciosas, slacks vacíos,et cetera.

Algunos aún dicen que los proyectos open source simplemente funcionan así. Hace un par de meses yo estaba leyendo un artículo sobre la sostenibilidad de open source y un maintainer de varios proyectos de Javascript describió open source como "un modelo que se basa en que las personas dan más de lo que pueden por muy poco o nada a cambio, y con la esperanza de que haya alguien que se haga cargo del manto cuando la persona anterior se queme".

Esa descripción de cómo funciona open source me dice que si de hecho somos una cultura de regalo (y yo creo que lo somos) las cosas van mal. Tenemos personas que dan más de lo que pueden sostener y otros que son capaces (apenas) de sostener lo que dan, pero sienten que no están recibiendo nada a cambio. Ese sentimiento puede empeorar al ver incluso a empresas de Fortune 100 que utilizan su trabajo en lugar de sistemas que solían costar cientos de miles de dólares en derechos de licencia, sin reconocimiento y sin devolver una pequeña fracción del dinero que están ahorrando. Y hay otros que sienten que sus regalos son rechazados. Esto último también es grave: en una cultura de regalo rechazar el regalo de alguien es un insulto, es una forma de decir que no los quieres en la comunidad.

Entonces claramente como una comunidad de open source nos enfrentamos a desafíos. La pregunta es ¿qué hacemos? ¿Qué podemos hacer? Para mí el primer paso es entender lo que está pasando y las motivaciones y valores que están impulsando el comportamiento de la gente.

La manera en la que piensas en algo, la narrativa que te dices, tiene un impacto en cómo lidias con ello, y algunas maneras de pensar en un problema pueden de hecho impedir que lo soluciones. Sé por mi experiencia personal que, a veces, cambiar o aclarar la narrativa puede ser un primer paso importante para manejar mejor una situación.

Entonces, ¿qué impulsa a comunidades como la nuestra? ¿Por qué estamos en una conferencia en que hay tanta discusión sobre la comunidad? Hace veinte años, la interpretación más popular, popularizada en cosas como La Catedral y el Bazar, era que open source estaba impulsado por el interés propio. Interés propio ilustrado hasta cierto punto, ya que en términos prácticos era más probable que obtuvieras lo que querías si eras agradable, pero era sólo interés propio. Las personas trabajaban sólo en lo que les interesaba o beneficiaba, y más allá de eso la única otra motivación era el impulso del ego que podía obtenerse al reflejar que eras quien había resuelto el problema, y todos los interesados en el proyecto lo sabrían. De hecho incluso si fueras a hacer algo altruista, sin el estímulo del ego, eso era sólo porque entonces podrías obtener el impulso para tu ego de pensar en lo noble que eras. En otras palabras, era el interés propio todo el camino, hicieras lo que hicieras.

Junto con esto estaba la creencia de que suficientes personas genialmente egoístas que trabajaban por solo sus intereses particulares y para impulsar sus propios egos se combinarían de alguna manera para producir el mejor de los mundos posibles para todos. Como se puede notar, esta visión no incluye ninguna noción de comunidad, servicio o altruismo.

Si tienes esta visión de cómo funciona open source, no hay problema con ninguno de los ejemplos que he mencionado antes. ¿Agotamiento rápido y salida? Pues, el nivel del interés ya no era lo suficiente para que continuaran. O tal vez simplemente no consiguieron impulsos suficientes para sus egos. ¿Voluntarios cansados? Si están haciendo lo que quieren, continuarán, y cuando las recompensas no sean suficientes, van a salir, así funciona el mundo. ¿Proyectos y comunidades abandonados? Eso ocurre por falta de interés y debes aprender a lidiar con eso. Y ¿esos voluntarios ansiosos? Por supuesto no lo quieren lo suficiente, o quizás no son lo suficientemente inteligentes o agresivos para abrirse paso a codazos.

En retrospectiva, muchas cosas escritas hace 20 años sobre esto parecen una mezcla adolescente de Ayn Rand y el capitalismo liberal, y afortunadamente han caído en desgracia. Tampoco estoy reclamando la superioridad moral - en esa época la mayoría de nosotros no cuestionamos nociones como estas, aunque en la práctica en las comunidades en las que estábamos, la gente en general no se comportaba así: en realidad no ponía los impulsos del ego y el interés propio por encima de los demás.

Supongo que todos disfrutamos de varios beneficios de nuestra participación, pero había demasiada gente haciendo demasiadas cosas generosas y altruistas para que el interés propio fuera lo único o lo principal que nos impulsara. Pero si nos hubieras preguntado, te habríamos explicado que así es como funciona open source. Para mí, esa narrativa de interés propio perjudicó a todas las comunidades de open source: alentó la cowboy coding, las flame wars y la fragmentación mientras devaluaba la colaboración, la inclusión y la construcción de comunidades. Es algo que todavía estamos luchando por superar 20 años después.

De hecho la frase famosa de Brett Cannon, (que he usado tantas veces), "Vine por el lenguaje, pero me quedé por la comunidad" resume muy bien como muchos de nosotros hemos cambiado nuestra visión de esta comunidad.

Eso me lleva de vuelta a la noción de dar regalos como algo esencial para nuestra comunidad. Otra vez, si pensamos en los cazadores-recolectores, uno de los ejemplos clásicos de una cultura del regalo, si un cazador tiene éxito, comparte la carne con todos. Claro, el cazador quiere comer, por lo que hay un elemento de interés propio en lo que hace, pero también lo comparte con la comunidad. No es nada especial, es solo lo que se hace.

Por supuesto, no somos cazadores-recolectores, pero yo diría que este patrón nos gusta a la mayoría de nosotros, a la mayoría de humanos, de hecho. Si consideras como se comporta la gente en nuestra comunidad, no es difícil ver el mismo espíritu. Las personas que contribuyen con su código lo hacen porque pueden y porque mejoran las cosas para todos. Claro, a veces el código que ellos contribuyen responde a una necesidad personal, pero muchas veces no es así. Del mismo modo los organizadores de los eventos y las personas en la junta dan mucho trabajo que no los beneficia personalmente.

Sin embargo, podemos (o deberíamos poder) contar con compartir los beneficios de la comunidad. Puede ser apoyo y amistad, o tal vez educación y habilidades, o contactos y una mayor red profesional. Yo sé que he experimentado todo eso, desde que me ofrecieron un contrato para un libro, hasta hacer tantos amigos en diferentes países, algo que me ha animado a aprender dos idiomas en los últimos años. Recuerdo también la PyCon hace 9 años cuando mi padre murió la madrugada del domingo, y esa noche varias personas se sentaron conmigo para asegurarse de que yo no estuviera sola. Lo interesante para mí sobre las culturas de regalos es que el proceso es muy vago y desordenado. Realmente no hay forma de determinar, por ejemplo, que compartir un venado es exactamente equivalente a 15 peces, digamos, a 50 manzanas, o lo que sea. Del mismo modo, tampoco hay forma de determinar que 10 parches de código equivalen a una charla, o 3 reuniones de la junta directiva, o lo que sea. Simplemente no existe una forma de mantener las cuentas exactas: con lo que todos podemos contar es que cuando alguien puede, hace una contribución que todos podemos disfrutar. Y a su vez aportamos lo que podamos y cuando podamos

Este desorden no es un bug sino un feature - no saber ni la hora ni el valor exacto de las contribuciones en realidad funciona para unir a las personas, ya que nadie puede decir con certeza que está exactamente a la par con los demás. En cambio, se da cuenta de que las fortunas de todos están enredadas, que estamos todos juntos en esto. En otras palabras, las contribuciones mutuas, este dar regalos, es lo que ayuda a unir a la gente y crear comunidad. Para mí, articular dar regalos como lo que impulsa a nuestra cultura, lo que crea nuestra comunidad, me lleva a lo que podemos hacer mejor, y que debemos tener en cuenta si queremos preservar nuestra comunidad de Python y si queremos que siga creciendo y floreciendo.

Como individuos, creo que si consideramos que todos en la comunidad están contribuyendo lo mejor que pueden, dando sus regalos a la comunidad, los trataremos a ellos (y nosotros mismos) de manera diferente (y mejor) que si creemos que todos somos impulsados por interés propio y no le debemos nada a nadie. Yo diría que entender que todos nos beneficiamos de las contribuciones de los demás hace más fácil apreciar ese trabajo, los regalos que ellos dan. Espero que también nos impulsará mostrar nuestro aprecio, algo de lo que muchos voluntarios reciben muy poco. Y también debería hacernos un poco menos críticos con los demás, si entendemos que su contribución es un regalo, no una obligación ni una transacción.

En cuanto a esas estrellas fugaces que se agotan rápidamente, tal vez reflexionar sobre dar regalos les ayude recordar que nadie debe dar más de lo que puede, y que lo que podemos ofrecer en cualquier momento es suficiente, y a su vez, nosotros también necesitaremos recibir regalos de los demás. Y espero que nosotros veteranos seremos más inclinados a darles a las personas que se están dando demasiado el regalo de este consejo.

La mentalidad de que somos una comunidad de regalos también puede ayudarnos a compartir más la carga y a dar el regalo de permitir que otros asuman algunas de las tareas que hemos hecho. Como he dicho, rechazar la contribución de alguien muestra una falta de respeto - rechazar su regalo es decir que no queremos que sea parte de nuestra comunidad. Teniendo eso en cuenta, debemos asegurarnos de que haya formas en que las personas nuevas y diferentes puedan contribuir, y debemos dar el regalo de ser mentores y guías para esas personas.

Una parte de esto es que también debemos entregar el liderazgo con generosidad, y dar el regalo de compartir posiciones de liderazgo. Este regalo beneficia tanto al que da como al que recibe. Estoy bien segura de que una de las razones por las que he podido seguir siendo una parte activa e involucrada de nuestra comunidad durante 20 años es que he tenido una política deliberada de traspasar el liderazgo de cualquier proyecto que yo haya creado después de 3-5 años. No es fácil al principio, se siente como una pérdida, pero ayuda a crecer a la gente nueva y mantiene frescos a los veteranos. Lo recomiendo absolutamente.

Otro aspecto relacionado con lo que hace que nuestra comunidad funcione y donde creo que una gran claridad es vital, es cuando se trata de dinero. Hasta ahora deliberadamente no he mencionado la forma dominante que tenemos de compartir recursos: una economía de mercado con intercambios basados en dinero.

Lo que pasa con dinero, con su tendencia a las transacciones exactas, totalmente lo contrario del desorden de los regalos, es que va en contra de la conexión y la comunidad. Se me das algo que vale $5, y yo te doy $5, ambos sabemos que estamos exactamente a la par y la transacción está hecha. No hay necesidad de continuar la relación. Las transacciones no construyen comunidad.

Por eso, nosotros, particularmente como comunidad, debemos tener mucho cuidado acerca de cómo manejamos el dinero. No soy ingenua, en este mundo casi todos necesitamos dinero y yo puedo testificar que es mejor tener un poco más que menos.Eso es cierto tanto para individuos como para organizaciones como la PSF y en general.

Cuando les pedimos a algunas personas que hagan un trabajo de tiempo completo de ayudar a nuestra comunidad, ya sea administrando nuestra comunidad y eventos, o nuestra infraestructura, o nuestro proceso de codificación, esas personas merecen que se les pague de manera justa, incluso generosa. También queremos que nuestras comunidades y eventos sean más inclusivos, y muchas personas necesitarán ayuda financiera para participar. Del mismo modo, fomentar comunidades en todo el mundo requiere dinero, y en el futuro previsible, por diversas razones, las cosas costarán aún más.

Por supuesto necesitamos los recursos financieros para ayudar a la comunidad a seguir creciendo y prosperando. Pero me preocupa la idea de que debemos hacer que las transacciones sean lo más importante en cómo obtenemos los recursos financieros o cómo los compartimos. Lo que quiero decir es que cuando enfrentamos los desafíos de recaudar dinero y luego usarlo en nombre de la comunidad, creo que debemos pensar con mucho cuidado para no convertirnos en "un negocio".

No tengo nada en absoluto en contra de los negocios per se. Me he ganado la vida trabajando para empresas y ayudándolas a tener éxito. Pero yo estoy totalmente en contra de que nuestras comunidades de Python, siendo la PSF el ejemplo principal, actúen como un negocio. He trabajado en varias empresas durante 35 años, y no importa lo que RRHH o Marketing quieren que creas, ser un empleado no es como estar en una comunidad de dar regalos con tu empleador, ni tampoco lo es ser un cliente. Si nuestros contribuyentes se convierten en empleados y nuestros patrocinadores se convierten en clientes, nuestra comunidad se verá disminuida, si no destruida.

Probablemente estoy sesgada, pero creo que hasta ahora la PSF y la comunidad de Python han manejado esto bien. La PSF ha contratado personas para apoyar el desarrollo de la comunidad y para ayudar que la gente contribuya con más éxito en todas las áreas. El dinero se gasta apoyando grupos regionales y locales, y la ayuda financiera para PyCon y otras conferencias también ayuda a las personas con menos recursos a hacer contribuciones a nivel mundial.

Algunos patrocinios se han desarrollado de forma que respaldan a la PSF y la comunidad en general, con pocas condiciones corporativas. Creo que esta es la estrategia correcta: a medida que interactuamos con el mundo empresarial, no debemos tratar de convertirnos en un negocio, sino invitar a esas empresas a unirse a nuestro mundo de contribuciones y regalos. Para hacerlo hay que convencer a esas organizaciones de beneficios intangibles y difíciles de cuantificar. Es algo difícil, pero no imposible, y vale la pena.

Sin embargo, estos son solo los primeros días. Mientras el capitalismo se vuelve más duro, y tanto la importancia de Python como el poder de las grandes empresas de tech continúan creciendo, la tensión entre una economía de mercado y una comunidad de regalos seguirǻ creciendo. En otras palabras, creo que es inevitable que haya más presiones para que abandonemos nuestra cultura de regalos y contribuciones a favor de transacciones monetarias. Podrían ser empresas que intentan comprar el control sobre el idioma y/o la comunidad, o podría ser presión para tratar a los colaboradores y voluntarios más como empleados, o podría ser cualquier otra cosa, pero en los próximos años habrá oportunidades para vender nuestra comunidad por una o otra oferta tentadora.

Cuando eso pase, dependerá de nosotros decidir si todavía queremos ser una comunidad de regalos y contribuciones. Por mi parte, estoy segura de mi respuesta.

Muchas gracias por la atención y muchos abrazos a todos en nuestras comunidades.

Stepping back from the board

The time has come...

As we head into the PSF election cycle, I'd like to let everyone know that I will not be running for re-election to the PSF Board of Directors and consequently from mid June I will no longer be serving as chair of the PSF.

Announcements like this always strike me as awkward, since they make two rather unlikely assumptions: that people will even notice, and that they will care if they do. But in the interests of transparency I'm going to go ahead as if both were true and share my reasons for this decision.

FIrst of all, I truly do believe that limited terms are good for the sustainability of an organization like ours. If someone is in a key role for too long, their inevitable departure and replacement can be unnecessarily disruptive and difficult, even with the best intentions. Of course "too long" can be hard to define, but I think it's safer to err on the side of leaving sooner rather than later. I also think it will be good for the PSF to practice handing off board leadership.

My other reason is that it's just time to move on. After five years on the board and 3 as chair, it seems like it's time to step out of that role and find something different to do, some other way to work for the Python community.

This isn't a dramatic change - I will be available to the next board as an advisor, and of course I will remain a passionate supporter of the PSF and Python communities around the world. So no, you're not getting rid of me that easily. :-D

I do hope that the PSF will continue to work on electing a diverse board, in all of the endless possible dimensions. For one target, I would love to see more representation on the board from Latin America, southern Europe, Africa, and Asia, as well as LGBTQ folks, racial and religious diversity, neurodiversity, and the rest.

If you're one of those people would help make the board more diverse but you're thinking, "yes, but there's no way that someone like me could be elected," well... I was thinking exactly the same thing when I ran for the board 5 years ago. There are no guarantees, but I believe it's worth a try, both for what you might bring and for the experience you will gain. So if that's you, get in touch - I'd be happy to talk about the board and what it involves, and offer any support I can.

It's been a privilege to work with so many amazing people on the board - we may not always have agreed on every point, but you would be hard pressed to find a group of people more dedicated to the success of the PSF and the Python community.

I'm also honored to have worked with the PSF staff as it's grown. They are truly amazing - smart, hardworking, and dedicated. I've seen their work up close, and believe me when I say that we're lucky to have them and they deserve all of the support we can give them.

As we move forward into the changes that the current crisis will bring, I have no doubt that the PSF and its board and staff will be more than up to the challenges ahead.

My time as chair of the PSF has been a lot of things for me - sometimes a challenge, often a learning experience, always an honor and a wonderful opportunity to get to know so many Python communities and their members. But above all it has been a rare and ridiculously improbable gift, something to be treasured, but also to be held lightly, and then passed on.

So long, and thanks for all the fish...

Notes on Teaching Python – Mental Models

Notes on Teaching Python – Mental Models

I admit it – I’m just an old, cranky teacher. As much I love seeing so many people all around me teaching Python, as much as I love the notion of spreading the joy of Python to various masses, there are things… things that give me pause. No, worse than pause, they give me a serious case of teacher twitch.

I start feeling the overwhelming urge to offer constructive criticism and helpful advice where none is wanted. I usually fight these urges, not wanting to be shunned by everyone as “that woman” (or something worse).

However, I also don’t want to end up in the corner muttering something like “get offa my lawn”. So I’m going to rant gently about some of these twinge inducers here.

What are we teaching, really?

I think one issue arises from a failure to ask ourselves what we really are trying to teach when we are teaching “Python”. It seems like a silly question, or a redundant one, but humor me. What are we trying to teach? Syntax? Best practices? Problem solving? TDD? OOP? What is Pythonic? Coding? Critical thinking? Computer science concepts? All of the above?

I’m pretty sure I’ve heard all of those answers at one point or another, and even given some of them. Yet I’m equally sure that something vital is missing when we talk about what we need to teach when teaching Python. And this something really holds everything else together.

The importance of a mental models

The missing “somethings” I’m thinking of (since in fact there are many of them) are mental models. We may not know every detail of how a thing works, but if we have an accurate mental model how it works, we can form some reasonable expectations about how it might work in different situations.

If I have a sound mental model of how AC current works and see that the lamp has a frayed cord, I can pretty confidently unplug it and deal with the problem. On the other hand, if I have an inaccurate mental model of how AC current works, I might either run from the room expecting the lamp to explode, or reach down and grab the bare wire. Neither is a desirable result, but yes, I’ve actually known people who fall into both categories.

The same is true in Python and coding. If we have an accurate way of thinking about a feature of the language, we stand a much better chance of getting code that works as desired. If we have faulty mental models, then the coding equivalent of electrocution or irrational avoidance awaits.

Take “variables,” please

For example what about “variables”? Yes, I agree that the term “variable” is questionable in Python. Yes, I prefer either “name” or “label”. However, it seems pretty much everyone calls them variables at some time or another, which may well be part of the problem. Several times now I’ve seen newcomers to coding being taught that about “variables” in Python. And many of those times I’ve seen the explanation that a variable is a “container that holds a value.” Or, as I used to say when I taught C, they’re told that a variable is like a bucket.

For C this makes some sense. And while no one should argue too much with the notion that the contents of a variable must go somewhere, in fact thinking of Python variables as containers is an inaccurate model – names in Python are more like post-its than buckets. But what makes the notion of variables as buckets even more insidious is that it seems to work well enough at first that people get used to thinking this way, and then pass it along.

Consider the following mindless code:

    a = 1
    b = a
    c = b
    print(a, b, c)

So far, so mindless. If you ask people what you get, they will not have a problem saying 1 1 1.

But suppose you then add the line

   b = 2

and ask about print(a, b, c)?

The followers of the bucket camp will usually (and correctly) say that the result is 1 2 1. In fact, there may be some confusion about what the “contents” of c are, but if you are thinking buckets, the answer makes sense.

But what about a mutable object? Suppose we have this:

    a = [1, 2, 3]
    b = a
    c = b
    b[1] = 5
    print(a, b, c)

Here the members of the bucket brigade are often stumped. In my experience I have been stunned at how many beginning (even intermediate) Python coders are surprised by the actual output of [1, 5, 3] [1, 5, 3] [1, 5, 3]. If variables are containers, how on earth can changing the contents of one change the others?

But if instead they are names that point to objects, the right answer makes sense. Once they have a better mental model of how names work in Python, such surprises (and the attendant bugs) become much rarer.

Let me be clear, this example isn’t the only case of poor mental models in teaching Python. I’ve picked on this example because it’s so fundamental and, in my experience at least, so common.

The question is not if our students will create mental models or not – we all form mental models as we learn. It’s our job as teachers to be thoughtful and help our students form useful and accurate ones.