Hello! And welcome to the HackYourFuture Belgium Curriculum.

Programming is Communication

Software creates a complicated series of communications between developers, computers, users and society in general. This diagram gives a simplified overview of the different channels of communication you'll explore while at HYF Belgium:
rhetorical situation

Layers of Skills

Software Development is a many layered skill. One way to break it down is to think of these layers:
  1. 1.
    Source Code: The basic literacy of programming
    • Learning the key words (vocabulary) and syntax (grammar) for your programming language
    • Being able to read your code out loud, tracing it's execution as a computer would
    • Understanding what the developer wanted to say with their code
    • Welcome to JS will focus on these skills_
  2. 2.
    Machine Instructions: The basic mechanics of programming
    • Understanding the life-cycle of your program
    • Understand how the computer will interpret your source code to create a running program
    • Understand what about your code matters to the computer, and what matters to people
    • Fixing syntax errors that occur when you try to run your code
    • Predicting which lines of code will be executed in which order
    • Predicting how each line of code will change what is stored in program memory
    • Reading error messages & callstacks to fix fix semantic errors that occur when you run your code
    • Debugging will focus on these skills_
  3. 3.
    Problem Solving & Algorithms: Breaking down large problems to be solved in small steps
    • Understanding a coding challenge and being able to break it down in different ways
    • Determining which solution strategies are correct for which types of problems
    • Understanding how test cases are used to describe your solution strategy
    • Identifying the best language feature to use with your strategy
    • Reading test cases to understand how code is supposed to behave
    • Using Test Cases to structure your solution design process (Test Driven Development)
    • Identifying and isolating mistakes in your code by reading failing test cases
    • Demonstrating your code does what you think it does by passing test cases
    • Behavior, Strategy, Implementation Module will focus on these skills
  4. 4.
    Software Design: Organizing smaller pieces of code into full software solutions
    • Every module starting with Separation of Concerns will focus on these skills
  5. 5.
    Planning and Collaborating: Breaking down large problems into tasks that can be shared
    • This is introduced in the Agile Develompent module and practiced in every other module
  6. 6.
    Context: Who uses a program, what is it's impact, and where did it come from?
    • Real people will use your software, is it accessible to them?
    • Your software exists in a society, what it's impact on others?
    • Someone planned and build your software, what were their motivations?

Learning Objectives

This curriculum is broken up into modules of 2-5 weeks. Each of the modules introduces a new principle of software development, building on the last module to give you a 360 view what it takes to become a developer your colleagues can rely on.
Each module has it's own learning objectives determined by the sub-skills required to complete the module's projects. You can prioritize your study time and assess yourself based on each objective's priority:
  • πŸ₯š: You can apply this skill comfortably within the module's learning task with access to references. A learning task submitted at the end of the module should demonstrate proficiency in these objectives.
  • 🐣: You can apply this skill with effort and frequent support from references. A learning task submitted at the end of the module should demonstrate partial application of these skills.
  • πŸ₯: You understands the basic zoomed-out idea of this skill but may not be comfortable or proficient applying it. A learning task submitted at the end of the module may include attempts at applying these skills.
  • πŸ”: learning this skill is not required for the module's learning task but is relevant, if you are πŸ₯š, 🐣 and πŸ₯ objectives. A learning task submitted at the end of the module should not demonstrate these skills if the higher priorities are not accounted for.

Modules Overview

    • First steps into HTML, CSS & JS.
    • What is the internet andd web development.
    • Set up your computer for the rest of the course.
    • Master your computer and development workflows
    • Design, plan and develop accessible web pages
    • Learn about collaboration and Open Source software
    • Reading, describing, modifying and writing small JS programs.
    • Understanding how the JavaScript engine reads and executes your instructions.
    • Documenting and testing JS functions.
    • Collaborating on a JS code base: code review and consistent code quality.
    • Event-Driven programming in the browser.
    • Function Roles: organizing code based on the role it plays in your program.
    • Planning and collaborating on interactive JS web pages.
    • Layers and abstraction.
    • Program state and persistence.
    • The JavaScript Event Loop.
    • Different JS runtime environments: Browser and Node.js
    • Different ways to manage data: remote APIs, the file system and relational databases.
    • First introduction to the client/server model and HTTP.
    • Fullstack applications: connecting the frontend to the backend.
  • ​Final Project​
    • Developing a digital product from ideation to delivery.
    • Practicing the agile/scrum methodology.
    • Continuous deployment, cloud hosting and site reliability
    • Branding and pitching.

Project Templates

All projects at HackYourFuture Belgium use a series of progressive template repositories, each one adding l. These templates will gently lower you into the deep end of collaborative software development. The goal is to introduce you to the full complexity of collaborative development from day 1, while keeping the code you develop as simple as possible -> Full Complexity, Maximum Simplicity.
Why use template repositories? Because you will be learning to build your own projects, not just the projects we assign! By learning to plan, collaborate, and use a template repository you will learn transferable skills to help your own communities build the software you need - not what someone else tells you to build.
  1. 1.
    ​Markdown: Focus on collaboration workflows, code quality, code review, group conventions and clear writing without the distraction of code and errors:
    • Linting for Markdown and folder/file names
    • A script to format all files in the repository.
    • A script for spell-checking.
    • GitHub Action for linting check on Pull Requests.
    • Template issues for questions and asking for help.
    • Pull Request template with a code review checklist.
    • used in the Workflows module
  2. 2.
    ​HTML & CSS: Planning, design, and develop a user-facing web page written with HTML & CSS. This repository has all the features from the Markdown repository, and then some more:
    • A directory for group planning documents (see Planning & Collaborating).
    • Linting for CSS, validation for HTML.
    • Accessibility reporting.
    • An index.html for static deployment.
    • Folder structure for HTML pages, CSS styles and public assets.
    • used in the Workflows, Agile Development and UX/UI Design modules
Coming Soon: Interactions, Architecture, Fullstack
Last modified 3mo ago