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

GoncaloJardim/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

In order to help mentors in tracking the progress of their groups, we suggest using the following template:

Tracking questions is important so that we can improve the quality of the selected material, as well as create new ones.

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 (~5 hours)

  • Clean code

Week 02 (~1.5 hours)

  • Linting
  • Continuous integration
  • Assignment #1

Week 03 (~1.5 hours)

  • Git strategies
  • Code reviews
  • Assignment #2

Week 04 (~3 hours)

  • Testing
  • Project structure
  • Text editors

Week 05 (~2 hours)

  • Assignment #3

Week 06 (~2.5 hours)

  • Object-oriented programming

Week 07 (~2.5 hours)

  • Design patterns
  • Packaging and publishing

Week 08 (~2 hours)

  • Assignment #4

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.

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%