WEBVTT

00:00:00.001 --> 00:00:04.100
What's it like to be a beginner in software development? How about learning Python for the

00:00:04.100 --> 00:00:09.440
first time? This episode is a special panel episode and is the first of a two-part series

00:00:09.440 --> 00:00:14.480
we are doing on the podcast called Beginners and Experts. On this first episode, we have a

00:00:14.480 --> 00:00:19.460
conversation between the beginners and the experts and how we can close the gap to help the beginners

00:00:19.460 --> 00:00:25.400
get up to speed as quickly as possible. Our panelists are Carly Cindy, Joy Dayton May,

00:00:25.600 --> 00:00:34.260
Cece Flora Muniqua, and Ned Batchelder. And this is Talk Python To Me, episode 203, recorded January 30th, 2019.

00:00:34.260 --> 00:00:52.720
Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries, the ecosystem,

00:00:52.720 --> 00:00:57.400
and the personalities. This is your host, Michael Kennedy. Follow me on Twitter where I'm at,

00:00:57.400 --> 00:01:02.700
mkennedy. Keep up with the show and listen to past episodes at talkpython.fm and follow the show on

00:01:02.700 --> 00:01:08.580
Twitter via at talkpython. This episode is brought to you by Linode and Ting. Check out what they're

00:01:08.580 --> 00:01:13.780
offering during their segments. It really helps support the show. Cece, Joy, Carly, and Ned,

00:01:13.780 --> 00:01:15.680
welcome all of you to the podcast.

00:01:15.680 --> 00:01:16.360
Hey, thank you.

00:01:16.360 --> 00:01:17.400
Thanks. Glad to be here.

00:01:17.400 --> 00:01:18.180
Thank you, Mike.

00:01:18.340 --> 00:01:22.800
You're welcome. You're welcome. It's great to have you all here. People love the panel shows

00:01:22.800 --> 00:01:28.640
with lots of different perspectives. So I'm excited to put this together for everyone. So let's start

00:01:28.640 --> 00:01:35.260
with just who you are and maybe where you are in this beginner expert side of things and what you do

00:01:35.260 --> 00:01:38.860
day to day so people have a perspective. And Cece, let's begin with you.

00:01:38.960 --> 00:01:45.300
Thank you for having me, Mike. I'm really excited to be doing this with all of you. So I'm a student

00:01:45.300 --> 00:01:51.840
in Zimbabwe at Terraro Institute of Technology and I'm studying information security. I started

00:01:51.840 --> 00:02:00.920
programming in 2016 and I started with C when we were doing a module for the degree program that I'm doing.

00:02:01.620 --> 00:02:19.860
Eventually, we started learning Python. I have a lecturer who is very passionate about Python. He's the one who introduced Python to us. He had to change the curriculum a bit. Instead, we would have learned Java, but he changed the curriculum so that he can introduce Python to us.

00:02:19.960 --> 00:02:29.660
And so my first hello out in Python, I did in class. And after that, I just started going on and on learning Python.

00:02:29.660 --> 00:02:36.180
Yeah, that's really great. I'm so glad that person changed it from Java to Python. That's happened in a lot of education spaces.

00:02:36.180 --> 00:02:37.080
Yeah, I love that guy.

00:02:37.080 --> 00:02:44.060
Definitely, because I don't think I would have continued with Java. It's not very favorable for me.

00:02:44.440 --> 00:02:50.520
For sure. All right. That's wonderful. And what do you do day to day? You're still a student. Are you a grad student at the school there?

00:02:50.520 --> 00:03:01.300
I'm still a student. I'm going for my senior year next year, but currently I've been interning at Dimension Data and I've been with them for a few months now.

00:03:01.960 --> 00:03:10.120
My main work task at Dimension Data includes automating tasks and developing learning hubs.

00:03:10.120 --> 00:03:18.460
So what we do is write Python scripts. All of the work that I've been doing today is as done in Python. So it's great.

00:03:18.460 --> 00:03:23.580
We also do a lot of integrating with APIs, which is a new technology for me.

00:03:23.580 --> 00:03:28.920
And I've been learning a lot from Dimension Data and everything that we do there.

00:03:28.920 --> 00:03:32.740
Yeah. How exciting. Dimension Data is doing amazing stuff with getting people into programming.

00:03:32.740 --> 00:03:36.740
And that's how I know you. You and I work together a little bit on some of those projects.

00:03:36.740 --> 00:03:40.800
So that's great. Joy, yeah. How about you? Tell us about yourself.

00:03:40.800 --> 00:03:44.300
Thanks for having me. And my name is Joy, Joy Ma.

00:03:44.300 --> 00:03:48.980
I'm a product manager at the Paulson Institute in Chicago.

00:03:49.980 --> 00:03:54.400
So we're a think tank focused on international economics.

00:03:54.400 --> 00:04:01.480
And when you think about think tanks, the stereotype of a think tank is usually in D.C.

00:04:01.480 --> 00:04:05.280
As a matter of fact, there are over 400 think tanks in D.C.

00:04:05.540 --> 00:04:08.560
They have a lot of former politicians.

00:04:08.560 --> 00:04:10.800
They have a lot of former diplomats.

00:04:10.800 --> 00:04:12.920
And they have amazing experiences.

00:04:12.920 --> 00:04:23.000
And based on their personal experiences of sometimes 60 years, they make policy recommendations for other policymakers on the Capitol Hill.

00:04:23.000 --> 00:04:25.840
But our think tank is pretty young.

00:04:26.060 --> 00:04:30.440
We were established in 2012 by former Treasury Secretary Hank Paulson.

00:04:30.440 --> 00:04:38.860
And we're trying to think of a new way to establish a name in this already very crowded field.

00:04:39.620 --> 00:04:45.420
And that's when I started to venture out and look at all of the different options to do policy analysis.

00:04:45.420 --> 00:04:52.880
Back in 2016, when I first started looking at international trade policy and international investment policy,

00:04:52.880 --> 00:05:02.120
that was a moment I saw they are just half a decade of data freely, publicly accessible out there.

00:05:02.120 --> 00:05:05.240
But nobody has ever done any sort of research into it.

00:05:05.560 --> 00:05:12.680
So I thought, you know, being a relatively younger person without a 60-year diplomatic experience on my belt,

00:05:12.680 --> 00:05:16.700
I would just look into 60 years' worth of data and see what I can come up with.

00:05:16.700 --> 00:05:27.320
And that's how we conducted our research at Paulson Institute and has been pretty successful, I would say, by institute, by think tank standard.

00:05:27.320 --> 00:05:33.120
A lot of our research did get published on Wall Street Journal, New York Times.

00:05:33.880 --> 00:05:40.020
And we certainly also made our fair share of contribution to policymaking recommendation.

00:05:40.020 --> 00:05:40.900
That's really great.

00:05:40.900 --> 00:05:46.120
So it sounds like a lot of data science, probably a lot of Jupyter notebooks and analysis like that, yeah?

00:05:46.120 --> 00:05:49.160
A lot of pandas, a lot of cleaning, a lot of days.

00:05:49.160 --> 00:05:52.000
Sometimes it's pretty painful.

00:05:52.000 --> 00:05:52.740
I can imagine.

00:05:52.740 --> 00:05:53.980
Cool, cool.

00:05:53.980 --> 00:05:55.360
That's excellent.

00:05:55.360 --> 00:05:55.900
Welcome.

00:05:55.900 --> 00:05:57.020
Carly, how about you?

00:05:57.020 --> 00:05:57.480
Yeah.

00:05:57.480 --> 00:06:00.340
Hey, thanks again so much for having me on the show.

00:06:00.340 --> 00:06:01.300
I'm excited to be here.

00:06:01.700 --> 00:06:04.780
I'm representing part of the beginner side of this conversation.

00:06:04.780 --> 00:06:11.360
I have my master's in molecular biology, and I worked doing scientific research for about 10 years.

00:06:11.360 --> 00:06:19.060
And I was working in an epigenetics lab and generating a lot of sequencing data, which are essentially flat files with a lot of strings,

00:06:19.060 --> 00:06:22.460
or sequences composed of AT, Cs, and Gs, and some metadata.

00:06:22.800 --> 00:06:26.020
And I needed a way to analyze all of this data I was generating.

00:06:26.020 --> 00:06:33.360
And there are public websites, but they can be super slow when you're trying to run these files when they get really large or a lot of these files.

00:06:33.360 --> 00:06:36.580
So you really need to run them at the command line, run these tools.

00:06:36.580 --> 00:06:42.180
And generally, while you're SSH'd onto a larger machine than you have on your personal machine.

00:06:42.800 --> 00:06:45.540
So that introduced me to a whole lot of bash and some scripting.

00:06:45.540 --> 00:06:49.460
And then we started designing experiments that are a little bit more complex.

00:06:49.460 --> 00:06:56.800
So it required a lot of modifications to these files before we sent them in to the command line tools.

00:06:56.800 --> 00:06:59.580
And so that's when I started looking into Python.

00:06:59.580 --> 00:07:02.520
And I took a class called Python for Biologists.

00:07:02.520 --> 00:07:09.160
And this is what really opened my eyes to how many problems Python could solve that I was faced every day.

00:07:09.160 --> 00:07:10.200
Just like little problems.

00:07:10.200 --> 00:07:15.380
So I started building tools for the lab where people could like drop Excel sheets into it.

00:07:15.380 --> 00:07:19.940
And it would just like parse and figure out and do some things that we just would make our life easier day to day.

00:07:19.940 --> 00:07:27.100
And so after building some of these tools and doing these analyses at scale, I decided that I wanted to do that full time.

00:07:27.100 --> 00:07:35.660
And so for the past two years, I've been working full time at a company that makes software for life science researchers and for their daily workflow.

00:07:35.660 --> 00:07:37.040
So it's kind of a perfect fit there.

00:07:37.040 --> 00:07:42.420
So in being in a really small startup, I feel like I do a bit of everything day to day.

00:07:42.420 --> 00:07:47.000
I look at code and improve merger busts and write code, modify code, test code.

00:07:47.000 --> 00:07:54.700
Also wear a bit of a product project management manager hat and define projects and research potential tools.

00:07:54.700 --> 00:07:59.220
And if they're out there, maybe we can, you know, containerize them or maybe build our own.

00:07:59.220 --> 00:08:05.520
I mean, I also even talk to customers and see where we can be meeting their needs with the code that we're writing.

00:08:05.520 --> 00:08:06.980
Well, it sounds really interesting.

00:08:06.980 --> 00:08:16.920
I think this is one of the situations where people have some skill already, like really solid skill, like you have molecular biology, right?

00:08:16.920 --> 00:08:19.040
And programming makes that better.

00:08:19.040 --> 00:08:21.400
It's not like, oh, forget this biology.

