View
Pinned

000 Start here!

This curriculum is a list of topics and learning resources for new makandra developers. If you haven't joined us yet, it offers you a glimpse of what you will learn!

We also offer an 8 month paid trainee program (German website) for junior developers that are looking to start a professional career in web development.

The first lesson is Ruby basics.

120 Git basics

git is our version control system.

Goals

  • Understand why we use git.
  • Learn how to work with your local repository:
    • Create a local repository (git init)
    • Commit changes (git commit)
    • See the history (git log)
    • See changes (git diff)
    • Work with branches (git checkout, git checkout -b, git merge)
    • Work with the stash git stash
  • Learn how to work with a server:
    • git clone
    • git push
    • git fetch
    • git pull
  • Learn to use the tool tig
  • Configure your git correctly
  • Learn how to …

135 SQL basics

SQL is the language used to talk to a database.

Goals

  • Understand what SQL does
  • Understand what "mySQL" and "PostgreSQL" are
    • Learn about some differences between the two
    • Understand why we use both at different projects
  • Be able to connect to a database
  • Understand the following commands
    • SELECT
      • WHERE
      • ORDER
      • INNER JOIN, LEFT JOIN
      • GROUP BY
      • LIMIT
    • UPDATE
    • INSERT and INSERT ... SELECT
    • DELETE
    • EXPLAIN
  • Understand what a "transaction" is
  • Understand what a…

150 Javascript basics

Play with the language:

  • Variables
  • Loops
  • Functions
  • Understand the difference between function pointers ("anonymous functions") and function invocations
    • Understand the parallels between blocks/lambdas in Ruby and anonymous functions in Javascript

Resources

Goals:

Yo…

165 ActiveRecord scopes

