iD Tech at SUNY New Paltz

Week One: "Roblox Enrepreneur: Lua Coding and Game Scripts" (6/25 - 6/29)

Coding with Lua—a powerful and fast programming language—can lead to careers in coding and development after college, but why wait? Top Lua coders and developers designing games on Roblox are making over $1 million a year right now. Start with Roblox's built-in editor to create 3D worlds and expand their functionality with Lua, which enables students to create scripts for their own game or even sell to other designers for use in their games!

— Course Description from iD Tech

Me and a fellow instructor

For my first week at iD Tech Camps, I was fortunate enough to only have one student in my class. This meant that I was able to spend most of my time helping him learn the material and even go on to more advanced topics. Having one student has made it easy for me to get into the swing of being a teacher, especially since this is something I have never done before. As overnight staff, we are considered mentors to the children who come to the camp, and so far it has been a challenging yet very rewarding experience. My student for the first week came in having nearly full knowledge of the Roblox coding language, so I was concerned that I wouldn't be able to teach him very much. As it turned out, he taught himself most of what he knew via YouTube tutorials or searching through web forums. He lacked a basic knowledge of introductory coding, such as the meanings of key words like methods, parameters, or the actual use of scripts. By the end of the week, my student was even more passionate about coding than he was simply creating things in Roblox. He exceeded my expectations for the week, and taught me that children aren't actually that difficult to teach, as long as you can figure out how to get them interested in the subject matter. For my student this week, he was already incredibly passionate about Roblox, but by the end he was excited to learn more programming languages and starting even more unique projects. 

Roblox uses a scripting language known as LUA for coding objects within your game. Prior to teaching this class, I had never used or even heard of the LUA scripting language.  Since my student for the week already knew most of what the curriculum had to offer, we ended up going into very advanced topics which caused me to learn alongside my student. Essentially, he'd ask me how to do something within Roblox Studio, and I would have to read the staff forums for iD Tech instructors, or sometimes even have to Google search his questions. Since I already know other object-oriented languages (such as Java), it was very easy for me to pick up how to do the same types of things in LUA, since it is basically a simplified version of Java. The IDE for Roblox is very forgiving so I didn't have to spend ages going over simple things like syntax, and we were able to get into complex code right from the start. To the right is a screenshot from the Roblox guide on iD Tech's "Game Plan," which is a guide for both the instructor and the student; it walks students step-by-step through code, and assumes no prior knowledge to the subject matter. Game Plan uses basic gamification techniques to teach the kids; there are quiz questions spread throughout the course map that will give kids points for each correct answer, to check for understanding and help me (the instructor) gauge their current knowledge level. 

Throughout the day, we'd have activities for the kids to give them some time to let out pent-up energy from sitting at their computers all day. One of these activities was called "The Marshmallow Challenge," and it was an idea I came up with after my first day with the kids. During orientation for SUNY Poly, one of the professors presented a TED Talk video, in which Tom Wujec describes the "Marshmallow Problem" in its entirety. He goes over the way it teaches participants the basics of team building and cooperation. It worked well for the kids (despite creating a gooey mess), as they had to work together with their limited resources to compete against other teams. The basic concept of this challenge is to build the tallest free-standing structure, with the marshmallow resting safely at the top. The kids surprised me with how well they were able to cooperate for this challenge, especially since it was performed early in the week before anyone really got to know each other.

Week Two: "Develop and Code Games with C++" (7/2 - 7/6)

Take C++, one of the world's most versatile programming languages, to the next level by using a graphics library to create your own arcade-style games. Build them from the ground up and code your own unique mechanics. Jump-start a game programming career while using the industry-standard Microsoft Visual Studio Community to create impressive projects.

— Course Description from iD Tech

Three Students accompanied by the instructor

