WEBVTT

00:00:00.001 --> 00:00:02.860
One of the questions I often ask at the end of the show is,

00:00:02.860 --> 00:00:06.000
when you write some Python code, what editor do you use?

00:00:06.000 --> 00:00:09.620
Increasingly, the most common answer is Visual Studio Code.

00:00:09.620 --> 00:00:14.320
Despite its Windows-only namesake, Visual Studio Code is cross-platform

00:00:14.320 --> 00:00:17.200
and has been gaining a lot of traction in the Python space.

00:00:17.200 --> 00:00:21.180
I was at the Microsoft Build conference immediately after PyCon this May.

00:00:21.180 --> 00:00:25.000
There I got a chance to sit down with Dan Taylor from the VS Code team

00:00:25.000 --> 00:00:27.420
to discuss what they've been up to with VS Code and Python.

00:00:27.860 --> 00:00:32.980
This is Talk Python To Me, episode 216, recorded May 8th, 2019.

00:00:32.980 --> 00:00:49.260
Welcome to Talk Python To Me, a weekly podcast on Python,

00:00:49.260 --> 00:00:52.320
the language, the libraries, the ecosystem, and the personalities.

00:00:52.320 --> 00:00:54.260
This is your host, Michael Kennedy.

00:00:54.260 --> 00:00:56.400
Follow me on Twitter where I'm @mkennedy.

00:00:56.600 --> 00:01:00.140
Keep up with the show and listen to past episodes at talkpython.fm

00:01:00.140 --> 00:01:02.640
and follow the show on Twitter via at Talk Python.

00:01:02.640 --> 00:01:06.200
This episode is sponsored by Linode and Backlog.

00:01:06.200 --> 00:01:08.280
Please check out what they're offering during their segments.

00:01:08.280 --> 00:01:09.560
It really helps support the show.

00:01:09.560 --> 00:01:12.040
Dan, welcome to Talk Python.

00:01:12.040 --> 00:01:12.980
Hi, it's great to be here.

00:01:12.980 --> 00:01:14.720
It's great to have you on the show.

00:01:14.720 --> 00:01:19.200
And we get one of these special opportunities to do an in-person recording with each other, right?

00:01:19.200 --> 00:01:22.960
Before we get into the normal flow, I just want to say,

00:01:22.960 --> 00:01:29.900
hey, we're here at Microsoft Build recording live, not in a live audience, but in person and sort of on the floor here.

00:01:29.900 --> 00:01:30.840
So it's really, really cool.

00:01:30.840 --> 00:01:31.640
It's great to be here.

00:01:31.640 --> 00:01:32.940
And we're going to talk a bit about that.

00:01:32.940 --> 00:01:34.120
Also about PyCon.

00:01:34.120 --> 00:01:35.460
But, you know, let's start at the beginning.

00:01:35.460 --> 00:01:36.320
Start with your story.

00:01:36.320 --> 00:01:37.820
How did you get into programming and Python?

00:01:37.980 --> 00:01:43.500
Programming, I've kind of had like a computer, a 386 computer since I was like five years old at my house, right?

00:01:43.500 --> 00:01:47.460
And so I was always doing a lot of like batch file stuff and DOS and things like that.

00:01:47.460 --> 00:01:48.580
But I remember batch files.

00:01:48.580 --> 00:01:50.900
That used to feel like pretty awesome programming stuff, right?

00:01:50.900 --> 00:01:54.600
You would be able to make the computer do its magic at startup, right?

00:01:54.600 --> 00:01:56.660
You could mess with auto-exec bat and all that stuff.

00:01:56.660 --> 00:01:57.120
Yeah, yeah.

00:01:57.120 --> 00:02:02.740
And then like if you were like get really into it, I mean, doing an if statement and batch file programming is like really, really hard.

00:02:02.740 --> 00:02:05.620
But, you know, I made like a little text adventure game, something like that.

00:02:05.620 --> 00:02:06.600
Oh, my gosh, that's awesome.

00:02:06.760 --> 00:02:11.180
Yeah, but I think oddly enough, when I really got into programming was with Visual Basic 6.

00:02:11.180 --> 00:02:16.820
I was sitting in grade school just like during reading time just reading a VB6 book that I printed out.

00:02:16.820 --> 00:02:18.700
And everyone's looking at me going like, what is this guy doing?

00:02:18.700 --> 00:02:19.500
That's awesome.

00:02:19.500 --> 00:02:26.260
I remember printing out the source code for Notepad, I think, in C++ and reading and trying to understand it way back in the day.

00:02:26.260 --> 00:02:27.780
That's pretty cool.

00:02:27.780 --> 00:02:30.760
You know, VB6, that was a special time, actually.

00:02:30.760 --> 00:02:36.300
You could really build some cool UIs super quick with VB6, that drag and drop stuff.

00:02:36.480 --> 00:02:39.480
And I feel like we kind of don't really have that anymore.

00:02:39.480 --> 00:02:44.040
Yeah, I mean, that's really what got me hooked into programming that you could kind of like I could see something.

00:02:44.040 --> 00:02:45.200
I could just double click.

00:02:45.200 --> 00:02:49.600
And then it really gave me this, you know, it's that game of where you get that five minutes to success.

00:02:49.600 --> 00:02:52.000
And you just want to like keep playing the game until you build up stuff.

00:02:52.000 --> 00:02:53.700
I built all sorts of different programs up.

00:02:53.780 --> 00:02:59.300
I mean, some of the like visual programming stuff is starting to come back with like EduBlocks and MakeCode and some of those things.

00:02:59.300 --> 00:03:04.140
And I think that kind of stuff can really like maybe get more young people into programming.

00:03:04.140 --> 00:03:06.680
Just like that was kind of the aha moment for me.

00:03:06.680 --> 00:03:07.880
You know, that sort of stuff.

00:03:07.880 --> 00:03:09.780
Yeah, I definitely think that's...

00:03:09.780 --> 00:03:11.080
I think it's a little bit missing.

00:03:11.080 --> 00:03:17.740
I think a lot of the cool frameworks that were really good at that kind of outgrew it a little bit and become like a little more pro, which is fine.

00:03:17.740 --> 00:03:22.120
But it also means like those simple, easy steps into like super quick UIs is gone.

00:03:22.120 --> 00:03:23.580
I mean, VB6 is good.

00:03:23.580 --> 00:03:25.160
Windows Forms was actually not bad.

00:03:25.220 --> 00:03:27.500
But it kind of became WPF, which is super hard.

00:03:27.500 --> 00:03:30.540
Not super hard, but relatively for like just jumping into it.

00:03:30.540 --> 00:03:34.660
There's Anvil, which is kind of a cool web front end thing and Python.

00:03:34.660 --> 00:03:36.420
But yeah, there's not too many of them.

00:03:36.420 --> 00:03:38.560
Anyway, so that was sort of the getting started point.

00:03:38.560 --> 00:03:39.600
But that's not Python, right?

00:03:39.600 --> 00:03:40.280
That's VB6.

00:03:40.280 --> 00:03:44.220
I think the first time I used Python, I was working at Autodesk and I was working on some of the graphic stuff.

00:03:44.220 --> 00:03:51.000
And there it was all just building UIs in Python and using Swig to interact with C++ and stuff like that.

00:03:51.160 --> 00:04:00.420
And then I just kind of like took that back to school with me to school projects where professors were kind of saying, you know, hey, you should use a real programming language so that you can like learn real programming.

00:04:00.420 --> 00:04:01.640
And I'm like, what are you talking about?

00:04:01.640 --> 00:04:02.820
You know, this is real programming.

00:04:02.820 --> 00:04:04.060
I just built all this stuff with it.

00:04:04.060 --> 00:04:09.740
And now you've got like all these big companies doing, you know, you've got sites like Instagram and Pinterest all built with Python.

00:04:09.740 --> 00:04:10.180
Yeah, yeah.

00:04:10.180 --> 00:04:12.620
Like, I mean, YouTube gets a million requests per second.

00:04:12.620 --> 00:04:13.600
Is that not real enough?

00:04:13.600 --> 00:04:14.420
Yeah, yeah, exactly.

00:04:14.420 --> 00:04:17.740
So it's interesting how our perspective changes on that stuff over time.

00:04:17.740 --> 00:04:21.080
You know, it makes me crazy when people call Python a scripting language.

00:04:21.320 --> 00:04:21.420
Yeah.

00:04:21.420 --> 00:04:24.160
You know, you're like, oh, is that your favorite scripting language?

00:04:24.160 --> 00:04:24.800
I'm like, whoa.

00:04:24.800 --> 00:04:26.160
Well, it's great at scripting.

00:04:26.160 --> 00:04:26.840
Exactly.

00:04:26.840 --> 00:04:28.960
It's also great at a lot of other stuff too.

00:04:28.960 --> 00:04:30.120
You can build real things with it.

00:04:30.120 --> 00:04:35.360
So your time at Autodesk, was that building stuff that was like embedded into some of those apps?

00:04:35.360 --> 00:04:36.920
Or was it like workflow between the apps?

00:04:36.920 --> 00:04:37.840
What kind of stuff was there?

00:04:37.840 --> 00:04:44.720
Well, I was working on a product that I don't remember exactly what it was called, but it was doing like visualization of cars and things like that.

00:04:44.720 --> 00:04:45.000
Cool.

00:04:45.000 --> 00:04:50.260
The UI, that team had decided to use Python for the UI with WX widgets.

00:04:50.260 --> 00:04:53.720
And then it would call down in the C++ layer to do a lot of the 3D graphics.

00:04:53.720 --> 00:04:56.320
But it did a lot of the scene manipulation and things like that with Python.

00:04:56.320 --> 00:04:59.420
So there was some vector math and sort of all sorts of stuff that was in Python.

00:04:59.420 --> 00:05:06.060
So it was this weird, you know, you could do a lot of things in Python and then all of a sudden you're in this big C++ world and stuff like that.

00:05:06.180 --> 00:05:07.480
Yeah, it sounds really cool though.

00:05:07.480 --> 00:05:12.180
The 3D stuff is always so interesting, but it's also pretty challenging to work in.

00:05:12.180 --> 00:05:16.100
Like I built a couple from scratch 3D simulators and OpenGL and stuff.

00:05:16.100 --> 00:05:18.580
And I always thought the first half, I'm like, this is going to be so fun.

00:05:18.580 --> 00:05:20.840
The second half, I'm like, why can't I see the thing?

00:05:20.840 --> 00:05:24.340
You know, because I have the clockwise versus anti-clockwise rotation.

00:05:24.340 --> 00:05:26.340
Yeah, you're doing that thing with your fingers where you get the three axes.

00:05:26.340 --> 00:05:34.320
And I had this book, you know, real-time rendering where I'm just like, you know, staring up in the room trying to like, you know, figure out what direction things are pointed at.

00:05:34.320 --> 00:05:34.640
Yeah.

00:05:34.640 --> 00:05:35.220
It's kind of crazy.

00:05:35.640 --> 00:05:36.540
It's totally crazy.

00:05:36.540 --> 00:05:39.120
Let's talk a little bit about what you do day to day.

00:05:39.120 --> 00:05:40.140
You work at Microsoft.

00:05:40.140 --> 00:05:40.780
What do you do there?

00:05:40.780 --> 00:05:44.620
So I'm a principal PM manager for a Python developer tools team.

00:05:44.620 --> 00:05:45.980
I have a small team of PMs.

00:05:45.980 --> 00:05:51.420
We work on Python and Visual Studio Code, Python Visual Studio, and then also Python and Azure.

00:05:51.420 --> 00:05:52.720
Yeah, that's pretty awesome.

00:05:52.720 --> 00:05:55.460
It's a pretty big set of different things, but yeah, we do quite a bit.

00:05:55.460 --> 00:05:56.260
Yeah, and it's growing, right?

00:05:56.260 --> 00:05:57.040
Yep, it's growing.

00:05:57.040 --> 00:06:00.540
When I started the team, it was just me and one other PM.

00:06:00.860 --> 00:06:02.760
And I was working with Brett Cannon.

00:06:02.760 --> 00:06:09.520
And now Brett Cannon's managing a team, and I'm managing, you know, it's sort of just, we're doing a lot with Python and Microsoft.

00:06:09.520 --> 00:06:10.700
Yeah, it's super exciting.

00:06:10.700 --> 00:06:16.500
And yeah, so you work with a lot of people, a lot of the folks at Microsoft that are also, have been on the show, yeah?

00:06:16.500 --> 00:06:20.620
Been on the show and out there in the community, you know, working on the core Python developers.

00:06:21.000 --> 00:06:23.480
We got a couple of, you know, Brett and Steve on our team, yeah.

