Ruby 2013 Lecture 0

Ruby 2013 Lecture 0

Уводна лекция за курса "Програмиране с Ruby", който се води във ФМИ към СУ през учебната 2013/14 г. http://fmi.ruby.bg/

Transcript

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

  2. Аксения Пенкова Александър Иванов Генади Самоковаров Димитър Димитров Ивайло Петров

    Петко Борджуков Пламен Стоев Сава Чанков Станка Енчева Стефан Кънев Христо Владев И други...
  3. И нашата цел днес е...

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

  5. None
  6. None
  7. None
  8. Kimo's high expectations set a new pace for me. He

    taught me “the standard pace is for chumps” - that the system is designed so anyone can keep up. If you're more driven than “just anyone” - you can do so much more than anyone expects. — http://sivers.org/kimo
  9. “Трябва да има кръв и пот.” — @skanev

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

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

  12. http://fmi.ruby.bg/

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

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

  15. @rbfmi

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

  17. fmi@ruby.bg

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

  20. оценяване

  21. 0 45 90 135 180 180 150 130 110 90

    6 5 4 3 Скалата
  22. Задачи 60 Тестове 60 Проект 60 Задължителните

  23. Задачите

  24. Задачите • десет броя

  25. Задачите • десет броя • предават се онлайн

  26. Задачите • десет броя • предават се онлайн • проверяват

    се автоматично
  27. Задачите • десет броя • предават се онлайн • проверяват

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

    се автоматично • обикновено 0-6 точки • могат да дават допълнителни точки
  29. Задачите • десет броя • предават се онлайн • проверяват

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

    се автоматично • обикновено 0-6 точки • могат да дават допълнителни точки • имате право да пропуснете три • чуждите решения са публични
  31. Тестове

  32. Тестове • два броя

  33. Тестове • два броя • 30 въпроса за един час

  34. Тестове • два броя • 30 въпроса за един час

    • 30 точки на тест
  35. Проекти

  36. Проекти • на края на семестъра

  37. Проекти • на края на семестъра • вие измисляте или

    ние избираме
  38. Проекти • на края на семестъра • вие измисляте или

    ние избираме • 60 точки
  39. Проекти • на края на семестъра • вие измисляте или

    ние избираме • 60 точки • 1/3 функционалност, 1/3 стил, 1/3 тестове
  40. Проекти • на края на семестъра • вие измисляте или

    ние избираме • 60 точки • 1/3 функционалност, 1/3 стил, 1/3 тестове • да работят е задължително, но не достатъчно
  41. Бонуси

  42. Бонуси • Предизвикателства

  43. Бонуси • Предизвикателства • Участие в час

  44. Бонуси • Предизвикателства • Участие в час • Участие във

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

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

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

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

  49. Участие в час • даваме Snickers за добри въпроси, отговори

    или коментари
  50. Участие в час • даваме Snickers за добри въпроси, отговори

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

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

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

  54. Предизвикателства • малка задачки относително често

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

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

    код • често: 2+ пъти в седмицата
  57. Предизвикателства • малка задачки относително често • малки: 4-10 реда

    код • често: 2+ пъти в седмицата • имате 24 часа за всяка
  58. Тежките ограничения максимум X реда код в метод максимум Х

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

    нива на влагане в метод максимум 10 метода в клас
  60. Строги конвенции и стил

  61. за какво ще говорим в курса?

  62. None
  63. в дълбочина

  64. в дълбочина няма да сме повърхностни

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

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

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

    екосистема
  68. Добър код

  69. Добър код

  70. “Besides a mathematical inclination, an exceptionally good mastery of one's

    native tongue is the most vital asset of a competent programmer.” — Edsger Dijkstra* * изобретател на blog post-а
  71. “Programs must be written for people to read, and only

    incidentally for machines to execute.” — H. Abelson and G. Sussman
  72. None
  73. Принципи

  74. SOLID

  75. Single Responsibility Principle Open-Closed Principle Liskov Substitution Principle Interface Segregation

    Principle Dependency Inversion Principle
  76. Law of Demeter

  77. Single Level of Abstraction Principle (SLAP)

  78. Практики

  79. Refactoring

  80. Test-Driven Development

  81. TDD + refactoring = чернова

  82. None
  83. web framework

  84. web framework най-популярното нещо в Ruby

  85. web framework най-популярното нещо в Ruby няма да говорим за

    него
  86. web framework най-популярното нещо в Ruby няма да говорим за

    него (или поне най-много лекция-две)
  87. вместо това: ред малки библиотеки

  88. None
  89. “Дялкам камъни”

  90. “Храня жената и децата”

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

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

    а не как се строят катедрали.
  93. за Ruby

  94. Yukihiro “Matz” Matsumoto

  95. designed for programmer productivity and fun

  96. Brevity Simplicity Balance “Treating Code as an Essay”

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

  98. динамичен

  99. $ 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 интерпретира се
  100. general purpose много web библиотеки

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

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

  103. култура

  104. open source!

  105. $ gem install rails

  106. 63 540 библиотеки днес

  107. community

  108. None
  109. много блогове

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

  111. screencasts & podcasts

  112. колорит

  113. _why the lucky stiff

  114. None
  115. elitism

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

  117. David Heinemeir Hanson

  118. през 2011: зрялост

  119. иновация

  120. GitHub

  121. кой ползва Ruby?

  122. Twitter

  123. GitHub

  124. Shopify

  125. SoundCloud

  126. SongKick

  127. Groupon

  128. Urban Dictionary

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

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

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

  132. Code Retreat

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

  134. 1.8 vs 1.9 vs 2.0 vs 2.1

  135. ще ползваме само 2.1

  136. все още не е пусната официално :)

  137. JRuby Rubinius IronRuby MacRuby + още 50-ина...

  138. ресурси

  139. why’s poignant guide to Ruby http://mislav.uniqpath.com/poignant-guide/

  140. Programming Ruby 1.9 and 2.0

  141. The Ruby Programming Language

  142. Ruby Best Practices

  143. малко код

  144. # 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/
  145. (1..9).select { |x| x.odd? }.map { |x| x ** 2

    }
  146. 1.upto(10).inject { |a, b| a * b }

  147. def factorial(n) 1.upto(n).inject { |a, b| a * b }

    end puts factorial(10)
  148. class Integer def factorial 1.upto(self).inject { |a, b| a *

    b } end end puts 10.factorial
  149. def prime?(n) 2.upto(n - 1).all? { |a| n.remainder(a).nonzero? } end

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

    end puts 13.prime? puts 42.prime?
  151. въпроси?