How to Get Better at Programming: Lessons from Natural Language Learning

How to Get Better at Programming: Lessons from Natural Language Learning Featured Image

Hope y’all aren’t getting tired of me talking about my hobbies yet! Today, I’ll let you in on my interest in learning natural languages. By natural languages, I’m really referring to spoken languages which contrasts with programming languages. As it turns out, learning a spoken language can really help you learn to code.

Table of Contents

Natural Language Learning Expertise

I don’t claim to know any other language than English. That said, I’ve been studying Spanish on-and-off since 2009, and I’ve recently started learning Japanese. I would say that my reading comprehension of Spanish is quite high at this point. Like, I understand Spanish memes that fly across my Twitter feed, so I consider that competent. In contrast, I have almost no speaking practice. Overall, I would rate the my competencies of language learning as follows:

reading > (writing || listening) > speaking

I know that doesn’t properly evaluate. That said, what I’m basically trying to say is that I can read better than I can write or listen, both of which I can do better than speak.

My general method for learning Spanish has been through coursework in high school and Duolingo ever since. As you can probably imagine, I hold a fairly low opinion of Duolingo as a method of learning a language despite what my 1,100+ day streak would tell you. Even after all that time, I don’t trust myself to navigate a trip to Mexico.

More recently, I’ve been dipping my toes in Japanese. This time around, I figured I’d take a more diverse approach. As a result, I’m employing two apps, Duolingo & Fluent, as well as books. In general, I feel like I am going to pass up my knowledge of Spanish in a very short amount of time. In fact, I already feel like my ear is trained better for Japanese, so I’m looking forward to seeing my progress going forward.

So, what does this all mean? Well, natural language learning is one of the few skills in the series that I don’t exactly feel qualified to talk about. Interestingly, I think that makes me the perfect candidate to talk about how my approaches to natural language learning as a self-taught beginner could apply to someone looking to learn a programming language themselves. And as always, I have my education background to lean on.

Lessons from Natural Language Learning

Like many of my hobbies in this series, natural language learning is something that comes with lessons that I think transfer well to learning to code. Up to this point, I think there have been a lot of lessons that can be shared across many domains. Natural language learning is no different. That said, I am particularly excited about this list because it gets into more philosophical topics surrounding education and motivation. Enjoy!

Diversify Your Experiences

When it comes to learning a natural language, there are four main areas of expertise: reading, writing, listening, and speaking. To do all four, you need different types of experiences. For example, you cannot learn to speak a language without actually speaking it. As a result, you probably need someone you can talk to for practice. Of course, while speaking might help with grammar, it doesn’t help with reading and writing in general.

I would argue that this idea of “diversity of experiences” applies to programming as well. Sure, we don’t necessarily speak programming languages, but we definitely need to be able to read and write them. Of course, if coding was just about reading and writing, memorization would get you pretty far. But, coding is more than that. It’s problem solving, organization, planning, etc.

As a result, while I generally think it’s a good idea to step away from tutorials and start coding up your own projects, there are just too many skills coming together at once. Instead, I might recommend practicing syntax for simple problems that you already know how to solve. At the same time, I’d recommend drawing flow charts or handwriting steps to more complex algorithms to get some problem solving practice. If you’re feeling especially adventurous, you can watch videos or listen to podcasts to see how people in the field even talk about software.

Overall, the more types of coding experiences you can have, the better. Don’t do what I did with learning Spanish and use a single app like Edabit to learn to code.

On a side note, Edabit actually references natural language learning on their homepageOpens in a new tab.:

Everyone knows the fastest way to learn a spoken language is by having conversations with native speakers. Likewise, the fastest way to learn to code is by actually coding. Edabit offers an almost limitless supply of bite-sized challenges, so you can rapidly advance your abilities.

I’m not sure I agree with their argument, but I appreciate the parallel.

Be Consistent