00:08:21.500 --> 00:08:23.160
I'm just going to go become a programmer, right?

00:08:23.160 --> 00:08:26.080
I want to do React with, you know, JavaScript, right?

00:08:26.080 --> 00:08:28.420
It's just like, how do I do what I'm doing better?

00:08:28.420 --> 00:08:28.660
Yeah.

00:08:28.660 --> 00:08:29.380
Yeah, absolutely.

00:08:29.380 --> 00:08:32.340
I was trying to be affirmative, assertive.

00:08:32.340 --> 00:08:33.160
Yeah.

00:08:33.160 --> 00:08:33.540
Yeah.

00:08:33.540 --> 00:08:33.820
Yeah.

00:08:34.580 --> 00:08:34.900
Yeah.

00:08:34.900 --> 00:08:36.040
I think, I mean, same thing.

00:08:36.040 --> 00:08:48.740
I think that joy, like you were coming, you know, from the economy side of things where it's like being able to integrate the knowledge you already have and just enhance the knowledge you already have and just make, see those problems that you've seen in the past, however many years you've been in that field.

00:08:48.740 --> 00:08:52.340
And then all of a sudden be able to solve them with some code is really exciting.

00:08:53.100 --> 00:08:53.500
Absolutely.

00:08:53.500 --> 00:09:01.280
You know, I was trained as an economist in undergrad and graduate level studies for, God, almost a decade.

00:09:01.280 --> 00:09:08.700
And the most valuable part of the training is to help you identify questions that needs to be answered.

00:09:09.260 --> 00:09:16.000
And it's with Python for the first time, I feel I have so many tools to answer those questions.

00:09:16.000 --> 00:09:23.700
But as you said, Carly, sometimes you're wearing the product manager head and you need to identify what is the need of your client.

00:09:23.700 --> 00:09:31.340
And in my case, I need to identify what is the pain point for a policymaking and use the domain knowledge we have.

00:09:31.340 --> 00:09:36.440
We can identify those points very specifically and then use the tools such as Python.

00:09:36.440 --> 00:09:38.700
We can solve it so much more efficiently.

00:09:38.700 --> 00:09:39.100
Yeah.

00:09:39.100 --> 00:09:39.700
Absolutely.

00:09:39.700 --> 00:09:42.280
Ned, you want to introduce yourself as well?

00:09:42.280 --> 00:09:42.520
Yeah.

00:09:42.520 --> 00:09:51.180
So let me just start off by saying that as a beginner in both molecular biology and policy analysis, I am a little intimidated to be on this panel with all these experts.

00:09:51.180 --> 00:09:53.140
Absolutely.

00:09:53.140 --> 00:09:55.840
So I'm a software engineer with a long career.

00:09:55.840 --> 00:09:58.180
I'm deeply embedded in the Python world.

00:09:58.180 --> 00:10:02.500
I organize the Boston Python user group.

00:10:02.500 --> 00:10:06.920
I've given PyCon talks at, I think, 10 different PyCons.

00:10:07.620 --> 00:10:09.480
I'm a maintainer for coverage.py.

00:10:09.480 --> 00:10:11.500
I hang out in the Python IRC channel.

00:10:11.500 --> 00:10:14.540
I really need to find another hobby in my life of some sort.

00:10:14.540 --> 00:10:16.100
I do everything with Python.

00:10:16.100 --> 00:10:16.380
Yeah.

00:10:16.380 --> 00:10:17.220
You and me both.

00:10:17.220 --> 00:10:21.700
I'm not going to introduce myself, but I'm both a beginner and expert, just as you said, Ned.

00:10:21.700 --> 00:10:22.940
Exactly.

00:10:23.220 --> 00:10:26.700
Certainly in the biology and the policy side of things.

00:10:26.700 --> 00:10:32.060
So I want to start this conversation off by talking about something that you wrote, Ned.

00:10:32.060 --> 00:10:32.460
Yeah.

00:10:32.460 --> 00:10:39.060
Highlighting the beginners and experts perspective from somebody who's been doing it a long time, right?

00:10:39.060 --> 00:10:44.940
When somebody's a beginner, they are just always bumping into sharp edges of the technology.

00:10:45.220 --> 00:10:46.500
Oh, why does this not work?

00:10:46.500 --> 00:10:51.540
Oh, why is this, you know, why won't this thing install on this machine and all that kind of stuff, right?

00:10:51.540 --> 00:10:56.340
But you talk about how, well, in some ways, those sort of feelings and those challenges don't go away.

00:10:56.340 --> 00:11:01.080
So maybe you want to quickly summarize your beginners and experts article or essay.

00:11:01.080 --> 00:11:04.580
This got started almost two years ago when I was working on a side project.

00:11:04.580 --> 00:11:09.960
And as I talked about various aspects of that side project, first at a lightning talk at work,

00:11:09.960 --> 00:11:13.680
and then I wrote a blog post about something I was struggling with about it.

00:11:13.680 --> 00:11:18.140
And I realized that over the course of that summer, as I was working on that project,

00:11:18.140 --> 00:11:21.780
that I was feeling like a beginner in lots of ways.

00:11:21.780 --> 00:11:25.580
There are aspects of it that I knew exactly what to do, but there were aspects of it where,

00:11:25.580 --> 00:11:28.980
you know, I was Googling on Stack Overflow to figure out, you know,

00:11:28.980 --> 00:11:30.340
how do I make this thing do a thing?

00:11:30.340 --> 00:11:36.740
And that beginners often feel like that they are having trouble because they are a beginner

00:11:36.740 --> 00:11:42.520
and that their plan is I will learn everything and eventually I will be an expert.

00:11:42.520 --> 00:11:45.420
And once I am an expert, like all these other experts I see,

00:11:45.420 --> 00:11:47.900
then I won't have those problems anymore.

00:11:47.900 --> 00:11:49.780
I, you know, I will know what to do.

00:11:49.780 --> 00:11:54.900
And I won't have these confusing mornings where everything seems wrong and backwards

00:11:54.900 --> 00:11:56.320
and I can't make anything work.

00:11:56.320 --> 00:11:57.120
Just nothing works.

00:11:57.120 --> 00:11:58.020
Why does this not work?

00:11:58.020 --> 00:11:58.940
Why does this not work?

00:11:58.940 --> 00:11:59.500
Right.

00:11:59.600 --> 00:12:01.460
Michael, what you just described, right?

00:12:01.460 --> 00:12:03.920
The sharp edges and why doesn't this install on that machine?

00:12:03.920 --> 00:12:10.360
I don't know how you knew what I did this Monday, but yes, that's the way my days often are.

00:12:10.360 --> 00:12:15.440
So beginners think experts know everything and there's no friction in their development tool

00:12:15.440 --> 00:12:16.940
chain and cycles and all that stuff.

00:12:16.940 --> 00:12:22.340
But what you'll know once you become an expert is that experts don't know everything.

00:12:22.340 --> 00:12:25.100
Experts are constantly encountering new things.

00:12:25.100 --> 00:12:27.380
Joy, you just mentioned that you do a lot of pandas.

00:12:27.380 --> 00:12:30.280
I have done maybe two things with pandas.

00:12:30.280 --> 00:12:31.980
And one of them was literally last night.

00:12:31.980 --> 00:12:38.140
And I was Googling on Stack Overflow to ask, how do I know what the names of the columns in a pandas data frame are?

00:12:38.140 --> 00:12:38.980
Right.

00:12:38.980 --> 00:12:41.740
Which is super basic because I don't know anything about pandas.

00:12:41.880 --> 00:12:42.380
Oh, Nat.

00:12:42.380 --> 00:12:47.260
I've done countless nights of mine spent looking at Stack Overflow.

00:12:47.520 --> 00:12:48.480
Yes, exactly.

00:12:48.480 --> 00:12:56.620
And the thing I was trying to drive home with, I eventually wrote this blog post and I did a talk at Boston Python about it.

00:12:56.620 --> 00:13:05.140
And the point I was trying to drive home was that although I stand before you as a sort of acknowledged expert in Python, I often have no idea what I'm doing.

00:13:05.860 --> 00:13:11.080
And the real difference between beginners and experts isn't that beginners know nothing and experts know everything.

00:13:11.080 --> 00:13:21.180
But that beginners think that this feeling is either going to last forever because they're dumb or it's going to eventually go away because they've learned everything.

00:13:21.180 --> 00:13:24.680
Whereas experts know this is a very familiar feeling.

00:13:24.680 --> 00:13:29.580
I have been in situations lots of times where I don't understand what's going on.

00:13:29.980 --> 00:13:34.260
And because I've been in that situation lots of times, I know I'm going to get through it.

00:13:34.260 --> 00:13:35.880
I have some tools.

00:13:35.880 --> 00:13:44.480
I have some strategies that I can use to get through this difficult part and end up back again in a place where I know how to do things.

00:13:44.480 --> 00:13:50.420
Either because I've put that problem behind me or because I've learned the solution to that problem and I can now apply that solution.

00:13:50.420 --> 00:13:59.640
And one of the bumper sticker slogans that I'm thinking of using about this is that an expert is just someone who's been a beginner many, many, many times.

00:13:59.640 --> 00:14:01.260
Over and over again.

00:14:01.260 --> 00:14:07.980
The expert goes back to being a beginner and comes out of it and so has cycled through that learning curve over and over again.

00:14:07.980 --> 00:14:08.640
That's super interesting.

00:14:08.640 --> 00:14:13.380
And it's basically you get really good at, all right, how do I interpret this error message?

00:14:13.380 --> 00:14:16.320
What places was I able to Google or search or arrive?

00:14:16.320 --> 00:14:17.180
What the answer is?

00:14:17.180 --> 00:14:19.740
Where did I find an example that I could borrow and adapt?

00:14:19.740 --> 00:14:22.140
Like those are the kinds of things you get better at.

00:14:22.140 --> 00:14:27.400
And then the calmness of like, yeah, this is really frustrating, but it's just like last week.

00:14:27.400 --> 00:14:29.380
And I know by lunchtime it'll be fine.

00:14:29.380 --> 00:14:30.260
We'll figure this out.

00:14:30.260 --> 00:14:31.280
But right, it doesn't go away.

00:14:31.280 --> 00:14:31.580
Right.

00:14:31.580 --> 00:14:34.680
Or I know that this is a thing that I really do have to master.

00:14:34.680 --> 00:14:37.920
So I'm going to use my good learning strategies for it.

00:14:37.920 --> 00:14:43.000
Or I know this is a problem that I just need to put some duct tape over right now and then I can forget about it.

00:14:43.000 --> 00:14:45.060
So I'll just use my quick hack strategies for this.

00:14:45.060 --> 00:14:45.560
There you go.

