31
Becoming a Rails Developer The Rest of the Story

SELF - Becoming a Rails Developer - The Rest of the Story

Embed Size (px)

Citation preview

Becoming a

Rails Developer

The Rest of the Story

● Chief Architect at Synaptian, Inc.

Nathanial “Nate” L. McConnell

● Worko [email protected]

o @SynaptianNate

o +1 (866) 773-0016

● Personalo [email protected]

o @FluxAugur

o +1 (423) 631-4096

Purpose

There is more, much more, to becoming a

Rails developer than “simply” learning Rails.

Learning Rails is hard, and “learning Rails”

encompasses a wide range of technologies.

We need a process.

● Lots of technical details:o Understanding Ruby

o Understanding the MVC pattern

o Understanding the object-oriented model

3 Key Challenges

● Object-oriented programming

o Classes & modules

o Attributes & methods

o Inheritance & mixins

● Functional programming

o Blocks

o Procs & lambdas

● Flow control

o Conditionals

o Enumerables

● REPLs & debugging

● Metaprogramming

Competencies - Ruby

Learning Ruby

● Ruby in the browsero Code Academy

o Try Ruby

● Installing local dev environmento RubyInstaller

o rbenv

o RVM

● Bookso Programming Ruby

● Screencastso Ruby Tapas

● Courseso Ruby Koans (Test Driven Development)

Learning Ruby - *Further Reading*

● MVC

o Asset pipeline & preprocessors

o UJS

o Performance

Monitoring

Caching & pagination

Background tasks

● REST

o Routing

o APIs

JSON & XML

Hypermedia

o Nested resources & namespaces

Competencies - Rails Framework

Competencies - Rails Framework

● ORM

o Relational schemas

Migrations

Normalization

Foreign keys

Indexes

o Document stores

o Associations

Dependencies

Eager loading

o Validations & callbacks

● User Management

o Authorization

o Authentication

● Conventions & best practices

o I18n & time zones

o ActiveSupport

o Security & defaults

● CLI

o Rails console

o Rails generators

o Rake tasks

● ActionMailer

Competencies - Rails Framework

● Guides

o Ruby on Rails Site

● Books

o Agile Web Development with Rails 4

● Screencasts

o RailsCasts

● Tools

o Git & Github

o Heroku

● Source Code & Documentation

o Ruby on Rails Documentation

Learning Rails

● Every man for himself isn’t an option for organized development teams

● Mentoring - mentors assigned to new devs. Mentor guides new dev on

a starter project teaching all essential parts of the architecture. Next

phase, dev starts working on real-life project.

● Code Review - knowledge sharing with community commentary. Use

pull requests to share knowledge of experienced devs and ensure that

production code remains high quality. Never approve your own pull

request. Unfortunately, this can result in the new devs being “blocked”

until someone finishes reviewing the code.

● Pair Programming - Even the best dev can benefit from another pair of

eyes checking their code. When two people work together on a

feature, this helps them both improve their skills. Downside is the

expenditure of twice the manpower for the same amount of work.

Standard Learning Process

Process in Practice

Practically, we use these methods based on the needs

of a specific situation, when we feel they outweigh

conventional systems.

“Experience is what you get when you didn’t get what

you wanted.”

- Randy Pausch, The Last Lecture

● RVM & rbenv

● Gems

o File structure

o Open-source etiquette

● Bundler & dependency management

Competencies - Rubygems

● Version control systems

o Distributed VCS

o Branch

o Merge

o Diff

● Github

o Fork

o Pull requests

● config

o Remotes

o Default behaviors

Competencies - Git

● Syntax highlighting

● Discoverable shortcuts

● Scope awareness

● Extensibility

● Power editing

o Multiline edits

o Pasteboard history

o Rapid file switching

Competencies - IDE/Text Editor

● Application architecture

o Modularization & SOA

o Encapsulation of domain logic

● Agile process

o Project ownership & user stories

o Iterative cycles

Testing & pairing

CI & code review

QA & debugging

o High-bandwidth communication

● Project management

o Planning & estimating

o Tools & documentation

Competencies - Software Eng.

● Select

o Group

o Order

