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
Ad

Recommended

Lets get started by Leif Gensert
Lets get started by Leif Gensert
Rails Girls MUC
 
Introduction to Ruby on Rails
Introduction to Ruby on Rails
Amit Patel
 
Do Languages Matter?
Do Languages Matter?
Bruce Eckel
 
Ruby for Beginner
Ruby for Beginner
Mi Ji Kim
 
Free community with deep roots
Free community with deep roots
Martijn Verburg
 
Intro To Ror
Intro To Ror
myuser
 
Ruby tutorial
Ruby tutorial
knoppix
 
Ruby on Rails 3
Ruby on Rails 3
Stefan Fodor
 
Twitter for Nontraditional Businesses
Twitter for Nontraditional Businesses
Rachel Ciprotti
 
Cloud storage services
Cloud storage services
Hiroki Kaneko
 
Blog
Blog
Venuus
 
Role of Public Art in Environmental movements
Role of Public Art in Environmental movements
Tanaya Lal
 
Customer orientation مشتری مداری
Customer orientation مشتری مداری
Salim Khalili
 
внешняя память
внешняя память
Shmonium
 
Iso10002 مدیریت شکایت و رضایت مشتری
Iso10002 مدیریت شکایت و رضایت مشتری
Salim Khalili
 
Down Syndrome
Down Syndrome
Epi1995
 
Connecting ti cc2541 with i os
Connecting ti cc2541 with i os
Hiroki Kaneko
 
The Republic کتاب جمهور افلاطون
The Republic کتاب جمهور افلاطون
Salim Khalili
 
Doing Business With Nestle
Doing Business With Nestle
Doug Rader
 
Archetypes شخصیت شناسی مفاهیم اولیه
Archetypes شخصیت شناسی مفاهیم اولیه
Salim Khalili
 
Presentation
Presentation
Cleber Mira
 
Business etiquette آداب معاشرت کسب و کار
Business etiquette آداب معاشرت کسب و کار
Salim Khalili
 
Body language زبان بدن
Body language زبان بدن
Salim Khalili
 
Internet, la messagerie - Office de Tourisme Val de Cher Saint-Aignan
Internet, la messagerie - Office de Tourisme Val de Cher Saint-Aignan
Office de Tourisme Val de Cher Controis
 
Le social commerce
Le social commerce
CYB@RDECHE
 
Ruby On Rails - Rochester K Linux User Group
Ruby On Rails - Rochester K Linux User Group
Jose de Leon
 
10 Things you should know about Ruby
10 Things you should know about Ruby
sikachu
 

More Related Content

Viewers also liked (20)

Twitter for Nontraditional Businesses
Twitter for Nontraditional Businesses
Rachel Ciprotti
 
Cloud storage services
Cloud storage services
Hiroki Kaneko
 
Blog
Blog
Venuus
 
Role of Public Art in Environmental movements
Role of Public Art in Environmental movements
Tanaya Lal
 
Customer orientation مشتری مداری
Customer orientation مشتری مداری
Salim Khalili
 
внешняя память
внешняя память
Shmonium
 
Iso10002 مدیریت شکایت و رضایت مشتری
Iso10002 مدیریت شکایت و رضایت مشتری
Salim Khalili
 
Down Syndrome
Down Syndrome
Epi1995
 
Connecting ti cc2541 with i os
Connecting ti cc2541 with i os
Hiroki Kaneko
 
The Republic کتاب جمهور افلاطون
The Republic کتاب جمهور افلاطون
Salim Khalili
 
Doing Business With Nestle
Doing Business With Nestle
Doug Rader
 
Archetypes شخصیت شناسی مفاهیم اولیه
Archetypes شخصیت شناسی مفاهیم اولیه
Salim Khalili
 
Presentation
Presentation
Cleber Mira
 
Business etiquette آداب معاشرت کسب و کار
Business etiquette آداب معاشرت کسب و کار
Salim Khalili
 
Body language زبان بدن
Body language زبان بدن
Salim Khalili
 
Internet, la messagerie - Office de Tourisme Val de Cher Saint-Aignan
Internet, la messagerie - Office de Tourisme Val de Cher Saint-Aignan
Office de Tourisme Val de Cher Controis
 
Le social commerce
Le social commerce
CYB@RDECHE
 
Twitter for Nontraditional Businesses
Twitter for Nontraditional Businesses
Rachel Ciprotti
 
Cloud storage services
Cloud storage services
Hiroki Kaneko
 
Role of Public Art in Environmental movements
Role of Public Art in Environmental movements
Tanaya Lal
 
