<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ray</title>
    <description>The latest articles on DEV Community by Ray (@raysplaceinspace).</description>
    <link>https://dev.to/raysplaceinspace</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4014398%2Fc32f4fa7-b38d-464b-8ee7-fc8544e5b56f.png</url>
      <title>DEV Community: Ray</title>
      <link>https://dev.to/raysplaceinspace</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raysplaceinspace"/>
    <language>en</language>
    <item>
      <title>Ease Comes After</title>
      <dc:creator>Ray</dc:creator>
      <pubDate>Sat, 04 Jul 2026 05:04:12 +0000</pubDate>
      <link>https://dev.to/raysplaceinspace/ease-comes-after-58h7</link>
      <guid>https://dev.to/raysplaceinspace/ease-comes-after-58h7</guid>
      <description>&lt;p&gt;While some people have been thriving, not everyone has been finding &lt;a href="https://easel.games" rel="noopener noreferrer"&gt;Easel&lt;/a&gt; easy to learn. Here is why that is and what we are doing about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simple vs Easy
&lt;/h2&gt;

&lt;p&gt;One of the most famous talks in computer science is &lt;a href="https://www.youtube.com/watch?v=SxdOUGdseq4" rel="noopener noreferrer"&gt;Simple Made Easy&lt;/a&gt; by &lt;strong&gt;Rich Hickey&lt;/strong&gt;,&lt;br&gt;
the creator of the programming language &lt;a href="https://clojure.org" rel="noopener noreferrer"&gt;Clojure&lt;/a&gt;.&lt;br&gt;
In it, he explains that, "simple" and "easy" are not the same thing. He refers to the word origins of the two words:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Simple"&lt;/strong&gt; comes from the word "simplex" meaning "one fold". As opposed to "complex" which means "many folds".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Easy"&lt;/strong&gt; comes from the word "adjacens" meaning "lie near".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When something is &lt;strong&gt;"easy"&lt;/strong&gt;, it means that it is lies near to something you already know. It is &lt;strong&gt;familiar&lt;/strong&gt;.  When something is &lt;strong&gt;"simple"&lt;/strong&gt;, it has nothing to do with what you already know or don't know.  Your code can be a tangled mess like the those wired earbuds in your pocket, or it can be ordered concentric hexagons like the web of a spider.  In either case, &lt;strong&gt;simple&lt;/strong&gt; or &lt;strong&gt;complex&lt;/strong&gt; is a property of the thing itself, not of your knowledge of it.&lt;/p&gt;

&lt;p&gt;We want too much for things to be &lt;strong&gt;easy&lt;/strong&gt; when we should want them to be &lt;strong&gt;simple&lt;/strong&gt;, because for things to be &lt;strong&gt;easy&lt;/strong&gt; they have to be familiar, and that means they cannot be much better than what we have now.&lt;/p&gt;
&lt;h3&gt;
  
  
  Easel is different
&lt;/h3&gt;

&lt;p&gt;Some people are trying Easel and finding it difficult. Why is that?&lt;/p&gt;

&lt;p&gt;It's because it's &lt;strong&gt;different&lt;/strong&gt;, which makes it unfamiliar.&lt;/p&gt;

&lt;p&gt;But Easel is different for good reason. We are trying to innovate on the way games are made.  This is not always immediately apparent when you start using Easel - it is difficult to see the forest from the trees.  However, every now and again someone will come along and leave us a comment like this one:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I’ve been making notes for a few years now about all the best patterns and principles for designing complex systems and your language + engine more or less hits all the right notes.&lt;br&gt;
Declarative state and reactivity, lexical lifetimes and ownership, etc. Really curious how you set it all up and what prior art was your primary inspiration.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This person gets it!  In our experience, Easel's &lt;strong&gt;differences&lt;/strong&gt; let you express more sophisticated ideas with less code.  Moving Easel closer to what people are familiar with would lose what makes Easel &lt;strong&gt;powerful&lt;/strong&gt;. Unfortunately, this means people have to learn new ways of thinking when coming to Easel, and that is not easy.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;ease&lt;/strong&gt; in Easel comes &lt;strong&gt;after&lt;/strong&gt; you have learned its ways, not before. But once you get there, you'll be delighted. The other day we had the nicest quote from one of our Easel users, who said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I keep being pleasantly surprised by how composable everything is, and how possible/easy it is to abstract things out&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is what we want for everyone who uses Easel - to reach the moment where you realize what it is all for.  What can we do to get more people to this point faster?&lt;/p&gt;
&lt;h3&gt;
  
  
  Can we make Easel easier?
