How Learning Software Is Like Learning Chinese

During college, I showed up in Beijing with only a couple of elementary Chinese classes under my belt and took a placement test. It had a “tell us about yourself in Chinese” section. The previous summer, I had painstakingly memorized how to write a lengthy paragraph about myself in Chinese characters, so I wrote most of my vocabulary on that placement test.

I was then placed in a class with people who had been studying Chinese for two+ years and, being too stubborn to move down a level, found the class content to be above my head for the first few weeks. During that time, I wrote my thoughts on bridging my knowledge gap in a travel journal.

When digging through this journal a few weeks ago, I realized that my first few months at Atomic were similar to my first few weeks of intensive Chinese language classes. I understood only a portion of what was going on and felt like I was placed “a couple of levels too high.” But I have been applying many of the language-learning strategies I jotted down in my travel journal to getting up to speed at Atomic:

1. Break the Material into Pieces, and Focus on Specific Parts

“We were given multiple stories to read, words to learn, and workbook pages to do–so much that I didn’t know if I could finish my assignments while also looking up every other word in the dictionary. I try to choose a few words and learn how to write them really well instead of trying to do everything a bit. If I know some words well, I can guess a lot from context.”

If I know some words well, I can piece together the rest from context. Similarly, if I know some design patterns and language syntax, I can better start to understand the architecture of an application. Just as I learned to ask, “What type of word might go here, seeing that it is preceded by an adjective?” I’m learning to ask, “What type of code goes here, seeing that it is in a class called ‘flight’?” This is simpler than trying to understand all the code at once. Thus, by focusing on one part at a time, I can wrap my head around the function of an application.

Focusing on one part at a time also gives me a sense of accomplishment. It allows me to tell myself, “Yes, I read 200 pages on Xamarin Forms and built my own demo app,” instead of, “I just learned a bunch about how Xamarin Forms works but that isn’t really relevant because I don’t understand the architecture of our whole project yet or how lenses work.” The former is much more motivating than the latter.

2. Make Smaller Goals for Myself, Then Seek to Accomplish Them

“I know my language level is currently not high enough to fulfill all the course’s goals. I know I will not be able to get a hundred percent on the quizzes because I feel it is not possible to learn how to write the 40-some characters in one day.  So, as long as I learn the 20 characters I assign to myself, I am okay with not doing very well on the quizzes.”

The concept of setting small milestones for myself has translated directly into learning software. My first few months at Atomic, I decided to ignore delving deeply into the text editing tools and instead focus on learning the platforms I was using and the languages I was coding in.

Making a smaller sub-goal and lowering my expectation from learning everything about a project to understanding a subsection of an application has helped me learn faster. For example, when I focused on learning about callbacks and async functions in C# instead of understanding the structure of the whole C# application, I had a goal I could achieve in a week. This helped motivate me to put in the time outside of work to read through blog posts and follow tutorials.

The accelerator program has given me accountability for accomplishing these milestones. Each week, I decide which technology/platform/skillset I want to improve, tell my accelerator manager and cohort what my goals are, and put a chunk of time into learning it.

3. Talk About and Use the Material with Others

“I’ve gotten a lot of help from friends. Just showing a Chinese character to someone and talking about it helps me remember it–the act of discussing the character forms more associations with it. I don’t think I will ever forget the word ‘zao’ because, after class, [my friends] decided that we should try some. We went to the store and got some zao (jujubes) and after all that discussion, I doubt I will forget the word or the character (or the apple-like delicious taste of zaos).”

I would not want to learn a new language in my room with the door locked. No one would correct my pronunciation, I would accustom myself to incorrect grammar patterns, and I would have had little motivation to improve. Though review on my own is helpful, it would be very frustrating to try to learn a language on my own.

Likewise, I wouldn’t want to learn how to architect client projects in my basement. Though I’ve learned some from books and blog posts, I have learned much more from pairing with and talking to experienced developers. Just like exploring Beijing and trying to communicate motivated me to learn Chinese, so working with fellow developers on client projects motivates me to put in the time to learn new technologies both at work and on my own.

When I realized the strategies I was using to learn new technologies were similar to the strategies I had used to learn Chinese, I was less intimidated by the amount I had to learn at Atomic. If I didn’t get frustrated when I wasn’t magically able to understand people speaking Chinese, why would I expect myself to be fluent in technical conversation straight out of school?

As learning technology is a process that takes time, I am confident that it is worth the effort I put into it. The assignments and lectures were part of the process I went through to learn Chinese. At the end of the semester, mainly because of the rigorous pace of the class, I had learned enough Chinese to have conversations. Since I cared about having conversations in Chinese, the process of learning Chinese was worth it. 

At Atomic, I care about delivering quality projects to clients, so going through the process of learning new technologies is worth it. And, remembering that programming–similar to language acquisition–is a skill that takes time and effort motivates me to keep learning specific parts of technology, gathering the function of a code from context, accomplishing my goals for the accelerator program, and talking about technical challenges with my pairs.