00:14:45.560 --> 00:14:46.640
Stack Overflow for that one.

00:14:46.640 --> 00:14:49.640
Yeah, I never use Stack Overflow for the real learning strategies.

00:14:49.640 --> 00:14:51.200
No, I would never do that.

00:14:51.200 --> 00:14:51.780
Never.

00:14:51.780 --> 00:14:52.960
Of course not.

00:14:52.960 --> 00:14:54.540
That would be wrong, Ned.

00:14:54.540 --> 00:14:58.840
Cece, let me ask you, how do you look at experts?

00:14:58.960 --> 00:15:03.860
Do you feel like all these people who have been doing this for a long time, like Ned, they've just got it all figured out?

00:15:03.860 --> 00:15:07.440
Or do you connect a little bit more with his perspective of what he's writing here?

00:15:07.580 --> 00:15:10.700
Yes, I do understand what Ned is talking about.

00:15:10.800 --> 00:15:16.360
In my perspective, sometimes I feel like experts do know everything.

00:15:17.160 --> 00:15:23.340
There are some people who have started coding at like nine years old.

00:15:23.340 --> 00:15:29.100
It's hard to believe that that person still has those frustrations when you started coding when you were nine years old.

00:15:29.560 --> 00:15:33.740
In my view, I'll be seeing you as someone who knows everything about coding you.

00:15:33.740 --> 00:15:38.140
Every error you come across, you'll be able to fix it in a minute.

00:15:38.640 --> 00:15:48.680
But as I've been growing in coding, I'm seeing that as I learn more, as I learn new things every day, those frustrations keep coming back.

00:15:49.120 --> 00:15:58.800
And I keep going through the same process again of encountering an error and then having to fix it, getting the frustration and everything.

00:15:58.800 --> 00:16:06.540
So experts and beginners, we are more on the same level if we try to look at it.

00:16:06.900 --> 00:16:15.240
Just like Ned said, experts are beginners who have been going through the frustrations over and over and over again.

00:16:15.240 --> 00:16:17.800
That's true.

00:16:17.800 --> 00:16:21.360
Yeah, I think like not unique either just to like developers.

00:16:21.360 --> 00:16:26.240
I feel like scientists make good programmers because we're so familiar with failure.

00:16:26.240 --> 00:16:31.660
Because like when you set up experiments in the lab, like, you know, a negative result is still a result.

00:16:31.860 --> 00:16:36.780
But you're getting so many negative results is so infrequent that you have a eureka moment.

00:16:36.780 --> 00:16:40.820
And so, but I feel like that kind of helped me a little bit with programming too.

00:16:40.820 --> 00:16:42.640
It's like, I try something and it doesn't work.

00:16:42.640 --> 00:16:44.800
It's like, all right, well, that's, you know, just check that off.

00:16:44.800 --> 00:16:46.420
I'll move on to the next thing.

00:16:46.420 --> 00:16:48.140
Like a negative result is still a result.

00:16:48.140 --> 00:16:49.820
That's right.

00:16:49.820 --> 00:16:53.820
It's kind of like the Thomas Edison, I've learned 3,000 ways not to build a light bulb.

00:16:53.820 --> 00:16:55.060
That's where you're going, right?

00:16:55.400 --> 00:17:07.900
That is really interesting when you say how you know the learning strategy and the tools so that you're confident that you're going to be able to solve the problem either today or tomorrow.

00:17:07.900 --> 00:17:11.520
And for me, you know, in data science, we talk about this black box.

00:17:11.520 --> 00:17:16.660
For me, the path to gaining that confidence is almost like a black box to me.

00:17:16.880 --> 00:17:20.160
As a beginner, we learn very practical skills.

00:17:20.160 --> 00:17:23.160
We learn all commands in pandas here and there.

00:17:23.160 --> 00:17:29.320
But from here to having the confidence to solve a problem that's never been encountered by us before,

00:17:29.320 --> 00:17:35.340
gaining that confidence for me is definitely something very interesting to learning more about.

00:17:35.340 --> 00:17:37.700
It's hard to get to that point, right?

00:17:37.700 --> 00:17:43.960
To feel like you will be able to tackle whatever problem you encounter, whether it's a molehill or a mountain.

00:17:44.380 --> 00:17:48.200
And honestly, I think one of the good strategies is to not try to solve everything.

00:17:48.200 --> 00:17:53.200
I've seen some beginning learners who, they'll put it this way, they want to understand everything.

00:17:53.200 --> 00:17:56.240
Everything, they either mean very, very broad, right?

00:17:56.240 --> 00:17:58.360
I want to read the entire Python standard library.

00:17:58.360 --> 00:18:00.580
I want to know all of it, which it's just too big.

00:18:00.580 --> 00:18:01.140
You can't do it.

00:18:01.140 --> 00:18:02.600
Or they mean very, very deep.

00:18:02.600 --> 00:18:06.000
I want to know how Python's implemented, like what's really down under there.

00:18:06.000 --> 00:18:10.480
And sometimes I've seen people get taunted, like, so you want to know how transistors are made?

00:18:10.480 --> 00:18:13.400
Like, how deep down are you really talking about here?

00:18:14.020 --> 00:18:20.380
And beginners, I love that optimism and hunger and veracity that a beginner like that can have.

00:18:20.380 --> 00:18:24.320
But they're going to have to realize that they're not going to be able to do that.

00:18:24.320 --> 00:18:28.800
And at some point, they're just going to have to say, there's a thing right over there I could learn about.

00:18:28.800 --> 00:18:32.440
And I'm just not going to learn about it because I have to go and do this other thing over here.

00:18:32.440 --> 00:18:33.960
That's another kind of strategy.

00:18:33.960 --> 00:18:35.540
I know enough to solve this problem.

00:18:35.540 --> 00:18:35.980
We're good.

00:18:35.980 --> 00:18:36.240
Yeah.

00:18:36.520 --> 00:18:42.640
What you just said is both very reassuring to a beginner like myself, but also very intimidating.

00:18:42.640 --> 00:18:44.160
Weirdly.

00:18:44.160 --> 00:18:44.880
Yes.

00:18:44.880 --> 00:18:45.900
It's the same time.

00:18:46.000 --> 00:18:53.700
One of the things I said in the blog post is, you know, the good news for beginners is that, you know, experts aren't significantly different than you.

00:18:53.700 --> 00:18:55.160
They've just had a lot more experience.

00:18:55.160 --> 00:19:00.860
But the bad news for beginners is this bad feeling you have where you're confused and mystified and frustrated.

00:19:01.340 --> 00:19:03.480
You're going to have that for the rest of your career.

00:19:03.480 --> 00:19:04.920
I mean, I've already run into that.

00:19:04.920 --> 00:19:09.160
I feel like even I've been doing this, I guess, for two years officially.

00:19:09.160 --> 00:19:11.100
And I've run into that many times.

00:19:11.100 --> 00:19:18.720
And each time I hit that where I'm like, I've started coding something and I'm like, oh, no, I don't know if I can actually do this.

00:19:18.720 --> 00:19:24.180
But then somehow, you know, like I take a step back, I go back and then actually getting beyond that feeling.

00:19:24.380 --> 00:19:28.300
Like the next time I hit it, I'm like, all right, I already had this terrible feeling before.

00:19:28.300 --> 00:19:31.080
I know I can get past this.

00:19:31.080 --> 00:19:40.880
So I think maybe just the like kind of dulling your senses to that feeling of like, oh, my gosh, you know, like this is a huge, huge hill to climb.

00:19:40.880 --> 00:19:41.740
Right.

00:19:41.740 --> 00:19:42.940
Yeah, that's really interesting, Carly.

00:19:42.940 --> 00:19:49.660
I remember when I was first, the first couple years I was working as a professional developer, I didn't have much experience before.

00:19:49.660 --> 00:19:54.040
So it was both awesome and super frustrating and scary at the same time.

00:19:54.180 --> 00:19:59.260
And I remember often taking 15 minute walks around the office park.

00:19:59.260 --> 00:20:00.120
I'm just like, you know what?

00:20:00.120 --> 00:20:02.440
I just I just got to step away for a minute.

00:20:02.440 --> 00:20:03.380
It's sunny outside.

00:20:03.380 --> 00:20:06.700
I'll be back and I can just I can clear my mind and do this.

00:20:06.700 --> 00:20:08.720
And I guess I don't really do that that much anymore.

00:20:08.720 --> 00:20:16.420
But yeah, I think you get less emotionally frustrated, but you still are bumping into these sharp edges.

00:20:16.420 --> 00:20:17.700
You're just like, why does this not work?

00:20:17.700 --> 00:20:21.340
Like, it's I've done this for a year and it's the same.

00:20:21.340 --> 00:20:21.880
Why is it not?

00:20:21.880 --> 00:20:23.420
You know, just like, what is going on today?

00:20:23.420 --> 00:20:23.700
Right.

00:20:23.820 --> 00:20:24.000
Yeah.

00:20:24.000 --> 00:20:29.660
One of the big challenges, I think that Ned, I'd love to hear your thoughts on this, but I'm going to ask the ladies first.

00:20:29.900 --> 00:20:40.860
One of the really big differences, I think, is the beginners have a harder time deciding how to start to solve a problem.

00:20:41.180 --> 00:20:49.520
As an expert, you can look at something and go, oh, that needs we got to parse this file type and we're going to use the database and probably we're going to use an ORM and we're going to wire it together like this.

00:20:49.520 --> 00:20:52.320
And then, you know, we go and bump into the sharp edges of those things.

00:20:52.320 --> 00:20:56.160
But we kind of know roughly how to attack the problem.

00:20:57.360 --> 00:21:00.540
And I think that a lot of beginners are like, I don't know how to start.

00:21:00.540 --> 00:21:01.460
I see what you did.

00:21:01.460 --> 00:21:02.200
This was amazing.

00:21:02.200 --> 00:21:05.600
I have no idea how I would ever come up with that idea to get there.

00:21:05.600 --> 00:21:08.000
Like, how does that like, does that resonate with you all?

00:21:08.000 --> 00:21:08.440
Definitely.

00:21:08.820 --> 00:21:15.040
I mean, this is just kind of when you're given a problem and you're just like, oh, okay.

00:21:15.040 --> 00:21:17.440
Now, where do I start?

00:21:17.440 --> 00:21:22.780
You know, like when you're taking an introductory class or any of those, it's like, this is what we're going to do and this is how we're going to solve it.

00:21:22.780 --> 00:21:30.500
You know, or I mean, I know that like last week I had, I was trying to solve a problem and I ended up coding probably like 200 lines of code.

00:21:30.500 --> 00:21:33.620
And then I was going to set up kind of a sanity check with a colleague.

00:21:33.620 --> 00:21:38.180
And I was thinking about how to explain this problem to that person.

