Successfully reported this slideshow.
Your SlideShare is downloading. ×

A polyglot's view of Ruby on Rails – Leonid Shevtsov

Ad

A polyglot's view of
Ruby & Rails
или "Кому нужны рельсы в 2018?"
Leonid Shevtsov · Ruby Meditation · May 2018 · Dnipro

Ad

Привет!
Меня зовут Леня, и я не фанат Ruby

Ad

Привет!
Меня зовут Леня, и я не фанат Ruby
→ Десять лет назад я был им очарован

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Upcoming SlideShare
Ruby basics
Ruby basics
Loading in …3
×

Check these out next

1 of 70 Ad
1 of 70 Ad
Advertisement

More Related Content

More from Ruby Meditation (20)

Advertisement

A polyglot's view of Ruby on Rails – Leonid Shevtsov

  1. 1. A polyglot's view of Ruby & Rails или "Кому нужны рельсы в 2018?" Leonid Shevtsov · Ruby Meditation · May 2018 · Dnipro
  2. 2. Привет! Меня зовут Леня, и я не фанат Ruby
  3. 3. Привет! Меня зовут Леня, и я не фанат Ruby → Десять лет назад я был им очарован
  4. 4. Привет! Меня зовут Леня, и я не фанат Ruby → Десять лет назад я был им очарован → Лет шесть назад я его ненавидел
  5. 5. Привет! Меня зовут Леня, и я не фанат Ruby → Десять лет назад я был им очарован → Лет шесть назад я его ненавидел → Я долго искал ему замену
  6. 6. Я долго искал ему замену (это сейчас модно, да?)
  7. 7. Я долго искал ему замену (это сейчас модно, да?) → Scala
  8. 8. Я долго искал ему замену (это сейчас модно, да?) → Scala → Clojure
  9. 9. Я долго искал ему замену (это сейчас модно, да?) → Scala → Clojure → Elixir
  10. 10. Я долго искал ему замену (это сейчас модно, да?) → Scala → Clojure → Elixir → Golang
  11. 11. Я долго искал ему замену (это сейчас модно, да?) → Scala → Clojure → Elixir → Golang → F#
  12. 12. Я долго искал ему замену (это сейчас модно, да?) → Scala → Clojure → Elixir → Golang → F# → Node.js
  13. 13. Вообще, крайне полезно пробовать языки программирования, отличные от своего основного
  14. 14. Но к Ruby я вернулся Ruby · Golang · JavaScript
  15. 15. Но к Ruby я вернулся Ruby · Golang · JavaScript
  16. 16. Материальные свойства Ruby
  17. 17. Простота Минимум правил
  18. 18. Простота 1 # The famous Hello World # Program is trivial in # Ruby. Superfluous: # # * A "main" method # * Newline # * Semicolons # # Here is the Code: puts "Hello World!" 1  https://ruby-lang.org
  19. 19. Договоренности Код по понятиям
  20. 20. Договоренности validates_presence_of :name after_filter :send_email expect(results).to match_array(%w(foo bar))
  21. 21. Приятный, читабельный код Код для людей, не для компилятора
  22. 22. Приятный, читабельный код 2 5.times { print "Odelay!" } exit unless "restaurant".include? "aura" ['toast', 'cheese', 'wine'].each { |food| print food.capitalize } 2  http://poignant.guide/book/chapter-3.html
  23. 23. Истина в Runtime
  24. 24. Истина в Runtime class User < ApplicationRecord # поля???? end vs $> rails console > User.methods => [:id, :name, :email, ...]
  25. 25. Быстрая разработка Редактирование на лету
  26. 26. Быстрая разработка $> heroku run rails console # Copy + Paste > class User def buggy_method # fixed implementation goes here end end > User.where(buggy: true).each(&:buggy_method)
  27. 27. Свойства Ruby → Простота → Договоренности → Приятный, читабельный код → Истина в Runtime → Быстрая разработка
  28. 28. Ruby · Golang · JavaScript
  29. 29. Простота + Договоренности + Быстрая разработка = Проекты, в которых логика и особенно схема данных еще не выяснены.
  30. 30. Простота + Договоренности = Интеграционные тесты (для проектов на других языках)
  31. 31. Простота + Договоренности + Runtime = Язык конфигурации для систем
  32. 32. Читабельный код + Runtime = Скрипты
  33. 33. Ruby
  34. 34. Ruby Логика и схема данных известны
  35. 35. Ruby Ограниченный технический бюджет
  36. 36. Ruby Конкурентное программирование
  37. 37. Ruby, который я люблю
  38. 38. Ruby, который я люблю cвято следует рубокопу
  39. 39. Ruby, который я люблю cвято следует рубокопу Метрики: → длина строки → длина метода → длина модуля → сложность → число аргументов
  40. 40. Ruby, который я люблю состоит из небольших модулей
  41. 41. Ruby, который я люблю состоит из небольших модулей → но только не миксинов!
  42. 42. Ruby, который я люблю использует dependency injection
  43. 43. Ruby, который я люблю использует dependency injection → Паттерн "Functional with configuration"
  44. 44. Ruby, который я люблю не хранит состояние
  45. 45. Ruby, который я люблю не хранит состояние → особенно в Rails
  46. 46. Ruby, который я люблю покрыт простыми тестами
  47. 47. Ruby, который я люблю не злоупотребляет "паттернами"
  48. 48. Ruby, который я люблю не злоупотребляет метапрограммированием
  49. 49. Ruby, который я люблю изолирует мутирующий код
  50. 50. Ruby, который я люблю хорошо документирован
  51. 51. Ruby, который я люблю хорошо документирован → манкипатчинг → хаки → "...я бы обыкновенно написал XXX, но тут такое дело, что я лучше напишу YYY..." → напиши это комментарием!
  52. 52. Ruby, который я люблю → Свято следует рубокопу → Состоит из небольших модулей → Использует dependency injection → Не использует состояния → Простые (благодаря DI) тесты → Не злоупотребляет паттернами → Не злоупотребляет метапрограммированием → Мутирующий код изолирован и легко читабелен → Манкипатчинг четко задокументирован
  53. 53. Rails, которые я люблю
  54. 54. Rails, которые я люблю Минимум кода в моделях
  55. 55. Rails, которые я люблю Минимум кода в моделях → валидаторы → жизненный цикл → ассоциации → скоупы
  56. 56. Rails, которые я люблю Минимум кода в контроллерах
  57. 57. Rails, которые я люблю Минимум кода в контроллерах → проверка параметров → генереция вивода
  58. 58. Rails, которые я люблю Бизнес-логика в модулях
  59. 59. Rails, которые я люблю Бизнес-логика в модулях → Rails - это только Web → Рулите вашим app/*!
  60. 60. Rails, которые я люблю Доступ к базе из одного места
  61. 61. Rails, которые я люблю Доступ к базе из одного места class User < ApplicationRecord has_many :posts has_one :latest_post, class_name: 'Post', -> { order('created_at DESC') } end User.limit(10).includes(:latest_post)
  62. 62. Rails, которые я люблю Вьюха на React
  63. 63. Rails, которые я люблю Вьюха на React (то есть рельсовой вьюхи и нет) !
  64. 64. Rails, которые я люблю Тесты на RSpec
  65. 65. Rails, которые я люблю Тесты на RSpec → простые → особенно для бизнес-логики
  66. 66. Rails, которые я люблю Capybara+Chrome
  67. 67. Rails, которые я люблю Capybara+Chrome → самый "надежный" современный вариант → headless mode
  68. 68. Rails, которые я люблю → Минимум кода в моделях → Минимум кода в контроллерах → Доступ к базе из одного места → Бизнес-логика в модулях → Вьюха на React → Тесты на RSpec → Capybara+Chrome
  69. 69. Что бы я хотел в видеть в Ruby → Автоформатирование кода → Статическую типизацию
  70. 70. Спасибо! Вопросы? подписывайтесь на RSS: http://l-s.me пишите письма: leonid@shevtsov.me

×