Slide 1

Slide 1 text

Програмиране с Ruby лекция 0 03 октомври 2012 Monday, October 8, 12

Slide 2

Slide 2 text

днес сме се събрали с една цел: Стефан Митьо Monday, October 8, 12

Slide 3

Slide 3 text

ще се опитам да ви убедя да отпишете курса Monday, October 8, 12

Slide 4

Slide 4 text

Страшен Monday, October 8, 12

Slide 5

Slide 5 text

Труден Monday, October 8, 12

Slide 6

Slide 6 text

Monday, October 8, 12

Slide 7

Slide 7 text

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 Monday, October 8, 12

Slide 8

Slide 8 text

“Трябва да има кръв и пот.” — @skanev Monday, October 8, 12

Slide 9

Slide 9 text

(имате ли Mac и iPhone/iPad/iPod?) Monday, October 8, 12

Slide 10

Slide 10 text

административни въпроси Monday, October 8, 12

Slide 11

Slide 11 text

3 Monday, October 8, 12

Slide 12

Slide 12 text

Monday, October 8, 12

Slide 13

Slide 13 text

Ден Час Зала Понеделник 19:00 229 Сряда 19:00 325 Кога? Monday, October 8, 12

Slide 14

Slide 14 text

http://fmi.ruby.bg/ Monday, October 8, 12

Slide 15

Slide 15 text

http://fmi.ruby.bg/ (регистрации: скоро) Monday, October 8, 12

Slide 16

Slide 16 text

@rbfmi Monday, October 8, 12

Slide 17

Slide 17 text

facebook.com/groups/437194362990982/ Група “Програмиране с Ruby” Monday, October 8, 12

Slide 18

Slide 18 text

Monday, October 8, 12

Slide 19

Slide 19 text

Четвъртата “лекция” от курса ще се проведе на “по бира”. Датата е 15 октомври. Мястото вероятно е RockIT. Monday, October 8, 12

Slide 20

Slide 20 text

оценяване Monday, October 8, 12

Slide 21

Slide 21 text

всичко се върти около точки Monday, October 8, 12

Slide 22

Slide 22 text

Max 6 5 4 3 Скалата Monday, October 8, 12

Slide 23

Slide 23 text

Задачи 60 Тестове 60 Проект 60 Задължителните Monday, October 8, 12

Slide 24

Slide 24 text

Задачите Monday, October 8, 12

Slide 25

Slide 25 text

Задачите • десет броя Monday, October 8, 12

Slide 26

Slide 26 text

Задачите • десет броя • предават се онлайн Monday, October 8, 12

Slide 27

Slide 27 text

Задачите • десет броя • предават се онлайн • проверяват се автоматично Monday, October 8, 12

Slide 28

Slide 28 text

Задачите • десет броя • предават се онлайн • проверяват се автоматично • 0-6 точки Monday, October 8, 12

Slide 29

Slide 29 text

Задачите • десет броя • предават се онлайн • проверяват се автоматично • 0-6 точки • могат да дават допълнителни точки Monday, October 8, 12

Slide 30

Slide 30 text

Задачите • десет броя • предават се онлайн • проверяват се автоматично • 0-6 точки • могат да дават допълнителни точки • имате право да пропуснете три Monday, October 8, 12

Slide 31

Slide 31 text

Задачите • десет броя • предават се онлайн • проверяват се автоматично • 0-6 точки • могат да дават допълнителни точки • имате право да пропуснете три • чуждите решения са публични Monday, October 8, 12

Slide 32

Slide 32 text

Тестове Monday, October 8, 12

Slide 33

Slide 33 text

Тестове • два броя Monday, October 8, 12

Slide 34

Slide 34 text

Тестове • два броя • 30 въпроса за един час Monday, October 8, 12

Slide 35

Slide 35 text

Тестове • два броя • 30 въпроса за един час • 30 точки всеки Monday, October 8, 12

Slide 36

Slide 36 text

Проекти Monday, October 8, 12

Slide 37

Slide 37 text

Проекти • на края на семестъра Monday, October 8, 12

Slide 38

Slide 38 text

Проекти • на края на семестъра • вие измисляте или ние избираме Monday, October 8, 12

Slide 39

Slide 39 text

Проекти • на края на семестъра • вие измисляте или ние избираме • 60 точки Monday, October 8, 12

Slide 40

Slide 40 text

Проекти • на края на семестъра • вие измисляте или ние избираме • 60 точки • 30 за стил, 30 за тестове Monday, October 8, 12

Slide 41

Slide 41 text

