Let's create the biggest, baddest collection of open resources for teaching the foundations of computing literacy. Lesson plans, teaching tips, study tools, exercises, projects, course outlines. Everything you need to start your own study group, teach yourself, or bring your existing class up a notch. All of it grounded in the best practices of Computing Education.
This won't be: the next fullstack tutorial, a new learning platform, tutorials for the latest frameworks & tooling, or single path for going from 0 to hero.
We want to enable you to teach your course, for your people, in your way, by providing resources in a flexible and adaptable format. Simply fork the repos that fit your class, adapt them, and have your students work from your fork!
Do you know a great resource we're missing? Or have an idea how this project could be better? Send us an email or a Pull Request to this repository, contributions are always welcome! ( and stars, of course )
- what is this?
- foundations
- problem solving
- building apps
- good reads
- bibliography
- explicitly teach the implicit
- process over product
- context is content
- full complexity, max simplicity
- accessibly open-source
- from blocks to text
- JS notional machine
- pytut for js
- editing with blocks
- downloadable code-alongs
- #parsonizer
- spot, a study game
- shuffle, a study game
- visuzlize control flow
- online code linter
- abstract sytax tree explorer
- consoliteracy
JS In Order lays out a path to learn JavaScript in order focusing on language mechanisms & CS principles instead of language features & use cases, incrementally building your JS notional machine one step at a time.
Study Path
references
- errors & program life cycle
- variables & hoisting
- flow control parsons exercises
- variables swapping values
- undeclared variables
- strict mode
- block scope: let vs var
- by reference vs. by value
- dots vs. brackets
- errors
- type coercion & addition - interactive table
- type coercion & equalities - interactive table
- function exercises
- prototypical inheritance
- janke: the framework
- embedded resources:
Being comfortable manipulating, deciphering, and testing code is tricky to learn and a separate skill from writing algorithms or learning a programming language. These exercises cover the core skills you'll need to comfortable work with JavaScript.
Code Skills
- annotations - coming soon
- tracing execution paths
- logging program state
- writing test cases
- expanding code
- asserting single lines
- aniticipating state - coming soon
- locating unexpected behavior - coming soon
- empirical debugging - coming soon
- creating exercises - coming soon
Programming is all about breaking larger problems into smaller ones. But once you've got a bunch of smaller challenges, what's next? This section takes a look at how you can identify and apply the right strategy to the right problems.
Strategy
- the roles of variables - coming soon
- types of state problems - coming soon
- factoring in - coming soon
- chunking - coming soon
- factoring out - coming soon
- analyzing strategies - coming soon
- recursion: what is it?, planning recursion
- conditionals & booleans - coming soon
- iteration - coming soon
- problem-space embedding - coming soon
Learn how to go from a blank page and open-ended challenge, to a clean and working solution. Along the way you'll learn how to study and understand existing code, progressively develop your solutions, and refactor your code into clear and reusable sub-solutions.
solution design
If Solution Design is about answering questions, Data Modeling is about asking them.
coming soon, in the mean time check this out
See how coding, programming languages, and software development are actually real-world examples of Computer Science theory. Learning to think of everyday tasks as extensions of CS theory is a productive and approachable way to begin learning about CS, and to improve you coding at the same time
theory in practice
- sets & maps - coming soon
- comparadigms
- recursion
- boolean algebra
- simplifying boolean expressions
- free variables - coming soon
Before running loose in the DOM & frameworks, take some time to master the DevTools and learn to look at your apps from the inside and the outside.
consoliterate projects
embedded resources
The first step to collaborative & incremental development, and maintainable applications, is the ability to break your code into single-purpose chunks that take care of one clear task.
separation of concerns
- mvc-lh
- pytut example
- corss-environment
- todo list project
- calculator project
- sync vs async (callbacks)
In Separation of Concerns, you learned how to break down projects into focused & reusable chunks. In Dependency Injection you'll learn how to build modular, maintainable applications by piecing together different chunks.
dependency injection
Explore Frontend Frameworks using a variation of Hyperapp by jorgebucaran modified to help you prepare for popular frontend frameworks like Vue, React and Angular. Hyperapp is a minimal frontend framework that illustrates the key principles of larger frontend frameworks without the complexity and build environment.
hyperapp for gud learns
- self-logging hyperapp
- hyperapp starter repo
- hyperapp replit template
- hyperapp examples gallery
- example hyperapp calc
Links worth your time.
on learning and teaching
- teachtogether.tech
- computing education blog
- 10 tips
- carpentries instructor workshop
- learnable programming
- seymore: live programming
- save and share code-alongs
- from blocks to text
- self-assessment
- effective learning
js & programming resources
- javascript.info
- awesome JS learning
- 33 JS concepts
- computerphile
- freecodecamp on youtube
- productive procrastination
- works in progress
- toxicode
open-source JS curriculums
framework tutorials
cool open-source projects