When: Mondays, 5pm-6pm
Leader: William Loopesko
The interface describes the way in which the language can be written and then interpreted by the computer. There are 3 basic interfaces for programming computers.
Language | Difficulty | Interface | Project types | Career Path |
Scratch | Easy | Blocks | Games, animations, stories | No |
Minecraft | Easy | Blocks | Minecraft modules | No |
Roblox | Medium | GUI + code | Roblox games | No |
Unity | Hard | GUI + code | Professional level games | Yes |
HTML/CSS | Medium | Code | Simple static websites | Yes |
Javascript | Hard | Code | Full web/mobile applications/backends | Yes |
Python, C, Java, etc… | Hardest | Code | Literally anything else that you can code (AI, databases, robotics, etc…) | Yes |
Scratch– https://scratch.mit.edu/
Scratch is the best way for kids who know nothing about coding to get started. There are easy tutorials and it’s intentionally designed to make coding fun and engaging for kids. It’s like using legos to introduce concepts of structural engineering. Scratch is great for building games, stories and animations and there’s an impressive library of games and other projects that have been built in scratch. Scratch is designed for kids to be able to go at their own pace and have the freedom and creativity to choose their own adventure.
Minecraft– https://education.minecraft.net/en-us/resources/computer-science-subject-kit/coding-with-minecraft
Minecraft provides a way for kids to learn to build minecraft modules using a block programming interface similar to scratch. For kids who love playing minecraft, this is a perfect way to introduce concepts of programming using a block interface, but it’s much more limited than scratch in that it can only be used inside of minecraft.
Roblox– https://create.roblox.com/docs/en-us/platform
Roblox is an extensible open gaming platform that provides a GUI powered coding interface to build games that can then be played on Roblox. Unlike block based interfaces, Roblox requires actual coding (in a language called luau) to build interactions in the game, but the GUI provides a very structured interface for coding simple programs without having to build a whole program with just code.
Unity– https://learn.unity.com/
Unity is the number one tool used by professional game developers to build the world’s most popular games. Unity is basically a much more sophisticated version of Roblox, with a very sophisticated design GUI and scripting interface for writing all of the game logic in a language called C#.
HTML/CSS– https://www.w3schools.com/html/
HTML/CSS are the languages in which every website page (the part of the website that you see) is built.
Unlike all of the other languages described here, HTML/CSS aren’t true programming languages and generally lack the basic concepts of programming shared by other languages. Instead HTML/CSS provide ways to display and style content in a web browser and can be used to build static (static means everyone who comes to that website sees the same thing) mobile responsive websites with limited interactions. Nevertheless, as building blocks of the internet, HTML/CSS are mandatory entry points for anyone who wants to learn about websites and web application programming. HTML/CSS can also be compiled into interfaces that are used to build mobile apps.
Javascript– https://codeguppy.com/
Javascript is the world’s most popular programming language and is the language that the internet runs on. Javascript is most frequently used in combination with HTML/CSS to build the interactions and connections that anything beyond the most simple websites require and can be used to build professional full scale web/mobile applications. Javascript can also be used to build web servers. Javascript is so popular because unlike any other programming language it can be run directly in any web browser and doesn’t require any complicated interpreters or compilers, which makes it really easy to get started with.
Python, C, Java, PHP, etc…
There are hundreds of other programming languages that are used by professional programmers to build all of the rest of the software that the world runs on. These languages are immensely powerful and complicated (with somewhat of an exception for Python) and probably not great for kids, though some advanced, older kids who have specific applications or career aspirations in mind may express some interest in learning some of these languages (especially python).
This curriculum is designed to be flexible and adapted to the skill level, and interests of each kid. Because coding is based on projects, any of these sections could last an undetermined amount of time depending on the complexity of the project that each kid decides to build, so it’s a little tough to assign a time to each one. Also, because of the wide range of interests and abilities of each kid, the age guidance in the curriculum is merely a suggestion, motivated kids could progress through each level and graduate into the next one with enough work.
● Complete beginners need to learn the fundamentals of programming (variables, conditionals, loops, arrays, objects and functions) before they can move to more advanced projects and languages.
● Scratch should be the entry point for coding for any kids below the age of 13, though some kids who really love minecraft could also start there.
● Older kids will probably want to skip Scratch and start directly with Roblox or HTML/CSS depending on which path they choose (see below).
● This path is intended for kids who want to learn how to build their own games. Completion of this path could set kids in the direction of exploring a career in game development. This path is accessible to any age group and offers the greatest range of options for kids of all ages.
● The objective of this path would be to complete a game in the game development platform of their choice
● Elementary School: Elementary school should probably just spend their time in scratch or minecraft and be encouraged to complete a series of projects in that platform (stories, animations, games, etc…) using guidance and inspiration from the scratch tutorials.
● Middle School: Kids in this age group will probably be able to figure out scratch (or minecraft) pretty quickly (if they don’t know it already) and should be encouraged to complete in game scratch before moving into Roblox and working on a more sophisticated game there.
● High School: High schoolers will probably want to skip scratch and instead dive straight into roblox before moving up into Unity. Kids who complete this path in Unity should have at least one project that they could put on a professional game developer portfolio for applying to entry-level game developer positions. (I’m not a game developer and have never hired game developers, so I don’t know nearly as much about this path, or how hiring in this path works, but I imagine that professionally it’s similar to the web/mobile application path below).
● This path will teach kids about the wider world of programming and software development beyond gaming and prepare for exploring a career in software development (in any number of fields, not just web/application programming). This path probably doesn’t make sense for younger kids since there are no GUI or block interfaces in this path.
● Middle School: kids in this age group will start by learning the basics of HTML/CSS and should then learn the basics of javascript. The basic objective for kids this age would be to build a website with basic interactions/connectivity or a simple javascript/HTML/CSS browser game, though some kids in this age group could probably start on parts of the larger projects for older kids described below.
● High School: kids in this age group should be able to move pretty quickly through HTML/CSS and then get much more in depth in Javascript. The objective for kids in this age group should be to build a full-stack web application with “services” including things like data connections, databases, servers and user-authentication. Kids who complete this path would have a project that they could put onto a professional software developer portfolio for applying to entry level software developer roles (these are the kinds of roles I hire for, and demonstrated completion of projects like this are what I’m looking for when I hire).