loading...
Cover image for 3 Things That'll Help You Learn Any New (Programming) Language

3 Things That'll Help You Learn Any New (Programming) Language

catcarbn profile image Cat Carbonell ・3 min read

Fun fact: I'm only partially-fluent in reading, writing, and speaking Japanese -- and in programming.

"Partially-fluent" meaning I can understand the prompt, but only answer in English or put together a basic, rudimentary response, most of the time without aid of a guide or translator.

I can ask for a bottle of beer in Japanese:

ビール一個をください。/ "Beeru ikko wo kudasai."

Programming, for me, is like this: I have the essential vocabulary to at least communicate to the console to have it print, "Hello World". However, asking the browser to iterate, "Hello World" to me every time I load a page is a completely different and more complex request to communicate.

Telling me to build an enterprise-level app from scratch fresh out of a coding bootcamp is akin to asking me to recite improvisational poetry in Japanese: heckin' intimidating and quite difficult with my current level of comprehension.

They're called programming languages for a reason.

You're learning how to sweet-talk a computer/phone/browser/raspberry pi into doing the thing you'd like it to do.

Joey from the TV show "Friends" saying, "How you doin?"

Here's a few things you can do when learning any language:

1) Practice, practice, practice-- every day!

Face it: you must make time every day to "speak" the language of choice. In my personal experience, I would tend to forget simple words if I don't practice, especially when reading and writing.

It's the same for programming: if I don't practice, I will forget the syntax for a for-loop.

Practicing every day will help solidify concepts since you're consciously, continuously exposed to them.

It also helps to save time: you won't have to scour MDN/W3C for basic concepts anymore!

If you're on-the-go, download related apps. For reading Japanese, I highly recommend the "Kanji Study" app. For programming, I'm currently using "Mimo".

2) Practice -- OUT LOUD.

You need to speak out loud: hear yourself say the words and understand what they mean. Yes, even when you're coding, you need to say out-loud what exactly you are doing.
For example:

Reading Japanese:

日本語を読んでいます。

My thought process out-loud:

Kanji for day, kanji for book -- OH That's the kanji for Japan -- kanji for "language" -- all together it says "Japanese". "を"? That's a connector indicating it's an action being done. Kanji for "to read" with the connecting ender "-ndeimasu" meaning it's a current action being done. It says "Nihongo wo yondeimasu". "I'm reading Japanese." Cool.

Programming in Javascript:

var list = [ "one", "two", "banana" ];
for (i = 0; list.length > i; i++)

"For, by the way: 'i' is currently zero--Anyway, as long as the length of the list array is greater than the value of 'i', add 1 to 'i'."

Speaking out loud has the same effect as practicing every day: solidifying the meaning-- the "why" in your head in a different manner other than reading. You can only do so much just reading a concept, especially as a kinetic learner.

3) Practice -- with a partner who is fluent!

You need someone with experience to help you: to show you the ropes, to guide you, to teach you what best practices are, and what phrases are used most often.

Granted, it could be difficult to find someone who meshes with your personality/learning style/etc., but there is always someone out there who is willing to help you out.

This is what I didn't have while re-learning Japanese, and what I needed when learning how to code: I needed someone to show me how it's done correctly. This is also why I enrolled in a coding bootcamp!