Проекти • на края на семестъра • вие измисляте или ние избираме • 60 точки • 30 за стил, 30 за тестове • да работят е задължително, но не достатъчно Monday, October 8, 12

Slide 42

Slide 42 text

има и други начини да изкарвате точки Monday, October 8, 12

Slide 43

Slide 43 text

Участие в час Monday, October 8, 12

Slide 44

Slide 44 text

Участие в час • някой знае ли защо държа Snickers? Monday, October 8, 12

Slide 45

Slide 45 text

Участие в час • някой знае ли защо държа Snickers? • обикновено на тях има код, който ви носи 1 точка Monday, October 8, 12

Slide 46

Slide 46 text

Участие в час • някой знае ли защо държа Snickers? • обикновено на тях има код, който ви носи 1 точка • насърчават да не спите в час Monday, October 8, 12

Slide 47

Slide 47 text

Участие в час • някой знае ли защо държа Snickers? • обикновено на тях има код, който ви носи 1 точка • насърчават да не спите в час • получивате ги за добро включване в час Monday, October 8, 12

Slide 48

Slide 48 text

Участие в час • някой знае ли защо държа Snickers? • обикновено на тях има код, който ви носи 1 точка • насърчават да не спите в час • получивате ги за добро включване в час • например: въпрос, отговор или коментар Monday, October 8, 12

Slide 49

Slide 49 text

Участие в час • някой знае ли защо държа Snickers? • обикновено на тях има код, който ви носи 1 точка • насърчават да не спите в час • получивате ги за добро включване в час • например: въпрос, отговор или коментар • ако прекалите с глупостите ще хванете захарна болест Monday, October 8, 12

Slide 50

Slide 50 text

Участие в сайта Monday, October 8, 12

Slide 51

Slide 51 text

Участие в сайта • добър пост във форумите Monday, October 8, 12

Slide 52

Slide 52 text

Участие в сайта • добър пост във форумите • добър коментар на чуждо решение Monday, October 8, 12

Slide 53

Slide 53 text

Помощ с материалите Monday, October 8, 12

Slide 54

Slide 54 text

Помощ с материалите • лекциите са OpenSource Monday, October 8, 12

Slide 55

Slide 55 text

Помощ с материалите • лекциите са OpenSource • оправяне на грешки Monday, October 8, 12

Slide 56

Slide 56 text

Помощ с материалите • лекциите са OpenSource • оправяне на грешки • примери от лекциите Monday, October 8, 12

Slide 57

Slide 57 text

Помощ с материалите • лекциите са OpenSource • оправяне на грешки • примери от лекциите • ваши допълнения Monday, October 8, 12

Slide 58

Slide 58 text

Challenges * под “мързи” имаме предвид “не можем” Monday, October 8, 12

Slide 59

Slide 59 text

Challenges • малка задачки относително често * под “мързи” имаме предвид “не можем” Monday, October 8, 12

Slide 60

Slide 60 text

Challenges • малка задачки относително често • малки: 4-10 реда код * под “мързи” имаме предвид “не можем” Monday, October 8, 12

Slide 61

Slide 61 text

Challenges • малка задачки относително често • малки: 4-10 реда код • често: 2-3 пъти в седмицата * под “мързи” имаме предвид “не можем” Monday, October 8, 12

Slide 62

Slide 62 text

Challenges • малка задачки относително често • малки: 4-10 реда код • често: 2-3 пъти в седмицата • имате 24 часа за всяка * под “мързи” имаме предвид “не можем” Monday, October 8, 12

Slide 63

Slide 63 text

Challenges • малка задачки относително често • малки: 4-10 реда код • често: 2-3 пъти в седмицата • имате 24 часа за всяка (понеже ни мързи* да измислим хубаво име) * под “мързи” имаме предвид “не можем” Monday, October 8, 12

Slide 64

Slide 64 text

Tip of the Day Monday, October 8, 12

Slide 65

Slide 65 text

Tip of the Day • кратки полезни Ruby съвети Monday, October 8, 12

Slide 66

Slide 66 text

Tip of the Day • кратки полезни Ruby съвети • няма да се всеки ден Monday, October 8, 12

Slide 67

Slide 67 text

Tip of the Day • кратки полезни Ruby съвети • няма да се всеки ден • обикновено ги публикуваме ние Monday, October 8, 12

Slide 68

Slide 68 text

Tip of the Day • кратки полезни Ruby съвети • няма да се всеки ден • обикновено ги публикуваме ние • може да изпращате и ваши Monday, October 8, 12

Slide 69

Slide 69 text

И други... Monday, October 8, 12

Slide 70

Slide 70 text

защо правим всичко това? Monday, October 8, 12

