We have updated the content of our program. To access the current Software Engineering curriculum visit curriculum.turing.edu.
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