00:06:23.480 --> 00:06:23.680
Cool.

00:06:23.680 --> 00:06:33.300
Yeah, I think it's going to be a pretty interesting perspective that you have coming from, like, Microsoft customers and developers intersecting here with Python, right?

00:06:33.300 --> 00:06:42.960
Like, it's, I feel like you might get a little more visibility into what Python and enterprise or large corporate places kind of looks like.

00:06:42.960 --> 00:06:44.300
What are your thoughts there?

00:06:44.300 --> 00:06:45.820
Yeah, I mean, it's an interesting spectrum.

00:06:46.060 --> 00:06:53.300
I mean, we definitely see a lot more, I work with a lot more individual developers working in Python land than I do in other places.

00:06:53.300 --> 00:06:58.600
But then we also hear with .NET and the other programming languages, we talk to a lot more big enterprises, right?

00:06:58.600 --> 00:07:02.260
But we also hear from, you know, the big enterprises doing Python.

00:07:02.260 --> 00:07:12.340
They have all these challenges and concerns around performance and scale and compliance and security and, like, all these different things that, you know, when you're just sitting down there trying to, like, you know,

00:07:12.340 --> 00:07:17.340
hey, how do I learn programming and make Hello World that, you know, these two worlds are very at odds with each other.

00:07:17.340 --> 00:07:25.580
And it's interesting watching sort of the core development team on Python trying to navigate and negotiate the different pressures and stuff like that that are kind of coming from two directions.

00:07:25.580 --> 00:07:37.260
How do we enable it to meet all these enterprise needs while still keeping it, you know, fun, easy to use, really productive, and not adding a whole bunch of, you know, stuff that's getting in my way, right?

00:07:37.260 --> 00:07:37.860
Yeah, yeah.

00:07:37.860 --> 00:07:40.880
Don't over-professionalize the Python.

00:07:40.880 --> 00:07:45.700
Because, you know, one of the things I go on a lot about is, like, how Python is a full-spectrum language.

00:07:45.700 --> 00:07:48.280
Like, you don't have to take the complexity at the beginning.

00:07:48.280 --> 00:07:53.040
Like, you can be productive with Python with, like, a partial understanding of what it is, what it can do.

00:07:53.040 --> 00:07:57.660
But it can't, you don't outgrow it so much, like, say, vb6, for example, like you said earlier.

00:07:57.660 --> 00:07:58.280
Yeah, yeah, yeah.

00:07:58.280 --> 00:08:05.120
And, I mean, Python is kind of my go-to for, you know, anytime I want to do something, my first answer is, like, can I do this with Python, right?

00:08:05.120 --> 00:08:12.960
But in terms of, like, kind of managing the complexity, I think, I forget the name of that, that backslash operator that gives you the sort of positional arguments and stuff like that.

00:08:12.960 --> 00:08:14.460
You know, that's an interesting one.

00:08:14.460 --> 00:08:18.740
It's, like, where you can add that and you can use it and that allows you to interface with C-APIs and things like that.

00:08:18.740 --> 00:08:20.700
But hopefully most people never have to see that, right?

00:08:20.700 --> 00:08:21.480
Yeah, exactly.

00:08:21.480 --> 00:08:22.040
Right.

00:08:22.040 --> 00:08:27.480
You could go your whole life as a developer not knowing that there's a syntax for keyword-only arguments.

00:08:27.480 --> 00:08:31.380
And now there's a syntax for positional-only arguments, right?

00:08:31.380 --> 00:08:32.440
You don't need to know.

00:08:32.440 --> 00:08:32.840
It's cool.

00:08:32.840 --> 00:08:33.240
Yeah.

00:08:33.240 --> 00:08:33.920
Cool.

00:08:33.920 --> 00:08:40.300
So, we were both just at PyCon and we quickly got on a plane and flew to Seattle to go to build.

00:08:40.300 --> 00:08:43.080
What were your thoughts on, I guess, PyCon first?

00:08:43.080 --> 00:08:45.080
PyCon is just such an amazing event.

00:08:45.080 --> 00:08:48.280
And it's, I don't think I've been to another event that's quite like it.

00:08:48.280 --> 00:08:55.340
I mean, it really is, you know, Ernest was on the stage talking about how this PyCon means community to a lot of people, right?

00:08:55.340 --> 00:08:59.720
And just seeing that in the community and it's such a diverse and inclusive place.

00:08:59.980 --> 00:09:10.380
And so, you know, last year was my first PyCon and after I left, I was sort of like, I think I'd keep coming back here even if I wasn't working on Python or working at Microsoft and stuff like that.

00:09:10.380 --> 00:09:11.100
Yeah, that's super cool.

00:09:11.100 --> 00:09:13.620
I feel like it's like my geek holiday, my geek getaway.

00:09:13.700 --> 00:09:20.380
Yeah, and then there's all the people that you see through all the different events throughout the year and all the things.

00:09:20.380 --> 00:09:27.020
So, it's great that, you know, Microsoft is there and we're able to help sponsor it where the Keystone sponsored the event.

00:09:27.020 --> 00:09:32.960
So, it was great to have kind of the big presence there and just really just see a lot of people coming up and talking to us at the event.

00:09:32.960 --> 00:09:33.960
Yeah, that's super.

00:09:34.080 --> 00:09:38.160
And you guys had a cool, like, hands-on thing where people could get a little robot or something.

00:09:38.160 --> 00:09:38.880
What was that about?

00:09:38.880 --> 00:09:46.520
Yeah, so we had hands-on labs using, like, VS Code and some of our, like, Azure functions and some of our cognitive services.

00:09:46.520 --> 00:09:51.720
And then you get a little Adafruit lunchbox kit, which has some circuits and some things like that.

00:09:51.720 --> 00:09:58.620
And then Nina actually did a workshop with the Adafruit team where they came over with your lunchboxes and walked people through a sample lab.

00:09:58.620 --> 00:10:00.000
Yeah, that's really cool.

00:10:00.000 --> 00:10:03.980
Yeah, Nina's got a bunch of cool embedded wearable stuff going on and it's, like, right up her alley.

00:10:04.100 --> 00:10:05.160
Yeah, she loves that stuff.

00:10:05.160 --> 00:10:09.300
And she did a keynote on Python hardware and, I mean, it was just awesome.

00:10:09.300 --> 00:10:15.620
And I really loved how she said that hardware really makes people more interested in programming.

00:10:15.620 --> 00:10:21.260
And women in particular, it makes them more likely to stick with programming and tech and stuff like that.

00:10:21.260 --> 00:10:26.800
Yeah, there were some super interesting results coming from the BBC Microbit study done in the UK a couple years ago.

00:10:26.800 --> 00:10:31.600
And just how much more likely people were to go into STEM or care about it.

00:10:31.600 --> 00:10:32.800
It just makes it real, right?

00:10:32.880 --> 00:10:34.380
It's sort of like what we were talking about earlier.

00:10:34.380 --> 00:10:36.420
It's sort of you see that, hey, I can do something.

00:10:36.420 --> 00:10:37.300
I can make these lights flash.

00:10:37.300 --> 00:10:38.060
I can make noises.

00:10:38.060 --> 00:10:38.800
You know what I mean?

00:10:38.800 --> 00:10:41.080
And it just wants to make you keep playing the game, right?

00:10:41.080 --> 00:10:41.760
Yeah, absolutely.

00:10:41.760 --> 00:10:47.320
You get those quick wins and things like CircuitPython and stuff make it way easier than, you know, embedded C.

00:10:47.320 --> 00:10:47.960
Yeah, yeah.

00:10:47.960 --> 00:10:48.660
No backslashes.

00:10:48.660 --> 00:10:49.460
Yeah, right on.

00:10:49.460 --> 00:10:52.460
Let's start talking a little bit about VS Code.

00:10:52.460 --> 00:10:54.700
So when did VS Code come out?

00:10:54.700 --> 00:10:56.080
It came out in 2015.

00:10:56.080 --> 00:10:58.300
I don't remember the exact month, but 2015.

00:10:58.300 --> 00:10:59.400
So not too long ago.

00:10:59.400 --> 00:11:00.260
Yeah, not too long ago.

00:11:00.260 --> 00:11:04.360
And originally, it wasn't necessarily supporting Python right out of the box, right?

00:11:04.360 --> 00:11:06.560
So when it originally came out, it was...

00:11:06.560 --> 00:11:09.500
And what was the original goal or like idea behind it?

00:11:09.580 --> 00:11:24.140
So the original like, you know, pitch, it was a free open source cross-platform editor with support for Node.js and JavaScript with built-in debugging and source control, right?

00:11:24.140 --> 00:11:24.220
Right.

00:11:24.220 --> 00:11:26.540
So it's kind of like an editor plus, right?

00:11:26.540 --> 00:11:27.900
Just a little bit of extra functionality.

00:11:27.900 --> 00:11:37.620
Yeah, it seems to me like its original zen was just like, we're going to try to be as minimal as possible while providing you like real tooling, right?

00:11:37.680 --> 00:11:42.840
Like editors and autocomplete, but try to be the least amount of that that we can still get away with.

00:11:42.840 --> 00:11:44.620
That was my perception from the outside.

00:11:44.620 --> 00:11:52.500
Certainly, like you see a lot of people using things like Vim or Notepad++ and stuff like that.

00:11:52.500 --> 00:11:57.060
And you can see a lot of people just want, you know, let me just open the code and start working with it.

00:11:57.060 --> 00:12:01.940
And then, you know, start from there and then add on the debugging and functionality, you know, sort of on top of that.

00:12:01.940 --> 00:12:05.700
And then shortly after that, they didn't have extensions when they first released it.

00:12:05.760 --> 00:12:10.340
And then everyone was like, you know, it got quite a good reception when they first put it out there.

00:12:10.340 --> 00:12:11.940
And then everyone's asking for extensions.

00:12:11.940 --> 00:12:16.820
And so once they put the extensions out there, that's when other languages started really coming on board like Python.

00:12:16.820 --> 00:12:19.000
Yeah, I feel like that kind of made it blow up.

00:12:19.000 --> 00:12:19.680
Yeah, yeah.

00:12:19.680 --> 00:12:20.580
It really opened the doors.

00:12:20.580 --> 00:12:25.520
And the extensions is really what a lot of people say they love about VS Code today.

00:12:25.520 --> 00:12:30.820
You know, that it's just got so many extensions out there and so many people building them and creating them.

00:12:30.820 --> 00:12:33.340
And that's even how Python got its roots.

00:12:33.340 --> 00:12:38.360
Don Giamatti from Australia just built a Python extension and put it out there.

00:12:38.360 --> 00:12:40.660
And it sort of took off on the marketplace.

00:12:40.920 --> 00:12:41.540
Yeah, that's super cool.

00:12:41.540 --> 00:12:43.960
And I had him on the show quite a while ago.

00:12:43.960 --> 00:12:49.420
And we were remarking about how insanely popular that extension was.

00:12:49.420 --> 00:12:51.720
This was before he worked with you and at Microsoft.

00:12:51.720 --> 00:12:52.620
It was just his thing.

00:12:52.620 --> 00:12:58.240
And I think we were like, wow, there's a million downloads or 500,000 downloads or something like that, right?

00:12:58.380 --> 00:12:58.880
Yeah, yeah.

00:12:58.880 --> 00:13:02.400
And that number just keeps increasing all the time, right?

00:13:02.400 --> 00:13:06.580
So even a year ago, there was 6 million downloads and now there's 44 million.

00:13:06.580 --> 00:13:08.840
Yeah, I looked at it, it's like 44 million.

00:13:08.840 --> 00:13:19.140
And what's pretty impressive to me is this project that comes from Microsoft that's traditionally been pretty heavy in the C#, C++ side of things.

00:13:20.020 --> 00:13:30.320
If you pull up the most popular plugins or extensions, you don't see C# and then like ASP.NET extensions and then somewhere down the list, Python, right?

00:13:30.320 --> 00:13:33.800
Like Python is the number one most popular extension.

00:13:33.800 --> 00:13:34.320
Yeah.

00:13:34.320 --> 00:13:40.780
And that's something that really got me excited to move over to the Python team at Microsoft about two years ago.

00:13:40.780 --> 00:13:44.040
They said, hey, I've been walking around saying, why aren't we doing more with Python?

00:13:44.040 --> 00:13:46.840
Come on, we should be doing, we have a Python team, but, you know, we should be doing more.

00:13:46.840 --> 00:13:51.500
And then, you know, someone said, hey, we hired Don and we're going to, you know, put a team on it.

00:13:51.500 --> 00:13:52.060
You want to do this?

