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 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 appropriately use enumerable methods to iterate over collections
- 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
- Students will be able to implement a stub in an integration test
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 how the call stack works
Testing:
- Students will be able to explain the purpose of Mocks and Stubs