KEMBAR78
SELF - Becoming a Rails Developer - The Rest of the Story | PPTX
Becoming a
Rails Developer
The Rest of the Story
● Chief Architect at Synaptian, Inc.
Nathanial “Nate” L. McConnell
● Work
o nate@synaptian.com
o @SynaptianNate
o +1 (866) 773-0016
● Personal
o fluxaugur@gmail.com
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 browser
o Code Academy
o Try Ruby
● Installing local dev environment
o RubyInstaller
o rbenv
o RVM
● Books
o Programming Ruby
● Screencasts
o Ruby Tapas
● Courses
o 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
● 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
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
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
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.

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

  • 1.
  • 2.
    ● Chief Architectat Synaptian, Inc. Nathanial “Nate” L. McConnell ● Work o nate@synaptian.com o @SynaptianNate o +1 (866) 773-0016 ● Personal o fluxaugur@gmail.com o @FluxAugur o +1 (423) 631-4096
  • 3.
    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.
  • 4.
    ● Lots oftechnical details: o Understanding Ruby o Understanding the MVC pattern o Understanding the object-oriented model 3 Key Challenges
  • 5.
    ● Object-oriented programming oClasses & 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
  • 6.
    Learning Ruby ● Rubyin the browser o Code Academy o Try Ruby ● Installing local dev environment o RubyInstaller o rbenv o RVM
  • 7.
    ● Books o ProgrammingRuby ● Screencasts o Ruby Tapas ● Courses o Ruby Koans (Test Driven Development) Learning Ruby - *Further Reading*
  • 8.
    ● MVC o Assetpipeline & 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
  • 9.
    Competencies - RailsFramework ● ORM o Relational schemas  Migrations  Normalization  Foreign keys  Indexes o Document stores o Associations  Dependencies  Eager loading o Validations & callbacks ● User Management o Authorization
  • 10.
    ● 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
  • 11.
    ● Guides o Rubyon 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
  • 12.
    ● Every manfor 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
  • 13.
    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
  • 14.
    ● RVM &rbenv ● Gems o File structure o Open-source etiquette ● Bundler & dependency management Competencies - Rubygems
  • 15.
    ● Version controlsystems o Distributed VCS o Branch o Merge o Diff ● Github o Fork o Pull requests ● config o Remotes o Default behaviors Competencies - Git
  • 16.
    ● Syntax highlighting ●Discoverable shortcuts ● Scope awareness ● Extensibility ● Power editing o Multiline edits o Pasteboard history o Rapid file switching Competencies - IDE/Text Editor
  • 17.
    ● Application architecture oModularization & 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 Competencies - Software Eng.
  • 18.
    ● Select o Group oOrder o Limit ● Insert & update ● Transactions ● Joins ● Performance o Slow query logs o Query plans o N+1 avoidance Competencies - SQL & Data Mod.
  • 19.
    ● Types o Unit oFunctional o Integration o Performance o Acceptance o Regression ● Tools o RSpec & MiniTest o Factories & fixtures o Mocks & stubs ● TATFT Competencies - Tests
  • 20.
    ● Automation o ContinuousDeployment o Continuous Integration o Server monitoring & logging ● Configuration management ● Release management ● Security & data integrity ● Platform o Dedicated o Virtualized o Abstracted Competencies - Deployment
  • 21.
    ● HTTP o Request Methods  State ● Params ● Cookies  Scheme o Response  Status codes  Media types ● HTML o The DOM o Semantic markup Competencies - WWW
  • 22.
    ● 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
  • 23.
    ● File management ●Admin permissions ● Package management ● Local web server ● Navigation ● Secure connections & keys ● File content control Competencies - OS & CLI
  • 24.
    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
  • 25.
    Pros ● Be yourown 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
  • 26.
    Tools of theTrade ● 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
  • 27.
    ● Job boards ohttp://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
  • 28.
    ● Focus onbuilding 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
  • 29.
  • 30.
    ● Get somerest ● 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
  • 31.
    Success ● “Everything youwrite 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.

Editor's Notes

  • #4 To stay efficient, we need to coach people by channeling their learning with a specific goal in mind and specific technology.
  • #5 Can be tough for a beginner to separate Ruby the language from Rails the framework. Proper code placement may be obvious to an experienced developer, but a beginner could end up with fat (or obese) controllers or overly complex views. To use Ruby in a smart way with Rails, you really need to understand the OO model properly.
  • #27 this might be your section intro slide for the ‘oh, before you learn ruby, you need to ...’ section
  • #28 weworkremotely.com careers.stackexchange.com