00:13:52.060 --> 00:13:53.940
And I was like, ah, I got to, I got to jump over there.

00:13:53.940 --> 00:13:54.820
Yeah, how do I get involved with that?

00:13:54.820 --> 00:13:55.280
That's awesome.

00:13:55.280 --> 00:13:57.800
It's just so much fun working on this team.

00:13:57.800 --> 00:13:58.400
That's super cool.

00:13:58.400 --> 00:14:06.380
Yeah, I did some other looking around and the second and third most popular extensions are ESLint is number two and C++ is number three.

00:14:06.380 --> 00:14:10.100
And they're only half as many, which is still 20 million, but they're still significantly less.

00:14:10.100 --> 00:14:14.540
One thing I will say about the download count is every time we push an update to the extension, those count as new downloads.

00:14:14.540 --> 00:14:16.780
So they've added the install counts.

00:14:16.780 --> 00:14:17.820
On the marketplace.

00:14:17.820 --> 00:14:18.660
I see.

00:14:18.660 --> 00:14:19.720
Just full disclosure.

00:14:19.720 --> 00:14:20.340
Yeah, yeah, yeah.

00:14:20.340 --> 00:14:22.060
We push out a lot of little updates now and then.

00:14:22.060 --> 00:14:22.940
So some of those can.

00:14:22.940 --> 00:14:26.780
So the more active teams can like get a little better, get a little ahead.

00:14:26.780 --> 00:14:27.300
Yeah, exactly.

00:14:27.300 --> 00:14:28.620
That's still pretty good though.

00:14:28.620 --> 00:14:30.720
But yeah, we're still the number one by installs as well.

00:14:30.720 --> 00:14:32.900
VS Code is an Electron JS app, right?

00:14:32.900 --> 00:14:33.260
Mm-hmm.

00:14:33.440 --> 00:14:36.700
Maybe tell people quickly who don't know, like there's all sorts of folks who listen.

00:14:36.700 --> 00:14:37.780
Like, what is that?

00:14:37.780 --> 00:14:42.240
Like, that's kind of a fairly new and unusual way to build an app, but it's definitely taken off.

00:14:42.240 --> 00:14:45.120
Like Slack and some other folks are that way as well.

00:14:45.120 --> 00:14:48.180
I'll do the best just as I can being a program manager.

00:14:48.380 --> 00:14:52.200
But the Electron is a framework for building JavaScript apps on the desktop.

00:14:52.200 --> 00:15:02.520
And I think that's what we really enabled us to create something that was cross-platform right out of the gate without too much dealing with weird low-level C platform code, right?

00:15:02.520 --> 00:15:02.740
Right.

00:15:02.820 --> 00:15:07.840
You've got Chrome that's already cross-platform, Node that's cross-platform, and then JavaScript and HTML, right?

00:15:07.840 --> 00:15:08.160
Yeah.

00:15:08.160 --> 00:15:09.620
It made so much sense for us.

00:15:09.620 --> 00:15:16.000
We had this online editor called Monaco, which was created by Eric Gamma, one of the Gang of Four.

00:15:16.000 --> 00:15:19.260
The original design patterns from, you know, like early 90s?

00:15:19.260 --> 00:15:19.620
Yeah.

00:15:19.620 --> 00:15:19.920
Yeah.

00:15:19.920 --> 00:15:27.940
And he had built this online editor that we've been using in Microsoft for some of our, like, online source control, some online editing experiences in Azure.

00:15:28.740 --> 00:15:35.420
And so they were just able to say, like, hey, we got this online editor, we got Electron, let's build VS Code.

00:15:35.420 --> 00:15:38.920
And they really actually put it together relatively quickly and just put it out there.

00:15:38.920 --> 00:15:44.140
This portion of Talk Python To Me is brought to you by Linode.

00:15:44.140 --> 00:15:47.880
Are you looking for hosting that's fast, simple, and incredibly affordable?

00:15:47.880 --> 00:15:52.980
Well, look past that bookstore and check out Linode at talkpython.fm/Linode.

00:15:52.980 --> 00:15:54.880
That's L-I-N-O-D-E.

00:15:55.400 --> 00:15:59.300
Plans start at just $5 a month for a dedicated server with a gig of RAM.

00:15:59.300 --> 00:16:01.520
They have 10 data centers across the globe.

00:16:01.520 --> 00:16:05.340
So no matter where you are or where your users are, there's a data center for you.

00:16:05.340 --> 00:16:19.720
Whether you want to run a Python web app, host a private Git server, or just a file server, you'll get native SSDs on all the machines, a newly upgraded 200 gigabit network, 24-7 friendly support, even on holidays, and a seven-day money-back guarantee.

00:16:19.720 --> 00:16:21.380
Need a little help with your infrastructure?

00:16:21.520 --> 00:16:26.140
They even offer professional services to help you with architecture, migrations, and more.

00:16:26.140 --> 00:16:29.080
Do you want a dedicated server for free for the next four months?

00:16:29.080 --> 00:16:32.140
Just visit talkpython.fm/Linode.

00:16:32.140 --> 00:16:43.880
One thing that's a little interesting is you guys also now have, I mean, not you individually, you as the Microsoft, you have Atom after you've acquired GitHub, right?

00:16:43.880 --> 00:16:46.700
Which is also ElectronJS, I believe.

00:16:47.060 --> 00:16:49.300
It's kind of interesting, like, what's the story with those two?

00:16:49.300 --> 00:16:50.560
Are they both going forward?

00:16:50.560 --> 00:16:57.180
Yeah, so Nat Friedman, when he became the CEO of GitHub, he did an AMA on Reddit, and this question came up.

00:16:57.180 --> 00:16:58.800
And I loved his answer.

00:16:58.800 --> 00:17:03.920
He said, as long as people want to keep using Atom, we'll still work on Atom and put it out there.

00:17:03.920 --> 00:17:06.840
Yeah, I know some people are using Atom, and they're doing cool stuff with it.

00:17:06.900 --> 00:17:07.940
So it's pretty awesome.

00:17:07.940 --> 00:17:12.320
But yeah, it's kind of interesting how things have shifted.

00:17:12.320 --> 00:17:19.300
How's the whole GitHub acquisition changed or changed people's perspective for you all working on the team, or has it?

00:17:19.300 --> 00:17:24.680
They're still kind of managed as this different company, have their own CEO and stuff like that.

00:17:24.680 --> 00:17:36.880
And I can only speak from my own experience, but my own experience is that we're just more likely to recommend using GitHub in places, rather than having to, you know, maybe come up with our own solution or have two implementations sometimes.

00:17:36.880 --> 00:17:38.780
It makes it a lot easier to say, well, just use GitHub.

00:17:38.780 --> 00:17:39.100
Yeah.

00:17:39.540 --> 00:17:41.720
Well, I think people are starting to say that anyway.

00:17:41.720 --> 00:17:42.200
Yes.

00:17:42.200 --> 00:17:42.420
Yeah.

00:17:42.420 --> 00:17:42.700
Right?

00:17:42.700 --> 00:17:44.580
We're already kind of going in that direction.

00:17:44.580 --> 00:17:57.040
So before there was any word of you all buying GitHub, it was still like, clearly the momentum, the black hole of open source in a positive way was GitHub just sucking everything in.

00:17:57.040 --> 00:17:57.280
Right?

00:17:57.280 --> 00:17:57.740
Yeah.

00:17:57.740 --> 00:18:03.060
And, you know, I was so excited when I opened my phone up and pulled up my stock ticker app.

00:18:03.060 --> 00:18:03.720
I'm like, what?

00:18:03.720 --> 00:18:05.280
This is amazing.

00:18:05.280 --> 00:18:07.180
What is this news event?

00:18:07.180 --> 00:18:07.740
What is this?

00:18:07.740 --> 00:18:07.980
Yeah.

00:18:07.980 --> 00:18:08.900
I think it's positive.

00:18:08.900 --> 00:18:15.780
I know there was a little bit of surprise, some trepidation in the open source space when that first hit.

00:18:15.780 --> 00:18:21.740
There are people talking about moving to Bitbucket or other places, but I don't really see that manifesting.

00:18:21.740 --> 00:18:31.600
What I thought was super interesting was actually looking at some of the reasons behind, and it looked like it was really, in the end, a pretty positive outcome for both GitHub and you guys.

00:18:31.600 --> 00:18:38.440
The thing that, and I can just react to what I read, there's always a negative reaction somewhere to anything you do as a large company, right?

00:18:38.440 --> 00:18:38.680
Yeah.

00:18:38.680 --> 00:18:39.620
There's always somebody not happy.

00:18:39.620 --> 00:18:45.960
But what I was really encouraged by was that, you know, people out there saying, oh, this is terrible.

00:18:45.960 --> 00:18:46.500
This is evil.

00:18:46.500 --> 00:18:53.380
And then other people that weren't from Microsoft were like, you know, arguing with those people saying like, hey, no, this is actually good.

00:18:53.380 --> 00:18:55.420
Where Microsoft is, they love open source.

00:18:55.620 --> 00:18:59.140
And there's other companies that could have bought them that would have been much worse.

00:18:59.140 --> 00:18:59.620
Right.

00:18:59.620 --> 00:19:07.320
And I can really have the resources to make sure that GitHub thrives and continues to be the big platform for doing open source.

00:19:07.320 --> 00:19:07.460
Yeah.

00:19:07.460 --> 00:19:13.400
Actually, one of the, VS Code actually, I think is the biggest open source project on GitHub when we made that acquisition.

00:19:13.400 --> 00:19:19.580
So it's already a platform that we, you know, are really well invested in just as individual developers.

00:19:19.580 --> 00:19:22.720
So you kind of bought your source control provider.

00:19:22.720 --> 00:19:23.420
Yeah.

00:19:23.420 --> 00:19:25.220
Just took everyone else with it.

00:19:25.220 --> 00:19:25.980
How interesting.

00:19:25.980 --> 00:19:27.340
Okay, cool.

00:19:27.460 --> 00:19:30.960
Let's focus a little bit on the growth of VS Code, I guess.

00:19:30.960 --> 00:19:32.320
You know, I was really surprised.

00:19:32.320 --> 00:19:34.140
Like, we talked about the origins a little bit.

00:19:34.140 --> 00:19:38.440
2015 or so it came out and then the extensions and whatnot.

00:19:38.440 --> 00:19:39.760
Did it surprise you?

00:19:39.760 --> 00:19:49.700
Did you guys do like a backflip of joy when you saw the Stack Overflow survey showing, you know, VS Code like the number one editor out there in terms of usage?

00:19:49.700 --> 00:19:51.180
I was very happy to see that.

00:19:51.180 --> 00:19:54.300
I mean, it just sort of, I still don't really understand what that means.

00:19:54.480 --> 00:20:02.300
You know what I mean in terms of, like, wow, it's actually the majority of developers use Visual Studio Code, you know, if you look at that survey.

00:20:02.300 --> 00:20:04.220
And that's just, I can't comprehend that.

00:20:04.220 --> 00:20:07.500
You know, it's just, I don't know, I feel a little honored to work on it.

00:20:07.500 --> 00:20:09.120
Yeah, that's actually, that's pretty awesome, right?

00:20:09.120 --> 00:20:17.860
You know, one thing I would like to ask you, and I have my own opinions and I don't think it's crazy or anything, but, like, why would Microsoft work on this?

00:20:17.860 --> 00:20:19.960
Like, you're not selling it, right?

00:20:19.960 --> 00:20:21.420
It's just, you just go get it.

00:20:21.420 --> 00:20:22.040
It's free.

00:20:22.440 --> 00:20:27.580
What value do you guys have in this other than, like, Goodwill and we just want it to exist or whatever?

00:20:27.580 --> 00:20:30.000
Yeah, so this question comes up all the time, right?

00:20:30.000 --> 00:20:30.860
People always ask this.

00:20:30.860 --> 00:20:37.200
And I don't know if you know about Microsoft, but we've always had a really giant developer tools division.

00:20:37.200 --> 00:20:40.000
And we've always given developer tools away for free.

00:20:40.000 --> 00:20:46.180
Like, Visual Studio, I think it's a paid product, but actually the majority of people use the free community edition for something like that.

00:20:46.180 --> 00:20:52.640
But before Visual Studio Code, you know, there's a lot that, you know, if you're an open source developer, you're using Python or Node or something like that.

00:20:52.640 --> 00:20:57.900
We didn't really have much that was relevant to you from Microsoft because a lot of our stuff was Windows only.

00:20:58.460 --> 00:20:58.840
Right.