00:21:38.460 --> 00:21:40.240
I realized a much simpler solution.

00:21:40.240 --> 00:21:45.160
So I basically got rid of all that and then just was able to solve it with a few lines of code.

00:21:45.160 --> 00:21:56.220
And I think kind of having that perspective like of stepping back and like knowing like the tools to solve it, you know, like if you've already kind of solved something indirectly that's similar to it.

00:21:56.220 --> 00:22:01.300
And I think that was my issue last week was I had never solved anything similar to that problem before.

00:22:01.300 --> 00:22:06.220
So I didn't know like the tools to be able to solve it in the most efficient way.

00:22:06.740 --> 00:22:11.140
So I kind of spent a long time making a really long solution to it.

00:22:11.140 --> 00:22:14.240
And then realizing that there was a much more direct route.

00:22:14.240 --> 00:22:25.300
And I think, yeah, I think that familiarity with like seeing things done one way and then just dealing with the little details is definitely tough being a beginner because you haven't seen a lot of examples of the way a problem is solved.

00:22:27.520 --> 00:22:31.100
This portion of talk Python to me is brought to you by Linode.

00:22:31.100 --> 00:22:34.860
Are you looking for hosting that's fast, simple, and incredibly affordable?

00:22:34.860 --> 00:22:39.920
Well, look past that bookstore and check out Linode at talkpython.fm/Linode.

00:22:39.920 --> 00:22:41.880
That's L I N O D E.

00:22:41.880 --> 00:22:46.260
Plans start at just $5 a month for a dedicated server with a gig of RAM.

00:22:46.560 --> 00:22:48.460
They have 10 data centers across the globe.

00:22:48.460 --> 00:22:52.280
So no matter where you are or where your users are, there's a data center for you.

00:22:52.280 --> 00:23:06.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 seven friendly support, even on holidays, and a seven day money back guarantee.

00:23:06.720 --> 00:23:08.340
Need a little help with your infrastructure?

00:23:08.340 --> 00:23:13.060
They even offer professional services to help you with architecture, migrations, and more.

00:23:13.280 --> 00:23:16.000
Do you want a dedicated server for free for the next four months?

00:23:16.000 --> 00:23:19.080
Just visit talkpython.fm/Linode.

00:23:19.080 --> 00:23:38.860
From my experiences, when I first started learning Python about two years ago, it's relatively easy to learn about the specific tools, to learn about pandas, to learn about object-oriented programming, to be able to write a couple of lines of code and make it up and running.

00:23:39.460 --> 00:23:49.320
But the real problem for me, and this might be just beginners' ignorance at this point, I think the tools are relatively easier to acquire and there are concrete examples out there.

00:23:49.320 --> 00:23:55.760
And if you run into a very specific problem, there are people out there, you can ask them, there is stack overflow.

00:23:56.480 --> 00:24:00.840
But the real problem comes in for me when it comes to the structure.

00:24:00.840 --> 00:24:09.980
How do I arrange the tools in my toolbox to identify, solve, and reassess my own solution to a specific problem?

00:24:09.980 --> 00:24:17.900
And that's when, I think it was roughly two years into learning Python by myself, I started to realize,

00:24:18.340 --> 00:24:25.060
okay, right now the real problem for me is not to solve one specific problem to get the name of the column,

00:24:25.060 --> 00:24:34.780
but to actually identify the problem and put it in a framework that I know how to extract the features and how to solve it.

00:24:34.780 --> 00:24:36.140
And that's when I started.

00:24:36.140 --> 00:24:39.460
For the first time, I was just taking a lot of online classes.

00:24:39.780 --> 00:24:47.040
For the first time, I joined, I don't know if I'm supposed to say this, but I joined data science training at General Assembly,

00:24:47.040 --> 00:24:51.840
which gives you a much deeper understanding about just ideology.

00:24:51.840 --> 00:24:57.080
From structurally speaking, how to think about the problem as a data science problem,

00:24:57.080 --> 00:25:01.600
as opposed to economics problem, which I'm very comfortable with,

00:25:01.720 --> 00:25:06.680
but it's not the best way to solve, to get answers that we are looking for.

00:25:06.680 --> 00:25:11.780
Joy, that's exactly, I think being able to become familiar with the tools is something that is really helpful,

00:25:11.780 --> 00:25:14.980
because knowing the tools that can help solve your problems is really important.

00:25:14.980 --> 00:25:19.840
Because if you don't know a general idea of what some libraries or tools can do,

00:25:19.840 --> 00:25:23.000
then you might, like me, start writing it from scratch.

00:25:23.000 --> 00:25:26.280
And then be like, oh, there's something that I can do.

00:25:26.280 --> 00:25:28.800
Why did I just keep installing the magic?

00:25:31.200 --> 00:25:35.560
So, like, I think that that's, you know, like, and the more you're around and you have, like,

00:25:35.560 --> 00:25:39.340
those water cooler conversations and you hear about, like, tools that other people are using,

00:25:39.340 --> 00:25:43.160
and then you can kind of apply those tools to problems that you have.

00:25:43.160 --> 00:25:49.840
I think it's kind of exposure to the domain, I think, can really help speed up answering problems.

00:25:49.840 --> 00:25:53.100
But that's, I mean, it's tough as a beginner because you don't have that exposure yet.

00:25:53.100 --> 00:25:54.400
Yeah, and it's super hard to learn.

00:25:54.400 --> 00:25:56.700
It's not very well taught anywhere, I would say.

00:25:56.700 --> 00:26:01.180
Cece, how do you feel about this idea of, like, how do I even get started solving a problem?

00:26:01.180 --> 00:26:04.600
I can relate to what you're saying, Mike.

00:26:04.600 --> 00:26:09.980
There are times that I come across challenges that I do not know where exactly to start solving the challenge.

00:26:09.980 --> 00:26:17.080
When I started working at Dimension Data, I came across this site, the PyBytes site, where they have challenges.

00:26:17.080 --> 00:26:19.220
Their challenges are so awesome.

00:26:19.700 --> 00:26:21.660
And I started taking those challenges.

00:26:21.660 --> 00:26:24.060
I started with the beginner challenges, of course.

00:26:24.380 --> 00:26:32.240
And when I read the challenges, some of them are so simple that I can think, I can do this in, like, one minute.

00:26:32.240 --> 00:26:39.080
But when I go into the editor and try to write some code, my brain freezes, and then I have nothing.

00:26:39.920 --> 00:26:42.040
Yes, that's how I feel sometimes.

00:26:42.040 --> 00:26:56.840
But as I continue taking the challenges on PyBytes, I realize that after some period of time, and I can relate to other challenges that I've done before and be like, oh, last week I did less combinations.

00:26:56.840 --> 00:27:00.060
I think I can apply that to this challenge.

00:27:00.060 --> 00:27:05.240
That's how experts feel like they have exposure, just like Joy said.

00:27:05.240 --> 00:27:17.280
They have exposure to more tools to use and what you can do to solve challenges, which I think the first step of deciding what to use when solving a challenge is the most important.

00:27:17.280 --> 00:27:27.220
When you're facing a challenge, rather than just jumping in to try and solve the challenge without even thinking through what tools you can use to solve the challenge.

00:27:27.220 --> 00:27:28.360
That's really interesting.

00:27:28.360 --> 00:27:31.760
And I think you doing the PyBytes challenge makes a lot of sense.

00:27:31.760 --> 00:27:34.860
Bob and Julian are doing great stuff with their Code Challenges platform.

00:27:34.860 --> 00:27:36.900
So I think that practice helps.

00:27:36.900 --> 00:27:44.600
I do want to say I feel, I totally agree with Ned that we, as experts, we run into these things where it's like, wow, this is so frustrating.

00:27:44.600 --> 00:27:45.540
Why doesn't this work?

00:27:45.780 --> 00:27:47.580
Why can't I make this silly thing?

00:27:47.580 --> 00:27:49.580
You just do whatever it's supposed to.

00:27:49.580 --> 00:27:50.600
And it feels very similar.

00:27:50.600 --> 00:27:55.660
But what I think is very different is when you approach a problem, you're like, I see, I've solved this kind of before.

00:27:55.660 --> 00:27:58.560
And we did this major thing, this major thing, and that major thing.

00:27:58.560 --> 00:28:00.300
And it kind of clicked.

00:28:00.300 --> 00:28:03.380
And you can sort of break the problem down into these smaller bits.

00:28:03.380 --> 00:28:07.840
And you have this history of I've kind of solved this data problem like four or five times like this.

00:28:07.840 --> 00:28:08.920
It's probably like that.

00:28:08.920 --> 00:28:09.900
Let me try that first.

00:28:09.900 --> 00:28:13.100
I think those building blocks are a huge differentiator.

00:28:13.100 --> 00:28:14.720
And that gets way, way easier.

00:28:15.140 --> 00:28:17.260
Ned, what do you think about my idea here?

00:28:17.260 --> 00:28:17.840
No, definitely.

00:28:17.840 --> 00:28:24.620
As someone with a long career, I've been in lots of different projects and written lots of different code.

00:28:25.000 --> 00:28:31.660
So I have sort of a long tail of patterns that I can match against, right?

00:28:31.660 --> 00:28:32.520
We get a new problem.

00:28:32.520 --> 00:28:34.340
This reminds me of something.

00:28:34.340 --> 00:28:36.920
I can either just remember what I did before.

00:28:36.920 --> 00:28:38.680
I can literally go and find the code.

00:28:39.020 --> 00:28:44.360
Often, I can do something quickly at work because previously in a side project, I had to solve that problem.

00:28:44.360 --> 00:28:46.780
And I could do it at my leisure on a side project.

00:28:46.780 --> 00:28:50.360
But then I've got the code in place that I can just go and grab for a work thing.

00:28:50.360 --> 00:28:56.600
But I have to say, Titi just said that she would read Python bytes, think, oh, I can do this.

00:28:56.600 --> 00:28:58.580
And then she gets in her editor and her brain freezes.

00:28:58.860 --> 00:29:00.460
That happens to me too.

00:29:00.460 --> 00:29:02.280
Exactly that feeling.

00:29:02.280 --> 00:29:07.040
I can't tell you how many times I'm waking up in the morning and I think, I know what I'm going to hack on before breakfast.

00:29:07.040 --> 00:29:08.080
This is going to be great.

00:29:08.080 --> 00:29:10.000
And then I get into Vim and I'm like, you know what?

00:29:10.000 --> 00:29:10.960
This is actually hard.

00:29:10.960 --> 00:29:13.160
I don't know what to do right here.

00:29:13.380 --> 00:29:17.780
Like, maybe I was just still in kind of that foggy dream state and I thought it was easy.

00:29:17.780 --> 00:29:19.800
But right now, it's actually hard.

