Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Road to Ruby Mastery (RailsClub Moscow 2017)
Search
Bozhidar Batsov
September 23, 2017
Programming
1.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Road to Ruby Mastery (RailsClub Moscow 2017)
Slide-deck from my presentation at RailsClub Moscow 2017.
Bozhidar Batsov
September 23, 2017
More Decks by Bozhidar Batsov
See All by Bozhidar Batsov
RuboCop 2.0: Where do we go now?
bbatsov
0
84
Clojure: The Bad Parts
bbatsov
0
120
Weird Ruby (RubyDay 2024, Verona)
bbatsov
0
190
Sustainable OSS (Balkan Ruby 2024, Sofia)
bbatsov
0
210
Ruby's Creed (RubyDay 2023, Verona)
bbatsov
0
79
Victims of Complexity
bbatsov
0
350
Ruby 3.0 Redux (Spark Academy, Jan 2021)
bbatsov
1
290
Ruby 3.0 Redux (Pivorak 4.0)
bbatsov
0
520
The Elements of Programming Style (HackConf 2019)
bbatsov
0
230
Other Decks in Programming
See All in Programming
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
270
高専キャリア LT 発表内容
crysta1221
6
5.6k
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
600
PyO3 で既存 Python 評価器を Rust core 化する ー wasm-bindgen でブラウザにも配るための設計
kdash
1
560
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
680
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
410
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
360
業務時間外もAIに働いてもらう話
colorful12
3
10k
Featured
See All Featured
Deep Space Network (abreviated)
tonyrice
0
290
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
710
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.7k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
410
How GitHub (no longer) Works
holman
316
150k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
510
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
GitHub's CSS Performance
jonrohan
1033
470k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.7k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
870
Transcript
None
Божидар
I’m back
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
Большое спасибо!
Большое спасибо!
Sofia, Bulgaria
Sofia, Bulgaria
None
I’m an Emacs fanatic
bbatsov
None
None
They call me Master…
… and I’m a Rubyist
I must be The Master Rubyist!
None
This guy is so deep and profound!
The Road to Ruby Mastery by Bozhidar Batsov
Master
having or showing very great skill or proficiency
None
Novice
a person new to and inexperienced in a job or
situation
None
Journeyman
a worker, performer, or athlete who is experienced and good
but not excellent
None
Dreyfus Model of Skill Acquisition
Novice Advanced Beginner Competent Proficient Expert
The Road to Mastery
None
not really
try 10 years
http://norvig.com/21- days.html Teach Yourself Programming in Ten Years Peter Norvig
Apprenticeship
Novice Journeyman Master Apprenticeship Apprenticeship
learning from others
directly
indirectly
Computer Science Fundamentals
None
None
None
None
None
None
None
None
None
None
None
Object-oriented programming
None
Ruby is a purely object- oriented language
None
None
Know Thy Language!
Crazy People
None
Ruby is a VERY COMPLEX language!
class instance variable
protected
module_function vs extend self
refinements
super vs super()
== === equal? eql?
None
None
Grokking the language
Understanding and appreciating its philosophy
Coming to grips with reality
(no language is perfect)
(not even Clojure)
(some languages really suck)
Master the idioms
for i in 1..3 puts "Hello, Moscow!” end
3.times do puts "Hello, Moscow!” end
if some_condition then # body omitted end
def some_method # ... return result end
None
None
None
Read some (good) code
some == A LOT
None
Obtain a notion of style
None
None
Ruby Style Guide
None
Tackle problems with style
None
puts debugging sucks
bla bla bla puts ‘********’ puts x puts ‘********’
None
pro “puts” debugging techniques
object = Object.new puts object.method(:blank?).source_location # => ["/gems/activesupport-5.0.0.beta1/ lib/active_support/core_ext/object/ blank.rb",
14]
class Bar def foo puts "=====================" puts caller end end
def foo puts method(:foo).super_method.source_location super end
def parse(input, skip_code_comments: false, ignore_whitespace: true) # do stuff end
method(:parse).parameters #=> [[:req, :input], [:key, :skip_code_comments], [:key, :ignore_whitespace]]
config.thing = { "foo" => "bar" } config.thing.freeze = {
"foo" => "bar" } config.thing.delete("foo") # active_support/concurrency/share_lock.rb:151:in `delete': can't modify frozen Hash (RuntimeError) # from active_support/concurrency/share_lock.rb:151:in `yield_shares' # from active_support/concurrency/share_lock.rb:79:in `block in stop_exclusive'
Ruby Debugging Magic Cheat Sheet http://www.schneems.com/2016/01/25/ruby-debugging-magic-cheat- sheet.html
I am a puts debugger https://tenderlovemaking.com/2016/02/05/i-am-a-puts-debuggerer.html
I am not a puts debugger!
byebug https://github.com/deivid-rodriguez/byebug
pry-byebug https://github.com/deivid-rodriguez/pry-byebug
Profiling stuff
ruby-prof https://github.com/ruby-prof/ruby-prof
memory_profiler https://github.com/SamSaffron/memory_profiler
None
Beyond Rails
Opal
RubyMotion
System administration
JRuby
Alternative web frameworks
Hanami
Padrino
Sinatra
Roda
Keep in sync
RubyWeekly
Ruby5
RubyRogues
RubyTapas
GoRails
RailsClub
RubyConf
RailsConf
Always be exploring!
Clojure
Haskell
Elm
Erlang/Elixir
Racket
Ideas from other programming languages make us better programmers
One more thing…
Ruby is simply not a good fit for every possible
problem
None
None
ФЕЛИНА
Епилог twitter: @bbatsov github: @bbatsov http//batsov.com http://emacsredux.com RailsClub Moscow, Russia
23.09.2017