How To Make Your Code Better with Refactor School, Free Episode 1

I’m going to publish another series of videos from Learn Code Live where I refactor one of the student’s code.  This code is exactly what he was expected to do when going through Learn Python The Hard Way, so really nothing wrong with it.  But, I took his code and pushed it as far as I could toward “professional”.  This series is 4 videos and you can watch the first one here:

Or, you can view it on directly.

What is Refactor School?

One aspect of learning to code for a beginner is learning how to “speak” like a “real programmer”.  Normally they pick this up by either working at a job where people correct their code, or hanging out with other programmers online.  Many students though don’t have the time or luxury of those situations, so I do that for them live.  I find a volunteer, and I improve their code over the course of 2-4 sessions taking it as far as I can go.  I treat the sessions in much the same way I would if I was teaching a junior developer on the job, so you can watch this and get some idea of what that might be like.

If you are a beginner and you have some code you’d like to volunteer to refactor school then message me on the forum and we’ll talk about it.  I’m looking for volunteers and I’ll give you the videos with my refactoring in exchange for you letting me review and repair your code.  The process is not abusive or overly critical, and it’ll help you see how I might write your code.

If you do have code, make sure that it at least works first, and that I can get it somehow.  It should also be relatively small, so maybe 3-10 files of Python code.  Other than that, let’s talk and work something out.

Free Short Course for Understanding Object Oriented Programming in Python

I’m going to start publishing free content for people to consume in areas that I find help people in general but don’t really fit into any of my own products.  In this post I’m going to talk about OOP School, which was a 5 part series featured in LCTHW:Live.  In this series of lessons I actually build a basic working OOP using only dicts and modules in 64 lines of Python code.

Probably the best video to watch and understand what is done in the 5 video series is Seminar #5, where I go back through the code and explain what I did:

The purpose of these lessons is to remove the magic behind Object Oriented Programming. Too often beginners see code like this:


and then shut down because they can’t follow what is going on. To me I know what the . (dot) does in every language I use, but that’s only because I grew up actually implementing the dot in a few languages that didn’t have OOP. I did this in C, Pascal, and I think I tried in BASIC but gave up. I forget, it was a long time ago because I’m old now.

This Learn Code Live seminar series starts with a person who knows the following:

  1. Variables
  2. Calling functions
  3. Modules
  4. If-statements
  5. Dicts

And using just that (plus some small jumps into other corners of Python), builds an OOP system that gives you the basics of Python’s OOP in 5 hours of work and 64 lines of code.

Objects Are Not Magic

I believe that programming languages like Python have a vested interest in making parts of their programming language mysterious and magic.  What languages like Python do is hide mountains of operational code behind a single character:  the dot.  This seemingly tiny character unleashes potentially hundreds of thousands of lines of code inside Python without you being able to understand it.

In fact, the early creators of Python didn’t even understand it and had to rewrite the Object system at least 3 times.  Many Python practitioners today think that there’s a huge difference between objects, classes, dicts, and modules.   The only real difference between them is one of syntax and first class language support.  You can completely implement objects and classes using just dicts and modules, and even inside every object and class hides a __dict__ which means they really are just dicts.

Object Oriented Programming is not magic.  It’s not some truth of the universe or mystical thing only ordained Real Programmers understand.  OOP is code that someone wrote which gives you three things:

  1. Syntax – You don’t have to type out a function name like get(), new(), set(), inherits() to work with objects and classes.  You just use . (dot), parenthesis, equals, and other symbols and Python does the rest for you.
  2. Conventions – You don’t have to remember to call certain functions in the right order to talk to another person’s code.  Because Python gives you syntax it forces everyone to follow the same conventions so their objects work together.
  3. Parsimony — You don’t have to manually write out which classes inherit from other classes or explicitly name every method that has to change in a subclass.  Python saves you from having to repeatedly type out boilerplate because it has syntax and conventions to do all the for you, and to make everyone else do it too.

All of these things are just social constructs, they are not core truths of a computer.  They are not so huge an advantage that you can’t sit down and build your own replica of these concepts and come up with your own OOP system.  As long as you have some kind of function and some kind of dict you can make an object system.  I mean, how do you think Python has an OOP system?  Magic elves built it?

When it comes down to it, an Object Oriented Programming system just an application of data and functions to enforce a convention through syntax that allows multiple humans to share code in a parsimonious way.   You can build your own and any language or programmer who tries to tell you that you can’t build an OOP system from first principles that replicates the one they use probably has no idea how theirs works.