My second week at iD Tech threw many challenges my way. Initially, I was going to teach Making and Coding Mobile Games for Android and iOS. This class only had three students, which was definitely manageable, since most of the other classes were at max capacity (about 7-9 students). I was talking with Alex Huard, who is also working with me at iD Tech this summer, and we decided to trade classes so instead I would be teaching "Code Apps with C++," and he would teach my Mobile Game course. Both classes only had three kids, and I had more knowledge on C++ while he was definitely more knowledgeable in the field of mobile game development, so we talked with our manager and were able to swap classes. Lo and behold, the Code Apps with C++ class was actually merged with another C++ course, so instead of having only 3 students, I ended up taking on an additional 5 students, totaling 8 altogether. On top of that, when reviewing the curriculum for my Code Apps with C++ class, I didn't know that this other class with 5 students was going to be taught by me as well, so on Monday I had no clue what I was supposed to be doing with all the extra kids. Fortunately for me (and them), the classes are almost identical, with the minor change of the "Code and Develop Games with C++" curriculum also having content about SFML. At the start of the day on Monday, I had absolutely no clue what that even stood for or what the kids were supposed to be doing with it. As it turns out, SFML just stands for "Simple and Fast Multimedia Library," and it is used to add graphics to apps/games with C++. Fortunately for me, only three of my students ended up getting far enough to use SFML, and they mostly used each other as their resource for learning this tool, as most of my time was divided among the other kids. After the first day, we received a phone call from one of my students' parents, who said her daughter was a little upset that she didn't get much one-on-one time with me that week. Incidentally, this call was in regards to one of the students that I sat next to for most of the day, walking her through basics of C++ coding. Since I was going from a class size of 1 last week, to an anticipated class size of 3, to an actual class size of 8, I was very stressed this week (to say the least). Needless to say, the addition of a concerned parent just made my hectic week a little bit worse. Nonetheless, by the second day the kids were all relatively on the same page as far as basic coding knowledge, so they were able to go off on their own a bit more and get into making their final projects for the Friday Family Showcase we hold each week. This made it significantly easier for me to circulate around the room and answer the kids' questions, and the parent was happier the second day after seeing how much more one-on-one time her daughter was receiving. Trying to teach a semester's worth of C++ to a group of 13-15 year-olds was definitely challenging, but in the end they all created very unique projects, including a DnD-style game and a ripoff of Microsoft Paint, which was done by one of the students using SFML. Another student created a calculator console app that allowed users to enter in functions ranging from simple addition/subtraction to more advanced functions like sin/cosine! I was incredibly impressed by my students this week, as they all worked hard throughout the week and made some really fantastic projects by the end. 

Week Three: "Java Coding: Build Mods with Minecraft" (7/9 - 7/13)

What better way to explore the fundamentals of Java programming than through digging into Minecraft? Students start with the basics, learning about coding as they expand upon available items in the ever-popular game, adding tools, blocks, and mobs that weren't there before. This course allows students to push their skills further than ever—studying every nuance of Minecraft's source code, which is sure to get them excited about a future in coding.

— Course Description from iD Tech

My class and I

Week 3 was one of my favorite weeks of working at iD Tech. I was a little nervous to teach the Java Minecraft course because I had only just learned it during my last semester of college. While I ended up doing really well in the course, I was still a little weary of my own abilities so the idea of teaching my knowledge to someone else was definitely worrisome. Fortunately for me, this class only had two students in it, so I was in for a very easy week. On top of that, the kids were very eager to learn, so teaching them was a breeze. One of the best parts about this class was giving the children creative freedom so they could make what ever they wanted to, and they could make their own art using a tool I showed them, called "Piskel." I had used this previously at college in my COM219 class when my group was making a recreation of The Binding of Isaac.

