Craig Christie – Your steps to becoming a property developer.
SELF - Becoming a Rails Developer - The Rest of the Story
-
Upload
nathanial-mcconnell -
Category
Software
-
view
67 -
download
1
Transcript of SELF - 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.