$30 off During Our Annual Pro Sale. View Details »

Programming Ruby @ FMI

Programming Ruby @ FMI

Georgy Angelov

October 05, 2016
Tweet

More Decks by Georgy Angelov

Other Decks in Education

Transcript

  1. Програмиране с Ruby
    лекция 0
    05 октомври 2016

    View Slide

  2. Рекурентни
    Уравнения от
    Биномни
    Интеграли

    View Slide

  3. =
    ∭ $%&'
    ()*+,-./01
    ***
    23)
    lim
    7→9
    ∑ ∯


    7
    2'$ℵ

    View Slide

  4. puts "lol jk"

    View Slide

  5. Ние сме…

    View Slide

  6. Александър
    Георги
    Димитър
    Кирчо
    Марио
    Никола
    Радо
    Сава
    Стефан
    Христо
    Цецо
    И други…

    View Slide

  7. И нашата цел днес е...

    View Slide

  8. Да ви убедим да
    отпишете курса

    View Slide

  9. View Slide

  10. View Slide

  11. “Трябва да има кръв и пот.”
    — Стефан Кънев

    View Slide

  12. View Slide

  13. И същевременно…

    View Slide

  14. Engaging & Inclusive

    View Slide

  15. Ако сте тук защото:
    1. Имате нужда от кредити
    2. Искате лесна оценка
    3. Трябва ви бройка ИД от ЯКН

    View Slide

  16. Отпишете курса и
    освободете място

    View Slide

  17. Ако искате:
    1. Да развиете техническите си умения
    2. Да се срещнете с нови технологии
    3. Да повишите кръвната си захар

    View Slide

  18. Дошли сте на
    правилното място

    View Slide

  19. Две целеви групи:
    1. По-напреднали и по-“лакоми” за
    информация
    2. Студенти с минимални познания и опит

    View Slide

  20. Искаме да адресираме
    и двете групи

    View Slide

  21. Задавайте въпроси
    Не се отказвайте

    View Slide

  22. View Slide

  23. За първокурсниците
    • Курсът е обявен за втори курс и нагоре
    • Искаме минимални познания от УП и ООП
    • Отнема много време

    View Slide

  24. Има много "success stories",
    но трябва постоянство

    View Slide

  25. Конфуций казва:
    It does not matter how
    slowly you go as long as you
    do not stop.

    View Slide

  26. Административни
    въпроси

    View Slide

  27. Ден Час Зала
    Понеделник 19:00 200
    Сряда 19:00 200
    Кога?

    View Slide

  28. http://fmi.ruby.bg
    Регистрацията ще е отворена утре

    View Slide

  29. Свободен достъп

    View Slide

  30. Анкета на сайта
    След регистрация

    View Slide

  31. View Slide

  32. Група “Програмиране с Ruby”
    https://facebook.com/groups/programming.ruby/

    View Slide

  33. View Slide

  34. “Лекция” на “по бира”
    (подробности скоро)

    View Slide

  35. оценяване

    View Slide

  36. 0
    45
    90
    135
    180
    6
    5
    4
    3
    180
    150
    130
    110
    90
    Скалата
    6 5 4 3

    View Slide

  37. Задачи,
    60
    Тестове,
    60
    Проект,
    60
    Задължителните

    View Slide

  38. Задачите
    • десет броя
    • предават се онлайн
    • проверяват се автоматично
    • обикновено 0-6 точки
    • можем да даваме бонус точки
    • или да отнемаме такива
    • имате право да пропуснете три
    • чуждите решения са публични

    View Slide

  39. Тестове
    • два броя
    • 30 въпроса за един час
    • 30 точки на тест
    • много гнусни, но не са критични за оценката

    View Slide

  40. Проекти
    • на края на семестъра
    • обмисляме да направим предварителна ("малка")
    защита след Коледа
    • вие измисляте или ние избираме
    • 60 точки
    • 1/3 функционалност, 1/3 стил, 1/3 тестове
    • да работят е задължително, но не достатъчно

    View Slide

  41. Бонуси
    • Предизвикателства
    • Участие в час
    • Участие във форумите (помощ на другарчето)
    • Бонус точки за елегантни решения
    • Принос в GitHub
    • Изнасяне на кратка презентация по време на
    курса

    View Slide

  42. Участие в час
    • даваме лакомства за добри въпроси, отговори
    или коментари
    • обикновено на тях има код, който ви носи 1
    точка
    • насърчават да не спите в час
    • ако прекалите с глупостите ще хванете захарна
    болест

    View Slide

  43. Предизвикателства
    • малки задачки относително често
    • малки: 4-10 реда код
    • ще имате около 24 часа за всяко

    View Slide

  44. Тежките ограничения

    View Slide

  45. Тежките ограничения
    максимум X реда код в метод
    максимум Х нива на влагане в метод
    максимум Х метода в клас

    View Slide

  46. Тежките ограничения
    максимум 7 реда код в метод
    максимум 2 нива на влагане в метод
    максимум 10 метода в клас

    View Slide

  47. Строги
    конвенции и стил

    View Slide

  48. В края оценяваме усилия

    View Slide

  49. За какво ще говорим в курса?

    View Slide

  50. 1. Език за
    програмиране

    View Slide

  51. в дълбочина
    няма да сме повърхностни
    всички language feature-и
    идиоми
    екосистема

    View Slide

  52. 2. Принципи

    View Slide

  53. SOLID

    View Slide

  54. Single Responsibility Principle
    Open-Closed Principle
    Liskov Substitution Principle
    Interface Segregation Principle
    Dependency Inversion Principle

    View Slide

  55. Law of Demeter

    View Slide

  56. Single Level of Abstraction Principle
    (SLAP)

    View Slide

  57. Добър код

    View Slide

  58. Добър код

    View Slide

  59. “Programs must be written
    for people to read, and only
    incidentally for machines to
    execute.”
    — H. Abelson and G. Sussman

    View Slide

  60. Практики

    View Slide

  61. Refactoring

    View Slide

  62. Test-Driven
    Development

    View Slide

  63. web framework
    най-популярното нещо в Ruby
    няма да говорим за него
    (или поне най-много лекция-две)

    View Slide

  64. Ще ви научим на Ruby

    View Slide

  65. View Slide

  66. “Дялкам камъни”

    View Slide

  67. “Строя катедрали”

    View Slide

  68. В този курс ще се учим
    как се дялкат камъни, а не
    как се строят катедрали.

    View Slide

  69. за Ruby

    View Slide

  70. Yukihiro “Matz” Matsumoto

    View Slide

  71. designed for programmer
    productivity and fun

    View Slide

  72. характеристики

    View Slide

  73. динамичен

    View Slide

  74. $ cat hello.rb
    puts "Hello world!"
    forty_two = 6 * 9
    puts "The answer is #{forty_two}"
    $ ruby hello.rb
    Hello world!
    The answer to is 54
    интерпретира се

    View Slide

  75. general purpose
    много web библиотеки

    View Slide

  76. обектно-ориентиран
    с функционални елементи

    View Slide

  77. вдъхновен от:
    Perl, Smalltalk, Python, Lisp

    View Slide

  78. култура

    View Slide

  79. open source!

    View Slide

  80. $ gem install rails

    View Slide

  81. слайдът от миналата година
    6 милиарда сваляния

    View Slide

  82. близо 123 830 библиотеки днес
    10 милиарда сваляния

    View Slide

  83. 10 милиарда сваляния общо
    4 милиарда сваляния за последната година

    View Slide

  84. community

    View Slide

  85. View Slide

  86. много блогове

    View Slide

  87. много много много много много блогове

    View Slide

  88. screencasts & podcasts

    View Slide

  89. конференции

    View Slide

  90. Garden City RubyConf
    Ruby devroom at FOSDEM
    Ruby Conf Australia
    Rubyfuza
    Ruby on Ales
    Tropical Ruby
    MountainWest RubyConf
    Bath Ruby Conference
    wroc_love.rb
    RubyConfLT
    Ancient City Ruby
    RubyConf Philippines
    Ruby Conf India
    RailsConf
    RubyConf Portugal
    WindyCityRails
    RubyConf Brazil
    Rocky Mountain Ruby
    Conference
    ROSSConf Berlin
    ArrrrCamp
    ROSSConf Vienna
    RubyConf Kenya
    Ruby Conference Kiev
    RedDotRubyConf
    RubyNation
    Gotham Ruby Conference
    Brighton Ruby
    JRubyConf EU
    Burlington Ruby Conference
    eurucamp
    DeccanRubyConf
    Madison+ Ruby
    Ruby Midwest
    Barcelona Ruby Conf
    RubyConf Taiwan
    Los Angeles Ruby Conference
    RubyConf Colombia
    EuRuKo
    Keep Ruby Weird
    RubyWorld Conference
    RubyDay
    RubyConf
    RailsIsrael
    RubyKaigi

    View Slide

  91. EuRuKo Sofia
    23-24 септември 2016

    View Slide

  92. View Slide

  93. View Slide

  94. View Slide

  95. елитизъм

    View Slide

  96. David Heinemeir Hanson (DHH)
    автор на Rails

    View Slide

  97. David Heinemeir Hanson

    View Slide

  98. от 2011 - зрялост
    Този слайд е отпреди 5 години. :)

    View Slide

  99. #КОЙ ползва Ruby?

    View Slide

  100. Twitter

    View Slide

  101. GitHub

    View Slide

  102. Shopify

    View Slide

  103. SoundCloud

    View Slide

  104. GoodReads

    View Slide

  105. SongKick

    View Slide

  106. Groupon

    View Slide

  107. Urban Dictionary

    View Slide

  108. fmi.ruby.bg

    View Slide

  109. Новини на сайта
    (има RSS feed)

    View Slide

  110. Rails проекти – забранени

    View Slide

  111. Въпроси, диалог
    и обратна връзка

    View Slide

  112. версии и интерпретатори

    View Slide

  113. 1.8 vs 1.9 vs 2.0 vs 2.1 vs 2.2 vs 2.3

    View Slide

  114. ще ползваме само 2.3 и по-нови

    View Slide

  115. Текущата най-нова е 2.3.1

    View Slide

  116. MRI
    JRuby
    Rubinius
    IronRuby
    MacRuby
    + още много...

    View Slide

  117. ресурси

    View Slide

  118. Programming Ruby 1.9 and 2.0

    View Slide

  119. Metaprogramming Ruby 2

    View Slide

  120. малко код

    View Slide

  121. # Output "I love Ruby"
    say = "I love Ruby"
    puts say
    # Output "I *LOVE* RUBY"
    say['love'] = "*love*"
    puts say.upcase
    # Output "I *love* Ruby"
    # five times
    5.times { puts say }
    из http://ruby-lang.org/

    View Slide

  122. (1..9).select { |x| x.odd? }.map { |x| x ** 2 }
    (1..9).select(&:odd?).map { |x| x ** 2 }

    View Slide

  123. 1.upto(10).reduce { |a, b| a * b }

    View Slide

  124. def factorial(n)
    1.upto(n).reduce { |a, b| a * b }
    end
    puts factorial(10)

    View Slide

  125. class Integer
    def factorial
    1.upto(self).reduce { |a, b| a * b }
    end
    end
    puts 10.factorial

    View Slide

  126. def prime?(n)
    2.upto(n - 1).all? { |a| n.remainder(a).nonzero? }
    end
    puts prime?(13)
    puts prime?(42)

    View Slide

  127. class Integer
    def prime?
    2.upto(pred).all? { |a| remainder(a).nonzero? }
    end
    end
    puts 13.prime?
    puts 42.prime?

    View Slide

  128. Какво следва?

    View Slide

  129. Още днес
    • Регистрирайте се на сайта: http://fmi.ruby.bg/
    • Качете си профилна снимка
    • Попълнете анкетата
    • Инсталирайте си Ruby 2.3.1

    View Slide

  130. Въпроси?

    View Slide