&lt;/h3&gt;

&lt;p&gt;Our belief is that Easel cannot be made easier without it becoming less &lt;strong&gt;simple&lt;/strong&gt;. This is almost a self-fulfilling prophecy - if there were a way to make Easel easier without losing its simplicity, we would have done it already.&lt;/p&gt;

&lt;p&gt;As an example of this, let's look at what a standard entity looks like in Easel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pub fn hero.Hero([owner]) {
    use body=this
    let radius=1
    Body(pos=@(0, 0))
    ImageSprite(@hero.svg)
    PolygonCollider(shape=Circle(radius=), category=Category:Default)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is 7 lines of code! Maybe you could inline the &lt;code&gt;let radius&lt;/code&gt; and make it 6 lines. So 6-7 lines! &lt;strong&gt;6-7&lt;/strong&gt;!  That's at least 6-7 things a beginner must learn. They just want to do 1 thing, why do they need to learn 6-7 things?  Can we reduce this number? Can we remove some of these lines and make it easier for beginners to get started?&lt;/p&gt;

&lt;p&gt;Let's take the line &lt;code&gt;use body=this&lt;/code&gt;. Is it really necessary?&lt;/p&gt;

&lt;p&gt;If you are not familiar, &lt;code&gt;use body=this&lt;/code&gt; says that this Hero has their own body.  Sometimes an entity does not have its own body. For example, if our Hero picks up a Shield, the Shield entity would be attached to the Hero's body, and so it would say &lt;code&gt;use body=hero&lt;/code&gt; instead of &lt;code&gt;use body=this&lt;/code&gt; because the Shield has no body of its own.&lt;/p&gt;

&lt;p&gt;When you're making a basic game, an entity almost always has their own body.  This can make &lt;code&gt;use body=this&lt;/code&gt; seem like nothing but an unnecessary stumbling block for beginners.  &lt;em&gt;Why do I have to type this? What is this for? What is &lt;code&gt;use&lt;/code&gt;? What is a &lt;code&gt;body&lt;/code&gt;? What is &lt;code&gt;this&lt;/code&gt;?  Why? Why? Whyyyyyyyy?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We are literally making the programming language, we have infinite power to make it do whatever we want, so why not remove one extra stumbling block for beginners?  We could make the language assume &lt;code&gt;use body=this&lt;/code&gt; until told otherwise, for example.  Advanced programmers would have to undo it when they wanted to do something more advanced, but just like they tell autocorrect "no, thanks for the help but this time I didn't want to type 'duck'", they could learn to do that, right?&lt;/p&gt;

&lt;p&gt;We don't do this because, once you start making sophisticated games, it is very common for one Easel body to be made of many entities.  Unlike other game engines, in Easel an entity is &lt;em&gt;not&lt;/em&gt; an &lt;strong&gt;object&lt;/strong&gt;, it is a &lt;strong&gt;lifespan&lt;/strong&gt;.  Every little transient thing a hero does might be a short-lived entity: jumping, charging up their fireball, patting their dog etc.  Making &lt;code&gt;use body=this&lt;/code&gt; implicit makes life easier for beginners, but harder for advanced programmers.  It lowers the ceiling of what Easel is capable of, and we don't want to do that.&lt;/p&gt;

&lt;p&gt;Another way to look at it is, to make &lt;code&gt;use body=this&lt;/code&gt; implicit, we would need to add an exception to the rule where &lt;code&gt;body&lt;/code&gt; does not work like everything else.  This makes Easel less consistent and less &lt;strong&gt;simple&lt;/strong&gt;.  If we have to choose between &lt;strong&gt;simple&lt;/strong&gt; and &lt;strong&gt;easy&lt;/strong&gt;, we choose &lt;strong&gt;simple&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Teaching idiomatic Easel
&lt;/h2&gt;

&lt;p&gt;If we cannot move &lt;del&gt;the mountain&lt;/del&gt; Easel closer to the &lt;strong&gt;people&lt;/strong&gt;, our only choice is to help bring people closer to &lt;strong&gt;Easel&lt;/strong&gt;.  To this end, we have created a completely new set of tutorials that have a much greater focus on teaching &lt;strong&gt;idiomatic&lt;/strong&gt; Easel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Idiomatic&lt;/strong&gt; means that you are not just learning about how Easel works, you're also learning how &lt;strong&gt;you&lt;/strong&gt; should work.  Particularly, you are learning the patterns that ye olde Easel programmers of yore discovered in the land before time, so you can avoid retreading the same mistakes they made and get straight to the good harvest.&lt;/p&gt;

