Becoming a Programming Polyglot

It’s been a long journey, but I feel like I can finally call myself a programming polyglot. Over the past two years, I’ve developed an understanding of Python, Javascript, C, Go, and am starting to dip my toes into Dart. I’m not sure if this holds true for spoken languages, but I feel like once you learn a couple of programming languages you can pick up new ones quicker. In this post, I’m going to share the path that I took and a few things that I learned.

Javascript

What first drew me into computer science was web development. I had some time on my hands and was curious what a boot camp would have to offer, so I signed up for a Udemy “boot-camp” course and started banging away at static HTML pages. This was cool and all, but it didn’t get really interesting until Javascript was introduced. One of the biggest takeaways that I got from that class was that everything is an object in JS. This is a concept that has spilled over into other object oriented languages, and I didn’t know it at the time but it’s helped me pick them up quicker.

The boot-camp class was setup where you had weekly projects that you needed to complete. To complete these projects, you could either code along and learn as you go, or you could try to do them yourself and then watch the videos to see the correct way of doing it. Being the first language I learned, it took me forever to figure out and remember the syntax. I was super tempted to just code along, but I noticed that coding along was kind of like eating junk food – it felt good (to see the progress), but in the end I didn’t really see any benefits. I would forget how to do things quickly. I learned that you need to attempt projects on your own first. It’s going to be slow going and frustrating for sure, but the lessons you learn are going to stick with you.

Python

Like any self respecting newbie to programming, I moved to Python next. It’s just so dang beautiful and intuitive to work with. Python is very similar to Javascript, in that it’s a dynamically typed language and very object oriented. I personally think that this allows newbies like myself to get up and running quickly, but it takes some of the careful thought and design work out of the equation. Now that I’ve moved on to statically typed languages, I’ve missed this flexibility.

There are a couple of things I learned when programming with Python. The first was that every language has its own idiomatic way of dealing with common programming operations. With Python, those are things like list comprehensions, using the in operator, enumerating through a list instead of keeping track of your own index value, and the list goes on. The only way that you learn these things is by looking at other people’s code. Thankfully, I had an internship that was almost exclusively in Python, and there were some hardcore Python fanboys on my team. They taught me the basics and I learned a ton by reviewing their code.

This leads me to the second thing that I learned – having code reviews is invaluable. In school, unfortunately, you don’t get many thorough code reviews, and you don’t really see other people’s code to compare/contrast and learn from. I suffered from “imposter syndrome” because I didn’t have a gauge on where my code quality was compared to my peers. If you can, get someone to review your code, or spend time reviewing others’ code. You’ll learn a lot.

C

You definitely should not learn C as your first language, but believe it or not, I think it’s important to learn C. For one, you’ll feel like a purist. Like fly fishermen and archery hunters, you’ll look down with disdain on the Neanderthals that rely on more recent languages. I’m kidding. In reality, you’ll be wondering why you ever started learning this language, and you’ll miss all the nice built-ins like garbage collection and memory management that Python just magically takes care of for you. But, I wasn’t joking about its importance.

Coding in C really changes your mindset. You have to consider a lot of things that other languages take care of for you like memory allocation, overrunning arrays, cleaning up memory, using pointers to access memory, etc. The main thing that I learned from C is I feel like I understand what is going on behind the scenes in other languages. I entered the OSU CS Post-Bacc program because I was craving this knowledge, and boy did I get it. With C, more than any other language, you have to dedicate yourself to troubleshooting issues, and you have to reach outside your comfort zone. With other languages, there are no shortage of videos and online tutorials to walk you through common scenarios. You can do a lot of programming in those languages without understanding the fundamentals of how a computer operates. I didn’t find much of that with C. Instead, I spent hours trying to read man pages and making sense of what they were talking about. Then I would sit down and try, ever so slowly, to step through my program. It was brutal, but effective. It really helped me focus on what I was trying to achieve and what pieces of the language could help me get there.

Go

Go is like if Python and C got together and made a child. I love coding in Go. When I was first introduced to it I was pretty overwhelmed. My intro to it was in a production setting, and I felt like I needed to learn it quickly in order to perform up to expectations. This mindset, however, discouraged me when I didn’t see my understanding progress as quickly as I liked, and it ultimately led to delayed understanding because I was trying to cram everything in. I learned that it’s going to take time and you need to be patient. Focus on learning something new every day. I also noticed that I don’t learn very effectively (at first) by reading others’ code. Once I have the fundamentals down then yeah, I can learn from doing code reviews, but if I don’t have a solid grasp of the language fundamentals, then I get lost in the jargon. I had to put time in outside of work to get my hands dirty with the language. I did this by doing LeetCode questions in Go and creating some basic data structures (like trees and heaps). It was a simple but effective solution.

Dart

I’m currently learning Dart in an effort to learn more about mobile development. I’ve been thinking about my best learning strategies and what I’ve learned from the past. Putting all of the previous discussion together, I’m going to focus on the following:

  • Attempt projects on my own first – don’t just follow a code-along
  • Seek out code reviews
  • Learn the languages idiomatic ways to efficiently complete tasks (through code reviews, but also through the docs)
  • Reach outside my comfort zone and stretch beyond base requirements on assignments
  • Have patience and try to learn something new every day. It’s going to take time and you can’t cram it all in to a week or two.

Hopefully, with these principles in mind I can be developing mobile apps in no time!

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *