00:00 Michael Kennedy: Welcome to Part 2 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 1 with these panelists. On this episode, you'll meet Vanessa Angel, Kelly Schuster-Paredes, Dane Parks, Scott Stoltzman, Sergio Sanchez, Alex Kaprosy, and Jason Pecor. This is Talk Python To Me, Episode 205, published April 2, 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 @TalkPython. This episode is brought to you by Linode and Rollbar. Please check out what they're offering during their segments. They really help 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 day do day to day, so you know where they're coming from for the rest of their answers. Now, let's hear from Vanessa.
01:17 Panelists: 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 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 two 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 a geologist and geophysicist 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. 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 times series data. We have a lot of monitors in the field, and then we get a lot of inputs from the geologist and geophysicist 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 is remaining, where we could drill more locations and get more oil. And for all of this, in general, I used to use Excel. 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.
02:44 Michael Kennedy: Now let's hear from Kelly.
02:45 Panelists: Hi, my name is Kelly Schuster-Paredes, and I'm 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 middle school with using technology in their classroom, and I do anything from helping them with an application, helping them with a Google Suite products. 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 Tibor 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.
03:49 Michael Kennedy: Here's Dane.
03:50 Panelists: Hi, thanks for having me on the show. My name's Dane, I'm 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 do not considered 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 in 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 wanted to keep track of them 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.
04:57 Michael Kennedy: Here's Alexander.
04:58 Panelists: 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. 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 you'd find in Al Sweigart's Automate The Boring Stuff. So I've been reading that and also taking the 100 Days of Python course through talkpython.fm. So I've been enjoying that. And building projects. I've build a hydraulic calculator and I 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 yeah, 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.
06:14 Michael Kennedy: Now let's hear from Jason.
06:16 Panelists: Hi, my name is Jason Pecor, and I spend 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 SystemVerilog and VHDL that we use in that industry. Did some Perl development, C, Tcl, and even a little bit of Python to kind of do 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 Circuit Python, 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 hardware 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.
08:12 Michael Kennedy: Here's Scott.
08:13 Panelists: 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 have 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 our background in MATLAB where the majority of work I needed to do didn't require any sort of custom classes. 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 Pandas data frame, ensuring accuracy with stats models, and I'm starting to consider PyJanitor. And I set it up for an API endpoint in 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.
10:07 Michael Kennedy: Here's Sergio.
10:08 Panelists: Hi, my name is Sergio Sanchez Havana. 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.
10:45 Michael Kennedy: The next question I wanted to ask everyone was what has been the most challenging thing to learn programming in 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 gotten through that a time or two, everything else after that becomes much more approachable. 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.
11:21 Panelists: 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.
11:40 Michael Kennedy: Here's Dane.
11:42 Panelists: 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, 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 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 boot multiple OSs, those kind of things. I'm really happy with my choice of college overall, but if 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 perform simple functions with it. But when I got to the point where I wanted to write to a 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 want it to do, you end up getting a pretty good intro into a little bit of everything.
13:35 Michael Kennedy: Now let's hear from Kelly.
13:36 Panelists: I think the most challenging thing about learning to program for me was just getting started. There is 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, 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 Teens and Tweens. I ordered Python for Kids. I ordered Python for Dummies. I ordered the Programming BBC Micro Bit Getting Started With MicroPython. And 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 Sentdex 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. 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, 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.
15:29 Michael Kennedy: Now let's hear from Vanessa.
15:31 Panelists: 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? And 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. Just one step at a time. It was surprising how easy it was. Three months later, it felt like I'd been wading slowly through this material, but then three months later, I had these skills that I didn't have before and I can do these amazing things that I couldn't do before.
16:45 Michael Kennedy: Here's Sergio.
16:46 Panelists: 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. Like 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. 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 is 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.
18:31 Michael Kennedy: Now let's hear from Jason.
18:32 Panelists: Well, when I came back to using Python again here recently in the 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 an 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 close brace on the same line for really short if else statements and things like that, it for me 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 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 and 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 that's pretty simple. But all of a sudden, it's like, okay, well now I'm going to need this virtual environment and I need to get these packages installed and what am I installing here? Am I using pip to install something? There's Homebrew involved. I had to download something from GitHub. So Python 2, Python 3. And then there's the whole thing of dunder variables. I mean, when I first saw those, especially 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.
21:24 Michael Kennedy: Here's Scott.
21:25 Panelists: The most challenging problems I've 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 was 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 DRY 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 become more experienced, I can catch these things ahead of time, but it's definitely still a challenge for me.
24:08 Michael Kennedy: 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 book store 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 seven 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.
25:16 Panelists: 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's 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. For one thing, there's data that's too large. That's the reason I first got kicked off was because there was 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 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. 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. We have this big multi-disciplinary 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.
27:28 Michael Kennedy: Now let's hear from Kelly.
27:29 Panelists: 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 and desktop applications, and robotics and machine learning and 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'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.
29:30 Michael Kennedy: Here's Dane.
29:31 Panelists: 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 five 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 company's 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 of 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 have definitely helped the company. It's crazy to me that the company was worried about these 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 in cyber security 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 AutoDesk, the makers of AutoCAD, have been 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.
32:43 Michael Kennedy: Here's Alexander.
32:45 Panelists: 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 been helping 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 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.
33:37 Michael Kennedy: Here's Scott.
33:38 Panelists: 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 one 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. It's been an overwhelmingly positive experience getting help, and I make sure to answer questions and give back as well. 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, 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.
35:43 Michael Kennedy: Now let's hear from Jason.
35:45 Panelists: 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 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 wow, 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 of 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, whether they're using Slack or they're using Gitter or they've got a Discord channel or they have their own forums. There are 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've 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 back to when I was doing it in college. You write something, you run it, and you see it. 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 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.
38:41 Michael Kennedy: Here's Sergio.
38:42 Panelists: 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 get, 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 trying 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 a 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 then, another surprising thing was, you can then learn a lot of things really fast. If you have some time and you're willing to dig deep, you can then learn very advanced techniques really quick. I started learning Python in 2017 and 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 received from the community, the positive feedback I received from the community, the Python community.
40:39 Michael Kennedy: This portion of Talk Python To Me is brought to you by Rollbar. I've 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.
42:05 Panelists: Some of the best advice I've ever seen 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. As 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.
42:56 Michael Kennedy: Here's Sergio.
42:57 Panelists: My mom has this saying. 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 or 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 policies 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 or more efficient at things. And it's just a positive thing for everyone when we all learn and 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 and makes us as a society better. It makes you better, it makes your family, your neighbors, your friends better off.
44:41 Michael Kennedy: Here's Dane.
44:42 Panelists: 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 know how 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 requests 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 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 onto places like Stack Overflow and just Googling the error code 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. And I've used a lot of Corey Schafer's tutorials on YouTube. They're absolutely fantastic. They basically taught me a lot of what I know about programming. I switched over to PyCharm 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.
46:52 Michael Kennedy: Now let's hear from Jason.
46:53 Panelists: 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. He's just 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 and 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 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. 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 able 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 want 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. I think that that has just played itself out in some of the examples with other guests you've had on this program.
49:26 Michael Kennedy: Now let's hear from Kelly.
49:28 Panelists: So the best piece of advice that I have received, I think that would be find a passion project in order to motivate me and 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 an if else conditional loops because I worked 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, then the 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 it 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 test 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 visualization 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.
52:07 Michael Kennedy: Here's Scott.
52:08 Panelists: 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 spend 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 bandaid. 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 manipulated 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.
54:23 Michael Kennedy: Now let's hear from Vanessa.
54:25 Panelists: 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 Teate, 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 she says, okay, you're from this non-traditional background and 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 when he did software engineering he got really good at it, but that was 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.
55:57 Michael Kennedy: 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 Kaprosy, and Jason Pecor. 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.