&lt;p&gt;For example, every beginner simply has to learn the 6-7 lines for a standard entity by &lt;strong&gt;rote&lt;/strong&gt;.  Like learning the times tables or &lt;em&gt;"mitochondria is the powerhouse of the cell"&lt;/em&gt;.  Later on, when the young Padawan becomes the Master, they will know when the rules can be bent or broken.  &lt;em&gt;You have the high ground? Who invented that rule anyway? The Jedi Council? Pfft. I know better.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There are now three new tutorials that teach idiomatic Easel, replacing the previous two.&lt;/p&gt;

&lt;h3&gt;
  
  
  A new Quickstart
&lt;/h3&gt;

&lt;p&gt;The new &lt;a href="https://easel.games/docs/learn/quickstart" rel="noopener noreferrer"&gt;Quickstart tutorial&lt;/a&gt; can be completed in around 15 minutes, whereas the previous tutorial was 1-2 hours.  Some people come to Easel with an idea already in mind for a game they want to make, and they don't want a gentle meander through the forests of the language, they want a crash course uploaded directly into their neural cavities.  When you are in a hurry, sometimes the mere length of the initial tutorial makes Easel seem more difficult than it really is.&lt;/p&gt;

&lt;p&gt;While the new quickstart tutorial is short, learners still see maybe 70% of the most important features of Easel in those 15 minutes, even if they might not absorb all of it at the time.&lt;/p&gt;

&lt;h3&gt;
  
  
  In-depth tutorials
&lt;/h3&gt;

&lt;p&gt;After the quickstart, there is a new pair of tutorials designed to be completed in succession.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The &lt;a href="https://easel.games/docs/learn/tutorial-astroblast" rel="noopener noreferrer"&gt;Astroblast tutorial&lt;/a&gt; takes 1-2 hours and makes a complete multiplayer game.  Unlike before, it doesn't just show you the steps to make the game, it includes lessons on common tasks (like handling events), gives names to common patterns (like &lt;a href="https://easel.games/docs/learn/thinking/systems" rel="noopener noreferrer"&gt;systems&lt;/a&gt;), and refers directly to Easel's fundamental programming paradigms (like &lt;a href="https://easel.games/docs/learn/thinking/reactive" rel="noopener noreferrer"&gt;reactive programming&lt;/a&gt;) by name.  It actively tries to teach you idiomatic Easel.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;a href="https://easel.games/docs/learn/tutorial-mechanics" rel="noopener noreferrer"&gt;Mechanics tutorial&lt;/a&gt; takes 4-6 hours and makes Astroblast a lot more sophisticated, but only by adding very common game mechanics that you might use yourself, like rounds, abilities, upgrades, powerups and leaderboards.  Previously, without being shown that Easel was capable of these things, beginners might not have even realized they were even possible.  This greatly lifts the ceiling of what beginners can achieve with Easel.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additionally, the Astroblast tutorial now uses the high-quality free assets from &lt;a href="https://kenney.nl/" rel="noopener noreferrer"&gt;Kenney&lt;/a&gt;, demonstrating that you can make a professional-looking game with Easel from the very beginning.  We highly recommend more people check out Kenney's assets - it is an excellent resource for all game developers!&lt;/p&gt;

&lt;h3&gt;
  
  
  Thinking in Easel
&lt;/h3&gt;

&lt;p&gt;For programmers who are already familiar with Easel, we have created a new section of the documentation called &lt;a href="https://easel.games/docs/learn/thinking" rel="noopener noreferrer"&gt;Thinking in Easel&lt;/a&gt;.  This is designed to be a collection of the idiomatic patterns used to solve common problems that Easel programmers face.  The tutorials also continuously link back to this new section for those precocious beginners with an appetite to know more.&lt;/p&gt;

&lt;p&gt;Compiling this section required &lt;strong&gt;naming&lt;/strong&gt; the idioms. For example, &lt;a href="https://easel.games/docs/learn/thinking/systems" rel="noopener noreferrer"&gt;systems&lt;/a&gt; is the name we are giving to the pattern where functions add ongoing behavior to an entity.  It didn't have a name before, which made it difficult to teach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try it!
&lt;/h3&gt;

&lt;p&gt;If you are not too busy scrolling FaceTwitter right now, consider giving the new tutorials a test drive, starting with the &lt;a href="https://easel.games/docs/learn/quickstart" rel="noopener noreferrer"&gt;Quickstart&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>easel</category>
      <category>gamedev</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
