Making Ember Approachable

Prologue

I appreciate the all the Ember Devs, Core Teams, and contributors more than I could ever repay. I owe them my livelihood. Which is exactly why I don't want this to be taken as a criticism. I am a big believer of the "Don't complain, make it better" mantra of Open Source, and I am not sure how to make it better yet. This is more a reflection on the question "How can we make Ember more approachable?"

Hype.js

I have been thinking a lot about how can I give back to the Ember community while also providing value worth paying for (the guy needs to get to Tomorrowland). Then an Idea hit me, why not help bootcamp students learn Ember.js? So I started looking for bootcamps producing Ember.js students and actually had a hard time. After 30 minutes of searching, I could only come up with Epicodus (please let me know if you more).

So I got to thinking, how does a Javascript framework become the "new hotness"? Why hasn't my beloved Ember not really seen that same buzz? Then I promptly forgot about it and went back to watching Brooklyn-99.

![Brooklyn-99-Gina](https://media.giphy.com/media/sKF481S11DIYg/giphy.gif)

Later while I was filling out my Self Journal with my goals and targets for the day, I remember one of the things that scared me most about Ember when I was first learning it:

Ember is Huge

I know, not anything new. As an Ember developer, I got tired after a while of discussing with other JS developers why I wasn't worried about the file size, the API size (surface area), and any other kind of size you can think of. I was once the one creating huge Backbone and jQuery apps; many of us remember those times. We know the pains that Ember solves and have forged that understanding through blood, sweat, and tears of debugging spaghetti code in an inherited client app or a brown-field mess.

I want to think about this problem a little differently though. Yes, the API is huge, but yet we all eventually are able to grok it. The problem I am interested in is how do we take Ember and make it something less daunting? How can we change the conversation from "Wow, that is a huge API" to "Wow, this is easy to grasp and very full featured".

For this, let's dive into the psychology of learning a bit.

Learning as a Skill

Maybe this sounds strange, but I was excited to start my "Learning How To Learn" course on Coursera. I am a huge optimizer when it comes to learning skills, and it played a big role in my process of learning Ruby and Javascript. In the first week of the course, they discuss the concept of working memory, which can be over-simplified to how many concepts or items you can hold simultaneously. A simple example of this is remembering the order of colors in a game of Simon.

Humans typically have a very small working memory. It was believed the average amount of items we could hold in our working memory was something like seven. Now, it is being hypothesized maybe it is even as low as four. Good luck remembering that phone number.

Obviously, we remember more than four concepts at once when coding our apps or when people memorize the order of a full deck of cards under two minutes. How do they do it?
While the higher level strategies may differ, ultimately it boils down to one concept: chunking.

What is Chunking

Chunking is basically when you take a couple of those items and group them into a single concept in order to hold more items in our working memory. I'll use an example of something that happened recently when I was playing Mario Party 3.

![mario-party-3-curtain-call-3](https://i.ytimg.com/vi/7-oYUo-95AI/hqdefault.jpg)

There is a game in Mario Party 3 called Curtain Call. In it, you have to remember the order of the characters on the screen and answer a related question. At first, it is easy to remember Goomba, Boo, Koopa. Probably because they all fit within our working memory. As the game progresses, it gets a bit more difficult:

![mario-party-3-curtain-call-6](http://mariopartylegacy.com/wp-content/uploads/2011/07/mp3curtaincall-185x138.png)

Now not only is it hard because there are five or six of them, but they are also dancing around and hiding behind the curtain.

I will let you in on a little secret: I am competitive. So what do I do? I apply a memorization technique to "chuck" it. Here is the secret: I come up with a sentence.

"Boys and girls basically kick good"

The rule is simple, think of a word that starts with the first letter of the character. The words "and", "the", "also" don't count. Once you internalize the memorization system, the hard part is the sentence creation. Remembering it is a breeze since you've effectively reduced five or six items to one.

Sidenote: I won

Dude, How Does this apply to Ember?

I just started looking into React a bit for a client project, and one thing I really enjoyed was that for the most part, it literally has one concept to grasp: A component.

Ember, on the other hand, does have a lot of concepts that need to be grasped.

  • Routes
  • Components
  • Controllers
  • Models
  • Helpers
  • Adapters
  • Services
  • etc.

Again, nothing new. However, I don't know about you, but I had just grown to accept this as "how it was" and it was ok. I was looking at it as a technical problem, not a psychological problem. Maybe there is a way to change the way people think and get them more quickly to the Aha moments we've had.

Let's go back to the initial question; How can we make Ember more approachable? I think the answer is in structuring lessons or tutorials with this idea of chunking in mind and trying to get people to what Ramit Sethi calls the "Big Wins". I think if we can pull this off correctly, it could be a huge win for the Ember Community.

I will be exploring this topic in more detail with some mentees and in future blog posts as I come up with more ideas to test and talk to others. I would love to hear your feedback though on how your company on boards developers who are new to Ember.

P.S. - I am looking for mentees looking to learn or level up their Ember skills. I will be writing another blog post about it soon, but contact me via twitter if you are interested - @bryanaka.

Epilogue

Now I want to be super clear: This is not a criticism of the architecture at all. Once learned, you gain this amazing power. You can drop into apps like Ghost or Discourse and pretty much grok what is happening in an hour or so. I don't think this super power can be emphasized enough, and it is part of the reason why I believe Rails succeeded, and I think we are on that same path.

Here's to 2016 and the future of Ember.js!