Hello! And welcome to the HackYourFuture Belgium Curriculum.
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:
Software Development is a many layered skill. One way to break it down is to think of these layers:
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_
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_
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
Software Design: Organizing smaller pieces of code into full software solutions
Every module starting with Separation of Concerns will focus on these skills
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
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?
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.
Reading, describing, modifying and writing small JS programs.
Documenting and testing JS functions.
Collaborating on a JS code base: code review and consistent code quality.
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.
Developing a digital product from ideation to delivery.
Practicing the agile/scrum methodology.
Continuous deployment, cloud hosting and site reliability
Branding and pitching.