- Continue practicing test-driven development (TDD) - both the process and the tools you'll be using to do it from now until the end of the course (and beyond).
- Get an 'inside view' of one of the most heavily used JavaScript libraries underscore (11m downloads on NPM last month) and get used to reading its API documentation.
- Become accustomed to using NPM to find and install JS libraries
- Learn to effectively pair program and use Git/Github as a collaboration tool.
- Lay the foundations for understanding the functional style of programming that JS lends itself so well to
A key requirement for this sprint is to get used to collaborating on a codebase using git and Github. The workflow we will be using is as follows:
- To begin, person A in the pair should fork and clone the project.
- The other person (person B) should navigate to their pair's fork (e.g. githubUserA's fork will be located at: https://github.com/githubUserA/October-wk01-lowbar) and should clone githubUserA's repository.
- Both pairs will be working on the same codebase, i.e. code that lives in person A's repository. To avoid merge conflicts, you should avoid both working on your copies of the code at the same time and should be rigorous about sticking to the 'driving and navigating' model of pair programming.
- After each passing test that the driver writes, the driver should add, commit and push their work. Use neat, uniformly formatted commit messages.
$ git add .
$ git commit -m '[_.map] returns an array'
$ git push origin master
- Then switch the driver and the navigator. The new driver, working on their own machine, should make sure their codebase is up to date by pulling:
$ git pull origin master
- The driver types until the next test is passing, at which point the adding, committing, pushing, switching and pulling process is repeated.
The Lowbar Sprint involves reimplementing a JS library as if you were its author. In particular, you'll need to reimplement the following methods:
- identity
- first
- last
- each
- indexOf
- filter
- reject
- uniq
- map
- pluck
- reduce
- contains
- every
- some
- extends
- defaults
- once
- memoize
- delay
- shuffle
- invoke
- sortBy
- zip
- flatten
- intersection
- difference
- throttle
You should be heavily referencing the APIs of the following: