Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
What to Upload to SlideShare
Next
Download to read offline and view in fullscreen.

0

Share

Download to read offline

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

Download to read offline

Ruby Meditation #22
May 19, 2018
Dnipro

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

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

Ruby Meditation #22 May 19, 2018 Dnipro

Views

Total views

279

On Slideshare

0

From embeds

0

Number of embeds

1

Actions

Downloads

0

Shares

0

Comments

0

Likes

0

×