o Limit

● Insert & update

● Transactions

● Joins

● Performance

o Slow query logs

o Query plans

o N+1 avoidance

Competencies - SQL & Data Mod.

● Types

o Unit

o Functional

o Integration

o Performance

o Acceptance

o Regression

● Tools

o RSpec & MiniTest

o Factories & fixtures

o Mocks & stubs

● TATFT

o TDD & BDD

Competencies - Tests

● Automation

o Continuous Deployment

o Continuous Integration

o Server monitoring & logging

● Configuration management

● Release management

● Security & data integrity

● Platform

o Dedicated

o Virtualized

o Abstracted

Competencies - Deployment

● HTTP

o Request

Methods

State

● Params

● Cookies

Scheme

o Response

Status codes

Media types

● HTML

o The DOM

o Semantic markup

o HAML

Competencies - WWW

● CSS

o Sass & Less

o CSS frameworks

o Browser quirks

o Selectors & specificity

● JavaScript

o Libraries

jQuery

Client-side MVCs

o Prototypes & objects

o Anonymous functions

o AJAX

o CoffeeScript

Competencies - WWW

● File management

● Admin permissions

● Package management

● Local web server

● Navigation

● Secure connections & keys

● File content control

Competencies - OS & CLI

What Does Help● Reading Books* over Blogs

● Interactive Courses

● Blogs :)

● Not copying/pasting code

● Not getting tired of Google-ing

● Reading documentation &

source codes

What Doesn’t Help● Blogs can confuse you

● Ruby and Rails versions

● Googling “for answers” instead

of learning

● Asking Question About

Everything on IRC

Weighing Options

Pros● Be your own boss

● Enjoy your freedom

● Choose what to work on

● Set your rates

Cons● Selling yourself

● Responsibility & discipline

● Time management

● Emotions

Successful Freelancing

Freelancing is not for the faint of heart, but it is worth your best shot!F

Tools of the Trade

● Text Editor (vim, Emacs, TextMate, IDE)

● *nix server management & working in the UNIX shell

● Ruby will become your best friend

● Ruby on Rails framework (and alternatives: MERB,

Sinatra, Ramaze, Rango)

● TDD & BDD

● HTML, CSS, HAML, SASS, LESS

● VCS

● Job boards

o http://jobs.37signals.com/jobs

o http://www.authenticjobs.com/

o http://jobs.rubynow.com/

o http://ruby.jobamatic.com/a/jbb/find-jobs

● Contributing to open source

● Learn how people hire

o http://blog.ritirisi.com/2008/06/17/15-questions-to-ask-during-a-ruby-

interview/

o http://www.rubyinside.com/11-tips-on-hiring-a-rails-developer-662.html

o http://www.aaronsw.com/weblog/hiring

o http://news.ycombinator.com/item?id=549291

o http://workawesome.com/your-job/how-to-get-hired-at-a-startup/

Finding Clients

● Focus on building your profile (personal brand)

o http://www.linkedin.com/

o http://workingwithrails.com/

o https://github.com/

● Create a website or blog

o http://www.useit.com/papers/webwriting/

o http://www.alistapart.com/articles/writeliving/

● Get involved in the community

o http://www.railsbridge.org/

● Write a lot of emails to employers

Get Your First Project

Working Process

● http://en.wikipedia.org/wiki/Getting_Things_Done

● http://www.pomodorotechnique.com/

● Get some rest

● Take a break

● Meditate

● Go for a walk

● Don’t overeat

● Take up a non-computer-related hobby

“You should be well-balanced. Computers are great and everything, but

you should definitely have hobbies that are completely unrelated to

computers. In the last two years I’ve taken up both wood carving and string

figuring, and they have helped me immensely in recovering from burn-out.”

- Jamis Buck

Getting Perspective

Success

● “Everything you write is crap, so always try to improve yourself.”

- Dirkjan Bussink

● Hard work is the secret to success

● Passion is critical; it makes or breaks any endeavor

● Love what you do

● “Never let anyone (including yourself) convince you not to do

something that will make you happy or fulfilled.”

- Yehuda Katz

Decide how good you want to be; be patient and relentless.