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 promotes from this module will be able to do the following:

Mastery

Ruby Mechanics:

  • 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

Design:

  • 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

Testing:

  • 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

Debugging:

  • 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

Version Control:

  • 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

Desktop Environment:

  • 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

Ruby Mechanics:

  • 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

Design:

  • 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:

  • 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

Debugging:

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

Version Control:

  • Students will be able to provide comments on code on GitHub
  • Students will be able to resolve merge conflicts

Desktop Environment:

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

Familiarity

Ruby Mechanics:

  • 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

Testing:

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