00:29:19.800 --> 00:29:23.420
And I'm not going to make the kind of progress over this cereal bowl that I thought I was going to make.

00:29:23.420 --> 00:29:25.280
And that's just programming.

00:29:25.280 --> 00:29:29.740
It's really hard to be specific enough to tell a computer exactly what to do.

00:29:29.740 --> 00:29:30.960
It just is.

00:29:30.960 --> 00:29:37.580
And so, sometimes you think it's going to be a thing and it turns out to be harder than that.

00:29:37.580 --> 00:29:43.120
I think a lot of it, the pattern matching is really the way I think of it in terms of going back into your experience.

00:29:43.120 --> 00:29:46.340
I was working with an intern last summer and we were debugging a problem.

00:29:46.340 --> 00:29:49.240
And I said, I think it's going to be, this is the solution.

00:29:49.240 --> 00:29:51.640
And he asked me, like, how did you know that was the solution?

00:29:51.640 --> 00:29:55.320
And I felt like, well, in the logs, there was a zero.

00:29:55.320 --> 00:29:57.640
And over here, there was a none.

00:29:57.640 --> 00:29:59.720
And zero and none are kind of the same.

00:29:59.720 --> 00:30:04.100
And they were both kind of out of place in each niche.

00:30:04.100 --> 00:30:07.840
And so, I kind of put those two things together and what would make that happen.

00:30:07.840 --> 00:30:12.240
And so, there's a lot of pattern matching in solving problems,

00:30:12.320 --> 00:30:15.440
either to decide how to get started on a thing or to debug a thing.

00:30:15.440 --> 00:30:22.280
And just being, going through it a number of times over the years gives you more of a sense of sort of like,

00:30:22.280 --> 00:30:27.500
what's the anomaly in this environment that I should be focusing on to debug the problem?

00:30:27.500 --> 00:30:33.220
Or how do I break this big problem into smaller chunks, two of which are familiar and one of which is unfamiliar,

00:30:33.220 --> 00:30:36.540
so that I can just do the familiar ones quickly and then focus on the unfamiliar.

00:30:36.540 --> 00:30:42.540
And that kind of cognitive pattern matching, I think, is a skill that you develop over time.

00:30:42.540 --> 00:30:44.300
You definitely develop it over time.

00:30:44.300 --> 00:30:50.620
What I've been wondering and kind of searching for the last six months is how can you fast track that?

00:30:50.620 --> 00:30:57.100
What I've been wanting to do is build a class that basically says, here are a bunch of problems.

00:30:57.100 --> 00:31:02.500
How, as an experienced person, do you go through the idea of even starting to attack the problem?

00:31:02.620 --> 00:31:07.080
You know, almost forget, like, here's the details of an ORM or an API.

00:31:07.080 --> 00:31:13.220
It's just like, how do I even begin to put this into parts that then I can attack with code?

00:31:13.220 --> 00:31:14.600
What do you think?

00:31:14.600 --> 00:31:15.500
Like, how would you do that?

00:31:15.500 --> 00:31:19.080
For instance, what I just said was, oh, this is the anomaly that I'll focus on.

00:31:19.080 --> 00:31:23.360
Well, to a beginner, the entire log file is new and different and exotic, right?

00:31:23.360 --> 00:31:24.180
So how do you know?

00:31:24.180 --> 00:31:24.660
It's a scrambled mess.

00:31:24.660 --> 00:31:25.960
How do you know what's the important part?

00:31:25.960 --> 00:31:29.080
What's the regular normal part of this gobbledygook?

00:31:29.080 --> 00:31:29.700
I don't know.

00:31:29.700 --> 00:31:32.940
So, yeah, that is a thorny problem.

00:31:32.940 --> 00:31:39.180
How to get that kind of facility with the normal versus the weird in our environments.

00:31:39.180 --> 00:31:43.000
I think it can be done, but I don't really quite have a great sense on how it is.

00:31:43.400 --> 00:31:53.240
So somebody presents a problem to you, like, hey, I need you to get this data that we got off of our experiment, and I want you to clean it up and analyze it and show it in this way.

00:31:53.240 --> 00:31:54.440
You know, something to that effect.

00:31:54.440 --> 00:32:01.360
Like, conceptually, that's really easy, but when you try to actually look at what are the actual steps my program has to do?

00:32:01.360 --> 00:32:03.240
What are the actual big ideas?

00:32:03.240 --> 00:32:04.560
Like, okay, we're going to read this file.

00:32:04.560 --> 00:32:07.160
Okay, we're going to, you know, try to transform this data.

00:32:07.160 --> 00:32:14.020
Just like those big steps, I feel like, are the challenge to, once you identify them, then it kind of becomes an easier problem to solve.

00:32:14.020 --> 00:32:20.380
But how do you help beginners learn to identify those, sort of break the problem down like that, do you think?

00:32:20.380 --> 00:32:24.780
One of the problems I think beginners have, just to jump in, is to think like a computer.

00:32:24.780 --> 00:32:36.080
We're not used to having to think so specifically about each tiny little step that we can then write the code that does what we need to do, right?

00:32:36.080 --> 00:32:43.940
A lot of beginners will, I'll say, well, tell me in English what it is you want this program to do, and they'll give me one sentence of the whole thing.

00:32:43.940 --> 00:32:45.020
It's got to browse the web.

00:32:45.020 --> 00:32:48.640
Well, there's little bits and pieces in browse the web, right?

00:32:48.640 --> 00:32:49.700
So let's break it down.

00:32:49.700 --> 00:32:53.520
And that's very difficult for some people to do because we're not used to thinking that way, right?

00:32:53.520 --> 00:32:56.160
I can say to a person, go to the store and get the milk.

00:32:56.160 --> 00:32:57.920
And they're like, okay, I'll go to the store and get the milk.

00:32:57.920 --> 00:33:01.360
I didn't need to break it down into all the little pieces, right?

00:33:01.360 --> 00:33:04.240
You can find videos online of people playing with their kids.

00:33:04.440 --> 00:33:05.140
I'm a robot.

00:33:05.140 --> 00:33:06.820
Tell me how to make a peanut butter and jelly sandwich.

00:33:06.820 --> 00:33:08.320
And the kid tries to tell them what to do.

00:33:08.320 --> 00:33:16.240
And the dad just literally follows the instruction and makes a total mess of the thing because the kid's not used to explaining how do you get the lid off of a peanut butter jar?

00:33:16.240 --> 00:33:17.740
The computer is that dad.

00:33:21.340 --> 00:33:23.900
This portion of Talk Python To Me is brought to you by Ting.

00:33:23.900 --> 00:33:30.620
Let me tell you about Ting, a new mobile service available in the U.S. that's targeted developers and other technically savvy folks.

00:33:30.620 --> 00:33:35.540
First of all, their average customer only pays $23 a month, but they're no discount provider.

00:33:35.540 --> 00:33:39.360
Their service runs over T-Mobile's and Sprint's fast nationwide network.

00:33:39.360 --> 00:33:45.240
If you don't use that much data because you're usually on Wi-Fi, like many of you are, then Ting will save you a ton of cash.

00:33:45.540 --> 00:33:49.660
But don't worry, you can still use as much data as you like for just $10 per gig.

00:33:49.660 --> 00:33:51.980
One mobile feature I use all the time is tethering.

00:33:51.980 --> 00:33:56.480
And with Ting, you get unlimited tethering at the same data rate with your account.

00:33:56.480 --> 00:34:02.360
$6 a month for a phone line, $10 a gig, $3 a month for text if you usually chat over iMessage or WhatsApp.

00:34:02.360 --> 00:34:03.540
Think about it.

00:34:03.560 --> 00:34:06.280
No contracts and super clear and fair billing.

00:34:06.280 --> 00:34:08.560
Visit python.ting.com.

00:34:08.560 --> 00:34:12.980
That's python.ting.com and check out their savings calculator.

00:34:12.980 --> 00:34:15.620
Enter your usage and see exactly what you'd pay.

00:34:15.620 --> 00:34:19.400
Use that link and you'll get a $25 credit to try them as well.

00:34:19.400 --> 00:34:22.640
That's python.ting.com or just click the link in the show notes.

00:34:24.720 --> 00:34:30.820
I mean, that's a really interesting way to put it where you're like, I'm just going to go to the store, but you're like, you know, get in the car and do all these things.

00:34:30.820 --> 00:34:35.720
So it's kind of when you say that, it kind of like picture like a flow chart in my head.

00:34:35.720 --> 00:34:39.200
Like, so with like a problem, generally, is there some type of data?

00:34:39.200 --> 00:34:40.260
Like, is it in a file?

00:34:40.260 --> 00:34:41.200
Is it a stream?

00:34:41.200 --> 00:34:42.420
Is it like from the web?

00:34:42.500 --> 00:34:44.740
Like, so and how do you how do you access that data?

00:34:44.740 --> 00:34:45.580
Where is that data going?

00:34:45.580 --> 00:34:56.920
So like kind of following the trail of the data and what needs to happen to that data at each point really dictates the way you will program something, whether it's a file or whether it's a stream or, you know.

00:34:56.920 --> 00:35:04.660
And so I think kind of following that the trail of data and then kind of making choices on that can help break things down.

00:35:04.660 --> 00:35:05.040
Right.

00:35:05.120 --> 00:35:12.500
And one of the fundamental characteristics of the software world that we've put ourselves in is that there are unlimited levels of complexity.

00:35:12.500 --> 00:35:15.560
And so we deal with abstractions all the time.

00:35:15.560 --> 00:35:21.540
And another challenge for beginners is accepting an abstraction and using it.

00:35:21.540 --> 00:35:32.320
And in a way, breaking down a problem for a computer is all about setting up those barriers between the two halves of the problem and dealing with them separately rather than thinking of them as a whole.

00:35:32.320 --> 00:35:32.800
Right.

00:35:32.840 --> 00:35:36.760
So when I said when we said go to the store and get some milk, well, step one is get in the car.

00:35:36.760 --> 00:35:38.180
Step two is drive the car to the store.

00:35:38.180 --> 00:35:40.380
That step two is awfully complicated.

00:35:40.380 --> 00:35:40.680
Right.

00:35:40.680 --> 00:35:43.340
Ask the people who are building self-driving cars right now.

00:35:43.340 --> 00:35:46.280
So there's an abstraction there that we're willing to deal with.

00:35:46.280 --> 00:35:46.440
Right.

00:35:46.440 --> 00:35:47.900
You turn the wheel, the car turns.

00:35:47.900 --> 00:35:48.520
Right.

00:35:48.520 --> 00:35:50.520
Sometimes you have to debug that abstraction.

00:35:50.520 --> 00:35:52.400
Sometimes you just have to accept that abstraction.

