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 identify and utilize Symbols

  • Students will be able to appropriately use 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

  • Students will be able to create class methods

  • Students will be able to describe the difference between class and instance methods

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 break down a large technical challenge in to manageable tasks using techniques such as whiteboarding and pseudocode

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

  • Students will be able to explain the Single Responsibility and DRY principles

  • 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

Functional:

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

  • Students will be able to limit use of Instance Variables so that they only convey the state of an object

  • Students will be able to write code that adheres to the Single Responsibility and DRY principles

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 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 name and order tests so that a test file reads like documentation

  • 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

  • Students will be able to identify when variables are in and out of scope

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

  • Students will be able to use Git and GitHub to collaborate with a partner on a project

Functional:

  • Students will be able to provide comments on code on GitHub

  • Students will be able to resolve merge conflicts

Desktop Environment

Mastery:

  • Students will be able to use the command line 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