Try swift natasha nazari fb

Building a Better Language App with Swift

As an elegant and powerful language, Swift offers developers the opportunity to create more engaging and enriching language learning experiences. Unfortunately, most language apps settle on a limited range of teaching techniques and approaches to UI design, with the result being shallow learning, less cultural understanding, and low user retention. We can do better.

In this try!Swift talk, you’ll learn how to create more effective—and more human—language learning experiences for iOS. We’ll start by examining the essential teaching techniques that are missing from language apps; discuss how to pair these techniques with UI elements, choose features based on learning goals, and create more culturally-relevant UI designs; and then move on to some actual examples in Swift.

Introduction (0:00)

In this post, we’re going to talk about language apps. But, before we do that we are going to talk about cows. I promise there is a connection. Several years ago, in a state in Northeastern India, some NGOs wanted to increase agricultural production. They decided to replace the local cows, which tended to be lean and poor built producers, with plump high yielding American ones.

The NGOs, armed with this slew of data and scientific research supporting their claims were so certain that this would be successful and increase production that they actually decided to slaughter the local breeding cows and replace them with the American imports. But, unfortunately, their data didn’t take into account local ecological conditions, weather, add forage crops which as it turns out the American cows weren’t suited to. In fact, all of them died. Leaving the local community without any cows.

In the end, the people in this community were worse off than they were before. The moral of the story being that a good intention operating on incomplete information can be a pretty dangerous thing.

An Analogy for Language Apps (1:38)

So, what does this have to do with languages or apps? As it turns out, this story has a lot in common with how we approach both. So when it comes to language apps, many developers and companies have great intentions. They want to make learning easier, fun, and they might even make it free.

And in these areas, they have succeeded. So Duolingo, Babbel, Memrise, Mega Languages, just to name a few, are all incredibly fun to use. But there’s fun and addictive, and then there’s effective. They don’t have to be mutually exclusive, and they shouldn’t be as I am going to argue in this talk, but they are in this cases. Now, why is this?

The problem is most of these apps are incredibly inflexible. So they usually pick one method backed by a handful of scientific studies of learning many of which haven’t been replicated. Bad science.

Get more development news like this

They built features based on one of five teaching techniques which never evolve bilanguage level. And then they cram content into those limited spaces, and they do this for every language they teach; regardless of the language they teach.

And they certainly never touch deep cultural aspects of a language except for the occasional pop-up which might point you to a quirky little feature of whatever language point you just learned.

So, what’s the result of this? Well, users drop like flies, or cows as the case may be. I’ve actually consulted with a lot of these companies trying to help them improve their curriculum, and some of them only retain 3 to 8% of their users.

And after users don’t go away, they’re only going to reach upper-beginner and pre-intermediate levels which are not good enough to get a job or they only use the application. I would like to change this and I am going to show you how and it is not as intimidating as it sounds.

Case Study: Word Order (3:29)

Let’s take a simple and familiar example. Most apps have word order exercises. The theory being that practicing order is going to help you internalize the structure of the language. This is good for practicing grammar, and it is true in most cases.

Example 1: Russian

But let’s consider a language like Russian, where word order is extremely flexible, especially when people are speaking informally. And it also depends on what they want to emphasize. In this case, really simple exercises aren’t very effective; at least in isolation. And some apps are going to take this into account. Duolingo for example will often include alternatives in a pop-up. Babbel does the same thing.

But if you consider our example on slide 5, there are 6 possibilities of how to translate a very basic sentence. This doesn’t make a lot of sense. There are too many alternatives to fit in that tiny little space.

Now what if there’s only one alternative? Would this still be a good thing to do? No. Because users aren’t going to remember this alternative. They are already having a hard enough time remembering the first translation. You throw another one at them and it’s like: “OK, move on to the next thing”. They are not going to really remember it and it’s probably going to deflate their confidence.

That is a pretty basic sentence for someone who is getting started out in Russian. There’s nothing worse than thinking you’ve gotten something right only to hear: “Wait, there’s more”.

You also have to consider level. This is suited to a beginner as I said. And with beginners you want them to produce the most common or natural way to say whatever they’re trying to say. But you also want to help them move to the next level. How do you do that?

You pick a listening that is slightly above of what they’re used to. So we have to separate production, speaking and writing from things like listening. What is the solution for this problem? Should we just throw this out? No. We can follow it up with dialogues.

The user has to produce one word order but they are going to hear another. And this is going to help them slowly internalize more coloquial ways or alternative ways of expressing themselves. And it has the added advantage of forcing users to listen early and often which is the most important skill you can have as a language learner.

We will see more examples of why moving across skill areas (speaking, listening, reading, and writing) is a good idea in a bit.

Example 2: Chinese

Could we do this for another language like… Let’s say Chinese? No. Chinese word order is stricter than Russian’s. You might say we can use the Duolingo model for something like this.