00:35:52.720 --> 00:36:01.520
And moving up and down those levels of abstractions and just ignoring some of them, what's underneath some of them, but debugging what's underneath some other ones.

00:36:01.520 --> 00:36:06.020
It's a huge maze of distractions and complexity that beginners can get lost in.

00:36:06.020 --> 00:36:07.640
So that's just another skill.

00:36:07.640 --> 00:36:10.940
I think it sort of touches upon the point I was talking about before.

00:36:10.940 --> 00:36:19.440
The really difficult part for a beginner may come from how to extract structure and abstraction out of a very complex problem.

00:36:19.440 --> 00:36:27.980
When we're talking about making a peanut butter sandwich, then for a beginner, he or she doesn't necessarily know what are the steps to do so.

00:36:27.980 --> 00:36:34.100
Once you have the steps to do so, you can Google how to open the peanut butter jar.

00:36:34.100 --> 00:36:37.240
You can Google how to put a bread into the toaster oven.

00:36:37.240 --> 00:36:46.620
And I think the difficult part is actually building that structure, having that mental structure to know which step is after another one.

00:36:46.620 --> 00:36:53.580
And for me personally, a lot of the, it was about two years getting to Python studies.

00:36:53.580 --> 00:36:55.360
It started to click for me.

00:36:55.360 --> 00:37:07.860
To some extent, I feel like the building the structure of to solve, building the structure of a solution to a problem is just like any type of analytical thinking.

00:37:07.860 --> 00:37:14.460
You need to identify the problem and then you need to have five to seven steps to resolve a problem.

00:37:14.700 --> 00:37:24.760
And then going into each of the every single step to look into the tools, the practical solutions to every single bottleneck that we need to overcome.

00:37:24.760 --> 00:37:36.240
And for example, I'm an economist and I was looking at U.S.-China trade war and people keep asking this million dollar question, which is, what is going to be the cost of the trade war?

00:37:36.440 --> 00:37:38.820
Is the U.S. economy going to be impact?

00:37:38.820 --> 00:37:43.140
And it's such a great question, but it's so complex.

00:37:43.140 --> 00:37:54.960
But then once you break it down into how about let's look at the first industry, the second industry and the service industry and look at the impact on all three industries by the trade war.

00:37:55.340 --> 00:38:00.880
And then you have a structure to go into there to find the data, to extract information out of the data.

00:38:00.880 --> 00:38:05.280
And once you compile them together, you're answering an awfully complex question.

00:38:05.280 --> 00:38:06.500
That's a good way to break it down.

00:38:07.220 --> 00:38:13.320
You know, Ned, something that came to mind is you were describing these being willing to accept an abstraction, right?

00:38:13.320 --> 00:38:16.060
Like you don't actually care how the CPU makes it work.

00:38:16.060 --> 00:38:19.420
I just know if I type this and I hit run, it runs, right?

00:38:19.440 --> 00:38:21.880
Like I'm willing to just not even worry.

00:38:21.880 --> 00:38:26.820
It's like there's a gray layer that I just am willing to kind of accept.

00:38:26.820 --> 00:38:32.820
And I think that those layers of abstraction happen a lot in programming at different levels, right?

00:38:32.820 --> 00:38:37.360
Like I'm willing to use an ORM and I'm willing to call save and I don't care how the database works.

00:38:37.360 --> 00:38:45.740
Or I need to dig in and understand the full third normal form theory of relational data and get obsessed about that, right?

00:38:45.740 --> 00:38:48.260
Like there's totally different levels there.

00:38:48.260 --> 00:38:53.320
And I think one of the challenges when you're first learning is what is the right level?

00:38:53.320 --> 00:38:57.440
When can I ignore the nuanced details of the database?

00:38:57.440 --> 00:39:01.040
And when am I going to be like, when is that like critical to make that right?

00:39:01.040 --> 00:39:08.120
So choosing the level of abstraction, I think also tells you like what kind of tools and APIs and packages you can use even.

00:39:08.120 --> 00:39:10.800
Right. Well, and the fact, I mean, you've already chosen Python, right?

00:39:10.800 --> 00:39:17.860
Which means that there's certain kinds of things other programmers and other languages have to worry about that you don't have to worry about.

00:39:17.860 --> 00:39:18.180
Right.

00:39:18.180 --> 00:39:19.180
Malloc anyone?

00:39:19.180 --> 00:39:20.920
Exactly.

00:39:20.920 --> 00:39:21.260
Right.

00:39:21.260 --> 00:39:22.900
You don't have to allocate and deallocate memory.

00:39:23.040 --> 00:39:31.180
And if you're working in data science, like Joy is, then you've got Pandas and Pandas provides you this really high level abstraction of a data frame that does all sorts of things.

00:39:31.180 --> 00:39:41.620
You know, that five years ago before Pandas was around, if we wanted to do that analysis, even in Python, we'd be writing 100 lines of code just to sum an average or whatever it is we need to do.

00:39:41.620 --> 00:39:41.860
Right.

00:39:41.860 --> 00:39:45.520
You try to build it with dictionaries and lists and other more fundamental things.

00:39:45.520 --> 00:39:45.740
Right.

00:39:45.740 --> 00:39:46.100
Exactly.

00:39:46.100 --> 00:39:46.440
Yeah.

00:39:46.540 --> 00:39:49.440
You have to decide what level you're going to be working at.

00:39:49.440 --> 00:39:52.520
And sometimes you can go down a level just because you're fascinated by it.

00:39:52.520 --> 00:39:56.600
Like maybe you want to know how transistors work and how a CPU is made out of transistors.

00:39:56.600 --> 00:40:04.600
But if you're trying to write a Python program and you can't get it done because you're obsessed about transistors, you're not going to be able to finish the Python program.

00:40:04.600 --> 00:40:06.180
You have to leave that to someone else.

00:40:06.180 --> 00:40:07.420
You have to assume that's going to work.

00:40:07.420 --> 00:40:07.680
Yeah.

00:40:07.680 --> 00:40:14.200
It's fine to be obsessed about some nuanced detail, but you shouldn't conflate it with trying to solve your problem if it's not relevant.

00:40:14.200 --> 00:40:16.200
And I think making that distinction is the challenge.

00:40:17.080 --> 00:40:17.240
Yeah.

00:40:17.240 --> 00:40:17.640
Yeah.

00:40:17.640 --> 00:40:19.300
Cece, how about you?

00:40:19.300 --> 00:40:24.300
How do you see like trying to find the right level to think about these problems?

00:40:24.300 --> 00:40:26.900
You talked about working with APIs, for example.

00:40:26.900 --> 00:40:29.940
Like that takes a lot of getting your head around.

00:40:29.940 --> 00:40:34.160
And you can either say, I call this function and the data comes back as JSON.

00:40:34.160 --> 00:40:40.200
Or you can say, well, there's all this HTTP headers and all this exchange and the right.

00:40:40.200 --> 00:40:42.140
Like there's a lot of details you could get into.

00:40:42.140 --> 00:40:44.160
Like how did you think about working with those problems?

00:40:44.540 --> 00:40:52.520
Well, for me, I think that there really is no problem when you're facing a challenge to write what you're supposed to do down.

00:40:52.520 --> 00:40:59.760
Like what you learn when you're learning the basics, the flow charts and how to do algorithms.

00:40:59.760 --> 00:41:10.140
I think even when you're an expert, it's okay to just jot down what you're supposed to do and write all the simple steps that you're supposed to do.

00:41:10.140 --> 00:41:14.520
And in those simple steps, decide exactly what you're supposed to do.

00:41:14.760 --> 00:41:17.080
Like what Joy mentioned.

00:41:17.080 --> 00:41:22.160
Those are the steps that will guide you into the challenge that you're facing.

00:41:22.740 --> 00:41:32.720
So for me, I've been learning to do that when I face a challenge that I really can't solve within five or ten minutes.

00:41:32.720 --> 00:41:37.720
Maybe after some deep thinking, I'll write down what I'm supposed to do.

00:41:37.720 --> 00:41:41.160
In those simple steps, work on each one by one.

00:41:41.160 --> 00:41:46.980
If we can all adapt on that concept, I think it will be easier for everyone.

00:41:47.400 --> 00:41:55.460
Because when you're a beginner, there's an age to go and Google your challenges on Stack Overflow.

00:41:55.460 --> 00:42:00.160
And just get in answer straight away from Stack Overflow.

00:42:00.160 --> 00:42:05.260
And a piece of code and paste it into your editor.

00:42:05.260 --> 00:42:11.860
But then the problem is when you paste code from Stack Overflow, that code is going to bring more bugs.

00:42:11.860 --> 00:42:19.200
Rather than going step by step and understanding each step that you're supposed to do, I think it's an easier way.

00:42:19.560 --> 00:42:30.960
And I've learned that the hard way myself because I did projects where, after projects where, most of the times, I just need to take code from Stack Overflow.

00:42:30.960 --> 00:42:38.740
But at the end of the day, I will still be having a ton of bugs that I have to debug for the code to record.

00:42:39.020 --> 00:42:45.400
Yeah, the danger with Stack Overflow can be, you know, it might solve the problem, but then it has all these other issues.

00:42:45.400 --> 00:42:51.320
And if you take too many of those pieces together and don't understand what they do, you can end up with something that's really hard to take care of.

00:42:51.320 --> 00:42:55.640
Because you're like, if I change this, it breaks, but I just don't really know why.

00:42:55.640 --> 00:42:58.480
And that can be super frustrating.

00:42:58.480 --> 00:43:07.240
And this, you know, touches a little bit on what Ned talked about earlier, where sometimes, you know, this part doesn't really matter that much.

00:43:07.240 --> 00:43:09.860
I just need this to work and I'm going to never worry about it again.

00:43:09.860 --> 00:43:13.280
So let me just grab that thing from Stack Overflow, jam it in there and we're good.

00:43:13.280 --> 00:43:15.300
And other times it's really important.

00:43:15.300 --> 00:43:18.180
Ned, how would you help people make that distinction?

00:43:18.180 --> 00:43:19.820
That can be hard too.

00:43:19.820 --> 00:43:23.560
I mean, that unfortunately requires predicting the future, which no one knows how to do.

00:43:23.560 --> 00:43:27.400
So, I mean, I was dealing with this a few days ago.

00:43:27.400 --> 00:43:36.980
I was trying to automate creating AWS instances and I was stuck in like Googling, finding things that didn't work, that didn't seem to go together.

00:43:36.980 --> 00:43:38.880
When I thought they'd go together, I didn't understand.

00:43:38.880 --> 00:43:45.100
At the time, I knew that I just needed a little thing and if it could just do the thing, it could be crappy.

00:43:45.100 --> 00:43:48.580
And I knew exactly who at work I could go and talk to when I wanted to make it nice.

