Introducing JavaScript Developer of Technical Content, Stephenie Minami Nakajima

July 15, 2021
Written by

Stephenie Minami Nakajima's introduction post banner image

Ahoy! I’m very excited to be joining Developer Voices at Twilio.

Have you ever tried learning a second language? Most of us have, perhaps in the form of a mandatory subject at school or out of pure passion. Growing up in a bicultural Australian-Japanese household and having lived in both countries, I have observed both the joy and many headaches of learning languages.

Becoming fluent in both languages is hard enough. But you’re not done there. There are many aspects of learning languages that you need to take in, and lifelong learning is essential. Keeping both Japanese and English skills sharp, understanding and embracing cultural differences, forming your identity across starkly different cultures and traditions, and the list goes on.

On moving to Australia from Japan, at first it was overwhelming to be completely immersed in another language. Thanks to my family, friends and teachers who were incredibly patient and supportive, I was able to enjoy conversations, build meaningful connections with others, and eventually overcome the fear of making mistakes and grew a great bond with my new home and language.

Later in my life, I found these challenges and efforts eventually pay off in various, and often unexpected ways. For me, there was a moment of great serendipity when I started learning to code.

The familiar curve

During my University days, as I immersed myself in the world of JavaScript, I started noticing some familiar patterns; I was following a similar learning curve as when I was learning to speak a second language.

Learning curve

At first, it feels like you have no idea what anyone is talking about. You don’t know what you don’t know and it’s just not for you. You are overwhelmed by the sheer number of words and expressions you haven’t heard of, and it’s impossible to follow conversations past a certain point, leaving you feeling lost and helpless.

But eventually, you hit a point where you experience a steep acceleration in your learning path, where suddenly you can hold whole conversations, while making minor grammatical mistakes here and there.

Then there’s the plateau. You realize that the world of your second language is way broader than you initially imagined, but now that you’ve gained confidence, the enthusiasm will keep pushing you to constantly pick up new knowledge, keeping your skills from getting rusty.

While I can name a number of fundamental differences between learning languages and programming, I’d like to take you through the reasons you don’t need to be afraid of coding and how it can benefit many of us.

The philosophy of learning-by-doing

While learning theory is crucial, your learning is spurred when you combine theoretical knowledge with practical experience. In the world of language learning, textbooks can often only teach basic knowledge, such as grammar and typical use cases. But in real life, there are expressions and phrases that you can only be exposed to when you start interacting with people who speak the language. Coding is the same way. Even if you read an entire textbook about Object-Oriented programming, you can find yourself completely puzzled when you attempt to implement the theory into code for the first time. Getting your hands dirty also allows you to discover new interests and themes that you wouldn’t have uncovered otherwise.

Mistakes fuel your growth

A typical hurdle that we face when learning a language is the fear of making mistakes. A feeling like “Maybe I’ll slow down the conversation for everyone else?” is common for any language learner. But in both contexts of language learning and programming, mistakes are necessary and a good sign of progress.

Each time you make a mistake, it sheds light on aspects of the subject that you never noticed or had exposure to before. In the context of coding, by facing issues, you debug, do your own research and seek help from peers. This process helps you identify your weaknesses and work towards overcoming them. The faster you fail, the faster you’ll master.

Let the creative juice flow

When you first start to learn a language, your hands are full just trying to form a sentence with correct grammar. But as you gain more experience interacting with others, you start to show your personality in the target language. This can occur by practicing idiomatic colloquial expressions, pet phrases, or even inserting jokes. This concept can also be translated into the realm of programming. Let me give you one example. Take a look at this code:

const str = ["a","h","o","y"]

const reverseStr = function(str) {
    let left = 0
    let right = str.length -1
    while (left < right) {
        [str[left++], str[right--]] = [str[right], str[left]]
    }
    console.log(str)
}
reverseStr(str)

And now this code:

const str = ["a","h","o","y"]

const reverseStr = function(str) {
   for (let i=0; i<str.length/2; i++) {
       [str[i], str[str.length-1-i]] = [str[str.length-1-i], str[i]]
   }
   console.log(str)
}

reverseStr(str)

They might look pretty different, but they both achieve the same outcome; reverse a given string in an array format and print it (i.e.["y", "o", "h", "a"]). They simply use different approaches. For instance, the first one uses a while loop to loop through the entire string array, while the second divides the array by two and replaces both sides with a for loop, resulting in a smaller runtime.

Code is merely a tool to express and implement your solution, not the solution itself. For any given problem, there are an infinite number of ways to solve it, and it’s important not to be obsessed with writing the most elegant or perfect code. As Voltaire said, “Perfect is the enemy of good”. While some are more desirable than others in terms of performance, maintainability, accuracy and readability, often they are just different approaches. Programming may not always be considered a creative pursuit. But in fact, every problem can be solved through a creative, logical expression.

The power of “language”

You might have noticed that the aspects of learning to program, or to speak a second language, can be translated into many other fields, and that’s absolutely correct. The door to programming is not open to a small portion of people with specific characteristics. It’s a field, where with consistent practice and curiosity, anyone can solve problems and build new things with logical creativity. 

The biggest gift I received from learning to speak multiple languages is the opportunities to build meaningful connections globally. Through my professional experience being an engineer and a technical writer, I can attest that knowing how to code expands your horizon just as much as a new language will for you. Learning to code arms you with the power of learning from, or helping anyone who “speaks” the same language around the world.

I hope that through my work at Twilio, I will be able to help lower the barrier to programming, and share the power of technology to anyone, from those who have never written code, to programming wizards. Thank you so much for reading till the end, and happy coding!

Feel free to reach out to me at snakajima@twilio.com and see what I’m building on Github at smwilk.