Slide 71

Slide 71 text

точките рефлектират участието ви в курса Monday, October 8, 12

Slide 72

Slide 72 text

Вие имате ли идеи? Monday, October 8, 12

Slide 73

Slide 73 text

въпроси? Monday, October 8, 12

Slide 74

Slide 74 text

before_filter :get_current_year def get_current_year @current_year = 2011 end Лош код Monday, October 8, 12

Slide 75

Slide 75 text

3-4 ноември Monday, October 8, 12

Slide 76

Slide 76 text

за какво ще говорим в курса? Monday, October 8, 12

Slide 77

Slide 77 text

Monday, October 8, 12

Slide 78

Slide 78 text

в дълбочина Monday, October 8, 12

Slide 79

Slide 79 text

в дълбочина няма да сме повърхностни Monday, October 8, 12

Slide 80

Slide 80 text

в дълбочина няма да сме повърхностни всички language feature-и Monday, October 8, 12

Slide 81

Slide 81 text

в дълбочина няма да сме повърхностни всички language feature-и идиоми Monday, October 8, 12

Slide 82

Slide 82 text

в дълбочина няма да сме повърхностни всички language feature-и идиоми екосистема Monday, October 8, 12

Slide 83

Slide 83 text

Добър код Monday, October 8, 12

Slide 84

Slide 84 text

Добър код Monday, October 8, 12

Slide 85

Slide 85 text

“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-а Monday, October 8, 12

Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

Monday, October 8, 12

Slide 88

Slide 88 text

принципи Monday, October 8, 12

Slide 89

Slide 89 text

SOLID Monday, October 8, 12

Slide 90

Slide 90 text

Single Responsibility Principle Open-Closed Principle Liskov Substitution Principle Interface Segregation Principle Dependency Inversion Principle Monday, October 8, 12

Slide 91

Slide 91 text

Law of Demeter Monday, October 8, 12

Slide 92

Slide 92 text

Single Level of Abstraction Principle (SLAP) Monday, October 8, 12

Slide 93

Slide 93 text

Expression Problem Monday, October 8, 12

Slide 94

Slide 94 text

Практики Monday, October 8, 12

Slide 95

Slide 95 text

Version Control Monday, October 8, 12

Slide 96

Slide 96 text

Refactoring Monday, October 8, 12

Slide 97

Slide 97 text

Test-Driven Development Monday, October 8, 12

Slide 98

Slide 98 text

Monday, October 8, 12

Slide 99

Slide 99 text

web framework Monday, October 8, 12

Slide 100

Slide 100 text

web framework най-популярното нещо в Ruby Monday, October 8, 12

Slide 101

Slide 101 text

web framework най-популярното нещо в Ruby ще говорим най-накрая (3-4 лекции) Monday, October 8, 12

Slide 102

Slide 102 text

web framework най-популярното нещо в Ruby ще говорим най-накрая (3-4 лекции) (ОК за проекти, но трябва да одобрим) Monday, October 8, 12

Slide 103

Slide 103 text

вместо това: ред малки библиотеки Monday, October 8, 12

Slide 104

Slide 104 text

Тежките ограничения максимум X реда код в метод максимум Х нива на влагане в метод максимум Х метода в клас Monday, October 8, 12

Slide 105

Slide 105 text

Тежките ограничения максимум 10 реда код в метод максимум 3 нива на влагане в метод максимум 7 метода в клас Monday, October 8, 12

Slide 106

Slide 106 text

Monday, October 8, 12

Slide 107

Slide 107 text

“Дялкам камъни” Monday, October 8, 12

Slide 108

Slide 108 text

“Храня жената и децата” Monday, October 8, 12

Slide 109

Slide 109 text

“Строя катедрали” Monday, October 8, 12

Slide 110

Slide 110 text

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

Slide 111

Slide 111 text

за Ruby Monday, October 8, 12

Slide 112

Slide 112 text

Yukihiro “Matz” Matsumoto Monday, October 8, 12

Slide 113

Slide 113 text

designed for programmer productivity and fun Monday, October 8, 12

Slide 114

Slide 114 text

Brevity Simplicity Balance “Treating Code as an Essay” Monday, October 8, 12

Slide 115

Slide 115 text

характеристики Monday, October 8, 12

Slide 116

Slide 116 text

динамичен Monday, October 8, 12

Slide 117

Slide 117 text

$ 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 интерпретира се Monday, October 8, 12

Slide 118

Slide 118 text

general purpose много web библиотеки Monday, October 8, 12

Slide 119

Slide 119 text

обектно-ориентиран с функционални елементи Monday, October 8, 12

