Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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)...
Purpose
There is more, much more, to becoming a
Rails developer than “simply” learning Rails.
Learning Rails is hard, and ...
● Lots of technical details:
o Understanding Ruby
o Understanding the MVC pattern
o Understanding the object-oriented mode...
● Object-oriented programming
o Classes & modules
o Attributes & methods
o Inheritance & mixins
● Functional programming
o...
Learning Ruby
● Ruby in the browser
o Code Academy
o Try Ruby
● Installing local dev environment
o RubyInstaller
o rbenv
o...
● Books
o Programming Ruby
● Screencasts
o Ruby Tapas
● Courses
o Ruby Koans (Test Driven Development)
Learning Ruby - *Fu...
● MVC
o Asset pipeline & preprocessors
o UJS
o Performance
 Monitoring
 Caching & pagination
 Background tasks
● REST
o...
Competencies - Rails Framework
● ORM
o Relational schemas
 Migrations
 Normalization
 Foreign keys
 Indexes
o Document...
● Conventions & best practices
o I18n & time zones
o ActiveSupport
o Security & defaults
● CLI
o Rails console
o Rails gen...
● Guides
o Ruby on Rails Site
● Books
o Agile Web Development with Rails 4
● Screencasts
o RailsCasts
● Tools
o Git & Gith...
● Every man for himself isn’t an option for organized development teams
● Mentoring - mentors assigned to new devs. Mentor...
Process in Practice
Practically, we use these methods based on the needs
of a specific situation, when we feel they outwei...
● 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 D...
● Syntax highlighting
● Discoverable shortcuts
● Scope awareness
● Extensibility
● Power editing
o Multiline edits
o Paste...
● Application architecture
o Modularization & SOA
o Encapsulation of domain logic
● Agile process
o Project ownership & us...
● Select
o Group
o Order
o Limit
● Insert & update
● Transactions
● Joins
● Performance
o Slow query logs
o Query plans
o ...
● Types
o Unit
o Functional
o Integration
o Performance
o Acceptance
o Regression
● Tools
o RSpec & MiniTest
o Factories &...
● Automation
o Continuous Deployment
o Continuous Integration
o Server monitoring & logging
● Configuration management
● R...
● HTTP
o Request
 Methods
 State
● Params
● Cookies
 Scheme
o Response
 Status codes
 Media types
● HTML
o The DOM
o ...
● CSS
o Sass & Less
o CSS frameworks
o Browser quirks
o Selectors & specificity
● JavaScript
o Libraries
 jQuery
 Client...
● File management
● Admin permissions
● Package management
● Local web server
● Navigation
● Secure connections & keys
● F...
What Does Help
● Reading Books* over Blogs
● Interactive Courses
● Blogs :)
● Not copying/pasting code
● Not getting tired...
Pros
● Be your own boss
● Enjoy your freedom
● Choose what to work on
● Set your rates
Cons
● Selling yourself
● Responsib...
Tools of the Trade
● Text Editor (vim, Emacs, TextMate, IDE)
● *nix server management & working in the UNIX shell
● Ruby w...
● Job boards
o http://jobs.37signals.com/jobs
o http://www.authenticjobs.com/
o http://jobs.rubynow.com/
o http://ruby.job...
● Focus on building your profile (personal brand)
o http://www.linkedin.com/
o http://workingwithrails.com/
o https://gith...
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 shou...
Success
● “Everything you write is crap, so always try to improve yourself.”
- Dirkjan Bussink
● Hard work is the secret t...
Upcoming SlideShare
Loading in …5
×

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

294 views

Published on

Presented at Southeast LinuxFest 2014, June 22

Published in: Software
  • Login to see the comments

  • Be the first to like this

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

  1. 1. Becoming a Rails Developer The Rest of the Story
  2. 2. ● 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
  3. 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. 4. ● Lots of technical details: o Understanding Ruby o Understanding the MVC pattern o Understanding the object-oriented model 3 Key Challenges
  5. 5. ● 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
  6. 6. Learning Ruby ● Ruby in the browser o Code Academy o Try Ruby ● Installing local dev environment o RubyInstaller o rbenv o RVM
  7. 7. ● Books o Programming Ruby ● Screencasts o Ruby Tapas ● Courses o Ruby Koans (Test Driven Development) Learning Ruby - *Further Reading*
  8. 8. ● 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
  9. 9. 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
  10. 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. 11. ● 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
  12. 12. ● 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
  13. 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. 14. ● RVM & rbenv ● Gems o File structure o Open-source etiquette ● Bundler & dependency management Competencies - Rubygems
  15. 15. ● 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
  16. 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. 17. ● 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.
  18. 18. ● 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.
  19. 19. ● 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
  20. 20. ● 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
  21. 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. 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. 23. ● File management ● Admin permissions ● Package management ● Local web server ● Navigation ● Secure connections & keys ● File content control Competencies - OS & CLI
  24. 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. 25. 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
  26. 26. 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
  27. 27. ● 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
  28. 28. ● 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
  29. 29. Working Process ● http://en.wikipedia.org/wiki/Getting_Things_Done ● http://www.pomodorotechnique.com/
  30. 30. ● 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
  31. 31. 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.

×