WEBVTT
00:00:00.001 --> 00:00:03.940
What if your computer science textbooks could run their Python code samples,
00:00:03.940 --> 00:00:06.220
and that code ran directly in your browser?
00:00:06.220 --> 00:00:09.420
Kind of like JavaScript, but better because Python.
00:00:09.420 --> 00:00:13.480
It is possible, and Brad Miller is making it happen.
00:00:13.480 --> 00:00:20.660
This is Talk Python To Me, episode number 20, recorded Tuesday, July 7th, 2015.
00:00:20.660 --> 00:00:49.320
Welcome to Talk Python To Me, a weekly podcast on Python,
00:00:49.320 --> 00:00:52.400
the language, the libraries, the ecosystem, and the personalities.
00:00:52.400 --> 00:00:54.420
This is your host, Michael Kennedy.
00:00:54.420 --> 00:00:56.740
Follow me on Twitter, where I'm @mkennedy,
00:00:56.740 --> 00:01:01.280
and keep up with the show and listen to past episodes at talkpythontome.com,
00:01:01.280 --> 00:01:04.820
and follow the show on Twitter via at Talk Python.
00:01:04.820 --> 00:01:10.560
This episode will be talking to Dr. Brad Miller about interactive Python,
00:01:10.560 --> 00:01:15.280
Python in higher education, and Sculpt, the Python that you run in your browser.
00:01:16.220 --> 00:01:20.360
I'm happy to tell you that this episode is brought to you by Hired and Codeship.
00:01:20.360 --> 00:01:26.320
Thank them for supporting the show on Twitter via at Hired underscore HQ and at Codeship.
00:01:26.320 --> 00:01:28.220
Now let's get right to the show.
00:01:28.220 --> 00:01:32.800
Brad Miller is an associate professor of computer science at Luther College.
00:01:32.800 --> 00:01:35.380
He's the founder of RuneStone Interactive.
00:01:35.380 --> 00:01:39.760
He loves to travel, hack, bike, and cook, but not necessarily in that order.
00:01:39.760 --> 00:01:41.560
Brad, welcome to the show.
00:01:42.180 --> 00:01:44.320
Thanks. It's a great pleasure to be here.
00:01:44.320 --> 00:01:47.560
Yeah. You guys are doing some really awesome stuff over at RuneStone,
00:01:47.560 --> 00:01:52.880
and online platforms for people learning and teaching Python,
00:01:52.880 --> 00:01:54.200
and that's what we're going to talk about today.
00:01:54.200 --> 00:01:59.140
But before we get to online Python and Python in the browser and a bunch of other cool stuff,
00:01:59.140 --> 00:02:00.700
what's your story? How did you get here?
00:02:00.700 --> 00:02:04.920
So, well, we can go all the way back to 1979,
00:02:04.920 --> 00:02:07.540
when I first got into programming, I suppose.
00:02:07.820 --> 00:02:12.740
That was when our high school got the first Apple IIs installed,
00:02:12.740 --> 00:02:15.760
and I discovered AppleSoft Basic,
00:02:15.760 --> 00:02:21.040
and I discovered that I could win a lot more often if I hacked the lemonade stand game
00:02:21.040 --> 00:02:25.580
and made it rain on Player 2 a higher percentage of the time than Player 1.
00:02:25.580 --> 00:02:29.660
So that was kind of my introduction to programming,
00:02:29.660 --> 00:02:33.020
was digging into Basic code.
00:02:33.020 --> 00:02:33.860
That's really awesome.
00:02:34.100 --> 00:02:36.580
I mean, that's what a lot of programming is, is you're like,
00:02:36.580 --> 00:02:38.280
I don't want to just use this tool.
00:02:38.280 --> 00:02:41.540
I want to make a better tool or change it or whatever, right?
00:02:41.540 --> 00:02:42.800
And that's really cool.
00:02:42.800 --> 00:02:46.940
It doesn't say much about my ethics in those days, but...
00:02:46.940 --> 00:02:47.700
That was lemonade.
00:02:47.700 --> 00:02:48.920
It was, yeah.
00:02:48.920 --> 00:02:52.080
Better than Oregon Trail,
00:02:52.080 --> 00:02:55.320
which was the other popular game back in those days.
00:02:55.320 --> 00:02:56.040
Yeah, indeed.
00:02:56.880 --> 00:02:57.700
So, yeah.
00:02:57.700 --> 00:03:01.180
So that's how you got started and sort of interested in computers.
00:03:01.180 --> 00:03:02.500
How did you get into programming?
00:03:02.500 --> 00:03:10.320
So I started out as a computer science major at Luther when I went to undergrad
00:03:10.320 --> 00:03:15.720
and learned, you know, that was back in the days when people learned Pascal.
00:03:16.720 --> 00:03:23.920
And then I started my career at a, you know, big iron mainframe manufacturer called Control Data
00:03:23.920 --> 00:03:28.100
and worked on energy management systems for Control Data.
00:03:28.100 --> 00:03:28.720
Yeah.
00:03:28.720 --> 00:03:29.080
Wow.
00:03:29.080 --> 00:03:29.700
What kind of language?
00:03:29.700 --> 00:03:31.100
Yeah.
00:03:31.100 --> 00:03:31.700
Fortran.
00:03:31.700 --> 00:03:32.840
So...
00:03:32.840 --> 00:03:33.760
Oh, yeah.
00:03:33.760 --> 00:03:38.540
I was told when I was in college and starting out that Fortran was the most important language
00:03:38.540 --> 00:03:40.100
I was ever going to learn in my career.
00:03:40.100 --> 00:03:40.320
Yeah.
00:03:40.400 --> 00:03:41.760
And I pleaded to take C++.
00:03:41.760 --> 00:03:42.760
I said, after Fortran.
00:03:42.760 --> 00:03:43.980
All right, fine.
00:03:43.980 --> 00:03:45.720
I just missed the punch card days.
00:03:45.720 --> 00:03:49.540
So I guess Fortran is as bad as I get.
00:03:49.540 --> 00:03:50.020
Yeah.
00:03:50.020 --> 00:03:50.560
Cool.
00:03:50.560 --> 00:03:51.980
Yeah.
00:03:51.980 --> 00:03:57.160
And I had a great internship with Amoco Research where I got to work in their AI lab.
00:03:57.160 --> 00:04:00.380
So that got me interested in Lisp and interpreted languages.
00:04:00.380 --> 00:04:03.220
And, yeah.
00:04:03.260 --> 00:04:06.520
Then in grad school, I started hacking in Perl a lot.
00:04:06.520 --> 00:04:10.680
And then C++ and Java.
00:04:10.680 --> 00:04:15.480
And then I made a career change in 2003 where I became a college professor.
00:04:15.480 --> 00:04:16.420
Oh, wow.
00:04:16.420 --> 00:04:21.360
I left a successful startup company and came back to teach at my alma mater.
00:04:21.900 --> 00:04:27.200
And I taught Java in the introductory CS class for a year.
00:04:27.200 --> 00:04:32.840
And I realized that it was just the worst possible language for teaching people that had never
00:04:32.840 --> 00:04:34.320
programmed before how to program.
00:04:34.320 --> 00:04:39.900
And so we looked around and there was this language called Python, which was still, you
00:04:39.900 --> 00:04:44.640
know, I know it's not new, but it was really very, very new in the educational field back
00:04:44.640 --> 00:04:45.480
in 2003.
00:04:45.480 --> 00:04:48.100
In fact, there was only one textbook available.
00:04:48.800 --> 00:04:53.980
But we decided that we were going to go ahead and adopt Python as our introductory language for
00:04:53.980 --> 00:05:00.240
teaching in computer science, which immediately led to myself and my colleague, David Random,
00:05:00.240 --> 00:05:06.040
writing a data structures textbook because we wanted to be able to teach Python in both CS1 and CS2.
00:05:06.040 --> 00:05:06.540
Yeah.
00:05:06.540 --> 00:05:11.040
Of course, if the book isn't there, maybe you have to go back to Java and you don't want to do that.
00:05:11.040 --> 00:05:11.540
No.
00:05:11.540 --> 00:05:12.120
Yeah.
00:05:12.120 --> 00:05:15.600
So that was definitely, you know, okay, we can use this one textbook that's there, but we're
00:05:15.600 --> 00:05:16.520
going to write the other one.
00:05:17.120 --> 00:05:19.000
And so that worked out really well.
00:05:19.000 --> 00:05:20.200
Yeah, that is really cool.
00:05:20.200 --> 00:05:26.800
You know, one of the things I think is really a success story for Python is it's become the
00:05:26.800 --> 00:05:31.280
most popular sort of introductory computer science language, at least at U.S. universities.
00:05:31.280 --> 00:05:32.760
But I think that's pretty global.
00:05:32.760 --> 00:05:33.980
Yeah.
00:05:33.980 --> 00:05:34.380
Yeah.
00:05:34.380 --> 00:05:39.260
Can you compare what it's like to teach Java, what it's like to teach Python, the way the
00:05:39.260 --> 00:05:44.340
students received it, whether like better grades, more excitement, less dropout, those kinds
00:05:44.340 --> 00:05:44.640
of things?
00:05:45.120 --> 00:05:48.180
I mean, certainly less dropout with Python.
00:05:48.180 --> 00:05:56.220
And I think it's much, much quicker for them to kind of get up and running and be able to
00:05:56.220 --> 00:05:57.400
do interesting stuff.
00:05:57.400 --> 00:06:02.340
You know, when you teach Java, I like to say there's like 12 things that you have to lie
00:06:02.340 --> 00:06:03.520
to them about on day one.
00:06:04.180 --> 00:06:11.400
Starting with, you know, public static void main, string, args, you know, there's like
00:06:11.400 --> 00:06:12.080
none of that.
00:06:12.080 --> 00:06:17.700
Do you want to try to talk about to introductory students on the first day of Java class?
00:06:18.200 --> 00:06:23.220
So whereas with Python, you can, I guess, say print hello world, and at least you get something.
00:06:23.220 --> 00:06:29.160
But it's also just as easy to say import turtle, make a turtle and make the turtle go forward
00:06:29.160 --> 00:06:30.440
by a hundred.
00:06:30.440 --> 00:06:35.340
And that gives them that kind of, there's that immediate gratification of being able to see
00:06:35.340 --> 00:06:41.680
something visual on the screen and, you know, be able to control this stuff just by typing.
00:06:42.300 --> 00:06:47.740
So, so that, that was a huge, huge change, just sort of in student mentality to be able
00:06:47.740 --> 00:06:51.180
to kind of get into something where they could get that immediate gratification.
00:06:51.180 --> 00:06:52.980
Yeah, that's really cool.
00:06:52.980 --> 00:06:57.540
The show I just released this week with Lynn Root, she talks about how she was studying
00:06:57.540 --> 00:07:04.240
C++ to make a switch, basically to get some foundation to move on to like a PhD program
00:07:04.240 --> 00:07:04.980
in finance.
00:07:04.980 --> 00:07:06.260
And they had to do programming.
00:07:06.260 --> 00:07:11.000
So she took a C++ class and it just about crushed her will to do anything with programming.
00:07:11.000 --> 00:07:15.100
And she came in and learned Python and it just like, she lit up and that's, that's still
00:07:15.100 --> 00:07:15.760
what she's doing today.
00:07:15.760 --> 00:07:16.160
It's great.
00:07:16.160 --> 00:07:17.000
Oh yeah.
00:07:17.000 --> 00:07:22.100
I mean, and there's so many great, you know, packages out there for Python that you can really
00:07:22.100 --> 00:07:25.260
get students, you know, working with interesting stuff right away.
00:07:25.260 --> 00:07:26.600
Yeah, that's for sure.
00:07:26.600 --> 00:07:33.640
I just found today a project, a GitHub project repository, I guess you would call it, called
00:07:33.640 --> 00:07:34.500
Awesome Python.
00:07:34.740 --> 00:07:41.160
So I think it's, if you just search for Awesome-Python GitHub, and it's a, like a curated list of all
00:07:41.160 --> 00:07:43.480
the amazing packages that people like really love.
00:07:43.480 --> 00:07:43.740
So.
00:07:43.740 --> 00:07:44.960
Oh, that's really cool.
00:07:44.960 --> 00:07:46.800
I'll have to go look at, look at that.
00:07:46.800 --> 00:07:47.280
Absolutely.
00:07:47.280 --> 00:07:49.240
So, so that's really cool.
00:07:49.240 --> 00:07:51.440
So you're doing, are you still teaching at the university?
00:07:51.440 --> 00:07:52.020
I am.
00:07:52.020 --> 00:07:52.480
Yes.
00:07:52.480 --> 00:07:53.060
Uh huh.
00:07:53.060 --> 00:07:55.160
And you're doing this thing with RuneStone Interactive.
00:07:55.160 --> 00:07:56.360
Why don't you tell everyone what that is?
00:07:56.360 --> 00:07:57.440
Yeah.
00:07:57.900 --> 00:08:03.560
So RuneStone Interactive is, is kind of three, three components, I'll say.
00:08:03.560 --> 00:08:09.360
First of all, it's a set of tools for authors that want to create interactive course materials.
00:08:09.360 --> 00:08:14.960
So anything from lecture notes to a lab to a full-blown book, like what we've doing.
00:08:14.960 --> 00:08:23.080
so that, that includes, I like to, I like to say that kind of the big, hairy, audacious
00:08:23.080 --> 00:08:27.380
goal is that we would like to be the LaTeX of interactive writing.
00:08:28.120 --> 00:08:33.440
so we've got all these tools that we're trying to build to make it easy for, for instructors
00:08:33.440 --> 00:08:37.180
and other people to write interactive, interactive materials.
00:08:37.180 --> 00:08:43.260
So things like interactive code, visualizing code, including video, including little
00:08:43.260 --> 00:08:46.560
assessments like fill in the blanks or multiple choice or short answer.
00:08:46.560 --> 00:08:50.420
you know, things so you can hide things and show things.
00:08:50.420 --> 00:08:54.840
And, so those kind of, all those kinds of things that you'd want to have in an interactive
00:08:54.840 --> 00:08:57.360
textbook, whether it's, whether it's for computer science.
00:08:57.360 --> 00:08:59.260
Or, or some other topic.
00:08:59.260 --> 00:08:59.780
In fact.
00:08:59.780 --> 00:09:00.440
Yeah, absolutely.
00:09:00.440 --> 00:09:07.760
So it's kind of like taking the traditional textbook, but making it something that is more
00:09:07.760 --> 00:09:09.360
native to the real world.
00:09:09.360 --> 00:09:09.580
Right.
00:09:09.580 --> 00:09:12.300
If I'm learning about computer science, I should be able to run the code.
00:09:12.300 --> 00:09:13.700
I should be able to see visualizations.
00:09:13.700 --> 00:09:17.580
I should be able to listen and all that kind of stuff is part of what you guys have there.
00:09:17.580 --> 00:09:17.740
Right.
00:09:18.080 --> 00:09:18.760
Yeah, exactly.
00:09:18.760 --> 00:09:24.780
I mean, so this sort of started out on my sabbatical in 2011, where I was supposed to
00:09:24.780 --> 00:09:29.480
be working on, new additions for the two textbooks that I've, that I've written that
00:09:29.480 --> 00:09:30.620
are paper-based textbooks.
00:09:30.620 --> 00:09:36.060
But as I was trying to write these updates to the paper textbooks, I kept thinking, God,
00:09:36.060 --> 00:09:41.640
this would be so much cooler if, if it was actually doing something interactive on the screen.
00:09:41.860 --> 00:09:47.640
And so I stopped working on the, on the, on the stuff for the paper books.
00:09:47.640 --> 00:09:51.840
And I started, and I started experimenting with how we could make all this stuff interactive.
00:09:51.840 --> 00:09:57.100
and then I realized nobody in their right mind would ever write a textbook where you had
00:09:57.100 --> 00:10:01.160
to go in and, and use JavaScript to hard code every code example you wanted.
00:10:01.720 --> 00:10:06.120
So then I, then I started to think, okay, how could I, how could I write some macros that
00:10:06.120 --> 00:10:07.980
would make this, make this easy?
00:10:07.980 --> 00:10:11.980
And so that kind of led to that first part of the, of the authoring tools.
00:10:11.980 --> 00:10:15.760
So that's sort of part one.
00:10:15.760 --> 00:10:21.320
Part two is that then there's this sort of set of backend services that you have to run.
00:10:21.320 --> 00:10:26.920
Things like when students run code, or write code, you want to be able to save what
00:10:26.920 --> 00:10:29.840
they've written so that the next time they come to the website, they don't have to start
00:10:29.840 --> 00:10:32.140
over and, and reenter all their code again.
00:10:32.140 --> 00:10:37.300
and if you're going to use it for a class, you'd like to have it, let's say, save the answers
00:10:37.300 --> 00:10:41.840
to the multiple choice questions or give the instructor a grading interface so that they
00:10:41.840 --> 00:10:44.380
can go in and grade and keep track of how the students did.
00:10:44.380 --> 00:10:50.860
so that's sort of the set of interactive, interactive services that support the book on
00:10:50.860 --> 00:10:51.440
the front end.
00:10:51.440 --> 00:10:52.600
That's really cool.
00:10:52.600 --> 00:10:57.940
Do you guys, sorry, do you actually use the interactivity bit for like assessments and tests
00:10:57.940 --> 00:10:59.260
and things in your classes?
00:10:59.800 --> 00:11:00.080
Yeah.
00:11:00.080 --> 00:11:00.600
Yep.
00:11:00.600 --> 00:11:01.680
Yep.
00:11:01.680 --> 00:11:01.700
Yep.
00:11:01.700 --> 00:11:06.360
Not like for, it's great for daily assignments, for example, what I can do is say, all right,
00:11:06.360 --> 00:11:07.560
I want you to read this section.
00:11:07.560 --> 00:11:11.500
And at the end of the section, there might be a little coding thing, or there might be three
00:11:11.500 --> 00:11:14.260
or four multiple choice or fill in the blank kind of questions.
00:11:14.560 --> 00:11:18.800
And then every day before class, I can go in and go to the instructor's dashboard.
00:11:18.800 --> 00:11:24.020
I can look at the responses to all those questions and get a sense for, all right, what were the
00:11:24.020 --> 00:11:25.800
things that they understood about this section?
00:11:25.800 --> 00:11:27.580
What were the things that they'd struggled with?
00:11:28.080 --> 00:11:30.160
what were some of the common mistakes that they made?
00:11:30.160 --> 00:11:35.200
And then, you know, that pretty much informs what I'm going to talk about at least, you know,
00:11:35.200 --> 00:11:38.380
at the start of every class is to, to think about.
00:11:39.140 --> 00:11:40.180
That's really powerful.
00:11:40.180 --> 00:11:43.500
You don't really typically get that experience with a textbook.
00:11:43.500 --> 00:11:44.440
No.
00:11:44.440 --> 00:11:46.400
Because you never know, right?
00:11:46.400 --> 00:11:51.580
I mean, all of us suspect that our students don't really read the assignments that we give
00:11:51.580 --> 00:11:51.840
them.
00:11:51.840 --> 00:11:53.900
But now we, now we actually know.
00:11:53.900 --> 00:11:54.700
Yeah.
00:11:54.700 --> 00:11:56.540
Because we can, because we can track them online.
00:11:56.540 --> 00:11:57.360
So.
00:11:57.360 --> 00:11:58.740
That's really excellent.
00:11:58.740 --> 00:11:59.380
All right.
00:11:59.380 --> 00:12:00.020
So what's part three?
00:12:00.020 --> 00:12:02.980
Part three then became this hosting service.
00:12:02.980 --> 00:12:05.820
So in the beginning, what, what I thought was all great.
00:12:05.820 --> 00:12:07.200
We'll make all this open source.
00:12:07.200 --> 00:12:11.600
And if somebody else wants to use this, for their class, they can just go to GitHub.
00:12:11.600 --> 00:12:12.660
They can clone this.
00:12:12.660 --> 00:12:14.200
They can set up a server.
00:12:14.200 --> 00:12:15.500
They can build the books.
00:12:15.500 --> 00:12:16.860
They can run it on their own server.
00:12:16.860 --> 00:12:20.180
And then what I learned is that most people really don't want to do that.
00:12:20.180 --> 00:12:20.980
Um.
00:12:20.980 --> 00:12:26.700
So most people just have enough problems, you know, teaching their own class.
00:12:26.700 --> 00:12:32.440
so, so we created this hosting service where you can go in and you can say, all right,
00:12:32.440 --> 00:12:35.480
yeah, I want to use textbook a textbook, B textbook, C.
00:12:35.480 --> 00:12:40.800
And what it does is it just makes a kind of a custom copy of that textbook and sets up an
00:12:40.800 --> 00:12:45.680
instructor dashboard for that custom copy so that an instructor can have their students
00:12:45.680 --> 00:12:46.960
registered for their course.
00:12:46.960 --> 00:12:50.620
And all of their stuff is separate from all the other people in the world.
00:12:50.720 --> 00:12:54.240
And the instructor can then just look at the dashboard for their own course.
00:12:54.240 --> 00:12:58.620
and they don't have to do anything except go in and click a few buttons to build, to build
00:12:58.620 --> 00:12:59.100
their book.
00:12:59.100 --> 00:13:00.120
That's really cool.
00:13:00.120 --> 00:13:02.480
Do you mind talking about the business model just a little bit?
00:13:02.480 --> 00:13:03.620
Like, is this totally free?
00:13:03.620 --> 00:13:04.720
Is there like a fee?
00:13:04.720 --> 00:13:07.540
Do you sell the books to the students or what's the story around that?
00:13:07.540 --> 00:13:08.140
Yeah.
00:13:08.380 --> 00:13:15.600
I, so we, we really right now are just based on donations, which doesn't work all that
00:13:15.600 --> 00:13:15.880
well.
00:13:15.880 --> 00:13:21.840
Is there a chance of like NSF, National Science Foundation support or like STEM research support
00:13:21.840 --> 00:13:22.540
or any of those?
00:13:22.540 --> 00:13:23.700
I think so.
00:13:23.700 --> 00:13:27.660
I mean, right now I do have, I do have an NSF grant for the next three summers.
00:13:27.760 --> 00:13:32.400
So I've got two, I've got two undergrad students that I'm, that I'm working with this summer
00:13:32.400 --> 00:13:37.700
on making a bunch of enhancements to, to, to the way that we're, the way that we're
00:13:37.700 --> 00:13:41.900
doing these extensions or these kind of macros that I talked about before.
00:13:41.900 --> 00:13:42.340
Right.
00:13:42.340 --> 00:13:42.880
That's really cool.
00:13:42.960 --> 00:13:43.580
So, yeah.
00:13:43.580 --> 00:13:48.300
So, but yeah, I don't get any support from them for, you know, paying for hosting fees
00:13:48.300 --> 00:13:49.240
or anything like that.
00:13:49.240 --> 00:13:49.480
Sure.
00:13:49.480 --> 00:13:52.760
So people who want to use it out there, keep that in mind, maybe a donation.
00:13:52.760 --> 00:13:59.220
You know, one of the universities that uses it is Duke University and they, they're really
00:13:59.220 --> 00:13:59.500
good.
00:13:59.500 --> 00:14:02.820
Every, you know, they've got 400 students in their introductory course.
00:14:02.820 --> 00:14:06.860
And so I know the instructors there, you know, we've, we've known each other for a while
00:14:06.860 --> 00:14:08.220
through conferences and whatnot.
00:14:08.220 --> 00:14:12.460
And I know they always go the first couple of days and say, look, we're using this textbook.
00:14:12.700 --> 00:14:16.460
It's free instead of the $145 you'd probably pay at the bookstore.
00:14:16.460 --> 00:14:19.420
The least you can do is go make a $5 donation.
00:14:19.420 --> 00:14:25.500
And, you know, we get about 20 out of 400 that feel moved to make a, there's a, there's
00:14:25.500 --> 00:14:29.120
a five, 5% appreciation ratio.
00:14:29.120 --> 00:14:32.660
Very cool.
00:14:32.660 --> 00:14:34.860
So, but anyway, yeah, yeah, no, that's good.
00:14:34.860 --> 00:14:37.300
So, yeah, keep going with that.
00:14:37.300 --> 00:14:41.700
So you want to talk a little bit about some of the underlying tools that you're using, the
00:14:41.700 --> 00:14:43.720
underlying packages and technology.
00:14:43.720 --> 00:14:45.520
It's mostly Fortran on the backend.
00:14:45.520 --> 00:14:46.020
Is that correct?
00:14:46.020 --> 00:14:47.980
no, it's mostly Python.
00:14:47.980 --> 00:14:48.520
Oh, just teasing.
00:14:48.520 --> 00:14:49.160
Yeah.
00:14:49.160 --> 00:14:50.180
Cool.
00:14:50.180 --> 00:14:51.700
So tell us what you're doing there.
00:14:51.700 --> 00:14:52.960
Maybe before we do this, actually.
00:14:52.960 --> 00:14:57.700
So I went and I watched your video on interactive Python dot, is it org or com?
00:14:57.700 --> 00:14:58.680
Dot org.
00:14:58.680 --> 00:14:59.260
Dot org.
00:14:59.260 --> 00:15:00.720
Interactive Python dot org.
00:15:00.800 --> 00:15:01.120
Thank you.
00:15:01.120 --> 00:15:06.360
And you've got a nice video that shows you a lot of, a lot of the really cool stuff you
00:15:06.360 --> 00:15:06.600
can do.
00:15:06.600 --> 00:15:09.540
Maybe you could just hit some of the high points so people know what we're talking about.
00:15:09.540 --> 00:15:10.940
Yeah.
00:15:10.940 --> 00:15:18.220
So I think the real aha moment for me was, was when I found this project called
00:15:18.220 --> 00:15:18.640
sculpt.
00:15:20.700 --> 00:15:35.780
This episode is brought to you by hired hired is a two sided curated marketplace that connects
00:15:35.780 --> 00:15:38.760
the world's knowledge workers to the best opportunities.
00:15:38.940 --> 00:15:44.140
Each offer you receive has salary and equity presented right up front and you can view the
00:15:44.140 --> 00:15:47.860
offers to accept or reject them before you even talk to the company.
00:15:47.860 --> 00:15:52.240
Typically candidates receive five or more offers in just the first week.
00:15:52.240 --> 00:15:54.220
And there are no obligations ever.
00:15:54.220 --> 00:15:55.860
Sounds pretty awesome.
00:15:55.860 --> 00:15:56.380
Doesn't it?
00:15:56.380 --> 00:15:58.400
Well, did I mention there's a signing bonus?
00:15:58.400 --> 00:16:02.480
Everyone who accepts a job from hired gets a $2,000 signing bonus.
00:16:02.480 --> 00:16:06.800
And as talk Python listeners, it gets way sweeter.
00:16:07.380 --> 00:16:13.440
Use the link hired.com slash talk Python to me and hired will double the signing bonus
00:16:13.440 --> 00:16:19.740
to $4,000 opportunities, knocking visit hired.com slash talk Python to me and answer the call.
00:16:19.740 --> 00:16:35.100
And so sculpt was started by Scott Graham, who now works for Google.
00:16:35.560 --> 00:16:39.340
And it was an implementation of CPython in JavaScript.
00:16:39.340 --> 00:16:44.140
So this was back in 2010, 2011 that he had worked on that.
00:16:44.140 --> 00:16:46.560
And I thought, oh my gosh, this is so cool.
00:16:46.560 --> 00:16:49.680
You know, we can run Python right in the browser.
00:16:49.680 --> 00:16:50.500
There's none of this.
00:16:50.500 --> 00:16:55.220
Let's submit it, run it back somewhere on a server and then have the result come back to
00:16:55.220 --> 00:16:55.720
the browser.
00:16:55.720 --> 00:16:57.400
With all the security issues.
00:16:57.400 --> 00:16:58.140
Yeah, exactly.
00:16:58.140 --> 00:16:59.140
That come with that.
00:16:59.140 --> 00:16:59.340
Yeah.
00:16:59.340 --> 00:16:59.840
Right.
00:16:59.980 --> 00:17:02.000
So this is running right in the browser.
00:17:02.000 --> 00:17:05.520
And not only that, but because it was written to run right in the browser.
00:17:06.560 --> 00:17:08.980
When I saw that, I got really excited about it.
00:17:08.980 --> 00:17:13.540
The first thing that I did was I figured out how to add the turtle graphics module to it.
00:17:13.540 --> 00:17:17.660
So now you can, you know, you can write your Python program and you can, you can do turtle
00:17:17.660 --> 00:17:18.940
graphics right in the browser.
00:17:19.060 --> 00:17:22.860
So you get that kind of instantaneous gratification of seeing something.
00:17:22.860 --> 00:17:24.060
Yeah, that's awesome.
00:17:24.060 --> 00:17:29.540
And it pops up right in a, like a little section or div or something of, of the HTML page.
00:17:29.540 --> 00:17:32.320
And it's just, you know, animated, just like the regular real turtle.
00:17:32.320 --> 00:17:33.400
Yep.
00:17:33.400 --> 00:17:33.960
Exactly.
00:17:33.960 --> 00:17:35.500
Is that using that HTML5 canvas?
00:17:35.500 --> 00:17:36.600
It is.
00:17:36.600 --> 00:17:37.220
Yep.
00:17:37.220 --> 00:17:40.300
So this is all totally HTML5 based.
00:17:40.300 --> 00:17:40.720
Yeah.
00:17:40.720 --> 00:17:41.280
Excellent.
00:17:41.280 --> 00:17:41.620
Okay.
00:17:41.620 --> 00:17:42.380
Yep.
00:17:42.380 --> 00:17:45.040
And then, so that's, so that's one thing.
00:17:45.040 --> 00:17:49.780
And then the second thing is, is this, what we call code lens in the textbook, but
00:17:49.780 --> 00:17:54.600
is really based on, on the work by Philip Guo on, online Python tutor.
00:17:54.600 --> 00:17:59.800
And, you know, if you've, if you've ever taught Python or if you've ever really thought about
00:17:59.800 --> 00:18:05.780
Python very deeply in terms of things like, well, variables, for example, is a big thing,
00:18:05.780 --> 00:18:05.960
right?
00:18:05.960 --> 00:18:09.000
Variables are just names for things in Python, right?
00:18:09.000 --> 00:18:13.060
So we're always drawing these pictures on the board of, of here's a name.
00:18:13.060 --> 00:18:17.200
And what does that name reference, you know, is it referencing a list or a dictionary or
00:18:17.200 --> 00:18:18.740
some object that you've created?
00:18:18.740 --> 00:18:19.520
Right.
00:18:19.520 --> 00:18:23.720
And, and there's, there's all these reference diagrams that just clutter up the whiteboard.
00:18:23.720 --> 00:18:24.020
Yeah.
00:18:24.020 --> 00:18:27.600
I envision something on the stack with an arrow drawn to something on the heap with a pointer
00:18:27.600 --> 00:18:29.080
over to somewhere and something like that.
00:18:29.080 --> 00:18:29.280
Right.
00:18:29.280 --> 00:18:30.340
Yeah, exactly.
00:18:30.340 --> 00:18:30.760
Yep.
00:18:30.760 --> 00:18:36.380
Cause you're trying to help students get a mental model for how the state of the program changes
00:18:36.380 --> 00:18:41.580
as you step from line to line and just to really understand kind of what goes on inside,
00:18:41.580 --> 00:18:43.320
inside the Python interpreter.
00:18:43.320 --> 00:18:48.000
And so what Philip had done is he, he'd automated that with this online Python tutor.
00:18:48.000 --> 00:18:52.300
And so we worked with Philip and took that and made it so that we could have these canned
00:18:52.300 --> 00:18:55.840
examples and, and, and embed them right in the textbook.
00:18:56.440 --> 00:19:01.100
So another way of thinking about it, if you've never seen it is it's kind of like having
00:19:01.100 --> 00:19:06.400
a debugger, that where you can, you know, go into step mode in the debugger, only this
00:19:06.400 --> 00:19:09.340
is even better because not only can you go forward, but you can go backward.
00:19:09.900 --> 00:19:10.260
Yes.
00:19:10.260 --> 00:19:13.800
And that was really impressive to me from a learning perspective.
00:19:13.800 --> 00:19:19.520
You know, if you, obviously it's helpful when you're new to step through the debugger
00:19:19.520 --> 00:19:22.080
and actually see how the program is working.
00:19:22.080 --> 00:19:22.400
Right.
00:19:22.400 --> 00:19:27.500
We, we get used to the fact that it's just innate to us how text becomes execution.
00:19:27.500 --> 00:19:31.200
But when you're new, you know, my kids have looked at what I'm doing and they're like,
00:19:31.200 --> 00:19:33.940
those words, is that really what that website is?
00:19:33.940 --> 00:19:34.520
Yeah.
00:19:34.520 --> 00:19:37.540
I mean, like how is, how does this become a game or whatever?
00:19:37.540 --> 00:19:37.900
Right.
00:19:37.900 --> 00:19:38.660
Yes.
00:19:38.660 --> 00:19:40.920
And so just seeing that happen, I think it's really cool.
00:19:40.920 --> 00:19:43.220
And the fact that you can go forwards and backwards is great.
00:19:43.220 --> 00:19:44.060
Yeah.
00:19:44.060 --> 00:19:50.180
And then, and then we enhance that even beyond what Philip has on the site in that, for
00:19:50.180 --> 00:19:53.680
some of the examples, what we can do is we can step through and you get to an if statement
00:19:53.680 --> 00:19:59.660
and we'll break into the execution and pop up a dialogue box and say, all right, after we
00:19:59.660 --> 00:20:03.960
evaluate the condition on this if statement, what's the next line that's going to execute.
00:20:03.960 --> 00:20:07.900
And so it'll, it'll make the student really think about, okay,
00:20:07.900 --> 00:20:12.000
how does this if statement work and what's, you know, if it's true, what's going to happen?
00:20:12.000 --> 00:20:13.300
If it's false, what's going to happen?
00:20:13.300 --> 00:20:13.740
Right.
00:20:13.740 --> 00:20:21.780
So that's a, like a better interactive visual version of what does this code print out?
00:20:21.780 --> 00:20:26.140
You know, that, that kind of assessment or test you might have in a computer science program,
00:20:26.140 --> 00:20:26.820
of course.
00:20:27.100 --> 00:20:27.540
Yep.
00:20:27.540 --> 00:20:28.060
Exactly.
00:20:28.060 --> 00:20:29.500
Yeah.
00:20:29.500 --> 00:20:33.820
And so kind of along those same lines, one of the, one of the things that one of my students
00:20:33.820 --> 00:20:37.780
is working on this summer, we're calling it the clickable area question.
00:20:38.080 --> 00:20:43.560
And so this is one of my favorite kinds of questions to put on, on introductory exams is
00:20:43.560 --> 00:20:44.700
to give them some code.
00:20:44.700 --> 00:20:49.980
And then I say, all right, circle, circle, all the variables that are integers in this
00:20:49.980 --> 00:20:54.240
example, or circle all the assignment statements in this example.
00:20:54.680 --> 00:20:56.300
And so now we can automate that.
00:20:56.300 --> 00:21:00.760
We can give them an example and say, click on all of the, click on all of the, assignment
00:21:00.760 --> 00:21:04.220
statements or click on all the floating, you know, click on all the things that are of type
00:21:04.220 --> 00:21:06.200
float in this code snippet.
00:21:06.340 --> 00:21:06.460
Yeah.
00:21:06.460 --> 00:21:06.940
That's cool.
00:21:06.940 --> 00:21:10.380
Does the program discover the right answer or do you have to teach it?
00:21:10.380 --> 00:21:14.220
No, as the, as the instructor, you tell it what the right answer, or, you know, as the
00:21:14.220 --> 00:21:15.940
author, I should say, you tell them.
00:21:15.940 --> 00:21:20.100
It's not like you understand the abstract, abstract syntax tree and like, oh yeah, here's the three
00:21:20.100 --> 00:21:21.300
branches that I could have to create.
00:21:21.300 --> 00:21:23.100
Cool.
00:21:23.100 --> 00:21:24.200
That would be even cooler.
00:21:24.200 --> 00:21:27.060
Because then I would save you the work, but still, that's very awesome.
00:21:27.060 --> 00:21:27.840
Yeah.
00:21:27.840 --> 00:21:28.500
Very awesome.
00:21:28.500 --> 00:21:29.460
Yeah.
00:21:29.460 --> 00:21:33.940
So I've, I've mentioned Philip Guau on the show before, cause he has a really cool C
00:21:33.940 --> 00:21:38.100
Python, deep dive course from the university.
00:21:38.100 --> 00:21:41.240
Are you guys at the same universities or are you just are kind of on the same projects?
00:21:41.240 --> 00:21:45.820
Yeah, we've just, I forget exactly how we met, but yeah, we've just been working.
00:21:45.820 --> 00:21:49.980
He's at, University of Rochester in New York and I'm here in Iowa.
00:21:49.980 --> 00:21:55.140
And yeah, we just, we see each other at conferences and we Skype and email and write papers together.
00:21:55.140 --> 00:21:55.820
Yeah, that's cool.
00:21:55.820 --> 00:21:57.020
I'm a fan of what he's doing.
00:21:57.020 --> 00:21:57.880
So that's really nice.
00:21:57.880 --> 00:22:00.600
I had no idea of this connection until we started talking.
00:22:00.600 --> 00:22:01.020
That's great.
00:22:02.040 --> 00:22:05.420
So one of the things that you said you guys are up to and you're actively doing it right
00:22:05.420 --> 00:22:11.600
now, maybe one of your, your summer, students is doing this is upgrading and moving
00:22:11.600 --> 00:22:14.320
from web to PI over to flask for your web platform.
00:22:14.320 --> 00:22:15.240
Yeah.
00:22:15.240 --> 00:22:15.320
Yeah.
00:22:15.320 --> 00:22:21.880
So we've been running with web to PI, since 2011 when we first kind of went online with
00:22:21.880 --> 00:22:22.220
this.
00:22:22.220 --> 00:22:27.820
And, I mean, one of the cool things about the research that I do is I always, I always
00:22:27.820 --> 00:22:31.520
have to try to tie it somehow into my teaching or into a class that I'm working on.
00:22:31.840 --> 00:22:38.140
And so I teach this, I teach this, internet programming course and I really like,
00:22:38.140 --> 00:22:42.040
I really like web to PI as a kind of as a teaching platform.
00:22:42.040 --> 00:22:47.020
You know, it really does a great job of, of enforcing that kind of model view controller,
00:22:47.020 --> 00:22:54.080
um, paradigm into, into building web apps with just kind of by the naming structures that
00:22:54.080 --> 00:22:55.580
it uses and, and so on.
00:22:55.580 --> 00:23:02.300
but as we've grown and as we've, as we've started to, you know, as started to have to
00:23:02.300 --> 00:23:07.040
scale this system to support all of the schools that are starting to use it and all the people
00:23:07.040 --> 00:23:07.680
around the world.
00:23:07.680 --> 00:23:11.540
and just, you know, like any system, right.
00:23:11.540 --> 00:23:16.540
especially a research system like this, it's, it's become an organically grown mess.
00:23:16.780 --> 00:23:23.400
And so, so in order to kind of take the next step, you know, I really took a step back
00:23:23.400 --> 00:23:27.400
over the last six months and really kind of thought about all the parts of the system and
00:23:27.400 --> 00:23:28.740
how we should re-architect it.
00:23:29.280 --> 00:23:33.660
And, and it became very clear to me that, that it was time to kind of move from web
00:23:33.660 --> 00:23:36.160
to PI, to a different framework.
00:23:36.160 --> 00:23:41.060
And so I looked around and, and it seems to me that Flask is the right now, at least for
00:23:41.060 --> 00:23:42.780
what I want to do, the kind of the best choice.
00:23:42.780 --> 00:23:45.040
so, so that's what we're doing.
00:23:45.040 --> 00:23:50.700
We're moving to much more of a microservices model, for the backend services and Flask works
00:23:50.700 --> 00:23:51.600
really well for that.
00:23:51.600 --> 00:23:52.420
Yeah.
00:23:52.420 --> 00:23:56.660
It does seem like Flask is, is really what people are choosing for those types of apps.
00:23:56.660 --> 00:24:02.760
And because you're running Python on the client, it seems like you have a lot of fairly static
00:24:02.760 --> 00:24:05.160
HTML and you just need some backend services.
00:24:05.160 --> 00:24:07.700
And it seems like Flask is a real good fit for that.
00:24:07.700 --> 00:24:08.320
Yeah.
00:24:08.320 --> 00:24:13.980
I mean, I sort of in, in modern speak, I sort of, you know, think of each page of the textbook
00:24:13.980 --> 00:24:19.240
or each section of the textbook as a, as a single page application with these microservices
00:24:19.240 --> 00:24:20.220
running in the background.
00:24:20.220 --> 00:24:20.560
Yeah.
00:24:20.560 --> 00:24:21.380
That's great.
00:24:21.380 --> 00:24:22.100
Yeah.
00:24:22.100 --> 00:24:25.160
Another thing you're using is Sphinx and restructured text.
00:24:25.160 --> 00:24:25.820
Yep.
00:24:25.820 --> 00:24:30.320
So that's what I use to generate all the static, you know, static, web pages.
00:24:30.320 --> 00:24:35.340
So instead of coding like a formatted HTML or exporting from word or something terrible
00:24:35.340 --> 00:24:37.540
like that, you just do restructured.
00:24:37.540 --> 00:24:37.760
Yeah.
00:24:37.760 --> 00:24:38.520
Yeah.
00:24:38.520 --> 00:24:40.500
Everything is written in restructured text.
00:24:40.500 --> 00:24:41.580
Yeah.
00:24:41.580 --> 00:24:46.800
So, and then, and then what I really love about restructured text, you know, over something
00:24:46.800 --> 00:24:49.820
like Markdown is that it is very extensible.
00:24:49.820 --> 00:24:54.560
So you can go in and you can add your, in, in, in restructured text speak, you can add your
00:24:54.560 --> 00:24:55.480
own directives.
00:24:55.480 --> 00:24:56.440
Right.
00:24:56.440 --> 00:25:01.480
So the coding, so the runnable code examples, what we call active code, there's an active
00:25:01.480 --> 00:25:03.420
code directive that you write in Sphinx.
00:25:04.420 --> 00:25:08.900
and instead of having to do a whole bunch of JavaScript, you just say dot, dot space,
00:25:08.900 --> 00:25:13.600
active code, and then indent underneath that, put your raw Python code.
00:25:13.980 --> 00:25:19.120
And then when you run it through the Sphinx in, the Sphinx generator, it goes out
00:25:19.120 --> 00:25:24.140
and generates all the gobbledygook JavaScript that you need in order to make it look on the
00:25:24.140 --> 00:25:28.500
page, like this beautiful example with the run button underneath and the, and the canvas
00:25:28.500 --> 00:25:29.800
and all that other cool stuff.
00:25:29.800 --> 00:25:30.080
Yeah.
00:25:30.080 --> 00:25:32.040
So that's, that's really cool.
00:25:32.040 --> 00:25:34.460
It makes it really easy to write.
00:25:34.460 --> 00:25:35.860
Yeah, indeed.
00:25:35.860 --> 00:25:37.460
Where are you guys going with runestone?
00:25:38.500 --> 00:25:44.480
So, yeah, so I think we've started on a couple of really cool things, over the last,
00:25:44.480 --> 00:25:50.180
last summer and, and not as much this summer as I was hoping, but, we've gathered so
00:25:50.180 --> 00:25:56.460
much data over the last three years, that there's just this, I have this huge, huge interest
00:25:56.460 --> 00:26:02.680
in, in understanding how I can, I can apply some machine learning techniques to maybe doing
00:26:02.680 --> 00:26:06.840
some automated tutoring as a part of the, as a part of the platform.
00:26:07.380 --> 00:26:07.820
Okay.
00:26:07.820 --> 00:26:14.120
So right now it's, it's kind of very much in the university structured class, you
00:26:14.120 --> 00:26:17.180
know, CS 101 or something like that.
00:26:17.180 --> 00:26:23.760
But if, if you could get it to be more self-supporting, maybe it could be just online training or something
00:26:23.760 --> 00:26:24.360
like that, right?
00:26:24.360 --> 00:26:25.120
Yeah.
00:26:25.120 --> 00:26:25.840
Yeah.
00:26:25.840 --> 00:26:29.080
I mean, right now our audience is really divided in two, into two pieces.
00:26:29.080 --> 00:26:33.700
We have, we have a huge number of colleges and high schools that are using the book for,
00:26:33.700 --> 00:26:36.700
for their sort of traditional classroom style classes.
00:26:37.260 --> 00:26:43.300
But we also have the book just open and we get about half of our traffic just from people who
00:26:43.300 --> 00:26:47.800
have heard about this site from various sources and just want to come and teach themselves how to
00:26:47.800 --> 00:26:48.580
program in Python.
00:26:48.580 --> 00:26:49.940
Yeah, that's cool.
00:26:49.940 --> 00:26:51.800
So how do they get started doing that?
00:26:51.800 --> 00:26:54.200
Do they go, do they go to the book links and they pick a book?
00:26:54.200 --> 00:26:54.840
Yep.
00:26:54.900 --> 00:26:59.820
And we just have kind of one giant open book that, that anybody can go and read just the,
00:26:59.820 --> 00:27:01.880
how to think like a computer scientist book.
00:27:01.880 --> 00:27:06.840
and anybody can come up to that and they can create an account if they want.
00:27:06.840 --> 00:27:09.740
there's nobody there that's going to grade their homework for them.
00:27:09.740 --> 00:27:13.860
but you know, they can read, they can, they can experiment as they're reading.
00:27:13.940 --> 00:27:15.740
They can do the multiple choice questions.
00:27:15.740 --> 00:27:21.400
And, yeah, we get a surprising number of people who come in and do that and, and go a long
00:27:21.400 --> 00:27:22.680
ways in the textbook.
00:27:22.680 --> 00:27:23.420
That's really cool.
00:27:23.420 --> 00:27:28.420
It says that you can join more than 850,000 other readers learning to think like a computer
00:27:28.420 --> 00:27:29.340
scientist in Python.
00:27:29.340 --> 00:27:30.020
Yeah.
00:27:30.020 --> 00:27:30.460
That's cool.
00:27:30.460 --> 00:27:34.140
You guys have to have some champagne or some good beer or something when that crosses over
00:27:34.140 --> 00:27:34.500
a million.
00:27:34.980 --> 00:27:35.300
Yeah.
00:27:35.300 --> 00:27:41.620
I think we're actually probably already there that I had to actually hard code that 850,000
00:27:41.620 --> 00:27:47.020
number, a while ago because it turned out that calculating that was slowing down the whole
00:27:47.020 --> 00:27:49.820
website every time somebody brought up one of the pages.
00:27:49.820 --> 00:27:50.820
It's just not worth it.
00:27:50.820 --> 00:27:54.560
So it just was, yeah, one of those things that I threw in there thinking it would be fun.
00:27:54.560 --> 00:27:59.460
And then one day I realized that the whole site crashed because all of my, all of my threads
00:27:59.460 --> 00:28:00.320
were busy counting.
00:28:00.320 --> 00:28:02.960
Yeah.
00:28:02.960 --> 00:28:04.020
That's awesome.
00:28:04.160 --> 00:28:09.740
So you, you've, you've taught a lot of students Python over the last three years.
00:28:09.740 --> 00:28:14.320
What are some of the takeaways or key things you learned from that experience?
00:28:14.320 --> 00:28:15.680
Yeah.
00:28:15.680 --> 00:28:19.680
So, I mean, one of the funny things that we've learned is, is something that we've always
00:28:19.680 --> 00:28:22.560
suspected and that is that nobody studies on Saturday.
00:28:22.560 --> 00:28:29.480
So we, we, we, of course we track all the clicks that the students make from all over the
00:28:29.480 --> 00:28:29.740
world.
00:28:29.740 --> 00:28:32.120
And it's, it's so consistent every week.
00:28:32.120 --> 00:28:33.920
There's this giant dip on Saturday.
00:28:33.920 --> 00:28:38.320
So don't even try it.
00:28:38.320 --> 00:28:39.800
Let's just work with the way the world is.
00:28:39.800 --> 00:28:41.680
So let's just, we'll forget about that.
00:28:41.680 --> 00:28:42.120
Back Sunday.
00:28:42.120 --> 00:28:42.760
Yep.
00:28:42.760 --> 00:28:47.820
I think there were the two more real results that I think are interesting.
00:28:47.820 --> 00:28:54.940
One of them, one of the first things that we learned in, and we worked with Mark Guzdial
00:28:54.940 --> 00:29:00.340
and, and his wife, Barb Erickson down at, at Georgia tech for a year with this.
00:29:00.340 --> 00:29:04.740
And they put together a bunch of different metrics and a bunch of different tests.
00:29:04.740 --> 00:29:09.660
And so we could try to understand what things were having an impact on students.
00:29:09.660 --> 00:29:15.040
And in that, in that preliminary year that we did all this study, what we found was that
00:29:15.040 --> 00:29:20.940
there, there actually was a correlation between the students that used code lens a lot.
00:29:21.800 --> 00:29:24.840
And the students that ended up doing very well in the class.
00:29:24.840 --> 00:29:29.480
So we think that there's a, there's something going on there with, you know, code lens and
00:29:29.480 --> 00:29:35.460
how it helps you develop that internal model of what's going on in the interpreter and ultimately
00:29:35.460 --> 00:29:37.500
how well you do in the, in the class.
00:29:38.080 --> 00:29:44.280
So I think that's if nothing else, that's solid proof that yeah, using code lens is, is a good
00:29:44.280 --> 00:29:44.580
thing.
00:29:44.580 --> 00:29:44.860
Yeah.
00:29:44.860 --> 00:29:45.500
That's really cool.
00:29:45.500 --> 00:29:47.440
Are you writing any papers or anything on that?
00:29:47.440 --> 00:29:47.820
Yeah.
00:29:47.820 --> 00:29:53.580
We've Phillip and I have collaborated on, on I think two papers now and he just got one of
00:29:53.580 --> 00:29:54.300
them accepted.
00:29:54.300 --> 00:29:56.740
So, so that'll be coming out soon.
00:29:56.740 --> 00:29:57.100
Excellent.
00:29:57.100 --> 00:30:01.860
And then, and then Mark and his group got another one accepted at the ICER conference.
00:30:01.860 --> 00:30:18.240
This episode is brought to you by CodeShip.
00:30:18.240 --> 00:30:24.060
CodeShip has launched organizations, create teams, set permissions for specific team members
00:30:24.060 --> 00:30:27.100
and improve collaboration in your continuous delivery workflow.
00:30:27.100 --> 00:30:31.840
Maintain centralized control of your organization's projects and teams with CodeShip's
00:30:31.840 --> 00:30:33.000
new organization's plan.
00:30:33.000 --> 00:30:38.200
And as Talk Python listeners, you can save 20% off any premium plan for the next three
00:30:38.200 --> 00:30:38.520
months.
00:30:38.520 --> 00:30:42.060
Just use the code Talk Python, all caps, no spaces.
00:30:42.060 --> 00:30:46.760
Check them out at CodeShip.com and tell them thanks for supporting the show on Twitter where
00:30:46.760 --> 00:30:47.780
they're at CodeShip.
00:30:47.780 --> 00:30:53.400
Cool.
00:30:53.400 --> 00:30:54.640
So it's yielding some results.
00:30:54.640 --> 00:30:55.060
That's great.
00:30:55.060 --> 00:30:55.580
Yeah.
00:30:55.580 --> 00:30:56.100
Yeah.
00:30:56.100 --> 00:31:00.740
And then the second thing that we did, which is kind of a really cool part of the, of, you
00:31:00.740 --> 00:31:05.620
know, having control of the Python interpreter itself and how you display everything in the
00:31:05.620 --> 00:31:12.420
book was between the first year that we used the book and the second year that we used the
00:31:12.420 --> 00:31:17.300
book, we spent some time in the summer changing and enhancing how we displayed error messages
00:31:17.300 --> 00:31:18.080
to students.
00:31:18.620 --> 00:31:23.900
So the first year that we ran that we used the book, we just had a, we actually just had a,
00:31:23.900 --> 00:31:30.260
a JavaScript pop-up dialogue box that would come up with the standard Python error message.
00:31:30.260 --> 00:31:32.800
If you ran into a syntax error, you know, or whatever.
00:31:32.800 --> 00:31:33.640
Right.
00:31:34.000 --> 00:31:36.740
And, you know, they really aren't that informative.
00:31:36.740 --> 00:31:43.680
So the second year, instead of the pop-up dialogue box, we changed the whole thing and we gave a,
00:31:43.680 --> 00:31:46.280
we gave a, an error, we gave the error message.
00:31:46.280 --> 00:31:51.520
And then we had a, an error description, a much more like almost a paragraph describing,
00:31:51.520 --> 00:31:52.780
this is the error.
00:31:52.780 --> 00:31:55.640
These are the kind of conditions that might make this error appear.
00:31:55.640 --> 00:31:59.940
Here's a couple examples, maybe even of the kind of things that, that are going to give you an
00:31:59.940 --> 00:32:00.640
error like this.
00:32:00.740 --> 00:32:05.680
And then we also added a paragraph of here's some ways to try to track this down and how you
00:32:05.680 --> 00:32:06.580
should fix this error.
00:32:06.580 --> 00:32:14.060
And what we saw was a huge, huge improvement in terms of how efficient students were in completing
00:32:14.060 --> 00:32:17.060
homework assignments and doing programming exercises.
00:32:17.060 --> 00:32:23.120
Cause we, every time a student runs a programming exercise in the book, we save their code.
00:32:23.120 --> 00:32:28.340
And, and we kind of, you know, so we can keep track of how many runs did it take from ground
00:32:28.340 --> 00:32:33.120
zero to the point where the student either gave up or, or, you know, completed the, completed
00:32:33.120 --> 00:32:33.700
the assignment.
00:32:33.700 --> 00:32:39.900
And so we saw this huge decrease in the number of runs after we, after we made that change to
00:32:39.900 --> 00:32:43.200
how we presented all this error message information to the students.
00:32:43.200 --> 00:32:44.700
That's really, that's really cool.
00:32:44.700 --> 00:32:48.580
Those error messages are so frustrating when you're new.
00:32:48.580 --> 00:32:49.660
Oh, I know.
00:32:49.660 --> 00:32:54.240
You get used to them, but they're, they're not as helpful as, as we looking from an experience
00:32:54.240 --> 00:32:55.500
perspective think they are.
00:32:55.920 --> 00:32:56.760
Yeah, exactly.
00:32:56.760 --> 00:32:57.440
Cool.
00:32:57.440 --> 00:32:58.960
So that's, that's a really neat result.
00:32:58.960 --> 00:32:59.820
Yeah.
00:32:59.820 --> 00:33:04.580
We're taking that same, that same set of, of data that every run data.
00:33:04.580 --> 00:33:07.220
And now we've added this thing called code coach.
00:33:07.220 --> 00:33:11.900
And we really haven't had the ability to go back and do much assessment of it yet.
00:33:11.900 --> 00:33:18.320
But code coach, what it does is actually in the background, it runs pilot over, over each,
00:33:18.320 --> 00:33:19.380
each submission.
00:33:19.700 --> 00:33:23.340
And then if the student clicks on it, you can actually click through and you can look
00:33:23.340 --> 00:33:26.540
at the differences from run to run to run to run.
00:33:26.540 --> 00:33:31.040
So you can see kind of after the fact, what did I, what did I change about this code?
00:33:31.040 --> 00:33:38.140
And then it'll also then give you any, any hints from, from running pilot on, on, you know,
00:33:38.140 --> 00:33:43.080
things that obviously don't generate error messages, but there's some really valuable stuff
00:33:43.080 --> 00:33:45.180
in pilot, especially, you know, for beginners.
00:33:45.880 --> 00:33:45.940
Yeah.
00:33:45.940 --> 00:33:49.700
That'll definitely give them a jumpstart in writing what looks more like professional
00:33:49.700 --> 00:33:50.080
code.
00:33:50.080 --> 00:33:50.820
Yeah.
00:33:50.820 --> 00:33:55.400
You know, like just a quick example of a, of a thing that really catches beginners is forgetting
00:33:55.400 --> 00:33:58.020
their parentheses on a function call.
00:33:58.020 --> 00:33:58.580
Sure.
00:33:58.580 --> 00:34:01.080
Especially a function call that has no parameters, right?
00:34:01.080 --> 00:34:03.620
They're always forgetting to put their parentheses in.
00:34:03.620 --> 00:34:08.660
Well, that doesn't generate any kind of error message in Python because that's a valid statement.
00:34:08.660 --> 00:34:11.220
It's just, it's just useless, right?
00:34:11.220 --> 00:34:13.340
It just comes back and tells you that it's a function.
00:34:13.340 --> 00:34:13.920
Well, fine.
00:34:14.060 --> 00:34:18.200
From a beginner's point of view, there's no value to that when they don't, especially
00:34:18.200 --> 00:34:20.660
when they don't see that when they are just running a program.
00:34:20.660 --> 00:34:24.840
But if you run it through pilot, it'll tell you, Hey, line 12, that's a useless statement.
00:34:24.840 --> 00:34:26.780
And they'll look at it and they'll think, well, wait a minute.
00:34:26.780 --> 00:34:28.160
I was trying to make a turtle there.
00:34:28.160 --> 00:34:31.300
So, but it's telling me there's something wrong with that line.
00:34:31.300 --> 00:34:31.760
So.
00:34:31.760 --> 00:34:33.680
Yeah, that's really helpful.
00:34:33.680 --> 00:34:38.920
The conversation about parentheses made me think, are you guys doing a Python two or
00:34:38.920 --> 00:34:39.560
Python three?
00:34:39.960 --> 00:34:40.520
Huh?
00:34:40.520 --> 00:34:48.940
So we're doing, we're doing sort of a hybrid and without starting any religious wars.
00:34:48.940 --> 00:34:54.100
I just, I think that from a beginner's point of view, the differences in Python two and Python
00:34:54.100 --> 00:34:58.240
three are so slight, that it's not really worth worrying about.
00:34:58.240 --> 00:34:59.140
Yeah, I agree.
00:34:59.140 --> 00:34:59.660
I agree.
00:35:00.340 --> 00:35:05.100
So we, we support either parentheses or no parentheses after your print statements.
00:35:05.100 --> 00:35:10.640
And, and we, and we support, we have a flag that you can set if you want to make sure
00:35:10.640 --> 00:35:13.040
that you're getting the Python three division semantics.
00:35:13.040 --> 00:35:13.760
Right.
00:35:13.760 --> 00:35:14.100
Okay.
00:35:14.100 --> 00:35:14.680
Yeah.
00:35:14.680 --> 00:35:15.120
Very cool.
00:35:15.120 --> 00:35:17.820
At the heart of all that, of course, is sculpt.
00:35:17.820 --> 00:35:21.360
And somewhere along the way you became the maintainer of sculpt.
00:35:21.360 --> 00:35:24.900
And by the way, for those listening, it's S K U L P T, right?
00:35:24.900 --> 00:35:25.860
Correct.
00:35:25.860 --> 00:35:26.340
Yep.
00:35:26.340 --> 00:35:26.780
Yep.
00:35:26.780 --> 00:35:29.180
Yeah.
00:35:29.180 --> 00:35:33.640
So that was one of those, you know, I found this, I thought it was, I thought it was really
00:35:33.640 --> 00:35:38.020
the most awesome code that I'd run into that enabled this Python in the browser.
00:35:38.020 --> 00:35:42.820
And unfortunately the time that I was getting super excited about, it was about the same time
00:35:42.820 --> 00:35:47.440
that Scott was making a career change and it was sort of more or less losing interest
00:35:47.440 --> 00:35:48.140
in the project.
00:35:48.680 --> 00:35:53.460
so he was very gracious and we've sort of transitioned that over to where I'm the
00:35:53.460 --> 00:35:55.200
maintainer of, of it.
00:35:55.200 --> 00:35:59.780
And I moved it over to GitHub and, yeah, now we have this, we have this great, I think
00:35:59.780 --> 00:36:04.620
very thriving community of people who are contributing, to sculpt right now.
00:36:04.620 --> 00:36:04.980
Yeah.
00:36:04.980 --> 00:36:06.940
And just continuing to improve it.
00:36:06.940 --> 00:36:07.400
Yeah.
00:36:07.400 --> 00:36:10.920
The short story or the tagline for your GitHub project is sculpt.
00:36:10.920 --> 00:36:14.040
It's a JavaScript implementation of the Python programming language.
00:36:14.040 --> 00:36:18.820
So basically download some JavaScript, which is the Python interpreter, if you will.
00:36:18.820 --> 00:36:22.620
And then you write some more Python and just run it in the browser, right?
00:36:22.620 --> 00:36:23.640
Yeah, exactly.
00:36:23.640 --> 00:36:24.180
Yep.
00:36:24.180 --> 00:36:24.680
Yeah.
00:36:24.680 --> 00:36:25.160
Very cool.
00:36:25.160 --> 00:36:25.440
Yeah.
00:36:25.440 --> 00:36:26.820
You guys have almost a thousand stars.
00:36:26.820 --> 00:36:27.780
That's pretty excellent.
00:36:27.780 --> 00:36:28.700
Yeah.
00:36:28.700 --> 00:36:30.940
It's been, it's been a fun project.
00:36:30.940 --> 00:36:34.560
It's, it's, it's one of those great things, you know, I get up in the morning and, and there's
00:36:34.560 --> 00:36:38.100
people in Germany and there's people in France and there's people all over the world that
00:36:38.100 --> 00:36:41.560
are, you know, working on this and submitting pull requests and whatever.
00:36:41.560 --> 00:36:44.800
And so it's a, it's a very international effort.
00:36:44.800 --> 00:36:45.120
Yeah.
00:36:45.120 --> 00:36:45.540
Yeah.
00:36:45.540 --> 00:36:46.080
That's great.
00:36:46.080 --> 00:36:52.520
One, one thing, that came to mind when I was thinking about this is just this morning,
00:36:52.520 --> 00:36:56.900
I was emailing with Ryan Kelly who did pypy.js.
00:36:56.900 --> 00:36:57.780
Yeah.
00:36:57.780 --> 00:37:02.980
Can you compare those two projects or sort of say like, what's, what's the story?
00:37:03.140 --> 00:37:06.700
I mean, these are both kinds of JavaScript implementations in the browser.
00:37:06.700 --> 00:37:07.740
Yeah.
00:37:07.740 --> 00:37:12.460
So I think there's, there's actually three separate projects right now going on for Python in the
00:37:12.460 --> 00:37:12.840
browser.
00:37:12.840 --> 00:37:14.040
There's sculpt.
00:37:14.040 --> 00:37:15.720
There's a project called Brython.
00:37:15.720 --> 00:37:19.380
And then there's this, and then there's a pypy.js.
00:37:19.380 --> 00:37:25.840
So pypy.js is really awesome because it's using the, oh shoot.
00:37:25.840 --> 00:37:27.540
I'm just going to space out the name.
00:37:27.600 --> 00:37:31.000
It's using this extension to LLVM compiler, right?
00:37:31.000 --> 00:37:33.240
Where you can compile to a different target.
00:37:33.240 --> 00:37:37.400
Instead of compiling it to machine language, you can have it compiled to JavaScript.
00:37:37.400 --> 00:37:38.180
Exactly.
00:37:38.180 --> 00:37:43.180
So they're actually taking the C source code for pypy, running it through the compiler and
00:37:43.180 --> 00:37:45.560
having the compiler generate all the JavaScript form.
00:37:45.800 --> 00:37:52.820
So the advantage for pypy.js is that you kind of get, you know, absolutely the CPython implementation.
00:37:52.820 --> 00:37:55.080
no question about it.
00:37:55.080 --> 00:37:58.940
What, what's lacking there at the moment.
00:37:59.200 --> 00:38:05.060
And I know they're working on this is to be able to bridge things like, like the turtle
00:38:05.060 --> 00:38:09.900
graphics module or like the processing graphics module so that you can, you know, you can do
00:38:09.900 --> 00:38:13.720
the kind of cool interactive graphics kind of things in the browser that you might want to
00:38:13.720 --> 00:38:13.900
do.
00:38:13.900 --> 00:38:14.260
Yeah.
00:38:14.260 --> 00:38:14.880
That's cool.
00:38:14.880 --> 00:38:18.860
The other thing, the other difference is that, sculpt is just a tiny fraction of the
00:38:18.860 --> 00:38:20.820
size of pypy.js at the moment.
00:38:20.820 --> 00:38:24.040
So what's the size of the JavaScript files for sculpt?
00:38:25.160 --> 00:38:28.540
they're like 143 K.
00:38:28.540 --> 00:38:29.780
Okay.
00:38:29.780 --> 00:38:31.280
That's, that's pretty, that's pretty decent.
00:38:31.280 --> 00:38:33.800
Does that include the standard library?
00:38:33.800 --> 00:38:37.460
Well, it includes the parts of the standard library that we've implemented.
00:38:37.460 --> 00:38:37.720
Right.
00:38:37.720 --> 00:38:38.080
Of course.
00:38:38.080 --> 00:38:39.160
Yeah.
00:38:39.160 --> 00:38:42.100
Which is a fraction of the standard library.
00:38:42.100 --> 00:38:46.540
I guess, you know, if you're missing a piece and it's pure Python, maybe you could try to
00:38:46.540 --> 00:38:50.580
just run it and try to straight up import it.
00:38:50.580 --> 00:38:50.980
That's cool.
00:38:50.980 --> 00:38:51.700
Yep.
00:38:51.700 --> 00:38:52.940
So I don't know.
00:38:53.000 --> 00:38:57.000
There may be a day when we, when, when all this stuff kind of comes together in the great
00:38:57.000 --> 00:38:59.200
singularity of Python in the browser.
00:38:59.200 --> 00:38:59.960
Yeah.
00:38:59.960 --> 00:39:01.980
And we'll get all the best of all the worlds.
00:39:01.980 --> 00:39:05.160
It's really exciting to see that happening.
00:39:05.160 --> 00:39:09.200
so yeah, I think both those projects are, are super cool.
00:39:09.200 --> 00:39:14.000
Did you ever watch, or maybe I should just recommend to the listeners, Gary Bernhardt's
00:39:14.000 --> 00:39:15.820
The Birth and Death of JavaScript?
00:39:15.820 --> 00:39:17.700
No, I haven't.
00:39:17.700 --> 00:39:18.500
Oh my gosh.
00:39:18.500 --> 00:39:21.240
It's this fictional, you know, he's hilarious, of course.
00:39:21.700 --> 00:39:25.040
And I believe this is presented at PyCon 2014.
00:39:25.040 --> 00:39:27.420
I'm not sure when it was, but it's on the video.
00:39:27.420 --> 00:39:34.080
And basically he takes us through this fictional history of going from 2005 into 2035 and how
00:39:34.080 --> 00:39:35.080
JavaScript has changed.
00:39:35.080 --> 00:39:42.180
But there's this sort of real technical underpinning of asm.js and compiling C down into JavaScript
00:39:42.180 --> 00:39:45.140
for the running in the browser.
00:39:45.140 --> 00:39:46.620
And it's definitely worth a look.
00:39:46.700 --> 00:39:47.500
I'll put it in the show notes.
00:39:47.500 --> 00:39:48.320
Yeah.
00:39:48.320 --> 00:39:51.320
It's, it's both hilarious and instructive.
00:39:51.320 --> 00:39:53.300
Okay.
00:39:53.300 --> 00:39:55.640
So we're kind of coming up on the end of the show.
00:39:55.640 --> 00:40:00.020
I have a few questions I always ask on the way out, but before we get there, do you want
00:40:00.020 --> 00:40:04.500
to just talk briefly about the books that you have available and, you know, what ones you've
00:40:04.500 --> 00:40:06.180
maybe wanted to call people's attention to?
00:40:06.600 --> 00:40:10.820
There's, there's a lot of educators listening and also students I know.
00:40:10.820 --> 00:40:16.280
So maybe both ends, they would appreciate hearing about what you guys have in this format at RuneScape.
00:40:16.280 --> 00:40:17.180
Yeah.
00:40:17.180 --> 00:40:17.640
Thanks.
00:40:18.220 --> 00:40:23.680
So we have how to think like a computer scientist interactive edition.
00:40:23.680 --> 00:40:28.340
And that's based on, I think the very, you know, very well known how to think like a computer
00:40:28.340 --> 00:40:34.320
scientist book by Allen Downey and Jeff Elkinger and a couple of other people.
00:40:34.320 --> 00:40:37.520
But I think Alan and Jeff were kind of the main authors on that.
00:40:38.120 --> 00:40:43.720
And so that, that, that's been an open source textbook for, for quite a few years now.
00:40:43.720 --> 00:40:50.040
And I'll just be forever indebted to them for, for doing that because it saved me from yet
00:40:50.040 --> 00:40:55.540
again, having to write an introductory chapter about lists when I didn't want to do that ever
00:40:55.540 --> 00:40:55.840
again.
00:40:55.840 --> 00:41:04.440
So, so we took that, we took their open source textbook and made it interactive and added the
00:41:04.440 --> 00:41:04.820
questions.
00:41:05.240 --> 00:41:08.800
And, you know, over the years we've, we've added some of our own things to it and added
00:41:08.800 --> 00:41:09.720
a couple of new chapters.
00:41:09.720 --> 00:41:18.360
But so that, so that book has just has a great pedigree and has, and has proven itself over
00:41:18.360 --> 00:41:22.780
the years as a, as a really solid textbook, not only for the college level, but also for
00:41:22.780 --> 00:41:23.560
the high school level.
00:41:23.560 --> 00:41:26.660
So we have that out there.
00:41:26.660 --> 00:41:32.340
And then we have a data structures textbook, problem solving with algorithms and data structures
00:41:32.340 --> 00:41:34.460
by Brad Miller and David Ranum.
00:41:34.880 --> 00:41:40.640
that that's published by Franklin Beadle, a publisher right out in, in, Oregon in
00:41:40.640 --> 00:41:41.140
your neighborhood.
00:41:41.140 --> 00:41:41.640
Oh yeah.
00:41:41.640 --> 00:41:49.100
and so, our publisher there was, was gracious enough when we approached him about
00:41:49.100 --> 00:41:52.040
saying, Hey, we have this great idea to change the world.
00:41:52.040 --> 00:41:53.800
We want to make textbooks interactive.
00:41:54.160 --> 00:41:58.400
And we showed him kind of a proof of concept using the how to think book.
00:41:58.400 --> 00:42:04.400
And he, he, immediately, Jim Lisey, our publisher immediately said, wow, that's
00:42:04.400 --> 00:42:04.600
great.
00:42:04.600 --> 00:42:05.200
Let's yeah.
00:42:05.200 --> 00:42:08.900
You have my permission to, to take your book and put it online like that.
00:42:08.900 --> 00:42:09.960
Oh, that's excellent.
00:42:09.960 --> 00:42:10.940
Yeah.
00:42:11.100 --> 00:42:16.160
So that's, and, and, you know, funnily enough, it's one of those great stories where we put
00:42:16.160 --> 00:42:20.400
it online and the year after we put it online, we had our best year in, in royalties ever
00:42:20.400 --> 00:42:22.120
from, from the paper book sales.
00:42:22.440 --> 00:42:26.720
So that's the real, the real irony of open source sometimes, isn't it?
00:42:26.720 --> 00:42:32.400
I mean, I work really close with MongoDB and the guys there and you know, that's a billion,
00:42:32.400 --> 00:42:36.020
multi-billion dollar company and you can go to GitHub and get their product and just download
00:42:36.020 --> 00:42:36.620
it for free.
00:42:36.620 --> 00:42:37.380
I mean, it's amazing.
00:42:37.380 --> 00:42:44.480
And you know, Red Hat and OpenStack and all sorts of stuff is, is, is really sort of paradoxical
00:42:44.480 --> 00:42:48.620
or in, in the sense you would think giving it away would be a problem, but in fact, it's
00:42:48.620 --> 00:42:51.400
actually the thing that makes it catch fire.
00:42:52.080 --> 00:42:56.440
And then I have a little book called Java for Python programmers, which is just a short
00:42:56.440 --> 00:42:59.780
little book on making the transition from, from Python to Java.
00:42:59.780 --> 00:43:04.660
And then we've got, we've got a couple of other, several other books actually.
00:43:04.660 --> 00:43:09.540
One of them written by, by my friend, Paul Resnick at the university of Michigan called
00:43:09.540 --> 00:43:12.300
programming programs, information, and people.
00:43:12.300 --> 00:43:13.860
We call it the pip book.
00:43:13.860 --> 00:43:18.940
And that's part of their information science program at the university of Michigan.
00:43:18.940 --> 00:43:21.660
That's written using the runestone tools and is now freely,
00:43:21.720 --> 00:43:22.700
freely available.
00:43:22.700 --> 00:43:29.980
Mark Guzdial at Georgia tech has written a book for, for high school computer science
00:43:29.980 --> 00:43:37.580
instructors as part of the APs, as part of the new AP programming class called, what
00:43:37.580 --> 00:43:37.920
is it?
00:43:37.920 --> 00:43:38.700
Computer.
00:43:38.700 --> 00:43:41.700
look it up.
00:43:42.240 --> 00:43:46.460
So it's, it's, it's not Java based.
00:43:46.460 --> 00:43:46.940
It's Lang.
00:43:46.940 --> 00:43:50.220
What it, what the cool thing about it is it's kind of language agnostic.
00:43:50.220 --> 00:43:52.960
So it's a CS principles, sorry.
00:43:52.960 --> 00:43:54.900
CS principles is the name of the course.
00:43:54.900 --> 00:43:55.420
Excellent.
00:43:55.420 --> 00:43:57.360
It's the new course by the, by the AP.
00:43:57.600 --> 00:44:01.740
And so Mark has written a textbook just for instructors about how to teach that course.
00:44:01.920 --> 00:44:05.560
And then this fall, he'll also be coming out with the student book for that.
00:44:05.560 --> 00:44:08.380
The, the, and both of those are based on the runestone tools.
00:44:08.380 --> 00:44:08.920
Yeah.
00:44:08.920 --> 00:44:14.520
So it sounds like you guys are really building quite a platform for the teaching going forward.
00:44:14.940 --> 00:44:15.340
Yeah.
00:44:15.340 --> 00:44:16.800
That's what, that's what we hope.
00:44:16.800 --> 00:44:22.160
And you know, the more people that do this, it's always one of those crazy, exciting things
00:44:22.160 --> 00:44:26.080
when you find somebody on the other side of the world or in someplace else that's suddenly
00:44:26.080 --> 00:44:31.920
translated your textbook into Russian or Czech or some other language and is, and is using
00:44:31.920 --> 00:44:34.340
your tools to write a book that you never thought of.
00:44:34.340 --> 00:44:34.680
Yeah.
00:44:34.680 --> 00:44:35.280
That's amazing.
00:44:35.280 --> 00:44:36.500
It's, it's really gratifying.
00:44:36.500 --> 00:44:36.900
I'm sure.
00:44:36.900 --> 00:44:37.960
Yeah.
00:44:37.960 --> 00:44:41.540
Brad, I think that's, that might be a good place to wrap it up.
00:44:41.540 --> 00:44:43.840
Final thoughts, favorite editor.
00:44:44.840 --> 00:44:46.240
favorite editor, right?
00:44:46.240 --> 00:44:47.940
PyCharm.
00:44:47.940 --> 00:44:48.700
PyCharm.
00:44:48.700 --> 00:44:49.260
Oh, right on.
00:44:49.260 --> 00:44:50.140
Do you use that in your class?
00:44:50.140 --> 00:44:51.220
I do.
00:44:51.220 --> 00:44:51.620
Yep.
00:44:51.620 --> 00:44:52.300
Yeah.
00:44:52.300 --> 00:44:57.040
We, we, we stay in the browser for about half the class and then we transition to PyCharm.
00:44:57.040 --> 00:44:58.240
So that's cool.
00:44:58.240 --> 00:45:01.180
Have you tried their PyCharm education edition?
00:45:01.180 --> 00:45:04.220
I have messed around with it a little bit.
00:45:04.220 --> 00:45:04.460
Yeah.
00:45:04.460 --> 00:45:04.700
Yeah.
00:45:04.700 --> 00:45:05.080
I looked at it.
00:45:05.080 --> 00:45:08.980
It's interesting because it kind of guides you through like it's sort of handholding a little
00:45:08.980 --> 00:45:10.700
bit in a sense, but I haven't done anything with it either.
00:45:10.700 --> 00:45:11.360
Yeah.
00:45:11.360 --> 00:45:12.120
All right.
00:45:12.120 --> 00:45:12.400
Awesome.
00:45:12.400 --> 00:45:12.640
Yeah.
00:45:12.640 --> 00:45:13.980
That's the one I use as well.
00:45:13.980 --> 00:45:14.740
I love pie.
00:45:14.740 --> 00:45:14.980
Charm.
00:45:14.980 --> 00:45:17.520
favorite PI package.
00:45:17.520 --> 00:45:19.760
Oh, I Python.
00:45:19.760 --> 00:45:20.800
Yeah.
00:45:20.800 --> 00:45:21.820
I Python is so good.
00:45:21.820 --> 00:45:22.680
Yeah.
00:45:22.680 --> 00:45:25.220
I use it in all my upper level classes now.
00:45:25.220 --> 00:45:27.400
It's so, it's such a great teaching tool that way.
00:45:27.400 --> 00:45:28.480
Oh, I bet it is.
00:45:28.480 --> 00:45:33.020
I hadn't even really considered sort of the, here's the thing I can give the student component
00:45:33.020 --> 00:45:33.360
of it.
00:45:33.360 --> 00:45:34.140
Yeah.
00:45:34.140 --> 00:45:37.340
I mean, for making class notes, it's, it's really, it's really awesome.
00:45:37.340 --> 00:45:44.060
And now with this, you know, with this new, Jupyter integration, you know, I'm, that's
00:45:44.060 --> 00:45:47.980
one of my little projects is to get a Jupyter server running on, on one of our servers on
00:45:47.980 --> 00:45:48.600
campus here.
00:45:48.600 --> 00:45:49.120
Yeah.
00:45:49.120 --> 00:45:50.880
So that people can just access it.
00:45:50.880 --> 00:45:53.960
So the whole I Python thing will break out of being just Python.
00:45:53.960 --> 00:45:56.540
Not that that's terrible, but it'll let it grow significantly.
00:45:56.540 --> 00:45:56.900
Right?
00:45:56.900 --> 00:45:57.660
Yeah.
00:45:57.660 --> 00:45:58.040
Yeah.
00:45:58.040 --> 00:45:58.220
Yep.
00:45:58.220 --> 00:45:58.920
Awesome.
00:45:58.920 --> 00:45:59.820
All right.
00:45:59.820 --> 00:46:03.440
Anything you want to, we didn't talk about, you want to let people know some links you want
00:46:03.440 --> 00:46:04.700
to give people, things like that.
00:46:05.260 --> 00:46:05.520
Yeah.
00:46:05.520 --> 00:46:10.700
I would just say if anybody wants to give, if anybody wants to give Sculpt a try or experience
00:46:10.700 --> 00:46:14.920
Python in the browser, there's another group of guys that I worked together with very
00:46:14.920 --> 00:46:16.520
closely at trinket.io.
00:46:16.520 --> 00:46:22.900
and they have this, they're actually a little startup out on the East coast and, yeah,
00:46:22.900 --> 00:46:28.140
trinket.io, you could write Python programs right in your browser, save them, share them,
00:46:28.140 --> 00:46:30.300
uh, email them to your friends.
00:46:30.300 --> 00:46:33.880
so it's, it's also a great way for doing Python in the browser.
00:46:33.880 --> 00:46:38.120
So I just wanted to give a, give a shout out to the, to the guys at trinket because they've
00:46:38.120 --> 00:46:41.660
been very super helpful in, in keeping the Sculpt project.
00:46:41.660 --> 00:46:42.460
Oh, cool.
00:46:42.460 --> 00:46:42.780
Yeah.
00:46:42.780 --> 00:46:45.520
It's a little bit like, JS Fiddle, but for Python.
00:46:45.520 --> 00:46:46.020
Yeah.
00:46:46.020 --> 00:46:46.520
I think.
00:46:46.520 --> 00:46:46.760
Yeah.
00:46:46.760 --> 00:46:47.180
That's cool.
00:46:47.180 --> 00:46:47.740
Very nice.
00:46:47.740 --> 00:46:49.220
Anything else?
00:46:49.220 --> 00:46:51.260
I think we've hit it.
00:46:51.260 --> 00:46:51.600
Yeah.
00:46:51.600 --> 00:46:53.960
All right, Brad, this has been super interesting.
00:46:53.960 --> 00:46:58.660
I really love to sort of see how Python is making its way into education and.
00:46:58.660 --> 00:46:59.180
Yeah.
00:46:59.180 --> 00:47:00.600
It's really gratifying.
00:47:00.600 --> 00:47:01.560
What you're doing over.
00:47:01.560 --> 00:47:01.920
Yeah.
00:47:01.920 --> 00:47:02.840
Runestone is very cool.
00:47:02.940 --> 00:47:05.240
So people should check it out at interactivepython.org.
00:47:05.240 --> 00:47:06.140
Yep.
00:47:06.140 --> 00:47:07.120
Definitely.
00:47:07.120 --> 00:47:07.800
All right.
00:47:07.800 --> 00:47:08.500
Thanks for being on the show.
00:47:08.500 --> 00:47:09.920
Thanks for having me.
00:47:09.920 --> 00:47:10.780
This was a lot of fun.
00:47:10.780 --> 00:47:12.300
Yeah, it sure was.
00:47:12.300 --> 00:47:12.700
See you later.
00:47:13.840 --> 00:47:16.640
This has been another episode of Talk Python To Me.
00:47:16.640 --> 00:47:18.560
Today's guest was Brad Miller.
00:47:18.560 --> 00:47:21.760
And this episode has been sponsored by Hired and CodeShip.
00:47:21.760 --> 00:47:23.760
Thank you guys for supporting the show.
00:47:23.760 --> 00:47:24.160
Thank you.
00:47:24.160 --> 00:47:24.160
Thank you.
00:47:24.160 --> 00:47:24.660
Thank you.
00:47:24.660 --> 00:47:27.460
Hired wants to be here.
00:47:27.460 --> 00:47:36.780
Visit Hired.com slash talkpython to me to get five or more offers with salary and equity presented right up front and a special listener signing bonus of $4,000.
00:47:36.780 --> 00:47:40.440
CodeShip wants you to always keep shipping.
00:47:40.440 --> 00:47:44.540
Check them out at codeship.com and thank them on Twitter via at CodeShip.
00:47:44.860 --> 00:47:46.580
Don't forget the discount code for listeners.
00:47:46.580 --> 00:47:47.280
It's easy.
00:47:47.280 --> 00:47:49.680
Talk Python, all caps, no spaces.
00:47:49.680 --> 00:47:57.200
You can find the links from the show at talkpythontome.com slash episodes slash show slash 20.
00:47:57.760 --> 00:48:00.020
And while you're there, be sure to subscribe to the show.
00:48:00.020 --> 00:48:02.800
Open your favorite podcatcher and search for Python.
00:48:02.800 --> 00:48:05.180
We should be the number one hit right at the top.
00:48:05.180 --> 00:48:10.640
You can also find the iTunes and direct RSS feeds in the footer of the website.
00:48:10.640 --> 00:48:15.920
Our theme music is Developers, Developers, Developers by Corey Smith, who goes by Smix.
00:48:15.920 --> 00:48:18.120
You can hear his entire song on our website.
00:48:18.120 --> 00:48:20.300
This is your host, Michael Kennedy.
00:48:20.300 --> 00:48:21.500
Thanks for listening.
00:48:21.500 --> 00:48:23.440
Smix takes us out of here.
00:48:23.660 --> 00:48:25.400
Staying with my voice.
00:48:25.400 --> 00:48:27.180
There's no norm that I can feel within.
00:48:27.180 --> 00:48:28.400
Haven't been sleeping.
00:48:28.400 --> 00:48:30.020
I've been using lots of rest.
00:48:30.020 --> 00:48:32.880
I'll pass the mic back to who rocked it best.
00:48:32.880 --> 00:48:40.260
Developers, Developers, Developers, Developers, Developers, Developers.
00:48:40.260 --> 00:48:45.100
Developers, Developers, Developers, Developers, Developers, Developers, Developers.
00:48:45.100 --> 00:48:45.200
.
00:48:45.200 --> 00:49:15.180
Thank you.
00:00:00.001 --> 00:00:03.940
What if your computer science textbooks could run their Python code samples,
00:00:03.940 --> 00:00:06.220
and that code ran directly in your browser?
00:00:06.220 --> 00:00:09.420
Kind of like JavaScript, but better because Python.
00:00:09.420 --> 00:00:13.480
It is possible, and Brad Miller is making it happen.
00:00:13.480 --> 00:00:20.660
This is Talk Python To Me, episode number 20, recorded Tuesday, July 7th, 2015.
00:00:20.660 --> 00:00:49.320
Welcome to Talk Python To Me, a weekly podcast on Python,
00:00:49.320 --> 00:00:52.400
the language, the libraries, the ecosystem, and the personalities.
00:00:52.400 --> 00:00:54.420
This is your host, Michael Kennedy.
00:00:54.420 --> 00:00:56.740
Follow me on Twitter, where I'm @mkennedy,
00:00:56.740 --> 00:01:01.280
and keep up with the show and listen to past episodes at talkpythontome.com,
00:01:01.280 --> 00:01:04.820
and follow the show on Twitter via at Talk Python.
00:01:04.820 --> 00:01:10.560
This episode will be talking to Dr. Brad Miller about interactive Python,
00:01:10.560 --> 00:01:15.280
Python in higher education, and Sculpt, the Python that you run in your browser.
00:01:16.220 --> 00:01:20.360
I'm happy to tell you that this episode is brought to you by Hired and Codeship.
00:01:20.360 --> 00:01:26.320
Thank them for supporting the show on Twitter via at Hired underscore HQ and at Codeship.
00:01:26.320 --> 00:01:28.220
Now let's get right to the show.
00:01:28.220 --> 00:01:32.800
Brad Miller is an associate professor of computer science at Luther College.
00:01:32.800 --> 00:01:35.380
He's the founder of RuneStone Interactive.
00:01:35.380 --> 00:01:39.760
He loves to travel, hack, bike, and cook, but not necessarily in that order.
00:01:39.760 --> 00:01:41.560
Brad, welcome to the show.
00:01:42.180 --> 00:01:44.320
Thanks. It's a great pleasure to be here.
00:01:44.320 --> 00:01:47.560
Yeah. You guys are doing some really awesome stuff over at RuneStone,
00:01:47.560 --> 00:01:52.880
and online platforms for people learning and teaching Python,
00:01:52.880 --> 00:01:54.200
and that's what we're going to talk about today.
00:01:54.200 --> 00:01:59.140
But before we get to online Python and Python in the browser and a bunch of other cool stuff,
00:01:59.140 --> 00:02:00.700
what's your story? How did you get here?
00:02:00.700 --> 00:02:04.920
So, well, we can go all the way back to 1979,
00:02:04.920 --> 00:02:07.540
when I first got into programming, I suppose.
00:02:07.820 --> 00:02:12.740
That was when our high school got the first Apple IIs installed,
00:02:12.740 --> 00:02:15.760
and I discovered AppleSoft Basic,
00:02:15.760 --> 00:02:21.040
and I discovered that I could win a lot more often if I hacked the lemonade stand game
00:02:21.040 --> 00:02:25.580
and made it rain on Player 2 a higher percentage of the time than Player 1.
00:02:25.580 --> 00:02:29.660
So that was kind of my introduction to programming,
00:02:29.660 --> 00:02:33.020
was digging into Basic code.
00:02:33.020 --> 00:02:33.860
That's really awesome.
00:02:34.100 --> 00:02:36.580
I mean, that's what a lot of programming is, is you're like,
00:02:36.580 --> 00:02:38.280
I don't want to just use this tool.
00:02:38.280 --> 00:02:41.540
I want to make a better tool or change it or whatever, right?
00:02:41.540 --> 00:02:42.800
And that's really cool.
00:02:42.800 --> 00:02:46.940
It doesn't say much about my ethics in those days, but...
00:02:46.940 --> 00:02:47.700
That was lemonade.
00:02:47.700 --> 00:02:48.920
It was, yeah.
00:02:48.920 --> 00:02:52.080
Better than Oregon Trail,
00:02:52.080 --> 00:02:55.320
which was the other popular game back in those days.
00:02:55.320 --> 00:02:56.040
Yeah, indeed.
00:02:56.880 --> 00:02:57.700
So, yeah.
00:02:57.700 --> 00:03:01.180
So that's how you got started and sort of interested in computers.
00:03:01.180 --> 00:03:02.500
How did you get into programming?
00:03:02.500 --> 00:03:10.320
So I started out as a computer science major at Luther when I went to undergrad
00:03:10.320 --> 00:03:15.720
and learned, you know, that was back in the days when people learned Pascal.
00:03:16.720 --> 00:03:23.920
And then I started my career at a, you know, big iron mainframe manufacturer called Control Data
00:03:23.920 --> 00:03:28.100
and worked on energy management systems for Control Data.
00:03:28.100 --> 00:03:28.720
Yeah.
00:03:28.720 --> 00:03:29.080
Wow.
00:03:29.080 --> 00:03:29.700
What kind of language?
00:03:29.700 --> 00:03:31.100
Yeah.
00:03:31.100 --> 00:03:31.700
Fortran.
00:03:31.700 --> 00:03:32.840
So...
00:03:32.840 --> 00:03:33.760
Oh, yeah.
00:03:33.760 --> 00:03:38.540
I was told when I was in college and starting out that Fortran was the most important language
00:03:38.540 --> 00:03:40.100
I was ever going to learn in my career.
00:03:40.100 --> 00:03:40.320
Yeah.
00:03:40.400 --> 00:03:41.760
And I pleaded to take C++.
00:03:41.760 --> 00:03:42.760
I said, after Fortran.
00:03:42.760 --> 00:03:43.980
All right, fine.
00:03:43.980 --> 00:03:45.720
I just missed the punch card days.
00:03:45.720 --> 00:03:49.540
So I guess Fortran is as bad as I get.
00:03:49.540 --> 00:03:50.020
Yeah.
00:03:50.020 --> 00:03:50.560
Cool.
00:03:50.560 --> 00:03:51.980
Yeah.
00:03:51.980 --> 00:03:57.160
And I had a great internship with Amoco Research where I got to work in their AI lab.
00:03:57.160 --> 00:04:00.380
So that got me interested in Lisp and interpreted languages.
00:04:00.380 --> 00:04:03.220
And, yeah.
00:04:03.260 --> 00:04:06.520
Then in grad school, I started hacking in Perl a lot.
00:04:06.520 --> 00:04:10.680
And then C++ and Java.
00:04:10.680 --> 00:04:15.480
And then I made a career change in 2003 where I became a college professor.
00:04:15.480 --> 00:04:16.420
Oh, wow.
00:04:16.420 --> 00:04:21.360
I left a successful startup company and came back to teach at my alma mater.
00:04:21.900 --> 00:04:27.200
And I taught Java in the introductory CS class for a year.
00:04:27.200 --> 00:04:32.840
And I realized that it was just the worst possible language for teaching people that had never
00:04:32.840 --> 00:04:34.320
programmed before how to program.
00:04:34.320 --> 00:04:39.900
And so we looked around and there was this language called Python, which was still, you
00:04:39.900 --> 00:04:44.640
know, I know it's not new, but it was really very, very new in the educational field back
00:04:44.640 --> 00:04:45.480
in 2003.
00:04:45.480 --> 00:04:48.100
In fact, there was only one textbook available.
00:04:48.800 --> 00:04:53.980
But we decided that we were going to go ahead and adopt Python as our introductory language for
00:04:53.980 --> 00:05:00.240
teaching in computer science, which immediately led to myself and my colleague, David Random,
00:05:00.240 --> 00:05:06.040
writing a data structures textbook because we wanted to be able to teach Python in both CS1 and CS2.
00:05:06.040 --> 00:05:06.540
Yeah.
00:05:06.540 --> 00:05:11.040
Of course, if the book isn't there, maybe you have to go back to Java and you don't want to do that.
00:05:11.040 --> 00:05:11.540
No.
00:05:11.540 --> 00:05:12.120
Yeah.
00:05:12.120 --> 00:05:15.600
So that was definitely, you know, okay, we can use this one textbook that's there, but we're
00:05:15.600 --> 00:05:16.520
going to write the other one.
00:05:17.120 --> 00:05:19.000
And so that worked out really well.
00:05:19.000 --> 00:05:20.200
Yeah, that is really cool.
00:05:20.200 --> 00:05:26.800
You know, one of the things I think is really a success story for Python is it's become the
00:05:26.800 --> 00:05:31.280
most popular sort of introductory computer science language, at least at U.S. universities.
00:05:31.280 --> 00:05:32.760
But I think that's pretty global.
00:05:32.760 --> 00:05:33.980
Yeah.
00:05:33.980 --> 00:05:34.380
Yeah.
00:05:34.380 --> 00:05:39.260
Can you compare what it's like to teach Java, what it's like to teach Python, the way the
00:05:39.260 --> 00:05:44.340
students received it, whether like better grades, more excitement, less dropout, those kinds
00:05:44.340 --> 00:05:44.640
of things?
00:05:45.120 --> 00:05:48.180
I mean, certainly less dropout with Python.
00:05:48.180 --> 00:05:56.220
And I think it's much, much quicker for them to kind of get up and running and be able to
00:05:56.220 --> 00:05:57.400
do interesting stuff.
00:05:57.400 --> 00:06:02.340
You know, when you teach Java, I like to say there's like 12 things that you have to lie
00:06:02.340 --> 00:06:03.520
to them about on day one.
00:06:04.180 --> 00:06:11.400
Starting with, you know, public static void main, string, args, you know, there's like
00:06:11.400 --> 00:06:12.080
none of that.
00:06:12.080 --> 00:06:17.700
Do you want to try to talk about to introductory students on the first day of Java class?
00:06:18.200 --> 00:06:23.220
So whereas with Python, you can, I guess, say print hello world, and at least you get something.
00:06:23.220 --> 00:06:29.160
But it's also just as easy to say import turtle, make a turtle and make the turtle go forward
00:06:29.160 --> 00:06:30.440
by a hundred.
00:06:30.440 --> 00:06:35.340
And that gives them that kind of, there's that immediate gratification of being able to see
00:06:35.340 --> 00:06:41.680
something visual on the screen and, you know, be able to control this stuff just by typing.
00:06:42.300 --> 00:06:47.740
So, so that, that was a huge, huge change, just sort of in student mentality to be able
00:06:47.740 --> 00:06:51.180
to kind of get into something where they could get that immediate gratification.
00:06:51.180 --> 00:06:52.980
Yeah, that's really cool.
00:06:52.980 --> 00:06:57.540
The show I just released this week with Lynn Root, she talks about how she was studying
00:06:57.540 --> 00:07:04.240
C++ to make a switch, basically to get some foundation to move on to like a PhD program
00:07:04.240 --> 00:07:04.980
in finance.
00:07:04.980 --> 00:07:06.260
And they had to do programming.
00:07:06.260 --> 00:07:11.000
So she took a C++ class and it just about crushed her will to do anything with programming.
00:07:11.000 --> 00:07:15.100
And she came in and learned Python and it just like, she lit up and that's, that's still
00:07:15.100 --> 00:07:15.760
what she's doing today.
00:07:15.760 --> 00:07:16.160
It's great.
00:07:16.160 --> 00:07:17.000
Oh yeah.
00:07:17.000 --> 00:07:22.100
I mean, and there's so many great, you know, packages out there for Python that you can really
00:07:22.100 --> 00:07:25.260
get students, you know, working with interesting stuff right away.
00:07:25.260 --> 00:07:26.600
Yeah, that's for sure.
00:07:26.600 --> 00:07:33.640
I just found today a project, a GitHub project repository, I guess you would call it, called
00:07:33.640 --> 00:07:34.500
Awesome Python.
00:07:34.740 --> 00:07:41.160
So I think it's, if you just search for Awesome-Python GitHub, and it's a, like a curated list of all
00:07:41.160 --> 00:07:43.480
the amazing packages that people like really love.
00:07:43.480 --> 00:07:43.740
So.
00:07:43.740 --> 00:07:44.960
Oh, that's really cool.
00:07:44.960 --> 00:07:46.800
I'll have to go look at, look at that.
00:07:46.800 --> 00:07:47.280
Absolutely.
00:07:47.280 --> 00:07:49.240
So, so that's really cool.
00:07:49.240 --> 00:07:51.440
So you're doing, are you still teaching at the university?
00:07:51.440 --> 00:07:52.020
I am.
00:07:52.020 --> 00:07:52.480
Yes.
00:07:52.480 --> 00:07:53.060
Uh huh.
00:07:53.060 --> 00:07:55.160
And you're doing this thing with RuneStone Interactive.
00:07:55.160 --> 00:07:56.360
Why don't you tell everyone what that is?
00:07:56.360 --> 00:07:57.440
Yeah.
00:07:57.900 --> 00:08:03.560
So RuneStone Interactive is, is kind of three, three components, I'll say.
00:08:03.560 --> 00:08:09.360
First of all, it's a set of tools for authors that want to create interactive course materials.
00:08:09.360 --> 00:08:14.960
So anything from lecture notes to a lab to a full-blown book, like what we've doing.
00:08:14.960 --> 00:08:23.080
so that, that includes, I like to, I like to say that kind of the big, hairy, audacious
00:08:23.080 --> 00:08:27.380
goal is that we would like to be the LaTeX of interactive writing.
00:08:28.120 --> 00:08:33.440
so we've got all these tools that we're trying to build to make it easy for, for instructors
00:08:33.440 --> 00:08:37.180
and other people to write interactive, interactive materials.
00:08:37.180 --> 00:08:43.260
So things like interactive code, visualizing code, including video, including little
00:08:43.260 --> 00:08:46.560
assessments like fill in the blanks or multiple choice or short answer.
00:08:46.560 --> 00:08:50.420
you know, things so you can hide things and show things.
00:08:50.420 --> 00:08:54.840
And, so those kind of, all those kinds of things that you'd want to have in an interactive
00:08:54.840 --> 00:08:57.360
textbook, whether it's, whether it's for computer science.
00:08:57.360 --> 00:08:59.260
Or, or some other topic.
00:08:59.260 --> 00:08:59.780
In fact.
00:08:59.780 --> 00:09:00.440
Yeah, absolutely.
00:09:00.440 --> 00:09:07.760
So it's kind of like taking the traditional textbook, but making it something that is more
00:09:07.760 --> 00:09:09.360
native to the real world.
00:09:09.360 --> 00:09:09.580
Right.
00:09:09.580 --> 00:09:12.300
If I'm learning about computer science, I should be able to run the code.
00:09:12.300 --> 00:09:13.700
I should be able to see visualizations.
00:09:13.700 --> 00:09:17.580
I should be able to listen and all that kind of stuff is part of what you guys have there.
00:09:17.580 --> 00:09:17.740
Right.
00:09:18.080 --> 00:09:18.760
Yeah, exactly.
00:09:18.760 --> 00:09:24.780
I mean, so this sort of started out on my sabbatical in 2011, where I was supposed to
00:09:24.780 --> 00:09:29.480
be working on, new additions for the two textbooks that I've, that I've written that
00:09:29.480 --> 00:09:30.620
are paper-based textbooks.
00:09:30.620 --> 00:09:36.060
But as I was trying to write these updates to the paper textbooks, I kept thinking, God,
00:09:36.060 --> 00:09:41.640
this would be so much cooler if, if it was actually doing something interactive on the screen.
00:09:41.860 --> 00:09:47.640
And so I stopped working on the, on the, on the stuff for the paper books.
00:09:47.640 --> 00:09:51.840
And I started, and I started experimenting with how we could make all this stuff interactive.
00:09:51.840 --> 00:09:57.100
and then I realized nobody in their right mind would ever write a textbook where you had
00:09:57.100 --> 00:10:01.160
to go in and, and use JavaScript to hard code every code example you wanted.
00:10:01.720 --> 00:10:06.120
So then I, then I started to think, okay, how could I, how could I write some macros that
00:10:06.120 --> 00:10:07.980
would make this, make this easy?
00:10:07.980 --> 00:10:11.980
And so that kind of led to that first part of the, of the authoring tools.
00:10:11.980 --> 00:10:15.760
So that's sort of part one.
00:10:15.760 --> 00:10:21.320
Part two is that then there's this sort of set of backend services that you have to run.
00:10:21.320 --> 00:10:26.920
Things like when students run code, or write code, you want to be able to save what
00:10:26.920 --> 00:10:29.840
they've written so that the next time they come to the website, they don't have to start
00:10:29.840 --> 00:10:32.140
over and, and reenter all their code again.
00:10:32.140 --> 00:10:37.300
and if you're going to use it for a class, you'd like to have it, let's say, save the answers
00:10:37.300 --> 00:10:41.840
to the multiple choice questions or give the instructor a grading interface so that they
00:10:41.840 --> 00:10:44.380
can go in and grade and keep track of how the students did.
00:10:44.380 --> 00:10:50.860
so that's sort of the set of interactive, interactive services that support the book on
00:10:50.860 --> 00:10:51.440
the front end.
00:10:51.440 --> 00:10:52.600
That's really cool.
00:10:52.600 --> 00:10:57.940
Do you guys, sorry, do you actually use the interactivity bit for like assessments and tests
00:10:57.940 --> 00:10:59.260
and things in your classes?
00:10:59.800 --> 00:11:00.080
Yeah.
00:11:00.080 --> 00:11:00.600
Yep.
00:11:00.600 --> 00:11:01.680
Yep.
00:11:01.680 --> 00:11:01.700
Yep.
00:11:01.700 --> 00:11:06.360
Not like for, it's great for daily assignments, for example, what I can do is say, all right,
00:11:06.360 --> 00:11:07.560
I want you to read this section.
00:11:07.560 --> 00:11:11.500
And at the end of the section, there might be a little coding thing, or there might be three
00:11:11.500 --> 00:11:14.260
or four multiple choice or fill in the blank kind of questions.
00:11:14.560 --> 00:11:18.800
And then every day before class, I can go in and go to the instructor's dashboard.
00:11:18.800 --> 00:11:24.020
I can look at the responses to all those questions and get a sense for, all right, what were the
00:11:24.020 --> 00:11:25.800
things that they understood about this section?
00:11:25.800 --> 00:11:27.580
What were the things that they'd struggled with?
00:11:28.080 --> 00:11:30.160
what were some of the common mistakes that they made?
00:11:30.160 --> 00:11:35.200
And then, you know, that pretty much informs what I'm going to talk about at least, you know,
00:11:35.200 --> 00:11:38.380
at the start of every class is to, to think about.
00:11:39.140 --> 00:11:40.180
That's really powerful.
00:11:40.180 --> 00:11:43.500
You don't really typically get that experience with a textbook.
00:11:43.500 --> 00:11:44.440
No.
00:11:44.440 --> 00:11:46.400
Because you never know, right?
00:11:46.400 --> 00:11:51.580
I mean, all of us suspect that our students don't really read the assignments that we give
00:11:51.580 --> 00:11:51.840
them.
00:11:51.840 --> 00:11:53.900
But now we, now we actually know.
00:11:53.900 --> 00:11:54.700
Yeah.
00:11:54.700 --> 00:11:56.540
Because we can, because we can track them online.
00:11:56.540 --> 00:11:57.360
So.
00:11:57.360 --> 00:11:58.740
That's really excellent.
00:11:58.740 --> 00:11:59.380
All right.
00:11:59.380 --> 00:12:00.020
So what's part three?
00:12:00.020 --> 00:12:02.980
Part three then became this hosting service.
00:12:02.980 --> 00:12:05.820
So in the beginning, what, what I thought was all great.
00:12:05.820 --> 00:12:07.200
We'll make all this open source.
00:12:07.200 --> 00:12:11.600
And if somebody else wants to use this, for their class, they can just go to GitHub.
00:12:11.600 --> 00:12:12.660
They can clone this.
00:12:12.660 --> 00:12:14.200
They can set up a server.
00:12:14.200 --> 00:12:15.500
They can build the books.
00:12:15.500 --> 00:12:16.860
They can run it on their own server.
00:12:16.860 --> 00:12:20.180
And then what I learned is that most people really don't want to do that.
00:12:20.180 --> 00:12:20.980
Um.
00:12:20.980 --> 00:12:26.700
So most people just have enough problems, you know, teaching their own class.
00:12:26.700 --> 00:12:32.440
so, so we created this hosting service where you can go in and you can say, all right,
00:12:32.440 --> 00:12:35.480
yeah, I want to use textbook a textbook, B textbook, C.
00:12:35.480 --> 00:12:40.800
And what it does is it just makes a kind of a custom copy of that textbook and sets up an
00:12:40.800 --> 00:12:45.680
instructor dashboard for that custom copy so that an instructor can have their students
00:12:45.680 --> 00:12:46.960
registered for their course.
00:12:46.960 --> 00:12:50.620
And all of their stuff is separate from all the other people in the world.
00:12:50.720 --> 00:12:54.240
And the instructor can then just look at the dashboard for their own course.
00:12:54.240 --> 00:12:58.620
and they don't have to do anything except go in and click a few buttons to build, to build
00:12:58.620 --> 00:12:59.100
their book.
00:12:59.100 --> 00:13:00.120
That's really cool.
00:13:00.120 --> 00:13:02.480
Do you mind talking about the business model just a little bit?
00:13:02.480 --> 00:13:03.620
Like, is this totally free?
00:13:03.620 --> 00:13:04.720
Is there like a fee?
00:13:04.720 --> 00:13:07.540
Do you sell the books to the students or what's the story around that?
00:13:07.540 --> 00:13:08.140
Yeah.
00:13:08.380 --> 00:13:15.600
I, so we, we really right now are just based on donations, which doesn't work all that
00:13:15.600 --> 00:13:15.880
well.
00:13:15.880 --> 00:13:21.840
Is there a chance of like NSF, National Science Foundation support or like STEM research support
00:13:21.840 --> 00:13:22.540
or any of those?
00:13:22.540 --> 00:13:23.700
I think so.
00:13:23.700 --> 00:13:27.660
I mean, right now I do have, I do have an NSF grant for the next three summers.
00:13:27.760 --> 00:13:32.400
So I've got two, I've got two undergrad students that I'm, that I'm working with this summer
00:13:32.400 --> 00:13:37.700
on making a bunch of enhancements to, to, to the way that we're, the way that we're
00:13:37.700 --> 00:13:41.900
doing these extensions or these kind of macros that I talked about before.
00:13:41.900 --> 00:13:42.340
Right.
00:13:42.340 --> 00:13:42.880
That's really cool.
00:13:42.960 --> 00:13:43.580
So, yeah.
00:13:43.580 --> 00:13:48.300
So, but yeah, I don't get any support from them for, you know, paying for hosting fees
00:13:48.300 --> 00:13:49.240
or anything like that.
00:13:49.240 --> 00:13:49.480
Sure.
00:13:49.480 --> 00:13:52.760
So people who want to use it out there, keep that in mind, maybe a donation.
00:13:52.760 --> 00:13:59.220
You know, one of the universities that uses it is Duke University and they, they're really
00:13:59.220 --> 00:13:59.500
good.
00:13:59.500 --> 00:14:02.820
Every, you know, they've got 400 students in their introductory course.
00:14:02.820 --> 00:14:06.860
And so I know the instructors there, you know, we've, we've known each other for a while
00:14:06.860 --> 00:14:08.220
through conferences and whatnot.
00:14:08.220 --> 00:14:12.460
And I know they always go the first couple of days and say, look, we're using this textbook.
00:14:12.700 --> 00:14:16.460
It's free instead of the $145 you'd probably pay at the bookstore.
00:14:16.460 --> 00:14:19.420
The least you can do is go make a $5 donation.
00:14:19.420 --> 00:14:25.500
And, you know, we get about 20 out of 400 that feel moved to make a, there's a, there's
00:14:25.500 --> 00:14:29.120
a five, 5% appreciation ratio.
00:14:29.120 --> 00:14:32.660
Very cool.
00:14:32.660 --> 00:14:34.860
So, but anyway, yeah, yeah, no, that's good.
00:14:34.860 --> 00:14:37.300
So, yeah, keep going with that.
00:14:37.300 --> 00:14:41.700
So you want to talk a little bit about some of the underlying tools that you're using, the
00:14:41.700 --> 00:14:43.720
underlying packages and technology.
00:14:43.720 --> 00:14:45.520
It's mostly Fortran on the backend.
00:14:45.520 --> 00:14:46.020
Is that correct?
00:14:46.020 --> 00:14:47.980
no, it's mostly Python.
00:14:47.980 --> 00:14:48.520
Oh, just teasing.
00:14:48.520 --> 00:14:49.160
Yeah.
00:14:49.160 --> 00:14:50.180
Cool.
00:14:50.180 --> 00:14:51.700
So tell us what you're doing there.
00:14:51.700 --> 00:14:52.960
Maybe before we do this, actually.
00:14:52.960 --> 00:14:57.700
So I went and I watched your video on interactive Python dot, is it org or com?
00:14:57.700 --> 00:14:58.680
Dot org.
00:14:58.680 --> 00:14:59.260
Dot org.
00:14:59.260 --> 00:15:00.720
Interactive Python dot org.
00:15:00.800 --> 00:15:01.120
Thank you.
00:15:01.120 --> 00:15:06.360
And you've got a nice video that shows you a lot of, a lot of the really cool stuff you
00:15:06.360 --> 00:15:06.600
can do.
00:15:06.600 --> 00:15:09.540
Maybe you could just hit some of the high points so people know what we're talking about.
00:15:09.540 --> 00:15:10.940
Yeah.
00:15:10.940 --> 00:15:18.220
So I think the real aha moment for me was, was when I found this project called
00:15:18.220 --> 00:15:18.640
sculpt.
00:15:20.700 --> 00:15:35.780
This episode is brought to you by hired hired is a two sided curated marketplace that connects
00:15:35.780 --> 00:15:38.760
the world's knowledge workers to the best opportunities.
00:15:38.940 --> 00:15:44.140
Each offer you receive has salary and equity presented right up front and you can view the
00:15:44.140 --> 00:15:47.860
offers to accept or reject them before you even talk to the company.
00:15:47.860 --> 00:15:52.240
Typically candidates receive five or more offers in just the first week.
00:15:52.240 --> 00:15:54.220
And there are no obligations ever.
00:15:54.220 --> 00:15:55.860
Sounds pretty awesome.
00:15:55.860 --> 00:15:56.380
Doesn't it?
00:15:56.380 --> 00:15:58.400
Well, did I mention there's a signing bonus?
00:15:58.400 --> 00:16:02.480
Everyone who accepts a job from hired gets a $2,000 signing bonus.
00:16:02.480 --> 00:16:06.800
And as talk Python listeners, it gets way sweeter.
00:16:07.380 --> 00:16:13.440
Use the link hired.com slash talk Python to me and hired will double the signing bonus
00:16:13.440 --> 00:16:19.740
to $4,000 opportunities, knocking visit hired.com slash talk Python to me and answer the call.
00:16:19.740 --> 00:16:35.100
And so sculpt was started by Scott Graham, who now works for Google.
00:16:35.560 --> 00:16:39.340
And it was an implementation of CPython in JavaScript.
00:16:39.340 --> 00:16:44.140
So this was back in 2010, 2011 that he had worked on that.
00:16:44.140 --> 00:16:46.560
And I thought, oh my gosh, this is so cool.
00:16:46.560 --> 00:16:49.680
You know, we can run Python right in the browser.
00:16:49.680 --> 00:16:50.500
There's none of this.
00:16:50.500 --> 00:16:55.220
Let's submit it, run it back somewhere on a server and then have the result come back to
00:16:55.220 --> 00:16:55.720
the browser.
00:16:55.720 --> 00:16:57.400
With all the security issues.
00:16:57.400 --> 00:16:58.140
Yeah, exactly.
00:16:58.140 --> 00:16:59.140
That come with that.
00:16:59.140 --> 00:16:59.340
Yeah.
00:16:59.340 --> 00:16:59.840
Right.
00:16:59.980 --> 00:17:02.000
So this is running right in the browser.
00:17:02.000 --> 00:17:05.520
And not only that, but because it was written to run right in the browser.
00:17:06.560 --> 00:17:08.980
When I saw that, I got really excited about it.
00:17:08.980 --> 00:17:13.540
The first thing that I did was I figured out how to add the turtle graphics module to it.
00:17:13.540 --> 00:17:17.660
So now you can, you know, you can write your Python program and you can, you can do turtle
00:17:17.660 --> 00:17:18.940
graphics right in the browser.
00:17:19.060 --> 00:17:22.860
So you get that kind of instantaneous gratification of seeing something.
00:17:22.860 --> 00:17:24.060
Yeah, that's awesome.
00:17:24.060 --> 00:17:29.540
And it pops up right in a, like a little section or div or something of, of the HTML page.
00:17:29.540 --> 00:17:32.320
And it's just, you know, animated, just like the regular real turtle.
00:17:32.320 --> 00:17:33.400
Yep.
00:17:33.400 --> 00:17:33.960
Exactly.
00:17:33.960 --> 00:17:35.500
Is that using that HTML5 canvas?
00:17:35.500 --> 00:17:36.600
It is.
00:17:36.600 --> 00:17:37.220
Yep.
00:17:37.220 --> 00:17:40.300
So this is all totally HTML5 based.
00:17:40.300 --> 00:17:40.720
Yeah.
00:17:40.720 --> 00:17:41.280
Excellent.
00:17:41.280 --> 00:17:41.620
Okay.
00:17:41.620 --> 00:17:42.380
Yep.
00:17:42.380 --> 00:17:45.040
And then, so that's, so that's one thing.
00:17:45.040 --> 00:17:49.780
And then the second thing is, is this, what we call code lens in the textbook, but
00:17:49.780 --> 00:17:54.600
is really based on, on the work by Philip Guo on, online Python tutor.
00:17:54.600 --> 00:17:59.800
And, you know, if you've, if you've ever taught Python or if you've ever really thought about
00:17:59.800 --> 00:18:05.780
Python very deeply in terms of things like, well, variables, for example, is a big thing,
00:18:05.780 --> 00:18:05.960
right?
00:18:05.960 --> 00:18:09.000
Variables are just names for things in Python, right?
00:18:09.000 --> 00:18:13.060
So we're always drawing these pictures on the board of, of here's a name.
00:18:13.060 --> 00:18:17.200
And what does that name reference, you know, is it referencing a list or a dictionary or
00:18:17.200 --> 00:18:18.740
some object that you've created?
00:18:18.740 --> 00:18:19.520
Right.
00:18:19.520 --> 00:18:23.720
And, and there's, there's all these reference diagrams that just clutter up the whiteboard.
00:18:23.720 --> 00:18:24.020
Yeah.
00:18:24.020 --> 00:18:27.600
I envision something on the stack with an arrow drawn to something on the heap with a pointer
00:18:27.600 --> 00:18:29.080
over to somewhere and something like that.
00:18:29.080 --> 00:18:29.280
Right.
00:18:29.280 --> 00:18:30.340
Yeah, exactly.
00:18:30.340 --> 00:18:30.760
Yep.
00:18:30.760 --> 00:18:36.380
Cause you're trying to help students get a mental model for how the state of the program changes
00:18:36.380 --> 00:18:41.580
as you step from line to line and just to really understand kind of what goes on inside,
00:18:41.580 --> 00:18:43.320
inside the Python interpreter.
00:18:43.320 --> 00:18:48.000
And so what Philip had done is he, he'd automated that with this online Python tutor.
00:18:48.000 --> 00:18:52.300
And so we worked with Philip and took that and made it so that we could have these canned
00:18:52.300 --> 00:18:55.840
examples and, and, and embed them right in the textbook.
00:18:56.440 --> 00:19:01.100
So another way of thinking about it, if you've never seen it is it's kind of like having
00:19:01.100 --> 00:19:06.400
a debugger, that where you can, you know, go into step mode in the debugger, only this
00:19:06.400 --> 00:19:09.340
is even better because not only can you go forward, but you can go backward.
00:19:09.900 --> 00:19:10.260
Yes.
00:19:10.260 --> 00:19:13.800
And that was really impressive to me from a learning perspective.
00:19:13.800 --> 00:19:19.520
You know, if you, obviously it's helpful when you're new to step through the debugger
00:19:19.520 --> 00:19:22.080
and actually see how the program is working.
00:19:22.080 --> 00:19:22.400
Right.
00:19:22.400 --> 00:19:27.500
We, we get used to the fact that it's just innate to us how text becomes execution.
00:19:27.500 --> 00:19:31.200
But when you're new, you know, my kids have looked at what I'm doing and they're like,
00:19:31.200 --> 00:19:33.940
those words, is that really what that website is?
00:19:33.940 --> 00:19:34.520
Yeah.
00:19:34.520 --> 00:19:37.540
I mean, like how is, how does this become a game or whatever?
00:19:37.540 --> 00:19:37.900
Right.
00:19:37.900 --> 00:19:38.660
Yes.
00:19:38.660 --> 00:19:40.920
And so just seeing that happen, I think it's really cool.
00:19:40.920 --> 00:19:43.220
And the fact that you can go forwards and backwards is great.
00:19:43.220 --> 00:19:44.060
Yeah.
00:19:44.060 --> 00:19:50.180
And then, and then we enhance that even beyond what Philip has on the site in that, for
00:19:50.180 --> 00:19:53.680
some of the examples, what we can do is we can step through and you get to an if statement
00:19:53.680 --> 00:19:59.660
and we'll break into the execution and pop up a dialogue box and say, all right, after we
00:19:59.660 --> 00:20:03.960
evaluate the condition on this if statement, what's the next line that's going to execute.
00:20:03.960 --> 00:20:07.900
And so it'll, it'll make the student really think about, okay,
00:20:07.900 --> 00:20:12.000
how does this if statement work and what's, you know, if it's true, what's going to happen?
00:20:12.000 --> 00:20:13.300
If it's false, what's going to happen?
00:20:13.300 --> 00:20:13.740
Right.
00:20:13.740 --> 00:20:21.780
So that's a, like a better interactive visual version of what does this code print out?
00:20:21.780 --> 00:20:26.140
You know, that, that kind of assessment or test you might have in a computer science program,
00:20:26.140 --> 00:20:26.820
of course.
00:20:27.100 --> 00:20:27.540
Yep.
00:20:27.540 --> 00:20:28.060
Exactly.
00:20:28.060 --> 00:20:29.500
Yeah.
00:20:29.500 --> 00:20:33.820
And so kind of along those same lines, one of the, one of the things that one of my students
00:20:33.820 --> 00:20:37.780
is working on this summer, we're calling it the clickable area question.
00:20:38.080 --> 00:20:43.560
And so this is one of my favorite kinds of questions to put on, on introductory exams is
00:20:43.560 --> 00:20:44.700
to give them some code.
00:20:44.700 --> 00:20:49.980
And then I say, all right, circle, circle, all the variables that are integers in this
00:20:49.980 --> 00:20:54.240
example, or circle all the assignment statements in this example.
00:20:54.680 --> 00:20:56.300
And so now we can automate that.
00:20:56.300 --> 00:21:00.760
We can give them an example and say, click on all of the, click on all of the, assignment
00:21:00.760 --> 00:21:04.220
statements or click on all the floating, you know, click on all the things that are of type
00:21:04.220 --> 00:21:06.200
float in this code snippet.
00:21:06.340 --> 00:21:06.460
Yeah.
00:21:06.460 --> 00:21:06.940
That's cool.
00:21:06.940 --> 00:21:10.380
Does the program discover the right answer or do you have to teach it?
00:21:10.380 --> 00:21:14.220
No, as the, as the instructor, you tell it what the right answer, or, you know, as the
00:21:14.220 --> 00:21:15.940
author, I should say, you tell them.
00:21:15.940 --> 00:21:20.100
It's not like you understand the abstract, abstract syntax tree and like, oh yeah, here's the three
00:21:20.100 --> 00:21:21.300
branches that I could have to create.
00:21:21.300 --> 00:21:23.100
Cool.
00:21:23.100 --> 00:21:24.200
That would be even cooler.
00:21:24.200 --> 00:21:27.060
Because then I would save you the work, but still, that's very awesome.
00:21:27.060 --> 00:21:27.840
Yeah.
00:21:27.840 --> 00:21:28.500
Very awesome.
00:21:28.500 --> 00:21:29.460
Yeah.
00:21:29.460 --> 00:21:33.940
So I've, I've mentioned Philip Guau on the show before, cause he has a really cool C
00:21:33.940 --> 00:21:38.100
Python, deep dive course from the university.
00:21:38.100 --> 00:21:41.240
Are you guys at the same universities or are you just are kind of on the same projects?
00:21:41.240 --> 00:21:45.820
Yeah, we've just, I forget exactly how we met, but yeah, we've just been working.
00:21:45.820 --> 00:21:49.980
He's at, University of Rochester in New York and I'm here in Iowa.
00:21:49.980 --> 00:21:55.140
And yeah, we just, we see each other at conferences and we Skype and email and write papers together.
00:21:55.140 --> 00:21:55.820
Yeah, that's cool.
00:21:55.820 --> 00:21:57.020
I'm a fan of what he's doing.
00:21:57.020 --> 00:21:57.880
So that's really nice.
00:21:57.880 --> 00:22:00.600
I had no idea of this connection until we started talking.
00:22:00.600 --> 00:22:01.020
That's great.
00:22:02.040 --> 00:22:05.420
So one of the things that you said you guys are up to and you're actively doing it right
00:22:05.420 --> 00:22:11.600
now, maybe one of your, your summer, students is doing this is upgrading and moving
00:22:11.600 --> 00:22:14.320
from web to PI over to flask for your web platform.
00:22:14.320 --> 00:22:15.240
Yeah.
00:22:15.240 --> 00:22:15.320
Yeah.
00:22:15.320 --> 00:22:21.880
So we've been running with web to PI, since 2011 when we first kind of went online with
00:22:21.880 --> 00:22:22.220
this.
00:22:22.220 --> 00:22:27.820
And, I mean, one of the cool things about the research that I do is I always, I always
00:22:27.820 --> 00:22:31.520
have to try to tie it somehow into my teaching or into a class that I'm working on.
00:22:31.840 --> 00:22:38.140
And so I teach this, I teach this, internet programming course and I really like,
00:22:38.140 --> 00:22:42.040
I really like web to PI as a kind of as a teaching platform.
00:22:42.040 --> 00:22:47.020
You know, it really does a great job of, of enforcing that kind of model view controller,
00:22:47.020 --> 00:22:54.080
um, paradigm into, into building web apps with just kind of by the naming structures that
00:22:54.080 --> 00:22:55.580
it uses and, and so on.
00:22:55.580 --> 00:23:02.300
but as we've grown and as we've, as we've started to, you know, as started to have to
00:23:02.300 --> 00:23:07.040
scale this system to support all of the schools that are starting to use it and all the people
00:23:07.040 --> 00:23:07.680
around the world.
00:23:07.680 --> 00:23:11.540
and just, you know, like any system, right.
00:23:11.540 --> 00:23:16.540
especially a research system like this, it's, it's become an organically grown mess.
00:23:16.780 --> 00:23:23.400
And so, so in order to kind of take the next step, you know, I really took a step back
00:23:23.400 --> 00:23:27.400
over the last six months and really kind of thought about all the parts of the system and
00:23:27.400 --> 00:23:28.740
how we should re-architect it.
00:23:29.280 --> 00:23:33.660
And, and it became very clear to me that, that it was time to kind of move from web
00:23:33.660 --> 00:23:36.160
to PI, to a different framework.
00:23:36.160 --> 00:23:41.060
And so I looked around and, and it seems to me that Flask is the right now, at least for
00:23:41.060 --> 00:23:42.780
what I want to do, the kind of the best choice.
00:23:42.780 --> 00:23:45.040
so, so that's what we're doing.
00:23:45.040 --> 00:23:50.700
We're moving to much more of a microservices model, for the backend services and Flask works
00:23:50.700 --> 00:23:51.600
really well for that.
00:23:51.600 --> 00:23:52.420
Yeah.
00:23:52.420 --> 00:23:56.660
It does seem like Flask is, is really what people are choosing for those types of apps.
00:23:56.660 --> 00:24:02.760
And because you're running Python on the client, it seems like you have a lot of fairly static
00:24:02.760 --> 00:24:05.160
HTML and you just need some backend services.
00:24:05.160 --> 00:24:07.700
And it seems like Flask is a real good fit for that.
00:24:07.700 --> 00:24:08.320
Yeah.
00:24:08.320 --> 00:24:13.980
I mean, I sort of in, in modern speak, I sort of, you know, think of each page of the textbook
00:24:13.980 --> 00:24:19.240
or each section of the textbook as a, as a single page application with these microservices
00:24:19.240 --> 00:24:20.220
running in the background.
00:24:20.220 --> 00:24:20.560
Yeah.
00:24:20.560 --> 00:24:21.380
That's great.
00:24:21.380 --> 00:24:22.100
Yeah.
00:24:22.100 --> 00:24:25.160
Another thing you're using is Sphinx and restructured text.
00:24:25.160 --> 00:24:25.820
Yep.
00:24:25.820 --> 00:24:30.320
So that's what I use to generate all the static, you know, static, web pages.
00:24:30.320 --> 00:24:35.340
So instead of coding like a formatted HTML or exporting from word or something terrible
00:24:35.340 --> 00:24:37.540
like that, you just do restructured.
00:24:37.540 --> 00:24:37.760
Yeah.
00:24:37.760 --> 00:24:38.520
Yeah.
00:24:38.520 --> 00:24:40.500
Everything is written in restructured text.
00:24:40.500 --> 00:24:41.580
Yeah.
00:24:41.580 --> 00:24:46.800
So, and then, and then what I really love about restructured text, you know, over something
00:24:46.800 --> 00:24:49.820
like Markdown is that it is very extensible.
00:24:49.820 --> 00:24:54.560
So you can go in and you can add your, in, in, in restructured text speak, you can add your
00:24:54.560 --> 00:24:55.480
own directives.
00:24:55.480 --> 00:24:56.440
Right.
00:24:56.440 --> 00:25:01.480
So the coding, so the runnable code examples, what we call active code, there's an active
00:25:01.480 --> 00:25:03.420
code directive that you write in Sphinx.
00:25:04.420 --> 00:25:08.900
and instead of having to do a whole bunch of JavaScript, you just say dot, dot space,
00:25:08.900 --> 00:25:13.600
active code, and then indent underneath that, put your raw Python code.
00:25:13.980 --> 00:25:19.120
And then when you run it through the Sphinx in, the Sphinx generator, it goes out
00:25:19.120 --> 00:25:24.140
and generates all the gobbledygook JavaScript that you need in order to make it look on the
00:25:24.140 --> 00:25:28.500
page, like this beautiful example with the run button underneath and the, and the canvas
00:25:28.500 --> 00:25:29.800
and all that other cool stuff.
00:25:29.800 --> 00:25:30.080
Yeah.
00:25:30.080 --> 00:25:32.040
So that's, that's really cool.
00:25:32.040 --> 00:25:34.460
It makes it really easy to write.
00:25:34.460 --> 00:25:35.860
Yeah, indeed.
00:25:35.860 --> 00:25:37.460
Where are you guys going with runestone?
00:25:38.500 --> 00:25:44.480
So, yeah, so I think we've started on a couple of really cool things, over the last,
00:25:44.480 --> 00:25:50.180
last summer and, and not as much this summer as I was hoping, but, we've gathered so
00:25:50.180 --> 00:25:56.460
much data over the last three years, that there's just this, I have this huge, huge interest
00:25:56.460 --> 00:26:02.680
in, in understanding how I can, I can apply some machine learning techniques to maybe doing
00:26:02.680 --> 00:26:06.840
some automated tutoring as a part of the, as a part of the platform.
00:26:07.380 --> 00:26:07.820
Okay.
00:26:07.820 --> 00:26:14.120
So right now it's, it's kind of very much in the university structured class, you
00:26:14.120 --> 00:26:17.180
know, CS 101 or something like that.
00:26:17.180 --> 00:26:23.760
But if, if you could get it to be more self-supporting, maybe it could be just online training or something
00:26:23.760 --> 00:26:24.360
like that, right?
00:26:24.360 --> 00:26:25.120
Yeah.
00:26:25.120 --> 00:26:25.840
Yeah.
00:26:25.840 --> 00:26:29.080
I mean, right now our audience is really divided in two, into two pieces.
00:26:29.080 --> 00:26:33.700
We have, we have a huge number of colleges and high schools that are using the book for,
00:26:33.700 --> 00:26:36.700
for their sort of traditional classroom style classes.
00:26:37.260 --> 00:26:43.300
But we also have the book just open and we get about half of our traffic just from people who
00:26:43.300 --> 00:26:47.800
have heard about this site from various sources and just want to come and teach themselves how to
00:26:47.800 --> 00:26:48.580
program in Python.
00:26:48.580 --> 00:26:49.940
Yeah, that's cool.
00:26:49.940 --> 00:26:51.800
So how do they get started doing that?
00:26:51.800 --> 00:26:54.200
Do they go, do they go to the book links and they pick a book?
00:26:54.200 --> 00:26:54.840
Yep.
00:26:54.900 --> 00:26:59.820
And we just have kind of one giant open book that, that anybody can go and read just the,
00:26:59.820 --> 00:27:01.880
how to think like a computer scientist book.
00:27:01.880 --> 00:27:06.840
and anybody can come up to that and they can create an account if they want.
00:27:06.840 --> 00:27:09.740
there's nobody there that's going to grade their homework for them.
00:27:09.740 --> 00:27:13.860
but you know, they can read, they can, they can experiment as they're reading.
00:27:13.940 --> 00:27:15.740
They can do the multiple choice questions.
00:27:15.740 --> 00:27:21.400
And, yeah, we get a surprising number of people who come in and do that and, and go a long
00:27:21.400 --> 00:27:22.680
ways in the textbook.
00:27:22.680 --> 00:27:23.420
That's really cool.
00:27:23.420 --> 00:27:28.420
It says that you can join more than 850,000 other readers learning to think like a computer
00:27:28.420 --> 00:27:29.340
scientist in Python.
00:27:29.340 --> 00:27:30.020
Yeah.
00:27:30.020 --> 00:27:30.460
That's cool.
00:27:30.460 --> 00:27:34.140
You guys have to have some champagne or some good beer or something when that crosses over
00:27:34.140 --> 00:27:34.500
a million.
00:27:34.980 --> 00:27:35.300
Yeah.
00:27:35.300 --> 00:27:41.620
I think we're actually probably already there that I had to actually hard code that 850,000
00:27:41.620 --> 00:27:47.020
number, a while ago because it turned out that calculating that was slowing down the whole
00:27:47.020 --> 00:27:49.820
website every time somebody brought up one of the pages.
00:27:49.820 --> 00:27:50.820
It's just not worth it.
00:27:50.820 --> 00:27:54.560
So it just was, yeah, one of those things that I threw in there thinking it would be fun.
00:27:54.560 --> 00:27:59.460
And then one day I realized that the whole site crashed because all of my, all of my threads
00:27:59.460 --> 00:28:00.320
were busy counting.
00:28:00.320 --> 00:28:02.960
Yeah.
00:28:02.960 --> 00:28:04.020
That's awesome.
00:28:04.160 --> 00:28:09.740
So you, you've, you've taught a lot of students Python over the last three years.
00:28:09.740 --> 00:28:14.320
What are some of the takeaways or key things you learned from that experience?
00:28:14.320 --> 00:28:15.680
Yeah.
00:28:15.680 --> 00:28:19.680
So, I mean, one of the funny things that we've learned is, is something that we've always
00:28:19.680 --> 00:28:22.560
suspected and that is that nobody studies on Saturday.
00:28:22.560 --> 00:28:29.480
So we, we, we, of course we track all the clicks that the students make from all over the
00:28:29.480 --> 00:28:29.740
world.
00:28:29.740 --> 00:28:32.120
And it's, it's so consistent every week.
00:28:32.120 --> 00:28:33.920
There's this giant dip on Saturday.
00:28:33.920 --> 00:28:38.320
So don't even try it.
00:28:38.320 --> 00:28:39.800
Let's just work with the way the world is.
00:28:39.800 --> 00:28:41.680
So let's just, we'll forget about that.
00:28:41.680 --> 00:28:42.120
Back Sunday.
00:28:42.120 --> 00:28:42.760
Yep.
00:28:42.760 --> 00:28:47.820
I think there were the two more real results that I think are interesting.
00:28:47.820 --> 00:28:54.940
One of them, one of the first things that we learned in, and we worked with Mark Guzdial
00:28:54.940 --> 00:29:00.340
and, and his wife, Barb Erickson down at, at Georgia tech for a year with this.
00:29:00.340 --> 00:29:04.740
And they put together a bunch of different metrics and a bunch of different tests.
00:29:04.740 --> 00:29:09.660
And so we could try to understand what things were having an impact on students.
00:29:09.660 --> 00:29:15.040
And in that, in that preliminary year that we did all this study, what we found was that
00:29:15.040 --> 00:29:20.940
there, there actually was a correlation between the students that used code lens a lot.
00:29:21.800 --> 00:29:24.840
And the students that ended up doing very well in the class.
00:29:24.840 --> 00:29:29.480
So we think that there's a, there's something going on there with, you know, code lens and
00:29:29.480 --> 00:29:35.460
how it helps you develop that internal model of what's going on in the interpreter and ultimately
00:29:35.460 --> 00:29:37.500
how well you do in the, in the class.
00:29:38.080 --> 00:29:44.280
So I think that's if nothing else, that's solid proof that yeah, using code lens is, is a good
00:29:44.280 --> 00:29:44.580
thing.
00:29:44.580 --> 00:29:44.860
Yeah.
00:29:44.860 --> 00:29:45.500
That's really cool.
00:29:45.500 --> 00:29:47.440
Are you writing any papers or anything on that?
00:29:47.440 --> 00:29:47.820
Yeah.
00:29:47.820 --> 00:29:53.580
We've Phillip and I have collaborated on, on I think two papers now and he just got one of
00:29:53.580 --> 00:29:54.300
them accepted.
00:29:54.300 --> 00:29:56.740
So, so that'll be coming out soon.
00:29:56.740 --> 00:29:57.100
Excellent.
00:29:57.100 --> 00:30:01.860
And then, and then Mark and his group got another one accepted at the ICER conference.
00:30:01.860 --> 00:30:18.240
This episode is brought to you by CodeShip.
00:30:18.240 --> 00:30:24.060
CodeShip has launched organizations, create teams, set permissions for specific team members
00:30:24.060 --> 00:30:27.100
and improve collaboration in your continuous delivery workflow.
00:30:27.100 --> 00:30:31.840
Maintain centralized control of your organization's projects and teams with CodeShip's
00:30:31.840 --> 00:30:33.000
new organization's plan.
00:30:33.000 --> 00:30:38.200
And as Talk Python listeners, you can save 20% off any premium plan for the next three
00:30:38.200 --> 00:30:38.520
months.
00:30:38.520 --> 00:30:42.060
Just use the code Talk Python, all caps, no spaces.
00:30:42.060 --> 00:30:46.760
Check them out at CodeShip.com and tell them thanks for supporting the show on Twitter where
00:30:46.760 --> 00:30:47.780
they're at CodeShip.
00:30:47.780 --> 00:30:53.400
Cool.
00:30:53.400 --> 00:30:54.640
So it's yielding some results.
00:30:54.640 --> 00:30:55.060
That's great.
00:30:55.060 --> 00:30:55.580
Yeah.
00:30:55.580 --> 00:30:56.100
Yeah.
00:30:56.100 --> 00:31:00.740
And then the second thing that we did, which is kind of a really cool part of the, of, you
00:31:00.740 --> 00:31:05.620
know, having control of the Python interpreter itself and how you display everything in the
00:31:05.620 --> 00:31:12.420
book was between the first year that we used the book and the second year that we used the
00:31:12.420 --> 00:31:17.300
book, we spent some time in the summer changing and enhancing how we displayed error messages
00:31:17.300 --> 00:31:18.080
to students.
00:31:18.620 --> 00:31:23.900
So the first year that we ran that we used the book, we just had a, we actually just had a,
00:31:23.900 --> 00:31:30.260
a JavaScript pop-up dialogue box that would come up with the standard Python error message.
00:31:30.260 --> 00:31:32.800
If you ran into a syntax error, you know, or whatever.
00:31:32.800 --> 00:31:33.640
Right.
00:31:34.000 --> 00:31:36.740
And, you know, they really aren't that informative.
00:31:36.740 --> 00:31:43.680
So the second year, instead of the pop-up dialogue box, we changed the whole thing and we gave a,
00:31:43.680 --> 00:31:46.280
we gave a, an error, we gave the error message.
00:31:46.280 --> 00:31:51.520
And then we had a, an error description, a much more like almost a paragraph describing,
00:31:51.520 --> 00:31:52.780
this is the error.
00:31:52.780 --> 00:31:55.640
These are the kind of conditions that might make this error appear.
00:31:55.640 --> 00:31:59.940
Here's a couple examples, maybe even of the kind of things that, that are going to give you an
00:31:59.940 --> 00:32:00.640
error like this.
00:32:00.740 --> 00:32:05.680
And then we also added a paragraph of here's some ways to try to track this down and how you
00:32:05.680 --> 00:32:06.580
should fix this error.
00:32:06.580 --> 00:32:14.060
And what we saw was a huge, huge improvement in terms of how efficient students were in completing
00:32:14.060 --> 00:32:17.060
homework assignments and doing programming exercises.
00:32:17.060 --> 00:32:23.120
Cause we, every time a student runs a programming exercise in the book, we save their code.
00:32:23.120 --> 00:32:28.340
And, and we kind of, you know, so we can keep track of how many runs did it take from ground
00:32:28.340 --> 00:32:33.120
zero to the point where the student either gave up or, or, you know, completed the, completed
00:32:33.120 --> 00:32:33.700
the assignment.
00:32:33.700 --> 00:32:39.900
And so we saw this huge decrease in the number of runs after we, after we made that change to
00:32:39.900 --> 00:32:43.200
how we presented all this error message information to the students.
00:32:43.200 --> 00:32:44.700
That's really, that's really cool.
00:32:44.700 --> 00:32:48.580
Those error messages are so frustrating when you're new.
00:32:48.580 --> 00:32:49.660
Oh, I know.
00:32:49.660 --> 00:32:54.240
You get used to them, but they're, they're not as helpful as, as we looking from an experience
00:32:54.240 --> 00:32:55.500
perspective think they are.
00:32:55.920 --> 00:32:56.760
Yeah, exactly.
00:32:56.760 --> 00:32:57.440
Cool.
00:32:57.440 --> 00:32:58.960
So that's, that's a really neat result.
00:32:58.960 --> 00:32:59.820
Yeah.
00:32:59.820 --> 00:33:04.580
We're taking that same, that same set of, of data that every run data.
00:33:04.580 --> 00:33:07.220
And now we've added this thing called code coach.
00:33:07.220 --> 00:33:11.900
And we really haven't had the ability to go back and do much assessment of it yet.
00:33:11.900 --> 00:33:18.320
But code coach, what it does is actually in the background, it runs pilot over, over each,
00:33:18.320 --> 00:33:19.380
each submission.
00:33:19.700 --> 00:33:23.340
And then if the student clicks on it, you can actually click through and you can look
00:33:23.340 --> 00:33:26.540
at the differences from run to run to run to run.
00:33:26.540 --> 00:33:31.040
So you can see kind of after the fact, what did I, what did I change about this code?
00:33:31.040 --> 00:33:38.140
And then it'll also then give you any, any hints from, from running pilot on, on, you know,
00:33:38.140 --> 00:33:43.080
things that obviously don't generate error messages, but there's some really valuable stuff
00:33:43.080 --> 00:33:45.180
in pilot, especially, you know, for beginners.
00:33:45.880 --> 00:33:45.940
Yeah.
00:33:45.940 --> 00:33:49.700
That'll definitely give them a jumpstart in writing what looks more like professional
00:33:49.700 --> 00:33:50.080
code.
00:33:50.080 --> 00:33:50.820
Yeah.
00:33:50.820 --> 00:33:55.400
You know, like just a quick example of a, of a thing that really catches beginners is forgetting
00:33:55.400 --> 00:33:58.020
their parentheses on a function call.
00:33:58.020 --> 00:33:58.580
Sure.
00:33:58.580 --> 00:34:01.080
Especially a function call that has no parameters, right?
00:34:01.080 --> 00:34:03.620
They're always forgetting to put their parentheses in.
00:34:03.620 --> 00:34:08.660
Well, that doesn't generate any kind of error message in Python because that's a valid statement.
00:34:08.660 --> 00:34:11.220
It's just, it's just useless, right?
00:34:11.220 --> 00:34:13.340
It just comes back and tells you that it's a function.
00:34:13.340 --> 00:34:13.920
Well, fine.
00:34:14.060 --> 00:34:18.200
From a beginner's point of view, there's no value to that when they don't, especially
00:34:18.200 --> 00:34:20.660
when they don't see that when they are just running a program.
00:34:20.660 --> 00:34:24.840
But if you run it through pilot, it'll tell you, Hey, line 12, that's a useless statement.
00:34:24.840 --> 00:34:26.780
And they'll look at it and they'll think, well, wait a minute.
00:34:26.780 --> 00:34:28.160
I was trying to make a turtle there.
00:34:28.160 --> 00:34:31.300
So, but it's telling me there's something wrong with that line.
00:34:31.300 --> 00:34:31.760
So.
00:34:31.760 --> 00:34:33.680
Yeah, that's really helpful.
00:34:33.680 --> 00:34:38.920
The conversation about parentheses made me think, are you guys doing a Python two or
00:34:38.920 --> 00:34:39.560
Python three?
00:34:39.960 --> 00:34:40.520
Huh?
00:34:40.520 --> 00:34:48.940
So we're doing, we're doing sort of a hybrid and without starting any religious wars.
00:34:48.940 --> 00:34:54.100
I just, I think that from a beginner's point of view, the differences in Python two and Python
00:34:54.100 --> 00:34:58.240
three are so slight, that it's not really worth worrying about.
00:34:58.240 --> 00:34:59.140
Yeah, I agree.
00:34:59.140 --> 00:34:59.660
I agree.
00:35:00.340 --> 00:35:05.100
So we, we support either parentheses or no parentheses after your print statements.
00:35:05.100 --> 00:35:10.640
And, and we, and we support, we have a flag that you can set if you want to make sure
00:35:10.640 --> 00:35:13.040
that you're getting the Python three division semantics.
00:35:13.040 --> 00:35:13.760
Right.
00:35:13.760 --> 00:35:14.100
Okay.
00:35:14.100 --> 00:35:14.680
Yeah.
00:35:14.680 --> 00:35:15.120
Very cool.
00:35:15.120 --> 00:35:17.820
At the heart of all that, of course, is sculpt.
00:35:17.820 --> 00:35:21.360
And somewhere along the way you became the maintainer of sculpt.
00:35:21.360 --> 00:35:24.900
And by the way, for those listening, it's S K U L P T, right?
00:35:24.900 --> 00:35:25.860
Correct.
00:35:25.860 --> 00:35:26.340
Yep.
00:35:26.340 --> 00:35:26.780
Yep.
00:35:26.780 --> 00:35:29.180
Yeah.
00:35:29.180 --> 00:35:33.640
So that was one of those, you know, I found this, I thought it was, I thought it was really
00:35:33.640 --> 00:35:38.020
the most awesome code that I'd run into that enabled this Python in the browser.
00:35:38.020 --> 00:35:42.820
And unfortunately the time that I was getting super excited about, it was about the same time
00:35:42.820 --> 00:35:47.440
that Scott was making a career change and it was sort of more or less losing interest
00:35:47.440 --> 00:35:48.140
in the project.
00:35:48.680 --> 00:35:53.460
so he was very gracious and we've sort of transitioned that over to where I'm the
00:35:53.460 --> 00:35:55.200
maintainer of, of it.
00:35:55.200 --> 00:35:59.780
And I moved it over to GitHub and, yeah, now we have this, we have this great, I think
00:35:59.780 --> 00:36:04.620
very thriving community of people who are contributing, to sculpt right now.
00:36:04.620 --> 00:36:04.980
Yeah.
00:36:04.980 --> 00:36:06.940
And just continuing to improve it.
00:36:06.940 --> 00:36:07.400
Yeah.
00:36:07.400 --> 00:36:10.920
The short story or the tagline for your GitHub project is sculpt.
00:36:10.920 --> 00:36:14.040
It's a JavaScript implementation of the Python programming language.
00:36:14.040 --> 00:36:18.820
So basically download some JavaScript, which is the Python interpreter, if you will.
00:36:18.820 --> 00:36:22.620
And then you write some more Python and just run it in the browser, right?
00:36:22.620 --> 00:36:23.640
Yeah, exactly.
00:36:23.640 --> 00:36:24.180
Yep.
00:36:24.180 --> 00:36:24.680
Yeah.
00:36:24.680 --> 00:36:25.160
Very cool.
00:36:25.160 --> 00:36:25.440
Yeah.
00:36:25.440 --> 00:36:26.820
You guys have almost a thousand stars.
00:36:26.820 --> 00:36:27.780
That's pretty excellent.
00:36:27.780 --> 00:36:28.700
Yeah.
00:36:28.700 --> 00:36:30.940
It's been, it's been a fun project.
00:36:30.940 --> 00:36:34.560
It's, it's, it's one of those great things, you know, I get up in the morning and, and there's
00:36:34.560 --> 00:36:38.100
people in Germany and there's people in France and there's people all over the world that
00:36:38.100 --> 00:36:41.560
are, you know, working on this and submitting pull requests and whatever.
00:36:41.560 --> 00:36:44.800
And so it's a, it's a very international effort.
00:36:44.800 --> 00:36:45.120
Yeah.
00:36:45.120 --> 00:36:45.540
Yeah.
00:36:45.540 --> 00:36:46.080
That's great.
00:36:46.080 --> 00:36:52.520
One, one thing, that came to mind when I was thinking about this is just this morning,
00:36:52.520 --> 00:36:56.900
I was emailing with Ryan Kelly who did pypy.js.
00:36:56.900 --> 00:36:57.780
Yeah.
00:36:57.780 --> 00:37:02.980
Can you compare those two projects or sort of say like, what's, what's the story?
00:37:03.140 --> 00:37:06.700
I mean, these are both kinds of JavaScript implementations in the browser.
00:37:06.700 --> 00:37:07.740
Yeah.
00:37:07.740 --> 00:37:12.460
So I think there's, there's actually three separate projects right now going on for Python in the
00:37:12.460 --> 00:37:12.840
browser.
00:37:12.840 --> 00:37:14.040
There's sculpt.
00:37:14.040 --> 00:37:15.720
There's a project called Brython.
00:37:15.720 --> 00:37:19.380
And then there's this, and then there's a pypy.js.
00:37:19.380 --> 00:37:25.840
So pypy.js is really awesome because it's using the, oh shoot.
00:37:25.840 --> 00:37:27.540
I'm just going to space out the name.
00:37:27.600 --> 00:37:31.000
It's using this extension to LLVM compiler, right?
00:37:31.000 --> 00:37:33.240
Where you can compile to a different target.
00:37:33.240 --> 00:37:37.400
Instead of compiling it to machine language, you can have it compiled to JavaScript.
00:37:37.400 --> 00:37:38.180
Exactly.
00:37:38.180 --> 00:37:43.180
So they're actually taking the C source code for pypy, running it through the compiler and
00:37:43.180 --> 00:37:45.560
having the compiler generate all the JavaScript form.
00:37:45.800 --> 00:37:52.820
So the advantage for pypy.js is that you kind of get, you know, absolutely the CPython implementation.
00:37:52.820 --> 00:37:55.080
no question about it.
00:37:55.080 --> 00:37:58.940
What, what's lacking there at the moment.
00:37:59.200 --> 00:38:05.060
And I know they're working on this is to be able to bridge things like, like the turtle
00:38:05.060 --> 00:38:09.900
graphics module or like the processing graphics module so that you can, you know, you can do
00:38:09.900 --> 00:38:13.720
the kind of cool interactive graphics kind of things in the browser that you might want to
00:38:13.720 --> 00:38:13.900
do.
00:38:13.900 --> 00:38:14.260
Yeah.
00:38:14.260 --> 00:38:14.880
That's cool.
00:38:14.880 --> 00:38:18.860
The other thing, the other difference is that, sculpt is just a tiny fraction of the
00:38:18.860 --> 00:38:20.820
size of pypy.js at the moment.
00:38:20.820 --> 00:38:24.040
So what's the size of the JavaScript files for sculpt?
00:38:25.160 --> 00:38:28.540
they're like 143 K.
00:38:28.540 --> 00:38:29.780
Okay.
00:38:29.780 --> 00:38:31.280
That's, that's pretty, that's pretty decent.
00:38:31.280 --> 00:38:33.800
Does that include the standard library?
00:38:33.800 --> 00:38:37.460
Well, it includes the parts of the standard library that we've implemented.
00:38:37.460 --> 00:38:37.720
Right.
00:38:37.720 --> 00:38:38.080
Of course.
00:38:38.080 --> 00:38:39.160
Yeah.
00:38:39.160 --> 00:38:42.100
Which is a fraction of the standard library.
00:38:42.100 --> 00:38:46.540
I guess, you know, if you're missing a piece and it's pure Python, maybe you could try to
00:38:46.540 --> 00:38:50.580
just run it and try to straight up import it.
00:38:50.580 --> 00:38:50.980
That's cool.
00:38:50.980 --> 00:38:51.700
Yep.
00:38:51.700 --> 00:38:52.940
So I don't know.
00:38:53.000 --> 00:38:57.000
There may be a day when we, when, when all this stuff kind of comes together in the great
00:38:57.000 --> 00:38:59.200
singularity of Python in the browser.
00:38:59.200 --> 00:38:59.960
Yeah.
00:38:59.960 --> 00:39:01.980
And we'll get all the best of all the worlds.
00:39:01.980 --> 00:39:05.160
It's really exciting to see that happening.
00:39:05.160 --> 00:39:09.200
so yeah, I think both those projects are, are super cool.
00:39:09.200 --> 00:39:14.000
Did you ever watch, or maybe I should just recommend to the listeners, Gary Bernhardt's
00:39:14.000 --> 00:39:15.820
The Birth and Death of JavaScript?
00:39:15.820 --> 00:39:17.700
No, I haven't.
00:39:17.700 --> 00:39:18.500
Oh my gosh.
00:39:18.500 --> 00:39:21.240
It's this fictional, you know, he's hilarious, of course.
00:39:21.700 --> 00:39:25.040
And I believe this is presented at PyCon 2014.
00:39:25.040 --> 00:39:27.420
I'm not sure when it was, but it's on the video.
00:39:27.420 --> 00:39:34.080
And basically he takes us through this fictional history of going from 2005 into 2035 and how
00:39:34.080 --> 00:39:35.080
JavaScript has changed.
00:39:35.080 --> 00:39:42.180
But there's this sort of real technical underpinning of asm.js and compiling C down into JavaScript
00:39:42.180 --> 00:39:45.140
for the running in the browser.
00:39:45.140 --> 00:39:46.620
And it's definitely worth a look.
00:39:46.700 --> 00:39:47.500
I'll put it in the show notes.
00:39:47.500 --> 00:39:48.320
Yeah.
00:39:48.320 --> 00:39:51.320
It's, it's both hilarious and instructive.
00:39:51.320 --> 00:39:53.300
Okay.
00:39:53.300 --> 00:39:55.640
So we're kind of coming up on the end of the show.
00:39:55.640 --> 00:40:00.020
I have a few questions I always ask on the way out, but before we get there, do you want
00:40:00.020 --> 00:40:04.500
to just talk briefly about the books that you have available and, you know, what ones you've
00:40:04.500 --> 00:40:06.180
maybe wanted to call people's attention to?
00:40:06.600 --> 00:40:10.820
There's, there's a lot of educators listening and also students I know.
00:40:10.820 --> 00:40:16.280
So maybe both ends, they would appreciate hearing about what you guys have in this format at RuneScape.
00:40:16.280 --> 00:40:17.180
Yeah.
00:40:17.180 --> 00:40:17.640
Thanks.
00:40:18.220 --> 00:40:23.680
So we have how to think like a computer scientist interactive edition.
00:40:23.680 --> 00:40:28.340
And that's based on, I think the very, you know, very well known how to think like a computer
00:40:28.340 --> 00:40:34.320
scientist book by Allen Downey and Jeff Elkinger and a couple of other people.
00:40:34.320 --> 00:40:37.520
But I think Alan and Jeff were kind of the main authors on that.
00:40:38.120 --> 00:40:43.720
And so that, that, that's been an open source textbook for, for quite a few years now.
00:40:43.720 --> 00:40:50.040
And I'll just be forever indebted to them for, for doing that because it saved me from yet
00:40:50.040 --> 00:40:55.540
again, having to write an introductory chapter about lists when I didn't want to do that ever
00:40:55.540 --> 00:40:55.840
again.
00:40:55.840 --> 00:41:04.440
So, so we took that, we took their open source textbook and made it interactive and added the
00:41:04.440 --> 00:41:04.820
questions.
00:41:05.240 --> 00:41:08.800
And, you know, over the years we've, we've added some of our own things to it and added
00:41:08.800 --> 00:41:09.720
a couple of new chapters.
00:41:09.720 --> 00:41:18.360
But so that, so that book has just has a great pedigree and has, and has proven itself over
00:41:18.360 --> 00:41:22.780
the years as a, as a really solid textbook, not only for the college level, but also for
00:41:22.780 --> 00:41:23.560
the high school level.
00:41:23.560 --> 00:41:26.660
So we have that out there.
00:41:26.660 --> 00:41:32.340
And then we have a data structures textbook, problem solving with algorithms and data structures
00:41:32.340 --> 00:41:34.460
by Brad Miller and David Ranum.
00:41:34.880 --> 00:41:40.640
that that's published by Franklin Beadle, a publisher right out in, in, Oregon in
00:41:40.640 --> 00:41:41.140
your neighborhood.
00:41:41.140 --> 00:41:41.640
Oh yeah.
00:41:41.640 --> 00:41:49.100
and so, our publisher there was, was gracious enough when we approached him about
00:41:49.100 --> 00:41:52.040
saying, Hey, we have this great idea to change the world.
00:41:52.040 --> 00:41:53.800
We want to make textbooks interactive.
00:41:54.160 --> 00:41:58.400
And we showed him kind of a proof of concept using the how to think book.
00:41:58.400 --> 00:42:04.400
And he, he, immediately, Jim Lisey, our publisher immediately said, wow, that's
00:42:04.400 --> 00:42:04.600
great.
00:42:04.600 --> 00:42:05.200
Let's yeah.
00:42:05.200 --> 00:42:08.900
You have my permission to, to take your book and put it online like that.
00:42:08.900 --> 00:42:09.960
Oh, that's excellent.
00:42:09.960 --> 00:42:10.940
Yeah.
00:42:11.100 --> 00:42:16.160
So that's, and, and, you know, funnily enough, it's one of those great stories where we put
00:42:16.160 --> 00:42:20.400
it online and the year after we put it online, we had our best year in, in royalties ever
00:42:20.400 --> 00:42:22.120
from, from the paper book sales.
00:42:22.440 --> 00:42:26.720
So that's the real, the real irony of open source sometimes, isn't it?
00:42:26.720 --> 00:42:32.400
I mean, I work really close with MongoDB and the guys there and you know, that's a billion,
00:42:32.400 --> 00:42:36.020
multi-billion dollar company and you can go to GitHub and get their product and just download
00:42:36.020 --> 00:42:36.620
it for free.
00:42:36.620 --> 00:42:37.380
I mean, it's amazing.
00:42:37.380 --> 00:42:44.480
And you know, Red Hat and OpenStack and all sorts of stuff is, is, is really sort of paradoxical
00:42:44.480 --> 00:42:48.620
or in, in the sense you would think giving it away would be a problem, but in fact, it's
00:42:48.620 --> 00:42:51.400
actually the thing that makes it catch fire.
00:42:52.080 --> 00:42:56.440
And then I have a little book called Java for Python programmers, which is just a short
00:42:56.440 --> 00:42:59.780
little book on making the transition from, from Python to Java.
00:42:59.780 --> 00:43:04.660
And then we've got, we've got a couple of other, several other books actually.
00:43:04.660 --> 00:43:09.540
One of them written by, by my friend, Paul Resnick at the university of Michigan called
00:43:09.540 --> 00:43:12.300
programming programs, information, and people.
00:43:12.300 --> 00:43:13.860
We call it the pip book.
00:43:13.860 --> 00:43:18.940
And that's part of their information science program at the university of Michigan.
00:43:18.940 --> 00:43:21.660
That's written using the runestone tools and is now freely,
00:43:21.720 --> 00:43:22.700
freely available.
00:43:22.700 --> 00:43:29.980
Mark Guzdial at Georgia tech has written a book for, for high school computer science
00:43:29.980 --> 00:43:37.580
instructors as part of the APs, as part of the new AP programming class called, what
00:43:37.580 --> 00:43:37.920
is it?
00:43:37.920 --> 00:43:38.700
Computer.
00:43:38.700 --> 00:43:41.700
look it up.
00:43:42.240 --> 00:43:46.460
So it's, it's, it's not Java based.
00:43:46.460 --> 00:43:46.940
It's Lang.
00:43:46.940 --> 00:43:50.220
What it, what the cool thing about it is it's kind of language agnostic.
00:43:50.220 --> 00:43:52.960
So it's a CS principles, sorry.
00:43:52.960 --> 00:43:54.900
CS principles is the name of the course.
00:43:54.900 --> 00:43:55.420
Excellent.
00:43:55.420 --> 00:43:57.360
It's the new course by the, by the AP.
00:43:57.600 --> 00:44:01.740
And so Mark has written a textbook just for instructors about how to teach that course.
00:44:01.920 --> 00:44:05.560
And then this fall, he'll also be coming out with the student book for that.
00:44:05.560 --> 00:44:08.380
The, the, and both of those are based on the runestone tools.
00:44:08.380 --> 00:44:08.920
Yeah.
00:44:08.920 --> 00:44:14.520
So it sounds like you guys are really building quite a platform for the teaching going forward.
00:44:14.940 --> 00:44:15.340
Yeah.
00:44:15.340 --> 00:44:16.800
That's what, that's what we hope.
00:44:16.800 --> 00:44:22.160
And you know, the more people that do this, it's always one of those crazy, exciting things
00:44:22.160 --> 00:44:26.080
when you find somebody on the other side of the world or in someplace else that's suddenly
00:44:26.080 --> 00:44:31.920
translated your textbook into Russian or Czech or some other language and is, and is using
00:44:31.920 --> 00:44:34.340
your tools to write a book that you never thought of.
00:44:34.340 --> 00:44:34.680
Yeah.
00:44:34.680 --> 00:44:35.280
That's amazing.
00:44:35.280 --> 00:44:36.500
It's, it's really gratifying.
00:44:36.500 --> 00:44:36.900
I'm sure.
00:44:36.900 --> 00:44:37.960
Yeah.
00:44:37.960 --> 00:44:41.540
Brad, I think that's, that might be a good place to wrap it up.
00:44:41.540 --> 00:44:43.840
Final thoughts, favorite editor.
00:44:44.840 --> 00:44:46.240
favorite editor, right?
00:44:46.240 --> 00:44:47.940
PyCharm.
00:44:47.940 --> 00:44:48.700
PyCharm.
00:44:48.700 --> 00:44:49.260
Oh, right on.
00:44:49.260 --> 00:44:50.140
Do you use that in your class?
00:44:50.140 --> 00:44:51.220
I do.
00:44:51.220 --> 00:44:51.620
Yep.
00:44:51.620 --> 00:44:52.300
Yeah.
00:44:52.300 --> 00:44:57.040
We, we, we stay in the browser for about half the class and then we transition to PyCharm.
00:44:57.040 --> 00:44:58.240
So that's cool.
00:44:58.240 --> 00:45:01.180
Have you tried their PyCharm education edition?
00:45:01.180 --> 00:45:04.220
I have messed around with it a little bit.
00:45:04.220 --> 00:45:04.460
Yeah.
00:45:04.460 --> 00:45:04.700
Yeah.
00:45:04.700 --> 00:45:05.080
I looked at it.
00:45:05.080 --> 00:45:08.980
It's interesting because it kind of guides you through like it's sort of handholding a little
00:45:08.980 --> 00:45:10.700
bit in a sense, but I haven't done anything with it either.
00:45:10.700 --> 00:45:11.360
Yeah.
00:45:11.360 --> 00:45:12.120
All right.
00:45:12.120 --> 00:45:12.400
Awesome.
00:45:12.400 --> 00:45:12.640
Yeah.
00:45:12.640 --> 00:45:13.980
That's the one I use as well.
00:45:13.980 --> 00:45:14.740
I love pie.
00:45:14.740 --> 00:45:14.980
Charm.
00:45:14.980 --> 00:45:17.520
favorite PI package.
00:45:17.520 --> 00:45:19.760
Oh, I Python.
00:45:19.760 --> 00:45:20.800
Yeah.
00:45:20.800 --> 00:45:21.820
I Python is so good.
00:45:21.820 --> 00:45:22.680
Yeah.
00:45:22.680 --> 00:45:25.220
I use it in all my upper level classes now.
00:45:25.220 --> 00:45:27.400
It's so, it's such a great teaching tool that way.
00:45:27.400 --> 00:45:28.480
Oh, I bet it is.
00:45:28.480 --> 00:45:33.020
I hadn't even really considered sort of the, here's the thing I can give the student component
00:45:33.020 --> 00:45:33.360
of it.
00:45:33.360 --> 00:45:34.140
Yeah.
00:45:34.140 --> 00:45:37.340
I mean, for making class notes, it's, it's really, it's really awesome.
00:45:37.340 --> 00:45:44.060
And now with this, you know, with this new, Jupyter integration, you know, I'm, that's
00:45:44.060 --> 00:45:47.980
one of my little projects is to get a Jupyter server running on, on one of our servers on
00:45:47.980 --> 00:45:48.600
campus here.
00:45:48.600 --> 00:45:49.120
Yeah.
00:45:49.120 --> 00:45:50.880
So that people can just access it.
00:45:50.880 --> 00:45:53.960
So the whole I Python thing will break out of being just Python.
00:45:53.960 --> 00:45:56.540
Not that that's terrible, but it'll let it grow significantly.
00:45:56.540 --> 00:45:56.900
Right?
00:45:56.900 --> 00:45:57.660
Yeah.
00:45:57.660 --> 00:45:58.040
Yeah.
00:45:58.040 --> 00:45:58.220
Yep.
00:45:58.220 --> 00:45:58.920
Awesome.
00:45:58.920 --> 00:45:59.820
All right.
00:45:59.820 --> 00:46:03.440
Anything you want to, we didn't talk about, you want to let people know some links you want
00:46:03.440 --> 00:46:04.700
to give people, things like that.
00:46:05.260 --> 00:46:05.520
Yeah.
00:46:05.520 --> 00:46:10.700
I would just say if anybody wants to give, if anybody wants to give Sculpt a try or experience
00:46:10.700 --> 00:46:14.920
Python in the browser, there's another group of guys that I worked together with very
00:46:14.920 --> 00:46:16.520
closely at trinket.io.
00:46:16.520 --> 00:46:22.900
and they have this, they're actually a little startup out on the East coast and, yeah,
00:46:22.900 --> 00:46:28.140
trinket.io, you could write Python programs right in your browser, save them, share them,
00:46:28.140 --> 00:46:30.300
uh, email them to your friends.
00:46:30.300 --> 00:46:33.880
so it's, it's also a great way for doing Python in the browser.
00:46:33.880 --> 00:46:38.120
So I just wanted to give a, give a shout out to the, to the guys at trinket because they've
00:46:38.120 --> 00:46:41.660
been very super helpful in, in keeping the Sculpt project.
00:46:41.660 --> 00:46:42.460
Oh, cool.
00:46:42.460 --> 00:46:42.780
Yeah.
00:46:42.780 --> 00:46:45.520
It's a little bit like, JS Fiddle, but for Python.
00:46:45.520 --> 00:46:46.020
Yeah.
00:46:46.020 --> 00:46:46.520
I think.
00:46:46.520 --> 00:46:46.760
Yeah.
00:46:46.760 --> 00:46:47.180
That's cool.
00:46:47.180 --> 00:46:47.740
Very nice.
00:46:47.740 --> 00:46:49.220
Anything else?
00:46:49.220 --> 00:46:51.260
I think we've hit it.
00:46:51.260 --> 00:46:51.600
Yeah.
00:46:51.600 --> 00:46:53.960
All right, Brad, this has been super interesting.
00:46:53.960 --> 00:46:58.660
I really love to sort of see how Python is making its way into education and.
00:46:58.660 --> 00:46:59.180
Yeah.
00:46:59.180 --> 00:47:00.600
It's really gratifying.
00:47:00.600 --> 00:47:01.560
What you're doing over.
00:47:01.560 --> 00:47:01.920
Yeah.
00:47:01.920 --> 00:47:02.840
Runestone is very cool.
00:47:02.940 --> 00:47:05.240
So people should check it out at interactivepython.org.
00:47:05.240 --> 00:47:06.140
Yep.
00:47:06.140 --> 00:47:07.120
Definitely.
00:47:07.120 --> 00:47:07.800
All right.
00:47:07.800 --> 00:47:08.500
Thanks for being on the show.
00:47:08.500 --> 00:47:09.920
Thanks for having me.
00:47:09.920 --> 00:47:10.780
This was a lot of fun.
00:47:10.780 --> 00:47:12.300
Yeah, it sure was.
00:47:12.300 --> 00:47:12.700
See you later.
00:47:13.840 --> 00:47:16.640
This has been another episode of Talk Python To Me.
00:47:16.640 --> 00:47:18.560
Today's guest was Brad Miller.
00:47:18.560 --> 00:47:21.760
And this episode has been sponsored by Hired and CodeShip.
00:47:21.760 --> 00:47:23.760
Thank you guys for supporting the show.
00:47:23.760 --> 00:47:24.160
Thank you.
00:47:24.160 --> 00:47:24.160
Thank you.
00:47:24.160 --> 00:47:24.660
Thank you.
00:47:24.660 --> 00:47:27.460
Hired wants to be here.
00:47:27.460 --> 00:47:36.780
Visit Hired.com slash talkpython to me to get five or more offers with salary and equity presented right up front and a special listener signing bonus of $4,000.
00:47:36.780 --> 00:47:40.440
CodeShip wants you to always keep shipping.
00:47:40.440 --> 00:47:44.540
Check them out at codeship.com and thank them on Twitter via at CodeShip.
00:47:44.860 --> 00:47:46.580
Don't forget the discount code for listeners.
00:47:46.580 --> 00:47:47.280
It's easy.
00:47:47.280 --> 00:47:49.680
Talk Python, all caps, no spaces.
00:47:49.680 --> 00:47:57.200
You can find the links from the show at talkpythontome.com slash episodes slash show slash 20.
00:47:57.760 --> 00:48:00.020
And while you're there, be sure to subscribe to the show.
00:48:00.020 --> 00:48:02.800
Open your favorite podcatcher and search for Python.
00:48:02.800 --> 00:48:05.180
We should be the number one hit right at the top.
00:48:05.180 --> 00:48:10.640
You can also find the iTunes and direct RSS feeds in the footer of the website.
00:48:10.640 --> 00:48:15.920
Our theme music is Developers, Developers, Developers by Corey Smith, who goes by Smix.
00:48:15.920 --> 00:48:18.120
You can hear his entire song on our website.
00:48:18.120 --> 00:48:20.300
This is your host, Michael Kennedy.
00:48:20.300 --> 00:48:21.500
Thanks for listening.
00:48:21.500 --> 00:48:23.440
Smix takes us out of here.
00:48:23.660 --> 00:48:25.400
Staying with my voice.
00:48:25.400 --> 00:48:27.180
There's no norm that I can feel within.
00:48:27.180 --> 00:48:28.400
Haven't been sleeping.
00:48:28.400 --> 00:48:30.020
I've been using lots of rest.
00:48:30.020 --> 00:48:32.880
I'll pass the mic back to who rocked it best.
00:48:32.880 --> 00:48:40.260
Developers, Developers, Developers, Developers, Developers, Developers.
00:48:40.260 --> 00:48:45.100
Developers, Developers, Developers, Developers, Developers, Developers, Developers.
00:48:45.100 --> 00:48:45.200
.
00:48:45.200 --> 00:49:15.180
Thank you.