<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Education on Christian Martínez De La Rosa</title><link>https://christt105.github.io/tags/education/</link><description>Recent content in Education on Christian Martínez De La Rosa</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sat, 11 Jul 2026 00:00:00 +0200</lastBuildDate><atom:link href="https://christt105.github.io/tags/education/index.xml" rel="self" type="application/rss+xml"/><item><title>Teaching a Video Game Creation Workshop with Unity and Godot</title><link>https://christt105.github.io/blog/citm-game-workshop/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0200</pubDate><guid>https://christt105.github.io/blog/citm-game-workshop/</guid><enclosure url="https://christt105.github.io/blog/citm-game-workshop/cover.png" length="1160150" type="image/png"/><description>&lt;p&gt;Hello again!&lt;/p&gt;
&lt;p&gt;This week I&amp;rsquo;ve been quite busy teaching a video game development workshop for teenagers. It&amp;rsquo;s the second year I&amp;rsquo;ve gotten myself into this mess, and fortunately, it went much better than the last one.&lt;/p&gt;
&lt;p&gt;The truth is, I&amp;rsquo;ve always liked teaching. I&amp;rsquo;m not the best teacher in the world, but I try to make concepts clear. I really enjoy preparing the materials, explaining them, and most of all, seeing how they teach me things too.&lt;/p&gt;
&lt;p&gt;The opportunity came up at the university where I studied, in collaboration with the city council, as part of a program to promote university studies among teenagers.&lt;/p&gt;
&lt;h2 id="last-year-my-first-experience"&gt;Last year: My first experience
&lt;/h2&gt;&lt;p&gt;Last year I had students from first to fourth grade of secondary school (ESO), and to be honest, I went a bit overboard with the material. In my defense, I will say that it was my first experience and I was told the students would be older. The format was 4 days, three hours a day.&lt;/p&gt;
&lt;p&gt;To add some context, earlier that same year I had done a two-hour workshop with older high school students. Having so little time, I decided to make a Flappy Bird clone in Unity. The idea was to give them an empty project with the sprites and program it together. Just getting the bird to jump and the pipes to spawn was enough for a first contact.&lt;/p&gt;
&lt;p&gt;In case it&amp;rsquo;s useful to anyone, the material for that workshop is here:&lt;/p&gt;
&lt;a class="github-repo-card" href="https://github.com/christt105/FlappyBirdUnityWorkshop" target="_blank" rel="noopener"&gt;
 &lt;img src="https://avatars.githubusercontent.com/u/36189169?v=4" alt="christt105 avatar" class="repo-avatar"&gt;
 &lt;h3&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;
 &lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;
 &lt;path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /&gt;
&lt;/svg&gt;


 christt105/FlappyBirdUnityWorkshop&lt;/h3&gt;
 &lt;p&gt;A beginner-friendly Unity project for teens to learn 2D game development&lt;/p&gt;
 &lt;div class="repo-stats"&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-star"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z" /&gt;&lt;/svg&gt; 0&lt;/span&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-git-fork"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M10 18a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M5 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M15 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M7 8v2a2 2 0 0 0 2 2h6a2 2 0 0 0 2 -2v-2" /&gt;&lt;path d="M12 12l0 4" /&gt;&lt;/svg&gt; 1&lt;/span&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-calendar-event"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12" /&gt;&lt;path d="M16 3l0 4" /&gt;&lt;path d="M8 3l0 4" /&gt;&lt;path d="M4 11l16 0" /&gt;&lt;path d="M8 15h2v2h-2l0 -2" /&gt;&lt;/svg&gt; 2025-03-17&lt;/span&gt;
 &lt;/div&gt;
 &lt;/a&gt;
&lt;p&gt;&lt;img alt="Flappy Bird Clone made in Unity" class="gallery-image" data-flex-basis="136px" data-flex-grow="56" height="868" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://christt105.github.io/blog/citm-game-workshop/flappy_bird.png" width="492"&gt;&lt;/p&gt;
&lt;p&gt;Since the summer workshop was four days in a row, I naively thought we would have time to finish the Flappy Bird and that I would need more games to fill the time. I decided to do one game per day so that if someone missed a day, they could start from scratch with everyone else the next day. I prepared a Pong (Unity), Flappy Bird (Unity), Asteroids (Godot) and a 3D platformer (Godot).&lt;/p&gt;
&lt;p&gt;Doing the Flappy Bird was somewhat mandatory, since they had advertised the workshop using the Unity logo. I insisted quite a bit that Godot was much better for teenagers. It barely weighs 100MB, you just download it and open it. None of the 15GB of Unity or the torture of forcing kids to create accounts. Also, Unity&amp;rsquo;s compile times on low-end computers are a nightmare, and GDScript is much cleaner for them to understand. I was pretty annoying about sneaking Godot into the syllabus, and the truth is it turned out well. If there&amp;rsquo;s one thing I excel at, it&amp;rsquo;s convincing people to use products I don&amp;rsquo;t get paid for.&lt;/p&gt;
&lt;p&gt;In the end, things went a bit worse than I expected. Although they had a great time, we barely had time to finish any game. The younger ones struggled to keep up, and I had to go one by one fixing what they broke, leaving the older ones waiting and bored.&lt;/p&gt;
&lt;p&gt;The best day was definitely the last one, with the 3D platformer. I prepared a modified version of Kenney&amp;rsquo;s excellent &lt;em&gt;Starter-Kit&lt;/em&gt;. I deleted a couple of lines so the character wouldn&amp;rsquo;t move at the start, programmed them together quickly, and from there, I let them create their own levels by dragging platforms and coins. They had a blast. Some even took out paper and pens to design their levels before building them.&lt;/p&gt;
&lt;a class="github-repo-card" href="https://github.com/KenneyNL/Starter-Kit-3D-Platformer" target="_blank" rel="noopener"&gt;
 &lt;img src="https://avatars.githubusercontent.com/u/6953026?v=4" alt="KenneyNL avatar" class="repo-avatar"&gt;
 &lt;h3&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;
 &lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;
 &lt;path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /&gt;