Despite all the hate I give Duolingo, there’s one thing I think it does right: streaks. At this point, I’m sitting at a 1,100+ day streak, and if nothing else, I think that has helped me commit significantly more vocabulary to memory than if I had studied more sporadically.

In terms of programming, I find this advice to be a bit harder to take. After all, I don’t think it’s healthy to code every day. That sort of thing will lead to burnout. I know it’s lead me to try to find the easiest way to keep my streak with Duolingo. However, I would say generally consistency is good. For instance, maybe try writing code a few days a week—college classes rarely have a commitment higher than that.

If you’re looking for some way to stay accountable as you learn, you might want to check out the 100DaysOfCodeOpens in a new tab. community. I first got interested in this community while I was building out my Sample Programs repository. It’s a great way to work on something consistently. That said, I recommend setting some rules for yourself as doing something 100 days straight might not be good for your mental health. Also, it’s a bit of a commitment for beginners. Maybe scope it down to 14 days to see if you even like it first.

All that said, I think consistency is great step to forming a habit, so you can build a skill long term. Perhaps mixing consistency with diversity of experience will yield the best possible learning outcomes. It’s worth a shot!

Remember Your “Why”

As much as I love learning languages like Spanish and Japanese, I can’t help but lose interest in them over time. Had this not been a problem for me, I might actually be able to read some of the translations of my content. Regardless, while I’m intrinsically motivated to learn them, the motivation only goes so far. What keeps me going is the prospect of actually using the languages in the right contexts. This is my “why.”

When it comes to learning code, you need to figure out your “why.” Your “why” can be anything as simple as looking to earn more income or wanting to build cool stuff. This is a judgement free zone, and I’ll never tell anyone that you need to be “passionate” to learn to code. You just need something driving the learning. Otherwise, you won’t be following your values, and you’ll be prone to burnout.

Once you have your “why,” you’ll want to keep it in the back of your mind. For instance, I’m learning Japanese because I want to travel to Japan and use it. There are tons of other benefits, surely, but this is my “why.” Whenever I get frustrated, I go back to planning the trip. This usually brings back the excitement for language learning. If you can find something like that for coding (e.g., researching a particularly company you’d like to work at), it’ll help you push through those low points.

I am particularly fond of this advice because I use it in grad school to help me get through my PhD program. Ultimately, I never want to ask myself “why am I here?”

What Else Can Programmers Borrow?

With all that said, for my programmer friends out there, how did I do? Did you pick up any new ways to practice coding? Are you interested in learning a natural language? Were you surprised by any of the connections I made?

For my polyglot friends out there, what did I miss? Are there other lessons that you think can transfer over to programming? Do you do anything like this? How else has natural language learning helped your programming career?

Once again, thanks for stopping by. If you’d like to support the site, I have a list of ways you can do that. There, you’ll find links to Discord, Patreon, and YouTube. Otherwise, take care!

Jack of All Trades (4 Articles)—Series Navigation

One of the things I’ve learned as an adult is that we’re all whole people. Every single one of us comes to a domain with knowledge and experience in a lot of different areas. As someone who tries to write in a particular niche, I feel like I fail to capture the reality that I’m a whole person as well. As a result, I decided to write the Jack of All Trades series as a compromise.

This series attempts to capture my “whole person” mentality while balancing it with the reality that this is a site about code. In other words, I finally get to talk about my interests while tying them back to ways you can improve your programming! Let’s give it a go.

Jeremy Grifski

Jeremy grew up in a small town where he enjoyed playing soccer and video games, practicing taekwondo, and trading Pokémon cards. Once out of the nest, he pursued a Bachelors in Computer Engineering with a minor in Game Design. After college, he spent about two years writing software for a major engineering company. Then, he earned a master's in Computer Science and Engineering. Today, he pursues a PhD in Engineering Education in order to ultimately land a teaching gig. In his spare time, Jeremy enjoys spending time with his wife and kid, playing Overwatch 2, Lethal Company, and Baldur's Gate 3, reading manga, watching Penguins hockey, and traveling the world.

Recent Blog Posts