Here’s a problem. Chinese is really hard; when you first get started everything is hard: pronunciation, reading, writing, listening. So how can we get people to start thinking in Chinese? Give them a sort of softball introduction to the Chinese language without having all of these concerns.

Well, if we are trying to make them think in Chinese, a good idea as counterintuitive as it sounds, assuming they are a native English speaker, is to get them to change an English sentence into Chinese word order.

The Chinese word order is: who, when, where, what, which is pretty unnatural for a native English speaker. So, we would change a very basic sentence like: “I eat breakfast at 8:30” to “I at 8:30 eat breakfast”. I did this for a month with random English sentences and then by the end of that I spent two months actually doing this in Chinese.

My translation process was so much quicker because of doing this little exercise I didn’t even have to think about changing the English sentence into Chinese word order and then making sure my pronunciation was perfect and going through all of these steps.

By the end of the three months, I was testing it in intermediate level in Chinese. So this would help speed up the process.

Content: a Better Solution (7:58)

These small tweaks are great but they are just the tip of the iceberg, so let’s go deeper. If you hear nothing else, hear this: “Content drives everything in your app.” By content, I mean everything you are using to teach the language.

If you have great content that is activated well, meaning that you are using effective teaching techniques, everything else will follow. I noticed a lot of developers assume that content is just a given. Like it just comes out of the clouds or something, or that it is a side issue.

They think: “I use natural language processing. I will pull content from the web; I will farm it out to some poor soul on Upwork.” But the thing is that content or code makes or breaks your app.

This is why Russian Accelerator, a web resource that is basically like a keynote with a voiceover can get you up to intermediate level proficiency in Russian, which is a very difficult language, in 3 to 6 months. But Duolingo or Babbel or some of these apps which are more technically impressive, more aesthetically pleasing, more fun to use are not.

The majority of people I’ve interviewed and talked to quit using certain language apps, not because of performance issues, not because of a technical thing but because the simple sentences seemed unnatural, the exercises are boring, they are not getting enough feedback. Content drives everything.

And the other thing that I want to mention. And this is another thing developers have given me a hard time for is that you want to test the app before you code it.

What are you testing for is: Is this an effective learning tool? Kanji Circle, one of my projects, I had to change it completely. It was great I had this idea of doing this before I coded it, because I would have had to trash almost everything. Because I realized that users were retaining 20 to 30% of the information, which is terrible.

You want to make sure that: “Hey, does this really teach you the language?”.

Experiment #1: Chongqing

Ok. A little bit of background about me, I’ve been teaching languages around the world for the past four years.

My first job was in Chongqing, China, teaching high-schoolers. I had 22 classes, 60 students in a class. Sounds like a nightmare, but it was actually a lot of fun. Most of these kids were going to be studying in the United States or in Singapore where most of their classes were going to be in English. I had to get them from the barely beginner level proficiency up to college level proficiency in a matter of 6 months.

Experiment #2: Prague

Same situation in Prague, only I was teaching English and Spanish to working professionals. A lot of the people there needed this for their job. The only thing standing in the way between them and their dream job, promotion and an increase in their salary was a language problem.

Experiment #3: Taipei

Taipei: pretty much the same situation. I was teaching working professionals, had to get them up to a very quick level in a very short period. In Taipei, I was teaching English, Spanish, and Russian.

Experiment #4: Online

Now I am doing a little bit of online teaching again for working professionals. I mention this because a lot of language developers have no sense of accountability to the people who they’re making their app for.

When you’re sitting in front of a person, if you can see their facial expressions and they’re telling you that they are not happy with your teaching, you start becoming really militant and making sure that the techniques you are using are effective. You want to develop as if you were going to present this for a real person.

A lot of developers think it might be cool to develop a Japanese, Chinese language app and add that to their resume. You have to have a sense of duty towards the people who you are developing your products for. Because this one language can be the difference between them and a promotion, getting a job, and improving the lives of their family.

In all of this situations, across cultures, mediums. Student complaints are always the same about teaching methodology. They feel like the language doesn’t meet their needs. I want more business vocabulary. Regarding activities, they’re looking for pronunciation practice. They feel like they have no guide to improving their skills. They might feel the experience is impersonal. The problem with teaching is that teachers are human beings and they are inconsistent.

Regarding activities, most of them are not looking for vocabulary; they’re looking for pronunciation or listening practice. They feel like the practice is repetitive. Again, this is with teachers, both in classroom learning and apps, they feel like they have no guide on how to improve their language skills.

They’re not learning anything about the culture, or they don’t feel comfortable asking anything about it, and they might feel the experience is impersonal.

Good teachers are going to do the following techniques on slide 15, and I’m not going to read through all of these because we’re going to look at examples.