Slide 120

Slide 120 text

вдъхновен от: Perl, Smalltalk, Python, Lisp Monday, October 8, 12

Slide 121

Slide 121 text

култура Monday, October 8, 12

Slide 122

Slide 122 text

open source! Monday, October 8, 12

Slide 123

Slide 123 text

$ gem install rails Monday, October 8, 12

Slide 124

Slide 124 text

44 982 библиотеки тази сутрин (миналата година бяха 29 245) Monday, October 8, 12

Slide 125

Slide 125 text

133 923 хранилища, 50 491 потребителя (миналата година бяха 133 923 хранилища, 50 491 потребителя) Monday, October 8, 12

Slide 126

Slide 126 text

community Monday, October 8, 12

Slide 127

Slide 127 text

Monday, October 8, 12

Slide 128

Slide 128 text

много блогове Monday, October 8, 12

Slide 129

Slide 129 text

много много много много много блогове Monday, October 8, 12

Slide 130

Slide 130 text

screencasts & podcasts Monday, October 8, 12

Slide 131

Slide 131 text

колорит Monday, October 8, 12

Slide 132

Slide 132 text

_why the lucky stiff Monday, October 8, 12

Slide 133

Slide 133 text

Monday, October 8, 12

Slide 134

Slide 134 text

elitism Monday, October 8, 12

Slide 135

Slide 135 text

David Heinemeir Hanson (автор на Rails) Monday, October 8, 12

Slide 136

Slide 136 text

David Heinemeir Hanson Monday, October 8, 12

Slide 137

Slide 137 text

през 2012: зрялост Monday, October 8, 12

Slide 138

Slide 138 text

иновация Monday, October 8, 12

Slide 139

Slide 139 text

nokogiri sequel rspec capybara sinatra lolcat Monday, October 8, 12

Slide 140

Slide 140 text

GitHub Monday, October 8, 12

Slide 141

Slide 141 text

кой ползва Ruby? Monday, October 8, 12

Slide 142

Slide 142 text

Twitter Monday, October 8, 12

Slide 143

Slide 143 text

GitHub Monday, October 8, 12

Slide 144

Slide 144 text

Shopify Monday, October 8, 12

Slide 145

Slide 145 text

SoundCloud Monday, October 8, 12

Slide 146

Slide 146 text

SongKick Monday, October 8, 12

Slide 147

Slide 147 text

Groupon Monday, October 8, 12

Slide 148

Slide 148 text

Urban Dictionary Monday, October 8, 12

Slide 149

Slide 149 text

версии и интерпретатори Monday, October 8, 12

Slide 150

Slide 150 text

1.8 vs 1.9 Monday, October 8, 12

Slide 151

Slide 151 text

ще ползваме само 1.9 Monday, October 8, 12

Slide 152

Slide 152 text

JRuby IronRuby Rubinius MacRuby Monday, October 8, 12

Slide 153

Slide 153 text

ресурси Monday, October 8, 12

Slide 154

Slide 154 text

why’s poignant guide to Ruby http://mislav.uniqpath.com/poignant-guide/ Monday, October 8, 12

Slide 155

Slide 155 text

Programming Ruby 1.9 Monday, October 8, 12

Slide 156

Slide 156 text

The Ruby Programming Language Monday, October 8, 12

Slide 157

Slide 157 text

Ruby Best Practices Monday, October 8, 12

Slide 158

Slide 158 text

Monday, October 8, 12

Slide 159

Slide 159 text

малко код Monday, October 8, 12

Slide 160

Slide 160 text

# 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/ Monday, October 8, 12

Slide 161

Slide 161 text

(1..9).select { |x| x.odd? }.map { |x| x ** 2 } Monday, October 8, 12

Slide 162

Slide 162 text

1.upto(10).inject { |a, b| a * b } Monday, October 8, 12

Slide 163

Slide 163 text

def factorial(n) 1.upto(n).inject { |a, b| a * b } end puts factorial(10) Monday, October 8, 12

Slide 164

Slide 164 text

class Integer def factorial 1.upto(self).inject { |a, b| a * b } end end puts 10.factorial Monday, October 8, 12

Slide 165

Slide 165 text

def prime?(n) 2.upto(n - 1).all? { |a| n.remainder(a).nonzero? } end puts prime?(13) puts prime?(42) Monday, October 8, 12

Slide 166

Slide 166 text

class Integer def prime? 2.upto(pred).all? { |a| remainder(a).nonzero? } end end puts 13.prime? puts 42.prime? Monday, October 8, 12

Slide 167

Slide 167 text

въпроси? Monday, October 8, 12