As always, opinions in this post are solely those of my own, and not necessarily those of any organization I am currently affiliated with or have been in the past.
First posted 3/22/2021
To pass an IT certification like the Cisco Certified Network Associate (CCNA), you need to be skilled at seeking assistance when you’re stuck, goal-setting and self-discipline. I had all 3 of these skills mastered when I started doing CompTIA certifications in High School, culminating with becoming a CCNA at age 18. Sounds like I had my act together as a teenager, right? Not even close; back then I was acting very mature when it came to IT certifications, but I was acting half my age when it came to learning math & computer science topics! It took me way longer than it should have to recognize that learning to automate computer network tasks with Python code isn’t the monster I thought it was.
This post is going to be a fun, light-hearted look into my first big technological faux-pas: doing a jankety 7th grade science fair project involving a custom “C++ program”. I’m including this in the CCNA Candidate Toolkit category as I think this story will be most helpful to those coming into the computer networking field with bad experiences or no experiences in computer programming. If you’re reading this with an expert-level computer networking certification under your belt, or if you have zero intention on doing anything related to computer networking, don’t worry, there’s still many good lessons learned below. Before we dive into the “Other People’s Python” (OPP), go ahead and take a listen to Naughty By Nature’s OPP single if you haven’t heard it before, it’ll make the OPP references throughout the story far more enjoyable:
WOOPing the Pandemic
Let’s start by turning back the clock to March 2020. The early days of the pandemic were stressing everyone out, especially those of us in IT doing whatever we possibly could to support the unplanned shift to remote work ASAP. I came across a New York Times article about some wacky Yale/Coursera happiness class, and decided to give it a shot once the initial work-from-home IT support wildfire was under control. As with most online classes I’ve taken, I started off really self-motivated, but a few weeks in, I began to lose interest. Then a class lecture came up about a goal-setting strategy I’ve never heard of before: Wish, Outcome, Obstacle, Plan (WOOP). Rather than trying to explain what WOOP is here, I’d recommend checking out the following video with Gabriele Oettingen, her tools, or her book:
Natrually, one of the assignments in that online class was to give WOOP a try. Sitting down on the couch, I thought: What kind of goal should I think about for this silly assignment? Well, I guess it would be nice if I stopped being terrible at scripting. It would be great if I better understood that Python for Network Engineers stuff. You know what, that’s going to be my goal, I’m going to improve my Python skillset this pandemic. Just like that, my W in WOOP was completed! Then I moved onto the first O of Outcome: If I was better at Python, I’d be able to partake in all those hot new network automation buzzwords. I’d be able to sit next to my coworkers with CS degrees and never feel like an imposter. Heck, I could even properly complete the 7th grade science fair programming project I botched up so long ago!
So here’s where the story gets interesting: due to what I originally considered a silly assignment for a not-so-serious non-credit online course, I uncovered some strong motivation to stop procrastinating when it came to learning more than just the first chapters of a Python book. Thinking about it even more, that 7th grade science project snafu arguably was the start of me avoiding anything programmatic in the first place. What better way to squash any remaining imposter syndrome I’ve acquired as a computer nerd who couldn’t write code than to finally tackle the coding problems I couldn’t solve in grade school?!? Let’s turn back the clock even further and see what went wrong back in those Windows XP era days…
Microsoft Visual C++ 6.0 Introductory Edition
It’s the 2002-2003 school year. TechTV’s The Screen Savers is my favorite TV show, America Online dial-up internet is at its peak, Gamecube/Xbox/PS2 is all the rage, and I’m dead-set on doing something computer related for my 7th grade science fair. Due to watching way too much TechTV and tinkering with old computers, I really wanted to do a “Should you cram your RAM” experiment where I’d measure performance increases from RAM upgrades on desktop computers. I thought it was brilliant and would surely have a chance of making it to the city-wide science fair! My science teacher said I needed approval from the school’s computer teacher, Mr. Frisch, before starting anything. I remember enthusiastically talking to him about all my science fair ideas involving computer hardware, then being sort of crushed at the feedback: Do a coding project, Tom. You’re smarter than a “should you cram your RAM” experiment!
At the time, I really had my heart set on something with computer hardware. For reasons I’m still not entirely sure about, I never wanted to do my math homework after school. I’d rather do anything else, which was usually video games or messing with computers. All I knew about coding was that it was very math-intensive, so I focused on learning the IT support topics I saw on TechTV instead of concerning myself with coding. That being said, I also knew that if I wanted to pursue a path into anything regarding videogame design, I’d need to learn programming, so I decided to give Mr. Frisch’s idea a shot. He suggested writing a simple program such as a grade averaging utility and comparing it against a spreadsheet product. So that’s exactly what my project was titled: Excel vs a Self Made Program in Grade Averaging. The final project poster looked pretty good from a distance too (at least it did by 2002 standards)!
However, once you start actually reading what I put on this poster in the upcoming pictures, this project goes from decent to awful very quickly. Back in 2002-2003, I was super lucky to have dial-up internet at home (most kids had none!), and the only coding software I had available was an introductory version of Microsoft Visual C++ 6.0 I received inside of some game design introduction book. I told myself “I’m good with Excel, how hard could writing a program in Visual C++ 6.0 possibly be considering this game design kit is sold at big-box stores?”. After spending lots of time tinkering in that abysmal Visual C++ 6.0 GUI trying to get a grade averaging program together, I got totally stuck. Nothing I’d try seemed to work, I was swimming in a sea of errors. The game design kit I had was a fairly worthless guide for a 7th grader that didn’t like math. You’d think I would have requested help from Mr. Frisch, the computer teacher who promoted this idea in the first place, right?
Wrong. Instead of asking for help, I decided to do a jankety trick with a spreadsheet tool I found within Visual C++ 6.0 to do all the grade averaging work for me. The result was terrible; I was using the user interface tools to hide the Spreadsheet tool except for a handful of areas containing the grade averaging functionality. The finished “C++ program” to average grades was super messy and I didn’t end up learning any actual C++ code. All I learned was that coding wasn’t my thing, and I could do shady things within the GUI to cover up my lack of coding skills. Don’t take my word for it though! Take a closer look at what I glued to the poster, it’s so bad, it’s good:
I wish I could go back to 7th grade me and say “Hey man, it’s OK to seek assistance when you’re stuck. Tinkering with things on your own is a critical skill when learning any technology, but sometimes you need to either RTFM, find a new manual, or find someone experienced to help you. Nobody solves problems in isolation. Just think about what could have happened to the Apollo 13 crew without problem solving help from the ground.” I’m not sure why I was so reluctant back then to fill in Mr. Frisch about how much trouble I was having with writing a simple grade averaging program. I’d be willing to bet Mr. Frisch would have given me an old Apple II to take home along with a crash course in BASIC programming if I asked nicely. Instead, I tried to do it all on my own without asking for help, and my finished product was a total dud. Knowing what I know today, it would have been infinitely easier to write code in BASIC on the command line compared to that Visual C++ 6.0 introductory edition GUI mess. Which is really too bad, as I might have made it to that city-wide science fair if I printed out a bunch of cool BASIC code on the poster 🙂
Nowadays, we have tools like GitHub and Stackoverflow instantaneously available on our web browsers to help get un-stuck. There’s even books specifically written for primary school aged beginners to learn Python, but none of these resources were around back in the early 2000’s dial-up internet era. This ended up working out ok for me though; as a result of the science fair programming project embarrassment, I stayed away from anything that involved coding, focusing on IT support instead. If it wasn’t for that bad experience, maybe I wouldn’t have found my path towards becoming a Network Engineer. I guess we’ll never know where life’s path would have taken me if I embraced learning to program earlier, but that’s enough with the past & all the “what-ifs” that go with it for now, you’ll have to stick around for the conclusion for more on this topic!
OPP (Other People’s Python)
Fast forward to summer 2020. I ultimately did achieve my WOOP goal of getting better with Python, but I ran out of self-motivation to re-do my 7th grade science fair grade averaging program. Chicago’s wild weather improved, I started a new job, and there just weren’t enough hours in the day to do everything. Then one afternoon I was messing around with some YAML & Jinja2 stuff on a network automation project and thought: “Wait a sec, if I knew about YAML with Python back in 7th grade, I bet I could have legitimately wrote something that was better than Excel 2000 for averaging grades!” So later that night I fired up Visual Studio Code, and much like I did in 7th grade, got stuck with writing a function to average the grades how I wanted. This time around, I had the ultimate tool to get unstuck: OPP (Other People’s Python), thanks to an awesome Google search find 🙂
Unlike Naughty by Nature’s version of OPP, rule number one in this OPP establishment is not to keep your mouth shut. Quite the opposite, actually! The above Python grade averaging code tutorial I saw on GeeksforGeeks is covered under a Creative Commons CCBY-SA license which encourages the use of OPP as long as it’s properly attributed to the original writer. Best part about this is it allowed me to add the YAML improvements I wanted, publish it publicly on GitHub, and the finished product becomes a win-win for everyone. With enough time debugging my code & reading my Python books, I would have eventually figured out all the grade averaging functional programming on my own, but there simply isn’t a need to do that thanks to OPP. Understanding the fundamentals of what you’re doing in Python is critical. It’s also critical that you don’t re-invent the wheel when someone else’s open source code does the same thing (or is available for enhancement). While it’s good to learn some things the hard way, you don’t get bonus points in IT for writing a script 100% on your own compared to adapting someone else’s script for your use-case. Might as well work smarter, not harder!
Later that night, I got my YAML-fueled grade averaging Python code completed, finally solving the problem 7th grade Tom couldn’t figure out for the science fair. I don’t think I’ll go the extra mile to work on the code further, but if someone out there decides they’re interested in tinkering with it, check out https://github.com/kd9cpb/cheesegrader and get down with that OPP as you please. While I was ashamed of the C++ grade averaging program I “wrote” in the early 2000’s, I’m really proud of this Python grade averaging program which decouples the variable data into human readable YAML files. It sure is better late than never 🙂
As much as I hate to admit this, Mr. Frisch was right, and he was actually way ahead of his time on a number of technology predictions that I didn’t like back then. Infrastructure as Code is now dominating IT departments worldwide; “Should you cram your RAM” isn’t a question you need to answer when using compute resources in a public cloud! A die-hard Apple fan, Mr. Frisch was an early adopter of WiFi, predicting wireless computer networks would become more important than wired (I disagreed with him heavily given how unreliable the first 802.11b Airport Access Points were, but with most laptops no longer having Ethernet ports these days, I’d say he won that argument). He also ran an after school program to get us familiarized with digital media using iMovie in 2004, long before the days of YouTube and streaming internet video being commonplace. Sadly Mr. Frisch passed away in 2017, which is really a shame as I bet he would have been fascinated with the transition to eLearning throughout the world in 2020. I’m sure he’s reading this article from heaven and chuckling about how long it took me to properly write a custom grade averaging program!
While my skills of seeking assistance when I’m stuck, goal-setting, and self-discipline have certainly improved over the years, I’m still far from perfect. Doing that WOOP method and finally doing the 7th grade science fair programming project correctly felt pretty awesome, but finding the time for this sort of stuff is always an uphill battle. Even finding the time to write about this was a challenge. Whether it’s WOOP or checklists or whatever your search engine tells you about goal-setting, it’s going to take a lot of trial & error method to find what works for you, your mileage will vary. I wish every IT certification study guide began with a chapter covering how important asking for help, goal-setting and self-discipline are as I truly think these 3 skills can have a big impact on passing the exams. Kind of like how the old man appears at the beginning of Zelda:
Lastly, that bad experience I had trying to code in 2002-2003 should not have been an excuse to avoid learning how to program all those years, but I let it happen. You don’t have to go the same route I went; just because coding was hard for you years ago doesn’t mean you won’t knock it out of the park with a pandemic-era Python course! Past performance is not indicative of future results. Nowadays there’s tons of helpful people out there between Cisco Devnet, NetworkToCode and various subreddits to help with understanding how to write code that makes life easier in the computer networking world. Even if only one anti-learning-to-code network admin/engineer gives Python a shot after reading this story, I’m going to be a very happy camper. I’m glad you took the time to read this silly 7th grade science fair story, and if you’re down with Other People’s Python, I’d greatly appreciate a quick “Yeah, you know me!” reply in the comments below.
Special thanks to my mom, for keeping that science fair poster in the crawlspace all these years
You’ve reached the end of the post! Click here to go back to the list of all CCNA candidate toobox posts.
You should also know I may earn commissions on qualifying Amazon purchases made via kd9cpb.com links to defray the cost of otherwise ad-free web hosting.