In this episode, we catch up with David Crook, a developer evangelist at Microsoft.
He is a co-organizer for the Fort Lauderdale Machine Learning User Group and is involved
in many more user groups and meetups. You'll hear about some really cool projects where
they're using Python and TensorFlow to work on simple things like
growing more food to help feed the world. This is Talk Python to Me,
episode 73, recorded August 25th, 2016.
Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries,
the ecosystem, and the personalities. This is your host, Michael Kennedy. Follow me on Twitter
where I'm @mkennedy. Keep up with the show and listen to past episodes at talkpython.fm
and follow the show on Twitter via at Talk Python. This episode is brought to you by Hired and now
Capital One. They both have great offers for Python developers, so please check out what
they're offering when you hear their spot. It helps support the show. David, welcome to the show.
Hi, Michael. It's good to be here. Yeah, it's great to have you here. I'm super excited to talk about
all the cool machine learning and Python stuff you guys have going on over there at Microsoft and in
your little area in particular. But before we get to all those stories, how did you get started in
programming Python? So Python in particular is an interesting one because I resisted it for a long
time. Let me step back a bit and just start. Where did I start with my parents were like, you're going to
go to college and you're going to be a programmer. And I was like, I want to be an archaeologist, not a
programmer. And then they kind of said, well, we're not going to pay for college if you don't
do programming. So I said, all right, I guess I'll do it. So it really got kicked off around college.
And I started a video game club. I did a lot of XNA programming.
That's cool. So XNA, just for people listening, XNA was like a high level game programming environment
that you could write games for both Windows and Xbox and C#, right? But it abstracted a lot
of the game engine stuff, right?
Oh, yeah. Yeah. And when you're just getting started into programming, like you don't want to have to sit
there and figure out how to do like different swaps with the GPU and all that kind of stuff. It was just
a really good way to get into programming, throw it on your Xbox and be able to have something that's
useful and like a lot your own. So, you know, like if you're doing a lot of game mods, you were kind of
stuck with whatever you had in that environment. XNA was just whatever you want to do and gave you just a,
you know, high level abstraction on it. So that was a really cool start.
Awesome. So you had a group in college doing that, huh?
Yeah. You know, I didn't really know how to code that much. So I discovered that if I surrounded
myself with a bunch of people who could, that I could hopefully learn from them. So I formed a
little group and basically recruited a bunch of people to teach me in the guise that I was teaching them.
How interesting. You know, I think that's really common and really effective. I 100% agree with you
that surrounding yourself with programmers is almost key to making you a programmer. You can do it just
on your own, but it's, it's really not the same experience. And I don't know very many other groups
that are like that. Like do lawyers say, Hey, let's all just get together after work and just talk about
law, like passionately, you know, maybe, maybe some, I mean, there's plumbers don't necessarily do that.
Right. I know plumbers have a real craft and expertise and they might have apprenticeships,
but this, like, we're so excited. We want to just get together and make everybody better. It seems
fairly unique to programming. And I think that's one of the reasons it's so awesome, right?
Yeah. You know, I think there's a couple of trades maybe where they do that kind of thing. Like,
my uncle is a, he's in construction and does industrial air conditioning. And I guess they
have like a builder's guild, but it's not nearly like what you see in the tech ecosystem where you
can just like hop online and be like, I want to go to some really obscure group in my area. And bam,
you found it. It's like, holy cow, that exists.
Yeah, absolutely. And you actually have a big hand in those existing in Florida, which we'll get to,
but I interrupted your story about, moving on towards Python, but your path there.
Yeah. Yeah. So I started, it was a lot of C# development and then, you know, schools like,
we're going to teach you this Java thing. I graduated, worked through Microsoft for a while,
and then, started discovering this machine learning. IOT space was a really neat place to get
into. And, I keep seeing this Python thing pop up over and over again. I was like,
Oh, it's another language. I already know like seven. I don't want to know another one. Let's
see how long I can put it off for. So I think I put learning Python off for about four years until
like recently I finally broke down and said, all right, that's the last library hits the, it's the
straw in the camel's back. I better just break down and learn this thing. And, so I started
picking it up about two or three months ago, just kind of slowly to just explore and see.
And, once I kind of got in, it was like, you know, a lot of this is really familiar.
It's not really that different from anything else. And tactically it's a little print, but you know,
a lot of the same kind of stuff, but I get all these other libraries and capabilities along with it.
So it's been a really nice, transition, and a lot less painful than I thought it would be.
Yeah. I think there's a lot of myths about Python that are out there. And once you get into it,
it's, it's a little different than maybe what the preconceived notions about it might be.
You know, I think some of the myths were like, you know, I was challenged with a couple of them.
One was like the performance thing, like, Oh, Python's not performant enough or whatever.
And I was like, I was like, well, at the end of the day, my performance is mostly, like in web,
like stateless servers, or it's going to be from GPU compute. Well, it has great GPU libraries.
And then, okay. I don't know if flask has the most performance, but it's a stateless web server.
So I can just always throw more servers at the problem. So I'd rather just have something that
does everything and reduce the number of skills I need and throw servers at it.
than, fight with trying to learn something else.
Yeah, that's a good point. I mean, the performance story around Python is not straightforward. I think
it's pretty good in a lot of areas. And there are certainly some areas where
other languages like you were coming from .NET, for example, where it is better over there. But,
you know, for example, I did a conference talk that was trying to compare working with a
NoSQL schema-less database and saying, should use a dynamic language or a statically typed language.
And I chose C# and Python as the two comparison languages. And the Python web app was actually
quicker end-to-end from the browser perspective than C#. So I think part of the story is
the C# code surely ran faster because it's JIT compiled, right, to machine instructions. But
the framework was doing less so that it actually was overall faster, which is
part of that interesting trade-off. Like, you wouldn't think that it would be, but there's
just so many factors that it's hard to say. So yeah, that's cool. I think most of the time it's
good, but you've got to just test it, right?
Yeah. And from what I've seen most of the time, it's just a shot in the dark. You know, you don't
really know what it's doing under the hood anyways. So it's like, you just cross your fingers and
hope. And, you know, even in the other worlds, I end up like, even in C#,
eventually you're like, okay, now you need a West Coast server and an East Coast server. Oh no,
we've got a bunch of people coming from Texas. Let's throw a central server in there. So you're
doing it anyways. You might as well just pick what is, gets the job done the most with the
least number of headaches. And then that'd be in Python because you get all the nice machine
learning tools and, and you get web servers and you get desktop and, the documentation
is just absolutely phenomenal. Yeah. It's, it's a fantastic ecosystem. So before we move on to some
sort of what you're up to nowadays, I did want to ask you, since you are sort of fresh to Python,
what was surprisingly easy or, or nice about the language and what gave you challenges? You said a
little bit, but like, give me the summary of your, your learning experience here while it's still fresh
to your mind. Yeah. So, I've got a customer project that I'm working on now. so this is
like the first real, like we're going to do something production level with it previously till about a
couple of weeks ago, it was all just dipping my toes in and now we're going full on production level.
Some of the easiest things was, Flask. Like I come from, ASP.NET MVC web API background and like Flask
is basically just like that with like a different syntax. And I was like, this is phenomenally easy. Like
the authentication and token stuff is all very similar. The way that you do the headers and decorators is all
very similar. There's some nice things like Python doesn't really seem to care what kind of object you return.
So from the same function, I can return like some ambiguous object one and some other completely
different ambiguous object. And I'm just, that's really neat. I didn't think that was something that,
uh, you know, C#. I don't know how you do that. Usually you do a wrapper with like generic types and,
uh, you know, C# six made that easier, but yeah, there's so much ceremony in the static languages,
right? Even the nice ones. Yeah. You know, so that was a really nice thing.
Some of the challenges really is just kind of getting used to some of the tooling around,
uh, Python. So I spent like forever trying to figure out which editors I wanted to use and
how packaging worked. it took me a while to just like, kind of just conceptualize packages
because the way packages are in Python are very different because it acts more like a,
it's like a script. It's not like a compiled language. So you don't have like different projects
libraries. You have packages, which literally are just script files with initialization to it. And
there's no, there's reduced ceremony and how that happens. So even with the reduced ceremony,
it's just not what I was used to. So coming to it from more of the statically typed and,
compiled language background was like just a weird transition and took a little bit of mental getting
over. Yeah. It's interesting when you're learning stuff that somewhat the challenges of learning
things, programming techniques and so on has to do with, is the thing you're learning actually hard?
And the other one just has to do with your preconceived notions of how things should be done.
Right? Yeah. Yeah. I was trying to like figure out how to stick, extra libraries. And I was doing a,
um, just doing all this extra abstraction that I just didn't need to do. I was like, okay,
we're going to do some dependency injections that I can swap out my backend. Cause like right now I'm
pointed to some local files, but I want to swap out with the actual database. And right now they're on
SQL, but they're probably going to go to Mongo. So I needed to figure out how to easily swap that out.
Um, just, I think it ended up just being easier to not use something like dependency injection because
the abstraction and, Python is almost, it wasn't quite as necessary as it was before, I guess is
what it seems to be boiling down to. I'm still working through that problem specifically though.
Yeah. It's interesting. If you look at the design patterns that typically were created,
decorator state, all these various design patterns, and you look at them for static languages,
there's so much ceremony and formalization. And then you, you look at them in the Python world and
they're usually, you know, a couple of lines, like, Oh, that's all it is. It's nice, but it's a mind
shift for sure. Yeah. There was one thing that I thought of that actually was more of a challenge.
So I have a fairly hefty F sharp background and, I really like functional composition and
pipelining and, there wasn't anything out of the box, especially with like a data manipulation
pipelines. I wasn't finding very much out of the box for that in Python. So there's the pandas package,
but it wasn't really set up so that I could kind of do functional composition easily, but using some
of the decorators and kind of making up this infix thing. I'm not really sure how exactly it works. I got
it to somehow work, but it gives me functional composition. It's just, instead of being out of the
box, I had to kind of write it and I had to fight with it a little bit to make it happen.
And there's some magic behind the scenes that I don't fully understand that somehow I got it to
work. Whereas like in like, R has like the D play R and mag reader packages and F sharp just has
it out of the box. Python, a little bit of a fight, but it works. And now I get what I wanted.
Yeah. Okay. Really nice. Really nice. You work at Microsoft doing some interesting stuff and you
said you kind of live inside the company, but also outside in a little bit of a bubble. So maybe tell
us what do you do there?
Yeah. So I'm a developer evangelist at Microsoft and, you know, the easiest way to think of what
a developer evangelist is and does is that we spend about 50% of our time focusing on creating a healthy
technology ecosystem in our area, typically focused around what we like to do. so I do IOT and
machine learning. So you'll see there's a very healthy IOT machine learning ecosystem in South
Florida. And then the other 50% of the time is spent working on customer engagement. So finding, some
really cool stuff that, folks are working on in the area and just help them be successful with it.
And it's interesting cause we don't charge any money. We're just focused on ensuring that people
are successful with our technology and, getting insight from that and delivering it back to the
product group. So it's very much a field position. And, you know, that said, I don't live in Redmond.
I live in South Florida and, there's a very different kind of view because I'm not like at the
Microsoft office 24 seven. I'm spending more time with people who are like outside of that world.
You know, literally, I think we're about 3000 miles away or something like that. Yeah. You have to go
diagonally across the entire United States.
Yeah. That's about the maximum distance you can get in the continental United States. I think.
Yeah. That was kind of a neat, neat thing for me. It was as far away from HQ as I can get without
leaving the country. So it's a, it's a very interesting perspective because you get to see a
lot of the inner workings of Microsoft without necessarily being a part of those inner workings
24 seven. So it gives you a very different perspective on, kind of what like outside
of Microsoft is doing. And you can, feed that back into Microsoft so that we can better build tools
and technologies that are more aligned with what folks are doing. So if you see like, Hey,
this technology, whatever it is, doesn't seem to work or meet exactly the expectations because really
they're doing this. It gives you the perspective to provide that insight back.
Yeah, that's cool. And we can definitely talk more about the shift in perspective at Microsoft around
these types of things a little bit, but it, I think it's the short version for now is it's an
interesting, it's an interesting change and those things are way more possible than they used to be.
Right.
I'm calling it the Satya decade or Satya era of Satya. It's very different. I get to have an Android phone.
Exactly. That's so Satya Nadella, the new CEO has made a lot of, changes on how that works,
right?
Yeah. It's, it's very interesting. It's like, he's, he keeps using the term, customer obsessed.
Like he wants us to be obsessed with our customer and just focus on the customer 110%,
no matter what it is. And just make sure that they can be successful with what they want to do
using what they want to use on the Microsoft platform. And it's a very different mentality
shift than, what used to be in place.
Yeah, absolutely. So you said you work with, IOT a little bit, internet of things.
What, what do you guys have going on there?
Yeah. So this has been a really big space for us, lately. we have this whole IOT suite,
which is there's primarily cloud hosted services, but we have some on-premise offerings, but it's all
about being able to pump as much data as you possibly can into the cloud and do meaningful things with it.
So there's a variety of different projects that I've seen where we do this, everything from
collecting telemetry from pipelines to creating intelligent teddy bears to there was a water flow
analysis project and intelligence skateboards, just all sorts of cool stuff.
Yeah. That sounds really awesome. And then what does machine learning have to do with it?
A lot of that's around delivering, value back through the data that you collect through
IOT devices. At least my focus area is. So, you know, if you're collecting telemetry, you have maybe
pH and, humidity temperature, and you might have vibration. It's okay. You've collected all of this
information. You're streaming it all up into the cloud, but what do you do with it? And, machine
learning will help you recognize various patterns and attributes to that sensory data so that while the
data is actually in motion in the real-time data pipeline, you can actually execute machine learning
algorithms against that in motion data and surface interesting things to be aware of. So for example,
if you see a pattern that looks kind of like, Hey, there's about to be a leak in your pipeline, you can
actually recognize that pattern in the data pipeline and then put a message on a, on a data queue for like a
worker role to pick up and send SMS text messages to the engineers and the executives saying, dude, your pipe's about
to explode. You need to go like, take care of us now.
Yeah, that's really cool. So that's, that's really different than, oh, this is just outside the parameters.
But, you know, something instead, like the last four times we saw the pipe books blowed, you know, it kind of did this.
It looks a lot like this.
And the machine says, you know, that looks a lot like something I've seen before. And you didn't like it last time. Go check it out.
This portion of Talk Python to me is brought to you by Hired. Hired is the platform for top Python developer jobs. Create your profile and instantly get access to 3,500 companies who will work to compete with you.
Take it from one of Hired's users who recently got a job and said, I had my first offer on Thursday after going live on Monday and I ended up getting eight offers in total. I've worked with recruiters in the past, but they've always been pretty hit and miss. I tried LinkedIn, but I found Hired to be the best. I really like knowing the salary up front. Privacy was also a huge seller for me. Sounds awesome, doesn't it? Well, wait until you hear about the sign-in bonus. Everyone who accepts a job from Hired gets $1,000 sign-in bonus. And as Talk Python listeners, it gets way sweeter.
Use the link Hired.com slash Talk Python to me and Hired will double the signing bonus to $2,000. Opportunities knocking. Visit Hired.com slash Talk Python to me and answer the door.
That's cool. I've thought about that for software, right? Like Netflix actually uses machine learning to monitor their servers and their apps in production. But that seems to me like really, I don't know, really clear and cut like what it is you're processing. But for pipes and all sorts of physical things, that's really cool.
Yeah, I really wanted to spend some time like getting out into the physical world a bit so that I could see it. Like I really want to like, you know, everything that we do as software engineers is virtual all the time. And I wanted to see, you know, is there a way to create a stronger relationship between the physical and the virtual and kind of pass information between those two worlds in a meaningful way that delivers value to our customers?
And IoT and machine learning together really is a powerful way to do that. And it's neat, especially with like a lot of the stuff that's coming out. Like, I don't know if anyone watches GPU conference, but NVIDIA just came out with this RoboCup dev car. Literally, it's like a Formula One race car. That's like a self-driving car platform for like Formula One race cars.
Yeah, I just did hear that they just came out with CPU, GPU type thing for cars. That's really cool.
Yeah, it's, you know, and seeing that kind of technology come out is absolutely amazing. So that will be an example of something that's really powerful that you can stick on any number of sophisticated devices. And you will collect a lot of the information and video feeds from that device that it's computing, stream that up to the cloud.
So you can optimize your algorithms, your self-driving car algorithms, your image recognition, what have you. And then basically, you get back a matrix of numbers, huge matrices of numbers, and you just shove that back down onto the device.
And it's a really neat pipeline, because you, I don't know, it's just so cool to see that happening.
Yeah, it is really cool to see those dedicated things. I mean, GPUs used to be just for graphics, right?
But now they're for so much more. And you said you're doing some stuff with GPU wrappers.
But it's been a little while since I've talked about this whole programming logic on GPUs and why you might care. But maybe give people, like new listeners, a quick summary. Like, why would people program GPUs over just like regular code? Like, what's the performance story there?
Yeah, so it's, I'm taking a look at the Microsoft Cocos database as an example. So you can go look at this. I think it's mscocos.com, or if you just like Bing, Microsoft Cocos database, you'll find it. You can Google it, too. I'm sure you'll find it both ways.
Anyways, it's an image recognition database that you can use. And there's a challenge out there. Anyways, what's interesting about images, especially if you're talking like 1080 by 1920, literally, to get the number of features or columns that you're going to need to compute against, you multiply 1920 times 1080. That's the number of pixels. And if you have an RGB image, you have three channels. So now multiply that number by three.
You're upwards in the 5 million representations of an image. So, and each one of those pixels is potentially important.
Right. And how many frames a second, right?
Yeah. So if you're doing 60 frames a second, and you have one second, you just generated 60 times whatever that giant freaking number was. And that's, that's one second worth of information. Now, out of that, you'll probably extract a few key images and compare against that.
But, you know, at the end of the day, you're talking huge quantities of compute data. And when you think about a GPU versus a CPU, you're doing a single mathematical computation. And on a CPU, you have, you have one. So you can do one computation at a time. Maybe you have six CPUs in like 12 virtual processors. So maybe you can do 12.
Well, on a GPU, I just built my own dev box. I've got the new Titan X. Each one of those has 3,100 processors. So on my dev box that I have, I have about 6,000 processors.
So with each one of those, I can actually do a numerical computation against each pixel, literally 6,000 times more and faster than a CPU because I have 6,000 processors instead of one.
Yeah, that's insane. When you think about the parallelism differences there, right?
Yeah. So when you're thinking GPU versus CPU, it's how, how are you paralyzing your workload and what is it specific for? And the other things are like a GPU has its own internal memory.
So each one of my GPUs has 12 gigabytes of internal memory. So I can load, because I've got two, I can load 24 gigabytes of image data onto those.
And I have them set up with the standard SLI bridge. So it's basically a video, like a super awesome video game box.
One of the benefits of deep learning is you can play awesome video games on your workstation.
But you transfer, you load the data on and you transfer the model back and forth over the SLI bridge.
And it allows you to compute so much faster because you have the onboard GPU memory, which is typically GDRG 5X.
I don't even know.
It's the one with the 5 and the X in it, as opposed to DDR4, which is just a much faster memory.
So it's a more performant way to do large quantities of data that have excessive numbers of features.
Whereas like you might use something like Spark if you have large quantities of data, but maybe not as much parallelism in each computation task.
Like in an image, you know, you have 1920 times 1080 times three number of computations per observation.
Whereas like in business data, you might have upwards of 200 computations, maybe a thousand computations per observation.
Right. That makes sense.
So how do you program these GPUs? Can you do that from Python?
You can.
So there's two libraries that I was evaluating.
There's one that's made by Microsoft and there's one that's made by Google.
Both are open sourced.
The Microsoft one is CNTK or Computational Network Toolkit.
I don't know if the Python wrappers are available yet.
They should be sometime.
You have to check their Git repo.
I ended up not using that one.
I went the Google route.
I work for Microsoft and I get to use Google compute graphs.
It's awesome.
Welcome to the Satya era.
So I'm using TensorFlow.
It works wonderfully on Azure.
It works wonderfully on my box.
So I get to use Google technology on the Microsoft platform.
So that's kind of how I get to use it with work.
But the neat thing about TensorFlow is that you get to use Python and it has interactive and batch execution.
So, you know, if you're just getting started into it and you're like, I don't know how this thing works.
Well, pop open a console and start like having at it in interactive mode and outputting some stuff and just see what the heck happens and poke around with it.
Whereas like a lot of the other compute frameworks require you're back to almost like compilation style where you generate your full graph.
Then you more or less compile it and then execute it.
And it shoots back really cryptic errors when something goes wrong.
I see.
So like you would write it in, let's just say, Python and then compile it to like shader language or something like that.
You send over to the GPU and then get the answer back.
Yeah.
That's kind of how most of them work.
And TensorFlow has that capability as well.
The benefit to doing it that way is that you actually take full advantage of everything that it does behind the scenes for you.
Whereas when you run TensorFlow in interactive mode, you're just going to thrash your performance to you might as well be doing it on a CPU.
But the benefit is that you can experiment and learn in interactive mode and then just swap your flag back to batch mode.
And then you get all the performance goodness.
Okay.
That's really awesome.
Yeah.
So if you're doing machine learning or just real computational stuff, right?
TensorFlow sounds great.
Yeah.
And it supports multi-GPU, multi-node, just really cool stuff.
And I'm pretty excited.
It's really expensive to buy GPUs, but now you get these rentable GPUs.
Azure just went into private preview with the N-series and AWS has some virtualized ones.
And you can get as many nodes as you want.
Learn TensorFlow.
And if you can't do it on your own box, just rent some GPUs.
They're usually like $2 an hour or so for a GPU box on the cloud.
Yeah.
Maybe it was $2 a minute.
I can't remember if it was $2 a minute or $2 an hour.
I think it's $2 an hour.
That's pretty awesome.
Yeah.
Really, it's helping democratize kind of scientific hyperscale computing.
The cloud is just an absolutely phenomenal thing.
Like, you know, before, like my workstation, I'm lucky to have had a lot of success in my
career and my life.
So I can go buy like a $5,000 workstation for work.
That's not necessarily possible for everybody.
But in the cloud, you just go grab a GPU box for a few hours and have a script that turns
it on and turns it off for you.
That's awesome.
Yeah.
I mean, even if you work at a company where they would buy you a $5,000 GPU box, if you
have no idea if it's actually going to solve your problem, spending $10 to find out and then
buying the $5,000 machine is really a nice possibility rather than, you know, leaping in and seeing if
it's going to work and maybe it won't.
Yeah.
And yeah, I think there's other benefits to having the cloud GPUs as well.
Mostly that they're even faster than mine.
So like the, I don't, I don't, I'm not terribly familiar with AWS is on frame what they have,
but ours we've got, you can get four of the latest ones that Nvidia has.
And that's the one that's $2 an hour and you get direct hardware access is like, okay, so
it was five grand for me to get like a box with two GPUs and they're not even the top of
the line or the Titans.
They're not the Kepler series.
Whereas I can go and get the Kepler series and I got four of them and all the backing
hardware at $2 an hour.
I just say, it's just, my mind is getting blown with what you can get and what price you can
get it for.
We definitely live in a special time, don't we?
Yeah.
I'm feeling a little spoiled about that.
So you talked about your career and you said maybe it's a good time to touch on that.
You said that you had a bit of a rough start in college and the, the contrast between college
career and professional programmer career are really different.
You had some great tips there.
Yeah.
So I was pretty much your typical college student, went in and was like, I don't want to
do programming.
And parents were like, you're going to do programming.
And it's like, okay, well I'm going to be rebellious while they do programming.
So I was pretty much throwing parties all the time and, you know, doing all that kind of
stuff.
And, was like, I had a super low GPA.
Like it was my senior year.
My GPA was like 2.4 and you needed a 2.6 to graduate.
And I was like, crap, I've got three years behind me with a 2.4.
I need a minimum 2.6.
I can get out of here.
Yeah.
It's a little stressed on the last year.
And, man, I wish I had focused and took advantage of the opportunity and seeing it
for what it was when I had it, but, that's not what I did.
So, you know, I had, I had to deal with that situation.
So I started a bunch of groups like, you know, the game dev group, study groups, programming
groups.
I had about three different groups that I was managing and running to just hopefully surround
myself with enough experts that I could pass.
And I made straight A's the final, the final, year, I was able to get, I think like
a two seven GPA, which was enough to graduate college with my major.
And, it created a really difficult hiring experience, but luckily, like I did the interview
for Microsoft and they didn't ask me what my GPA was.
They, they wanted to ask what I did and what I liked doing.
And luckily that last year of college, I was like hacking on, like I had a motorcycle with
like a performance module that you could like, hack into and make your motorcycle go faster.
So I, hacked into that thing and like did all sorts of craziness to my motorcycle
and, made a bunch of video games.
It was like, here's what I got.
Microsoft is more interested in what I could do and not what my GPA was.
So I got super lucky that they never asked that question and, was able to get a job.
That's really cool.
You know, I mean, I've been in hiring roles at companies I've been at and we, we almost
didn't care what degree you had.
If you had a PhD, it gave you a little more credibility than, you know, a college degree,
a little bit more, which gave you a little more credibility than no degree.
But it really was, what can you do?
What have you done?
Do you have proof of that?
And I think that's also pretty neat about programming.
Yeah.
And that was actually Microsoft was the first company I interviewed with that was like that.
The issue I had was getting just into the first interview.
You know, you submit your resume and they have like these processors that go and say,
not three, oh, not three, oh, not three, oh, not three, oh.
So you'd never even gotten a phone call.
Like, actually it was a developer evangelist who showed up at my school.
I just talked their ear off and I gave them my resume.
It was like, just read it.
Just shove it.
I don't care.
Just do something with it.
Make sure you call me.
I don't care.
And that happened.
Whereas a lot of the ones where I was applying online, I didn't make it past that automatic
filter.
You know, they, there's a lot of like, you know, you get however many students graduating
out of college, you get to process it through it somehow autonomously.
So I think that's what they did.
Yeah.
That definitely makes sense.
Well, very cool.
And since you got to Microsoft, you said your career is really accelerated.
You had some, some process to make that happen.
You want to share it?
Yeah.
So I think the big thing was I had this kind of, oh shit moment in college and, you
know, now, now I'm out.
I actually got married and it was like, you know, now I've got a family and failure is not
really an option at that point.
I had to come up with a process and a method to kind of ensure I was successful and never
encountered like that.
You're on the edge of failure scenario ever again.
That's like the scariest place to be.
And so a lot of it boiled down to focusing and working really, really hard on specific areas
and building a community around those areas that I was actively engaged in, which is kind
of abstract, but I'll, I'll give you a consensus.
When, when I, first joined Microsoft, I came in as a consultant, doing development
operations and, you know, I didn't know the first thing about it.
So I went to a local user group.
which is a .NET user group and started talking about TFS and application lifecycle management
and source control and best practices and built a group up.
We got to a few hundred there and, it was once a month, sometimes twice a month meeting
with other professionals in the area to a really zero in on this one specific thing.
The main thing I learned was that like, if you were to be successful, a lot of people can
do different things very poorly, but very few can do one thing extremely, extremely well.
So if you want to be the one who gets the phone call, you want to be the best of the
best of the best.
Of course, you're going to pass up opportunities, but you're going to be the one who gets the
most opportunities in that specific area.
And if you look at programming, there's so much opportunity out there that it's better to
be the one that everybody thinks of, oh, I need to do like this type of server.
Let's call David.
So once I kind of understood that focus on that very specific thing and be the best in
like North Carolina at it, that's when it kind of clicked.
And I started seeing a lot of success in my career because servers would go down, you know,
as they always do, and they have to call somebody and it could be a critical scenario.
So who do they call?
Do they call the guy who's like a web developer, DevOps, TFS, open source, big data guy, or do
they call the person who is the best in class at that one type of server?
So I actually saw a significant increase in my billable hours being utilized once I focused.
And a lot of that was enabled by focusing on the community and trying to see success with
that community and growing it into myself.
That's really awesome.
I totally agree with you that specialization is key.
I mean, you need to have enough broad skill that you can get along with general situations,
but there needs to be a thing that is your specialty, right?
And if you pull that off, you can really, like you said, you get the invitations for the conference
talk.
You get the call when people need help.
When people Google something, they find you.
It's just, it unlocks opportunity.
And that doesn't need to be a broad specialty.
It could be something fairly niche.
Yeah.
Like if you're the best dude at charting or the best girl at charting, like who are they
going to call for charting?
How many charts do people need to draw?
Like millions of charts.
There's charts being drawn all the time.
So if you're just the best charter in the world, you'll do very successfully.
And I think you honed in on something that was really interesting, Mike, was the, I called
it the integration points.
So it became more apparent that I had to learn my integration points as I started moving over
to data and machine learning was that I could do machine learning and be the best at machine
learning.
But unless I knew how to surface those capabilities into a web server or onto a physical device,
I was still kind of useless.
I needed to know like my specialty and like three or four ways to expose my specialty to
other people that was useful.
So like the microservices phenomena has become a really impactful thing because now it's like
machine learning flask, wrap it in API, ship it up to the cloud.
Anybody can use it.
That's integration point one.
Yeah, absolutely.
That's a really great point.
You know, I had John Sonmez on episode 71 talking about specialization and niches and he
often talks about T shaped knowledge.
You've got some broad base, like you can set up a web server.
You can create a basic web page.
You can talk to database, but then you've got some vertical deep slice that is like the
reason people call you.
Right.
And I think that's a great way to think of careers.
Yeah, that was actually when I came into Microsoft consulting services.
That was the first thing they said is that here's what the T model is.
Here's what your specialization is.
Here's everything that surrounds that specialization.
Know it or die.
It's like, okay.
Okay, I'm listening.
Okay.
I'm listening.
Capital One has a special message for you.
They need Python pros who love to work with data.
Put your Python experience to work at Capital One and help them use data to make life better
for millions of customers.
Capital One is employing the latest tools and approaches to do data analytics and data science
from the ground up.
They're smart, creative professionals who love to explore new ways to interact with data.
They're interested in figuring out novel, advanced Python techniques, and even more interested
in finding more people who will help them do that.
When you join their state-of-the-art Python community, you'll work with people you really
like.
People who might be listening to this podcast right now.
Relentless innovation is their way of life.
Make it yours at Capital One.
Visit jobs.capitalone.com slash talkpython to learn more and apply today.
Awesome.
One of the things you said that really helped you get into that position was surrounding yourself
with people.
And we talked briefly about some of the user groups that you've been part of.
You've got a long history of creating and setting up and facilitating user groups, and you
have some going now.
Let's talk about that a little bit.
Give us the history first.
Yeah, it started back in college, like I said, starting the video game group.
And then when I got into Microsoft, creating other community groups.
I've always been a field role at Microsoft, so I've never really been able to surround myself
with other Microsoft people.
So I had to come up with more creative ways to gain that knowledge and that expertise.
And all the different big companies have things like MVPs, which most value professionals, or some
sort of like honorary role for you're not part of the company, but you're super awesome.
So we're going to give you a lot of special privileges.
Like MongoDB has MongoMasters.
Google has their equivalent.
You guys have your MVPs and so on, right?
Yeah.
So you find those guys and you really just surround yourself with them.
And then you invite other people in and you create a very open ecosystem.
So I started joining a very successful one in North Carolina, the TriNug, the Triangle.net user group, and the Research Triangle Park Data Analyst user group.
Two very large groups in North Carolina.
And really got me going and understanding how a professional group is run and operated.
They've got memberships in excess of like 1,500 per group now of some of the best scientists in Research Triangle Park.
So kind of after my tenure there for a couple of years learning how that is, I transitioned to this developer evangelism role,
where now one of my primary jobs was to lead and facilitate and grow groups of that nature.
So then I moved down to Florida and there are some really strong groups in Florida already, but maybe not specifically in the areas that I'm going.
At this point, I've already transitioned to a lot of data science and I was doing a lot of F Sharp and stuff.
Now I'm trying to do Python and TensorFlow.
There's like three or five groups here that I'm really focusing on.
There's the Fort Lauderdale Machine Learning User Group, Miami Data Scientists.
There's FLA.net, Gold Coast User Group, Code for Fort Lauderdale.
I'm actually speaking there tonight.
Code for Miami.
Just a variety of groups.
And what's interesting is that you can, each group has its own different specialization.
So like Fort Lauderdale Machine Learning is all basically Python, TensorFlow Machine Learning.
And they have a fair amount of R in there as well.
FLA.net is all like .net and Node.js Miami is all JavaScript.
Yeah, excellent.
And you said that you had a pretty interesting format or style for your Fort Lauderdale Machine Learning User Group.
Yeah, we started, we just experimented with this a couple weeks ago.
I've done a couple of these before at other user groups and seen some success.
But I call it an open forum.
And basically it's a semi-structured user group.
A lot of what I see at other user groups is very presentation lecture oriented.
You go in, somebody talks at you for a while, and then you network for 20 minutes or so, and then you leave.
But this is a very different take.
You know, everything that I've seen for how I get successful or see other people get successful is that they have hands-on experience.
So we've created a semi-structured event that happens every other week where we have a three-hour block where everybody shows up and we talk about high-level, what are people struggling with, what's the direction that you've seen over the past two weeks, anything interesting you want to talk about.
And we do about 20, 30 minutes of that.
And then we spend about two and a half hours or two hours actually hands-on solving problems.
So right now we've broken out into groups to try to win Kaggle or the Microsoft Cocos image recognition challenge.
And what's neat is that you see a natural tendency where people share their knowledge and form into groups and are actively pursuing knowledge and actively using the tools and solving problems.
So, you know, you can go and do a presentation on how to do data pipelining or how to ensure that your GPU kernel is always awake.
Or you can say, here's a giant database of images with labels for the next three hours over the next three months.
We're actually going to get an accuracy of 90%.
And what's neat is that nobody has to even know how to do it.
So, like, when you have a lecture-style group, you're forced into this thing where you have to have an expert.
If you do an open forum, nobody has to be an expert because everybody's learning.
Nobody even, you know, you have to have a general idea of where you want to go.
But you don't actually need an expert because you're actively coding and you're going to surface these issues and you're going to naturally solve them.
That said, we do have experts around because people do this for a living.
So that's really beneficial.
And you see, like, we had a couple Docker experts.
We had some Python experts and some TensorFlow experts.
And, you know, some people knew TensorFlow and Python but didn't know how to use the GPUs and the cloud.
So the Docker people come over like, I can help you with that.
Can you show me a little bit about this TensorFlow stuff that you're doing?
Because the Docker experts don't know about TensorFlow.
So you get this really cool cross-collaboration of skill sets.
Yeah, that's really great.
And, you know, for those who are not familiar with Kaggle, Kaggle sets up periodic data science competitions.
And they're probably the best known out there for that.
And so I think it's fantastic that you guys are like, the goal of this user group is to win Kaggle.
Because when people come back and they try to get a job or a raise or whatever, they say, well, you know, what experience do you have?
Well, I placed this level in Kaggle and here's how we solved it.
And it's super concrete rather than I sat through four talks on data science.
I'm really ready.
Yeah.
And, you know, like, because when you do interviews, it's, you know, like we were talking at the beginning.
It's what have you done?
What can you do for me?
Where's the proof?
Well, I'm second place on Kaggle kind of speaks for itself, right?
Like, here you go.
How much money do you want?
Exactly.
That's when people start calling you rather than when you call people.
And, of course, just like being a specialist, having people call you, it puts you in a much better position to get the job.
Yeah.
And, you know, the other neat thing to mention about this particular user group is we actually partner with a couple local recruiting firms.
So what's neat is the recruiting firms have jobs available and they'll send the recruiters in.
They actually provide food.
They give us prizes.
So, like, last time they ordered a bunch of, like, really fancy pizza, not like the typical, like, nasty stuff, but, like, really good pizza.
And they had Amazon gift cards.
And we had about 50 people show up.
And at the end, you know, they said, okay, by the way, we've got three jobs in Python.
We've got two jobs in Java, a couple .NET, and, like, one data science position.
You know, come up and let us know if you're interested in any of these jobs.
Not only are you growing your skills, because we've placed these events in partnership with recruiting firms, you get to learn your skills, apply your skills, and then hopefully go get a job with those same exact skills.
And the recruiters know who you are, what you're doing, if you're showing up, and they'll vouch for you.
Yeah.
A really excellent combination there.
So, with all this community building and stuff, you had some funny stories about the challenges of building community.
One of them involved office hours.
You want to tell us that?
Yeah.
So, office hours.
I run office hours in downtown Miami every week on Fridays.
And you can get some really incredible people and things to show up at your door.
And then, conversely, you can get some really crazy people to show up, too.
So, we've done a lot of stuff about, like, the goodness.
So, we can mention a few of the crazy ones.
So, I'm not going to mention any names or events or anything like that.
But, you know, when I post my office hours, I post them up on Meetup.
And it says, machine learning office hours, Microsoft developer evangelist will be present, you know, free, no charge kind of thing.
So, this one day, this individual shows up just, like, I don't know, just to harass me about stuff, like Google, I guess.
She's like, I really like Google.
But, like, oh, I said this individual was like, I really like Google.
But, like, Microsoft kind of sucks.
And, like, I really want to get a job with Google.
Can you, like, get me a job with Google?
I was like, look, I work for Microsoft.
I can't get you a job at Google.
If you want to get a job, I can give you some direction.
She's like, great, but I don't want to, like, code or anything.
Can you, like, do this?
I was like, oh, my God.
And I'm sitting there in my head, like, staring at her, wondering how long I can let her talk until she disappears.
And it must have been two hours.
It was an interesting experiment to see how long I could just, like, sit there.
Yeah, nobody else showed up that day.
So, it wasn't like I had anything better to do.
But it was just an example of some of the craziness that you'll get.
And you'll get all sorts of different people showing up that are, like, that we've had people come in and, like, start throwing things.
But there's not too many of those.
But when it happens, you're like, you can tell as soon as that person walks in the door.
There's, like, I don't know.
You can just, like, smell it or something at this point.
And you just, like, clap your hands and, like, rub them together.
And you're like, all right, let's get this going.
Let's do this.
Yeah, it's an interesting experience.
But then you have other things, like, I mean, so many amazing innovations that have come through the door.
Just blow your mind.
There's this one individual who came in, and he lost his job.
And he's an older fellow.
I'm not sure.
I'd probably place him probably in his 60s.
But anyways, he lost his job and decided, whatever, I'm not going to let that get me down.
So I'm going to start a company.
So he starts this company around, like, executive financial planning.
And just total ninja style builds this incredible platform for every wild thing that you could ever imagine that you'd want to do as an executive planning financials for your global organization.
Like, he came from a really, really large company.
So he kind of knew how, like, when he moved around and what you had to do, because he was the programmer for those tools.
And he basically rebuilt this huge platform.
And you could just attach anything to it.
And it would do planning.
Like, I'll give you some insight.
Some of the planning that it would do would be things like, I have my primary workforce is in the United States.
But my primary sales are in China.
I need to pay my workforce.
But every quarter, it seems like the Chinese currency keeps dropping, which decreases the value of my stock by this much.
So if I transfer my money in via these three ways, this is how much money I lose.
Then I'm going to get impacted with the bringing my money into the United States tax.
Well, here's a more creative solution around that that reduces the impact on your ability to pay your U.S. workers.
OK, well, now we've generated some debt in the U.S.
We still have the money in China because we didn't move it over that intelligently.
How do we transfer the debt over to China via some back methods so that I can then pay off my debt in China as opposed to paying it off in the United States?
And it has this whole, like, predictive aspect of, like, everything you could ever imagine from, like, a perspective that just blows your mind.
How interesting.
Yeah, so that guy just walks in and says, look, I built this.
Help me.
Very cool.
Yeah, and you walked in and was like, what can I do?
I built this.
I don't know what to do with it now.
And I was like, you know what?
Let me just shop this around.
See what's going on.
We might need to make it look a little prettier.
You know, it was much more focused on the abilities as opposed to the prettiness.
But it looks like it's going to go somewhere.
Yeah, nice.
I mean, just something of that magnitude is just absolutely phenomenal.
Yeah, that's really cool to be able to help people like that.
So, David, we're getting kind of short on time.
There's a few things I do want to still touch on.
So let me ask you about the state of Python and machine learning and stuff in Azure, because
that's something you guys have actually been pushing pretty seriously lately.
You know, with the onset of Satya and kind of a lot of the folks in my position, we have
other evangelists.
A lot of us have started transitioning to Python.
There's more than just me out there doing this.
And we're seeing that, you know, Python currently is the number five language in the world.
And if you look at it, the top three are like C and C++.
Well, those are basically the same.
And then there's Java and C#.
So then you've got Python after that.
So we're seeing a huge need for enabling Python on our platform.
So actually, I think every single one of our platform as a service offerings on Azure are,
in fact, Python enabled.
So my current workload is Python and Azure.
So I'm deploying web applications to Azure with Flask.
And there's things like Azure functions, which is analogous to AWS's Lambda.
And that's all Python enabled.
Everything has a Python API.
And it's just, it seems to be working really well.
And there's a lot of interesting things that you can do as well, because everything has a Python API.
So if you want to deploy a series of servers and get the state of your servers and do really
interesting distributed compute or even stateful stateless, it's a crazy concept.
There's this thing called service fabric.
It's a stateful stateless service that helps you do distributed computation in a stateless slash state,
like distributed fabric kind of fashion.
I see.
So like as a whole, it's stateful, but any individual piece is stateless, something like that?
Exactly.
And it distributes your compute across in number of nodes.
And it's super cutting edge.
Like nobody else has anything like this right now.
And it is, you know, first thing they came out with was C#.
Next up is Python.
It's like, that's really cool to see like the priority seems to be.
And, you know, you have to balance this with I'm inside outside, right?
Like I don't actually get to see what's on the backlog.
I just get to look at what is coming out and what order the tools are coming out.
But if you look at Azure, it seems to be C# and then either JavaScript or Python.
It's going to be kind of in that order.
And they're going back and forth between, well, do we support JavaScript first or do we support Python first?
Because some of the tools will come out with JavaScript or Node first and then others will come out with Python first.
And it's a very interesting perspective to see that those are key priorities.
And the cognitive services.
I forgot about the cognitive services.
Just there's a whole host of APIs out there on Azure that are focused on data science that are basically prepackaged solutions.
They're all Python enabled and like Jupyter Notebooks as a service and just tons of Python stuff.
Oh, that's really awesome.
Yeah.
The whole bot framework that you guys are coming out with also looks pretty interesting as well.
Oh, yeah.
I can't I can't wait to kind of get my hands on that.
Like the there's a big focus on natural language processing and bots are a part of that.
So, like, you'll see that especially if you're using Python, you get a lot of like ad hoc power that you don't normally get because you get things like scikit learn.
And then you get to put that in things like Azure machine learning, which is our democratized drag and drop machine learning toolkit.
But if you're good with like Python scikit learn, you use the bot framework and we have something called Lewis, the language understanding intelligent services.
You can do you can make combinations of these prepackaged solutions and then throw some semi custom to fully custom stuff into the Azure machine learning as like a microservice.
And the powerful offerings that you can develop as a consumer of Microsoft services.
So, like you would consume the Microsoft services to create value for a customer, but you can create that value super fast.
Like I had to do a pre sales engagement where I had to develop a Slack bot that could respond to random queries about a specific customer's product offerings.
I had 48 hours to build this thing from scratch.
And it also had to handle speech to text and text to speech.
Out the door in less than 48 hours because of the ability to take advantage of those prepackaged solutions and throw a little scikit learn in there where needed.
Oh, that's awesome.
Yeah, very, very cool.
But you guys got going on.
There's great.
So I think we have time for one more thing that I wanted to touch on.
And you said you're working on a project with autonomous farming.
Can you talk about that?
Yeah.
So I'm not allowed to talk about it too, too much because it's just now going under development.
But the details that I'm allowed to share is another one of those tight timelines.
You're working with folks who aren't necessarily experts in IoT and machine learning.
And you have very high value crops in like huge quantities.
And there will be things like the state of the environment will change throughout the night.
And you need to autonomously deal with that because you might have one farmer or one farm hand for every hundred acres or so.
And if something terrible happens, like the pH levels go completely out of bounds, well, your farmer might be a hundred acres away.
And now he has to ride his bicycle or his golf cart all the way over there.
And by that point, if it's a super young plant, you might be in trouble.
So having the ability to create what I call command and control systems, you were able to kind of extract information out of the sensors that you have, figure out what the state of that system is, and then send messages, not just down via text message to the farmer, but down to like an Arduino-like device.
And actuate motor controls, valves, et cetera, et cetera.
And it can actually impact and resolve the system and put it back into a stable state autonomously.
And farming is one area that we're seeing is a very interesting place.
And again, a lot of that gets enabled, you know, the tight timelines and data consolidation.
They have data from all over the place.
You can just throw it all up into cloud-based storage in Azure, build your models, and then surface the actual generated algorithms, either on device, edge devices, or in the cloud, depending on what you need to do.
That's really cool.
That sounds like a fun project.
It's probably one of my favorites.
There's, if we touch base again, probably around March, there will be a lot more details that I can share on probably about three or four projects that we have going on of similar just neatness.
Nice.
Awesome.
It sounds very exciting.
So, David, I think we'll have to leave it there.
Let me hit you with a couple of questions before I let you go, of course.
There's over 80,000 packages on PyPI you can grab and create autonomous farms from or various other things, right?
So, what one's your favorite or you found really useful you want to tell people about?
PIP install TensorFlow.
I mean, for some of the large-scale stuff that I'm doing and some of the neat things that you can do with it, just you can pip install TensorFlow.
So, I'd say that's it.
Oh, that's awesome.
Yeah.
Very, very cool.
And editor, what one do you use?
I actually have to split it.
There's two editors that I use.
I use PyCharm for a lot of the class development and what I'll call productionifying my code.
And then I actually use Continuum Analytics Spider 3 or Spider 2, the command of Spider 3, because I find that for doing interactive visualizations and experimentation, it's really nice.
So, I'll write a lot of my code in Spider and figure out my algorithms, and then I'll copy-paste it into PyCharm.
Oh, that's awesome.
Yeah, I can definitely second both of those.
That's great.
All right, you got one final call to action for everybody.
I'd say check out the Python capabilities on Azure.
Like, the power that the cloud can bring to the table at the cost that it brings is just mind-boggling.
So, that's just definitely something to take a look at.
Oh, yeah.
Very cool.
All right.
It's been a great conversation, David.
Thanks for being on the show.
All right.
Thank you, Michael.
You bet.
Have a good one.
Bye.
This has been another episode of Talk Python to Me.
Today's guest has been David Crook, and this episode has been sponsored by Hired and Capital One.
Thank you both for supporting the show.
Hired wants to help you find your next big thing.
Visit Hired.com slash Talk Python to Me to get five or more offers with salary and equity presented right up front and a special listener signing bonus of $2,000.
Are you a data scientist or Python developer who loves data?
If you're looking for a place to work on data science with truly big data that can affect millions of lives, then head on over to jobs.capitalone.com slash Talk Python and check out the wide range of jobs that Capital One is trying to fill right now.
Are you or a colleague trying to learn Python?
Have you tried books and videos that just left you bored by covering topics point by point?
Well, check out my online course, Python Jumpstart by Building 10 Apps at talkpython.fm/course to experience a more engaging way to learn Python.
And if you're looking for something a little more advanced, try my WritePythonic code course at talkpython.fm/Pythonic.
You can find the links from this episode at talkpython.fm/episodes slash show slash 73.
Be sure to subscribe to the show.
Open your favorite podcatcher and search for Python.
We should be right at the top.
You can also find the iTunes feed at /itunes, Google Play feed at /play, and direct RSS feed at /rss on talkpython.fm.
Our theme music is Developers, Developers, Developers by Corey Smith, who goes by Smix.
Corey just recently started selling his tracks on iTunes, so I recommend you check it out at talkpython.fm/music.
You can browse his tracks he has for sale on iTunes and listen to the full-length version of the theme song.
This is your host, Michael Kennedy.
Thanks so much for listening.
I really appreciate it.
Smix, let's get out of here.