00:20:58.840 --> 00:21:03.500
You had Visual Studio, you had Python tools for Visual Studio, but like you said, that's Windows only.

00:21:03.500 --> 00:21:06.740
And that's, you know, that already creates a lot of friction already.

00:21:06.740 --> 00:21:15.760
For us, you know, the benefit to Microsoft is that, you know, if you use Visual Studio Code and you like your experience there, maybe you'll consider some of our other stuff.

00:21:15.760 --> 00:21:18.240
And it really comes down to that, you know.

00:21:19.380 --> 00:21:22.260
Otherwise, you know, you're not really thinking about us.

00:21:22.260 --> 00:21:23.800
You were not in the conversation.

00:21:23.800 --> 00:21:24.320
Yeah.

00:21:24.320 --> 00:21:27.380
That would have been my guess of what you were trying to get out of it.

00:21:27.380 --> 00:21:30.000
But, you know, I wanted to see it from your perspective, right?

00:21:30.000 --> 00:21:35.620
Like, if you have interesting Azure plugins, like push a button here and it's on our Kubernetes service, right?

00:21:35.620 --> 00:21:41.340
Like, if it's right there next to them, like then all of a sudden there's your sort of implicit upsell or whatever.

00:21:41.340 --> 00:21:41.620
Yeah.

00:21:41.620 --> 00:21:43.980
And so just leave that option on the table, right?

00:21:43.980 --> 00:21:46.580
You can choose to use that if you want, right?

00:21:46.580 --> 00:21:46.860
Yeah.

00:21:46.960 --> 00:21:52.760
It does also allow us to create a really good developer experience for Azure with our Azure plugins, right?

00:21:52.760 --> 00:21:59.820
Because we can sort of, it's sort of like the vertical stack integrated, but also like, you know, choose your own pieces, you know, whatever.

00:21:59.820 --> 00:22:00.780
Yeah, that's interesting.

00:22:00.780 --> 00:22:05.040
I suppose like in addition to being like, it's near you, so here's the upsell button.

00:22:05.040 --> 00:22:13.720
Like the people who already choose Azure or other tooling from you guys, like you can provide them the best possible experience cross-platform for your own stuff.

00:22:13.720 --> 00:22:14.340
Yes.

00:22:14.440 --> 00:22:19.020
Especially if we believe that we have the best developer tools that you can use, right?

00:22:19.020 --> 00:22:19.300
Yeah.

00:22:19.300 --> 00:22:21.640
You've definitely made some great ones over the years.

00:22:21.640 --> 00:22:22.440
So that's pretty cool.

00:22:22.440 --> 00:22:25.300
And I guess, you know, let's touch on some of the features.

00:22:25.300 --> 00:22:29.580
Like, I feel like you all have been on a bit of a tear with like doing some cool stuff.

00:22:29.580 --> 00:22:36.000
So almost all of the announcements and whatnot have been sort of put off or held until here at Build.

00:22:36.000 --> 00:22:37.500
Like, that's your big developer conference.

00:22:37.500 --> 00:22:40.100
That's like Apple's WWDC or Google I.O., right?

00:22:40.100 --> 00:22:40.900
It's our Super Bowl.

00:22:41.140 --> 00:22:41.640
Yeah, exactly.

00:22:41.640 --> 00:22:42.540
Yeah, it's a big deal.

00:22:42.540 --> 00:22:51.580
But the VS Code team announced some pretty cool stuff at PyCon in honor of Python being like the biggest ecosystem there, right?

00:22:51.580 --> 00:22:51.880
Yeah.

00:22:51.880 --> 00:22:58.840
Just last week at PyCon at the expo open, we pushed the buttons and unveiled our Visual Studio Code remote development features.

00:22:59.220 --> 00:23:04.420
And we brought that to PyCon because it was Python developers who were the most passionate about it.

00:23:04.420 --> 00:23:07.120
And actually, that's at PyCon last year.

00:23:07.120 --> 00:23:08.760
That was what everyone was asking us for.

00:23:08.760 --> 00:23:15.380
So we really said, hey, we got to pull this one early because, you know, we want to go talk to the people who are really asking for it.

00:23:15.380 --> 00:23:25.540
And if you don't know, with Python, a lot of people develop inside of Docker containers or on remote, you know, VMs that have access to giant data sets.

00:23:25.540 --> 00:23:28.960
And then also a lot of people on Windows using Windows Subsystem for Linux.

00:23:28.960 --> 00:23:33.200
And their tools were just not really able to work in those environments.

00:23:33.200 --> 00:23:33.480
Yeah.

00:23:33.480 --> 00:23:38.940
And Windows Subsystem for Linux, even though it's in the same OS, it's kind of isolated in certain ways, right?

00:23:38.940 --> 00:23:40.140
There's no UI, right?

00:23:40.140 --> 00:23:45.960
So you can't really, like, type code dot on the command line and have a UI pop up until now.

00:23:45.960 --> 00:23:47.040
Until now.

00:23:47.040 --> 00:23:47.800
Yeah.

00:23:47.800 --> 00:23:48.860
So this is a pretty big deal.

00:23:48.860 --> 00:23:58.560
And, you know, I feel like it addresses one of the things that was, I hear a lot, you know, a lot of people say to me, and it's totally fine, but it's not the way that I see the world.

00:23:58.560 --> 00:24:09.740
But it's the way they say, look, I, a lot of times, am going to be remoted, you know, SSHed into a server, or I'll be dropped into some environment like Docker or whatever.

00:24:10.040 --> 00:24:17.720
Where I don't have, you know, my fancy tools, you know, be that PyCharm or VS Code or whatever, right?

00:24:17.720 --> 00:24:22.960
So my thinking is, I'm going to just work in VI or Emacs because I have it everywhere.

00:24:22.960 --> 00:24:28.600
Yeah, I think SSH development is probably the number one driver of VI usage.

00:24:28.600 --> 00:24:29.340
Yeah, yeah, exactly.

00:24:29.340 --> 00:24:32.080
And, you know, it's a totally valid perspective.

00:24:32.080 --> 00:24:35.040
I find it's not the tradeoff I make, but it's fine.

00:24:35.460 --> 00:24:43.760
But I feel like this feature kind of said, like, look, you can have proper tooling all the time over SSH and other things.

00:24:43.760 --> 00:24:44.780
So maybe tell us a little bit.

00:24:44.780 --> 00:24:46.900
It's, like, really broken into three parts, right?

00:24:46.900 --> 00:24:53.860
You talked about WSL, Windows Subsystem for Linux, Docker and containers, and then remote SSH type of development.

00:24:53.860 --> 00:25:01.420
Let me just take a step back and talk about the concept because a lot of people we showed this to, it takes a little bit for it to click because it's a little bit of a different way of using VS Code.

00:25:01.420 --> 00:25:04.860
So the user interface of VS Code runs on your local machine.

00:25:04.860 --> 00:25:11.060
But then there's a remote server that actually hosts kind of like the back end of VS Code, right?

00:25:11.060 --> 00:25:14.000
Right, like a language server and all that kind of business?

00:25:14.000 --> 00:25:21.900
Not just the language server, but, you know, the Python extension, for example, runs on that remote environment, the C++ extension, like, you know, the file system, source control.

00:25:21.900 --> 00:25:26.440
VS Code was always a client server model between the UI and the back end.

00:25:26.440 --> 00:25:30.200
And so what we did, we just took that server and then moved it off the local machine to the remote environment.

00:25:30.200 --> 00:25:31.260
You made it farther away.

00:25:31.260 --> 00:25:32.220
Farther away, exactly.

00:25:32.220 --> 00:25:35.140
So you get an experience that's just like local development.

00:25:35.140 --> 00:25:37.860
You're typing in, the UI is nice and responsive.

00:25:38.340 --> 00:25:42.560
But as you're typing in, it's literally like editing directly the files in the remote system.

00:25:42.560 --> 00:25:44.360
So you can do debugging.

00:25:44.360 --> 00:25:48.060
You can get your IntelliSense and autocompletions, you know.

00:25:48.060 --> 00:25:49.720
Anything that you have.

00:25:49.720 --> 00:25:53.080
With the Python extension, we didn't even have to really make many changes.

00:25:53.080 --> 00:25:53.920
It just kind of worked.

00:25:53.920 --> 00:25:57.580
All the features that we had in there just lit up in this remote environment.

00:25:57.580 --> 00:26:01.520
That's cool because where it's running is actually where it's interacting, right?

00:26:01.520 --> 00:26:03.700
Like it's on your remote SSH machine.

00:26:03.700 --> 00:26:06.520
And so you didn't have to teach it how to find that thing.

00:26:06.520 --> 00:26:07.700
It's already there, right?

00:26:07.720 --> 00:26:11.580
You just open it and we automatically copy over like the server and start it.

00:26:11.580 --> 00:26:14.920
And then you actually don't need any files locally to use it, right?

00:26:14.920 --> 00:26:16.800
It just sort of, it's like the VI experience.

00:26:16.800 --> 00:26:19.180
But, you know, you get all of the rich.

00:26:19.180 --> 00:26:21.860
With debugging and code navigation and all that.

00:26:21.860 --> 00:26:22.100
Yeah.

00:26:22.100 --> 00:26:24.580
And people ask like, okay, how do I set up remote debugging?

00:26:24.580 --> 00:26:26.460
And we say, well, it's not really remote debugging.

00:26:26.460 --> 00:26:30.900
You know, you're remote editing, but it's local debugging kind of, you know.

00:26:30.900 --> 00:26:34.680
So it takes a little bit for it to click, but it's really powerful and it's really, really cool.

00:26:34.680 --> 00:26:34.960
Yeah.

00:26:34.960 --> 00:26:36.560
I'm definitely looking forward to checking it out.

00:26:37.100 --> 00:26:40.880
Certainly the SSH side of the things is where it's interesting for me.

00:26:40.880 --> 00:26:47.760
You know, the Windows subsystem for Linux, you know, I carry around my fruity laptop, so it doesn't matter that much to me, right?

00:26:47.760 --> 00:26:49.680
But if I worked on Windows, that would be cool.

00:26:49.680 --> 00:26:51.020
Containers.

00:26:51.020 --> 00:26:53.220
I think containers are pretty interesting as well.

00:26:53.380 --> 00:26:59.760
So the thing I'd like to say about containers is that if you think about your developer onboarding guide at your company, right?

00:26:59.760 --> 00:27:01.920
And it's got like this wiki with all these steps.

00:27:01.920 --> 00:27:07.900
And then usually the new developer's first job is to go through the onboarding guide and find all the broken stuff and fix it, right?

00:27:07.900 --> 00:27:08.140
Right.

00:27:08.140 --> 00:27:09.280
Install this database server.

00:27:09.280 --> 00:27:11.240
Oh, you got to set this setting so it works.

00:27:11.320 --> 00:27:17.140
Yeah, install Python in your path, but if you had one, remove that or like, you know, this version of Node or that version of Node.

00:27:17.300 --> 00:27:28.560
And the cool part is that with the container development environment, you can just kind of clone the repo, open it with VS Code, and it's sort of all your developer dependencies are just defined there for you.

00:27:28.560 --> 00:27:37.300
And it just starts them up and you can have that environment that you can just start working with and everyone gets sort of the same, whether they're on Windows or Mac or Linux.

00:27:37.300 --> 00:27:38.020
Yeah, that's pretty cool.

00:27:38.020 --> 00:27:43.240
You definitely get the closer to what you're actually running debugging and development experience.

00:27:43.240 --> 00:27:48.100
Well, there's the closer to production, but also just reproducible so that everyone's got the same thing, right?

00:27:48.100 --> 00:27:53.440
Yeah, it's on big teams, it's always a pain to like figure out why, you know, I did some checking.

00:27:53.440 --> 00:27:55.740
It doesn't work for that person, but it does for this other person.

00:27:55.740 --> 00:27:57.620
And yeah, that's no fun.

00:27:57.620 --> 00:27:58.560
Cool.

00:27:58.560 --> 00:28:01.140
So this is in the insider build, right?

00:28:01.140 --> 00:28:05.320
Like I have VS Code and I heard that announcement and I checked for updates and I didn't get any updates.

00:28:05.320 --> 00:28:06.380
I'm like, oh, oh, well.

00:28:06.980 --> 00:28:09.160
What's the story with the insider build and like, how do I get it?

00:28:09.160 --> 00:28:12.260
When will a normal installs just start to see it?

00:28:12.260 --> 00:28:15.500
VS Code Insiders is our daily developer build of VS Code.

00:28:15.500 --> 00:28:16.280
It updates every day.

00:28:16.280 --> 00:28:21.020
And then once a month, the insider's build gets promoted to the thing that gets released, right?

