SlideShare a Scribd company logo
What Rails taught me
To those who was born within Rails
Kyiv, March 2016
About me
10 years programming
9 Rails projects of various sizes
6 years of using Ruby on Rails
8 years of web development
Agenda
The Good
What makes Rails so great?
The Bad
What parts of Rails hurt development?

The Ugly
How Rails hurt developers?
The Good
• it’s cheap to try new ideas,
• it’s cheap to write CRUD apps,
• it’s easy to get help on the internet (talk to people on
blogs, forums, look at OSS Rails apps),
• it’s easy to find a Rails job!
The Good
The Good
• build a prototype (until comfortable with something
else),
• work on a project based on a very promising idea
(enter Rails dev, butmove on to more interesting
things eventually),
• to quickly improve one’s finance situation.
The Good
Everything I know now I owe to Rails!
The Good
Q. What is so nice about Rails
from a technical standpoint?
The Good
• routing,
• rack middleware stack,
• view helpers (like `link_to` etc.),
• hot code reloading,
• asset pipeline.
The Good
Q. What is so nice about Rails
from an learner standpoint?
A. Ecosystem!
The Good
Discourse
Travis CI
Diaspora
Spree
GitLab
Hound
Refinery CMS
opensourcerails.com
ManageIQ
The Good
Q. What Rails is known for?
A. Big names!
The Good
The Good
Q. Does it matter?
A. No! Success is very little
about a technology.
The Good
Facebook (PHP)
VK (PHP)
StackOverflow (C#)
Reddit (PHP)
A lot more…
The Bad
• let’s not judge Rails in it’s entirety,
• it has lots of subsystems,
• let’s examine Rails’s worst parts,
The Bad
• Rails is too much of a framework.
• Rails is way too opinionated.
• Rails is coupling itself to the app logic way too much.
One can barely notice this, let alone stop it.
The Bad
The Bad
The Bad
ORM sucks
• Validation in models
• Callbacks in models
• Model objects are mutable
• Nested attributes
The Bad
The Bad
Ruby gems are abused
The Bad
Bad gem usage mindset:
there’s a gem for that™
Betteer gem usage mindset:
use low-level gems only: start with redis,
memcached drivers, maybe devise, etc.
The Bad
> I’ve seen former colleagues to just install a gem …
for just a couple, literally a couple of lines of code that
you needed from the gem.
Luca Guidi,
https://devchat.tv/ruby-rogues/228-the-lotus-framework-with-luca-guidi
The Bad
acts_as_api acts_as_audited
acts_as_commentable
acts_as_ferret acts_as_indexed
acts_as_tree
acts_as_list
acts_as
The Bad
Controller tests
• “write code, then entangle it with tests” philosophy,
• TDD is not appreciated,
• controller tests as hard to understand,
• abuse of factories,
• a lot of magic with setting up testing env.
The Bad
The Bad
• Rails is extracted from Basecamp,
• Rails's advancement defined & bound by Basecamp’s
internal philosophy and needs,
• …see introduction of Turbolinks,
• …see ActionCable,
• …see most of stuff introduced by DHH.
Also…
The Ugly
The Ugly
• Rails + gems + community…
• …can be very helpful,
• …can generate a lot of value,
• …can be a HUGE comfort zone,
• …can be a mindset’s trap.
The Ugly
We barely escape confort zones,
unless forced by business requirements.
The Ugly
We learn how to use the framework
and become Rails experts at best,
but do not advance as engeneers
The Ugly
We forget about testing
and debugging outside Rails
What rails taught me – Eugene Pirogov
What rails taught me – Eugene Pirogov
The Ugly
Writing code & learning
is replaced by searching for new gems.
The Ugly
The Ugly
Once you get used to quick pace, Rails doesn’t
embrace patience or discipline.
When your boss gets used to your quick pace,
– this is turning point in app development.
You no longer have time to proper think about solution,
and things start to go really bad.
The Ugly
Rails is telling how to do things.
And often does things himself, without asking.
The First Principles
The First Principles
Frameworks should help you do the things.
Not do the things for you.
Frameworks come and go.
What will remain the same in 10 years?
The First Principles
Don’t eat too much framework’s sugar.
It will cause you amnesia.
The First Principles
Alway be stepping out
of your comfort zone.
The First Principles
Stop abusing the gems.
Write the fucking code!
The First Principles
Want to be a better Rails developer?
Try programming using different frameworks &
languages.
The First Principles
The First Principles
When shit breaks, the only thing you can rely on is
what’s behind it. Learn Unix/Linux and SQL.
(“Ruby is unlike a Banana”)
The First Principles
Forget your framework and learn to stand on the
shoulders of giants.
The First Principles
http://antiflasher.livejournal.com/4230.html
If you want anything to be familiar, you’ll never learn
anything new.
The First Principles
h"ps://youtu.be/rI8tNMsozo0
Thanks! Questions?

More Related Content

PDF
What schools should be teaching IT students
PDF
What it Takes to Become a Rails Developer
KEY
Irb Tips and Tricks
KEY
Becoming a more productive Rails Developer
KEY
Community and Github: 7/27/2011
PDF
proper care and feeding for your junior developer
KEY
Wwcode2
PDF
Testing sad-paths
What schools should be teaching IT students
What it Takes to Become a Rails Developer
Irb Tips and Tricks
Becoming a more productive Rails Developer
Community and Github: 7/27/2011
proper care and feeding for your junior developer
Wwcode2
Testing sad-paths

What's hot (9)

KEY
LeanStartup:Research is cheaper than development
KEY
It's OK to make a new folder within Rails.
PDF
Core Data in RubyMotion #inspect
PPT
Week10
KEY
hey I founded a tech startup...OH SHIT I CAN'T CODE. #barcampsg7
PDF
HTML5 for the Ruby Developer
PPTX
#SydPHP - Pull Requests - The Good, The Bad & The Ugly
ODP
Aspect Oriented Programming (AOP) - A case study in Android
PDF
Five Stages of Development - Nordic.js
LeanStartup:Research is cheaper than development
It's OK to make a new folder within Rails.
Core Data in RubyMotion #inspect
Week10
hey I founded a tech startup...OH SHIT I CAN'T CODE. #barcampsg7
HTML5 for the Ruby Developer
#SydPHP - Pull Requests - The Good, The Bad & The Ugly
Aspect Oriented Programming (AOP) - A case study in Android
Five Stages of Development - Nordic.js
Ad

Similar to What rails taught me – Eugene Pirogov (20)

PDF
Aspose pdf
PDF
Ruby Rails Web Development.pdf
KEY
Wed Development on Rails
PPT
A Tour of Ruby On Rails
PDF
Ruby On Rails
PPT
Ruby On Rails Seminar Basis Softexpo Feb2010
PDF
rubyonrails
PDF
rubyonrails
PPT
Introduction To Rails
PDF
Introduction to Ruby on Rails
PPT
Viridians on Rails
PDF
Ruby On Rails Basics
ODP
Ruby On Rails - Rochester K Linux User Group
PDF
RoR (Ruby on Rails)
PDF
8 Common Ruby on Rails Development Mistakes to Avoid
PDF
Rails is Easy*
PDF
Ruby Rails Web Development
PDF
Agile Web Development With Rails 4th Edition 4th Edition Sam Ruby
PPTX
Rubyonrails 120409061835-phpapp02
PDF
Introduction to Rails by Evgeniy Hinyuk
Aspose pdf
Ruby Rails Web Development.pdf
Wed Development on Rails
A Tour of Ruby On Rails
Ruby On Rails
Ruby On Rails Seminar Basis Softexpo Feb2010
rubyonrails
rubyonrails
Introduction To Rails
Introduction to Ruby on Rails
Viridians on Rails
Ruby On Rails Basics
Ruby On Rails - Rochester K Linux User Group
RoR (Ruby on Rails)
8 Common Ruby on Rails Development Mistakes to Avoid
Rails is Easy*
Ruby Rails Web Development
Agile Web Development With Rails 4th Edition 4th Edition Sam Ruby
Rubyonrails 120409061835-phpapp02
Introduction to Rails by Evgeniy Hinyuk
Ad

More from Ruby Meditation (20)

PDF
Is this Legacy or Revenant Code? - Sergey Sergyenko | Ruby Meditation 30
PDF
Life with GraphQL API: good practices and unresolved issues - Roman Dubrovsky...
PDF
Where is your license, dude? - Viacheslav Miroshnychenko | Ruby Meditation 29
PDF
Dry-validation update. Dry-validation vs Dry-schema 1.0 - Aleksandra Stolyar ...
PDF
How to cook Rabbit on Production - Bohdan Parshentsev | Ruby Meditation 28
PDF
How to cook Rabbit on Production - Serhiy Nazarov | Ruby Meditation 28
PDF
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...
PDF
Performance Optimization 101 for Ruby developers - Nihad Abbasov (ENG) | Ruby...
PDF
Use cases for Serverless Technologies - Ruslan Tolstov (RUS) | Ruby Meditatio...
PDF
The Trailblazer Ride from the If Jungle into a Civilised Railway Station - Or...
PDF
What/How to do with GraphQL? - Valentyn Ostakh (ENG) | Ruby Meditation 27
PDF
New features in Rails 6 - Nihad Abbasov (RUS) | Ruby Meditation 26
PDF
Security Scanning Overview - Tetiana Chupryna (RUS) | Ruby Meditation 26
PDF
Teach your application eloquence. Logs, metrics, traces - Dmytro Shapovalov (...
PDF
Best practices. Exploring - Ike Kurghinyan (RUS) | Ruby Meditation 26
PDF
Road to A/B testing - Alexey Vasiliev (ENG) | Ruby Meditation 25
PDF
Concurrency in production. Real life example - Dmytro Herasymuk | Ruby Medita...
PDF
Data encryption for Ruby web applications - Dmytro Shapovalov (RUS) | Ruby Me...
PDF
Rails App performance at the limit - Bogdan Gusiev
PDF
GDPR. Next Y2K in 2018? - Anton Tkachov | Ruby Meditation #23
Is this Legacy or Revenant Code? - Sergey Sergyenko | Ruby Meditation 30
Life with GraphQL API: good practices and unresolved issues - Roman Dubrovsky...
Where is your license, dude? - Viacheslav Miroshnychenko | Ruby Meditation 29
Dry-validation update. Dry-validation vs Dry-schema 1.0 - Aleksandra Stolyar ...
How to cook Rabbit on Production - Bohdan Parshentsev | Ruby Meditation 28
How to cook Rabbit on Production - Serhiy Nazarov | Ruby Meditation 28
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...
Performance Optimization 101 for Ruby developers - Nihad Abbasov (ENG) | Ruby...
Use cases for Serverless Technologies - Ruslan Tolstov (RUS) | Ruby Meditatio...
The Trailblazer Ride from the If Jungle into a Civilised Railway Station - Or...
What/How to do with GraphQL? - Valentyn Ostakh (ENG) | Ruby Meditation 27
New features in Rails 6 - Nihad Abbasov (RUS) | Ruby Meditation 26
Security Scanning Overview - Tetiana Chupryna (RUS) | Ruby Meditation 26
Teach your application eloquence. Logs, metrics, traces - Dmytro Shapovalov (...
Best practices. Exploring - Ike Kurghinyan (RUS) | Ruby Meditation 26
Road to A/B testing - Alexey Vasiliev (ENG) | Ruby Meditation 25
Concurrency in production. Real life example - Dmytro Herasymuk | Ruby Medita...
Data encryption for Ruby web applications - Dmytro Shapovalov (RUS) | Ruby Me...
Rails App performance at the limit - Bogdan Gusiev
GDPR. Next Y2K in 2018? - Anton Tkachov | Ruby Meditation #23

Recently uploaded (20)

PDF
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Getting Started with Data Integration: FME Form 101
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Enhancing emotion recognition model for a student engagement use case through...
PDF
A novel scalable deep ensemble learning framework for big data classification...
PDF
A comparative study of natural language inference in Swahili using monolingua...
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Hybrid model detection and classification of lung cancer
PPTX
Chapter 5: Probability Theory and Statistics
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PDF
DP Operators-handbook-extract for the Mautical Institute
PDF
1 - Historical Antecedents, Social Consideration.pdf
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
Assigned Numbers - 2025 - Bluetooth® Document
Getting Started with Data Integration: FME Form 101
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Programs and apps: productivity, graphics, security and other tools
NewMind AI Weekly Chronicles - August'25-Week II
cloud_computing_Infrastucture_as_cloud_p
Building Integrated photovoltaic BIPV_UPV.pdf
Enhancing emotion recognition model for a student engagement use case through...
A novel scalable deep ensemble learning framework for big data classification...
A comparative study of natural language inference in Swahili using monolingua...
Group 1 Presentation -Planning and Decision Making .pptx
MIND Revenue Release Quarter 2 2025 Press Release
Hybrid model detection and classification of lung cancer
Chapter 5: Probability Theory and Statistics
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
DP Operators-handbook-extract for the Mautical Institute
1 - Historical Antecedents, Social Consideration.pdf

What rails taught me – Eugene Pirogov