Q: First, thanks for taking the time for this interview. Could you tell us a bit about yourself and your programming background?
A: I started programming in BASIC when I was in the 3rd grade, which I always hate to say because it makes people believe that you have to start programming at a young age to become proficient in it. All of my programs up until college were pretty much variations of the same program. I didn’t really teach myself all that much, and these days anyone could do in a few months what I did in those several years.
Q: You've published three introductory books on Python, all of which are available on your website inventwithpython.com. The first two, "Invent Your Own Computer Games with Python", and its sequel, "Making Games with Python and Pygame," are geared toward kids, while the third, "Hacking Secret Ciphers with Python," seems to be intended more for an adult audience. How have the three books been received?
A: Altogether, the books seemed fairly well received. I was surprised that people liked my first book, which led me to continue writing. The Amazon reviews are almost exclusively 5 and 4 stars, and I get an occasional Thank You email from readers. “Hacking Secret Ciphers with Python” is probably a bit much for young kids, but I think teenagers and adults would be able to digest it.
Q: Do you see the cryptography book as a step in a different direction, or as an extension of the puzzles and games introduced in the earlier works?
A: I saw it as a different direction. Video games are a great way to get people involved in programming, but I wanted something else as well. I noticed that there were a lot of code and cipher books that talked about the classical ciphers the book covers, but very few that explained how to break them and none about how to write programs to break them. I saw it as an opportunity to reach a broader audience. The book itself is also aimed at people with absolutely no prior programming or cryptography experience.
Q: What has drawn you to python? What do you think are its strengths and weaknesses?
A: Python is a very readable scripting language. Unlike Perl which has very obtuse use of punctuation characters for different language features, and unlike Java which has an overwhelming amount of boilerplate code, Python seems to be a very direct, “get it done” language. It also has a very gentle learning curve. I’ve written a blog article before about how Python isthe new BASIC. I use Python for both my own software projects and for teaching programming. At this point, I’ve become so accustomed to Python and its idioms that I’m afraid I’ve become blind to its weaknesses, so I really couldn’t think of any.
Q: What are your favorite python modules?
A: Pygame is excellent for creating games and 2D graphical applications. I’ve written a couple modules that work on top of Pygame called Pygcurse and Pyganim, which add a curses-console for text games and sprite animation, respectively. Lately I’ve started using Requests and Beautiful Soup for downloading and parsing web pages for my Python script. (I’ve written a simple Reddit bot that automatically checks several different web comics and posts them to the r/comics section of the site.) I have some experience with wxPython for creating GUIs for traditional desktop apps, but I’ve heard good things about Qt bindings for Python as well.
Q: Do you currently have any new python books in the works?
A: I’m writing a new Python-for-beginners book with NoStarch Press, which tentatively has the title “Automate with Python”. I’ve described it as “a programming book for people who don’t want to become software developers”. I noticed a lot of office workers, administrators, and academics do a lot of computer-based tasks that involve a lot of mindless, repetitive clicking or compiling of data. This book aims to teach them just enough programming so that they can automate these tasks. It covers basic Python, and then goes into several different modules for text parsing, web scraping, moving and renaming large amounts of files, updating spreadsheets, or sending automated emails and text message alerts. I’m hoping to have it available by summer of 2014.
Q: You accept bitcoin donations through your website. Have you worked on, or are you currently working on, any Bitcoin related projects? Can you speak to the intersection of Bitcoin and Python?
A: I had only added it to the site after other people on the internet suggested it, but I’m glad I did. As with many people, bitcoin had been in my periphery for a while. But setting up the wallet for the donation link forced me to learn more about it. Although as of yet I haven’t worked on any bitcoin projects (if anything, the Tor Project will get my focus once I’ve finished the next book). But for all the negative publicity that bitcoin gets regarding its use to buy drugs and illegal things (all of which, by the way, can apply to cash) I’m really excited about it. It allows minors and people in third world countries to conduct commerce over the internet, and that is a Big Deal.
As to Bitcoin and Python, I think that having a new ability to receive and send money over the internet without middlemen (e.g. Visa) along with open source software like Python really lowers the barrier-to-entry for software development outside of America and traditional software-producing strongholds.
Q: Like your other works, the cryptography book can be read online or downloaded for free. But if a reader purchases it, you donate all proceeds of the book to the Electronic Frontier Foundation, Creative Commons and the Tor Project. Why did you decide to donate the proceeds for the book on cryptography?
A: It was the suicide of Aaron Swartz, to whom the book is dedicated to, that made the decision for me. I hadn’t met Aaron, though I have friends who were friends of him. His passing was a tragedy, but also a wake-up call for myself. Looking at his life really made me start looking at mine and how I wanted to make contributions like he had. At the time I was, after two years of off-and-on writing, a couple months away from finishing “Hacking Secret Ciphers with Python”. The other books were selling well, and I had a day job that gave me a comfortable middle-class lifestyle. So I decided that I would turn the proceeds from the books over to help organizations that are doing some really wonderful and necessary things to protect the internet.
Q: In your online bio, you state that you almost ended up working at the NSA after college. What's the background story there? What made you eventually decide not to pursue a career in military grade cryptography and surveillance?
A: It’s been long enough that telling this story has gone from discomforting to kind of funny. Right after college at UT Austin I was weighing the possibility of grad school, or finding a job, or just… I don’t know. Either way, I didn’t really feel qualified to be paid for my skills. (This was before I realized that any job post that “required” three to five years’ experience in anything was lying.) One of my computer security professors had left their post to become a research director at the NSA, and he recommended that I apply. I had a large interest in encryption and network security, but didn’t feel like I was experienced enough for any security company to hire me. So I gave it shot.
I was flown out to Ft. Meade and interviewed with a few different groups. A couple memories of the experience was the sand-bagged guard hutch manned by a soldier who casually stood behind a large machine gun with a bipod and under-barrel grenade launcher, and how the cafeteria had posters of cartoon characters saying slogans like, “Don’t spill the beans! Avoid talking about classified work with your colleagues.”)
I got the job, although my mother is a permanent resident of the U.S. (she’s originally from Japan) and the position required all my immediate family members to be citizens. The group I interviewed with wasn’t able to get a waiver, and so the job fell through.
But looking back on it, I had really dodged a bullet (or projectile grenade). I don’t think I would have enjoyed the line of work or having to drive for a commute every day. And if I ever left the agency, I’d have to submit any publication for security approval for the rest of my life. It really worked out better this way. I thought that taking a dig at the NSA in my author bio might be a bit much, but the Snowden leaks happened shortly after the book was published and I realized I had made the right call.
I sometimes wonder about how things would have gone if I had taken on that job. (I’d probably be stuck in a Russian airport right now.)
Q: What advice would you give to young and not so young beginning programmers?
A: My main piece of advice is that you suck at coding and will continue to suck for the rest of your life. Once you’ve accepted that, you’ll be able to move on and write some interesting software. Don’t worry about the nagging feeling that you aren’t good enough or know enough, because that feeling will be permanent no matter what you do. And if it doesn’t, it’s because you’ve given up on forcing yourself to learn new things (which is the real danger.)
Also, you’re never too old or too bad at math to learn to code. Most programming doesn’t even require mathematical knowledge beyond arithmetic, and unless you’re in your sixties or seventies you aren’t even too old to become a professional software developer. Programming isn’t something that requires you to be a super genius to do. More than anything, having an interest and motivation to act on that interest is all you need to be set on the right path.
Q: Thanks for taking the time to answer our questions!