00:28:21.020 --> 00:28:24.020
The VS Code team uses it themselves for building VS Code.

00:28:24.020 --> 00:28:25.260
So it is relatively stable.

00:28:25.260 --> 00:28:25.820
You know what I mean?

00:28:25.820 --> 00:28:30.380
If it breaks, they fix it quite quickly, sometimes overnight because we have a team in Zurich working on it.

00:28:30.380 --> 00:28:32.720
So yeah, it's a side-by-side install.

00:28:32.720 --> 00:28:36.540
You can go to the code.visualstudio.com slash insiders to get the insider's build.

00:28:36.660 --> 00:28:40.920
So it'll be available in the stable within, you know, the next couple weeks.

00:28:40.920 --> 00:28:43.900
Yeah, and it'll probably come out about the time we actually release this episode.

00:28:43.900 --> 00:28:44.340
Yeah.

00:28:44.340 --> 00:28:45.620
So the magic of time shifting.

00:28:45.620 --> 00:28:47.460
Yeah, so the remote extensions are in the marketplace.

00:28:47.460 --> 00:28:48.980
Today they only install on insiders.

00:28:48.980 --> 00:28:53.620
But very soon you can just go to your extensions tab and install the remote development extensions.

00:28:53.620 --> 00:28:55.540
And you'll get all the features that we're talking about.

00:28:55.540 --> 00:28:55.740
Cool.

00:28:55.820 --> 00:28:58.200
So I want to have this ability on my server.

00:28:58.200 --> 00:29:00.260
It's Ubuntu running in the cloud.

00:29:00.260 --> 00:29:01.640
I SSH to it.

00:29:01.640 --> 00:29:02.880
Like, what do I do?

00:29:03.060 --> 00:29:10.000
If you already have a public-private key set up with that SSH server, VS Code just uses your SSH configuration on the machine.

00:29:10.000 --> 00:29:16.640
So you install the remote SSH extension, go to the SSH panel, and you'll see that server listed.

00:29:16.640 --> 00:29:18.920
And then you just click Open New Window in VS Code.

00:29:19.020 --> 00:29:23.440
And then it'll just start up a new version of VS Code running in that remote context.

00:29:23.440 --> 00:29:25.980
So it'll install some stuff, and then all of a sudden it'll just connect.

00:29:25.980 --> 00:29:29.520
And you can start using VS Code as if you're on that machine.

00:29:29.520 --> 00:29:30.220
Oh, that's pretty cool.

00:29:30.220 --> 00:29:34.460
So I don't need to at least manually go and change my server to make that happen.

00:29:34.460 --> 00:29:40.600
Like, the first run, it goes SSH is in there and goes, well, it looks like you're missing the server sites.

00:29:40.600 --> 00:29:42.040
We'll drop that in and then get it started.

00:29:42.040 --> 00:29:42.300
Yep.

00:29:42.300 --> 00:29:44.860
And then you can just start coding.

00:29:44.860 --> 00:29:48.960
You can open folders on that remote machine, create new files, and just start plugging away.

00:29:48.960 --> 00:29:55.660
And then you can install, usually the one-time step is you actually need to install the extensions you want to use on that remote server.

00:29:55.660 --> 00:29:59.220
So you'd go in and install the Python extension, for example, so that you get Python support.

00:29:59.220 --> 00:29:59.560
I see.

00:29:59.560 --> 00:29:59.920
Okay.

00:29:59.920 --> 00:30:01.120
That's pretty interesting.

00:30:01.120 --> 00:30:02.460
What's the security story?

00:30:02.460 --> 00:30:07.160
Like, SSH often means production or servers that are, like, sensitive.

00:30:07.160 --> 00:30:09.000
You don't want people just to do anything there.

00:30:09.000 --> 00:30:14.720
And I guess, you know, it's already protected with your certificates in SSH, but anything to be aware of?

00:30:14.720 --> 00:30:14.940
Yeah.

00:30:15.080 --> 00:30:22.640
So, I mean, the one thing that has come up is sometimes people have a 2FA prompt or challenge that they need to enter in order to really authenticate with that environment.

00:30:22.640 --> 00:30:29.860
So if you're in that situation, there's a setting you can turn on that will bring up the terminal so you can type in an additional password or key if you need to.

00:30:29.860 --> 00:30:32.260
Then how do I interact with files over there?

00:30:32.340 --> 00:30:36.780
Like, is there a way to, like, explore the file system and find the files I'm looking for?

00:30:36.780 --> 00:30:37.520
Do you have projects?

00:30:37.520 --> 00:30:38.160
Like, what is it?

00:30:38.160 --> 00:30:38.780
Yeah.

00:30:38.780 --> 00:30:45.120
So there's two, like, when you open VS Code, you kind of get the, like, open a new file sort of window, you know, the default experience.

00:30:45.120 --> 00:30:48.920
But then you can open the terminal, and the terminal will be running in there, and you can LS and CD around.

00:30:48.920 --> 00:30:53.280
But you can also open a folder, and then you'll actually get a little browse window to browse the file system over there.

00:30:53.540 --> 00:31:02.300
And then if you pick, like, you know, seed for home slash my project, you'll open that, you'll be able to see in the file explorer in the left-hand side.

00:31:02.300 --> 00:31:03.540
You just have, like, the directory trees.

00:31:03.540 --> 00:31:06.000
Yeah, you'll see the directory tree, all the files in there, and stuff like that.

00:31:06.000 --> 00:31:08.060
So that's kind of a couple ways to explore.

00:31:08.060 --> 00:31:08.840
Yeah, that's pretty cool.

00:31:08.840 --> 00:31:12.240
So you mentioned Windows subsystem for Linux, WSL.

00:31:12.240 --> 00:31:18.460
Maybe people don't know about that, but there's also was a pretty big announcement here, I think, around that as well, right?

00:31:18.460 --> 00:31:22.340
That that's, like, proper Linux, not some kind of emulator or something?

00:31:22.640 --> 00:31:34.680
Yeah, so the way WSL started, it was a Linux kernel or Ubuntu image that you could run, and it was, they sort of shimmed out all the syscall APIs to call into Windows kernel stuff, right?

00:31:34.680 --> 00:31:39.440
I mean, that was pretty neat, but, you know, the file system performance was a little bit poor with that.

00:31:39.440 --> 00:31:44.180
Just, you know, it wasn't, these two things weren't really meant to necessarily talk like that, right?

00:31:44.180 --> 00:31:57.300
So they had built, we've announced a new version of WSL that's more like a very lightweight VM, where it runs a full Linux kernel, and it's, they're saying it's, like, 20 times faster in a lot of cases.

00:31:57.300 --> 00:31:58.020
Oh, that's pretty cool.

00:31:58.020 --> 00:32:01.320
You don't have that, you know, interopting between the two operating systems.

00:32:01.320 --> 00:32:03.860
Yeah, what are some of the use cases people have for using that?

00:32:03.860 --> 00:32:04.880
Like, why would they use it?

00:32:04.980 --> 00:32:13.600
Interestingly, most Python developers, the majority, well, not the majority, roughly 50% of them are on Windows, but a lot of them also deploy to Linux environments, right?

00:32:13.600 --> 00:32:14.360
Right, right.

00:32:14.360 --> 00:32:16.520
Dev on Windows, push to Linux.

00:32:16.520 --> 00:32:17.920
Yeah, like Linux servers, right?

00:32:18.000 --> 00:32:20.200
So a lot of their tool chain is in Linux, right?

00:32:20.200 --> 00:32:24.220
And you want to, you know, LS and Grap and SED and OCK and all that stuff.

00:32:24.220 --> 00:32:25.780
You want to be able to just kind of use that, right?

00:32:25.780 --> 00:32:31.440
So it's really given me a good Bash shell experience where I can apt-get install all the things I need.

00:32:31.440 --> 00:32:37.340
I can, you know, install Python and all that stuff, but still be able to use the UI, the user interface of Windows.

00:32:37.340 --> 00:32:38.680
Okay, yeah, that's pretty cool.

00:32:39.100 --> 00:32:48.680
Steve Dower, one of your co-workers, gave a really cool presentation at PyCon that was entitled something like, Python on Windows is okay, actually.

00:32:48.680 --> 00:32:49.220
Yep.

00:32:49.220 --> 00:32:51.820
And it was a really interesting talk.

00:32:51.820 --> 00:32:53.400
People should definitely go check it out.

00:32:53.400 --> 00:33:02.260
But some of the cool things he talked about was, I guess, you know, 60-ish percent of Python developers are using Windows.

00:33:02.260 --> 00:33:05.520
Like, it's quite a high number of how many people are actually using Windows.

00:33:06.000 --> 00:33:14.500
But he made the point that if you look around the room, like, there's the conference reality and there's real reality of, like, sort of tooling and technology distribution.

00:33:14.500 --> 00:33:17.560
And conference reality says most people have Macs.

00:33:17.560 --> 00:33:18.620
A few of them have Linux.

00:33:18.620 --> 00:33:23.200
And there's a couple people with, like, a Surface or whatever running Windows.

00:33:23.200 --> 00:33:27.100
But generally, it's, you know, the POSIX side of the world.

00:33:27.100 --> 00:33:29.580
But if you actually look at the stats, it's not.

00:33:29.580 --> 00:33:32.280
And he talked about why is that, right?

00:33:32.360 --> 00:33:42.300
Why aren't more of the Windows developers at PyCon and feeling like they're part of the community, not just, you know, using the tooling, but actually, like, part of the Python community.

00:33:42.300 --> 00:33:43.320
And I don't know.

00:33:43.320 --> 00:33:46.460
He had some pretty interesting ideas and solutions he threw out there.

00:33:46.460 --> 00:33:47.540
But what do you think about that?

00:33:47.540 --> 00:33:50.020
I definitely agree with the stats.

00:33:50.020 --> 00:33:51.700
And I was at his talk as well.

00:33:52.000 --> 00:34:04.000
And, you know, there's a lot of maybe hidden people out there who are just, you know, trying to learn Python or trying to get their job done or, you know, and they're all just, you know, struggling to use the tools.

00:34:04.000 --> 00:34:08.300
And, you know, we're doing as much as we can from Microsoft to make Python easy to use on Windows.

00:34:08.300 --> 00:34:16.080
But then, you know, it's up to kind of the package authors to think, hey, it's not just, you know, here's my Mac Linux instructions.

00:34:16.080 --> 00:34:19.340
I need to actually test this on Windows and make sure it works on Windows.

00:34:19.340 --> 00:34:30.340
Because there's a lot of people who maybe can't afford to fly to conferences or who aren't, you know, kind of up in all the high tech kind of stuff that we all live and breathe in every day.

00:34:30.540 --> 00:34:32.280
Right. Well, maybe they didn't choose Python.

00:34:32.280 --> 00:34:34.720
Maybe their job chose Python for them.

00:34:34.720 --> 00:34:35.220
Yeah.

00:34:35.220 --> 00:34:38.400
Right. Like they got a job to work as a Java developer.

00:34:38.400 --> 00:34:46.420
But then somebody said, well, we need you to maintain this Python project because, you know, Sarah, who was working on it, has moved on.

00:34:46.420 --> 00:34:47.600
And now someone's got to take it over.

00:34:47.600 --> 00:34:48.280
So you took it over.

00:34:48.280 --> 00:34:51.020
And they're now in, you know, working with these packages.

00:34:51.020 --> 00:34:54.900
And they didn't necessarily decide, you know, to like start in that place.

00:34:54.900 --> 00:34:56.420
Right. That's a different perspective, I think.

00:34:56.420 --> 00:34:57.180
That's possible.

00:34:57.180 --> 00:35:00.440
And there's also a lot of just think about a lot of people use Python.

00:35:00.440 --> 00:35:01.720
Python for information work.

00:35:01.720 --> 00:35:02.120
Right.

00:35:02.120 --> 00:35:06.360
Like it's sort of, you know, I'm trying to crunch some numbers at my insurance company.

00:35:06.360 --> 00:35:06.700
Right.

00:35:06.700 --> 00:35:10.380
Like, you know, and I'm using Windows desktop to do a lot of that stuff.

00:35:10.380 --> 00:35:17.680
Python might be something that I'm, especially these days, a lot of people are using Python just to get their jobs done.

00:35:17.680 --> 00:35:19.400
Maybe they're not primarily programmers even.

00:35:19.400 --> 00:35:19.620
Right.

00:35:19.620 --> 00:35:22.420
I think that's a really big source of the growth of Python.

00:35:22.420 --> 00:35:26.200
It's not like more websites are being built in Python necessarily.

