# IOI Medalist (資奧國手) Teaches Advanced Scratch... For Free!
## Why Scratch?
Many people think of Scratch as a "kid's" language, choosing to abandon it once they move on to some "harder" one like C++ or Java. However, its block-based code and cute interface belie its capabilities. Through its nine-colored blocks, Scratch can achieve almost anything "harder" languages can -- and more.
*Sure*, one might say. *Scratch may be just as powerful and all, but what's the point of learning a language that no one uses in the "Real World"?*
My answer would be that, in my view, coding isn't about the code itself, but the *ideas* behind it. The simplicity of Scratch, along with useful features like built-in mouse/keyboard detection, Sprite costumes, and collision sensing, makes it perfect for creating demonstrations of all kinds. In fact, I continue using Scratch even in high school. Through it, we can bypass hefty packages, libraries, and syntax, directly expressing and experimenting with those precious *ideas*.
## Price
As we are looking to promote and strengthen the IBSH Programming Club, this class is **completely free**! We hope this course will pique your interest in programming and, if it does, please join our club!
## Requirements
+ Solid grasp of at least 6th grade math
+ Enjoy math/logic
+ Some coding experience
## Date and time
The class will be held on Google Meet every Thursday in August, from 19:00 to 21:00 Taiwan time.
| Class 1 | Class 2 | Class 3 | Class 4 | Sharing |
| -------- | -------- | -------- | ----- | --- |
| 8-5 | 8-12 | 8-19 | 8-26 | 8-26 |
In addition, I will do a short sharing of my journey from Scratch to IOI right after Class 4, from 21:00 to 21:30.
## Registration
Those who are interested may register via [Google Forms here](https://forms.gle/JjCn42Lm29xZZ4V48).
The form will close on [Saturday, 7-31, at 23:55](https://www.timeanddate.com/worldclock/fixedtime.html?msg=Advanced+Scratch+Class+Registration+Ends&iso=20210731T2355&p1=241).
To ensure class quality, the number of participants will be capped at 8. Should the number of registrants exceed the limit, students will be chosen based on ability, experience, and demonstrated interest.
> Update: Due to an influx of qualified applicants, we have created 2 additional slots
## Class Content
### Class 1: Syntax and Modeling Acceleration
We'll learn the basic building blocks of Scratch, then hop into the first topic: acceleration!
We'll see how adding a simple velocity vector can allow us to model complex things like gravity, friction, and wave-like motion -- with no calculus or hard algebra involved!

> You'll learn that you don't need to code complicated parabolas in order to model a cannonball launch
### Class 2: Direction, Reflections, and Basic Trigonometry
What are those mysterious `sin`, `cos`, and `tan` functions? What about their counterparts, `asin`, `acos`, and `atan`?
We'll use some simple demonstrations to show just what those functions are and why they're so useful.

> As we have the instantaneous velocity in our model, we can simply find the direction of the arrow using trig!
### Class 3: Recursion and Fractals
We'll learn to break down problems and complex-looking structures using the power of recursion. Instead of the traditional line-and-loop algorithms, we'll think about problems from the direction of initial states, final states, and transitions.
| | | |
|---|---|---|
| | | |
> This one-line Sierpinski triangle may seem very difficult to implement, but you'll learn that it can actually be concisely expressed by recursive functions
### Class 4: Path Finding
How do you find the shortest path from A to B? Here we'll take a hands-on look at common path finding algorithms like DFS and BFS, understand why DFS doesn't always work for finding the shortest path, and gain an intuitive understanding of Dijkstra's algorithm.

> Scratch can help us visualize things like the "height" found after BFS-ing from a source, making the algorithm much easier to understand
## About the Instructor
Elliot is the president of the IBSH programming club and has won numerous awards in competitive programming, including a silver medal at the International Olympiad of Informatics and a gold medal at the Asia-Pacific Informatics Olympiad. He has also won numerous national-level competitions, including first place at NPSC Junior Division, 2nd Place in the NPSC High School Division, 1st place in the final round of the 學科能力競賽 (National High School Programming Competition), 1st place in HP Codewars, and 1st place in the Young Turing Program.
He has done Scratch since the 4th grade, created a "viral" project with over 9000 views, and believes that it is one of the best ways to improve programming and have fun at the same time.
### Contact
Should any questions arise, please email Elliot at _elliotliu123@gmail.com_.