You know, like the people who invented Python.

The Full Series

By watching this series of videos you can get at least a tiny idea of what is going on behind the dot and understand the basic concepts of OOP before trying to actually learn it.  It’s only 64 lines of code (available here) that is simple enough for a beginner to understand, and not full of extraneous features not many people use like multiple inheritance.

You can watch the videos below, or go to to view them.

Seminar 1

Seminar 2

Seminar 3

Seminar 4

Seminar 5

Joining Learn Code Live

This is an example of the kind of hacking and teaching I do on Learn Code Live. If you’d like to join my new Learn Code Live and get in on the Python Basics Workshop I’m going to run then you can Signup Here and you can see a searchable list of everything already recorded that you get after you signup. The next class is going to be this Saturday at 12pm EST. Hope to see you there.

Python Basics Workshop on Sep 3rd, 2018

I’ve planned to run a Python Basics Workshop for about a month now, and wanted to do it on August 13th but it turns out to be way too early for most of the people in my Learn Code Live class.  It is also too early for me as I want to add a few more features to the LCLive product before then.

So today I’m moving the Python Basics Workshop to September 3rd so people have time to prepare for it and signup.   I’ve also created a separate product for people who only want to attend the Python Basics Workshop #1 and don’t want to signup for the 30 days of Learn Code Live.  If you want to get the 1 week of Python training only, then you can sign up for only that product.

What’s Python Basics Workshop?

The PBW is a firehose of Python for one week starting on September 3rd.  The goal is to get you through my entire Learn Python The Hard Way book at a fast pace but with my guidance helping you.  You’ll then be able to start the book over and get through it in more depth faster.  You can watch this starter video to find out more about how we’ll run it and what you’ll be doing.

What’s In The PBW Product?

Originally I intended to have people join my Learn Code Live product to get the Python Basics Workshop, but a lot of folks don’t want the 30 days of live coding just to learn Python.

So, you can signup for only the PBW for $29.99 and you’ll get the one week crash course only.  You’ll attend the PBW live and get to keep the recorded videos after, and help on the forum with everyone else.

If you sign up for Learn Code Live for $99.99 then you get the Python Basics Workshop included in your 30 days subscription, which includes 50+ hours of past videos I’ve recorded and a lot of other goodies like premium help on the forum, more live seminars every week, and new features I’m planning soon.

Feel free to email me at if you have questions.

Are There Sample Videos?

Yes, you can watch to get an idea of the kinds of topics and style of teaching in the Learn Code Live or Python Basics Workshop.  The workshop will be much more directed and controlled, and the LCLive topics get tailored to what people are struggling with in general.

Vim School and The Textual Katana

TLDR: I’m running a low-fi to the point Vim course once a week for 10 weeks and a spot in the forum for help.  You’ll get 10+ hours of video and my configurations and notes.  You can buy it at and the first Seminar is up.

I’ve had many people ask me how I use Vim, but I couldn’t really figure out how to write a book to teach Vim. I realized a while back that the majority of the things people need to learn about Vim are best demonstrated in an interactive way.  I can blast you a book with all the commands and tell you that 10cw will delete 10 words but, until you actually see someone who’s good at Vim do that it doesn’t seem to click.

The other thing I’ve realized is that everyone tells people how to use Vim, and then proceeds to do it in a totally different way.  It’s just too hard to keep track of all the ways I might use Vim, little tricks, settings, how I use power macros, and other things unless I’m really editing and then showing you how to do it.

So, last week I threatened everyone on Twitter that I’d create a series of videos I’m calling Vim School and this week I did exactly that.   I’m recording these in a Live Seminar format with a core group of students who are beta testing my Learn Code Live project.  That means there’s people asking me to repeat things while I’m demonstrating Vim concepts so they keep me honest and make sure I don’t gloss over things.

If you want to get in on this, then you can buy it at and you’ll get 1 seminar per week after my LCLive students have seen it.  The first seminar is up and it’s 1h 11m long with a crash course jump into Vim.  You’ll get an announcement on the part of the forum, and you can get clarifications and help.


Vim School is like Vim itself:  Low-fi, brutalist, no frills, to the point, and effective.  There’s no fancy graphics, diagrams, pretty buttons, or anything but Zed showing you Vim in all its blazing fast Text Mode Katana glory.   I’m doing these videos in 1080p, but honestly I could do them in 480p and they’d still work.