00:43:48.580 --> 00:43:52.940
You kind of have to decide what do you want to be an expert in and what don't you want to be an expert in.

00:43:52.940 --> 00:43:55.420
I'm personally not, I don't want to be an expert in DevOps.

00:43:55.420 --> 00:43:58.900
I don't want to know everything about how to make servers on AWS.

00:43:58.900 --> 00:44:01.120
I just need sometimes to have one.

00:44:01.120 --> 00:44:03.920
So, I'm not going to dive into that, right?

00:44:03.920 --> 00:44:05.320
And it doesn't interest me.

00:44:05.320 --> 00:44:08.520
What config setting do I need to put here to make my website run?

00:44:08.520 --> 00:44:09.700
Okay, I'm putting that.

00:44:09.700 --> 00:44:10.180
Thank you.

00:44:10.380 --> 00:44:22.480
So, one of the things I've learned in my long career is that almost everything, when I approach it as a new thing and I've got a mental model of what that thing is going to be like, it's always at least three times more complicated than I thought it was going to be.

00:44:22.480 --> 00:44:24.200
Which, it makes sense.

00:44:24.200 --> 00:44:28.060
Like, why if I know nothing about a thing, will I have an accurate mental model of that thing?

00:44:28.600 --> 00:44:32.600
But I'm constantly surprised at just how much more complex real things can be.

00:44:32.600 --> 00:44:37.040
Things generally tend to be way more complicated than you estimate them to be in so many ways.

00:44:37.040 --> 00:44:38.760
And you just kind of got to accept that, right?

00:44:38.760 --> 00:44:39.380
That's right.

00:44:39.420 --> 00:44:43.620
So, we're kind of getting near the end and I want to ask a couple more questions.

00:44:43.620 --> 00:44:45.940
So, let me start with this one.

00:44:45.940 --> 00:45:04.260
As people who just learned to program are just really getting your feet underneath you as programmers, you know, what advice do you all have for maybe other people who are thinking of getting into programming or they're also close to the same level as you?

00:45:04.260 --> 00:45:05.380
Joy, let's start with you.

00:45:05.380 --> 00:45:06.460
I think keep going.

00:45:06.740 --> 00:45:13.240
Keep going is the number one advice I've gave to anyone who is starting, just started to learn programming.

00:45:13.240 --> 00:45:21.620
It's very easy to feel frustrated and just give it up after one try, second try, third try.

00:45:21.620 --> 00:45:25.640
I wasn't the only one who started programming two years ago.

00:45:25.640 --> 00:45:30.520
And I think, unfortunately, I'm one of the few who are still doing it.

00:45:30.520 --> 00:45:34.240
And one thing that really helped me was to join this.

00:45:34.780 --> 00:45:37.320
It's called Chipy, Chicago Python user group.

00:45:37.320 --> 00:45:39.740
They have a weekly meeting.

00:45:39.740 --> 00:45:44.300
And sometimes I go just with a bunch of friends who are full-time developers.

00:45:44.300 --> 00:45:47.940
They work on their set projects in a coffee shop.

00:45:47.940 --> 00:45:49.980
And I just join them.

00:45:49.980 --> 00:45:52.540
You know, not necessarily I'm going to learn.

00:45:52.540 --> 00:45:58.920
I'm going to bug them a lot or learn a lot directly from them because we work on a completely different set of problems.

00:45:59.120 --> 00:46:10.320
But just having that schedule, having that mental space that every Saturday, one o'clock in the afternoon to five o'clock in the afternoon is data science time, is Python time.

00:46:10.320 --> 00:46:18.440
I think for me, that's at moments of frustration and moments of I may, why don't I just give it up already?

00:46:18.440 --> 00:46:20.840
Those are really the things that kept me going.

00:46:20.840 --> 00:46:21.800
That's an interesting part.

00:46:21.800 --> 00:46:33.480
I think having somebody to ask those questions of, even if you don't like bug them a lot, just every now and then be able to go, you know, I've been stuck on this for six hours.

00:46:33.600 --> 00:46:34.700
I know it is easy.

00:46:34.700 --> 00:46:38.480
Could you just tell me, like, what is the thing I'm doing wrong?

00:46:38.480 --> 00:46:43.060
And a lot of times, if you have somebody to ask that question of, I think it can make a big difference.

00:46:43.060 --> 00:46:44.440
Because you could go to Stack Overflow.

00:46:44.440 --> 00:46:47.840
People are going to be mean that you maybe don't know how to phrase the question quite right.

00:46:47.840 --> 00:46:49.460
Like, it can be really frustrating.

00:46:49.460 --> 00:46:52.280
But having just a little bit of a community like you talked about is nice.

00:46:52.280 --> 00:46:53.480
Cece, how about you?

00:46:53.480 --> 00:46:55.720
Advice for people who are getting into programming?

00:46:55.720 --> 00:47:00.620
I think the most surprising thing that I learned when I got into programming is how simple it is.

00:47:00.620 --> 00:47:08.060
Before I started programming, I thought programmers are people who have some level of IQ or some superpower.

00:47:08.060 --> 00:47:15.880
But then I just realized that you can just pass commands to the computer and then it can do exactly what you want it to do.

00:47:16.400 --> 00:47:22.680
So, for those who would like to start programming, I think I would just say you should just go for it.

00:47:22.680 --> 00:47:24.880
Because anyone can do it.

00:47:24.880 --> 00:47:32.460
Anyone can be a programmer as long as you have a passion for it and you really want to achieve something in your life.

00:47:32.460 --> 00:47:35.620
Mostly to make time for programming.

00:47:35.620 --> 00:47:38.300
Because I think that is the most important factor.

00:47:38.300 --> 00:47:41.300
To make time to practice for programming.

00:47:41.780 --> 00:47:43.640
It is difficult for most people, I know.

00:47:43.640 --> 00:47:48.180
And most people struggle with making time to practice their programming.

00:47:48.180 --> 00:47:53.560
So, making time is very important so that you don't forget what you learned yesterday.

00:47:53.560 --> 00:47:56.060
And then you have to start all over again.

00:47:56.060 --> 00:48:01.280
And I'd like to support Carly as well on joining communities.

00:48:01.280 --> 00:48:02.820
That has helped me a lot.

00:48:02.820 --> 00:48:05.760
I have a lot of communities that I am a part of.

00:48:05.760 --> 00:48:08.440
And I get to ask questions.

00:48:08.440 --> 00:48:10.140
And people reply me.

00:48:10.140 --> 00:48:11.500
And that is very helpful.

00:48:11.700 --> 00:48:17.680
Being a part of a community with like-minded people who are doing the same thing that they are doing is awesome.

00:48:17.680 --> 00:48:18.960
Yeah, it makes a huge difference.

00:48:18.960 --> 00:48:23.580
And I think I really connect with this idea that you just talked about.

00:48:23.580 --> 00:48:30.580
That before I was a programmer, I looked at people who are programmers and I'm like, wow, now that is a smart person right there.

00:48:30.580 --> 00:48:32.740
Like, there's no way I can do what they...

00:48:32.740 --> 00:48:33.540
There's just no way.

00:48:33.540 --> 00:48:39.540
But as you get into it, what I've realized is to be really good at programming.

00:48:39.540 --> 00:48:41.340
And Joy, this also touches on what you said.

00:48:41.400 --> 00:48:42.780
I feel like persistence.

00:48:42.780 --> 00:48:46.480
Like, how did I know to do this thing to make the program work?

00:48:46.480 --> 00:48:48.880
Well, because I tried 15 other things.

00:48:48.880 --> 00:48:50.160
And this was the 16th.

00:48:50.160 --> 00:48:50.740
And now it worked.

00:48:50.740 --> 00:48:52.060
And so problem solved, right?

00:48:52.060 --> 00:48:54.900
Like, if you just go, well, I tried it and it didn't work.

00:48:54.900 --> 00:48:55.700
So I quit.

00:48:55.700 --> 00:48:57.060
Like, that is not...

00:48:57.060 --> 00:48:58.220
It just doesn't work that way.

00:48:58.220 --> 00:49:00.080
Like you said, Carly, it's kind of like an experiment.

00:49:00.080 --> 00:49:01.880
You have to try a bunch of stuff.

00:49:01.920 --> 00:49:03.900
And eventually, something will work.

00:49:03.900 --> 00:49:06.160
But it really requires persistence.

00:49:06.160 --> 00:49:08.960
And I think that that's more important than being super smart.

00:49:08.960 --> 00:49:09.460
It's okay.

00:49:09.460 --> 00:49:09.980
Yeah, Carly?

00:49:10.040 --> 00:49:12.180
Yeah, I definitely agree with all of that, for sure.

00:49:12.180 --> 00:49:16.980
Just kind of ripping the bandaid off and solving a problem that you're interested in and just

00:49:16.980 --> 00:49:19.460
kind of just start jumping in on it.

00:49:19.680 --> 00:49:23.960
And also going to, like, groups, like, meetups or...

00:49:23.960 --> 00:49:26.280
Because I went to a Python meetup a lot and still do.

00:49:26.280 --> 00:49:26.960
And that...

00:49:26.960 --> 00:49:29.720
Just being around people who are taking, like, their evenings to go and do...

00:49:29.720 --> 00:49:34.040
They're going to be really, like, supportive and excited to share and answer questions.

00:49:34.040 --> 00:49:41.420
And also, when I kind of related to that, like, when I was started at my job, I know I felt...

00:49:41.420 --> 00:49:45.960
Struggled a little bit, feeling like I wasn't contributing and still just, like, trying to get familiar with the code base.

00:49:45.960 --> 00:49:54.680
And I ended up just reaching out to one of my colleagues and just, I think, showing genuine interest in what your colleagues are doing and their, like, domain of expertise.

00:49:54.680 --> 00:49:55.580
I was...

00:49:55.580 --> 00:49:57.600
I think that's really, really helpful for a beginner.

00:49:57.600 --> 00:50:05.280
So I specifically worked with our head of security and helped develop, like, static and dynamic code scans that would run, like, at build time.

00:50:05.280 --> 00:50:09.040
And this was, like, a win-win because I was able to contribute early on.

00:50:09.040 --> 00:50:13.640
And my colleague was able to see progress being made in an area that they were interested in.

00:50:13.900 --> 00:50:24.360
And even if it's just for a short time, having that, like, kind of moral support and camaraderie and mentorship, like, with someone at your company can be really, really helpful to kind of get off the ground at a company.

00:50:24.360 --> 00:50:24.980
Yeah, absolutely.

00:50:24.980 --> 00:50:29.500
So leverage the relationships you already have to kind of get a mentor almost.

00:50:29.500 --> 00:50:32.360
So maybe we could round this conversation out.

