ruby 0 2012

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

Upload: stefan-kanev

Post on 04-Jun-2015

378 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Ruby 0 2012

Програмиране с Rubyлекция 0

03 октомври 2012

Monday, October 8, 12

Page 2: Ruby 0 2012

днес сме сесъбрали с една цел:

Стефан Митьо

Monday, October 8, 12

Page 3: Ruby 0 2012

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

Monday, October 8, 12

Page 4: Ruby 0 2012

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

Page 5: Ruby 0 2012

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

Page 6: Ruby 0 2012

Monday, October 8, 12

Page 7: Ruby 0 2012

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

Page 8: Ruby 0 2012

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

Monday, October 8, 12

Page 9: Ruby 0 2012

(имате ли Mac и iPhone/iPad/iPod?)

Monday, October 8, 12

Page 10: Ruby 0 2012

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

Monday, October 8, 12

Page 11: Ruby 0 2012

3Monday, October 8, 12

Page 12: Ruby 0 2012

Monday, October 8, 12

Page 13: Ruby 0 2012

Ден Час Зала

Понеделник 19:00 229

Сряда 19:00 325

Кога?

Monday, October 8, 12

Page 14: Ruby 0 2012

http://fmi.ruby.bg/

Monday, October 8, 12

Page 15: Ruby 0 2012

http://fmi.ruby.bg/(регистрации: скоро)

Monday, October 8, 12

Page 16: Ruby 0 2012

@rbfmi

Monday, October 8, 12

Page 17: Ruby 0 2012

facebook.com/groups/437194362990982/

Група “Програмиране с Ruby”

Monday, October 8, 12

Page 18: Ruby 0 2012

Monday, October 8, 12

Page 19: Ruby 0 2012

Четвъртата “лекция” от курсаще се проведе на “по бира”.

Датата е 15 октомври.Мястото вероятно е RockIT.

Monday, October 8, 12

Page 20: Ruby 0 2012

оценяване

Monday, October 8, 12

Page 21: Ruby 0 2012

всичко се върти околоточки

Monday, October 8, 12

Page 22: Ruby 0 2012

Max6

54

3

Скалата

Monday, October 8, 12

Page 23: Ruby 0 2012

Задачи60

Тестове60

Проект60

Задължителните

Monday, October 8, 12

Page 24: Ruby 0 2012

Задачите

Monday, October 8, 12

Page 25: Ruby 0 2012

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

Monday, October 8, 12

Page 26: Ruby 0 2012

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

Monday, October 8, 12

Page 27: Ruby 0 2012

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

Monday, October 8, 12

Page 28: Ruby 0 2012

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

Monday, October 8, 12

Page 29: Ruby 0 2012

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

• могат да дават допълнителни точки

Monday, October 8, 12

Page 30: Ruby 0 2012

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

• могат да дават допълнителни точки• имате право да пропуснете три

Monday, October 8, 12

Page 31: Ruby 0 2012

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

• могат да дават допълнителни точки• имате право да пропуснете три• чуждите решения са публични

Monday, October 8, 12

Page 32: Ruby 0 2012

Тестове

Monday, October 8, 12

Page 33: Ruby 0 2012

Тестове

• два броя

Monday, October 8, 12

Page 34: Ruby 0 2012

Тестове

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

Monday, October 8, 12

Page 35: Ruby 0 2012

Тестове

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

• 30 точки всеки

Monday, October 8, 12

Page 36: Ruby 0 2012

Проекти

Monday, October 8, 12

Page 37: Ruby 0 2012

Проекти

• на края на семестъра

Monday, October 8, 12

Page 38: Ruby 0 2012

Проекти

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

Monday, October 8, 12

Page 39: Ruby 0 2012

Проекти

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

Monday, October 8, 12

Page 40: Ruby 0 2012

Проекти

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

• 30 за стил, 30 за тестове

Monday, October 8, 12

Page 41: Ruby 0 2012

Проекти

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

• 30 за стил, 30 за тестове

• да работят е задължително, но не достатъчно

Monday, October 8, 12

Page 42: Ruby 0 2012

има и други начинида изкарвате точки

Monday, October 8, 12

Page 43: Ruby 0 2012

Участие в час

Monday, October 8, 12