Customer orientation مشتری مداری
Customer orientation مشتری مداری
Salim Khalili
 
внешняя память
внешняя память
Shmonium
 
Iso10002 مدیریت شکایت و رضایت مشتری
Iso10002 مدیریت شکایت و رضایت مشتری
Salim Khalili
 
Down Syndrome
Down Syndrome
Epi1995
 
Connecting ti cc2541 with i os
Connecting ti cc2541 with i os
Hiroki Kaneko
 
The Republic کتاب جمهور افلاطون
The Republic کتاب جمهور افلاطون
Salim Khalili
 
Doing Business With Nestle
Doing Business With Nestle
Doug Rader
 
Archetypes شخصیت شناسی مفاهیم اولیه
Archetypes شخصیت شناسی مفاهیم اولیه
Salim Khalili
 
Business etiquette آداب معاشرت کسب و کار
Business etiquette آداب معاشرت کسب و کار
Salim Khalili
 
Body language زبان بدن
Body language زبان بدن
Salim Khalili
 
Le social commerce
Le social commerce
CYB@RDECHE
 

Similar to Optimizing for programmer happiness (20)

Ruby On Rails - Rochester K Linux User Group
Ruby On Rails - Rochester K Linux User Group
Jose de Leon
 
10 Things you should know about Ruby
10 Things you should know about Ruby
sikachu
 
Adventures of java developer in ruby world
Adventures of java developer in ruby world
Orest Ivasiv
 
Ruby Rails Web Development.pdf
Ruby Rails Web Development.pdf
Ayesha Siddika
 
Introduction to Ruby on Rails
Introduction to Ruby on Rails
mithunsasidharan
 
Ruby on Rails Introduction M&P - IT Skill Development Program 07
Ruby on Rails Introduction M&P - IT Skill Development Program 07
Muhammad Sunny ✈
 
Ruby Past, Present, Future
Ruby Past, Present, Future
adamfine
 
Java, Ruby & Rails
Java, Ruby & Rails
Peter Lind
 
Ruby an overall approach
Ruby an overall approach
Felipe Schmitt
 
Ruby On Rails Presentation
Ruby On Rails Presentation
Paul Pajo
 
Building Modern Applications in Ruby: Fast, Efficient, Versatile, and Cost-Ef...
Building Modern Applications in Ruby: Fast, Efficient, Versatile, and Cost-Ef...
Marylene Sawyer
 
Bhavesh ro r
Bhavesh ro r
bhavesh-gloscon
 
Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010
arif44
 
Ruby On Rails
Ruby On Rails
iradarji
 
Is Ruby on Rails Object Oriented? A Comprehensive Exploration
Is Ruby on Rails Object Oriented? A Comprehensive Exploration
rorbitssoftware
 
Why Ruby?
Why Ruby?
IT Weekend
 
FGCU Camp Talk
FGCU Camp Talk
Mark Brooks
 
Ruby on Rails: a brief introduction
Ruby on Rails: a brief introduction
Luigi De Russis
 
From java-to-ruby-book-summary
From java-to-ruby-book-summary
120bi
 
Workin ontherailsroad
Workin ontherailsroad
Jim Jones
 
Ruby On Rails - Rochester K Linux User Group
Ruby On Rails - Rochester K Linux User Group
Jose de Leon
 
10 Things you should know about Ruby
10 Things you should know about Ruby
sikachu
 
Adventures of java developer in ruby world
Adventures of java developer in ruby world
Orest Ivasiv
 
Ruby Rails Web Development.pdf
Ruby Rails Web Development.pdf
Ayesha Siddika
 
Introduction to Ruby on Rails
Introduction to Ruby on Rails
mithunsasidharan
 
Ruby on Rails Introduction M&P - IT Skill Development Program 07
Ruby on Rails Introduction M&P - IT Skill Development Program 07
Muhammad Sunny ✈
 
Ruby Past, Present, Future
Ruby Past, Present, Future
adamfine
 
Java, Ruby & Rails
Java, Ruby & Rails
Peter Lind
 
Ruby an overall approach
Ruby an overall approach
Felipe Schmitt
 
Ruby On Rails Presentation
Ruby On Rails Presentation
Paul Pajo
 
Building Modern Applications in Ruby: Fast, Efficient, Versatile, and Cost-Ef...
Building Modern Applications in Ruby: Fast, Efficient, Versatile, and Cost-Ef...
Marylene Sawyer
 
Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010
arif44
 
Ruby On Rails
Ruby On Rails
iradarji
 