Here’s what’s going to be in the course:

  • 10+ hours of Vim training.  You can see the notes from this week’s seminar in the forum.
  • Starts off assuming you know nothing, then slowly goes through each concept needed to use vim until you have a fully configured vim for programming work.
  • It’ll cover everything from your basic motion and editing commands to more advanced automation, code searching, and configuration for real work.
  • It’ll be based on how I use Vim, which is a much simpler and more reasonable way to use it for a beginner.
  • You won’t be required to use hjkl to move around.  You’ll just use arrow keys, but more importantly, you’ll learn that the entire point of Vim is to not do tiny moves anyway.
  • All the videos will dynamic keystroke display so you can see exactly what I type.
  • There will be session notes posted shortly after the seminar is posted.
  • I do everything inside Vim.  I write up the sessions notes live, edit code, run it in a terminal, every single thing I can I do from Vim.  This helps you see if I’m using and secret tricks you haven’t heard of that you want to learn.
  • I’ll provide you with my configurations each week so you can build up your own configuration by learning what each thing does.  This first seminar I did a quick run through and put up a minimalist config for everyone to use.
  • Price is $19.99 for all of the videos, and you’ll get 1 per week assuming I don’t have anything pressing that week stopping me.  If I’m ever late a week you’ll get double the next week.

Wait, What’s LCLive?

I’ve been running live training for beginning programmers for the last 6 months in a private beta.  I’ve had to really change how it runs several times to simplify it and to figure out this whole online streaming thing.  Let me tell you, online streaming of a screen is much harder than it seems if you want to do it with any kind of quality.

The original incarnation of LCLive was the Junior Developer Certification Program but that was way too complex and involved for people to do successfully.  I’ve since stripped that concept down to just something that provides people who are learning to code with extra help from me in the form of:

  1. A private section of the forum where you get priority assistance with your code.
  2. Help with nearly anything related to becoming a programmer or working your first job.
  3. One main video a week where I cover some topic in a series.  We’re currently in the Debugging and Refactoring series.  I’m taking volunteer’s code and we’re all debugging it or I’m refactoring it to show how I’d do it.  We’ll probably do this for a while since it seems to really help people.
  4. Special bonus videos such as this Vim School.  That means yes, if you sign up for LCLive you just get Vim School included with your LCLive subscription.
  5. Access to all of the past LCLive videos, which is about 30 hours of content right now.

I’ve almost got the format nailed down, so I’ve been keeping it quiet and among my tiny group of friendly students who want the extra help.   I’m not quite ready to release it fully, but if you want to sign up then it’s $99.99 per month and you have to email me at asking to join LCLive.  You’ll have to understand that there’s going to be tech issues at times because it’s a beta product, but it seems to be going well as of this week.

What About Emacs School?

I could potentially do a similar Emacs course but I honestly really suck at Emacs as it’s not my main editor at all.  If you’re an Emacs grand master and interested in doing a similar course feel free to comment and let me know.

GDPR Changes to LCTHW

When I started Learn Code The Hard Way about eight years ago, I made a conscious choice to run my business ethically. I decided to never collect information unless I really needed it, to not track people as they went through my site, and to not sell anyone’s information to someone else. I felt this was the right move because education is a sensitive topic, and I didn’t really think it was appropriate for me to sell people’s behavior on an educational resource. I also would rather make my money by building good products rather than selling my customers like they are products.

For the last eight years I have only stored enough information to let you get back to your purchase. For example, I do not remember where you are in the book because if I store that information then I am tracking everything you’ve read, and that kind of violates your privacy. Some people have asked me to implement a feature for keeping track of what you have read, but I feel that that’s too risky of the feature to implement. I also didn’t include any passwords in my system. I simplified it down to the bare minimum necessary for you to access the content from your email. In fact, I store people’s names but I don’t even it enforce that they give me a real name.

I do collect people’s IP addresses, but that happened after almost a year of constant fraud and a barrage of continuous SSH attacks. I have to keep the IP address information for fraud prevention and security purposes, but I only keep your most recent IP address on your account and it gets wiped whenever your IP address changes. I also only keep logs for about a year, mostly because I’m too lazy to reconfigure the log rotation to do it faster.

