Tech Titans Computer Literacy & Coding Club

10Four Tech Titans Youth Computer Club

When: Mondays, 5pm-6pm

Leader: William Loopesko

What is coding?

Coding (a.k.a programming) is the practice of writing instructions for computers to be able to execute. Coding is the tool that is used to build software. Coding is done through a language which the computer has been trained to understand. Coding can be done in several languages which all have different uses and interfaces (see below). While coding is immensely powerful, and basically powers the world that we live in, at its core it’s based on only a few key concepts (variables, conditionals, loops, arrays, objects and functions) that are broadly shared by every language. Learning these concepts and how to apply them in any language, will teach kids how to think like a programmer and prepare them to learn any other language that they want to graduate into. The more programming languages you know, the more you’ve internalized the concepts of programming, and the easier it becomes to learn new languages.

What is a coding interface?

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.

  • Blocks: This is a way of programming without actually having to write any code. Instead programs are built from blocks that represent small pieces of code and are then clicked together to build longer, more complicated programs (much like Legos can be used to build structures). Block programs are a perfect way to introduce kids to the fundamentals concepts of programming in a fun easy way, but are fairly limited in their functionality and professional programmers don’t use blocks.
  • Graphical User Interfaces: GUIs are used primarily for game development, where the visual aspects of the game can be built without having to use code (like graphics and animation software, e.g. Photoshop). The GUIs then provide a coding interface to be able to write programs in a language determined by the GUI to control interactions with the different elements or characters in the scene. GUI interfaces like Unity are used in professional game development, but in general GUI powered languages are generally fairly limited in their functionality outside of gaming.
  • Coding: This is real programming, code is written as a series of instructions in text files that are then compiled and interpreted by a computer. This is the way that the overwhelming majority of the software that we interact with is written.

Coding Interface Examples

Blocks (Scratch)

 

Unity (GUI)

 

Javascript

Programming Languages

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).

Curriculum

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.

Learning the basics of programming

● 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).

The Gaming Path

● 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).

The Web/App Development Path

● 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).