Welcome to part two of our Beginners and Experts series.
This one is a panel format with seven different guests,
each one of them a beginner in their own way.
We dig deep into some of the follow-up conversations
from part one with these panelists.
On this episode, you'll meet Vanessa Angel,
Kelly Schuster-Paradez, Dane Parks, Scott Stoltzman,
Sergio Sanchez, Alex Caprazi, and Jason Picour.
This is Talk Python to Me, episode 205,
published April 2nd, 2019.
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 Linode and Rollbar.
Please check out what they're offering during their segments.
It really helps support the show.
In this first segment, we're just going to hear a little bit about the background of each of our panelists,
what their experience is with Python, what they do day to day,
so you know where they're coming from for the rest of their answers.
Now let's hear from Vanessa.
My name is Vanessa Angel.
I live in Anchorage, Alaska, and I'm a mom with three kids, nine, five, and two,
and I work as a petroleum engineer.
I just picked up Python within the last year to apply to my job,
and in the world of petroleum engineering, there's three main kinds.
The drilling engineer drills the hole.
Production engineer gets the oil from the bottom of the hole to the surface,
through the production facilities to the sales line.
And then the reservoir engineer, that's the last kind.
That's what I am.
We work with geologists and geophysicists who use tools like seismic, core sampling, logging,
to come up with an estimate of what the layer of rock that we're studying
that sits thousands of feet underground looks like.
You know, it's covering miles and miles, and we only have small data points in between.
So we use a lot of different types of data, a lot of time series data.
We have a lot of monitors in the field, and then we get a lot of inputs from the geologists
and geophysicists, and we build a lot of simulation models.
And using all that information together, we're trying to come up with estimates for predicted
oil rates if you drill a well, where oil's remaining, where we could drill more locations
and get more oil.
And for all of this, in general, I used to use Excel.
You know, we'd have databases of data, but you'd just pull it out and analyze it.
And learning Python has really transformed the way I do my job.
It's been really useful for all the data analysis, data wrangling, and then advanced
data techniques that you can apply that come built into packages in Python.
Now let's hear from Kelly.
Hi, my name is Kelly Schuster-Paredes, and I'm an education technology specialist and computer
science teacher at an independent school in Florida.
My day-to-day job consists of wrangling 11 to 13-year-old students and try to teach them
Python.
This is the first time they've scripted in Python in a language, so it's been a fun experience
this year.
I also support approximately 30 teachers in the school, in the middle school, with using
technology in their classroom.
And I do anything from helping them with an application, helping them with a Google Suite
product.
But our major and most fun part is getting the teachers into coding projects in their
curriculum.
And on a side job, my teaching partner, Sean Tyber, and I, we just launched a podcast called
TeachingPython.fm, where we discuss the daily findings, our triumphs, our learning of teaching
kids to code in Python.
It's been a fun podcast.
We started in December, and we have launched 15 episodes so far.
Here's Dane.
Hi.
Thanks for having me on the show.
My name's Dane.
I'm a civil engineer.
I've been working with Python for about four months now.
I have a little experience with some other programming languages, but I've never been in a professional
development role or anything of that nature.
I write code for personal use to try to assist with some of the more menial tasks I face day
to day.
And I work with computers that use proprietary specialized software a lot, like AutoCAD, MicroStation,
ArcGIS.
I had some programming classes in college, but certainly don't consider programming to play
a day-to-day role in my job expectations or anything like that.
I work for a company now that inspects bridges for state agencies.
So when you see a photo of those guys walking up on the suspension cables or dangling off
the side of a bridge in a basket, that's the kind of work I primarily do.
I do some design work as well and work associated with repairs found on the inspections.
There's a lot of record keeping and data being transmitted in my role.
Some of these bridges have thousands of components being inspected and recorded, and I deal with
the databases every day, which is why I originally got into Python.
I want to try to keep track of and manage the data I'm working with a little more efficiently
and get it to a more practical format when I needed it to be.
Here's Alexander.
Hi, my name's Alex.
I'm 42 years old, and I've been learning Python for about a year now.
I'm a certified fluid power specialist working for a hydraulic component rebuilder and distributor
in the Seattle area.
I've been in the industry for about 18 years.
So I came to Python.
I was kind of curious about programming, and someone told me that Python was a great place
to start.
It didn't take me long to realize that Python had a lot of potential to help me out with
my current job in regards to dealing with spreadsheets and scheduling, things of that nature.
A lot of the stuff that you'd find in Al Sweeker's Automate the Boring Stuff.
So I've been reading that and also taking the 100 Days of Python course through Talk Python FM.
So I've been enjoying that and building projects.
I've built a hydraulic calculator, and I've built a unit conversion tool.
And right now I'm working on a hydraulic library.
So I'm putting together a library with commonly used hydraulic formulas used in the industry.
So maybe that'll turn into an open source project.
So far, I've really enjoyed learning how to program.
I'm really excited to see where it takes me.
Now let's hear from Jason.
Hi, my name is Jason Pecor, and I spent about the first 10 years of my career doing semiconductor
design and verification.
So most of my coding experience historically has been using the languages like System Verilog
and VHDL that we use in that industry.
Did some Perl development, C, Tickle, and even a little bit of Python to kind of do like support
scripts and things that we would use as part of our verification environments, but never have
really been a true software developer as my full-time gig.
These days, my primary responsibility is focused on business development and marketing.
I'm one of the co-founders of a small company that does semiconductor design as well as some FPGA-based
embedded computing platforms for embedded systems, motion control, industrial IoT, and things like that.
So most of my work is spent on the sales and marketing kind of activities, but that also includes
doing YouTube videos and doing our social media stuff, which is really cool because that's where
I get to do demonstrations.
It allows me to get my hands kind of dirty with some coding and creating things.
I actually came back to Python about a year or so ago because I was working on a Raspberry
Pi project at home.
It was kind of during that time I was just looking for some help and I ran across the Talk Python
podcast and the Python Bytes podcast and I just love them and I just kind of started to get
really interested in Python in general.
And then in addition to that, one of the core things I care about right now that's Python
related is what's happening in the area of Python running on hardware.
So for example, MicroPython or Adafruit's fork of MicroPython, which they call CircuitPython,
is really interesting for microcontrollers and what they're doing there, a lot of activity.
And then there's a project called MyHDL where people are developing, that group is developing
a mechanism for using Python for actually doing ASIC and FPGA hard work types of design.
And ultimately, I'm very interested in Python as a high-level synthesis language.
So really enjoying learning Python and how it might apply to some of the things I'm currently
working on or interested in professionally.
Here's Scott.
Hi, my name is Scott Stoltzman.
I live in the beautiful city of Fort Collins, Colorado, where I recently became a father.
And it's been unsurprisingly more difficult to figure out than Python.
A few years ago, I started an analytics consulting business where I now work as a data scientist
and I provide services surrounding statistical modeling and analysis.
I've been using Python for about five years.
The first three years basically just utilized Jupyter Notebooks scripts with a lot of functions
and loops.
I think that was mostly driven by the fact that I had a R background in MATLAB where the majority
of work I needed to do didn't require any sort of custom classes.
And while functional programming produced a lot of value for me, I was eventually forced to
move on and utilize more classes in order to put my Python code into production.
My day-to-day work is focused on data acquisition, ETL, statistical modeling, and data visualization.
I focus on improving data integrity, increasing the value businesses get from their data, that
sort of thing.
My typical workflow consists of creating a data pipeline with Luigi, gathering data from APIs,
cleaning it all up and getting it ready for a Panda's data frame, ensuring accuracy with
stats models.
And I'm starting to consider PyJanitor.
And I set it up for an API endpoint with Flask.
I'd say I'm pretty dependent on Python.
It's played a critical role across the board from my smallest to largest clients.
I've used it for basic dashboards, using Dash, for businesses making 100K a year, maybe all
the way up to ETL for a state pension fund with billions in assets under management.
That kind of robustness has really been the driver for my success because I can focus on
the problem I'm solving rather than worrying about how I'm going to solve it.
Here's Sergio.
Hi, my name is Sergio Sanchez-Zavala.
I'm a research associate at PPIC, the Public Policy Institute of California.
My experience with Python is mostly on the data analytics and data visualization side of
things.
I do research on higher education public policy in California.
So I use a lot of publicly available census data.
And I use Jupyter Notebooks, Pandas, Altair, Jupyter Lab actually nowadays mostly to analyze this data and extract useful information for our legislature here in California.
The next question I wanted to ask everyone was, what has been the most challenging thing to learn programming and Python?
I feel like this is an important one to hear because often there's one or two things that are really hard and you push through learning some concept or you're solving some problem.
Once you've gone through that at a time or two, everything else after that becomes much more approachable.
All right.
Not necessarily easy.
There's still many things you don't know, but there's plenty of stuff you have solved.
And you can say, well, if I did that, I can do this other thing.
So let's hear what has been the most challenging on the path of learning to become a programmer.
Here's Alexander.
Yeah, surprisingly, it really hasn't been the programming concepts that have been presenting the greatest challenge.
It has been dealing with some of the external libraries like the UI libraries and dealing with the installation and navigating through some of the documentation.
Here's Dane.
So my college had a basic programming for engineering course that anyone in any of the engineering disciplines had to complete.
It was absolutely terrible.
They started us out with HTML, a couple Excel tips, and then we just kind of jumped straight into C.
Basically just had us go through the motions of how to create a simple app to do things like play Blackjack or Yahtzee, other things like that.
I think a lot of people had that experience where they were looking for a language that was useful.
So they started with C and it was just ended up being not the right language to start out with.
I remember one of the best professors I had had us write a basic code in MATLAB that performed a set of beam analysis calculations.
And I think that project was the only one I was assigned during school that really made me go, hey, programming could be incredibly useful to me in the future.
I don't think college really has the ability to prepare you for a career like people think it does going in, but more so gives you an introduction to a little bit of everything to help you find the thing that you enjoy doing.
I think it's really important career-wise for people to find something that they say, I'd be willing to do this in my free time and I'm not just going to do it basically to earn a paycheck.
Up until that point, my programming experience consisted of making some darts, scoring games and Excel spreadsheets and learning what was required to work with Ubuntu and Linux through Bash.
I built some PCs and I was able to do multiple OSs, those kinds of things.
I'm really happy with my choice of college overall, but there's one thing I'll hold against them.
It's that their technology program at the time for engineers was just absolutely terrible.
As far as challenges with Python, I think my biggest struggle has just been how expansive it is.
I can form simple functions with it, but when I got to the point where I wanted to write to its database, I had to get some basic SQL knowledge.
For web apps, I had to refresh what I knew about HTML and CSS.
There's a lot of things that can be accessed using Python as a springboard, but in order to get the program to do what you actually wanted to do, you end up getting a pretty good intro into a little bit of everything.
Now let's hear from Kelly.
I think the most challenging thing about learning to program for me was just getting started.
There's so much information out there in order for people to learn the basics so that when I was told I was going to be teaching Python last year, I started wondering, you know, where would I start in my preparation?
I've been teaching for a while, and I know how I would start students, but for some reason, I didn't know how to start them in learning how to code.
So with learning anything new, I had to stop and prepare my brain for this type of learning.
And then I started comparing myself to others and how well they code and how the information just came out and they were able to start typing.
I also didn't know really what my learning style would be for coding because it was something different than what I had done in the past.
And so I started ordering every book on the planet.
I would order Python for tweens and teens.
I ordered Python for kids.
I ordered Python for dummies.
I ordered the programming BBC Microbit, getting started with MicroPython.
And I kept, I just read the books thinking that it would be easy to pick up coding.
I knew the concepts.
I could say the vocabulary.
But I really wasn't into programming.
So I started watching videos, the Sendex videos and the Socrates videos.
And started listening to your show, Michael, talk Python to me.
And then what would happen was I had all this information and I still didn't consider myself a programmer because I had so many resources.
I just, and I would do all the resources.
And I kept finding new things that could be done with Python and I would read some more resources.
And I got a bit overwhelmed.
And so again, like the most challenging part about starting to program is just starting to program.
You can read as much information as you want.
But until you actually start trying to solve problems and write the code by yourself, you never really get the full understanding of what it's like to program.
Now let's hear from Vanessa.
The most challenging part about learning Python to me was in the beginning, just trying to get started and meet myself where I was at.
So I guess the way I imagined the whole process would work is that I would go online, find a snippet of code, kind of deconstruct it, figure out how it worked, and then apply that and be immediately useful.
But I hadn't had any computer programming in my history at all.
And I found that I didn't understand the context well enough to understand what any one line or word or symbol in that script meant.
And therefore, I couldn't use it usefully and I couldn't analyze it.
And I got frustrated early on.
And what I found was that I really needed to start from the very beginning.
I needed to have those intro classes.
What is a list?
What is a Boolean?
So once I realized that and I allowed myself to start as slowly as I needed to, I found that then I was able to get up and start making progress.
You know, just one step at a time.
It was surprising how easy it was.
Three months later, it felt like I'd been waiting slowly through this material.
But then three months later, I have these skills that I didn't have before.
And I can do these amazing things that I couldn't do before.
Here's Sergio.
I think the most challenging thing for me was being okay with not knowing anything and asking for help and understanding that, yeah, I don't know anything right now, but maybe eventually I will.
Because when I was in college, I signed up for this computer science class and the professor handed out this worksheet that said, if you cannot do this, you shouldn't be in this class.
I dropped that class and I didn't touch computer science or programming until after college.
And that was a huge fear when you're barely starting and you don't want to look dumb and you want to learn something.
If you want to learn something, obviously you do not know that thing.
And that's perfectly fine.
And the Python community is particularly great at welcoming beginners.
So it worked out.
But you have to get over that fear of looking dumb.
That was the most challenging thing for me, at least personally.
And a very close follow-up was having time for myself.
Setting up one hour, 30 minutes a day or every other day to actually sit down and write code.
Because you cannot learn programming by reading articles or listening to podcasts, or at least I can't.
You have to sit down and actually write some code to understand what you're doing and see the errors and be like, oh, I guess this doesn't work.
Oh, I didn't know this could work, but it did.
You know?
And then also you have your code and then you can start building on that.
It's just keeping track of everything.
Those are the two biggest challenges for me.
It's just, it's okay looking dumb.
Sometimes it's okay saying that you don't know something.
And actually having time to do it.
And not a lot of people have that privilege to have an extra hour a day or every other day to take up a new skill.
Now let's hear from Jason.
Well, when I came back to using Python again here recently in the like last year and a half or so,
it was really on the heels of starting to do more applied coding for our development platforms.
And we've designed our development platforms to play really nicely in the Arduino ecosystem.
And so most of the code I was writing was in the, it's really in C, but it's kind of like a abstracted version of C that Arduino came up with that runs in their development environment.
And I wanted to pick up Python for this project I was doing at home and wanted to learn that.
And I had done Perl before.
And so I thought, okay, well, it's going to be similar in a lot of ways to Perl and even similar, you know, programming languages from language to language.
You get different syntax, different ways to structure things, but a lot of the concepts are the same.
Well, the first thing I hit that I really didn't like was the indenting and I actually hated it.
I mean, I wanted my braces back.
I wanted a begin end something.
And really, it really came down to the fact that I kind of had my own personalized coding style with some things that if I could put an open brace and a closed brace on the same line for like really short if else statements and things like that, it, for me, it was very efficient and very clean and very compact.
But I know that people are probably hearing that and thinking, man, that is just crazy to do it from a style guideline stamp perspective.
But it's kind of what I was doing and it seemed to work.
But it wasn't long before I learned to really like it.
In fact, I remember coming in here one of the first days I was starting to work with it and talking with one of our engineers and just talking about how much I hated the whole indenting thing.
And then like two weeks later coming in saying, you know, I think I actually like this.
My code looks pretty clean.
I can very quickly look at Python code and understand what's going on.
And so I kind of became a believer in using that.
So that was one of the first kind of challenging things I had to get over.
Then the other thing that I found that was a little bit challenging is Python goes from being very easy to use to getting complex in kind of a hurry, depending on what you're trying to do.
And so you can come out of the gate and write a simple script.
You can jump into the shell or you can do a little app.
It's pretty simple.
But all of a sudden it's like, OK, well, now I'm going to need this virtual environment and I need to get these packages installed.
And am I what am I installing here?
Am I using pip to install something?
There's homebrews involved.
I had to download something from GitHub.
It's a Python 2, Python 3.
And then there's the whole thing of Dunder variables.
I mean, when I first saw those, especially the like the Dunder main thing, I had no idea what was going on.
I saw examples of it.
And actually, the first class, Michael, that I bought from you, one of the first things I did was I searched through all the content to figure out where you might talk about this.
And I jumped to that video and watched that first.
And so that was a little bit of a challenge for me coming into Python was kind of going from that quick and easy program to something more complicated.
And some of the sort of auxiliary things I needed to understand to make it work.
Here's Scott.
The most challenging problems I faced when learning to program in Python actually had nothing to do with the language itself.
It had to do with the lack of discipline I had on my end when initially learning to code.
I was more or less self-taught out of the gate with input from excellent mathematicians, economists, and a physicist.
However, the code they wrote wasn't really geared for any sort of production environment.
They were writing scripts to solve problems in isolation to deal with the certain situations in their realm rather than focusing on good practices.
Needless to say, I developed some really bad habits, but I'm glad that it got me going.
As I look back, I realize it's much easier to learn some bad habits while you're excited about learning than it is to sit down and learn something like a tuple is an immutable object, blah, blah, blah.
But I'm sure there's some kind of balance in between.
Due to the fact the previous work I was doing was almost exclusively surrounding functional programming,
I still have to take back and remind myself there could be a better way to structure my code in an object-oriented way.
This happens a lot when I start chaining functions together in an attempt to utilize drive principles.
Nowadays, after I find myself overloading my overloaded functions with more overloaded functions,
I tend to step back and hit the reset button rather than pushing on and regretting it later.
That said, object-oriented programming still requires a conscious effort on my part.
It's not super difficult by any means, but I still have to flip the switch.
A related challenge basically surrounds how to best utilize design patterns.
Breaking up my code in a logical, scalable, and easy-to-understand way is important,
and it's not something that's easily researched.
When you work with someone else who's already designed the patterns,
they make a lot of sense.
But coming up with how to structure your own code takes a while to develop the intuition and how to develop it.
Everyone recommends the Gang of Four and the work by Brandon Rhodes.
Those are really well done, but for me it just took time and experience to really figure out
which of those patterns to use, how and when to use them,
and it's something I really have to work on every day.
Now the most important question I ask myself when writing code is,
am I maximizing breakage?
That's something you never want to do, and it tends to happen really easily.
So as I've become more experienced, I can catch these things ahead of time,
but it's definitely still a challenge for me.
This portion of Talk Python to me is brought to you by Linode.
Are you looking for hosting that's fast, simple, and incredibly affordable?
Well, look past that bookstore and check out Linode at talkpython.fm/Linode.
That's L-I-N-O-D-E.
Plans start at just $5 a month for a dedicated server with a gig of RAM.
They have 10 data centers across the globe, so no matter where you are or where your users are,
there's a data center for you.
Whether you want to run a Python web app, host a private Git server, or just a file server,
you'll get native SSDs on all the machines, a newly upgraded 200 gigabit network,
24-7 friendly support even on holidays, and a 7-day money-back guarantee.
Need a little help with your infrastructure?
They even offer professional services to help you with architecture, migrations, and more.
Do you want a dedicated server for free for the next four months?
Just visit talkpython.fm/Linode.
The next question I wanted to ask everybody was,
what is the most surprising thing that you learned getting into programming?
Things like, what did you expect that was going to be really hard, but actually turned out to be easy?
Or what did you think was easy and actually is way harder?
Now let's hear from Vanessa.
When I first started learning programming, I thought it would be a bit of a check-the-box exercise.
Like, okay, there's all these skills that I need to know, and programming is one I haven't done yet,
so let me pick up a language and that will augment my skills.
But instead, it's been really transformational to the core way I bring data in and analyze it every day,
and the types of data that I'm now able to analyze.
You know, for one thing, there's data that's too large.
That's the reason I first got kicked off was because there was a file, a pressure file,
that had pressure data every second for three months, and it was just too big to open in Excel.
And so I used Python to open it and read it and plot it and refit it so that I could get the information out of it that I needed.
But then I found that you can analyze image data and audio data and all types of data that I never even considered going through in Excel,
and it really opens up a lot of ability for innovation if you're able to get down to that level where you're at the data source.
Or, you know, just getting to be able to talk to the database is easier and pull in multiple sources and types of information
allows you to be so much more creative than I could be in the past.
And that's really resonated with other people as well.
You know, I felt that my position as an advanced beginner meant I was in this really key position
to be able to help bring other people along if they wanted to learn too.
So I paired up with a much more experienced programmer, and together we've been putting on this training program
that mirrors what I went through last year.
And we kind of wanted to start with a small group of maybe 20 to 25 people,
but we just kept thinking of people who we thought would want to do it, and they signed on,
and now we've got a list of 60 people, and at some point I'm just going to have to cut it off.
But it's really exciting.
People across all kinds of disciplines from engineering, geology, geophysics, IT, facilities, finance.
You know, we have this big multidisciplinary group that's all using Python and learning Python,
and I'm really excited to see how they end up applying it to their jobs,
because I really think it's a game changer in how you do your work.
Now let's hear from Kelly.
I think one of the most surprising things that I learned when getting into programming
and introducing Python into our school was just how well the students got into Python.
I think it's an amazing opportunity that we have here in order to give the students the tools
that they will need in the future to solve great problems,
and to be able to see the creativity that comes out from our students as they're learning to code.
I didn't expect Python to be so versatile at first,
and I think that is what has just really enlightened me
and made us become a little bit of an addict for Python.
Giving the students the opportunity to learn that Python can be used in web development,
in scientific computations, in desktop applications, in robotics,
in machine learning, in hardware programming.
It's such a great opportunity instead of just programming in old school HTML and maybe C++ or something.
But I think it's just this opportunity that Python provides our students
in order to show them the libraries that are constantly being produced,
the SciPy, NumPy, Pandas, in order to produce data science and to do machine learning
and to show the students that you can use TensorFlow and create your own program in order to solve an issue.
One of our students, he's actually using visual perception in order to help visually impaired people or person,
a visually impaired person, maneuver their way in a new environment.
And I think that's great that we can give them.
So I think that that's one of the most surprising things that I learned from getting into programming with Python.
It was efficient.
It's versatile.
It's easy.
And it just allows the students to solve really good problems.
Here's Dane.
I think the first thing I was really surprised by when I got out of college and into my professional career was just the fear of open source in my industry.
My first job was with a Fortune 500 company that was taking database entries, exporting them as a PDF,
and then emailing one giant file out to supervisors.
Instead of performing unique queries for each supervisor that only returned what they actually needed,
they only did that to basically limit our access to the database because they didn't want us to accidentally mess it up
or open up a security hole or something in it.
They did payroll through a program that still used the DOS prompt, which took me back to my childhood,
playing games like Where in the World is Carmen Sandiego or Oregon Trail on 5-inch floppy disks.
Most of their enormous amounts of data was in Excel sheets on a company file server.
It was so bad when they told us they were switching to SharePoint.
I was actually pretty excited about the idea of it.
I think open source languages have progressed to the point where writing your own codes and programs
is like knowing how to write a spreadsheet formula was 10 years ago.
And cutting that out of your business really limits what people with intimate knowledge of your systems are able to improve upon.
The other surprise for me was kind of these companies' fear of giving any type of user authorization to us as employees.
There was some sensitive data involved in my role, but it wasn't like I was working with customer accounts or anything
that would have been really worth getting a hold of.
Even if someone did manage to get a hold of the data I had access to, it wouldn't have made any sense to them at all.
Don't get me wrong.
One of the things I've always been afraid of and it still scares me about programming is potentially negligently opening some kind of security flaw,
which is why I shy away from full app deployments or putting anything live on the web.
But at the same time, I think that by taking that sort of whitelist over blacklist approach and not allowing access to anything,
they cut their employees off from critical information because it was just too difficult to access.
They shot themselves in the foot as a result by basically stifling innovation or personal projects at the individual employee level.
And I think there were smart enough people there that if they had some sort of sandbox type environment for their employees to access,
there could have been some really useful code made available through that process and would definitely help the company.
It's crazy to me that the company was worried about those vulnerabilities because at the same time,
they had password rules like the password must be eight characters.
We weren't allowed capital letters or special characters and it had to be changed each month.
It led to weak and repetitive passwords across the company where employees would do things like use the same four letters
and then follow it up with an increasing number each month.
I've looked into data breaches and cybersecurity a lot since getting into programming.
It's never this company gave access to open source languages to their employees.
It's always something like an SQL injection, a phishing attack.
And that's kind of what ends up getting your data put out there into the world.
It's funny to me that they felt that these specialized proprietary softwares were so much safer
because I've heard Audidesk, the makers of Auditcad,
and then called out multiple times in these discussions.
It's generally not their fault.
It's that these companies aren't being good about keeping these programs updated,
making sure security updates are being rolled out.
But these programs aren't any safer than open source if you have the same people kind of managing them
and not updating them correctly like they're supposed to be.
Here's Alexander.
I would say the most surprising thing to me was the fact that the thought process for reading and writing code
was similar to reading hydraulic schematics and analyzing systems.
I was surprised that I was able to pick up the basic programming concepts the way I did,
although object-oriented programming is taking some getting used to.
But there are many great resources out there that have helped me through the process.
You know, dealing with external libraries, that's really what presented the greatest challenge to me,
especially UIs.
I guess I need to just, you know, spend more time reading the documentation
and maybe take some tutorials.
I guess what I enjoy the most about all of this is the fact that I can solve problems
and that I can create and build something.
And that has probably been the most fulfilling part of this whole adventure.
Here's Scott.
The single most surprising thing I learned when getting into programming
was coming to the realization that if you have a problem,
chances are someone else has already solved it.
And honestly, the amount of information out there is so vast, it's unbelievable.
I think Stack Overflow has probably saved countless screens and keyboards from being broken
by frustrated programmers.
If I look back at it, finding answers versus asking questions
is probably a 500 to 1 ratio for me, at least.
And it's absolutely incredible.
And I think it's really unique to the programming world.
Once you learn to ignore the negativity and crazy self-centered egotistical stuff,
you can really gain a lot from the help online.
And it's been an overwhelmingly positive experience getting help.
And I make sure to answer questions and give back as well.
You know, the golden rule is still really important online.
And it's not limited to anything online.
There tends to be a programming community in every major city and probably plenty of rural
cities as well.
Finding a meetup group is easier than ever before and starting one yourself as well.
There's a Python meetup here in Fort Collins.
And the guy who runs it has dedicated office hours, which is a great idea where people can just
come and talk about whatever Python issue they want to discuss.
Between that and the data science meetup I run, I rarely have felt like I was the first person to ever
attempt to solve a problem.
I brought up issues with SQLAlchemy, Docker design patterns, you name it, and we've talked about it.
And just going over it with other people tends to solve more than half of my problems anyway.
Along those same lines, it's really easy to get started with things you find interesting.
If you want to use a new package, it takes moments to jump online, find examples, find a tutorial, get your feet wet.
Python and the open source community allow you to stand on the shoulders of giants and get started working on things you care about.
And when you're working on things you care about, it doesn't feel like work anymore.
Now let's hear from Jason.
Okay, this is going to be a really specific initial answer, but one of the most surprising things I remember learning about Python was the night I figured out that a regular expression had to be handled with a class object.
That was radical for me because I was used to doing regular expressions and pattern matching in Perl.
And so when I was doing this with this Raspberry Pi project I was working on, I was downloading a whole bunch of information from Flickr and I had to do a regular expression on it.
And it just blew my mind that it was an object.
I don't know why it's not that big of a deal, but I just remember thinking, wow, this is weird.
I have to create this search string and then pass it into an object using a class method.
I just, it was really strange.
Once I figured it out, it worked great.
But that was something that just stood out in my mind as well.
This was really a surprise to me.
And I'm guessing there's a whole bunch of stuff like that that I've not even yet come across.
One of the other things that for me, because of my background and a lot of this is all new, is I have to learn kind of a whole new development ecosystem.
The whole kind of global ecosystem of how things are getting done today versus the way I kind of started my career.
And so even just learning how to use GitHub effectively and play well as a community member there.
The ideas of learning about continuous integration and how to get support with the things I'm trying to do.
I'm trying to learn all these kind of new support technologies that are all there as part of the development ecosystem.
And of course, everybody has their own sort of support network, right?
Whether they're using Slack or they're using Gitter or they've got a Discord channel or they have their own forums.
There's so many ways to sort of find and interact with people to try to get the help that you need.
It's just a lot to learn.
For me, this is just all new.
I love it.
It's been a lot of fun, actually.
And I found that the community I'm interacting with, the people that I'm asking help from, they're great.
And I've really, really enjoyed it.
But it's new and it's interesting.
And it's a little bit surprising how much there is out there to support this growing base or this huge base of developers all working on different stuff.
It's been very cool.
And of course, one of the things that's really fun about programming and being able to do this kind of development, though, is sort of the instant satisfaction that you can get from it.
And it's an area I've always liked about programming, even going back to when I was doing it in college.
You write something, you run it, and you see it, right?
As opposed to developing boards or hardware, things that you may have to wait a long time to see it actually working directly or hold it in your hands and make it work.
It's just a lot of fun to have something work immediately, whether it's web development or you're running microcontroller code and hardware, doing something in robotics, or even just making cool neopixels light up and create a really funky color pattern.
It's something you can see happen right away and very fun.
So the project I did on that Raspberry Pi, being able to get the help I needed, figure out how to write the Python code and actually have it work and do all the things I wanted to do, that was just very gratifying and a lot of fun.
Here's Sergio.
What is the most surprising thing you learned getting into programming?
A few things.
One, it's really hard to work with certain types of data, like PDFs.
If I try to take text out of PDF, it's just impossible in general.
It sucks.
I can never get it to work.
Working with time, that was really weird because we're so used to knowing what in five minutes or next year or two weeks ago is.
If you tell someone, they'll understand right away.
But try to explain the concept of time to a computer.
That's impossible.
I mean, I guess it's not impossible.
People do it all the time.
It's just really, really hard, at least for me.
A really, really great positive surprise I got was how amazing the community is.
Everyone seems so happy to.
Share their resources and share their knowledge and tell you what you did wrong in a positive way and not call you stupid right away.
At least in Python.
I hear other communities might not be as great at that.
But in Python, it seems like everyone has a blog or tutorial or willing to be like, hey, here's my code or actually you did this.
This works, but maybe you should try this.
It's a little bit more efficient.
Because of that, you can learn a lot of things really fast.
You can then learn very, very advanced techniques really quick.
I started learning Python in Python.
I started learning Python in 2017.
I didn't know anything.
And now I'll be presenting a tutorial on Pandas at PyCon 2019.
In less than two years.
I got from not knowing anything in Python to actually presenting a tutorial and teaching other people at PyCon.
That's all because of the community.
It's not just me.
It's the free resources I receive from the community.
The positive feedback I receive from the community.
The Python community.
This portion of Talk Python to me is brought to you by Rollbar.
Got a question for you.
Have you been outsourcing your bug discovery to your users?
Have you been making them send you bug reports?
You know there's two problems with that.
You can't discover all the bugs this way.
And some users don't bother reporting bugs at all.
They just leave.
Sometimes forever.
The best software teams practice proactive error monitoring.
They detect all the errors in their production apps and services in real time.
And debug important errors in minutes or hours.
Sometimes before users even notice.
Teams from companies like Twilio, Instacart, and CircleCI use Rollbar to do this.
With Rollbar, you get a real-time feed of all the errors so you know exactly what's broken in production.
And Rollbar automatically collects all the relevant data and metadata you need to debug the errors so you don't have to sift through logs.
If you aren't using Rollbar yet, they have a special offer for you and it's really awesome.
Sign up and install Rollbar at talkpython.fm/Rollbar.
And Rollbar will send you a $100 gift card to use at the Open Collective where you can donate to any of the 900 plus projects listed under the Open Source Collective or to the Women Who Code organization.
Get notified of errors in real time and make a difference in Open Source.
Visit talkpython.fm/Rollbar today.
The final question for everyone is, what is the best piece of advice you have received?
Let's hear from our panelists.
Here's Alexander.
Some of the best advice that I've received so far is be curious, code every day, and don't give up when a challenge arises.
I would say the most valuable piece of advice was during your podcast with Jay Miller when he said, merge your passions.
You know, someone who tends to jump around and tries to learn too many things at once.
What he said really spoke to me and it gave me direction.
It made me realize that it is okay to be passionate about many things.
And there are times when they can coexist.
I guess it's kind of like writing books about your passions and interests.
I guess the same could be said about programming.
It could be another way of expressing that passion for something that is important to you.
Here's Sergio.
My mom has this saying, el conocimiento nos hace responsables, which translates to knowledge makes us responsible.
And I always took that as, if you know something is wrong, you should do something about it.
Or if you know you could help, you should.
And that's going to make the world a better place in general.
And that has driven me my whole life, I think.
I was good at math.
And growing up, it became a thing of how can I use math?
And how can I use statistics?
And how can I use this technical knowledge I know to help other people?
And that drove me here to what I do of researching public policy.
So I can, maybe I cannot draft the legislation myself, but I can help these people make the right decision.
Or hopefully at least a more informed decision.
And that's coupled with another advice, implicit advice my mom gave me of always keep learning.
Never stop learning.
You can always learn something new and you can always get better at something.
And when you become better at certain things, you can share that knowledge.
It doesn't cost anything for you to share your knowledge and make other people better at what they do or what they want to learn.
More efficient at things.
And it's just a positive thing for everyone.
When we all learn.
When we stay learning.
And we get better at things.
That's my advice.
That's what I would tell someone that's starting.
Or if I could tell my younger self or if I could tell anyone out there listening.
Just don't stop learning.
Because knowledge makes us responsible.
It makes us all better.
It makes us as a society better.
It makes you better.
It makes your family.
Your neighbors.
Your friends.
Better off.
Here's Dane.
So I don't have a lot of close friends in the programming world.
And a lot of engineering friends don't really have coding experience.
So I don't get a lot of personalized advice on programming.
One of the better pieces of general advice I've ever received was you don't have to approach every project like you're building a watch.
It was referring to a construction process.
But it's a principle I carried over to my programming work as well.
There's no point in trying to recreate the request library because it doesn't have one function you think you need.
Or if you have a process that takes seven steps, don't give up on the program entirely when you realize you can only automate about three of them.
Even though those three steps will make your life a little bit easier, there's a good chance that later on you may be able to address the other four.
And even until then, automating those three processes will definitely save you a lot of time in the long run.
Some great advice I got while learning Python from online tutorials and just researching programming would be Google is your friend.
Even if I'm trying to create a very specialized function, I've learned that I can boil that down into simpler parts and go on to places like Stack Overflow or just Googling the error codes I'm getting and find solutions that way.
Tutorials give you a great intro into a wide range of libraries.
And even if the end app wasn't exactly what I was trying to create, they still open the door for me to a lot of ideas to use later on.
I've used a lot of Corey Schaefer's tutorials on YouTube.
They're absolutely fantastic.
They basically taught me a lot of what I know about programming.
I switched over to PyTerm after hearing so many people recommending it at the end of this show.
That's helped me tremendously.
It's a great organizational system and it just makes everything so much easier.
And you can use it to create small programs.
You can access the terminal.
It basically does everything I need.
I think most importantly, the big lesson I learned was not to be intimidated by security concerns or things like that.
Absolutely keep them in mind while coding.
But there's plenty of ways to start out in a way that guarantees your primary day-to-day computer and personal information aren't getting exposed to anything you don't want them to accidentally.
And again, Google is your friend as far as that.
Thanks for having me on the show, Michael.
I'm a huge fan and you're doing a great job.
So keep it up.
Thanks again.
Now let's hear from Jason.
I'm not sure I could really claim this is the best piece of advice I've ever received, but I thought this was really good.
One of the managers I worked for about 10 years ago, a little less than 10 years ago, told me a story about when he first got hired to his first job out of college.
And his boss told him, his manager said, listen, I want you to be very aggressive in the work that you do.
I want you to continually push and push and push to the point where we need to tell you, hey, you're not allowed to make that decision.
You're not allowed to do that.
That's what I want from you.
And that's kind of what he told me is he's like, I want you to take initiative.
If you see something you think needs to get done, just do it and move forward and take care of the things you see that need to be taken care of.
And if you step over the lines and you make a decision, you make a call that really wasn't yours to make, I'm not going to be upset with you about that.
I'm just going to say, look, you aren't actually allowed to make that decision, but I'd always rather have you pushing hard like that than to be laying back and wondering whether or not you should do something.
And generally speaking, I've had a really good success with that approach.
And I was kind of wired like that a little bit anyway, historically in my career.
But sort of being given that open door at that time really allowed me to say, hey, I'm just going to do these things that need to get done, whether that's technical or business related or creating marketing content or something.
We just encourage people to take that approach.
And generally speaking, and I've told this to my children as well, that if you're the person that's always going to see a need, get it done, take care of it, that usually is just going to probably work out for you in the long run.
And every now and then you might get sat down and told, listen, you're not allowed to buy that or you're not allowed to make that call.
And that's fine.
Most employers would really rather have someone move in that direction than to just kind of sit back and wait for things to go.
So as I was thinking about what is the best piece of advice I had been given, I really was thankful that he told me that story when he did and that I've kind of always been in to lean into that over the last number of years.
And actually, Michael, as I've listened to the different episodes on Talk Python to me, I've heard many times people come in and say, look, I wanted to introduce Python in my place of business or wherever I worked.
And kind of waiting for permission that didn't come.
And eventually they just said, well, I just went and solved a problem with it and fixed it, proved that it worked.
And then that was the way that kind of Python ended up becoming the solution.
And they ended up becoming the person that was able to do it and work on it.
And I think that that just has played itself out in some of the examples with other guests you've had on this program.
Now let's hear from Kelly.
So the best piece of advice that I have received, I think that would be find a passion project in order to motivate me to keep me going with learning Python.
Once you start learning the basics and you start playing around with the basics, you sometimes hit this little bit of a lull in the learning.
And you end up doing the same thing over and over again because it's comfortable and easy.
I remember I kept getting stuck into if else conditional loops because I work with the basics and a lot of the kids would always use these.
And so when I was given the advice to pick a project, I was trying to avoid using the stuff that I already knew.
And I think that really helped once you find something that you like or you're interested in and you try to find a problem that needs to be solved within that passion.
And then sky's the limit on what you can find.
We tend to do that with our students a lot.
We give them 20% time project at the end of the quarter where they can pick something that they like to do outside of coding and see if they can solve a problem with that.
Or just find something that they liked with coding and see if they can solve a problem with that.
And what's really great is that you can take those large projects and you can break them down and chunk the project into smaller bits.
And then you can see if you can find solutions that will help make that project better by searching online.
One of my first projects was really getting into Matplotlib.
And it was because I wanted to show some teachers that you could do a lot of graphing, easy graphing using Python.
And so we worked a lot with learning different features of Matplotlib.
And then having after that, I wanted to get into some collecting of big data in schools.
We have lots of data on students with grades and external tests and other software that tests their knowledge.
And so by looking at how I can use Python to aggregate that information in the database, I've been able to learn more about other libraries.
I just found a library called Bokeh, B-O-K-E-H.
And within that library, you can have a visualization in it.
And it allows a different presentation with some data.
So I'm hoping I can incorporate stuff like that into the situation.
So that's the best advice I've been given.
And it really helps you to get re-energized, especially when you're feeling a little bit overwhelmed.
Here's Scott.
The best piece of advice I've received, aside from happy wife, happy life, was from my dad.
He used to say, if your feet are cold, put on a hat.
And it stems from the fact that I grew up backpacking and spent a lot of time in the outdoors.
He wanted my sister and I to learn survival skills.
And one very important part to survival is staying warm.
And the reason behind putting on a hat instead of socks is because you tend to lose more heat through your head.
Pretty simple.
And he didn't mean for that to extend to other parts of our lives.
But it really has implications outside of survival.
If you're ever stuck on a problem, it's tempting to do local fixes and slap on a band-aid.
But if there are core issues, you really should put on a hat.
And simply put, the most obvious solution isn't always the most effective one.
And you should be thinking about better ways to solve your problems.
There are a lot of examples of this in life.
But one recent one I had when programming was working with a massive legacy code base that had some really nasty variable names in files that were 5,000 lines long and linked to raw data files that were created by 17 other files.
And had variables like xy, y1, y2, y2a, that sort of thing.
And so the first solution was to just rename everything, get it all into one place, and call it good.
And honestly, that might be a first step.
But the real problem is definitely deeper.
Because if you have a y1, why do you need a y2 that's just a slightly modified y1?
And then a y3, which is a slightly modified y2.
And so on.
We went back to the drawing board, found the earliest instances of all of these objects, and then created methods and manipulate it in a way that made a decent amount of sense.
And so rather than recreating a mess with better naming conventions, we built something that followed best practices, moved forward, and became more sustainable.
In other words, we put on a hat.
Now let's hear from Vanessa.
Best piece of advice that I received.
Okay, they weren't actually talking to me precisely.
But this was really, really impactful for me.
So I was listening to a podcast called Becoming a Data Scientist by Renee Teat.
Imagining, I just wanted to know what data science was.
I'd started to hear about it, and I was curious.
And the first guest she interviewed, his name was Will Kurt.
And you should listen to the whole thing.
But what I remember was specifically between minute 14 and 16, they have this conversation.
And it goes something like, you know, she says, okay, you're from this non-traditional background.
And, you know, when did you start really getting this stuff?
And when did you stop feeling stupid?
And his answer was, oh, well, I continually try to feel that way.
And he talks about how, you know, when he did software engineering, he got really good at it.
But that was actually a low point intellectually.
And that if you're going to be a lifelong learner, one of the key things is that you have to be okay with continually feeling stupid.
And that just flipped a switch for me somewhere.
Because I had been trying to do these things.
And if it led to me feeling dumb, I would just think, well, I can't do this, or I should quit, or I should stop.
But to have someone say, no, if you feel stupid, that's part of it.
You're doing it right.
This is it.
This is just what it feels like to be learning new things.
For some reason, that helped me to just sit down and power through things and not feel self-conscious about the way that I was learning them.
And allowed me to have a lot more success than I would have otherwise.
Well, that's it.
I just want to say a quick thank you to all of our panelists.
It's been great to have you all on the show.
And I hope all of you out there listening learned a lot from them.
This has been another episode of Talk Python to Me.
Our guests have been Vanessa Angel, Kelly Schuster-Paredes, Dane Parks, Scott Stoltzman, Sergio Sanchez, Alex Caprazi, and Jason Picour.
And this episode has been brought to you by Linode and Rollbar.
Linode is your go-to hosting for whatever you're building with Python.
Get four months free at talkpython.fm/linode.
That's L-I-N-O-D-E.
Rollbar takes the pain out of errors.
They give you the context and insight you need to quickly locate and fix errors that might have gone unnoticed.
Until users complain, of course.
Track a ridiculous number of errors for free as Talk Python to Me listeners at talkpython.fm/rollbar.
Want to level up your Python?
If you're just getting started, try my Python Jumpstart by Building 10 Apps course.
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.
And of course, if you're interested in more than one of these, be sure to check out our Everything Bundle.
It's like a subscription that never expires.
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, the Google Play feed at /play,
and the direct RSS feed at /rss on talkpython.fm.
This is your host, Michael Kennedy.
Thanks so much for listening.
I really appreciate it.
Now get out there and write some Python code.
And I'll see you next time.