Skip to content

FAAST Advance Foundations is a self-study course to help you become a better Python programmer.

License

Notifications You must be signed in to change notification settings

nosportugal/faast-foundations

Repository files navigation

FAAST Advance Foundations

FAAST logo

Welcome to the FAAST Advance Foundations 🎉

This course is designed to teach how to improve your coding ability with sound software engineering principles. In this introduction, you'll learn:

  • The directions driving your learning experience in this course.
  • The structure of the course.
  • The expectations on students and mentors.
  • A suggested learning calendar.

Learning Principles

When we assembled this course, we had in mind that our students would be adult individuals with time constraints. They will be looking to implement the knowledge in their work environment and maybe discuss it with their peers.

To fulfill these expectations, we adopted the following principles:

  • Prefer self-directed learning over teacher-directed learning;
  • Prefer content that's easily accessible (no paywalls or subscriptions);
  • Prefer content that can be immediately applied;
  • Always use code examples;
  • Learning by teaching is encouraged.

Learning Structure

Students are to be divided into groups of 3. These groups should try to progress through the learning process together so that their questions and discussion are on the same wavelength. Each group will be assigned a mentor and will perform code reviews together.

Mentors: A mentor is a more experienced collaborator and/or someone who has already gone through the course. They are in charge of helping their group, answering questions and preventing them from being stuck, as well as keeping track of their progress.

Code reviews: Some of the proposed assignments will involve reviewing each other's code. For each code review, there will be a “reviewer”. It's the review's responsibility to ensure that the code being reviewed fulfills the requirements of the assignment and that it doesn't degrade the quality of the code base (though we would always prefer the quality to be improved). During these assignments, each person will review the code of one of their group peers. The only caveat is that one can't review the code of the person who's reviewing their code.

The review may ask the group mentor for help, but only the reviewer can approve whether or not the assignment was completed.

Expectations

Expectations for students

Although we understand that time may be constrained, each student has responsibilities with its groups, namely.

  • Try to keep the pace with the group's progress, neither falling too behind or advancing too much by themselves.
  • Don't let their peers' code reviews go stale.
  • Don't ignore the questions and improvements asked by the person reviewing your code.
  • Be courteous and respectful to your peers and mentor.
  • Set your progress expectations with your mentor.
  • Conduct yourself with integrity and honesty.

Expectations for mentors

A mentor are tasked in ensuring their peers become better professionals, as such, we expect them to:

  • Reserve at least 30 minutes per week for each group you mentor, for answering questions and giving feedback.
  • Encourage group members and communicate openly.
  • Be courteous and respectful to your mentees.
  • Ensure code reviews go smoothly: oversee and help, but don't overtake the reviewer's responsibilities.
  • Keep track of questions and progress of the group members (see Progress tracking)
  • Conduct yourself with integrity and honesty.

Progress and Questions Tracking

Progress tracking is to be done at the NOS CAMPUS platform. This is meant for HR to measure completion rates, collect feedback and other quality metrics.

However, if you are a mentor, it's also useful for you to keep you own records of how your group's progress and questions. Tracking questions is important so that we can improve the quality of the selected material, as well as create new ones.

In order to help mentors in tracking the progress of their groups, you may find it useful to use this template:

Pre-requisites

In order to make the best use out of this learning path, you should know:

  • Basic / Intermediary Python: control flow, functions, handling errors, data structures, files, virtual environments, data manipulation libraries.
  • Basic Git: add, commit, checkout, merge, and rebase

Suggested learning calendar

Note: This is just a suggestion. Groups are encouraged to set their own deadlines with their mentors.

Week 01 (~3 hours)

  • Clean code part 1: Long code is not good code (2h10)
  • Assignment #0

Week 02 (~2 hours)

  • Clean code part 2: Names and Comments (2h00)

Week 03 (~3 hours)

  • Linting (0h30)
  • Continuous integration (0h05)
  • Assignment #1

Week 04 (~2.5 hours)

  • Git strategies (0h20)
  • Assessing code quality: reviews and structures (1h30)
  • Assignment #2

Week 05 (~1.5 hours)

  • Testing (1h30)

Week 06 (~3 hours)

  • Assignment #3 (3h00)

Week 07 (~2.5 hours)

  • Object-oriented programming (2h30)

Week 08 (~2 hours)

  • Text editors (1h30)
  • Assignment #4

Week 09 (~3 hours)

  • Design patterns (3h00)

Week 10 (~2.5 hours)

  • Assignment #5 (2h30)

Assignments

Assignments are located inside the assignments folder.

Caution: The assignment instructions assume you are issuing commands from that folder.

In it, you'll find a project folder called life_expectancy as well as folders with instructions for each assignment. Each assignment builds upon the previous one and they are all meant to be do inside the project folder.

Call to Adventure

The goal of this course is to be your personal companion on being a better programmer. We hope you enjoy it and learn a lot from it.

Feel free to open GitHub issues to give us feedback and ideas for new features. Or even better, open a pull request with your suggestions.