00:50:32.360 --> 00:50:33.740
We're getting long on time here.

00:50:33.740 --> 00:50:35.080
We don't have much time.

00:50:35.580 --> 00:50:39.400
Maybe a closing thought here, Ned, on one of your other articles.

00:50:39.400 --> 00:50:41.080
You talked about toxic experts.

00:50:41.080 --> 00:50:43.660
And I don't want to necessarily take all the time to go into too much detail.

00:50:43.660 --> 00:50:52.520
But your conclusion was, like, a lot of the experts bemoan the fact that there's a lot of people in the industry that don't know that much.

00:50:52.520 --> 00:50:54.640
And, like, that missing knowledge is one of the problems.

00:50:54.640 --> 00:50:59.500
But your conclusion was that really empathy is something that we need to make sure we have enough of.

00:50:59.580 --> 00:51:04.680
I want to get a chance to answer your question about what beginners should do as they're getting started.

00:51:04.680 --> 00:51:06.460
I'll quickly give some advice to beginners.

00:51:06.460 --> 00:51:09.040
The first is just know yourself.

00:51:09.040 --> 00:51:11.420
And, for instance, how you learn best.

00:51:11.420 --> 00:51:14.040
I see beginners come in and say, what's the best way to learn Python?

00:51:14.040 --> 00:51:16.860
And that really depends on how you like to learn.

00:51:16.860 --> 00:51:21.720
Like, I, as an expert, might say, oh, you definitely have to read a 600-page book from cover to cover.

00:51:21.720 --> 00:51:24.220
But maybe you actually like 10-minute videos better.

00:51:24.220 --> 00:51:28.440
So just know what works for you and do it.

00:51:28.560 --> 00:51:33.040
And if someone gives you advice that you know doesn't work for you, that doesn't mean that you're doing it wrong.

00:51:33.040 --> 00:51:34.860
That means that they don't know who you are.

00:51:34.860 --> 00:51:40.880
Which kind of gets into the toxic expert idea, which is that there are people who know a lot.

00:51:40.880 --> 00:51:45.960
And they can be bad sources of help in a bunch of ways.

00:51:45.960 --> 00:51:52.520
One of the risks that in any walk of life, not just programming, is that you know your own insides really well.

00:51:52.720 --> 00:51:58.920
And you can look at someone's outsides and make a conclusion about their insides and compare and feel bad.

00:51:58.920 --> 00:52:01.900
But that's because you're comparing your insides to their outsides.

00:52:01.900 --> 00:52:05.240
So, for instance, there's a lot of stuff I don't know.

00:52:05.240 --> 00:52:06.940
But you don't know that I don't know that.

00:52:06.940 --> 00:52:10.740
All you see is all my answers on Stack Overflow or all the code I'm maintaining.

00:52:10.740 --> 00:52:12.320
And you think, wow, Ned knows everything.

00:52:12.320 --> 00:52:15.860
That's because I'm not writing blog posts about all the stuff I don't know.

00:52:16.240 --> 00:52:23.180
So, don't compare your insides where you know all the stuff you don't know and all your doubts to my outsides where I'm just like, hey, I'm great.

00:52:23.180 --> 00:52:26.220
Look at all my awesome tweets or whatever it is I'm doing on social media.

00:52:26.220 --> 00:52:29.640
So, there was a great keynote by Jacob Kaplan Moss.

00:52:29.640 --> 00:52:31.960
I forget how many PyCon's ago.

00:52:31.960 --> 00:52:36.840
Jacob is one of the benevolent dictators of Django, or at least he was at the time.

00:52:36.840 --> 00:52:39.400
He helped create Django and ran the Django project.

00:52:39.400 --> 00:52:40.960
So, he was well known for that.

00:52:40.960 --> 00:52:45.500
And he did a keynote at PyCon basically entitled, I am a mediocre programmer.

00:52:45.500 --> 00:52:48.920
And he talked about all the stuff he doesn't know how to do.

00:52:48.920 --> 00:52:50.820
And honestly, it was a little eye-opening.

00:52:50.820 --> 00:52:53.500
Like, I thought, wow, Jacob, you don't know how to do that?

00:52:53.500 --> 00:52:54.020
Okay.

00:52:54.020 --> 00:52:56.960
That's surprising to me because you run the Django project.

00:52:56.960 --> 00:53:05.900
But it's just a good demonstration of the idea that experts are not the superpowers that beginners might think they are.

00:53:05.900 --> 00:53:10.660
And we are in a culture where we don't expose our failures, right?

00:53:10.660 --> 00:53:13.920
To get back to Carly's scientific world, right?

00:53:13.920 --> 00:53:17.020
Scientists typically don't publish their failed experiments.

00:53:17.020 --> 00:53:19.020
And programmers typically don't.

00:53:19.020 --> 00:53:23.680
Michael didn't publish his 15 failed attempts at getting the database to work, right?

00:53:23.680 --> 00:53:33.440
So, it's really easy to look at all the successes that people are trumpeting and conclude that your little failed program indicates that you are bad and they are good.

00:53:33.440 --> 00:53:34.340
And it's just not true.

00:53:34.640 --> 00:53:39.680
So, that's my advice to beginners is know yourself and don't judge your insides by other people's outsides.

00:53:39.680 --> 00:53:40.860
Yeah, that's great advice.

00:53:40.860 --> 00:53:41.220
Yeah.

00:53:41.220 --> 00:53:44.720
Want to make a quick call for empathy to everyone out there listening?

00:53:44.720 --> 00:53:45.160
Yes.

00:53:45.160 --> 00:53:46.200
So, for empathy, yeah.

00:53:46.200 --> 00:53:57.580
A lot of experts are really good at writing complex code and really bad at understanding what beginners know and don't know, caring about the beginner's path that they're on.

00:53:57.820 --> 00:54:04.040
This all got started because one of the things that came out of that side project is I wrote a piece explaining the big O notation.

00:54:04.240 --> 00:54:07.920
And one of the comments on the piece was, you should be ashamed of this post.

00:54:08.420 --> 00:54:17.800
And this guy thought I should be ashamed of the entire post because he had a quibble about one sentence in it, which even after looking into it, I still think he was wrong.

00:54:17.940 --> 00:54:25.160
But he thought that, like, I was a bad person because of this one technical detail about algorithmic analysis.

00:54:25.780 --> 00:54:29.460
Now, he might have, if he'd had a point, he could have said to me, hey, Ned, I love this piece.

00:54:29.460 --> 00:54:31.580
There's one little place where you could have done a little bit better.

00:54:31.580 --> 00:54:33.860
But he came in with a huge hammer and hit me over the head with it.

00:54:33.860 --> 00:54:35.880
That's not a way to teach people.

00:54:35.880 --> 00:54:37.980
Beginners, you are going to encounter these people.

00:54:37.980 --> 00:54:39.600
Just walk away from them.

00:54:39.600 --> 00:54:43.040
They may know more than you, but they're not going to be able to teach you.

00:54:43.040 --> 00:54:44.960
And it doesn't matter that they know more than you.

00:54:44.960 --> 00:54:45.660
They're bad people.

00:54:45.660 --> 00:54:46.400
Just skip them.

00:54:46.400 --> 00:54:50.620
That's pretty good advice for a lot of situations, right?

00:54:50.620 --> 00:54:51.000
Yeah, absolutely.

00:54:51.000 --> 00:54:52.040
Yeah, exactly.

00:54:52.040 --> 00:54:53.600
I think we're over time.

00:54:53.600 --> 00:54:55.500
So, let's go ahead and just leave it there.

00:54:56.340 --> 00:55:04.140
Carly, Joy, Cece, and Ned, thank you all for being on the show and sharing all of your advice from the different parts of the spectrum you're living on.

00:55:04.140 --> 00:55:04.440
It's great.

00:55:04.440 --> 00:55:05.160
Yeah, absolutely.

00:55:05.160 --> 00:55:05.800
Thank you.

00:55:05.800 --> 00:55:06.540
Yes, thank you.

00:55:06.540 --> 00:55:06.920
It's good.

00:55:06.920 --> 00:55:07.640
Thank you, Mike.

00:55:07.640 --> 00:55:08.340
Yeah, thanks.

00:55:08.340 --> 00:55:08.980
And bye, everyone.

00:55:08.980 --> 00:55:09.360
Bye.

00:55:09.360 --> 00:55:09.900
Bye.

00:55:09.900 --> 00:55:10.140
Bye.

00:55:10.140 --> 00:55:13.880
This has been another episode of Talk Python To Me.

00:55:13.880 --> 00:55:22.120
Our guests on this episode were Carly Cindy, Joy Dayton May, Cece Flora Muniqua, and Ned Batchelder.

00:55:22.120 --> 00:55:24.740
And it's been brought to you by Linode and Ting.

00:55:24.740 --> 00:55:28.980
Linode is your go-to hosting for whatever you're building with Python.

00:55:28.980 --> 00:55:32.520
Get four months free at talkpython.fm/linode.

00:55:32.520 --> 00:55:34.420
That's L-I-N-O-D-E.

00:55:34.420 --> 00:55:38.540
Ting is the fast mobile network custom built for technical folks.

00:55:38.540 --> 00:55:41.920
Use their savings calculator to see exactly what you'd pay.

00:55:41.920 --> 00:55:47.620
Visit python.ting.com to get a $25 credit and get started without a contract.

00:55:48.520 --> 00:55:50.200
Want to level up your Python?

00:55:50.200 --> 00:55:55.000
If you're just getting started, try my Python Jumpstart by Building 10 Apps course.

00:55:55.000 --> 00:56:03.160
Or if you're looking for something more advanced, check out our new async course that digs into all the different types of async programming you can do in Python.

00:56:03.160 --> 00:56:07.820
And of course, if you're interested in more than one of these, be sure to check out our Everything Bundle.

00:56:07.820 --> 00:56:09.700
It's like a subscription that never expires.

00:56:09.700 --> 00:56:12.000
Be sure to subscribe to the show.

00:56:12.000 --> 00:56:14.420
Open your favorite podcatcher and search for Python.

00:56:14.420 --> 00:56:15.640
We should be right at the top.

00:56:15.640 --> 00:56:20.480
You can also find the iTunes feed at /itunes, the Google Play feed at /play,

00:56:20.480 --> 00:56:24.620
and the direct RSS feed at /rss on talkpython.fm.

00:56:25.160 --> 00:56:26.720
This is your host, Michael Kennedy.

00:56:26.720 --> 00:56:28.220
Thanks so much for listening.

00:56:28.220 --> 00:56:29.300
I really appreciate it.

00:56:29.300 --> 00:56:31.040
Now get out there and write some Python code.

00:56:31.040 --> 00:56:51.600
I really appreciate it.