00:35:26.540 --> 00:35:33.020
It's that Python is becoming the tool that people who are not developers are using.

00:35:33.020 --> 00:35:34.960
I think it's growing in both, right?

00:35:34.960 --> 00:35:35.540
Yeah, yeah.

00:35:35.540 --> 00:35:35.960
I agree.

00:35:35.960 --> 00:35:52.600
It's both becoming a, like, really advanced, capable language for, you know, things like data science and machine learning, as well as still easy to approach for that person who's just trying to get their job done and trying to compute some numbers and, you know, maybe script a few things to make their lives easier.

00:35:52.740 --> 00:35:52.940
Right.

00:35:52.940 --> 00:35:53.360
Absolutely.

00:35:53.360 --> 00:35:57.560
I was talking at a dinner last night with some folks who were not super familiar with Python.

00:35:57.560 --> 00:35:58.860
They've been doing more JavaScript.

00:35:58.860 --> 00:36:01.800
I mean, they knew of Python, but not deeply, right?

00:36:01.800 --> 00:36:07.020
They were asking me, you know, why do you think Python has become the de facto language for data science?

00:36:07.020 --> 00:36:09.480
And maybe I'll throw that question out to you.

00:36:09.480 --> 00:36:10.900
Like, what do you think?

00:36:10.900 --> 00:36:20.220
My simple reaction when I heard it was a popular language for data science was like, well, of course, I mean, you got, like, the maps and the array splices and, like, all that stuff.

00:36:20.220 --> 00:36:26.740
And I just remember with Python, you can, I could always do something with just a few lines of code, maybe, like, 80 lines of code.

00:36:26.740 --> 00:36:28.840
That would take me a thousand lines of code in another language.

00:36:28.840 --> 00:36:30.940
And I'm just like, wow, I can't believe I did all that.

00:36:30.940 --> 00:36:31.440
You know what I mean?

00:36:31.540 --> 00:36:38.760
And when you put that together with something like data science plus the really good notation for manipulating arrays and stuff like that, I think it just makes sense.

00:36:38.760 --> 00:36:50.620
And then you have libraries like Pandas and NumPy that came along and actually made it so you could work with larger data sets relatively efficiently and express a lot of stuff that other languages don't really have.

00:36:50.620 --> 00:36:51.720
And TensorFlow and what?

00:36:51.720 --> 00:36:56.400
And, well, NumPy even that, you know, has the performance of C, basically, right?

00:36:56.400 --> 00:36:57.340
Or GPUs.

00:36:57.340 --> 00:36:59.380
But you don't have to write C directly programming?

00:36:59.440 --> 00:37:04.300
Data scientists aren't necessarily, like, super top programmers either.

00:37:04.300 --> 00:37:07.140
They don't know necessarily all the engineering best practices.

00:37:07.140 --> 00:37:11.060
So having a language that's kind of really approachable, you know, for them, I think, really helps.

00:37:11.060 --> 00:37:13.880
I was thinking, look, it's a language that's simple to get started.

00:37:13.880 --> 00:37:16.920
You can kind of get your stuff going, but you don't run out of speed.

00:37:16.920 --> 00:37:17.860
You've got all these libraries.

00:37:17.860 --> 00:37:21.760
I think it's pretty interesting that it's kind of taken over that space.

00:37:21.760 --> 00:37:28.540
But to think about why that is, I think there's a few things that happen, like the creation of Python notebooks, for example,

00:37:28.820 --> 00:37:30.940
and some of the tooling, but also just the language.

00:37:30.940 --> 00:37:35.040
Before I joined the Python team at Microsoft, there's an instance where we're trying to crunch some data.

00:37:35.040 --> 00:37:39.880
And this guy who just came out of school, like, brought in Jupyter notebooks and pandas and all this stuff.

00:37:39.880 --> 00:37:42.820
And I was like, whoa, Python's changed a lot since I last used it, right?

00:37:42.820 --> 00:37:43.240
Exactly.

00:37:43.240 --> 00:37:44.700
And so that got me really excited about the language again.

00:37:44.700 --> 00:37:45.060
Yeah.

00:37:45.060 --> 00:37:45.820
That's super cool.

00:37:45.880 --> 00:37:46.000
Yeah.

00:37:46.000 --> 00:37:48.500
It's got so many interesting use cases.

00:37:48.500 --> 00:37:51.560
And different people use it so differently, right?

00:37:51.560 --> 00:37:55.880
Like, my first reaction to I need to write some code is not fire up Jupyter and create a notebook.

00:37:55.880 --> 00:38:03.120
And poke around is like, I'm going to create a project with tests and coverage and these files and architecture and layers.

00:38:03.120 --> 00:38:04.700
And it's totally valid.

00:38:04.700 --> 00:38:05.980
It's just different use cases.

00:38:06.140 --> 00:38:10.140
Yeah, I like that acceptance of kind of even if you're not doing Python correctly, it's still fine.

00:38:10.140 --> 00:38:10.360
Yeah.

00:38:10.360 --> 00:38:10.640
Right?

00:38:10.640 --> 00:38:13.400
Like, there's really, to me, there's no correct way of using Python.

00:38:13.400 --> 00:38:16.500
The way to use it is the one that gets your job done as quickly as possible.

00:38:16.500 --> 00:38:17.420
Yeah, yeah, for sure.

00:38:18.300 --> 00:38:23.420
So, there's a couple of other things I want to talk to you about VS Code while you hear that I think is pretty awesome.

00:38:23.420 --> 00:38:25.940
We talked about machine learning and AI.

00:38:25.940 --> 00:38:27.600
So, I guess I'll start with that one.

00:38:27.600 --> 00:38:29.200
So, let's talk about IntelliCode.

00:38:29.200 --> 00:38:33.120
So, we have autocomplete in general.

00:38:33.120 --> 00:38:34.760
We have IntelliSense.

00:38:34.760 --> 00:38:39.700
It's kind of like Microsoft's terminology for this autocomplete idea, right?

00:38:39.700 --> 00:38:40.020
Mm-hmm.

00:38:40.020 --> 00:38:43.320
And then IntelliCode is something different, right?

00:38:43.320 --> 00:38:50.760
Back at the EuroPython conference last year, we launched the IntelliCode extension in VS Code, and it only supported Python.

00:38:50.760 --> 00:38:56.560
So, what IntelliCode is machine learning AI-assisted autocompletions, right?

00:38:56.560 --> 00:38:58.840
So, we scour a bunch of open-source databases.

00:38:58.840 --> 00:39:03.340
We find what are the common code patterns, and then we build this model.

00:39:03.340 --> 00:39:05.820
And then if you install the IntelliCode extension, you get that model.

00:39:05.820 --> 00:39:11.620
And then as you're typing, it will predict based on your current code's context what the most likely autocompletion is.

00:39:11.620 --> 00:39:12.280
That's super cool.

00:39:12.280 --> 00:39:16.960
Like, traditional autocomplete is alphabetical, probably, right?

00:39:16.960 --> 00:39:17.440
Or top five.

00:39:17.440 --> 00:39:18.460
Yeah, yeah.

00:39:18.460 --> 00:39:20.880
I mean, but it doesn't really know, right?

00:39:20.880 --> 00:39:26.260
It just says, well, these are the attributes of this object or this module or whatever.

00:39:26.260 --> 00:39:27.540
Here they are.

00:39:27.540 --> 00:39:29.000
Go, we're going to try to help you, right?

00:39:29.000 --> 00:39:30.440
And maybe substring search, right?

00:39:30.440 --> 00:39:36.360
Like, if you type AE, it'll have, like, argument exception will show up because it puts those together or something.

00:39:36.360 --> 00:39:40.560
But it doesn't say, well, it looks like you're in the context of a with statement.

00:39:40.560 --> 00:39:44.020
And you've opened a file, and this is the file pointer thing.

00:39:44.240 --> 00:39:49.580
So if I say dot now, you probably want to read from it or write from it versus, you know, I don't know, whatever else, right?

00:39:49.580 --> 00:39:50.460
Yeah, exactly.

00:39:50.460 --> 00:39:51.040
That's pretty awesome.

00:39:51.220 --> 00:39:57.540
If you actually look at the IntelliCode extension page, there's an animated GIF, one of the TensorFlow 1.0 getting started examples.

00:39:57.540 --> 00:40:02.480
And then it just predicts every single dot, the right thing to press, and you press enter, and it just works.

00:40:02.480 --> 00:40:03.220
It's kind of magical.

00:40:03.220 --> 00:40:03.780
It's pretty insane.

00:40:03.780 --> 00:40:06.060
So it's kind of like that game you can play.

00:40:06.060 --> 00:40:11.740
Like, if you start to text something on, like, an iPhone or whatever, where they suggest a few words, and if you just keep hitting…

00:40:11.740 --> 00:40:13.500
You just keep pressing it and it writes a sentence out for you.

00:40:13.500 --> 00:40:14.440
Yeah, it's like that.

00:40:14.440 --> 00:40:15.180
Right.

00:40:15.580 --> 00:40:18.540
Honey, I'm going to be late from work, but I'm stopping by the store to get milk.

00:40:18.540 --> 00:40:19.760
It's like, how did that happen, right?

00:40:19.760 --> 00:40:23.420
But whoops, I wrote a TensorFlow program instead.

00:40:23.420 --> 00:40:23.940
Yeah, exactly.

00:40:23.940 --> 00:40:25.280
Okay, so I can just go get that now.

00:40:25.280 --> 00:40:26.020
That's been out for a while?

00:40:26.020 --> 00:40:26.760
Yeah, it's been out.

00:40:26.760 --> 00:40:27.540
And it just…

00:40:27.540 --> 00:40:32.200
So we first launched that preview of that at Europython, and we just GA'd IntelliCode today.

00:40:32.200 --> 00:40:34.700
And initially for VS Code, it was just Python.

00:40:34.700 --> 00:40:39.280
And now we've added, like, TypeScript, JavaScript, and a few other languages there.

00:40:39.380 --> 00:40:40.780
Yeah, so how does it know?

00:40:40.780 --> 00:40:43.540
You said you went through GitHub and stuff.

00:40:43.540 --> 00:40:44.380
Like, what's the story?

00:40:44.380 --> 00:40:47.300
It analyzes, like, the usage of packages, or what's it do?

00:40:47.300 --> 00:40:49.560
I don't know the specifics of the model.

00:40:49.560 --> 00:40:51.540
That's kind of our data science team figured it out.

00:40:51.540 --> 00:40:55.560
But it looks at the usages around where your current code is.

00:40:55.560 --> 00:40:59.360
So it looks around the surrounding area to see what code is being used around that.

00:40:59.360 --> 00:41:06.380
And then based on patterns it's seen on GitHub, the model's able to infer what comes next.

00:41:06.380 --> 00:41:09.360
It's one of those things where it's just sort of like all these layers and things like that.

00:41:09.360 --> 00:41:10.680
You don't know exactly how it works, right?

00:41:10.680 --> 00:41:11.360
It's AI, right?

00:41:11.360 --> 00:41:11.620
Yeah.

00:41:11.620 --> 00:41:13.440
Tell me what you want, not what you want me to do.

00:41:13.440 --> 00:41:13.940
Exactly.

00:41:13.940 --> 00:41:15.000
Don't ask how I did it.

00:41:15.000 --> 00:41:16.200
I'll just tell you what you need.

00:41:16.200 --> 00:41:20.540
So I think it's interesting, you know, like, even 20 years ago, people were saying,

00:41:20.540 --> 00:41:22.600
oh, no, there's not going to be programmers anymore.

00:41:22.600 --> 00:41:26.500
It's just going to be, like, sort of business people dragging, like, boxes around.

00:41:26.500 --> 00:41:28.860
And maybe the AI stuff is going to come along.

00:41:28.860 --> 00:41:32.780
And I feel like that's absolutely not the case these days, right?

00:41:32.780 --> 00:41:34.460
Like, there's plenty more code to be written.

00:41:34.460 --> 00:41:39.040
But stories like this, or tools like this, where it's, like, assisting.

00:41:39.260 --> 00:41:40.180
It's an accelerator, right?

00:41:40.180 --> 00:41:41.100
It's an accelerator, right?

00:41:41.100 --> 00:41:46.540
I feel like software development has both gotten easier and harder, you know, over the last

00:41:46.540 --> 00:41:47.260
10 or 20 years.

00:41:47.260 --> 00:41:50.820
Like, 20 years ago, the tools were way less good.

00:41:50.820 --> 00:41:52.280
There was no stack overflow.

00:41:52.280 --> 00:41:54.780
The internet was not much help.

