🧱 Fundamentals

The plan for Fundamentals

Understanding Fundamentals

To understand this course, we must understand these goals:

  • I am part of a cohort :man_and_woman_holding_hands::skin-tone-4:
  • Start as we mean to go on 🧰
  • Break down problems 🧩
  • Ship it! :boat:

Goals

I am part of a cohort :man_and_woman_holding_hands::skin-tone-4:

The key outcome of Fundamentals is that trainees and mentors start getting to know each other and build the sense of togetherness and mutual support that will carry us through the programme.

Start as we mean to go on 🧰

Fundamentals sets the tone for the rest of CYF. That means we set our expectations of CYF sessions clearly: no missing coursework, 100% attendance, no slides, no lectures. This applies to everybody and we should all hold each other to these standards.

This is our opportunity to coach ourselves into the “right” behaviours from the start.

“Practice doesn’t make perfect, practice makes permanent”

Break down problems 🧩

“Prolific programmers do not write a lot of code, instead they solve a lot of problems”

We frame the fundamental skill and day-to-day activity of software developers, which is problem solving. It is not following step by step instructions, but creating those instructions.

Fundamentals is the right place to begin (start as we mean to go on).

Ship it! :boat:

The major satisfaction of software development is to bring an idea to reality. We should experience that satisfaction and develop that habit. By shipping early, we can share with our peers and can iterate and improve.

CYF is not a great fit for everyone, and not everyone who graduates Fundamentals will join our Software Development Course. But everyone who participates in Fundamentals should come out with a tangible product: a real website deployed online.

How Goals Help

Each week has suggested schedules, team exercises, and challenges, but understanding these goals liberates mentors and trainees to experiment and innovate with their cohort.

:man_and_woman_holding_hands::skin-tone-4: 🧰: 🧩 :boat: talk to each other and have proven to be useful mantras for understanding what this course should be:

  • Should we upload the result of our week 1 work to Netlify?
    • Yes, we should ship it.
    • Yes, we should start as we mean to go on
  • Should we ask trainees to figure out how to improve on each other’s week 1 work as part of a three week project?
    • Yes, because I am part of a cohort.
    • Yes because we should practice breaking down problems.
    • Yes because we should start as we mean to go on.

Structure

3 week repetition of a common pattern, each week with its special focus:

  • Week 1: Requirements, Iteration, Delivery
  • Week 2: Requirements, Iteration, Delivery
  • Week 3: Requirements, Iteration, Delivery

Requirements

Requirements covers requirements gathering, discussing assumptions, breaking down problems into solvable pieces. In practice, we will play some games involving communication and problem solving, discuss how software teams gather requirements, identify and resolve conflicting requirements, write user stories, etc. and come up with some first requirements for our first project (that will span the three weeks).

Iteration

Iteration covers coming up with solutions, and then iterating on those solutions (as opposed to solving everything in a single step), along with some introduction into computational thinking - what a software solution looks like. In practice, we will play some more games, provide feedback and iterate on the state of our project so far in order to come up with new requirements, prioritising so as to pick the most important new features first. We will also do some CSS and block-based programming to allow us to provide software solutions to some of the feedback we have received.

Delivery

Delivery covers implementing a concrete solution and putting it somewhere visible where it can be examined and iterated upon. In practice we will deliver multiple iterations to Netlify and will finish week 3 having coded some DOM modifying code using a block-based editor (e.g. displaying a list of products with an “add to cart” button and display the resulting shopping cart), and copy-paste the resulting code into our project.