Goals

  • Understand what scopes are and how they differ from arrays
  • Understand how a purely object-oriented approach of dealing with data doesn't scale.
  • Get into a habit of off-loading list-related calculations (filtering, mapping) to the database
  • Learn about the N+1 query problem and eager loading
  • Get into a habit of explicitly resolving scopes to arrays by calling to_a (don't let it happen by accident)
  • Understand the difference between "named scopes" and ad-hoc scopes using where
  • Understand how the scope creation synt…

180 Personal productivity

We are dealing with hundreds of tasks for dozens of projects every week. We need to be organized or we will drown in chaos.

  • It is not OK to forget about a task that someone assigned to you. Tasks are fire-and-forget. Always.
  • It is not OK to scroll through hundreds of e-mails in your inbox every morning, trying to figure out what to do today.

The ressources below help.

Getting things done

Read the book (it's in our li…

105 Ruby basics

Ruby is the programming language we use almost exclusively.

Goals

  • Be able to read and write simple ruby programs.
  • Gain an understanding of the following concepts:
    • Basic datatypes: Strings, Numbers, Booleans, Arrays, Hashes
    • Basic language constructs: if, each, case, break
    • Regular expressions
    • Functions: def, return
    • Object orientation
      • Classes
      • Class methods vs instance methods (def method vs. def self.method)
      • Inheritance
      • Modules and include
    • Code blocks
    • Input an…

125 Gems, bundler, rbenv

Goals

  • Understand what a Gem is
  • Learn how to install a gem
  • Be able to look into gem code
    • locally
    • on GitHub
  • Learn about Bundler
    • Why is it necessary:
      • Managing versions and dependencies
      • Defining a consistent project environment
    • What is the difference between bundle install and bundle update?
    • What does bundle exec do, why is it necessary?
    • What does the file Gemfile.lock do?
  • rbenv
    • Understand why we need rbenv

Resources

  • ["Working with Gems" tutorial](http://code.tutsp…

140 Testing basics

Goals

  • Understand why we test:
    • QA without QA people
    • Continuous deployment
    • Sleep better, because we know stuff still works
    • Make sure no one removes a feature by accident
  • What is an unit test, what is an integration test?
  • Learn basic RSpec for unit tests
  • Learn basic Cucumber for integration tests
  • Learn about Capybara
  • Understand the disadvantages of too much testing
    • Diminishing returns:
      • Writing tests costs time
      • Diminishing returns: The more tests you already have, the less useful an additional t…

155 Software design basics

Read the following chapters from The Pragmatic Programmer (in our library):

  • Software Entropy
  • The Evils of Duplication
  • Orthogonality
  • Decoupling and the Law of Demeter
  • Evil Wizards

Read the following chapters from Clean Code (in our library):

  • Chapter 1: Clean Code
  • Chapter 2: Meaningful Names
  • Chapter 3: Functions
  • Chapter 4: Comments
  • Chapter 5: Formatting
  • Chapter 8: Boundaries
  • Chapter 10: Classes
  • Chapter 12: Emergence
  • Chapter 17: Smells and Heuristics

Also read [Keep It DRY, Shy, and Tell the Other G…

170 Memoization

Goals

  • Understand what Memoization is and why it is necessary
  • Understand the @variable ||= computation pattern
  • Learn how to use the memoizer gem

Excercises

  • Use the @variable ||= pattern.
  • Use the memoizer gem.

What are the advantages of the memoizer gem over the @variable ||= syntax?

182 Deployment basics

  • Understand what Capistrano does
  • Understand the differences between Capistrano and rake
  • Understand multi-stage deployment
  • Understand the differences between Rails environments and Capistrano deployment targets
  • Understand "roles" in Capistrano configuration
  • Understand how to make Capistrano do something custom during deploy
    • We make database dumps on every deploy. How do we do that?
    • We show the total size of the dumps on every deploy. How do we do that?
  • Understand the differences between the deploy and `deploy:migratio…

110 Where to find API documentation

There is no single place to look up documentation for our stack. Google is your friend here.

This card includes some hints where you can find API documentation. You probably want to drag a few of those links to your bookmarks toolbar. This will help in the upcoming exercises.

Ruby

A good Ruby documentation is rubydocs.org.

The homepage of rubydocs.org is a little confusing. Here are docs for Ruby 2.2.2.

If you want to have docs for various Ruby/Rails versions try [de…

130 Ruby on Rails basics

Rails is our web framework.

Goals

  • Be able to write a simple Rails application.
  • Understand how Rails talks to the database (ActiveRecord)
    • What is a model?
    • How are records retrieved and saved?
    • Validations
    • Migrations
    • has_one, has_many, has_many :through
  • Gain an understanding of the structure of a basic Rails app
    • Routes
    • Controllers
      • Generate a controller using Rails scaffolding
      • Write your own controller
    • Views
      • using ERB
    • Models
    • Helpers
  • Learn how to do CRUD ("Create"…

145 CSS basics

Goals

  • Learn what CSS is and why we use it.
  • Understand the following concepts
    • Ids and classes
    • Styling basic attributes (color, font-size…)
    • Style inheritance
    • margin, padding and the box model
    • float
    • position: absolute and position: relative
    • CSS specificity
    • Box sizing: "content-box" vs. "border-box"
  • Learn how to use your browser's "inspect" feature and how you can see which CSS styles are applied to an element
  • Learn what Compass is
    • Look at a few projects and see what parts of Com…

160 Haml

Goal

Learn to read and write Haml.

Exercises

  • Convert MovieDB from ERB to Haml

175 RSpec in depth

Reading

Work through the following chapters from Everyday Rails Testing with RSpec (in our library), if you haven't read them yet:

  • Model specs
  • Generating test data with factories
  • Basic controller specs (we don't often write them, but sometimes they are useful)
  • Speeding up specs
  • Testing the rest

Also read through the documentation of both factory_girl and [Machinist 1](https://github.com/notahat/machinist…

185 Our process

makandra's development process

Learn about our process:

story_lifecycle.png

In particular you should understand:

  • Why do we have a process?
  • What is a story?
  • What metrics does our process optimize for?
  • How to divide large requirements into stories. When is a story too small, when is it too large?
  • The lifecycle of a story
  • How to write a story

Story format

Read the card [Project management best practices: Stor…

View
64 cards