Courses/SOLID-ify

From etwiki
Jump to navigation Jump to search

Course Description

Welcome to SOLID-ify! SOLID-ify is a free, online, video-driven, asynchronous 14-week course with 12 modules offered by DevCred[1] and hosted on CodingRooms[2] that teaches a software development concept called the SOLID principles. SOLID is a mnemonic of the following software design principles: single-responsibility, open-closed, Liskov substitution, interface segregation, and dependency inversion. Application of the SOLID design principles makes software code more readable, maintainable, extensible, and testable.

​​In addition to the SOLID principles, this course teaches a “Learning to Learn” concept called “Self-Explanation”. Self-explanation can be broken down into six strategies: comprehension monitoring, paraphrasing, elaboration, logical inferences, predictions and bridging. Each of these strategies can help learners think about different aspects of their interactions with the material they are learning, leading to deeper understanding.

Target Audience

This course is intended for apprentice or journeyman software developers experienced with Java 8 or higher who would like to write higher quality code for individual skill enhancement or professional advancement.

Prerequisites

Learners will need reliable internet access and a CodingRooms account. Additionally, learners will need working knowledge of Java 8 or higher. It is recommended that learners also have a Java coding project they would like to improve, but this is not required.

Technology

SOLID-ify is hosted on CodingRooms. All course material is accessible via CodingRooms and all assignments are to be turned in via CodingRooms.

To get started with CodingRooms, refer to their Getting Started guide for learners. Please see their privacy policy regarding data and usage.

Instructor

My name is Emily Trabert and I’m a Computer Science instructional designer, instructor, and software development engineer with over 8 years of professional experience. I love teaching and learning equally and I’m excited to share practical advice from my career to learners looking to strengthen the quality of their code.

Course Objectives

After this course, learners will be able to:

  1. describe each of the SOLID principles,
  2. identify when a principle is used in existing code,
  3. identify when a principle should be used to improve a piece of code,
  4. implement the principle in an existing or new piece of code,
  5. use self-explanation to enrich their own learning process, and
  6. describe the difference working in code bases that do and don’t follow these principles.

Course and Instructional Activities

The course is comprised of video instruction and project-based learning. The first module is an overview of the course, covering the structure of the course and giving learners a chance to introduce themselves. The second module covers self-explanation. In addition to the video, there is a pre-video assessment, a post-video assessment, and a written assignment.

The third through twelfth modules cover the SOLID principles. Each principle has two modules, each of which continuously builds on a course-long working example project. The first module introduces a requirement for the code and the principle, then uses the principle to make a change to the working example. The module ends with a multiple-choice quiz. The second module introduces a requirement for the code, then teaches the learners the utility of the principle, then uses the principle to make a change to the working example. Learners then add a new feature to two existing code bases, one which follows the principle and one which does not. Learners then write a short reflection comparing their experience working in each code base.

At the end of the course, learners will complete and turn in a final coding project. As a base, learners have the option of refactoring their own code from another project, or implementing new features to the course-long running example. Learners will then write a short paper identifying several different implementation options for an assigned change while outlining the pros and cons of each implementation using the SOLID principles as guidelines. Learners will then select one of the options and implement it. Learners will turn in the base code, the refactored code, and a written documentation.

Final Project Examples

The course-long working example project follows the development of a dog washing company. If a learner chooses to implement a new feature on this code base, some features that could be added a part of the final project include but are not limited to:

  • Appointment record: how might you show all upcoming and past appointments for a dog?
  • Recurring appointments: how might you schedule a recurring appointment for a dog?
  • Multiple dogs: currently a client can only have one dog - how would you change the program to keep all existing functionality while supporting multiple dogs?
  • Discounts: how might you handle punch cards (buy 10 services, get the 11th service) or referrals (if a client refers a new client who books an appointment, the referring client gets 10% off the next service)?
  • Availability: how might you handle shifts and getting available employees for a given date/time?

Assignments

Description Objectives Points
Overview: About You 0
Self-Explanation: Pre-Assessment 5 0
Self-Explanation: Self-Explanation of Line 3 5 5
Self-Explanation: Post-Assessment 5 5
Single Responsibility, Part 1: Quiz 1 2 3 5 5
Single Responsibility, Part 2: Refactor 4 6 5
Open-Closed, Part 1: Quiz 1 2 3 5 5
Open-Closed, Part 2: Refactor 4 6 5
Liskov Substitution, Part 1: Quiz 1 2 3 5 5
Liskov Substitution, Part 2: Refactor 4 6 5
Interface Segregation, Part 1: Quiz 1 2 3 5 5
Interface Segregation, Part 2: Refactor 4 6 5
Dependency Inversion, Part 1: Quiz 1 2 3 5 5
Dependency Inversion, Part 2: Refactor 4 6 5
Final Project 1 3 4 6 65

Total

125


  1. DevCred provides non-traditionally-trained aspiring software developers with a valuable credential that demonstrates to recruiters and employers that they have the skills needed to succeed in entry-level software development positions. Learn more at https://dev-cred.com/
  2. CodingRooms is a code-focused learning management system.