One of the reasons I really loved this class was because I was able to show my students some really cool tools and tricks I knew, rather than what iD recommended. For example, the kids had to create their own artwork for the items they were adding to their Minecraft worlds, and iD Tech traditionally uses Photoshop for this. While Photoshop is probably more capable of making better quality artwork, I suggested that the kids use Piskel instead because it is so easy to use. The kids loved working in Piskel, and one of my coworkers taught this same class the following week and her 8-student class had a blast with it. In addition to showing off my own skills, I also learned a ton of new things this week. The skill that I am most proud of is when I learned how to make animated blocks and tools/items. While it seems like it would be easy, there is actually a long process to it that includes a lot more than just making a sprite with several animations. For starters, you need to export your images as PNGs in a spritesheet, which is where using Piskel trumps Photoshop. Piskel can do this at the click of a button, whereas in Photoshop you would need to manually resize and alter your sprites, but Piskel is designed for pixel art (hence the name) so it is great at exporting your artwork exactly how you need it. The next step is saving your sprite into the correct folders. Since we were using a resource pack from Forge, it was pretty simple for us to figure out where everything needed to be placed. After the spritesheet was in the right folder, we had to make a new text document inside that very same folder. This part was especially tricky because kids have a really hard time understanding naming conventions (such as camel case or pascal case), so when I told the kids everything needed to be named the EXACT same for this to work, they often misunderstood and had capitalization errors that prevented things from working correctly.

I think the most difficult challenge for me this week was trying to understand how the JSON editor worked. To give you an idea, I can't even explain why I had a hard time with it, because nothing about JSON has made sense to me since I started. Difficulties aside, this was definitely one of my favorite courses to teach and I'm very glad I swapped with a coworker, because I was initally supposed to work with Group 1 kids this week in the normal Minecraft class, which is exactly what it sounds like: Teaching 7-9 year-olds how to play Minecraft. I am very glad I taught the Java course because I was able to solidify my knowledge in Java and am now very confident in my coding abilities.

Week Four: "Roblox Enrepreneur: Lua Coding and Game Scripts" (7/16 - 7/20)

Roblox is one of the fastest-growing game creation platforms on the planet, with more than 60 million players per month and top developers making over $1 million a year. In this course, you'll use Roblox’s built-in editor to create 3D worlds and then use Lua to code game mechanics. Publish, share, and play games with friends on any platform from console to mobile. Study games that have been runaway hits and learn how to implement some of the same monetization strategies.

— Course Description from iD Tech

Me with my class

Week four was, without a doubt, the most challenging week of the summer. This was the second time that I had taught the Roblox class, and it was ten times the size of my previous Roblox class. In addition to the sheer number difference between the classes, the students were also at much different paces and were incredibly energetic, to the point of being difficult to teach. One of the most common types of students I saw this summer were the students whose parents enrolled them in the camp so that they'd have something to do during the summer. Unfortunately for me, the Roblox class is almost always filled with these types of students. While many of the kids still really enjoy learning and are excited to be there, others are far less passionate about coding and so it can be difficult to help them create a project by the end of the week. For this class, I had to sit with a few of the students for 20-30 minutes at a time to help guide them because the curriculum seemed too tough. Many parents started to complain that their child wasn't getting as much one-on-one time as other students, so I immediately had to change my approach to teaching this class. Rather than focusing on their final projects right away, I decided to show them the fundamental tools necessary to create a good game, which primarily focuses on obstacle courses for the kids' projects. Many of them were happy with this, but a select few had more detailed projects that required very detailed explanations, as well as me needing to learn a lot more LUA than I already did. One of the students was trying to make a Five Nights at Freddy's themed game, which sounded much simpler than it turned out to be. The cool thing about Roblox is that there is a community toolbox where users can share creations (models, scripts, music, etc.) with other creators in the Roblox Studio. Some of these models even come with scripts attached, which makes coding much simpler for younger students who may be struggling. Unfortunately, in the massive collection of FNAF characters on the Roblox toolbox, there wasn't a single character that had scripts matching what we needed: the ability to follow the player after a set amount of time, and kill them if they reach the "safe room." The hardest part about this class was that all of these students were incredibly talented, and I hated to let any of them down if they wanted to add something to their project, so I ended up spending all of my free time (including outside of work) trying to solve their issues or create code that helped them out. I regret to say that I was never able to get a perfect "Freddy" for my student's FNAF game, however she was still incredibly excited about the course and couldn't wait to come back next year.

