SlideShare a Scribd company logo
Optimizing for Programmer
Happiness
Or my seven year love affair with Ruby
Once upon a time...
Not Mine :-(
Josh Schramm
TW: @joshreedschramm
Level Seven
Today’s Talk
Why do people show up every month to talk about Ruby?
Discussion not a lecture
Mix of new people and “vets”.
Lots of opinion in these slides. References where referenceable
History, Culture (both ‘social’ and programming), unique parts of the language and
impact on the industry. Not much code
History Lesson - Founding Fathers
Yukihiro Matsumoto “Matz”
Invented the Ruby Language in ‘93, first release in
‘95
Influenced by Perl, Eiffel, Ada, Lisp and Smalltalk
Much of the culture of the Ruby community comes
from the principals Matz followed when building out
the early versions of the language
History Lesson - Founding Fathers
David Heinemeier Hansson “DHH”
Invented the Ruby on Rails web framework. First
release in 2005
Founder of 37signals (now Basecamp)
Coauthor of Agile Web Development w/ Rails
(along with Dave Thomas and Sam Ruby)
Rails was largely responsible for the rise in
popularity of the Ruby language.
Inflection point in 2006
Jim Weirich
Inventor of Rake, co-founder/early contributor to Rubygems
Was a prominent conference speaker
_why the lucky stiff
Wrote the semi-irreverent “Why’s (poignant) Guide to
Ruby”
Yehuda Katz
Co-inventor of Merb, an early Rails competitor that
merged w/ Rails. It helped introduce modularity to Rails.
The Ruby Way
“Matz is nice and so we are nice”
- Early culture of niceness, inclusiveness and evangelism.
- Lead to a spike in user groups, conferences and events (like Rails Rumble)
- Regional conferences took off (Windy City Rails, Madison Ruby, Steel City
Ruby, Great Lakes Ruby Bash)
- Evangelism gave way to great tools for learning the language:
- Ex: Ruby Koans, Try Ruby
Is this still true?
Culture of the Code
Principle of Least Astonishment (POLA)
- The language should minimize confusion amongst experienced users.
- Matz’s early driving design principle
- Confusing to whom?
Optimized for Programmer Happiness
- Inspired by POLA
- Language decisions are intended to delight the user (the programmer) even if
that has performance, verboseness or other tradeoffs.
The Rails Doctrine
Convention over Configuration
- Starts from the position of opinionated software. That most use cases in web
development are similar and we shouldn’t reinvent the wheel every time.
Push Up a Big Tent
- That said, the tool should support customization and the introduction of new
tools if people prefer / have valid use cases.
- Ex: RSpec over MiniTest / TestUnit
More: http://rubyonrails.org/doctrine/
_Why Ruby? - Dynamic
With Ruby you can manipulate or modify the program you are running as it runs.
Part of a concept known as metaprogramming.
Optimizing for programmer happiness
_Why Ruby? - Dynamically and Strongly Typed
Dynamic Typing: A variable can change type to whatever you assign to it.
Strong Typing: You cannot perform an action on a variable that doesn’t make
sense for the current type.
Optimizing for programmer happiness
Optimizing for programmer happiness
_Why Ruby? - Reflective
You can inspect the characteristics of a class, method, variable at runtime.
Combine this with the dynamic language features and dynamic typing and you can
make decisions about what your code should be based on what your code
currently is.
How very zen
Optimizing for programmer happiness
There are no primitive types in Ruby. Literally everything you interact with is an
object of some sort. A class, an instance of a class, etc.
Contrast with .NET / Java / C where int, char, decimal and several others are
primitives, not objects
Main differences
Primitives tend to be faster to interact with, pull out of memory and copy but
immutable and inflexible.
Objects are slower, more memory but far more flexible
_Why Ruby? - Everything is an Object (Super OO)
Optimizing for programmer happiness
_Why Ruby? - Lack of Ceremony
Ruby syntax tends to be clean(er) and devoid of most markers that other
languages require like semicolons or parentheses
At the same time ruby can support those things if preferred
Optimizing for programmer happiness
_Why Ruby? - Domain Specific Languages
Ruby tools are usually written to be expressive and easy to read. They leverage a
concept called DSL to describe the actions the tool can take.
Ex: Rspec
Optimizing for programmer happiness
Why Not Ruby?
Ruby and Rails’ Impact - RubyGems
One of the most comprehensive dependency management / library distribution
tools anywhere at its release.
Helped contribute to rise of social coding
Inspired other platforms: NuGet (.NET), Composer (PHP), CocoaPods
(Swift/Obj-C), NPM (Node.JS)
Ruby and Rails’ Impact - Testing
Flexibility of the language drove the rise in BDD and ATDD as a first class
practice.
Tools like: RSpec, Cucumber, Capybara, Watir
Inspired other platforms: SpecFlow (.NET), Watin/Watij (.NET/Java), Jasmine
(Javascript)
Ruby and Rails’ Impact - Web MVC
Rails implementation of a full-stack web framework designed around a Model
View Controller architecture became the standard for framework design for about
a decade.
Just now starting to see a change to this with API driven, single page apps and
functional programming.
Inspired other platforms: ASP.Net MVC (.NET), Play (Java and Scala), Laravel /
CodeIgniter (PHP)
Ruby and Rails’ Impact - DevOps
The DSL features of Rails helped spur the adoption of configurable operations
tooling. It became easier to automate the setup of infrastructure and ultimately
spawned an entire “new” category of IT.
Examples: Chef / Puppet
Ruby and Rails’ Impact - Opinionated Programming
Rails “Convention over Configuration” mantra broke down some of the stigma
associated with setting intelligent defaults in frameworks / tools.
Now most platforms package with a preferred DBMS, View Layer, Emailing Tool,
etc. even if they are customizable.
Ex: ASP.Net MVC with Entity Framework
Questions / Discussion

More Related Content

PDF
Lets get started by Leif Gensert
PPTX
Introduction to Ruby on Rails
PPT
Do Languages Matter?
PDF
Ruby for Beginner
KEY
Free community with deep roots
PPT
Intro To Ror
PDF
Ruby tutorial
ODP
Ruby on Rails 3
Lets get started by Leif Gensert
Introduction to Ruby on Rails
Do Languages Matter?
Ruby for Beginner
Free community with deep roots
Intro To Ror
Ruby tutorial
Ruby on Rails 3

Viewers also liked (20)

PPTX
Twitter for Nontraditional Businesses
PDF
Cloud storage services
PDF
Password management
PDF
Using MVNO at Japan
PPT
Blog
PPTX
Role of Public Art in Environmental movements
PDF
Air bnb host_diary
PPTX
Customer orientation مشتری مداری
PPTX
внешняя память
PDF
Iso10002 مدیریت شکایت و رضایت مشتری
PPTX
Down Syndrome
PDF
Connecting ti cc2541 with i os
PDF
The Republic کتاب جمهور افلاطون
PPTX
Doing Business With Nestle
PPTX
Archetypes شخصیت شناسی مفاهیم اولیه
PDF
Presentation
PDF
Business etiquette آداب معاشرت کسب و کار
PPTX
Body language زبان بدن
PDF
Internet, la messagerie - Office de Tourisme Val de Cher Saint-Aignan
PDF
Le social commerce
Twitter for Nontraditional Businesses
Cloud storage services
Password management
Using MVNO at Japan
Blog
Role of Public Art in Environmental movements
Air bnb host_diary
Customer orientation مشتری مداری
внешняя память
Iso10002 مدیریت شکایت و رضایت مشتری
Down Syndrome
Connecting ti cc2541 with i os
The Republic کتاب جمهور افلاطون
Doing Business With Nestle
Archetypes شخصیت شناسی مفاهیم اولیه
Presentation
Business etiquette آداب معاشرت کسب و کار
Body language زبان بدن
Internet, la messagerie - Office de Tourisme Val de Cher Saint-Aignan
Le social commerce
Ad

Similar to Optimizing for programmer happiness (20)

PPTX
Ruby on Rails Introduction M&P - IT Skill Development Program 07
PPTX
Ruby on Rails Fundamentals, Class 1
PDF
Languages used by web app development services remotestac x
PPT
Ruby On Rails Presentation
PDF
From Java to Ruby...and Back
PDF
Ruby Rails Web Development.pdf
PDF
Ruby vs Java: Comparing Two Popular Programming Languages For Developing Ente...
PPTX
Life Beyond Rails: Creating Cross Platform Ruby Apps
ODP
Ruby On Rails - Rochester K Linux User Group
PPT
Ruby on Rails (RoR) as a back-end processor for Apex
PPTX
Exploring metaprogramming using Ruby language
PDF
Unit 4 Assignment 1 Comparative Study Of Programming...
KEY
Ruby on Rails Training - Module 1
DOC
Ruby On Rails
PPT
Ruby Past, Present, Future
PPT
Dynamic Languages on the JVM
PDF
Is Ruby on Rails Object Oriented? A Comprehensive Exploration
PPTX
Why Ruby?
PDF
A Strong Object Recognition Using Lbp, Ltp And Rlbp
PPTX
Ruby on Rails : First Mile
Ruby on Rails Introduction M&P - IT Skill Development Program 07
Ruby on Rails Fundamentals, Class 1
Languages used by web app development services remotestac x
Ruby On Rails Presentation
From Java to Ruby...and Back
Ruby Rails Web Development.pdf
Ruby vs Java: Comparing Two Popular Programming Languages For Developing Ente...
Life Beyond Rails: Creating Cross Platform Ruby Apps
Ruby On Rails - Rochester K Linux User Group
Ruby on Rails (RoR) as a back-end processor for Apex
Exploring metaprogramming using Ruby language
Unit 4 Assignment 1 Comparative Study Of Programming...
Ruby on Rails Training - Module 1
Ruby On Rails
Ruby Past, Present, Future
Dynamic Languages on the JVM
Is Ruby on Rails Object Oriented? A Comprehensive Exploration
Why Ruby?
A Strong Object Recognition Using Lbp, Ltp And Rlbp
Ruby on Rails : First Mile
Ad

Recently uploaded (20)

PDF
Encapsulation theory and applications.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
sap open course for s4hana steps from ECC to s4
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
KodekX | Application Modernization Development
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Electronic commerce courselecture one. Pdf
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Encapsulation theory and applications.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Review of recent advances in non-invasive hemoglobin estimation
Chapter 3 Spatial Domain Image Processing.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Programs and apps: productivity, graphics, security and other tools
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
sap open course for s4hana steps from ECC to s4
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
KodekX | Application Modernization Development
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Per capita expenditure prediction using model stacking based on satellite ima...
MYSQL Presentation for SQL database connectivity
Electronic commerce courselecture one. Pdf
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
MIND Revenue Release Quarter 2 2025 Press Release
Digital-Transformation-Roadmap-for-Companies.pptx
Encapsulation_ Review paper, used for researhc scholars
Agricultural_Statistics_at_a_Glance_2022_0.pdf

Optimizing for programmer happiness

  • 1. Optimizing for Programmer Happiness Or my seven year love affair with Ruby
  • 2. Once upon a time... Not Mine :-(
  • 4. Today’s Talk Why do people show up every month to talk about Ruby? Discussion not a lecture Mix of new people and “vets”. Lots of opinion in these slides. References where referenceable History, Culture (both ‘social’ and programming), unique parts of the language and impact on the industry. Not much code
  • 5. History Lesson - Founding Fathers Yukihiro Matsumoto “Matz” Invented the Ruby Language in ‘93, first release in ‘95 Influenced by Perl, Eiffel, Ada, Lisp and Smalltalk Much of the culture of the Ruby community comes from the principals Matz followed when building out the early versions of the language
  • 6. History Lesson - Founding Fathers David Heinemeier Hansson “DHH” Invented the Ruby on Rails web framework. First release in 2005 Founder of 37signals (now Basecamp) Coauthor of Agile Web Development w/ Rails (along with Dave Thomas and Sam Ruby) Rails was largely responsible for the rise in popularity of the Ruby language. Inflection point in 2006
  • 7. Jim Weirich Inventor of Rake, co-founder/early contributor to Rubygems Was a prominent conference speaker _why the lucky stiff Wrote the semi-irreverent “Why’s (poignant) Guide to Ruby” Yehuda Katz Co-inventor of Merb, an early Rails competitor that merged w/ Rails. It helped introduce modularity to Rails.
  • 8. The Ruby Way “Matz is nice and so we are nice” - Early culture of niceness, inclusiveness and evangelism. - Lead to a spike in user groups, conferences and events (like Rails Rumble) - Regional conferences took off (Windy City Rails, Madison Ruby, Steel City Ruby, Great Lakes Ruby Bash) - Evangelism gave way to great tools for learning the language: - Ex: Ruby Koans, Try Ruby Is this still true?
  • 9. Culture of the Code Principle of Least Astonishment (POLA) - The language should minimize confusion amongst experienced users. - Matz’s early driving design principle - Confusing to whom? Optimized for Programmer Happiness - Inspired by POLA - Language decisions are intended to delight the user (the programmer) even if that has performance, verboseness or other tradeoffs.
  • 10. The Rails Doctrine Convention over Configuration - Starts from the position of opinionated software. That most use cases in web development are similar and we shouldn’t reinvent the wheel every time. Push Up a Big Tent - That said, the tool should support customization and the introduction of new tools if people prefer / have valid use cases. - Ex: RSpec over MiniTest / TestUnit More: http://rubyonrails.org/doctrine/
  • 11. _Why Ruby? - Dynamic With Ruby you can manipulate or modify the program you are running as it runs. Part of a concept known as metaprogramming.
  • 13. _Why Ruby? - Dynamically and Strongly Typed Dynamic Typing: A variable can change type to whatever you assign to it. Strong Typing: You cannot perform an action on a variable that doesn’t make sense for the current type.
  • 16. _Why Ruby? - Reflective You can inspect the characteristics of a class, method, variable at runtime. Combine this with the dynamic language features and dynamic typing and you can make decisions about what your code should be based on what your code currently is. How very zen
  • 18. There are no primitive types in Ruby. Literally everything you interact with is an object of some sort. A class, an instance of a class, etc. Contrast with .NET / Java / C where int, char, decimal and several others are primitives, not objects Main differences Primitives tend to be faster to interact with, pull out of memory and copy but immutable and inflexible. Objects are slower, more memory but far more flexible _Why Ruby? - Everything is an Object (Super OO)
  • 20. _Why Ruby? - Lack of Ceremony Ruby syntax tends to be clean(er) and devoid of most markers that other languages require like semicolons or parentheses At the same time ruby can support those things if preferred
  • 22. _Why Ruby? - Domain Specific Languages Ruby tools are usually written to be expressive and easy to read. They leverage a concept called DSL to describe the actions the tool can take. Ex: Rspec
  • 25. Ruby and Rails’ Impact - RubyGems One of the most comprehensive dependency management / library distribution tools anywhere at its release. Helped contribute to rise of social coding Inspired other platforms: NuGet (.NET), Composer (PHP), CocoaPods (Swift/Obj-C), NPM (Node.JS)
  • 26. Ruby and Rails’ Impact - Testing Flexibility of the language drove the rise in BDD and ATDD as a first class practice. Tools like: RSpec, Cucumber, Capybara, Watir Inspired other platforms: SpecFlow (.NET), Watin/Watij (.NET/Java), Jasmine (Javascript)
  • 27. Ruby and Rails’ Impact - Web MVC Rails implementation of a full-stack web framework designed around a Model View Controller architecture became the standard for framework design for about a decade. Just now starting to see a change to this with API driven, single page apps and functional programming. Inspired other platforms: ASP.Net MVC (.NET), Play (Java and Scala), Laravel / CodeIgniter (PHP)
  • 28. Ruby and Rails’ Impact - DevOps The DSL features of Rails helped spur the adoption of configurable operations tooling. It became easier to automate the setup of infrastructure and ultimately spawned an entire “new” category of IT. Examples: Chef / Puppet
  • 29. Ruby and Rails’ Impact - Opinionated Programming Rails “Convention over Configuration” mantra broke down some of the stigma associated with setting intelligent defaults in frameworks / tools. Now most platforms package with a preferred DBMS, View Layer, Emailing Tool, etc. even if they are customizable. Ex: ASP.Net MVC with Entity Framework

Editor's Notes

  • #3: Dates may be a bit off Started career in .net One day a friend told me about user groups, these strange places where programmers got together to nerd out about some language or technology they loved and he dragged me along to this tiny group called the Cleveland Ruby Brigade. It was on this beatup old restaurant boat on lake erie that this weird software company called Lean Dog had made home. I think twice during the meeting people came in asking if they were serving dinner that night. I think the topic was an overview of the latest version of Rails… something like 2.3 maybe at the time. Web development could be easy. .NET had alwasy been overly complicated and PHP, the language i used to work in, was ugly and hard to maintain. Some friends and I decided we would get into ruby in a crazy way, by staying up for 2 nights straight and competing in a hackathon. Rails Rumble. We lost but had so much fun working on the idea that I knew I needed to get a job building ruby apps.
  • #5: Introduction - Noticed quite a few new people - Why does this group exist? What drew a bunch of us to ruby and why do we meet every month to talk about a programming language? - End w/ discussion. Vets can talk about why they stick around, newbies can explain why they showed up. - Much of this talk is subjective / opinion, which is why I'm looking forward to the discussion part. I've tried to cite sources in a few places but generally treat this as an opinion piece
  • #6: .NET in 2002, Java in May ‘95 just a couple of months before Ruby More on language influences in a bit References: https://www.ruby-lang.org/en/about/ https://en.wikipedia.org/wiki/.NET_Framework https://en.wikipedia.org/wiki/Java_(programming_language)
  • #7: References: Inflection Point: https://www.ruby-lang.org/en/about/
  • #8: References: https://en.wikipedia.org/wiki/Why%27s_(poignant)_Guide_to_Ruby https://en.wikipedia.org/wiki/Jim_Weirich https://en.wikipedia.org/wiki/Merb
  • #9: References: https://www.ruby-lang.org/en/community/conferences/
  • #10: References: https://en.wikipedia.org/wiki/Principle_of_least_astonishment https://www.python.org/dev/peps/pep-0020/
  • #11: References: http://rubyonrails.org/doctrine/
  • #12: Apologies to _why Tied to but not the same as compiled vs interpreted. Dynamic languages run though many common tasks at run time like extending code. In ruby this happens in order of the interpreter encountering the code. References: http://ruby-metaprogramming.rubylearning.com/html/ruby_metaprogramming_2.html http://archive.oreilly.com/pub/post/what_is_a_dsl.html https://en.wikipedia.org/wiki/Smalltalk#Object-oriented_programming https://www.ruby-lang.org/en/about/ http://www.rubyfleebie.com/ruby-is-dynamically-and-strongly-typed/
  • #13: Reference: https://gist.github.com/matugm/db363c7131e6af27716c
  • #14: Apologies to _why References: http://ruby-metaprogramming.rubylearning.com/html/ruby_metaprogramming_2.html http://archive.oreilly.com/pub/post/what_is_a_dsl.html https://en.wikipedia.org/wiki/Smalltalk#Object-oriented_programming https://www.ruby-lang.org/en/about/ http://www.rubyfleebie.com/ruby-is-dynamically-and-strongly-typed/
  • #15: Reference: https://gist.github.com/matugm/db363c7131e6af27716c
  • #16: Reference: https://gist.github.com/matugm/db363c7131e6af27716c
  • #17: Apologies to _why References: http://ruby-metaprogramming.rubylearning.com/html/ruby_metaprogramming_2.html http://archive.oreilly.com/pub/post/what_is_a_dsl.html https://en.wikipedia.org/wiki/Smalltalk#Object-oriented_programming https://www.ruby-lang.org/en/about/ http://www.rubyfleebie.com/ruby-is-dynamically-and-strongly-typed/
  • #18: Reference: https://gist.github.com/matugm/db363c7131e6af27716c
  • #19: Apologies to _why For MRI this means everything is on the the heap Difference http://stackoverflow.com/questions/8643276/object-vs-primitive References: http://ruby-metaprogramming.rubylearning.com/html/ruby_metaprogramming_2.html http://archive.oreilly.com/pub/post/what_is_a_dsl.html https://en.wikipedia.org/wiki/Smalltalk#Object-oriented_programming https://www.ruby-lang.org/en/about/ http://www.rubyfleebie.com/ruby-is-dynamically-and-strongly-typed/
  • #20: Reference: https://gist.github.com/matugm/db363c7131e6af27716c
  • #21: Apologies to _why References: http://ruby-metaprogramming.rubylearning.com/html/ruby_metaprogramming_2.html http://archive.oreilly.com/pub/post/what_is_a_dsl.html https://en.wikipedia.org/wiki/Smalltalk#Object-oriented_programming https://www.ruby-lang.org/en/about/ http://www.rubyfleebie.com/ruby-is-dynamically-and-strongly-typed/
  • #22: This is a little unfair. The 2nd find implementation is unnecessary because AR does that. Also I’m introducing an entire repository to demonstrate how that pattern typically works in C# which isn’t really needed. Reference: https://gist.github.com/matugm/db363c7131e6af27716c
  • #23: Apologies to _why References: http://ruby-metaprogramming.rubylearning.com/html/ruby_metaprogramming_2.html http://archive.oreilly.com/pub/post/what_is_a_dsl.html https://en.wikipedia.org/wiki/Smalltalk#Object-oriented_programming https://www.ruby-lang.org/en/about/ http://www.rubyfleebie.com/ruby-is-dynamically-and-strongly-typed/
  • #24: Reference: https://gist.github.com/matugm/db363c7131e6af27716c
  • #25: Apologies to _why References: http://ruby-metaprogramming.rubylearning.com/html/ruby_metaprogramming_2.html http://archive.oreilly.com/pub/post/what_is_a_dsl.html https://en.wikipedia.org/wiki/Smalltalk#Object-oriented_programming https://www.ruby-lang.org/en/about/ http://www.rubyfleebie.com/ruby-is-dynamically-and-strongly-typed/