I am also a very hated individual on the Internet. Because of this I have had to make sure that I have the best security I can get, but I also assume that no security is totally foolproof so I do my best to keep data off my service that I don’t really need. The data I do have is either minimal or I encrypt it with GPG and my private keys never touch the servers. Obviously none of this is totally secure in the face of a very determined attacker, but because I don’t really store much information about people and a lot of it is encrypted, the potential damage is very low.

Finally, I gladly delete people’s accounts if they email me, but I warn them that once they delete it all then our relationship is over and they would have to buy the product again to download it again. That seems reasonable to me because you can’t say, “Hey, forget everything about me,”  and then come back a month later and say “Hey do you remember me?”  No, because you told me to delete you.

I believe the only things I do is I have Google analytics on my site, and a Zendesk help chat system that nobody uses.  I’ll just remove the Zendesk chat, and if you want Google to forget about you then contact them.  You can still email me at when you need help or you can use the forum at  but that little chat thing is totally useless.

New Features

I actually believe that without a treaty between the United States and the EU, that the EU would be violating international laws by enforcing the GDPR.   But, complying with it doesn’t seem to be too difficult for my business, and if I comply with it I can go to Europe in the future and study art at Louvre.

I’m not kidding.  I really want to copy paintings at the Louvre.  I can’t do that if I owe 20 million euros to France!

With that in mind I am going to be slowly rolling out some features to make my business compliant with the GDPR and it will be for everyone around the world:

  1. You will have a delete button for your account, but you will need access to your email to prove that you actually are who you say you are, and once you delete you have to buy the product again to get it back. As I said it’s not fair for you to want to maintain a data relationship with me but then also delete your data.
  2. You’ll be able to get a a JSON dump of the data I have on you. You are probably going to laugh because it’s literally like two database rows.
  3. I will follow the GDPR  mandate to clear web traffic logs after three months, but I will keep all security related logs for two years because now the EU has declared IP addresses identifying information so I can start submitting your IP address from hack attempts against services to law enforcement in the EU.
  4.  I will keep your purchase information and my payment processor because my country’s tax system demands that I keep that information for at least seven years and maybe longer.
  5. I will be the data officer, until I can afford enough money to hire someone official in the EU, or I have a real reason to do it.

Hopefully that’s enough to show a good faith attempt to follow the law, and my track record of basically already complying with the law should be good enough to avoid the €20 million fine that they are going to give me.  I’ve been told by several Europeans that as long as I’m following the law as best I can that, “Totally nobody’s ever going to go after.  The EU is a nice guy eh? Buddy pal you can trust us? <big grin>.”  We shall see.

I like the spirit of the law, and it matches what I do already, but I will be honest and say I worry it will be abused by bigger corporations to stifle speech and stop bad press.   I also feel the GDPR will mean nothing to large corporations and that the EU government will only enforce it on small companies that can’t defend themselves.  Time will tell, but in the mean time, I’m going to keep my European customers happy and bring this out to everyone at the same time.

Learn JavaScript The Hard Way Has Begun

TLDR:  The JavaScript book is now in full development mode and exercises will start landing this weekend.  I’ve worked out a way to make this book be two books in one and will produce 2160p videos for it.  If you pre-ordered the book at $20 then you received an even greater discount as I’m upping the final published price to $45 instead of $40.  You can see the outline for the book at the end of this article.

I have finally sorted out all the problems related Learn JavaScript The Hard Way. I said that the that the first exercises would start coming down in April, but there were a few issues with the latest release of JavaScript that derailed my original plans for the book. I wanted to wait until I could figure out exactly how to do the book and make it resistant to possible future changes to JavaScript. JavaScript is a very fast-moving language and I didn’t want to be stuck with a obsolete book 2 weeks after I wrote it.

The other issue I had to solve was exactly what platform to support. I originally wanted to support browsers, but those are so diverse in what they allow, and so that I had to abandon that plan. I realized there are plenty of books that teach you how to use JavaScript in the browser, but not many that focus on the basic computer science concepts and fundamentals. So I changed the format and focused just on Node.js.  Node is a little behind on some of the features, but it has enough for people to learn basic JavaScript and complete a bunch of projects.

With the platform solved I then had to figure out a way to update and modernize the style of book that I write. I originally was going to do a book similar to my others, but then I realized I could most likely combine the beginner book (such as Learn Python the Hard Way) with my advanced book Learn More Python the Hard Way. Combining the two structures made for a much more complete book that takes someone from complete beginner to actually finishing many projects in JavaScript.