While I learned a lot of new features of LUA this week, one of the biggest challenges I overcame was realizing when a project was just too much to handle, and trying to get the students to focus on smaller tasks to create one incredible project, rather than something that only half-worked because the student couldn't get everything done in time from being too ambitious. This is a problem I often encounter in my college classes as well, so I am glad the students realized how much coding it really takes to create a decent game. While something may sound like a simple idea, it probably took someone several weeks to come up with a bug-free code that works exactly as expected. More often than not, I couldn't always guarantee that my games would work the way I wanted them to, but after a lot of problem solving I was usually able to get everything figured out. 

Week Five: "CodeMaker: Code and Design Games with Scratch" (7/30 - 8/03)

Aspiring coders dive into creating animated stories and interactive experiences while learning essential programming concepts with Scratch. This drag-and-drop, creative environment developed by MIT uses sprites and code blocks to set a foundation of computational thinking—an essential skill in this tech-driven world—enhanced by bright visuals and engaging design.

— Course Description from iD Tech

Tour of the 3D Printing Facility

In my last week at iD Tech I taught Scratch coding to group 1's, which is the youngest group of children who go to iD Tech (ages 7-9 years old). This was one of my biggest weeks for learning new things because I had NO CLUE what Scratch even was before I went to camp. As it turns out, Scratch is basically one big puzzle, where the lines of code are all pieces of code and you put it together into one big program. Scratch is also object-oriented, so it was easy for me to learn since Java is also object-oriented and it's my favorite programming language. For the first few days, I taught the children the basics of coding, like what a for loop or a while loop does. Fortunately for the kids, Scratch has all the code laid out into different categories. They had me laughing most of the week because Scratch has two built-in buttons, and everything else uses a keyboard and mouse. The built in buttons are a green flag, which essentially translates to "run program", and a red stop button, which does exactly what you'd expect it to. The kids would always groan whenever I would say "The next thing we're going to add is an event for 'When the green flag is clicked'," because this is the most used feature in a Scratch game. One of the reasons why I loved this course so much is because it's really easy to write the code, since it's all drag-and-drop and fits together exactly like a puzzle piece, so all of the code parts have specific shapes that help kids to figure out what can and can't go in each section of their code. There are some really neat features in Scratch, such as the "broadcast" function. As previously stated, I didn't know Scratch at all before I taught the class at iD. So essentially, as the kids were learning how Scratch worked, so was I. Obviously I spent some time before this week reading up on the curriculum and messing around with Scratch, but I only knew the very basics. Throughout the week, I was playing around and seeing what was and wasn't possible to create on Scratch. Every time I thought of something to make, I looked it up thinking, "There's no way you could make this in Scratch." To my surprise, there are even games like GTA and Terraria built in Scratch. While it takes a TON of code to make these games anywhere close to being good, it is actually possible!

Another reason I loved teaching Scratch is that all of the code for these games is available on the Scratch site, so whenever you find a cool game you can open it up in the editor and learn how to recreate it yourself! For example, one of the games I created this week was a swimming game for one of my kids who was a swimmer at school. He was more advanced than a lot of the other kids, so I sat with him and showed him how to make that game, and some of the other students in my class also got very excited to learn how to make this game! Throughout the week I showed the kids how to make simple games like a race to the finish, pong, or a catch game, so I was thrilled when Thursday hit and they all wanted to learn more and create more advanced games, like basketball or a swimming race. Additionally, I had a lot of fun making games in Scratch and would love to continue making more at some point. The kids really liked it because it presents difficult stuff in an easy-to-use way, so students who are brand-new to coding can learn without needing to worry about syntactical errors, which are one of the biggest causes of stress for people who are new to coding. I saw this first hand in every single class this summer - the biggest reason kids had errors in their code was because something somewhere got misspelled, or they used a semi-colon in the wrong spot/didn't put one in at all. I am really glad I was able to teach this course, because it is a really simple way to teach complex material to young programmers. If their first introduction to coding is in a setting like the Minecraft Java course, it is really easy for kids to get stressed out and think that coding is not for them. I often had these thoughts running through my own head when I was learning programming, because I had no foundation for this knowledge and everything getting thrown at me never seemed to make sense. I wish that I had something like this when I was growing up, because it would have paved the way for a much better understanding in a much shorter amount of time.