Just over a year ago, on February 1, 2018, DigitalOcean released the collection of my Creative Commons-licensed Python tutorials as a free and open access eBook, How To Code in Python 3. Since then, the eBook has been downloaded 80,000 times to date and is available directly through DigitalOcean, Google Books and CUNY’s Manifold repository.
Now that the book has been out in the world for a year, I wanted to share some of the thought process behind the book as well as some of the challenges that are particular to technical books.
Carol Willing and Lisa Tagliaferri in the MIT Digital Humanities Lab
The conception of the curriculum that would develop into How To Code in Python began when I was interviewing with DigitalOcean in late spring / early summer 2016. I knew the person hired for the role of Engineering Technical Writer was going to build out the Python vertical of tutorials on the DigitalOcean Community site, so I came into interviews with an outline of the tutorials I would write if I landed the position. Though the outline eventually expanded, and my Git tutorials developed into their own series (An Introduction to Open Source), the essence of the Python learning pathway was there from the beginning:
Image of page 1 of my original document from June 2016
Because I was writing tutorials, it was important that each piece could stand alone and serve as reference materials for developers who need a syntax check, or help Java programmers (for example) get up to speed with Python. However, because I was also creating a linked series, I wanted readers to have the opportunity to build knowledge over time, especially for beginners who were looking to learn Python as their first programming language. Negotiating these two goals was often a challenge, and in book form I could have potentially incorporated smoother transitions. But because these were conceived ultimately as documents living on the internet often presented without context of the other chapters or tutorials, I did slightly privilege the stand-alone nature of these pieces and linked to knowledge prerequisites throughout the text.
In addition to creating an outline of the tutorials I was planning to write, I also took time to map out the pedagogy, goals, key decisions, and style of the series:
Image of page 2 of my original document from June 2016
This thinking is deeply informed by a humanistic approach to learning as well as student-centered pedagogy. It was important to me that no concept would be introduced without explaining it, and that each block of Python code would work if the reader ran it on their own terminal. Using the terminal or command line interface was also a deliberate choice, not only allowing readers to transfer naturally to a cloud computing programming environment, but also supporting them to truly understand the workings of their machine.
In addition to the reference tutorials that explain programming concepts, project-based programming tutorials were conceived of in the beginning, allowing readers to learn how to put logic and syntax together to create a meaningful project. These range from the Django Development series created by Jeremy Morris, to Machine Learning tutorials like “How To Build a Machine Learning Classifier in Python with Scikit-learn” by Michelle Morales.
Today, the Development tag on DigitalOcean — focusing on software development topics — has expanded to over 160 tutorials and continues to grow through the knowledge sharing of the broader developer community. If you are interested in contributing a technical tutorial to DigitalOcean’s Community, you can apply to the Write for DOnations program, which pays authors and contributes a donation to tech nonprofits.
Releasing a book into the public has proven to be a different experience than publishing tutorials online, as there is something of a static nature with the book. One of the benefits of online tutorials is the conversation that occurs around the text. Commenters on the Community platform or on social media provide valuable real-time peer review on public documents that can be quickly implemented. This allows me to modify a tutorial when something is not clear, a typo is discovered, or the tech changes (which is pretty often!). Books, however, require extra consideration due to their digital packaging (thanks, Brian Boucheron!) and the requirement that they remain available in repositories. For those planning to write or publish a technical book, I recommend having a system for maintenance and a regular cadence for new releases, to ensure that books do not become outdated quickly.
The community around tutorials also gives me an idea of how the online texts are being used. Though I have received great feedback on the book, and have learned of professors and teachers using it in classrooms and coding bootcamps, and have heard from readers working through it for self-learning, the reception of the book is much more of a black box for me in contrast to the tutorials. Writers may wish to work to develop relationships with those using their books ahead of the book’s release in order to have a greater sense of how the book has an impact. That said, the book has opened interesting doors for me, including a wonderful visit from CPython core developer Carol Willing to the MIT Digital Humanities Lab!
If you are interested in learning more about the How To Code in Python eBook, here are some additional resources:
Printed copies of How To Code in Python 3 courtesy of the MIT Digital Humanities Lab