The final improvement that I worked on was improving the quality of the videos for the JavaScript book. In my last two books for Python I used 1080p as the format and it worked, but it still wasn’t quite enough screen to show multiple windows at the same time. With the JavaScript book I want to show people my actual development environment as I work on the projects. I normally use a really large screen, even larger than 2160p.

I found that beginners develop an unrealistic idea of how programmers actually is done because they see me using a different set up than I actually use when I code. When I code I don’t use a screen that’s 1080 pixels tall. I actually use a screen that is much larger than that and sometimes even used two screens.

For the JavaScript book I wanted to use a large enough video size that people could watch me code as close to how I really code as possible.  On a large monitor, with multiple windows, and without switching windows. To accomplish this I had to do several tests of different video encoding software, recording systems, audio equipment, and also did quite a lot of work in live coding sessions with other students. The end result is that I can now produce 2160p videos with higher quality sound a lot faster and cheaper than I could before.

The Planned Features

Given all that the features of the JavaScript book are going to be the following:

  •  UHD quality video at 2160P resolution, but with smaller files for people with limited download Internet.
  • A combined format that starts from a beginner level and goes all the way to completing many projects of increasing degrees of difficulty, effectively being two books.
  • As with all my books HTML and PDF formats will be available.
  • Focusing on more systems level programming with Node and using the most modern JavaScript I can get away with that Node supports.
  • A total of 62 exercises.

This weekend I will be publishing the first exercises that I’ve written which will be up to exercise 6. This first release will be a draft, and should include most of the videos for those exercises.   I will then be able to post probably three or six videos a week depending on the difficulty of the exercises. The first half of the book is just basics so that’s pretty straightforward, but the second half of the book is actual coding on small projects so those are little more difficult.

Finally, as I said before the price on the book now is $20 and that’s 50% of the final price of the book is done. Because this book is basically two books, and it’s going to use 2160p video the final price for the book is going to be $45 instead of $40. That means you original purchase of $20 is now even more of a discount once the book is released.

Current Table of Contents

Here is a breakdown of everything that I am planning on teaching in the JavaScript book. The goal with the Part I of the book is to get someone just dangerous enough to complete Part II.  In Part II you’ll learn more parts of JavaScript as you make tiny pieces of software.  This makes the JavaScript book much more a “learn by doing” book than before.

  • Part I: Basics
  • Section 1: The Beginning
  • Exercise 00: Gearing Up
  • Exercise 01: A First Program
  • Exercise 02: Comments
  • Exercise 03: Simple Math and Strings
  • Exercise 04: Variables
  • Exercise 06: Escape Sequences
  • Exercise 07: Prompting Input
  • Exercise 08: Command Line Arguments
  • Exercise 09: Files
  • Exercise 10: Files, Args, Variables, Oh My
  • Exercise 11: Functions
  • Exercise 12: Functions, Files, Variables
  • Exercise 13: Modules

You can see that this book goes a little faster than my other beginner books and has a lot less repetition.  By Exercise 13 we’re already loading in external code, writing functions, opening files, and other simple tasks.  In my previous books students didn’t reach this level until Exercise 25.

  • Section 2: Logic and Flow Control
  • Exercise 14: If
  • Exercise 15: If and Else
  • Exercise 16: While Loops
  • Exercise 17: Lists and For Loops
  • Exercise 18: More Lists
  • Exercise 19: Data Objects
  • Exercise 20: First Game

We then get into Logic and Flow Control, where you learn how to make the first useful bits of actual computation.

  • Section 3: OOP
  • Exercise 21: Simple OOP
  • Exercise 22: More Complex OOP
  • Exercise 23: Prototype Inheritance
  • Exercise 24: OOP Game

I then introduce OOP, but it’ll be just enough OOP to be dangerous, in keeping with the theme of Part I.

  • Section 4: FP
  • Exercise 25: Functions and Recursion
  • Exercise 26: Transforming Data
  • Exercise 27: Applying Functions
  • Exercise 28: Scope and Closures
  • Exercise 29: Currying and Accumulators
  • Exercise 30: Events and Callbacks