Page 44: Ruby 0 2012

Участие в час

• някой знае ли защо държа Snickers?

Monday, October 8, 12

Page 45: Ruby 0 2012

Участие в час

• някой знае ли защо държа Snickers?

• обикновено на тях има код, който ви носи 1 точка

Monday, October 8, 12

Page 46: Ruby 0 2012

Участие в час

• някой знае ли защо държа Snickers?

• обикновено на тях има код, който ви носи 1 точка

• насърчават да не спите в час

Monday, October 8, 12

Page 47: Ruby 0 2012

Участие в час

• някой знае ли защо държа Snickers?

• обикновено на тях има код, който ви носи 1 точка

• насърчават да не спите в час• получивате ги за добро включване в час

Monday, October 8, 12

Page 48: Ruby 0 2012

Участие в час

• някой знае ли защо държа Snickers?

• обикновено на тях има код, който ви носи 1 точка

• насърчават да не спите в час• получивате ги за добро включване в час• например: въпрос, отговор или коментар

Monday, October 8, 12

Page 49: Ruby 0 2012

Участие в час

• някой знае ли защо държа Snickers?

• обикновено на тях има код, който ви носи 1 точка

• насърчават да не спите в час• получивате ги за добро включване в час• например: въпрос, отговор или коментар• ако прекалите с глупостите ще хванете захарна болест

Monday, October 8, 12

Page 50: Ruby 0 2012

Участие в сайта

Monday, October 8, 12

Page 51: Ruby 0 2012

Участие в сайта

• добър пост във форумите

Monday, October 8, 12

Page 52: Ruby 0 2012

Участие в сайта

• добър пост във форумите• добър коментар на чуждо решение

Monday, October 8, 12

Page 53: Ruby 0 2012

Помощ с материалите

Monday, October 8, 12

Page 54: Ruby 0 2012

Помощ с материалите

• лекциите са OpenSource

Monday, October 8, 12

Page 55: Ruby 0 2012

Помощ с материалите

• лекциите са OpenSource

• оправяне на грешки

Monday, October 8, 12

Page 56: Ruby 0 2012

Помощ с материалите

• лекциите са OpenSource

• оправяне на грешки• примери от лекциите

Monday, October 8, 12

Page 57: Ruby 0 2012

Помощ с материалите

• лекциите са OpenSource

• оправяне на грешки• примери от лекциите• ваши допълнения

Monday, October 8, 12

Page 58: Ruby 0 2012

Challenges

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

Page 59: Ruby 0 2012

Challenges

• малка задачки относително често

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

Page 60: Ruby 0 2012

Challenges

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

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

Page 61: Ruby 0 2012

Challenges

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

• често: 2-3 пъти в седмицата

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

Page 62: Ruby 0 2012

Challenges

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

• често: 2-3 пъти в седмицата

• имате 24 часа за всяка

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

Page 63: Ruby 0 2012

Challenges

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

• често: 2-3 пъти в седмицата

• имате 24 часа за всяка

(понеже ни мързи* да измислим хубаво име)

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

Page 64: Ruby 0 2012

Tip of the Day

Monday, October 8, 12

Page 65: Ruby 0 2012

Tip of the Day

• кратки полезни Ruby съвети

Monday, October 8, 12

Page 66: Ruby 0 2012

Tip of the Day

• кратки полезни Ruby съвети

• няма да се всеки ден

Monday, October 8, 12

Page 67: Ruby 0 2012

Tip of the Day

• кратки полезни Ruby съвети

• няма да се всеки ден• обикновено ги публикуваме ние

Monday, October 8, 12

Page 68: Ruby 0 2012

Tip of the Day

• кратки полезни Ruby съвети

• няма да се всеки ден• обикновено ги публикуваме ние• може да изпращате и ваши

Monday, October 8, 12

Page 69: Ruby 0 2012

И други...

Monday, October 8, 12

Page 70: Ruby 0 2012

защо правим всичкотова?

Monday, October 8, 12

Page 71: Ruby 0 2012

точките рефлектиратучастието ви в курса

Monday, October 8, 12

Page 72: Ruby 0 2012

Вие имате ли идеи?

Monday, October 8, 12

Page 73: Ruby 0 2012

въпроси?

Monday, October 8, 12

