“Programming as an information-centric activity” talk at the Python Education Summit

After developing/teaching several types of programming workshops and spending a lot of time listening to my peers at GSLIS talk about learning how to code, it is fair to say that I have a lot of opinions on the state of teaching programming for those outside of a STEM past and going into a non-STEM future. Additionally, being part of a graduate program in library and information science has biased me to see a lot of activities in our daily lives as information problems.

Much of my experience with programming books has revealed a concept-formula-drill presentation model, but this doesn’t encapsulate the real work of problem solving with code. Yes, students absolutely need to drill and practice the core concepts, but the activity of programming goes far beyond just that need. Many experienced coders criticize new students begging for help for not immediately searching for their problem on Google and solving it on their own. This is such a common response that the programming instruction community should listen and take note. Why are there so many Stack Overflow posts closed as duplicates? Sure, there are certainly searchers who are too lazy to actually read through other posts, but I believe that this group is in the minority. I’d pin the problem on searchers being unable to either a) correctly form a useful search query, or b) recognize an appropriate solution as useful for their problem.

Indeed, many instructors will encourage students to search online for their answers, but even a Google layperson understands that there is skill required to construct a useful search string. There are quirks and tricks to solving code problems via search engines. In unpacking this problem, we can see that students need to be able to identify the actual problem in their code, find the relevant section of code on a line, understand the words to describe the problem, and recognize how to apply a potential fix to their own code. There are a lot of essential skills here but do any introductory textbooks talk about this? (Seriously, let me know if you find one).

I collected many of my thoughts about this into a talk I presented at the Python Education Summit titled “Programming as an information-centric activity.” The core argument: the normal activity of programming involves a lot of information skills and these skills should be incorporated very explicitly into the classroom or other instruction environment. Instructors should not only use documentation and reference materials within lectures and demos but they should also take the time to talk about the common reference materials within programming communities. For example, answer the question: What is a programming cookbook and when should a student reference one? This is a reference document somewhat unique to the programming community but often discovered by accident by novices.

Slides are up on FigShare: http://dx.doi.org/10.6084/m9.figshare.1372436
A pre-recorded screencast version is up on YouTube: https://www.youtube.com/watch?v=7irxT_Q-0e8

The great Python Mashup lesson plan

I’m often asked by new students where they should go to learn Python.  That isn’t always an easy answer, because I haven’t found the one perfect resource yet.  However, there are some really strong ones out there.  My goal was to construct a lesson plan that was a mashup of my favorite resources into a coherent plan of readings and homework.  Readings are important to have a foundation to build on and reference back to, but so is having a solid queue of content to whack on until you understand the how and why of things.

I’ve mashed up content from Python for Informatics, http://www.pythonlearn.com, Codecademy, and Python Batting Practice together into one course book.

I believe that these materials are some of the best out there, and I reject the notion that students need to learn from a single source.  Each has benefits, and I feel like these sources are very complimentary.  Recall learning how to spell or learning another (human) language.  We always had workbooks or some material that required us to act on the content we had just studied.  Learning how to write code is a skill based activity that requires a ton of practice to refine your understanding of the concepts and syntax.  Additionally, learning from multiple sources allows the student to experience how things are referred to by different people from more perspectives.

That being said, a streamlined and supportive course in programming designed to minimize frustration and difficulties does not mean that either of those will disappear.  An important part of the learning process is the fight to learn.  The harder we have to work for something the better we remember it, but that doesn’t mean that learning how to program needs to be the worst thing ever.  I have aimed to keep a good balance inside the “productively difficult” zone.

So, I am happy to announce a new page at the top: the Guided Self-Study Lesson Plan.  I will be leading another introductory workshop again soon with this structure as the basis, and I plan to document and publish that as well.

Interview with Trinket.io

I had the great pleasure of meeting Elliott Hauser and the awesome development team of Trinket.io at PyCon 2014.  Trinket taps into the web-based power of Python by creating a framework to host interactive Python sessions as part of lessons or embedded in a blog.

Trinket’s blog has been featuring a series of interviews with programming educators, showcasing a wide assortment of approaches and tools.  I was recently interviewed by them about the Python group that I co-organize and the various outreach we’ve taken up.

Trinket offers a platform to document your workshop or instructional notes in such a way that your students can take the link home for reference or sharing.  I’ll be posting about a workshop I recently documented on their platform shortly.

Summer 2014 PyCamps are scheduled

Summer 2014 PyCamp schedules have just been announced!  I attended PyCamp last year and loved every moment of it.  Being self-taught, it helped fill in a ton of gaps I had and introduced me to so much new stuff to explore.  These are not meant for absolute beginners, but you don’t need to be an expert to get a lot out of it.  You should be fine if you’ve gone through a basic book, Codecademy, or PythonLearn.

Here’s the blurb of the PyOhio PyCamp:

PyOhio PyCamp 2014 is an ultra-low-cost, five-day, Python boot camp taking place July 21-25 in a high tech classroom on the campus of The Ohio State University. PyCamp has taught the fundamentals of Python programming to thousands. You can get up to speed on the most modern programming language at PyCamp. Sign up today at http://tripython.org/pyohio14

These camps are usually held the week leading up to a larger conference, such as PyOhio.  Be sure to stay for the conferences if you can.  Depending on the colleges and universities you have nearby, these may be your only opportunity for a truly affordable Python class.  Tuition for the one leading up to PyOhio is $300, which is much less than a community college or university’s tuition cost.  The money raised by these camps is also used to cover the cost of the host conference.

This year they have some limited scholarships available:

An anonymous donor has stepped forward for PyOhio PyCamp 2014 and offered four scholarships. The scholarships are specified for “women and minorities under-represented in computer science.” Two additional criteria apply: applicants must not already be working in IT nor may they be already enrolled in a “formal” (i.e., secondary or university classroom) programming course or major (MOOCs are OK). The scholarships cover $150 of the eligible tuition. Therefore, an early bird tuition becomes $150. Or an early bird tuition with an OSU email address becomes just $100. These scholarships are first-come, first-served. If you qualify, please send an email, subject line “PyOhio PyCamp 2014 Scholarship,” with how you meet with criteria and why you need PyCamp to pycamp@trizpug.org.


In defense of documentation and /r/learnpython

I feel like any discussion of reddit as a source of anything requires a “defense of” perspective.  There is a traditional and justified fear of going to the internet for help, but I have been pleasantly surprised at the /r/learnpython community.  Perhaps it is because the entire purpose of this group is for newbies to ask newbie questions that participants of the community are so kind.  Having /r/python as a separate group is also helpful.

Any student new to a domain needs to find a learning community.  This may be a friend who knows the topic, classmates, or internet forums.  Given the small number of Python communities out there in physical space, having virtual communities is often the only recourse.

Why do I find that /r/learnpython is a pretty awesome group?  Mostly, everyone is really nice.  We all need supportive and nice communities and tutors. Being afraid to ask a question prevents growth.  This is not to say that you shouldn’t try to resolve things on your own.  I have often answered my own questions while trying to write them up for other people.  I never really used these resources to ask questions, because it is very rare for me to ask a question that hasn’t already been asked somewhere else.

The other important factors:

  • a solid list of resources, if not obviously organized
  • huge range of research domains represented
  • fast and kind answers

A big issue I hear reported from students, particularly from the humanities and social science crowds, is a lack of comfort when using documentation.  Their discomfort is usually communicated as something like “Looking at documentation means I don’t really understand it.”  My theory behind this is that the kind of training that we get in our coursework is just different from math/CS.  The idea of the ‘cheat sheet’ isn’t really present in our normal studies.  We read original materials, discuss them, write about them, and come away with a mastery of concepts rather than a memorization of syntax.  I would argue that items like docs.python.org and Python in Your Pocket are viewed by some as if they were Cliffs Notes.  This doesn’t map perfectly, but it gets my point across.  I hypothesize that the non-STEM students view referencing documentation as implying that they don’t understand the material.  I wonder if language students feel differently from this because of the need to reference dictionaries.

This is an interesting distinction between these two groups.  In programming you learn semantic concepts and study language specific syntax.  On the other side of the coin, humanities and social science students use human language our or syntax and deeply study the semantics of various theoretical domains.  Referencing syntax for this later group amounts to reviewing style guides for citation and dictionaries, but is viewed as functionally different from the semantics they are learning.  They have such a focus on semantics that syntax is often not formally distinguished.  On the other hand, to programming, semantics and syntax are (usually) taught at the same time and are intertwined.  Referencing documentation for syntax is similar to referencing how to spell a word or how to use commas.  This isn’t “cheating” because it isn’t giving you the answer and doesn’t imply weakness in understanding.

I try to focus on making these distinctions when working with students reporting this hesitation:  it is completely normal to reference documentation all the time when writing programs.  It is not giving away the answer, but just telling you how to spell your answer correctly.  You still have to come up with the answer.  There could also be an argument that looking at documentation is not only normal, but ideal.  Particularly when using syntactical forms outside your normal toolbox, or when the teaching process is focusing on the semantic forms rather than memorizing syntax.

As explained to me by my web design professor when announcing that all our exams were open book and open internet:  we are never alone when coding.  When writing a program in a professional environment you will have your books and coworkers available.  Communication, discussion, etc. are vital to the process and professional growth.  Our society introduction specialization for a reason:  there are benefits to people having deep a understanding of one particular domain, but specialization requires that we all work together.

To new students of Python or any other programming language:

  • embrace documentation
  • collect helpful documentation for your domain together
  • don’t be afraid to make annotations or notes in your reference books
  • looking at documentation doesn’t mean you don’t know what you’re doing
  • we very often answer our own questions when trying to formulate them
  • find a community and talk to your learning peers

Programming for Everybody

I was very pleased to see that Dr. Chuck has started up a new Coursera class, Programming for Everybody.

A few things caught my eye immediately:

  • There are six sessions listed that run regularly through next year.
  • The activities are data centered.
  • Material is based on Python for Informatics, which I know and highly regard.

As some of you may know from reading my list of resources, I haven’t been too happy with the “beginner-ness” of some of the Python courses offered by Coursera.  For example, many presume that students can easily catch on to and develop mathematical algorithms for programs with minimal instruction.  Additionally, the skills taught in those classes do not always directly map to the needs of researchers needing Python for data processing and analysis.  Learning how to program by creating interactive games is awesome, if you want to make interactive items, but not always the most useful exposure if all  you need to do is manipulate text.

One of my first exposures to Python was through Python for Informatics, so I am excited to see the perspective of this class as a foundational boot camp and gentle introduction.  This course seems to be designed similarly to the way Py-CU designed the Introduction to Programming workshop, and that worked out well.  Our perspective was to give students enough introduction so that they could dive right into a book or other resource and not feel so overwhelmed.  We found that this worked out well and students left inspired and ready to tackle new things.

I look forward to seeing these types of classes and resources evolve over time, and I am particularly excited they are being designed to run on a regular basis.