00:41:54.780 --> 00:41:57.220
Or, you know, even at some point, it didn't exist, right?

00:41:57.220 --> 00:41:59.020
You had to go for a round or whatever.

00:41:59.440 --> 00:42:02.680
So the types of things we tried to solve with software, right?

00:42:02.680 --> 00:42:04.080
We didn't have the cloud, for example.

00:42:04.080 --> 00:42:06.360
They were smaller.

00:42:06.360 --> 00:42:07.660
It was harder to solve them.

00:42:07.660 --> 00:42:09.260
But we, like, knew they were hard.

00:42:09.260 --> 00:42:10.980
So we attempted smaller problems.

00:42:10.980 --> 00:42:13.000
Now we attempt to solve bigger problems.

00:42:13.000 --> 00:42:14.040
But we have better tools.

00:42:14.040 --> 00:42:16.420
I feel like there's this kind of, like, tension.

00:42:16.420 --> 00:42:18.480
Like, it's sort of about as hard as it used to be.

00:42:18.480 --> 00:42:19.800
But we can do way more.

00:42:19.800 --> 00:42:20.500
What do you think?

00:42:20.600 --> 00:42:24.520
Yeah, I mean, certainly, I think you used to be able to print out a book on programming

00:42:24.520 --> 00:42:25.360
or whatever.

00:42:25.360 --> 00:42:27.520
Like, you know, have that reference guide beside your desk.

00:42:27.520 --> 00:42:29.160
And that's just not possible today, right?

00:42:29.160 --> 00:42:29.600
Right.

00:42:29.600 --> 00:42:33.200
And I actually think about, when I think about the, like, technology becoming harder, I think

00:42:33.200 --> 00:42:35.320
about things like containers, right?

00:42:35.320 --> 00:42:37.360
Like, hey, it allows me to get all these benefits.

00:42:37.360 --> 00:42:40.660
But then, oh my gosh, it's so much harder to work with, right?

00:42:40.660 --> 00:42:42.140
Now I got to know about Docker files.

00:42:42.140 --> 00:42:45.600
And I also got to know about Linux and Windows or Linux and Mac, maybe.

00:42:45.600 --> 00:42:49.320
And things like React, for example, where it's like, wow, it's a super great programming

00:42:49.320 --> 00:42:53.520
model, but like, you got an npm and Babel and TransPile and JSX.

00:42:53.520 --> 00:42:54.480
And like, what is happening?

00:42:54.480 --> 00:42:57.880
Where's my just, you know, JavaScript source equals or whatever?

00:42:57.880 --> 00:42:58.320
Yeah.

00:42:58.320 --> 00:43:02.620
So, I mean, I think the key is if you can sort of get past the tooling complexity and get

00:43:02.620 --> 00:43:06.500
to that, once you sort of get in that flow of, okay, I've got everything set up and it's

00:43:06.500 --> 00:43:09.220
working, like, we can really do some awesome stuff.

00:43:09.220 --> 00:43:13.020
But then I think it's really hard for beginners to get into that because there's like this learning

00:43:13.020 --> 00:43:13.320
curve.

00:43:13.320 --> 00:43:16.000
I've got to learn the last 20 years of advancement in technology.

00:43:18.040 --> 00:43:21.680
This portion of Talk Python To Me is sponsored by Backlog from NewLab.

00:43:21.680 --> 00:43:26.280
Developers know the importance of organization and efficiency when it comes to collaborating

00:43:26.280 --> 00:43:26.820
on a team.

00:43:26.820 --> 00:43:31.220
And Backlog is the perfect collaborative task management software for your team.

00:43:31.220 --> 00:43:36.000
With Backlog, you can create tasks, track bugs, make changes, give feedback, and have team

00:43:36.000 --> 00:43:37.760
conversations right next to your code.

00:43:37.760 --> 00:43:41.000
You track progress with features like Gantt and burndown charts.

00:43:41.000 --> 00:43:44.380
You document your processes right alongside your wikis.

00:43:44.500 --> 00:43:48.120
You can integrate with the tools used every day like Slack, JIRA, and Google Sheets.

00:43:48.120 --> 00:43:51.880
You can automatically register issues from email or web form submissions.

00:43:51.880 --> 00:43:56.000
Take your work on the go using their top rated mobile apps available on Android and iOS.

00:43:56.000 --> 00:44:02.700
Try Backlog for your team for free for 30 days using our special URL at talkpython.fm slash

00:44:02.700 --> 00:44:03.100
backlog.

00:44:03.420 --> 00:44:05.760
That's talkpython.fm/backlog.

00:44:07.380 --> 00:44:10.300
The last other one that I said I was going to ask you about too, the other one that I

00:44:10.300 --> 00:44:15.180
thought is pretty cool that I've wanted for a long time in editing is something called

00:44:15.180 --> 00:44:16.380
LiveShare, I think.

00:44:16.380 --> 00:44:19.000
I've done a lot of like, hey, let's work on this together.

00:44:19.000 --> 00:44:23.400
So I'm going to set up a Zoom meeting and I'll share my screen or Skype and we'll share

00:44:23.400 --> 00:44:25.180
the screen or who knows how this is going to happen.

00:44:25.180 --> 00:44:28.920
But it probably involves sharing a screen and who's typing right now.

00:44:28.920 --> 00:44:29.900
Oh, I need to type that.

00:44:29.900 --> 00:44:32.260
Let me switch back to your computer and you'd share your screen.

00:44:32.560 --> 00:44:34.020
Or go up two lines there.

00:44:34.020 --> 00:44:35.040
No, one character over.

00:44:35.040 --> 00:44:35.900
One character over.

00:44:35.900 --> 00:44:37.200
No, that one, this one.

00:44:37.200 --> 00:44:40.680
And that's the point where you're like, why are they not showing line numbers in their

00:44:40.680 --> 00:44:40.960
editor?

00:44:40.960 --> 00:44:41.420
Come on.

00:44:41.420 --> 00:44:41.940
Yeah, yeah.

00:44:41.940 --> 00:44:43.940
I could just say line 132 and we'd be done.

00:44:43.940 --> 00:44:45.160
But no, up, up, up.

00:44:45.160 --> 00:44:45.740
Yeah, exactly.

00:44:45.740 --> 00:44:49.400
So this LiveShare stuff is pretty cool and it's kind of like that, right?

00:44:49.400 --> 00:44:49.720
Yes.

00:44:49.720 --> 00:44:52.380
The way it works is somebody can start a LiveShare session.

00:44:52.380 --> 00:44:55.440
So first of all, you install the VS LiveShare extension.

00:44:55.440 --> 00:44:57.440
It works on both Visual Studio and Visual Studio Code.

00:44:57.440 --> 00:44:59.120
You start a collaboration session.

00:44:59.120 --> 00:45:00.100
You invite someone to join.

00:45:00.280 --> 00:45:05.780
And then when they join, they're sort of connected into your development environment.

00:45:05.780 --> 00:45:07.600
They can see all the files you have open.

00:45:07.600 --> 00:45:10.560
They can, you know, if they start typing, they'll get IntelliSense.

00:45:10.560 --> 00:45:13.080
They can collaboratively debug with you.

00:45:13.080 --> 00:45:17.120
You can choose to follow each other or go explore the code base kind of on your own and come back.

00:45:17.120 --> 00:45:19.680
You can sort of like click a follow button and things like that.

00:45:19.680 --> 00:45:22.680
Is that a VS Code only thing or does it work with other stuff?

00:45:22.680 --> 00:45:24.060
It works with Visual Studio as well.

00:45:24.060 --> 00:45:25.120
The full Visual Studio.

00:45:25.120 --> 00:45:26.520
So I get this question all the time.

00:45:26.520 --> 00:45:27.460
You know, can I collaborate?

00:45:27.460 --> 00:45:29.720
Can I have a Windows machine and have a Mac join that?

00:45:29.800 --> 00:45:33.220
Yes, you can collaborate across platforms and machines and stuff like that.

00:45:33.220 --> 00:45:40.060
So, I mean, the cool thing, it really helps you if you can have someone come in and look at the code and then they can just type in the code that they want to write.

00:45:40.060 --> 00:45:40.760
You know what I mean?

00:45:40.760 --> 00:45:43.740
And you can have multiple people joining in on that.

00:45:43.740 --> 00:45:44.620
So it's really cool.

00:45:44.620 --> 00:45:48.400
I just used it the other day with a coworker when we're building our demos for PyCon and Build.

00:45:48.400 --> 00:45:49.960
And I was just like, wow, this.

00:45:50.240 --> 00:45:51.260
Yeah, that sounds pretty cool.

00:45:51.260 --> 00:45:52.060
Can you do it?

00:45:52.060 --> 00:45:54.000
Is it like pretty useful for a code review?

00:45:54.000 --> 00:45:54.740
Something like that?

00:45:54.740 --> 00:45:55.680
Yeah.

00:45:55.680 --> 00:45:56.220
Yeah.

00:45:56.220 --> 00:45:57.360
Do you want to kind of explore around?

00:45:57.360 --> 00:45:57.620
Okay.

00:45:57.620 --> 00:45:58.920
Yeah.

00:45:58.920 --> 00:46:00.300
That sounds like a pretty cool feature.

00:46:00.300 --> 00:46:00.900
Definitely.

00:46:01.280 --> 00:46:03.660
So we're getting pretty short on time.

00:46:03.660 --> 00:46:06.900
So I guess let me just ask you a few sort of closing out questions.

00:46:06.900 --> 00:46:16.340
One of the things that was cool at PyCon, and I think would be cool to see if it's showing up over here at this conference, is the sprints.

00:46:16.580 --> 00:46:16.940
Right?

00:46:16.940 --> 00:46:26.640
At the end of the last couple days of PyCon, there's a few other days where folks who are maybe working on Flask or SQLAlchemy, they stick around and collaboratively.

00:46:26.640 --> 00:46:27.300
Jam on it.

00:46:27.300 --> 00:46:28.220
Jam on it, right?

00:46:28.220 --> 00:46:28.860
Jam on it.

00:46:28.860 --> 00:46:32.160
Maybe learn even how to become a contributor to that project or whatever.

00:46:32.160 --> 00:46:34.100
It'd be cool if you guys did something like that here.

00:46:34.100 --> 00:46:35.620
That's the first time someone's brought it up.

00:46:35.620 --> 00:46:36.580
I actually think you're right.

00:46:36.580 --> 00:46:37.280
It's a cool idea.

00:46:37.280 --> 00:46:38.860
I'll recommend it.

00:46:38.860 --> 00:46:39.120
Yeah.

00:46:39.120 --> 00:46:46.560
But one thing, to give you guys props, one thing that was really cool here is out on the expo floor, there's like maybe, I don't know, 20, 30, 40.

00:46:46.560 --> 00:46:47.080
It's like maybe computers.

00:46:47.080 --> 00:46:49.800
And it said, this section is reserved for students.

00:46:49.800 --> 00:46:58.740
And any student that walked by could sit down and start working on some projects using the computers there for, I think there was some IoT or robotic stuff going on.

00:46:58.740 --> 00:47:01.760
But I feel like that's super cool and other conferences should adopt that.

00:47:01.760 --> 00:47:03.760
Like at PyCon, there's some stuff like that.

00:47:03.760 --> 00:47:08.600
But it's usually in a back room, closed off, and you had to know about it in advance and sign up for it.

00:47:08.600 --> 00:47:13.340
It's not like it was happening in public and all the other students would happen upon it, right?

00:47:13.340 --> 00:47:13.640
Yeah.

00:47:13.780 --> 00:47:17.600
I mean, they started doing the mentored sprints this year at PyCon to start bringing more people in.

00:47:17.600 --> 00:47:19.220
The students thing was new this year.

00:47:19.220 --> 00:47:20.100
And I just love it.

00:47:20.100 --> 00:47:20.960
I think it's a great idea.

00:47:20.960 --> 00:47:29.880
And anything we could do to get people learning programming at a younger age helps us all move forward quicker.

00:47:29.880 --> 00:47:32.160
But also, I think it does a lot to increase the diversity.

00:47:32.160 --> 00:47:32.660
Yeah.

00:47:32.660 --> 00:47:33.000
Yeah.

00:47:33.040 --> 00:47:35.600
People can kind of stumble upon it when they're young and go, oh, this is cool.

00:47:35.600 --> 00:47:36.180
I like this.

00:47:36.180 --> 00:47:36.480
You know?

00:47:36.480 --> 00:47:36.700
Yeah.

00:47:36.700 --> 00:47:37.620
It's super cool.

00:47:37.620 --> 00:47:42.060
And programming is usually pretty easy with like a few little sharp edges.

