Skip to content
Gregory McIntyre edited this page Dec 16, 2013 · 60 revisions

Welcommeeee!!!111one (now you know how to say hello in netspeak)

wow. very flickr humour. such dork. wow. so new wiki. very help me.

Compulsory background reading: http://joshuapaling.com/post/rails-camp-micro-courses

If you are a contributor:

  • Please contribute! We need topic requests:
    • Ideas that you find confusing. Things nobody ever explained to you. Every single acronym, for example.
    • If you're shy of writing it or suggesting it for any reason, relate it to somebody nice and they'll add it here on your behalf. If all else fails, twitzel me at https://twitter.com/gregmcintyre
    • Pick something very focused that you think could be taught in 1-2 hours.
  • We need microcourse write ups. I don't know, just wing it then we'll iterate. Let's try some prototypes.
  • As a stretch goal, I'd like to get a few of these ready for RailsGirls in Nov so that we can entertain the more advanced attendees on the 2nd half of the 2nd day.
  • Try this wicked move if you don't like being online to work on this: git clone [email protected]:puyo/microcourses.wiki
  • If you are a Ruby Australia kinda person, move this repo there and invite me to contribute to it. You know. If you want. - https://github.com/puyo/

The Rules of the Game

  • A single concept or topic
  • 1-2 hours of mentoring
  • The title is be a statement of what the person will know or be able to do at the end. This serves as a checkpoint - if the person already can do that thing, they can skip this module.
  • Roughly 25% diagrams, 25% explanations, 50% code for an exercise
  • List required tools at the top
  • Include a one sentence challenge at the end for "extra credit". e.g. "Update your ATM code to support 24 dollar notes."
  • Don't feel the need to include the real answer - the focus is on concepts and methods and information for the mentor, not answers

The Plan

  1. Create 3 polished prototype microcourses
  2. Deliver them to unwitting friends or family
  3. Write down feedback on the course delivered
  4. Write down ideas to improve the process of delivery, etc. (maybe we need a comment thread on each? maybe it'd be cool if there were a place to keep people's solutions so we could analyse them for obvious points of confusion)
  5. Implement improvements
  6. Pick another 3

Topics Brainstorming

Rails is hard

  • Procedural Programming

    • Variables
    • Procedural execution
    • Basic types of values (integer, string, boolean)
    • Arithmetic (integers)
    • String manipulation (strings)
    • Logic (booleans)
    • Groups of values (arrays)
    • Conditional statements (if)
    • Repeated statements (loops)
    • Re-using sets of statements (functions)
    • Varying re-used sets of statements (parameters)
    • Advanced kinds of values
    • Namespaces and variable scopes
  • Ruby

    • Ruby 1.8, 1.9 & 2
    • Installing and finding gems
    • Making your own gem
    • Rake 101 (writing tasks, listing tasks, debugging tasks)
  • Object-Oriented Programming

    • Constants (why do they exist, what do they do)
    • Shifting requirements exercise
    • Good code = easy to change
    • Hard to change code vs easy to change code
    • Encapsulation
    • CRC
    • Naming
    • Coupling, cohesion, ABC, metrics
    • Redo a previous exercise in OOP
    • A shifting requirements exercise in OOP
  • Relational Databases

  • Development Practices

    • Testing (RSpec, TestUnit)
    • Refactoring (Red-Green-Refactor cycle, example refactorings, automatic refactoring theory)
    • Pairing (theory and practice, TDD-oriented pairing exercise)
    • Code review (Github pull request, patch gen/apply)
    • Self learning (Ruby Weekly, JS Weekly, RSS feeds, MOOCs, online courses, etc.)
    • Agile project management
    • Continuous Integration
  • Development environment

    • Installing/managing Ruby (RVM, rbenv, chruby)
    • Text editor alternatives
    • Vagrant
    • Nitrous
  • Tools

    • Command line
    • REPL (IRB/Pry)
    • Sublime
    • Git
    • Google (how to think of good ways to google a problem)
    • Finding documentation (ruby-doc.org apidock.com Dash ri etc)
    • Debuggers (gdb, debugger, jazz_hands/pry-debugger)
    • Dependency build tools (make, rake)
    • Chrome dev tools
    • telnet
    • tcpdump / wireshark
    • Bash
    • Vim
    • Putting it all together - using tools in a workflow
  • Web Development

    • HTTP (telnet)
    • REST (Rails)
    • CRUD (Rails)
    • Ajax (Rails, jQuery)
    • HAML (Rails)
    • OOCSS/SMACSS (Static HTML)
    • SASS (Rails)
    • LiveReload (Rails / LiveReload.app / Middleman)
  • Rails

    • Associations
    • How to read the log, how to write to the log

Microcourses - I dunno, this is really just a list of content that needs arranging

Little exercises without a clear focus. I guess we should find each of these a focused topic for which it is a reasonably apt exercise.

  • House (C, stdout, format strings, loops, terminal, colourz)
  • Roman numerals Ruby C (numbers, strings, problem solving, greedy algorithms)
  • ATM (numbers, functions, arrays+loops or recursion, backtracking)
  • Coins (numbers, functions, backtracking, sets/arrays, potentially recursion)
  • Scramble letters inside each word of a paragraph (text manipulation)
  • Random pick up line generator (regular expressions)
  • Gosu snowflake (graphics)
  • Maze solving (mice, cheese)
  • Web scraping (real world data)
  • Letters and Numbers solver (hashes, b-trees, threads)
  • Conway's Game of Life (problem solving, data structures)
  • RubyWarrior - Coding Artificial Intelligence for Complete Beginners
  • Ruby Koans - Learning basic ruby syntax and cool features

Topic driven learning

A kind of special case MicroCourse might just be "1 hour of one-on-one mentoring / pair programming with whatever you're working on". So, it's just a formal opportunity for a newbie to pair up. You'd have to be careful with this option, because I think a lot of people would choose it thinking it's best for them, when in fact a more structured basic course would be better. Maybe only offer this option in the afternoons, not the mornings, or something like that.