- Data is pretty much
the worst variable name that you can name your variables. Though, what does this variable contain? It contains data, sort of
like if you were moving houses and you just labeled all of
your moving boxes as stuff. (upbeat music) - Hey everyone, it's David Bumble back with a very, very special guest. He's the author of this book
as well as a whole range of other books. And I'm really excited
to have him Al welcome. - Hello, thanks for having me. - So this book is like really famous and it's a fantastic book, but this is not the
only book you've written and it's not your first book. Do you wanna give us a bit of a history of how you got into writing this and the books that you
perhaps wrote before this? 'Cause it's quite a cool story. - Yeah. So about, I think
around 2008 or 2009, my girlfriend at the time was a nanny for this 10 year old who
wanted to learn how to code. And I thought, yeah, sure. Okay. I can find some tutorials online, but didn't really find anything that just sort of
presented the source code to some little video
games or things like that. That's sort of how I
learned how to program was finding these, like listings in the basic programming language of guess the number game
and that sort of thing. And a lot of things seem to either be just for computer science majors or advanced experienced professionals, or they're more just sort of like, here's how computers
work and here's a monitor and here's a keyboard and- (bell sound) And that sort of low level
things that you don't really... That's not too helpful. And so I thought, well, I don't know. I guess I could start
writing up a tutorial and that small tutorial kept
growing and growing in size. And so I put it on a website and it started getting some traction and I decided to go the
self-publishing route. And it's sort of amazing
that once it was an item that you could buy off of Amazon, people started calling me an author, which I didn't really think
of myself as at the time I was just yet another software engineer. I had started writing up these materials and people like that book that was "Invent Your Own
Computer Games With Python". And so I wrote a second book that became "Making Games
with Python & Pygame". I wrote a third book, which later became "Cracking Codes With Python". And so at this point, this
was about 2014 or 2013. I approached No Starch Press with an idea about creating, "Automate The
Boring Stuff with Python". And I had noticed that there's
a lot of people out there who don't necessarily want
to become software engineers, but they have an office job, they're dealing with
Microsoft Excel all day. They have a lot of just
mindless clicking and typing that they have to do and they
would tell me these stories. And I thought, well, if you knew a little
bit about programming, you could then write your
own script to automate this because it would be
something very personal for their own workflow or how
their organization is set up. So there's no commercial
software to do this. And at the same time,
it's such a small task. You don't wanna hire a consultant to write this software for you. And it just became... - Sorry to interrupt you,
you've got a really cool story. You've gotta tell us that story. I heard it on another podcast where someone used your book, I think it was, and then
they had a very long lunch. Can you explain that. - Oh yes. So this is the story I have in the intro of automate. This is my roommate in college who was telling me this story about how he worked at this one retailer about every year or every quarter maybe, they would get just a huge printout, just a stack of paper
about all the prices. I think it was either
for their competitors or something. Somehow they had gotten this information and one by one, they would
have to look up a price on this big stack of paper, type it into their store database. And then they would just wanna make sure that their store's price was at or under the price of their competitors. And this would take a
team of three people, like a couple days to do, just to go through the entire thing. And so my roommate who was
working there at the time, saw them just in this conference room, just going through all this paper. And he said, "Well, if
you have the original data from that printout, I could write a script that could then just automatically do the database lookups itself." And, it took him about a couple hours to write this program. And then when he ran the program, it took about two seconds to run. And all of his friends
or all of his coworkers just said, "Wow, you've
just saved us two hour, oh, two days of work." And so I don't think they
actually told their manager that they had finished early. They just totally took
a very extra long lunch at the end of that. (laughs) - So the, the main book that you've got is the cipher book on that's
an ethical or hacking focus. Have you done anything else? Like not perhaps in a book, but have you like any other examples and ideas that you can share
or perhaps another book using Python to hack or something? - Oh yeah. So my personal history was, I was a teenage wannabe hacker, but I didn't have any information at all. And I had some friends who were hackers, but then looking back on it, I realized actually, they
didn't know anything. They just made up most of their claims. I realized like... I was like, oh, what they were describing is actually impossible. And I think they just made it up, but I always had that
interest in computer security. It's just that I sort of took the path into software development afterwards and then later book writing, but it is something that
I was interested in. And so the closest thing that I have is "Cracking Codes with Python", which just goes into breaking
those classic ciphers and security is also
just a very wide field. Encryption and cryptography
is a small part of it. And then if you want to go down that path, you'll have to learn a lot
of mathematics as well. If you want to go into
the creation of ciphers and crypto analysis and
that sort of thing, but- - You didn't go to jail, is that right? You didn't get into trouble. Sorry. You didn't go to jail or get into trouble for hacking did you? - My lawyer has advised me
not to answer that question. (David laughs) - I'm a really good Lawyer. (both laughs)
- [David] I love it. - Yeah. I'm not gonna go into that at all. (both laughs) I mean, in the nineties, it was also just sort of hacking was also seen as more of a prank. I mean, infamously the Morris worm, a very early self propagating program that ended up crashing a lot of systems that was written by Robert Morris, just as an experiment more than anything that just quickly got out of control. But these days it's not as funny and simple as a prank because we have... Well, just computers are so
much more relevant to our lives. And we have viruses that
send out spam emails. We have crypto locker programs, we have issues with
stalking and doxxing people. And so the need for security
is much more heightened. And again a lot of these
scams that work online, they're just so much more
relevant to our lives. And so that is a very serious topic. And I also have this written
in "Automate the Boring Stuff," because especially with GUI automation, if you can write a Python program that controls the mouse and keyboard. Well, you can then use it to just sign up for a million different
free email accounts and then use those to harass people. And I write up that, it's
a lot of the hacker folks that I know, there is
this tendency to think, well, as long as I'm being clever, I'm not doing something that's wrong. And it is this immaturity of
not wanting to acknowledge that you can do harm and
that you are doing harm. And it's like, well, I hacked into my friend's email address, but they don't know I did. So it's fine. And it's like, that's
like, are you their friend if you're doing things like that? And it's really easy to get
excited about this power and capability that you can do that you really do need to stop yourself and say, Al, I don't
know, is this ethical? I mean, is it even
ethical to write a program that just refreshes the
webpage over and over again so that I can buy tickets and get ahead of everybody else in line? And these are questions where, just because you can do something, does that mean you should do it? - Yeah, I'll say this on the channel. I only advocate ethical hacking. - Yeah, right. - Not that stuff. - Yeah because people being
knowledgeable about security, there's a great demand
for that because of this. And so we do need people who
are security professionals who can keep our systems secure because not everybody
has time to learn about, oh, well you should have used such and such encryption program. Because clearly version
two of this doesn't work and blah, And all this detailed knowledge that... People have other things
that they're doing, not everyone can become
a security consultant. - That's so great. I mean,
sorry, I interrupted your flow. You were talk telling us the
history of the books. Sorry. - So "Automate The Boring Stuff". I started writing that and
'cause I had all these stories of people who are not software engineers, who are not computer science majors. And they kind of asked me well, I don't know what
would I need to know? And I thought, well, Python is great because Python has such
a gentle learning curve. I started looking at how
people learn to program today and I realized it is so much
easier to program today. The expectations are really high because when we think of programming, we think of AI and self-driving cars and social media websites
with millions of users. But actually programming
today is way easier than it was in the nineties or eighties. Just because the language is easier. The tools make it easier. There's so much more
documentation and help. And so I started compiling the list of, well, okay, what do non-software
engineers need to learn? What is the programming
for office workers? What are those topics
that they need to have? And so, I came up with a
list and that sort of became "Automate The Boring Stuff With Python", which is a title that I remember throwing a whole bunch of words together and thinking, well, it's
needs to have Python in it. It needs to have automate in it. And what am I showing people how to do? Because I didn't wanna just have like, oh, programming for beginners in Python or something like- - [David] Yeah it's a very boring. Yeah. - Yeah. And there's just
so much boring stuff that you don't wanna do.
- Exactly. And this is why we have computers
to make our lives easier. Even though oftentimes
computers make our lives more difficult. But yeah, this all came
together into this book. And I remember I looked
into my diary entry while I was writing this book. And I had some day where I said, I have no idea if this book
is going to be popular at all. I've spent a year writing this. I left my job as a software engineer because I sort of wanted
to switch companies at that point anyways. So I thought okay, I'll
just take a year off, finish writing this book and then get another
software developer job. And the book really took off. And so now I've been writing books pretty much ever since what? 2013. - Before we get into more
details about the book, what I really like about what you're doing amongst many things, you are not putting the
books behind a pay wall. Is that right? - That's right so all
of my books are released under a Creative Commons license. So you can download them for
free at inventwithpython.com. You can also make derivative works from it as long as you use it non commercially, and also release that
under a similar license. Yeah. A lot of people are surprised that people will still buy a book that is freely available online. And including me, I'm completely surprised that people do that. - Well look at my bookshelf, looks great. (both laugh) - Yeah. People still do like actually having a nice printed book, but definitely more than that, I think it turned out to be
a good business decision, even though it wasn't
really a decision at all, but because it was
freely available online, people could actually find
it and then read through it. And that generated the word of mouth to make it really popular. - Yeah, I mean, it's amazing. I love it. That's what I love about YouTube
and other like platforms. And I wanna mention your YouTube channel because I just looked at your subs. You're just under a 100,000. So everyone who's watching, please go and subscribe,
we'll put the channel below. Let's show some love. Al, you're not just giving
your books away for free, but you've also got videos. Is that right? So it's on your YouTube channel and it's on other
platforms, is that correct? - That's right, so I created a course, an online video course that follows "Automate The Boring Stuff with Python". The book still has more information. Originally I thought, well, I could just create this course
to help promote the book. But a lot of people seem to really like the online course as well, every month at the
beginning of each month, I release free coupon
codes to get free signups as many as Udemy will
allow me to put out there. - Yeah. So the course is on Udemy, yeah? - Yes. Yeah, so I have the first 15 videos of the 50 video course
on my YouTube channel. And then you can also
check out Udemy as well for the full course. It covers all the same concepts
that I have in the book. But I figured that a lot of people would much rather just
actually see somebody typing the actual code into it. There's this huge disconnect
that some people find hard to read code in the page and think, okay, I'm going to put this into my computer and then it will work. But then people are sort of intimidated of am I doing this right? I have no idea, but seeing somebody else type it into IDLE or the interactive shell really sort of, I don't know, makes it just that much
more real of like, oh, this is a person doing this. I can do this. - [David] Yeah, exactly. - Yeah and I think late last year is when I passed 1 million registrations- - [David] Congrats. - On the online course. Thank you. - That's huge... It's a huge accomplishment. And it speaks volumes to the fact that I think if you give away a lot, like you said, it was a business decision to give away stuff. It hasn't affected you, in
some ways it's helped you. Is that right? - Yes. I really recommend that more people do this it's... Well, it's actually really hard. I tell people, ignore
all the advice I give about writing books or
creating online courses, because it's sort of like
asking a lottery winner, what numbers they picked. All of this seemed to work out for me. And I'm not really sure
how much of that is luck and how much of that is hard work. Of course it's both, but some
days I tend to think that, well, I got pretty lucky with
putting my work out there and having it get noticed. And it's definitely been a very wild ride. I really thought that I
would be a software engineer at some generic Silicon
valley tech company here in 2022, I really could not have
predicted all of this. - I mean, you're very humble. I mean, and that's what's also amazing. And it's fantastic because I mean this book wouldn't have done well, if it didn't get good reviews and the reviews on Amazon are amazing. - Yeah. I've- - So kudos to you. Sorry, go. - I've always thought
that the secret to that was that I really strive
to try to remember what it's like to be a beginner. And I have huge blind
spots about that as well, but I think there's just
a lot of software nerds who have learned so many cool techniques and so many awesome tools and
other sophisticated things. And it's really exciting
to have all that knowledge. And then when you try to
teach it to other people, you immediately want to just
plunge them into the deep end. - [David] Yep, exactly. - Which is utterly terrifying
for a lot of people. I find that actually teaching
children how to program is much easier than teaching adults, because children don't
think of programming as something that you
have to be really smart or super genius to understand. And clearly with the amount
of mistakes that I make, even after over 20 years of
experience writing software, I'm still forgetting semicolons and getting small syntax errors and wondering why my program doesn't work. And then three hours later I realized, oh, because I wrote the code incorrectly and it's doing exactly
what I'm telling it to do. - I mean, it's great to hear
that from someone like you. And I think it's an
encouragement for everyone who's starting out. So let's talk about what... I think you've called it
gateway drugs into programming. There's specific topics
that you sort of hone in on. So let's talk about those. - Yeah. So the way that
I got into programming was that my parents bought my sister and I an 8-bit Nintendo. This is very much dating myself, but... So I really loved Mario and Zelda. And I thought like, oh
that'd be really cool. And I was very fortunate
that my family had a PC in the house growing up. This is of course, lots of programmers love
telling you this story. It's like, oh, I had a Commodor 64. And it only had two kilobytes of memory and whatever, had to
use a magnetized needle to set the hard drive
flatters to everything. (David laughs) All of those stories. Anyway. Yes. I had a computer and I
found a book in the library that went into programming
small games in basic. And I thought like, okay,
this is kind of cool. And I read through it and I didn't really understand most of it, but I could copy the source code and then start making little changes. And I really hate telling this story of how I learned a program because- - I knew you... I've got it on my question, here. I know you hate this question, but how old were you
when you started to code? So I'm sorry to put you
that spot, but go on. - So I think maybe in
the third grade or so about seven or eight years old, and that's when I started
like started to program, I'm doing air quotes a
lot in this interview because there's so many things
that are not straightforward about my path into programming. And I feel that a lot of
people are really intimidated because they hear stories like mine and think like, well, okay. I didn't learn to program as a kid and I didn't have a computer in the house when I was growing up and, oh God, I'm so old. I'm already 23. Is it too late for me to
become a software developer? And...
- I hear that a lot. Yeah. Yeah. I'm 23. You dunno how old I am. That's- - Oh yeah. (laughs) But yeah. And so the one thing that I wanna make clear to people, and I have this in the introduction of "Automate The Boring Stuff with Python" is that basically everything that I learned about programming
from elementary school to graduating high school,
anyone could learn that in, I don't know, maybe
a couple dozen weekends, it wasn't that much. It was mostly that I had a lot of time to just mess around with little programs. I wasn't really thinking of it as I need to create a career and build up. And there's all these different frameworks that I need to learn and I need to learn every programming language out there. I really wanted to create, just Zelda. And also by the time I
graduated high school, I was not programming Zelda. I never even got like that Teris program working exactly right. But mostly it was just playing around with really small programs. And I took this idea and
I put it into my book, "The Big Book Of Small Python Projects" which are all text based programs, which I feel like is very 1980s, and might not capture
people's imaginations. But the real benefit of that is that because the source code is in text and the program output is in text. It's a lot easier to see the cause and effect
behavior between those two. And I just wanna assure people that you don't have to be a genius. Certainly I, and my coworkers, when I was working at a tech company, we made lots of learning experiences. Let's call it. - I like it. I like it. - Yeah, and I had the benefit, of then knowing what I wanted to do. So I went to the university
of Texas at Austin for a computer science degree. A lot of it was, was good
timing, after graduating, I moved to San Francisco
and got a job there. And this was sort of before the housing prices really skyrocketed. And so I was able to get experience there and I've just had a lot of
opportunities and privileges. And I thought, well, this is something that I want
to make available to everyone, because everyone should have the benefits of generational wealth,
growing in a household that has a computer there. I remember I would go down
to the Barnes & Nobles after school a lot, and
then just sort of pull these $60, $80 books on programming or computing and just sort of, I
treated Barnes & Nobles as my personal library sort of. - Love it. - Yeah, it got so bad. This was in the nineties
before cell phones. It got so bad that my
friends would often call Barnes & Noble. - Oh, wow. (both laugh) - And then, so they would go on the PA and it's like, "Would
customer Albert Swaggart please come to the front
desk, you have a phone call," which thinking back on it. Wow. Those employees must
have had a lot of patience for this random teenager who's
showing up day after day. Yeah. So a lot of these little stories of how things worked out. And I remember you can often find times find a deal on Udemy to just sign up for the course for $18 or $20. Especially if you open the
website in privacy mode, when the website thinks
you're a brand new customer, they'll offer you the deal that way. - I love it. - But, but I still
remember being a teenager where, $18, $20, that's
still a lot of money for me. - It is. - It's something that I feel like I've gotten a little
too used to having that Silicon valley tax salary
kind of level of money, but also at the same time thinking, well, this is a barrier to
access to a lot of people, both outside the United States, but also within the United States as well. And so how are the... What are the things I could do to get rid of most of these barriers and putting the book online for free seems to be really great. - True. - Yeah. I mean, computers are just absolutely amazing devices even though they're just all around us all the time, we've gotten used to them, but it helps to stop and think, it costs me about $15 a
month to have this web host. And then I can just... Took a lot of work to write the book, but once it's written, I can
just put it on this website and tens of thousands of
people can download it and I pay like 15 bucks for that. And so it's incredible what
you can do with computers. And especially when you know just a little bit of programming. - Yeah. I mean, I think it's fantastic. I mean, I love that. And that's sort of my
mission on my channel and the stuff that I do like you. Try and give away as much as I can. And what I find amazing in sort of the community that I'm in is a lot of people who can afford it will support me to allow
more and more people who can't afford it to get it for free. So I think we all win, it's amazing. And I love it that you are
making all this knowledge available for free. And these days, what are the requirements for Instance to go through the book, you just need a computer,
some couple of computer, is that right? - That's right. And these days that's becoming even more and more accessible, even if all you have is just
a tablet or your smartphone. There's also online
interactive shells in Python and all these online tools. I was at PyCon earlier this year. And the big news from there
was just running Python in the browser, just getting
the actual C Python code running in the browser. And they stress, this is still very early
alpha release software, but everybody's just really excited. It's so amazing that
people are just saying, oh, you can now run Python in the browser. And it's great. - Yeah, I mean, it's so
true because I'll say this. A lot of the audience
who watch are in India and other places, and I've had people say, David, how do I study? Cause all I've got is my cellphone. And I mean, it's a huge development that you can code in a browser. Just go to some of these sites and spin up a server or
just directly in the browser and learn. So the barriers to
entry are so much lower. It's fantastic that you're doing this. When we spoke about the
gateway drug into coding. I think it was games is that what... That's got you hooked, is that right? - That's right, yeah. So I feel like a lot of
people followed that path of, hey I'm really
interested in video games and I'd like to create my own video games, even though, especially
these days you can have... I teach kids from time to time and they'll sort of have
inflated expectations of like, hey, let's make Minecraft. - Just like AI. - And it's like, well, we have
an hour and a half, so, hmm. But at the same time, it is sort of a very common gateway to learning how to program. But I also wanna acknowledge, it's not the only way because in fact not every child or every adult is interested in video games. There's also a lot that you
can do with music and art and using programming there or just you have a very tedious office job and you want to automate a
lot of those boring tasks that you have. And it's really amazing
that in the last 20 years or especially 10 years. I feel that either the '90s were sort of when PCs were
getting more and more into homes and then the 2000s is
sort of when everyone was getting online and on the internet. And then the 2010s is really when everybody's on social media and now we also have
smartphones in our pockets. And so, if you were just somebody who chatted online with
your friends every day, 25 years ago, you were a huge dork, but today you're just the
average Facebook user. - Yeah. I mean, that's what
I love about your books, 'cause you've got "Coding with Minecraft." So if someone... That's aimed at kids, is that right? Or is that just general
like code games and stuff? - It is aimed at kids. I have the strong suspicion that there are a lot of adult
Minecraft players out there. ♪ Never play enough games ♪ Game (indistinct) starting
off with the ultimate game of all time, Minecraft, that's right. (upbeat music) - Possibly myself included in that. Yeah. "Coding with Minecraft" covers a mod called computer craft, which adds these programmable robots into the game world. So you can craft these robots
and then you can write code in the Lua scripting language. The robots themselves are called turtles because they're very much like the old logo line drawing
turtles where you can tell them to move forward, turn left, move forward, start mining things,
start crafting things. All the... I joked earlier with the publisher. That's like, "Well, how about we call this automate the Minecraft
stuff for the book title." And then we decided to pass on that. But yeah, it was sort
of like how it's like... Mining stuff in Minecraft is
actually getting pretty boring. How can I automate this with some robot? - But I love it because I
mean, I think what you've done, which is great is you've
got a range of books and some of them are like
you've got Scratch programming, you've got "Coding with
Minecraft," but you... so that covers perhaps for my... I know what you're saying
earlier about kids. You mustn't expect that
you have to start coding when you're young. But I think when you're a parent, you also have the other
problem where you think, okay, how do I get them interested
in coding from a young age? I'd like them to learn this stuff, 'cause it's a skill that
can change your life. And I mean, that's a
fantastic way to get in. So get them in through
the games like you got in. But then for other people
who do or not into games, you've got this. I think you mentioned, the way to program is gaming Excel and then hacking, those are three things
that you kind of cover. Is that right? - Yeah. Yeah. So my other book "Cracking
Codes with Python" goes into how to break
very simple ciphers. These are sort of the classical ciphers that people used up until world war II. Once we started having computers be able to do code break for us, but these are all sort of
simple substitution ciphers and the visioner cipher
and transposition ciphers and all these other things that... I used to have these books that were sort of like spycraft for kids and how to use lemon juice
to make invisible ink and that sort of thing. And they would always have
some sort of decodering section in those and you can still find
a lot of these books today, but I thought, well, it'd be really great to learn how to program and write books that can do these ciphers and then also write programs that can break these ciphers. So if you don't have the encryption key, you just have the cipher text. How can you use computers to analyze that and then recover the original
plane text from that. And then at the very end, I
go into the RSA algorithm, I- - (indistinct) the story at the beginning? Sorry, go on. - Oh yeah, yeah. I warn readers to not actually use any
of the encryption programs that they write in this
book because clearly, for a real world encryption they are very much not sufficient for safeguarding your data. I think a lot of people do get a kick out of just watching their computers start crunching a bunch of numbers and then spitting out the answer. - There's this trend in
networking in the last few years, which is like, you as a network engineer, you need to learn Python so that you can automate your network. When I was studying a Python course at... I don't wanna mention the name, some university here in the UK, I found it really extremely boring because they were doing math rather than, I've got this problem, I wanna solve it. But now you're teaching me
some other arbitrary stuff. And I think what you've done great here is you've taken different
reasons to learn this. You're giving people a
reason very, very quickly. Like if you do this, you
can automate some Excel task or some task that saves you time. So you're not learning coding
for the sake of coding, you're learning coding
to accomplish something. - Right. I mean, if you do
wanna become a software engineer "Automate The Boring Stuff with Python" is a great introduction
to that career path. But it is by no means comprehensive. I skip a lot of minor
topics where I feel like, well, you don't actually
need to know this. So less comprehensions or
object oriented programming and classes. I completely skip that because I just wanted to go
from zero to productive in as little time as possible. I also remember a lot of my
computer science education and I'm glad I have that CS degree. And I did learn things in
it, but at the same time, I don't view it as strictly necessary to go through a four year program to be able to be productive
or even to get a job. Certainly having that piece
of paper does help you get your foot in the door for those jobs. But I feel like we tend
to teach programming and computer science in the
same way that we learn it. And so, yeah, you'll find
that a lot of computer science sort of grew out of
mathematics from universities. And I have a whole rant about how much I don't like pseudo code, especially pseudo code
that uses Greek letters for variable names because, well, you can't actually
type Greek letters on a standard keyboard and the pseudo code isn't something that you can run under a debugger. And it really helps to
make the code examples for some algorithm fit on
a single PowerPoint slide. - Yeah. - This math notation is
really terse and cryptic and looks downright
something a celtic maybe, but that's because people are writing it on chalkboards or on paper
and you don't wanna spend a lot of time writing
out long variable names. So I feel like with a lot of programming, we just got used to calling
our variable names X or Y even though we're not writing
on chalkboards anymore, we're typing on a keyboard. We can write out much more
descriptive variable names, but it's a very hard habit to break. This was something that
I thought about a lot in my upcoming book, "The
Recursive Book Of Recursion". - I saw that. Yeah. When's that out? - So that should be
coming out in August. So- - [David] Oh great. - Yeah. And you can go to nostarch.com, the publisher's website and
then get the ebook version of it immediately. They're really nice because when you order or pre-order the print book, they also give you a DRM free
version of the ebook as well, so that you can just load
it on your own devices or read it on your laptop. But Recursion is one of those topics that is just famously
difficult to understand. And so I started looking
at it, and I thought, well, I think a lot of CS
professors and instructors are just sort of bad at teaching it because they're teaching it
the way that they learned it. And we've never thought about, well, what are the things that
make this more confusing than it has to be? So I found out with Recursion, it's telling people
what the call stack is, was a major thing that was
previously not explicitly explained to a lot of people. And that's really why Recursion is so much more confusing than it is. - I often find that I do a lot of teaching and I always call it
the curse of knowledge. If you know too much, you
actually your own worst enemy when you try and teach
someone who's brand new. Because like you just said there, if you've done a four year
computer science degree, this kind of stuff looks easy, perhaps. But if you've never coded in your life, it's scary and stuff like
that can put you off. And that's what I love about
what you've done in the book. You've really taken it down to make it as simple as possible. And you give good, simple code examples that someone can immediately
see the result of. (laughs) - Yeah, I just over and over again, I think it's a matter
of just asking yourself, can you make this simpler? Can you make this simpler? Just really letting your
perfectionism run away from you. And then the editor will tell you, we actually need those
chapters somewhat sooner. And so they'll keep me more grounded, but I feel like even with
"Automate the Boring Stuff," I'm really proud that of the code examples I give in the book. I think those are simple. But then at the end of each chapter, I have these practice
projects where I say, okay, now take what you've
learned in this book so far and write a program that simply does blah, blah, blah, blah, blah. And a lot of people email
me and said like, yeah, I don't really know how to do that. And then I realized like, oh, I just really was asking for far too much. So it's a note for the third edition that I really need to have
more practice exercises that are simpler rather than just a few kind of complicated ones. But yeah, the more you know the easier it is to forget how hard it was when you were first starting out. And I think that turns off a lot of people from programming, because certainly there's
what computers are capable of and what computers are not capable of is really mysterious. Because on the one hand,
we can create all this amazing special effects for movies, say, and it looks incredible. But then also there are also some snake oil companies out there who are saying like, yeah,
we use machine learning to take a picture of your face and we can predict the day you'll die or something like that. Recently, I was telling... Making a post on social media that it's really important to deflate the sensational claims that
a lot of very click bait or click hungry websites
will report about technology because, telling people, yeah, hey, we can put
microchips in our pets and that will help find
them if they're lost, because we can scan
that, that's realistic. But then saying the COVID vaccine will put microchips in your bloodstream. That is not realistic. And being able to tell the difference between those two things
can be really hard if you don't know that much about the capability of
technology and software. And especially because
you have a lot of outlets that really wanna hit you
with a very compelling and frightening story saying like, oh, cars can now drive themselves, but can they also kill you? And your microwave will develop sentients and then try to poison your family or something like that. It's really hard if
you're not really aware of what programming actually
is to separate the bogus claims from the more grounded ones. - That's a good point. I mean, I wanted to get back to
the book you've got... I've got version one here or edition one. You've got the second edition is current and your third edition's
coming out soon. Is that right? - Oh, no. The third edition is
still just a lot of ideas. - [David] Okay. - That I'm planning to work on. It is sort of something that I do want to eventually come out with, there's... A lot of people have been telling me like, oh, well, I'd like to do OCR to do text recognition. I'd like to cover text to speech and add that as a feature. And, mostly, I just have
a lot of small details and it's really hard because I believe the book is over 500 pages at this point, the second edition added
about another hundred. - Yeah, you added quite lot didn't you? - Yeah. And I just don't want it to have this big intimidating
dictionary sized book that just slams down on people's desks. Are dictionaries even... Is that a thing that people buy anymore? I don't think I've actually used. - My kids dunno what that is. Exactly, it's like Google. So I saw a presentation
where you spoke about the most popular parts of the book, because you were getting
hits on your website. So could you tell us, what
are the most popular parts? And then let's go to, I
think, the least popular part. So, and I'll take a stab at that, but let's start with the two most popular or what are the most
popular parts of the book? - Oh, okay. So just from looking
at the website traffic, I can tell that a lot of
people are into web scraping and then also GUI automation. And so in the book I cover using selenium as a way to automate and
automatically control your browser. So using selenium, I remember
when I first heard about it, I thought it was this big complicated tool that the QA department uses
to automate their tests. And actually you can start
controlling your web browser with just four or five
lines of code, actually. (laughs)
- That's brilliant, yeah. - It's great. Your Python script can
then open up a browser and then automate clicking on
things or filling out forms or finding links. And so much of what we
do today on your computer is really what you're
doing on your browser. You're just interacting with
all these public systems. And so being able to write a program that can say automatically
refresh the page and check for any updates on a website, and then notify you when you get an update that you're looking for,
that's really helpful. If you just need to pull off
a ton of data off of a webpage and then simulate a
click to the next link, and then pull off all the
data on the next page, and just do that a thousand times over, you can write a script to do that. There's a lot of things where
you want to write scripts that sort of glue
software systems together. You're not trying to create
your own web browser, you have a web browser, you just need to take all
the data off this webpage and then automatically put it
into this Excel spreadsheet. So you just want to combine those and integrate those two software systems. Normally you would have
to do this as a person just by selecting all, copying, pasting, and then doing that over and over again. And writing a script will... Even if it takes you just
as long to write the script to automate this system, as
it would be to do it by hand, I feel like programming is psychologically so much more comfortable. I'd much rather be spending
two hours writing code to do something in one second than spending two hours doing
that task manually myself. - But you got the code for next time. You can edit and change it - Yeah. Yeah. And that's something that I
always point out to people is even if it takes you
longer to write the code to automate a task than it
would be to do it yourself, that's two or three hours
of practice you're getting writing programming and you
will get better and better at it and be able to write these
little scripts faster too. And so the second part, I think the second most
popular part on of the "Automate the Boring
Stuff with Python" content is GUI automation. And this is essentially
having a Python script that can automatically click and type on the keyboard for you. And this is a great way to
sort of integrate your scripts and automate tasks with
existing desktop software. For the browser, you
definitely wanna use selenium or some other web scraping module, but for just a generic
desktop application, it could be literally anything, there's probably not... There probably aren't any tools that can help you automate
this tool yourself. But if you can then just set it up and then write a simple Python script to say, okay, click here, click here, check all these check boxes, highlight the text in this text field, and then copy and paste
it into some other place. That's a really amazing feeling, especially once you finally
get it all working correctly, and you can just watch on your
computer, just hands free, the mouse cursor is moving
around automatically and so precisely. It gives me that amazing feeling like when you see just an
assembly line with robotic arms just automatically and perfectly
performing all these steps over and over again. And then occasionally your program will start clicking on the wrong thing because the window is
actually five pixels over than where you expected it to be, and then you have to stop it. I use the metaphor of that
scene in the movie "Fantasia" where Mickey Mouse, as the sorcerer enchants the brooms to fill the tub full of water, but then they keep filling it and then eventually the water overfills and it's like, oh, this
is automation gone mad. I had to put a new feature into the GUI automation module
for Python that I created- - You wrote it, didn't you? - Yeah. Yeah. I wrote that. I was looking around on PyPI
the Python Package Index, where you can download and install a lot of third party modules. There were a lot of
modules that worked on Mac, but not on windows or vice versa, or they only worked on
Python 3 and not Python 2. And so I thought, okay,
well, I want to have a module that works on all platforms and also just has a very dead, simple API. So you can just say import
PyAoutoGUI, PyAutoGUI.click, and then specify some X Y coordinates. Just really simple, you don't
have to do any sort of setup or a knit or create your
own framework for something. You will be amazed at how
popular something can be if you just make it easy to use. - Exactly. - I feel like a lot of software engineers sort of forget that. We love creating these hierarchies
of classes and it's like, oh, the Fu class inherits from
the bar class and everything. And then the documentation, if
we bothered to even write it. - Exactly. Yeah.
(laughs) - Is just this exactly giant wall of text. And people are like, how do I
actually do things with this? - Exactly. and sorry, I interrupted you. You were talking about
the bath overflowing and then you had to do something. - Oh yeah, yeah. And so I had to add a
feature to PyAutoGUI, where it just has a 10th second delay after each function you pass it because... So that way you can then
slam the mouse cursor into one of the corners of the monitor and it will detect, okay, if the mouse cursor is in the
corner, then just shut down. Because the really great
thing about GUI automation is that you can watch the mouse cursor start clicking around. But if your program gets out of control, you can't move the mouse to
close the program itself. So you needed just some way
of being able to shut down without pulling the plug on your computer. - Yeah. I mean, it's... I mean, those are just
two fantastic examples of how you can use Python, which is a simple language
compared to others. And maybe we should talk about that. But before that, I was gonna say, I suspect based on a
presentation I saw you give that the least popular
part perhaps of the book is Regular Expressions. - Yeah. Yes and no. I mean, people do- - I certainly enjoy it because
people don't like it. Yeah. Sorry, go on. - Yeah. It's regular
expressions are important, but it is one of those
things that can be confusing and kind of intimidating and you don't necessarily have to know it. And so people... It's a very popular thing
to put off learning about. So just for people who don't know, Regular Expressions are
sort of a miniature language for doing pattern, text
pattern recognition. So if you're looking for
a particular phone number in webpage, you can just hit control + F and then type that phone number in. But if you're just looking
for any phone number, really you're looking
for the pattern of text. And so here in America, that will be three digits for
the area code and then a dash, and then followed by
three digits and a dash and followed by four digits. And so a regular expression for that, you can then create a RegX as
it's called, for that pattern. And then you can just feed
it some giant text file or something like that. And you can find every
instance of a phone number in that text document. And this is an incredibly useful thing. I have an example of the code
that you would have to write if you want to do this
recognition yourself compared to just using a RegX module such as Python's re module. But then again, it's something that
eventually every programmer will have a need for it, but you're probably not
gonna need it this week. And it is kind of confusing. So yeah, people will
just keep putting it off as often as possible, but it's sort of like using a
debugger where it is like, oh, this is gonna make your
life so much easier. You just have to sit down and learn it, but it's like, no, no, I prefer just typing print and
putting variables in there. But it's something that
I definitely recommend everybody learn at some point. - And would you recommend Python
as the first language or... And what's your opinion
about other languages, like C or Java stuff like that. - Oh, wait, there are other
languages besides Python. (laughs) I like it. Good answer. Oh, I like it. - I mean, it's... I remember as a high
school and college student, I kept learning all these
different new languages and sort of at the end of
college, in the mid 2000s, I discovered Python and I realized I haven't really learned any new programming languages since then. I definitely recommend Python as the first programming
language that you learn. It does not force you to learn a bunch of complicated
concepts to do simple things. That's a big problem with, I feel Java where even to
create a hello world program, you still have to type public static void main string args [], which I will have burned into my brain and until the end of my days. But yeah, with Python, hello world is just print hello world. And I believe there's the saying Python makes simple things easy and complicated things possible. It's really a language that
doesn't get in your way. And because when you're first
learning how to program, you're grappling with all of
these programming concepts, and that's hard enough as it is. You also don't wanna have to learn all these tiny little details that the language forces you to learn. I recommend Python as the first programming
language to learn, hands down. Other people will say- - Yeah, I agree.
- Well, okay. JavaScript is useful and
everything like that. And I feel, and I sort of agree with that, but at the same time,
you can learn that later. It's also great to learn a
second programming language, just so that you can see how two different programming
languages compare. It's sort of like traveling
to a different country just to see how things are different there and you learn things
about your own country that you just sort of took for granted and thought was normal everywhere. So learning a second programming language gives you that perspective. But Python, I always recommend
as the first language that somebody should learn. - I love what you did here,
'cause it's quick wins. I mean, if you're starting something new and I think that's a problem with Java and all these languages, you've got this massive mountain to climb before you see a result, but with a few lines of Python code, right in the beginning of your book, you already see a result. - Yeah. And that's
something that I really like about the Scratch programming environment. - Can you talk about Scratch just for people who
don't know what that is. - Oh, so Scratch it's
a website you can go to Scratch.mit.edu. It's from the Lifelong
kindergarten group at MIT. It's a wonderful programming
environment for kids. It really has this immediate feedback where you take these code blocks
that you can snap together and you can create little
games or animations and then easily just with a
click of a button on the page, you can then share it
with other people as well. And you can also go onto the site itself and find other people's games
and look at the source code for their programs as well. I think they made a lot
of very smart decisions. For example, the code blocks. I'm sure you've seen tons
of software pieces like this where instead of typing
out the source code, you just use the mouse
to drag them together and snap them together. And a lot of places have also
copied this from Scratch. Scratch was essentially doing it to... Was the first to do it. And one thing that I realized is, well, if you have these code blocks
that you can fit together, they only fit together in certain ways. And so it's actually impossible
to make a syntax error in Scratch. - That's very clever. Yeah. - Yeah. They also don't
have any error messages. They've sort of designed the language in such a way where if
you're doing something weird, it'll have some very
straightforward default behavior. And I can't tell you how frustrating it is for kids who already might not
have the best typing skills, so they're just sort
of hunting and pecking to type out this code. And then they get some
inscrutable error message because they forgot a comma somewhere, or they added too many commas
or something like that. And the error message doesn't
say, you forgot a comma here. The error message will
just say, end of line, string termination not found
or something like that. So Scratch is a really great tool to get kids into programming because it has that immediate feedback. You can spend about five minutes snapping some blocks together, and then you have a little
program that's not great, but it is entertaining for
a couple minutes at least. And it really builds that confidence- - [David] Quick wins. - Yeah, exactly. It's quick wins. - Yeah. I love it. I mean, Scratch is great. And so you would... Would you recommend
Scratch for what age group or would you say straight into Python or does it just depend on the individual? - So I used to teach a Saturday morning
programming class for kids, and I feel that the
official scratch age range is from eight to 16, but
I found that older kids sort of start feeling like
it's too kidsy and cutsey. I mean, Scratch does a great job of not dumbing down any concept, so you are programming, but the
presentation is a bit kidsy. And so I find that eight to
12 is about a good age range. Usually around 13 or 14 kids sort of wanna move onto a real Python or a real programming
language like Python, but at the same time I still use Scratch whenever I have like, oh, I have like a little idea
for an animation say, and I just wanna throw... I wanna rapidly prototype
something together. Scratch is actually a great tool for that. - [David] It's ready. Yeah. - Yeah. But really if you
have an eight year old and they say, hey, I wanna
become a cool super hacker and learn how to program
and they're excited and interested in it. You can just start them off
with Python immediately. I feel like as long as the
kid has interest that's there, Python is certainly easier
to use than Basic was for me when I was that age. So, if anything, it's more appropriate. And then also the Scratch
people also have ScratchJr, which is a tablet and smartphone app, and that's even simpler than Scratch. I don't have a lot of experience
teaching kids with it. I've just played around with it. And that's for the five
to eight age range. And really, I think the only
programming construct they have is sort of direct
movements and then loops. I'm not even sure if they
have, if else branching or anything like that, but they intentionally
make it very simple. So certainly nothing makes me feel old than watching toddlers expertly use iPads. - Exactly. Yep. I know the feeling. - There's a lot of quality tools out there and Scratch and ScratchJr are
also completely free to use. - I mean, I think just
looking at the books again, if I was an adult now and
I wanted to learn Python, which of your books would
you recommend as a start? Is it the "Automate the Boring Stuff?" Or is there another book that you would- - Yeah. - Or does it just depend on interest? Sorry, go on. - Yeah. I would definitely go for "Automate the Boring Stuff" just as a general programming guide. If you were into making little games, then "Invent Your Own
Computer Games with Python" is also for complete beginners with no programming experience. And then if you do sort of find the idea of making these little code break programs to be interesting,
"Cracking Codes with Python" is also made for people with no previous programming experience. - I'm glad you said that. 'Cause I was gonna ask you, do you need any experience at all? And so it's just different
paths, is that right? Like different interests
and then get your... The book takes that interest and then builds your Python knowledge. - Yeah. And I feel that's
a big part of my job, especially today creating
Python materials for beginners is just figuring out what interests people and then finding that as an angle to get them into programming because there are so
many beginner program... Like learn to code resources and things. And some of them are very well done. And then others are just clearly they're copying and pasting
things from Wikipedia just because they wanna
make some quick bucks from this whole, everyone
needs to learn to code sort of idea that's out there. So yeah, ciphers is
one, video games is one, automating Excel
spreadsheets is another idea. And then the Minecraft or Scratch. I joke about this, but
it is actually true. I sometimes do forget all
the books that I've written. - No, that's fine. I mean, I was gonna ask you, let's have done the basics now, then you've got "Beyond the
Basics Stuff with Python." Does that introduce object
orientated programming? Does it introduce other
more advanced topics? Or is that like an- - Yeah.
- Sorry. - Yeah. Yeah. A lot of people kept asking me like, okay, I've read "Automate the Boring Stuff" or they've read some other
beginner Python book, like "Python Crash Course
or some Udemy course, but they still feel like
they're not writing code the way that expert
experienced software developers write code. And so I thought, okay, well, I need to write a
book that is for them. And so a lot of it is sort
of the same kind of material that the book "Clean Code"
covers, but also at this point, "Clean Code" I believe came out in 2000... Late 2000s, maybe - They're old. Yeah. - Yeah. And so some of
the advice has held up and some of the advice has not held up, but I thought, yeah, okay,
well let's have a book. I'll just call it "Beyond
The Basic Stuff with Python," just to carry on that
stuff in the title wording. But yeah, so it goes into
some advanced Python concepts about the Python language
and some of the gotchas and more esoteric features. But I also cover general
programming topics like object oriented programming
and creating classes. And I try to explain classes as why do you actually need this? And classes are a great
way to organize your code, especially as your programs
become larger and larger. I feel like the mistake of learning Java as your first programming
language is that you think, oh, we need classes because that's
just how you write programs. You fit everything into a class, and then you start creating these. (indistinct)
Yeah. You start creating these
massive inheritance hierarchies of A subclass, B subclass
C and pretty soon your source code is really
complicated and hard to read, and then you realize, oh yeah, it just prints hello world to the screen. (both laugh) - I think it's that problem once again, codes of knowledge and sorry
to interrupt again. Go on. - Oh yeah, yeah, for sure. And I've seen a lot of software developers sort of fall into that trap. They just have the engineer brain- - Yeah, exactly. - Where it is like, oh,
well it makes sense to me. And you put all these complicated
pieces get to together and then you... You have to remember that computers exist to make human lives easier
and not the other way around. But yeah. So "Beyond The
Basic Stuff with Python" also goes into some, what I call software
engineering best practices. Like how should you write your functions? What kind of names should
you give your variables? I've noticed that I think data is pretty much the worst variable name that you can name your variables. It's yeah. Though, what is this variable contain? It contains data. (both laugh) I say, it's sort of like
if you were moving houses and you just labeled all of
your moving boxes as stuff, which is sort of laid
later on to that process. So like, oh, here's bedroom things, here's kitchen appliances. And then after a while, I've just give up and I'm like
stuff, stuff, stuff, stuff like with moving, if you keep giving sloppy
names to your variables, that's going to bite you later on when you actually have
to check your source code and say, hey, what does
any of this actually do? And a lot of this stuff isn't... This isn't a thing that you'll learn in these hello world tutorials, where you're learning the syntax
of a programming language. And I tried to take all
of this random information that I had learned over a couple decades and actually just put it into
one book where it's like, okay, you can just sit down and read this. There's still plenty
more that you'll learn just from day to day experience. But this will just give
you that one leg up. I forgot the, the other
chapters in that book, but it's just sort of
like the best practices for writing your code the way that professional
software developers will write their code. - But I love what you've done because the first book is like, give you a taste of what's possible and wet that appetite. Like I wanna learn to code
and you have these quick wins, you can do a bunch of stuff without... (chuckles)
Stuff. I shouldn't say that. Sorry. you can do a bunch of things without having to learn all
this software, like programming, computer science stuff. And then once you get
the foundation right, then you get, okay, now that
you've seen what's possible, now I'm gonna teach you
how to scale this up. And I think that's a
fantastic way to do it. - Yeah. That's another
thing that I write about in "Beyond The Basic Stuff with Python" is I have a chapter on environment set up, which is sort of just the general term for how do you get Python
installed on your computer? Because this is always a
surprisingly complicated thing because some people have
windows, some people have Mac, some people they're using
their company laptop and they don't have the
permissions to install software. Oh, but now their path
environment variable isn't set up. - Exactly. - So like when they type Python, they're actually running a
different version of Python because they have multiple
versions of Python installed. And so I go a little bit into
just using the command line and some basic concepts like that. But a lot of times when I'm... Whenever I do a workshop of, Hey, learn to code in Python
even if you have no experience, I often find, I have to
do a pre-workshop workshop just to make sure everybody has Python installed on their computer and everybody can just get hello world to appear on the screen. And then we can move on to
actually learning how to program. Again, when you've had
decades of experience, all of this stuff is just like, oh yeah, you have to do this. And if it gives you this error message, it actually means that you have to change these
configuration settings and things like that. We know all of this just
because we have experience, but it is just a complete
blocker for anybody else who does not have that
experience and just sees this. And then just sort of says like, well, I have no idea what to do
because they don't realize that professional software engineers are just Googling these questions anyway. - [David] Exactly. - We don't know what these
error messages mean either. - Exactly. Yeah. I mean, it's intimidating
when you start out, it looks like magic, I
think you've said in... I've heard you say, but
it's not like that, is it? It's just once you realize
what's actually going on, it's just a bunch of humans
trying to make things work and we all make mistakes. - That's another common anxiety I see with people learning to program is they say, well, I've been
doing this for three months, but I still have to
Google every single day. Like when will I be able
to stop Googling things all the time? It's like, when you die. Uh, yeah. It's like, might wanna sit down for this. (both laugh) Programming seems magical. Especially computer
security and hacking topics. That also seems... There's plenty of jokes about how hacking was portrayed
in movies and TV shows. - Exactly. - And then how hacking
is portrayed in real life where it's just sort of like
quietly typing at something and then pressing enter
and then (indistinct), no, that didn't work. Oh, wait. Now it did work. Okay, we're in, I think the one common
thing between movie hacking and real life hacking is,
personally, I love saying, I'm in, whenever I've finally am
able to accomplish something. - It's really interesting your story. Sorry to interrupt again. - Oh, yeah. Yeah. - It's great to hear that you
were interested in hacking and I think hacking is just
like "Mr. Robot" more recently, the series is a great example of how people can see what it can do, but then you've gotta make a decision. And the decision hopefully
is be on the good side not on the bad side of that. - Yeah, exactly. Yeah. "Mr. Robot" did... There are still parts of that
show that are sensationalized, but they tried to bring a
much more grounded portrayal of what a lot of computer hacking is. And so anyway, "Cracking
Codes with Python," it doesn't cover any actual
encryption algorithms that are in use today. Even the RSA cipher or RSA algorithm, I cover at the end of the book, it's sort of what's known as textbook RSA, which, technically, yes, it is encrypting, but actual encryption programs. There's so many other factors
that you have to think about and protect against that you shouldn't actually
use the program in this book to do that, but it does give you... The book does give you a good idea of why a lot of encryption
algorithms can fail because you can do frequency analysis, because you can do count counting up sort of the spacing in
between identical symbols in the cipher text and
all of these other things about why... It's what some clever person
in the 1600s came up with to encrypt their text, is not going to work today here in 2022, when we're all basically
carrying super computers in our pockets. - But I love it. I mean, it's a game you've given someone who's interested in that stuff,
a reason to learn Python. And the net result of that is they've learned how algorithms work. They've learned about ciphers. They've learned about decryption. And I love that you don't
just show them how to encrypt, you show how to decrypt and
how to recognize patterns and all this kind of stuff. So you walk away with a lot of knowledge if you're interested
in that kind of thing. Just like automating web browser, It's all this, you're giving
people a reason to learn. And then they're picking up
all this Python knowledge along the way, it's a
fantastic way to do it. - Yeah. I went to DEFCON
for the first time ever a few years ago, and this is sort of living out
the teenage dream that I had because I like did not have enough money to fly out to Las Vegas when I was a kid. But I was really struck by how so many security professionals actually didn't know how to code. They're just used to knowing
all these network concepts and using all of these
tools for their job, but actual programming wasn't necessarily
something that they knew. And so it was really amazing 'cause I felt like, well, you can just write all these tiny scripts to automate different
tools or glue them together with some Python scripts. And it's a really powerful skill to have. - [David] I agree. - No matter which job in
tech that you're doing? - I'm with you on that because it's... You've mentioned it before, You're not becoming a Facebook developer that's gonna build an app like Facebook with millions and millions of users, that's like a software developer path. But if you're into ethical hacking or you're into network automation, like if you're a network engineer or you're into something else, stuff like this can just
save you so much time and it gives you so much power. Once you start coding, you can't go back. - Yeah, exactly. It's... Oh, I use the metaphor of it's like learning how to drive a car, you're not necessarily gonna
become a race car driver or a taxi cab driver. But it is... Even if you don't own a car it's a useful skill to
have in your back pocket and you'll be able to go much further than without having that skill. - Al we've been going for a long time. Do you wanna say anything or
have you got anything to share before we wrap this up? - I just really want to point
out how many opportunities and privileges that I've had in my life that have gotten me to this point and how important it is
that we do take active steps to include other people
in our communities. The Python community especially is great. I go to PyCon as often as I can. They just started up again this year, and I plan on going to
PyCon next year as well. But people in the Python community, it's not just that the
Python programming language has technical merits, but it's the people behind
the language as well who are taking the time to make sure that it's
easy to learn for others, that it's accessible to others, that you don't just have to be this stereotypical standard software nerd to be a part of it. And it's really important
because programming is amazing and it's something that we
should be making available to as many people as possible. And it's not enough to just say like, well, we don't have a rule
that excludes certain people or something because exclusion
happens automatically anyway, people will look at a group and say, well, I'm not sure, is this for me? Or is this not? And they'll just sort of
pre-select themselves out of it. And I feel like that is a definite loss and that we should take
active steps to prevent that. - I mean, it's fantastic. And you know what I, again,
I really want to thank you for making your books freely available. I come from South Africa originally and there's a lot of poverty out there in places like South Africa. And it's amazing how you making
education freely available. And I'm a firm believer, if you can educate someone,
they can change their lives, but also the lives of their family and the generations they're after. So thanks so much for making
the books available for free and not putting it behind a pay wall. - Oh, thank you very much
for having me on this show. - Al, thanks, all the very best. - Oh, thank you so much. (upbeat music)