Modern JavaScript seems to shy away from OOP and go with more of a Functional Programming style, so I’ll spend a bit more time on this way of coding and most likely use it more in Part II.

  • Part II: Projects
  • Section 5: Hacks
  • Exercise 31: Parsing Command Line Arguments
  • Exercise 32: cat
  • Exercise 33: find
  • Exercise 34: grep
  • Exercise 35: cut
  • Exercise 36: sed
  • Exercise 37: sort
  • Exercise 38: uniq

Part II opens up with a series of quick hacks that just implement some basic unix tools in JavaScript.  These are nothing fancy, original, or cool.  The point of this first section of Part II is to get the student to work on the start of a piece of software and comfortable with making garbage.

  • Section 6: Data Structures
  • Exercise 39: Single Linked Lists
  • Exercise 40: Double Linked Lists
  • Exercise 41: Queue and Stack
  • Exercise 42: Sorting Algorithms
  • Exercise 43: Hashmap
  • Exercise 44: Binary Search Tree
  • Exercise 45: Binary Search

We then implement some very simply and naive versions of the classic data structures, and start to focus on quality and testing.

  • Section 7: Testing and Hacks
  • Exercise 46: xargs
  • Exercise 47: hexdump
  • Exercise 48: tr
  • Exercise 49: sh
  • Exercise 50: diff and patch

The student then combines testing and quality with quick hacks to apply their knowledge so far.

  • Section 8: Parsing
  • Exercise 51: Finite Sate Machines
  • Exercise 52: Regular Expressions
  • Exercise 53: Scanners
  • Exercise 54: Parsers
  • Exercise 55: Analyzers
  • Exercise 56: Puny Python
  • Exercise 57: Calculator
  • Exercise 58: BASIC

Section 8 will get into the very basics of parsing programming languages.

  • Section I: Final Projects
  • Exercise 59: blog
  • Exercise 60: bc
  • Exercise 61: ed
  • Exercise 62: sed

Finally, they finish off with a set of open ended projects that are meant to combine everything they’ve learned so far.

Learn Python 3 The Hard Way Officially Released

The Good News

I’m happy to announce that Learn Python 3 The Hard Way is officially released and will be hitting Amazon, Barnes & Noble, and InformIT (Pearson) tomorrow.  I spent quite a lot of time revising this book to fit with Python 3 and also making it dovetail nicely into my next book Learn More Python The Hard Way.  The Python 3 edition of my book now includes 12 hours of video instruction.  All redone in 1080p HD video with me doing more than just typing the code in.  I’m now going through the code and showing you how to run it, break it, pitfalls, debugging, and applying different techniques as I go.  I even have videos that show you how to setup your own Linux Virtual Machine if you want to learn Linux.

I also put in a lot of effort to make this version of the book work well with Windows, Linux, and macOS.  I bought a Microsoft Surface book and did all of the videos right in Windows, so I know the book works well with Windows.  I then have special install videos for macOS and Linux in the key places where macOS differs from Windows.  To make the book work seamlessly with all three platforms I changed up the installation instructions so that you use the same editor on every platform.  That way, even though you’re watching me on Windows, it looks and works almost exactly the same as on macOS and Linux.  Just Python, Terminal, and a text editor that works on all three (Atom or Visual Studio Code).

Where To Buy It

You should also be able to buy it at local book stores, especially Barnes & Noble, but it might be a few days before they hit the shelves.

Nostalgia Time

Since I released the book in 2010 I have given it freely to about 12.5 million people. If you look at the Populations of US States I’ve helped enough people to fill about 13 of the lower populated US states.  The number of people I’ve helped for free is greater than each population of all but 6 US states.  This book as been a labor of love almost entirely from me with help from key people along the way, but otherwise a one man show.  I only recently began to realize how remarkable this is that a single person could have so much impact on the lives of so many people.  I am really honored that I could help everyone, and if you know me I’m not the type of person to toss around words like that easily.  When I say I am humbled by how many people I’ve reached and the number of lives I’ve changed, I really truly mean it.

When I started this project I just wanted to help people learn to code before technology destroyed them.  All I saw in 2010 was the rise of predatory technologists taking advantage of people who couldn’t defend themselves because they didn’t know the basics of computing.  Before my books there was this general belief in computing that only “special” people could learn to code, and that it was pointless to teach anyone who didn’t start when they were 12.  I knew that wasn’t true because I really didn’t learn to code until I was 19 years old and could by my own computer after joining the US Army.  If I could be a competent successful programmer after having started over at 19 years old, then anyone could.  Before I wrote Learn Python The Hard Way programming education books either patronizingly assumed you were a child, or assumed you’d already been programming for years.  My book assumed nothing about the reader other than they had a computer and could copy code, and it worked.  Now people all over the world are attending bootcamps, learning to code, and it’s (hopefully) no longer assumed that you have to start coding at 12 to make a computer do things.