Page 74: Ruby 0 2012

before_filter :get_current_year

def get_current_year @current_year = 2011end

Лош код

Monday, October 8, 12

Page 75: Ruby 0 2012

3-4 ноември

Monday, October 8, 12

Page 76: Ruby 0 2012

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

Monday, October 8, 12

Page 77: Ruby 0 2012

Monday, October 8, 12

Page 78: Ruby 0 2012

в дълбочина

Monday, October 8, 12

Page 79: Ruby 0 2012

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

Monday, October 8, 12

Page 80: Ruby 0 2012

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

Monday, October 8, 12

Page 81: Ruby 0 2012

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

идиоми

Monday, October 8, 12

Page 82: Ruby 0 2012

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

идиомиекосистема

Monday, October 8, 12

Page 83: Ruby 0 2012

Добър код

Monday, October 8, 12

Page 84: Ruby 0 2012

Добър код

Monday, October 8, 12

Page 85: Ruby 0 2012

“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

Page 86: Ruby 0 2012

“Programs must be written for people to read, and only incidentally for machines to execute.”

— H. Abelson and G. SussmanMonday, October 8, 12

Page 87: Ruby 0 2012

Monday, October 8, 12

Page 88: Ruby 0 2012

принципи

Monday, October 8, 12

Page 89: Ruby 0 2012

SOLID

Monday, October 8, 12

Page 90: Ruby 0 2012

Single Responsibility PrincipleOpen-Closed PrincipleLiskov Substitution PrincipleInterface Segregation PrincipleDependency Inversion Principle

Monday, October 8, 12

Page 91: Ruby 0 2012

Law of Demeter

Monday, October 8, 12

Page 92: Ruby 0 2012

Single Level of Abstraction Principle(SLAP)

Monday, October 8, 12

Page 93: Ruby 0 2012

Expression Problem

Monday, October 8, 12

Page 94: Ruby 0 2012

Практики

Monday, October 8, 12

Page 95: Ruby 0 2012

Version Control

Monday, October 8, 12

Page 96: Ruby 0 2012

Refactoring

Monday, October 8, 12

Page 97: Ruby 0 2012

Test-DrivenDevelopment

Monday, October 8, 12

Page 98: Ruby 0 2012

Monday, October 8, 12

Page 99: Ruby 0 2012

web framework

Monday, October 8, 12

Page 100: Ruby 0 2012

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

Monday, October 8, 12

Page 101: Ruby 0 2012

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

Monday, October 8, 12

Page 102: Ruby 0 2012

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

Monday, October 8, 12

Page 103: Ruby 0 2012

вместо това:ред малки библиотеки

Monday, October 8, 12

Page 104: Ruby 0 2012

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

максимум X реда код в методмаксимум Х нива на влагане в методмаксимум Х метода в клас

Monday, October 8, 12

Page 105: Ruby 0 2012

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

максимум 10 реда код в методмаксимум 3 нива на влагане в методмаксимум 7 метода в клас

Monday, October 8, 12

Page 106: Ruby 0 2012

Monday, October 8, 12

Page 107: Ruby 0 2012

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

Monday, October 8, 12

Page 108: Ruby 0 2012

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

Monday, October 8, 12

Page 109: Ruby 0 2012

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

Monday, October 8, 12

Page 110: Ruby 0 2012

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

Monday, October 8, 12

Page 111: Ruby 0 2012

за Ruby

Monday, October 8, 12

Page 112: Ruby 0 2012

Yukihiro “Matz” Matsumoto

Monday, October 8, 12

Page 113: Ruby 0 2012

designed for programmerproductivity and fun

Monday, October 8, 12

Page 114: Ruby 0 2012

Brevity

Simplicity

Balance

“Treating Code as an Essay”

Monday, October 8, 12

Page 115: Ruby 0 2012

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

Monday, October 8, 12

Page 116: Ruby 0 2012

динамичен

Monday, October 8, 12

Page 117: Ruby 0 2012

$ cat hello.rbputs "Hello world!"forty_two = 6 * 9puts "The answer is #{forty_two}"

$ ruby hello.rbHello world!The answer to is 54

интерпретира се

Monday, October 8, 12

Page 118: Ruby 0 2012

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

Monday, October 8, 12