&lt;/svg&gt;


 KenneyNL/Starter-Kit-3D-Platformer&lt;/h3&gt;
 &lt;p&gt;Godot&lt;/p&gt;
 &lt;div class="repo-stats"&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-star"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z" /&gt;&lt;/svg&gt; 1181&lt;/span&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-git-fork"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M10 18a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M5 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M15 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M7 8v2a2 2 0 0 0 2 2h6a2 2 0 0 0 2 -2v-2" /&gt;&lt;path d="M12 12l0 4" /&gt;&lt;/svg&gt; 173&lt;/span&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-calendar-event"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12" /&gt;&lt;path d="M16 3l0 4" /&gt;&lt;path d="M8 3l0 4" /&gt;&lt;path d="M4 11l16 0" /&gt;&lt;path d="M8 15h2v2h-2l0 -2" /&gt;&lt;/svg&gt; 2026-07-22&lt;/span&gt;
 &lt;/div&gt;
 &lt;/a&gt;
&lt;p&gt;&lt;img alt="3D Platformer Game in Godot" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="719" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://christt105.github.io/blog/citm-game-workshop/platformer3D.png" srcset="https://christt105.github.io/blog/citm-game-workshop/platformer3D_hu_ff141ec196888488.png 800w, https://christt105.github.io/blog/citm-game-workshop/platformer3D.png 1279w" width="1279"&gt;&lt;/p&gt;
&lt;h2 id="this-year-improving-the-formula"&gt;This year: Improving the formula
&lt;/h2&gt;&lt;p&gt;For this year I wanted to improve the experience. Since I wasn&amp;rsquo;t given much more information, I assumed I would have the same age range. I used the same repository as last year:&lt;/p&gt;
&lt;a class="github-repo-card" href="https://github.com/christt105/CITMGameWorkshop" target="_blank" rel="noopener"&gt;
 &lt;img src="https://avatars.githubusercontent.com/u/36189169?v=4" alt="christt105 avatar" class="repo-avatar"&gt;
 &lt;h3&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;
 &lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;
 &lt;path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /&gt;
&lt;/svg&gt;


 christt105/CITMGameWorkshop&lt;/h3&gt;
 &lt;p&gt;&lt;/p&gt;
 &lt;div class="repo-stats"&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-star"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z" /&gt;&lt;/svg&gt; 0&lt;/span&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-git-fork"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M10 18a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M5 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M15 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M7 8v2a2 2 0 0 0 2 2h6a2 2 0 0 0 2 -2v-2" /&gt;&lt;path d="M12 12l0 4" /&gt;&lt;/svg&gt; 0&lt;/span&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-calendar-event"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12" /&gt;&lt;path d="M16 3l0 4" /&gt;&lt;path d="M8 3l0 4" /&gt;&lt;path d="M4 11l16 0" /&gt;&lt;path d="M8 15h2v2h-2l0 -2" /&gt;&lt;/svg&gt; 2026-07-09&lt;/span&gt;
 &lt;/div&gt;
 &lt;/a&gt;