There are definitely cheaper ways to get help: being active on dev Twitter (#100daysofcode helps with reach, or simply DM-ing or @-ing your favorite developer might do the trick), reaching out to others via here on DEV or the freecodecamp forums. If you're on FB, joining a specific group for your chosen language is a good idea! Posting on Stack Overflow sometimes helps (if you're a masochist).

Now, I just need to have the courage to practice speaking Japanese out-loud with a native/fluent speaker.

TL;DR: Practice. Practice. Practice every day -- with intention. Don't be afraid to ask for help.

I wish you luck on your own dev journey!


Question for the comments:

If you're fluent in a foreign and/or programming language, what steps did you take to become fluent? What resources can you share that will help a newbie out?


Thanks for reading! If you'd like to keep in touch, please don't hesitate to follow me here and add me on Twitter! (@catcarbn )

Posted on by:

catcarbn profile

Cat Carbonell

@catcarbn

Learner Advocate @eggheadio! UX/UI Engineer! General Assembly alum [SEI 08]!

Discussion

markdown guide
 

Really good advice here!

I have been coding for quite a while now (about 20 years), but have always worked with beginners throughout my career. The suggestion you made to "Practice out loud" is an excellent one, especially when working with others because it helps both the learner and teacher discover what is understood clearly and what gaps in understanding still need to be filled.

The only small note of caution I would offer is that daily practice is generally a good idea and something to aspire to, but it doesn't necessarily mean "practice every single day for a large amount of time or you will not succeed."

Instead, the benefits of daily practice are mostly these three things:

  • It establishing learning as a habit, which has a powerful compound effect over time.

  • It prevents the decay of knowledge, which otherwise would happen pretty quickly if you went weeks or months without putting in some practice time.

  • It (perhaps most importantly) changes your identity. You can more easily convince yourself "I'm a software developer" if writing software is part of your daily life than if it was something you did only occasionally.

With those three goals in mind, it might work just fine to set aside some time every day to write some code, and many have had good results with that via things like #100DaysOfCode.

But if for whatever reason coding every day feels too daunting, you will do just fine if you're practicing 3-4 days per week, as long as you are consistent. And the duration can be short, too.

30 mins per day, three times per week, combined with a longer session of two hours once per week might work great! It just might take a couple years rather than a few months to make much progress.

Anyway, thanks for writing this article!

 

The benefits you listed are exactly why I practice every day. My brain likes to throw info away the next day or even hour. lol.

But if for whatever reason coding every day feels too daunting, you will do just fine if you're practicing 3-4 days per week, as long as you are consistent. And the duration can be short, too.

It's kinda like when you start lifting: do it 3-4 days/week; if you do it every day, you get increasingly more fatigued, thus more susceptible to injury.

Thanks for responding!

 

Hahah, one could think you changed your nickname after reading this 😄 😄

 

I first collected a lot of resources to learn from. I am in many programming, open source communities where I talk and ask a lot of questions and sometimes help people. I have subscribed to 5 or 8 newsletters where I get more knowledge. I read and study code everyday and I ask things when I don't get them. I also read articles here daily which are of great quality.

I have collected 150 PDFs and 50 websites in these 3 years. I think programming in any language is easy, it is just you have to know the similarities between the new one which you will learn and the one you know.

I would say that you need to find time for yourself and practice code and ask when you are stuck! Have faith in yourself. Be passionate.

 

I have subscribed to 5 or 8 newsletters where I get more knowledge.

Which newsletters do you recommend?

Have faith in yourself. Be passionate.

I'm trying. I really am.

 

O Reilly
Real Python
Dev.to
DigitalOcean
Fluent C++
Github

 

Cat, those are questions I ask myself every day. And more specifically, how can I reproduce the results of my learning Japanese (started 32 years ago, living in Japan since '97, reasonably fluent and literate, but not quite where I would like to be) in my programming language learning (lisp/anything else) (and also my Chinese learning while I'm at it)?

When I write myself scripts in AppleScript, I keep bumping in the walls of non-fluency. But I've become very fluent at finding the needed references and understanding them. But that's meta language learning. Also, most of what I did so far in programming involved scripts (even reasonably long) that I developed for one specific task and then just used (and sometimes improved, but not all of them).

My feeling is that it is relatively easy to become fluent in one domain at a time. For ex. in the example you give above: ordering food in an izakaya. You need about 5 concepts and 30 words to sound native but then, you are native. And that's what matters.

Applied to programming languages (and obviously less useful than repetitions in an izakaya) that means becoming fluent in small parts of the language, like knowing perfectly well how to read a file and output strings to it (I've bumped into this seemingly trivial wall in emacs lisp and that triggered a very interesting -to me- thread on emacs-devel, and now I know).

When you master that micro-domain, use that as a building block to master another connected micro-domain, etc.

But everything has to be done within a very realistic context and be authentic, like in, don't try to master a domain for which you have no interest at all, or a domain that is not at all connected to a domain you previously studied (if not mastered). Things have to be connected and swallowed in small chunks.

Regarding Japanese, and kanji in particular, you should check James Heisig's kanji book. I used Hadaminstky's in university and I still consider it an excellent dictionary to acquire a strong reading writing ability up to the jōyō level. We did not have Halpern's excellent dictionaries then so you may prefer them. At the time the "classic" was the Nelson dictionary for those who could afford it (and read it in English).

Also, you may consider reading articles about the Neuro-Linguistic approach. It is used mostly in Canada to teach French but the concepts can also be applied to other languages, obviously, and I feel they can also be applied to programming languages, which is a route I'm currently exploring...

Good luck with your studies ! And if you need a hand for Japanese, don't hesitate to DM.

 

But everything has to be done within a very realistic context and be authentic, like in, don't try to master a domain for which you have no interest at all

THIS. Absolutely. This is an instance where faking it will not lead you to making it haha

Good luck with your studies ! And if you need a hand for Japanese, don't hesitate to DM.

どうもありがとうございます。練習をしたいお願いします!

 

Definitely, the only thing that helped me in learning languages is a practice. Sure, you can read a lot of documentation, but you'll forget what you read in a week/month/you bet.

What helped me:

  • Learning the core concepts of programming by actually using a programming language.
 

Learning the core concepts of programming by actually using a programming language.

Definitely. Learning by doing is highly effective.

Thanks for responding!