Page 119: Ruby 0 2012

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

Monday, October 8, 12

Page 120: Ruby 0 2012

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

Monday, October 8, 12

Page 121: Ruby 0 2012

култура

Monday, October 8, 12

Page 122: Ruby 0 2012

open source!

Monday, October 8, 12

Page 123: Ruby 0 2012

$ gem install rails

Monday, October 8, 12

Page 124: Ruby 0 2012

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

Monday, October 8, 12

Page 125: Ruby 0 2012

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

Monday, October 8, 12

Page 126: Ruby 0 2012

community

Monday, October 8, 12

Page 127: Ruby 0 2012

Monday, October 8, 12

Page 128: Ruby 0 2012

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

Monday, October 8, 12

Page 129: Ruby 0 2012

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

Monday, October 8, 12

Page 130: Ruby 0 2012

screencasts & podcasts

Monday, October 8, 12

Page 131: Ruby 0 2012

колорит

Monday, October 8, 12

Page 132: Ruby 0 2012

_why the lucky stiffMonday, October 8, 12

Page 133: Ruby 0 2012

Monday, October 8, 12

Page 134: Ruby 0 2012

elitism

Monday, October 8, 12

Page 135: Ruby 0 2012

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

Monday, October 8, 12

Page 136: Ruby 0 2012

David Heinemeir Hanson

Monday, October 8, 12

Page 137: Ruby 0 2012

през 2012:зрялост

Monday, October 8, 12

Page 138: Ruby 0 2012

иновация

Monday, October 8, 12

Page 139: Ruby 0 2012

nokogirisequelrspec

capybarasinatralolcat

Monday, October 8, 12

Page 140: Ruby 0 2012

GitHubMonday, October 8, 12

Page 141: Ruby 0 2012

кой ползва Ruby?

Monday, October 8, 12

Page 142: Ruby 0 2012

TwitterMonday, October 8, 12

Page 143: Ruby 0 2012

GitHubMonday, October 8, 12

Page 144: Ruby 0 2012

ShopifyMonday, October 8, 12

Page 145: Ruby 0 2012

SoundCloudMonday, October 8, 12

Page 146: Ruby 0 2012

SongKickMonday, October 8, 12

Page 147: Ruby 0 2012

GrouponMonday, October 8, 12

Page 148: Ruby 0 2012

Urban DictionaryMonday, October 8, 12

Page 149: Ruby 0 2012

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

Monday, October 8, 12

Page 150: Ruby 0 2012

1.8 vs 1.9

Monday, October 8, 12

Page 151: Ruby 0 2012

ще ползваме само 1.9

Monday, October 8, 12

Page 152: Ruby 0 2012

JRubyIronRubyRubiniusMacRuby

Monday, October 8, 12

Page 153: Ruby 0 2012

ресурси

Monday, October 8, 12

Page 154: Ruby 0 2012

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

Monday, October 8, 12

Page 155: Ruby 0 2012

Programming Ruby 1.9

Monday, October 8, 12

Page 156: Ruby 0 2012

The Ruby Programming Language

Monday, October 8, 12

Page 157: Ruby 0 2012

Ruby Best Practices

Monday, October 8, 12

Page 158: Ruby 0 2012

Monday, October 8, 12

Page 159: Ruby 0 2012

малко код

Monday, October 8, 12

Page 160: Ruby 0 2012

# 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 times5.times { puts say }

днес на http://ruby-lang.org/

Monday, October 8, 12

Page 161: Ruby 0 2012

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

Monday, October 8, 12

Page 162: Ruby 0 2012

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

Monday, October 8, 12

Page 163: Ruby 0 2012

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

puts factorial(10)

Monday, October 8, 12

Page 164: Ruby 0 2012

class Integer def factorial 1.upto(self).inject { |a, b| a * b } endend

puts 10.factorial

Monday, October 8, 12

Page 165: Ruby 0 2012

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

puts prime?(13)puts prime?(42)

Monday, October 8, 12

Page 166: Ruby 0 2012

class Integer def prime? 2.upto(pred).all? { |a| remainder(a).nonzero? } endend

puts 13.prime?puts 42.prime?

Monday, October 8, 12

Page 167: Ruby 0 2012

въпроси?

Monday, October 8, 12