A quick note about how I’m going about learning Python.
1) I joined a Google Group called PythonJournos. They got started months before I did, but I’m going through the messages in order and feeling a part of the group, though I am yet to post a single message. Lurk life!
2) To follow along with the group, I purchased the epic Learning Python (4th Edition) by Mark Lutz.
2) I dusted off a printed copy of Allen B. Downey’s Think Python: How to Think Like a Computer Scientist because, well, I need a lot of help thinking like a computer scientist. It’s a fantastic book.
4) Occasionally I will bring beer and snacks to a friend who thinks like a computer scientist really well, in exchange for his patient wisdom.
I’m feeling some momentum and it’s a great feeling. There is also that occasional feeling of momentum blocked—or what feels like momentum blocked (it’s really just learning, and learning = momentum, right?).
I turned to Think Python after three chapters of Learning Python and I’m so glad I did. I never gave much thought to the emotional experience of programming, though I feel its effects constantly, whether it’s my stomach squeezed tight like a fist (when something is going wrong) or my foot excitedly tap-tap-tapping (the elation of things going right).
Downey addresses the emotional landscape beautifully in Chapter 1:
Programming, and especially debugging, sometimes brings out strong emotions. If you are struggling with a difficult bug, you might feel angry, despondent or embarrassed.
There is evidence that people naturally respond to computers as if they were people. When they work well, we think of them as teammates, and when they are obstinate or rude, we respond to them the same way we respond to rude, obstinate people.
Preparing for these reactions might help you deal with them. One approach is to think of the computer as an employee with certain strengths, like speed and precision, and particular weaknesses, like lack of empathy and inability to grasp the big picture.
Your job is to be a good manager: find ways to take advantage of the strengths and mitigate the weaknesses. And find ways to use your emotions to engage with the problem, without letting your reactions interfere with your ability to work effectively.
The manager/employee analogy is a little unsatisfying (loaded as it is for anybody who has ever been on either side of this often toxic relationship in the real world), but the message is crystal clear and I’m grateful for his cue to consider this element of learning to program.
UPDATE (May 2, 2012): It’s been more than a year since I wrote this post. I never went deep with the Python group, and my learning ended up being far more diverse than I had expected, and did not go in a straight line. I’ll write more about this eventually, but felt compelled to chime in on younger me here.