&lt;p&gt;The most important decision was to cut content. Four games were too many, so I kept the two most visual ones: Flappy Bird and the 3D platformer. That way we had two days of Unity and two days of Godot. Maybe using two engines could confuse them a bit, but I wanted them to see that there are different tools with their pros and cons (and because the organization wanted Unity and I wanted Godot, why lie).&lt;/p&gt;
&lt;p&gt;I planned the first day the same way: an empty project to make Flappy Bird together. The second day I gave them the project already advanced, deleted some parts to fill in together, and gave them free time to add mechanics and change the sprites.&lt;/p&gt;
&lt;p&gt;The third day was dedicated to writing code to create the base mechanics for the platformer, and the last day was entirely for them to create their own level while I helped them program anything they could think of.&lt;/p&gt;
&lt;h2 id="using-ai-to-improve-the-material"&gt;Using AI to improve the material
&lt;/h2&gt;&lt;p&gt;When I was preparing all this for this year, I still had a Claude subscription, so I decided to use it to do things that I wouldn&amp;rsquo;t have done due to a lack of time (or laziness).&lt;/p&gt;
&lt;p&gt;Last year I noticed that the more autonomous kids got bored if I was helping the younger ones. So I asked Claude to generate step-by-step guides so that those who were lost could review, and the advanced ones could add extra mechanics on their own.&lt;/p&gt;
&lt;p&gt;The guides were great, but in file format, they were going to be a bit complex for them to check. Since GitHub Pages is super easy to use, I asked the AI to build a simple website with the guides. It turned out exactly as I wanted: accessible and very visual. I also integrated the presentations using a Markdown slide format (Marp) that Claude taught me. Everything was kept in a single point of reference with download links. The website is this one: &lt;a class="link" href="https://christt105.github.io/CITMGameWorkshop/" target="_blank" rel="noopener"
 &gt;CITMGameWorkshop&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Workshop Website" class="gallery-image" data-flex-basis="162px" data-flex-grow="67" height="1892" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://christt105.github.io/blog/citm-game-workshop/web_screenshot.png" srcset="https://christt105.github.io/blog/citm-game-workshop/web_screenshot_hu_efb84d1ed027f92f.png 800w, https://christt105.github.io/blog/citm-game-workshop/web_screenshot.png 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;Finally, having one branch with the solution and another with the template was a chaos to maintain. The AI gave me the idea of using specific comments in the full code. I set up a CI in GitHub Actions that, upon push, looks for those comments, removes the corresponding code snippets, and updates the &lt;em&gt;release&lt;/em&gt; with the template ready for the students. A marvel that, without AI, would have been totally out of my scope for the time I had.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Script I use in CI to generate the empty template&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;glob&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;glob&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;FlappyBirdWorkshop/Assets/Scripts/**/*.cs&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recursive&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Removes all solution code between the markers&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;([ \t]*)// &amp;lt;SOL&amp;gt;.*?[ \t]*// &amp;lt;/SOL&amp;gt;\n?&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;\1\n&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DOTALL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;For example, for the 3D platformer in Godot, the code looks like this in the main repository, and the CI takes care of removing the red lines leaving it ready for the students:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-diff" data-lang="diff"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; func _physics_process(delta):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # TODO: Aplica la gravedad al personaje
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- # &amp;lt;SOL&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- velocity.y -= gravity * delta
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- # &amp;lt;/SOL&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="the-workshop-development"&gt;The workshop development
&lt;/h2&gt;&lt;p&gt;This year&amp;rsquo;s workshop went phenomenally well. To my surprise, all the students were in their third and fourth year of secondary school, so the skill level was much more unified. They were super focused, with no need to go after them, and they didn&amp;rsquo;t stop asking questions and having ideas.&lt;/p&gt;
&lt;p&gt;My main goal was to awaken their creativity, and the last day was a total success. One kid discovered that if he parented objects, they moved together. So he made a platform that fell when stepped on and hung a bunch of deadly spikes from it. Basically, if you stepped on it, a rain of spikes fell that you had to dodge. Another student built a very cool &amp;ldquo;dialogue&amp;rdquo; system using areas and triggers that we had briefly seen. Everyone finished their level and ended up playing each other&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;At the end, I asked them which engine they liked the most, and the majority said Godot. For a workshop, it is unbeatable: in 10 minutes they all had it downloaded, open, and ready. With Unity, you always lose a lot more time, and if someone&amp;rsquo;s account login fails, you are already behind schedule.&lt;/p&gt;
&lt;h2 id="conclusions"&gt;Conclusions
&lt;/h2&gt;&lt;p&gt;Even though this year went great, I think it will be the last time I do the workshop, my Last Dance. I changed jobs, the schedule is stricter, and this time I had to use more vacation days to be able to teach it. I really like doing it, but I don&amp;rsquo;t know if it&amp;rsquo;s worth losing those days.&lt;/p&gt;
&lt;p&gt;If I were to repeat it, I&amp;rsquo;m clear about a couple of things: I would do it 100% in Godot. I would make the Flappy Bird in Godot so that the editor is familiar from day one. And on the 3D platformer day, I would give them a project with many mechanics already built so they don&amp;rsquo;t get overwhelmed programming and can focus on designing levels and dragging objects from minute one.&lt;/p&gt;
&lt;p&gt;I had a great time these four days. The organization was also very happy seeing what the kids had achieved on the last day. It seems I&amp;rsquo;ve already convinced them that everything could be done with Godot. I take away a good learning experience on how to treat and teach teenagers. In the end, the most important thing at these ages is to encourage effort, creativity, and for them to see that they are capable of creating things they can be proud of.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll leave it here, the post got a bit long. See you in the next post!&lt;/p&gt;</description></item></channel></rss>