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

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


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 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.

Presenting at PyCon!

PyCon 2014 is coming up quickly!  I am so excited to be presenting a poster and have been working madly to finish it up.

Link to the program entry for my poster

My poster focuses on students who are attempting to learn programming and/or Python from outside a standard computer science educational track.  These students include (but not limited to) those who cannot access college courses due to financial or time issues, undergraduates out of credit hours to begin a new major or minor, and graduate students unable to add CS coursework into their program.

Students in this situation are facing complications beyond basic access. They may not have the traditional prerequisite math and physics, lack basic computing skills, and materials that don’t speak to their learning needs.  These other issues do not take away from their desire and need to learn.

In this poster, I have attempted to summarize the situation, listed a set of Python community goals, described the outreach work of Py-CU, and highlighted some of the best resources for students in this situation.  The goal of this poster is to encourage members of the Python community to give back, explain the unique situation these students are in, and provide readers with learning resources they can direct students to.  This has been a wonderful topic to explore, and is framing additional work that I’m hoping to complete over the summer.  I’ll post a copy of my poster once I’ve finalized it.

The talk list for PyCon is amazing and I’m looking forward to being able to report on some new resources people are presenting about.  Going to PyCon?  Check out the posters on Sunday!

Why programming?

Every time I mention to someone that I believe all students should have some exposure to the fundamentals of programming, I keep getting the same question:  “Why would I need learn how to program?”  This is a sane response, but the conversation after that often highlights many of the misconceptions about programming and computer literacy topics.  I don’t find it cute when people, particularly woman, express their disinterest in developing computing literacy skills with pride. But that’s a post for another time.  

I’m not going to try and romanticize the idea of coding and programming as some glorious state of being everyone should experience, but I will say that it is a skill everyone should have exposure to.  We all learn how to change tires and open up the hood of our cars not because our parents and teachers think we should be car mechanics, but because a car is a tool we often use on a daily basis and should know a little something about.  Programming and computers are no different.

Before we get started, let’s make a note of what I have and have not said here.  I have not said that all students should learn to be programmers.  That would be annoying and impractical.  What I did say is that all students should have exposure to the fundamentals.   There is a huge difference between these two concepts.  Being a skilled professional programmer requires many years of experience and a lot of education.  Having experience with the basic framework allows you to see how programming tools may be of use.

Let’s look at an example to explore why even understanding the basics can significantly benefit someone.

The other day I was playing Pokémon, and an old man by the sea told me he had given me the power to read the text on some ancient underwater ruins. I am a dutiful servant to the NPCs, so off I went.  I typed up all the messages I found, but it turned out to all look like gibberish.  The old man lied!  Except not.  When I went back, he told me “Oh ya, they read right to left.”  Thanks, bro.

So there are a few reactions a player can have here, ranging from:

  •  “I can read all the things backwards!”
  •  “Okay, I’ll write up or type all the messages starting from the end.”
  •  “I know how to print text backwards in Python.”

Now, try to imagine this scenario happening not in a video game, but in a research lab.  Instead of trying to read backwards text from fictional ancient ruins, imagine that your data came in backwards or garbled in some formulaic way.  Oh, and you have approximately 100,000+ data points. How would you resolve this situation without the ability to program?  Sure, your department may have a go-to person for programming stuff, or you may have access to an army of research assistants who could manually go through the data and make the corrections.  But are those optimal solutions?

Exposure to programming concepts opens up access to that third reaction.  Instead of visualizing a room full of undergrads trying to manually fix the errors, you can say to yourself “I’ll google how to do that in (whatever language you may be familiar with).”

And this is the core of my argument.  We are no longer living in an era where you have to be a professional programmer to do basic programming tasks.  Without having the exposure to what is possible to do with computers, people will be limited in their options for solutions.  My hope for students of the humanities is to give them the ability to recognize when programmatic tools should be used, and the skills to find and implement whatever solutions they may need.

Many other bloggers out there have explored this topic, and I feel like the best general answer is “Why do you want to limit yourself?”  Particularly because the entry into basic understanding an be completed with <10 hours of exposure.

Python Confessions

Books that advertise teaching you anything in some short time frame can be misleading. There are very few things where it really only takes a few minutes and a few tries at to learn. Even learning how to change a flat tire on your bike takes practice. So when books about programming advertise that they can teach it to you in a day, I’m super skeptical. Learning any new language, human or computer, takes time and practice. Even those who are trying to encourage students to start learning and keep up with it will use these statements like “Python is so easy!”, “I picked it up in just a few hours.”, etc.

Let’s have a little confession time here:

  • It took about 20 hours of exposure to the Python syntax before I really felt like I wasn’t blindly throwing code into my document. This, however, does not mean that I had “learned” python.
  • I have cried over code.
  • I have spent hours working on stuff that ended up being three lines of code.
  • There is documentation that I still don’t understand.

Thus, I feel like the following things must be said:

  1. You don’t have to know or do any crazy math stuff to learn how to code.  Search out learning materials not centered around math if that isn’t your thing.  That being said, eventually you will have to deal with numbers.  But trust me, it’ll be fine.
  2. I like math better now after learning how to program.
  3. Just like learning any other language: learning the vocabulary will be easy, but learning how to write or speak in coherent statements takes practice.
  4. There is no universal learning tool. Try everything and figure out what works for you.
  5. There are people who really want you to succeed and will be happy to help. But the rule of the internet still stands: some people are jerks. Don’t be discouraged. Seek out a supportive community.
  6. Hours of fighting against code that doesn’t work can often be the best method of learning.
  7. It will be hard.
  8. It will get easier.

Any other words of wisdom?  I’ll keep this list updated as I learn and fail with my adventures in Python.