64 cards

000 Start here!

This curriculum is a list of topics and learning resources for new makandra Archive 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 Archive (German website) for junior developers that are looking to start a professional career in web development.

The first lesson is Ruby basics.

105 Ruby basics [2d]

Ruby is the programming language we use almost exclusively.


  • 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
    • Errors and raise
    • Object orientation
      • Classes
      • Class methods vs instance methods (def self.method vs. def method)
      • Inheritance
      • Modules and include
    • C...

110 Where to find API documentation [0.5d]

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.


A good Ruby documentation is rubydocs.org Archive .

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

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

120 Git basics [1d]

git is our version control system.


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

125 Gems, bundler, rbenv [1d]


  • 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


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

130 Ruby on Rails basics [4d]

Rails is our web framework.


  • 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
    • belongs_to, 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 ("Crea...

135 SQL basics [2d]

SQL is the language used to talk to a database.


  • Understand what SQL does
  • Understand what "MySQL" and "PostgreSQL" are
    • Learn about some differences between the two
  • Understand how we connect to a database:
    • The database runs on a database server, usually on another machine. For local development, the server is your PC.
    • To speak to the server, you need a local client for MySQL or PostgreSQL installed on your system.
    • To connect to a server, the client needs the server's hostname, a username and a password.

140 Testing basics [4d]


  • 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 Archive for integration tests
  • Learn about Capybara Archive
  • Understand the disadvantages of too much testing
    • Diminishing returns:
      • Writing tests costs time

142 Validations

Basic validations

Read the Rails Guide on ActiveRecord Validations Archive . You should have an overview which kinds of validations are built into Rails.

Also read Testing ActiveRecord validations with RSpec.

Make the following changes to your MovieDB:

  • Make sure your MovieDB models have validations for all required fields.
  • Make sure you have specs for all your validations ...

145 CSS basics [3d]


  • 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 a "reset stylesheet" is and why we need it.
    • Understand the ...

150 JavaScript basics [3d]

JavaScript is a scripting language supported by all browsers. Browsers don't speak Ruby, so if we want to implement client-side logic that runs in the browser, we use JavaScript.


  • Read the MDN JavaScript Basics Archive . You should understand the basic language concepts.
  • Try it in your browser
    • Press Ctrl+Shift+J to open the developer tools' console.
    • Assigns some variables
    • Create an array and iterate over it. Use console.log to...

155 Software design basics [2d]

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 Oth...

160 Haml [1d]



  • Convert MovieDB from ERB to Haml


  • The Haml-tutorial Archive doesn't explain, how to execute ruby-code that isn't rendered to HTML (<% fancy_ruby_block do \|param\| %>). Just use a dash ('-') instead of the equals-sign ('='), it's that easy.

165 ActiveRecord scopes [4d]


  • 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 Archive 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" a...

170 Memoization [0.5d]


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


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

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

172 Debugging [1d]

When your code does not behave as expected, you can use a debugger statement ("breakpoint") at any point in your code. This statement will open a REPL ("console") that you can use to inspect the current state of the program and move the control flow ahead manually.

Use debugging tools to find the exact line in the code where your expectation does not match the actual behavior. Since we use open source for everything, we can always find that line. When you ask a colleague for help, they will be able to help you better when you have a...

175 RSpec in depth [2d]


Work through the following chapters from the Rails 5 edition of Everyday Rails Testing with RSpec Archive , if you haven't read them yet.

  • 3 - Model specs
  • 4 - Creating meaningful test data
  • 5 - Controller specs (we don't often write them, but sometimes they are useful)
    Note: in spec/rails_helper.rb uncomment
    Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
  • 7 - Testing the API with request specs
  • 8 - Keeping specs DRY
  • 9 - Writing tests faster, and w...

180 Personal productivity [2d]

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 resources below help.

Getting things done

Read the book Archive . We have a paper...

This website uses short-lived cookies to improve usability.
Accept or learn more