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.
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.
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.
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.
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.
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.
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
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 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.