Is Ruby on Rails Object Oriented? A Comprehensive Exploration
Is Ruby on Rails Object Oriented? A Comprehensive Exploration
rorbitssoftware
 
Ruby on Rails: a brief introduction
Ruby on Rails: a brief introduction
Luigi De Russis
 
From java-to-ruby-book-summary
From java-to-ruby-book-summary
120bi
 
Workin ontherailsroad
Workin ontherailsroad
Jim Jones
 
Ad

Recently uploaded (20)

9-1-1 Addressing: End-to-End Automation Using FME
9-1-1 Addressing: End-to-End Automation Using FME
Safe Software
 
The Growing Value and Application of FME & GenAI
The Growing Value and Application of FME & GenAI
Safe Software
 
Mastering AI Workflows with FME by Mark Döring
Mastering AI Workflows with FME by Mark Döring
Safe Software
 
"Scaling in space and time with Temporal", Andriy Lupa.pdf
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC
 
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
caoyixuan2019
 
Security Tips for Enterprise Azure Solutions
Security Tips for Enterprise Azure Solutions
Michele Leroux Bustamante
 
Hyderabad MuleSoft In-Person Meetup (June 21, 2025) Slides
Hyderabad MuleSoft In-Person Meetup (June 21, 2025) Slides
Ravi Tamada
 
Curietech AI in action - Accelerate MuleSoft development
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Safe Software
 
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
You are not excused! How to avoid security blind spots on the way to production
You are not excused! How to avoid security blind spots on the way to production
Michele Leroux Bustamante
 
Quantum AI Discoveries: Fractal Patterns Consciousness and Cyclical Universes
Quantum AI Discoveries: Fractal Patterns Consciousness and Cyclical Universes
Saikat Basu
 
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
ReSTIR [DI]: Spatiotemporal reservoir resampling for real-time ray tracing ...
ReSTIR [DI]: Spatiotemporal reservoir resampling for real-time ray tracing ...
revolcs10
 
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Josef Weingand
 
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
Priyanka Aash
 
Quantum AI: Where Impossible Becomes Probable
Quantum AI: Where Impossible Becomes Probable
Saikat Basu
 
UserCon Belgium: Honey, VMware increased my bill
UserCon Belgium: Honey, VMware increased my bill
stijn40
 
Techniques for Automatic Device Identification and Network Assignment.pdf
Techniques for Automatic Device Identification and Network Assignment.pdf
Priyanka Aash
 
9-1-1 Addressing: End-to-End Automation Using FME
9-1-1 Addressing: End-to-End Automation Using FME
Safe Software
 
The Growing Value and Application of FME & GenAI
The Growing Value and Application of FME & GenAI
Safe Software
 
Mastering AI Workflows with FME by Mark Döring
Mastering AI Workflows with FME by Mark Döring
Safe Software
 
"Scaling in space and time with Temporal", Andriy Lupa.pdf
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC
 
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
Tech-ASan: Two-stage check for Address Sanitizer - Yixuan Cao.pdf
caoyixuan2019
 
Security Tips for Enterprise Azure Solutions
Security Tips for Enterprise Azure Solutions
Michele Leroux Bustamante
 
Hyderabad MuleSoft In-Person Meetup (June 21, 2025) Slides
Hyderabad MuleSoft In-Person Meetup (June 21, 2025) Slides
Ravi Tamada
 
Curietech AI in action - Accelerate MuleSoft development
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Safe Software
 
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
You are not excused! How to avoid security blind spots on the way to production
You are not excused! How to avoid security blind spots on the way to production
Michele Leroux Bustamante
 
Quantum AI Discoveries: Fractal Patterns Consciousness and Cyclical Universes
Quantum AI Discoveries: Fractal Patterns Consciousness and Cyclical Universes
Saikat Basu
 
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
ReSTIR [DI]: Spatiotemporal reservoir resampling for real-time ray tracing ...
ReSTIR [DI]: Spatiotemporal reservoir resampling for real-time ray tracing ...
revolcs10
 
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Wenn alles versagt - IBM Tape schützt, was zählt! Und besonders mit dem neust...
Josef Weingand
 
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
Priyanka Aash
 
Quantum AI: Where Impossible Becomes Probable
Quantum AI: Where Impossible Becomes Probable
Saikat Basu
 
UserCon Belgium: Honey, VMware increased my bill
UserCon Belgium: Honey, VMware increased my bill
stijn40
 
Techniques for Automatic Device Identification and Network Assignment.pdf
Techniques for Automatic Device Identification and Network Assignment.pdf
Priyanka Aash
 
Ad

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/