The problem with teaching is that teachers are human beings and they are, therefore, inconsistent. I feel like if you can do all of the things on this side in your app, you’re going be meeting user needs and that’s also going to translate into user retention and maybe even some money. Because even the best teachers are not going to do all of these things, all the time.

Functional Approach to Teaching (15:30)

So, the first thing you want to do is take a functional approach to teaching; what does this mean? That means that you’re thinking in terms of situations, not individual words and sentences.

Now, this seems pretty obvious, but a lot of language apps, they’ll start with a word list, and they will go through all of these words. I’m going to build sentences from these words. Then, I’m going to divide it into topics. Then, I’m going to divide it into lessons. It’s not the best way to do things.

Something that’s very helpful is using the CEFR. This is great because it gives you actionable steps that you need to take so that you can figure out how to structure your content in a way that is progressing.

Design Content Based on Extremes (17:05)

Second thing you want to do is design content based on extremes. This means that instead of ignoring the slowest student and the best student, you’re going to work with them together. And, interestingly, a lot of them are suffering from the same problem.

The solution with this is that you start with details and you gradually increase in complexity. Now, this sounds abstract, so let’s look at an example. So, if we look at something like this, a very short dialogue, assume that you have one student who understands it, one student who doesn’t.

  • A: Did you finish the project?
  • B: No. I still got to work on it.

All of the vocabulary is taught, so we know that it’s not a vocabulary issue. What is the problem? From experience, I can tell you that because there is a huge gap between spoken and written English, that the problem is going to be that they’re not hearing DID-juh. “Did ya’ finish the project?”

In American English, we turn T’s into D’s and vice versa. So, this is the listening problem and you can read through this technique to take pronunciation points and build up to a listening exercise on slide 25.

Give Precise & Varied Feedback (18:26)

You want to give precise and varied feedback. So, instead of just telling people that they’re wrong, which isn’t very useful, it’s a good idea to identify where exactly the error is occurring and then extend that into some kind of exercise.

On slide 27, I have a small Chinese app that I’m working on, and you can actually click on the character if you’re having a pronunciation problem with it and then practice it in different contexts, so that you’re really getting the specific sound. If it’s not, just telling them that it’s wrong is not going to help.

Give Precise & Varied Feedback (19:05)

Vary the exercises. Here is an example of alternating between listening for detail, where you’re listening for one word, and listening for gist, where you’re listening to the overall context of the conversation.

Varied exercises are quite important; we’ll look at one with reading on slide 29. One of the difficulties with reading something like Chinese characters is that different typefaces make it look really different. So, if you’re looking at the same character side-by-side, it’s pretty simple. But, if you look at the one on the left and, let’s say, you see that, like, 150 times. Then, when you go to the second one, it’s going to be like, what, what just happened? Even small variation is really important.

More variation, you want to alternate between inductive and deductive teaching, what does this mean?

Inductive & Deductive Teaching (20:36)

Inductive teaching is when you make the student spot the pattern. They have to identify the pattern themselves. Deductive teaching is when you give them the rule and you ask them to apply it.

Alternating between these two things, rather than picking one, is the best way to get them to really internalize the rules of the language.

You also want to link language and culture. On slide 38 is Russian Q&A, one of the projects that I shared with you. So, users actually get to slowly learn new vocabulary through reading and also learn about a real place, like in Moscow, at the same time.

These are some questions that you can consider when you’re trying to think about what content that you want to put in your app to help people understand different things about whatever culture that you’re presenting.

You can also use basic user information to personalize content. If I’m trying to teach the Russian Cyrillic alphabet, I might take into consideration that someone is a native English speaker and then I’m going to teach them the letters that are closest to the letters of their alphabet. Then, I’m going to teach the ones that are kind of confusing like the capital B, in the first row of slide 43, is actually a Vuh; it’s pronounced like a V, which is very confusing for native English speakers. And then, you pick the ones that are completely different, rather than just going through it in order.

Conclusion (22:14)

A lot of these teaching techniques took me a long time to learn, but I hope that it gives you a different perspective on some of the different techniques that you can be using in your apps. If you have questions, feel free to reach out to me, and I’ll be happy to share more in-depth resources with you or teach you some of these techniques. Thank you very much for reading.


About the content

This talk was delivered live in September 2016 at try! Swift NYC. The video was recorded, produced, and transcribed by Realm, and is published here with the permission of the conference organizers.

Natasha Nazari

Natasha is new to the world of software development. For the past three years, she has been teaching and learning languages around the world. When she couldn’t find a suitable app to learn Russian in early 2015, she decided to try out iOS development. She’s been in love with coding ever since. At the moment, she’s building two language apps in Swift, growing her meetup “Language Tech Taipei”, diving into full-stack web development at Free Code Camp, and pushing for full fluency in Spanish and Russian.

4 design patterns for a RESTless mobile integration »