00:47:42.060 --> 00:47:43.720
And you're like, why does this not work?

00:47:43.720 --> 00:47:44.680
Why can't I get over this?

00:47:44.680 --> 00:47:46.660
And if someone's there, just go like the mentored sprints.

00:47:46.660 --> 00:47:47.600
Just click this button there.

00:47:47.600 --> 00:47:47.820
Yeah.

00:47:47.820 --> 00:47:49.580
Like, oh, you've got to run this command first.

00:47:49.580 --> 00:47:51.980
Oh, you didn't activate your virtual environment or whatever, right?

00:47:51.980 --> 00:47:53.200
Like then it'll be smooth, right?

00:47:53.200 --> 00:47:56.060
Just a little bit of initial help, I think, would be great.

00:47:56.060 --> 00:47:56.560
Yeah.

00:47:56.560 --> 00:47:56.620
Yeah.

00:47:56.620 --> 00:47:57.080
Pretty cool.

00:47:57.220 --> 00:47:59.900
So what's your favorite thing here, Bill?

00:47:59.900 --> 00:48:03.320
Your favorite announcement or thing that came out around the conference?

00:48:03.320 --> 00:48:05.860
I think the WSL 2 was definitely a highlight.

00:48:05.860 --> 00:48:07.920
Good file system performance, things like that.

00:48:07.920 --> 00:48:09.840
The new Windows terminal, right?

00:48:09.840 --> 00:48:10.120
Yeah.

00:48:10.120 --> 00:48:11.020
And we haven't talked about that.

00:48:11.020 --> 00:48:12.560
And I haven't had a chance to look at it.

00:48:12.560 --> 00:48:13.600
But tell us about it.

00:48:13.600 --> 00:48:15.080
It sounds like Command Prompt got better.

00:48:15.080 --> 00:48:17.120
And it's actually, they put the code up on GitHub.

00:48:17.120 --> 00:48:18.160
It's open source.

00:48:18.160 --> 00:48:19.720
But it's like tabbed.

00:48:19.720 --> 00:48:21.280
It looks a lot nicer.

00:48:21.280 --> 00:48:22.820
It's got full Unicode support.

00:48:23.120 --> 00:48:27.640
And you can kind of switch between a WSL or a Windows command prompt.

00:48:27.640 --> 00:48:28.020
Right.

00:48:28.020 --> 00:48:32.420
So this is not PowerShell, not a separate PowerShell, like blue window.

00:48:32.420 --> 00:48:35.340
But like the traditional CMD one is now better.

00:48:35.340 --> 00:48:36.120
Is that what it is?

00:48:36.120 --> 00:48:36.660
Yes.

00:48:36.660 --> 00:48:38.100
It might support PowerShell too.

00:48:38.100 --> 00:48:40.040
I haven't caught up on all I built just yet to be honest.

00:48:40.040 --> 00:48:44.980
But the one thing, we also announced a cloud hosted developer environments where it's a

00:48:44.980 --> 00:48:45.520
preview right now.

00:48:45.520 --> 00:48:46.420
You have to sign up for it.

00:48:46.420 --> 00:48:48.500
But I'm really excited to see where that goes.

00:48:48.500 --> 00:48:48.960
What does that mean?

00:48:48.960 --> 00:48:52.980
You get like a remote terminal or is it this VS Code?

00:48:53.020 --> 00:48:54.660
Well, think about it, the VS Code remote.

00:48:54.660 --> 00:48:59.260
But then somebody also spins up a server for you as well that you can just click a button

00:48:59.260 --> 00:49:03.180
and get your environment pre-created, pre-provisioned for you in the cloud and just start working

00:49:03.180 --> 00:49:03.620
away on it.

00:49:03.620 --> 00:49:04.960
So I'm really excited to see where that goes.

00:49:04.960 --> 00:49:08.820
So if that sounds interesting to anyone, definitely sign up for the preview and check it out.

00:49:08.820 --> 00:49:09.120
That's cool.

00:49:09.120 --> 00:49:11.800
Does it work in a web browser or does it require something like VS Code?

00:49:11.800 --> 00:49:12.140
Both.

00:49:12.140 --> 00:49:12.680
Yeah.

00:49:12.680 --> 00:49:13.120
Okay, cool.

00:49:13.120 --> 00:49:15.500
So VS Code, I mean, there's so many things that we've announced here.

00:49:15.500 --> 00:49:17.560
The browser-based offering as well.

00:49:17.560 --> 00:49:17.800
Okay.

00:49:17.800 --> 00:49:18.500
Yeah, that's pretty cool.

00:49:18.500 --> 00:49:23.580
So the reason I ask is a lot of times people are trying to teach classes or run stuff,

00:49:23.580 --> 00:49:26.160
especially around schools and students, and they just have a Chromebook.

00:49:26.160 --> 00:49:29.100
And it's like, can you do Python on a Chromebook?

00:49:29.100 --> 00:49:30.440
How do you do that, right?

00:49:30.440 --> 00:49:30.780
Yeah.

00:49:30.780 --> 00:49:35.200
These sorts of remote environments that work in the browser are really awesome because

00:49:35.200 --> 00:49:37.440
then it makes it possible for all these kids to do programming.

00:49:37.440 --> 00:49:37.740
Yeah.

00:49:37.740 --> 00:49:42.540
I love that from the getting started angle as well as, say, I've got a super big, powerful

00:49:42.540 --> 00:49:47.160
development environment and I've got to spin up a bunch of them all the time and I just

00:49:47.160 --> 00:49:49.760
want to move from this one to that one to this one to that one.

00:49:49.760 --> 00:49:53.240
So at a really large scale at some of the larger companies, that's another area where that's

00:49:53.240 --> 00:49:53.760
really interesting.

00:49:53.760 --> 00:49:54.080
Okay.

00:49:54.080 --> 00:49:54.400
Yeah.

00:49:54.400 --> 00:49:54.860
Super cool.

00:49:54.860 --> 00:49:55.420
Super cool.

00:49:55.420 --> 00:49:55.780
All right.

00:49:55.780 --> 00:49:59.580
Well, I think that might use it up all our time, but not all the questions I had for

00:49:59.580 --> 00:49:59.740
you.

00:49:59.740 --> 00:50:03.120
So I'll ask you the final two questions before we wrap it up.

00:50:03.120 --> 00:50:08.280
Kind of know the answer to the first one, I'm guessing, but I'll ask it just for, I think

00:50:08.280 --> 00:50:08.800
it's always true.

00:50:08.800 --> 00:50:11.240
If you're going to write some Python code, what editor do you use?

00:50:11.240 --> 00:50:12.500
Obviously Visual Studio Code.

00:50:12.500 --> 00:50:12.800
Yeah.

00:50:12.800 --> 00:50:13.400
Right on.

00:50:13.400 --> 00:50:13.700
Okay.

00:50:13.700 --> 00:50:16.820
And notable PyPI package.

00:50:16.820 --> 00:50:18.760
So I just started playing with this today.

00:50:18.760 --> 00:50:22.660
I have a build talk later today, but I just started using TextBlob for doing sentiment analysis.

00:50:22.660 --> 00:50:22.880
Oh yeah.

00:50:22.880 --> 00:50:23.740
TextBlob is cool.

00:50:23.740 --> 00:50:24.020
Yeah.

00:50:24.020 --> 00:50:25.080
I just came across it as well.

00:50:25.200 --> 00:50:25.360
Yeah.

00:50:25.360 --> 00:50:27.860
And cause I was like, how do, it's the easiest way to do sentiment analysis.

00:50:27.860 --> 00:50:31.340
And I came across TextBlob and I'm like, wow, this code fits in one tweet.

00:50:31.340 --> 00:50:36.760
I can build a Flask API that returns, you know, positive or negative within, you know, a few

00:50:36.760 --> 00:50:37.160
lines of code.

00:50:37.160 --> 00:50:37.860
This is pretty awesome.

00:50:37.860 --> 00:50:38.140
Yeah.

00:50:38.140 --> 00:50:38.520
That's cool.

00:50:38.520 --> 00:50:44.920
Like, so people who don't know, TextBlob is like a simplified layer on top of NLTK and

00:50:44.920 --> 00:50:46.140
you can do all sorts of cool stuff.

00:50:46.140 --> 00:50:51.880
Like here's document and ask it for the sentences, ask it for the nouns, ask it for the sentiment of

00:50:51.880 --> 00:50:55.180
phrases, the number, like the unique words, a lot of cool, like,

00:50:55.180 --> 00:50:56.340
things that are real simple though, right?

00:50:56.340 --> 00:50:57.480
Yeah, exactly.

00:50:57.480 --> 00:50:59.700
I just started playing with it and it's pretty fun.

00:50:59.700 --> 00:51:00.060
Right on.

00:51:00.060 --> 00:51:00.420
All right.

00:51:00.420 --> 00:51:02.280
Well, final call to action.

00:51:02.280 --> 00:51:06.440
People maybe want to check out some of the things you talked about, like the insider remote

00:51:06.440 --> 00:51:08.560
Visual Studio Code stuff, something like that.

00:51:08.560 --> 00:51:09.140
How do they get started?

00:51:09.300 --> 00:51:12.580
So check out our Python blog, aka.ms slash Python blog.

00:51:12.580 --> 00:51:17.860
So we post, you know, all of our updates there, our monthly releases about the VS Code remote

00:51:17.860 --> 00:51:18.280
stuff.

00:51:18.280 --> 00:51:20.820
So if you just want to keep up to date with what we're doing, check that out.

00:51:20.820 --> 00:51:21.120
All right.

00:51:21.120 --> 00:51:21.840
Right on.

00:51:21.840 --> 00:51:23.100
Well, Dan, thanks for being on the show.

00:51:23.100 --> 00:51:23.860
It's great to chat with you.

00:51:23.860 --> 00:51:23.980
My pleasure.

00:51:23.980 --> 00:51:24.640
Great chat.

00:51:24.640 --> 00:51:25.880
You've got in person even.

00:51:25.880 --> 00:51:26.180
Yeah.

00:51:26.180 --> 00:51:26.760
This is awesome.

00:51:26.760 --> 00:51:27.080
Thanks.

00:51:27.080 --> 00:51:27.240
Yep.

00:51:27.240 --> 00:51:27.580
See you.

00:51:28.580 --> 00:51:31.080
This has been another episode of Talk Python To Me.

00:51:31.080 --> 00:51:36.200
Our guest on this episode was Dan Taylor, and it's been brought to you by Linode and Backlog.

00:51:36.200 --> 00:51:40.560
Linode is your go-to hosting for whatever you're building with Python.

00:51:40.560 --> 00:51:44.100
Get four months free at talkpython.fm/Linode.

00:51:44.100 --> 00:51:46.000
That's L-I-N-O-D-E.

00:51:46.000 --> 00:51:52.620
With Backlog, you can create tasks, track bugs, make changes, give feedback, and have team conversations

00:51:52.620 --> 00:51:53.980
right next to your code.

00:51:54.460 --> 00:52:00.400
Try Backlog for your team for free for 30 days using the special URL talkpython.fm slash

00:52:00.400 --> 00:52:00.940
Backlog.

00:52:00.940 --> 00:52:03.380
Want to level up your Python?

00:52:03.380 --> 00:52:08.180
If you're just getting started, try my Python Jumpstart by Building 10 Apps course.

00:52:08.180 --> 00:52:13.280
Or if you're looking for something more advanced, check out our new async course that digs into

00:52:13.280 --> 00:52:16.340
all the different types of async programming you can do in Python.

00:52:16.340 --> 00:52:20.300
And of course, if you're interested in more than one of these, be sure to check out our

00:52:20.300 --> 00:52:21.000
Everything Bundle.

00:52:21.000 --> 00:52:22.900
It's like a subscription that never expires.

00:52:23.640 --> 00:52:25.180
Be sure to subscribe to the show.

00:52:25.180 --> 00:52:27.600
Open your favorite podcatcher and search for Python.

00:52:27.600 --> 00:52:28.820
We should be right at the top.

00:52:28.820 --> 00:52:33.640
You can also find the iTunes feed at /itunes, the Google Play feed at /play,

00:52:33.640 --> 00:52:37.820
and the direct RSS feed at /rss on talkpython.fm.

00:52:37.820 --> 00:52:39.900
This is your host, Michael Kennedy.

00:52:39.900 --> 00:52:41.400
Thanks so much for listening.

00:52:41.400 --> 00:52:42.460
I really appreciate it.

00:52:42.460 --> 00:52:44.220
Now get out there and write some Python code.

00:52:44.220 --> 00:53:04.820
I'll see you next time.