I really believe that my books proved that you don’t have to be special to learn to code, you just have to put in the effort to learn it.  But, I also hope that my books also relay just how much I love programming.  I may hate the software industry, but making a computer do things has been one of the greatest saviors of my life.  It dragged me out of extreme poverty, taught me math and how to write, gave me a job, and help me feel less useless in the world.  I really want my books to be a reflection of what I wish I had when I was younger, trying to learn to code late at night on a Tandy computer for those brief years when I caught a glimpse of what was possible.  Those late night hacking and talking to friends on my local BBS.  The text adventure games and those first bugs I fixed which made me feel like a GOD (followed by the 1000 other bugs that taught I am definitely not a god).

Now For Some Bad News

Looking back on the last 7 years I realized that I’ve helped a tremendous number of people, but I recently started to think that I could help people even more if I sold my books.   Right now, I’m a one man show apart from a little bit of help from my publisher.  I do everything from video, to writing, to even system administration for my own servers.  I struggle to keep costs as low as possible so I can keep working, but if I charged for my books I could do so much more:

  • I could open a low cost or even free online school for junior developers.  One that didn’t skim off the top of your salary and make you quit your job for maybe getting hired at a terrible startup.
  • I could produce even more courses for emerging languages that the big publishers ignore.  I could create full courses for Nim, Rust, Elixir, and anything else that needs training materials.
  • I could hire people to help with the production and produce the books faster.
  • I could also branch out into arts education, producing free courses on painting and drawing and do for art what I did for programming.  I could prove that you don’t have to be special to make art in the same way that I proved you don’t have to be special to code.

I thought about this for a long time, but I struggled with the moral dilemma of wanting to help people who need free education, while needing money to make more free education.  Being as it’s just me–and there’s no way I’m getting a loan or VC money for making free stuff–I realized I’d need to start charging for my big books in order to fund other projects.  I talked with friends and they all said I should just shut up and charge, I’ve done enough helping.  But, it never felt right to me, so I kept my books free to read and tried to devise other ways to pay for my new projects.  I wanted to teach people how to paint for free, but I need help and need to pay people for that help.  I needed help with editing, running the operations, and video production, but I couldn’t pay anyone a fair wage for their work.  I was stuck.

Then I recently found out that members of the Python Software Foundation (PSF) have been actively trying to have my book removed from other books and websites.  I received several chats logs from trusted associates that show PSF members contacting authors and demanding that they stop referencing my books.  Believe it or not, it’s because I said Python 3’s strings suck or that Python 3 sucks.  I’m not kidding.  They are so petty that they are actively trying to destroy the one book that is potentially helping the most people become Python programmers simply because…I don’t like how they implemented Python 3.  I realized that I’m now sending beginners into a community that actively ostracizes and punishes anyone who dissents against the decisions of the PSF members.  I simply can’t support the PSF anymore given these actions, and I can’t send them new people if this is how they treat anyone disagreeing with them.

At that point the decision became much clearer.  If I charge for my Python books I can help even more people and also give people real jobs working for me.  Charging for my books also satisfies the PSF’s demands that my book be taken down, and it will stop directing beginners toward their organization.  It makes me sad that I won’t be able to continue helping so many, but I’m hoping that with people buying my Python books I can create more courses for people to consume at very low cost or even free.

The Future

Starting July 8th, 2017 both my Python 2 and Python 3 books will be no longer free to read.  I will keep Learn Ruby The Hard Way free for anyone who wants to learn to code and can’t afford my other books.  Ruby is a fine language to learn to code, so this should continue my mission to help people who can’t afford programming education.  I will also make books free to read while I’m developing them so people can benefit from them before I officially release them.  This seems like a fair trade since you get early versions of my books for free and I get feedback on them while I produce them.

I understand that this will probably put a large number of people out on a limb, but I hope everyone will understand that doing this will help me help more people in the future.  I also hope that you understand that I cannot continue helping the Python Software Foundation given their track record of abuse.  I’m deeply sorry if this impacts your life in any way, but if you need help feel free to email me at and tell me what you need.

Thank you for understanding.