Learning Goals

Academic success in BEM1 means that students demonstrate proficiency and comfort with the concepts below. The expected mastery level can be understood with the following scale:

Mastery: student is able to explain and implement the concept independently or with light reference Functional: student recognizes when to use the concept and can implement it with the support of documentation and/or a collaborator Familiarity: student can recognize and describe the concept when needed/appropriate

A student who graduates from this module will be able to do the following:

Ruby Mechanics

Mastery:

  • Students will be able to manipulate strings

  • Students will be able to use Integers and Floats and explain the differences between them

  • Students will be able to use Arrays and Hashes and explain the differences between them

  • Students will be able to explain what a Symbol is and identify when it should be used over a String

  • Students will be able to create and interact with Ruby Range 0bjects

  • Students will be able to explain the NilClass and identify its appropriate uses

  • Students will be able to implement best-choice enumerable methods to iterate over collections

  • Students will be able to use the following Flow Control structures:
    • if
    • elsif
    • else
    • while
    • until
    • loop
  • Students will be able to use boolean expressions to logically manage a programs flow

  • Students will be able to use methods, arguments, and return values to break code into logical components

  • Students will be able to create Classes that utilize instance variables, attribute accessors, and instance methods

Functional:

  • Students will be able to create a class that inherits from a superclass

  • Students will be able to create and mix in a module

  • Students will be able to import/export data to files

Familiar:

  • Students will be able to explain the difference between local and instance variable scope

  • Students will be able to explain memory allocation in Ruby

  • Students will be able to explain how the call stack works

Design

Mastery:

  • Students will be able to explain the difference between state and behavior and how these concepts are implemented in Ruby

  • Students will be able to utilize Test Driven Development to drive the design of the code.

  • Students will able to break down a large technical challenge in to manageable tasks using techniques such as whiteboarding and pseudocode

  • Students will be able to explain the Single Responsibility and DRY principles and adhere to these principles in their code.

  • Students will be able to write readable code with the following characteristics:
    • Variable and method names are self explanatory
    • Methods are under 7 lines
    • Lines of code are under 80 characters
    • Project directory structure adheres to convention
    • A linter reports less than 5 errors
  • Students will be able to limit use of Instance Variables so that they only convey the state of an object

Functional:

  • Students will be able to identify use cases for Modules and Inheritance

Testing

Mastery:

  • Students will be able to identify what they should test for in order to verify the expected behavior of a program

  • Students will be able to accurately test a piece of functionality by writing appropriate Minitest assertions

  • Students will be able to name and order tests so that a test file reads like documentation

  • Students will be able to translate technical specifications into tests

  • Students will be able to write a test before writing code that implements the behavior to make that test pass

Functional:

  • Students will be able to explain what edge case testing is and write tests for those edge cases

  • Students will be able to explain the difference between unit and integration testing, and write both types of tests

Familiar:

  • Students will be able to explain the purpose of Mocks and Stubs

Debugging

Mastery:

  • Students will be able to diagnose and fix bugs

  • Students will be able to explain the meaning of common Ruby error messages

  • Students will be able to use Pry to create breakpoints in their code

Functional:

  • Students will be able to utilize the Ruby Docs and other online resources to aid in debugging

Version Control

Mastery:

  • Students will be able to explain the difference between remote and local repositories

  • Students will be able to push, pull, commit, and branch using the git command line interface

  • Students will be able to commit code in small chunks of functionality

  • Students will be able to submit and merge Pull Requests using the Github interface

Desktop Environment

Mastery:

  • Students will be able to navigate the machine to write and run Ruby programs

  • Students will be able to explain how the command line interface and text editor interact

Functional:

  • Students will be able to utilize keyboard shortcuts to improve workflow and minimize mouse use