SlideShare a Scribd company logo
1 of 167
Download to read offline
Програмиране с Ruby
                              лекция 0




       03 октомври 2012
Monday, October 8, 12
Стефан               Митьо

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

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




Monday, October 8, 12
Страшен
Monday, October 8, 12
Труден
Monday, October 8, 12
Monday, October 8, 12
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
“Трябва да има кръв и пот.”
                                       — @skanev




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

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




Monday, October 8, 12
3
Monday, October 8, 12
Monday, October 8, 12
Кога?



                           Ден        Час    Зала

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

                          Сряда      19:00   325




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




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




Monday, October 8, 12
@rbfmi


Monday, October 8, 12
Група “Програмиране с Ruby”

                        facebook.com/groups/437194362990982/




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

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




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




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




Monday, October 8, 12
Скалата




                                            3
                                        4
                                   5
                              6
                        Max




Monday, October 8, 12
Задължителните



                        Проект
                          60          Задачи
                                        60



                            Тестове
                              60


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




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




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




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




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




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




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




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




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




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

                        • два броя




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

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




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

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




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




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

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




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

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




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

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




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

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




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

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




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




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




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

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




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

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




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

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




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

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




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

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




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

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




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




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


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




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


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




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




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


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




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


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




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


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




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


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




Monday, October 8, 12
Challenges




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


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




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


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




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


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




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


                        •   малка задачки относително често
                        •   малки: 4-10 реда код
                        •   често: 2-3 пъти в седмицата
                        •   имате 24 часа за всяка




                                                    * под “мързи” имаме предвид “не можем”
Monday, October 8, 12
Challenges
                                   (понеже ни мързи* да измислим хубаво име)




                        •   малка задачки относително често
                        •   малки: 4-10 реда код
                        •   често: 2-3 пъти в седмицата
                        •   имате 24 часа за всяка




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




Monday, October 8, 12
Tip of the Day


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




Monday, October 8, 12
Tip of the Day


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




Monday, October 8, 12
Tip of the Day


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




Monday, October 8, 12
Tip of the Day


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




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




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




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




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




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




Monday, October 8, 12
Лош код


                        before_filter :get_current_year

                        def get_current_year
                          @current_year = 2011
                        end




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




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




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




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




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




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


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




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




Monday, October 8, 12
“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
“Programs must be written
     for people to read, and only
     incidentally for machines to
     execute.”

         — H. Abelson and G. Sussman
Monday, October 8, 12
Monday, October 8, 12
принципи




Monday, October 8, 12
SOLID




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




Monday, October 8, 12
Law of Demeter




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




Monday, October 8, 12
Expression Problem




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




Monday, October 8, 12
Version Control




Monday, October 8, 12
Refactoring




Monday, October 8, 12
Test-Driven
                        Development




Monday, October 8, 12
Monday, October 8, 12
web framework




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




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




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




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




Monday, October 8, 12
Тежките ограничения



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




Monday, October 8, 12
Тежките ограничения



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




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




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




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




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



Monday, October 8, 12
за Ruby




Monday, October 8, 12
Yukihiro “Matz” Matsumoto

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




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




                                            Brevity
                                            Simplicity
                                            Balance




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




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




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


                    $ 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
general purpose
                        много web библиотеки




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




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




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




Monday, October 8, 12
open source!




Monday, October 8, 12
$ gem install rails




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




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




Monday, October 8, 12
community




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




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




Monday, October 8, 12
screencasts & podcasts




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




Monday, October 8, 12
_why the lucky stiff
Monday, October 8, 12
Monday, October 8, 12
elitism




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

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




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




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




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




Monday, October 8, 12
Twitter
Monday, October 8, 12
GitHub
Monday, October 8, 12
Shopify
Monday, October 8, 12
SoundCloud
Monday, October 8, 12
SongKick
Monday, October 8, 12
Groupon
Monday, October 8, 12
Urban Dictionary
Monday, October 8, 12
версии и интерпретатори




Monday, October 8, 12
1.8 vs 1.9




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




Monday, October 8, 12
JRuby
                        IronRuby
                        Rubinius
                        MacRuby




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




Monday, October 8, 12
why’s poignant guide to Ruby
                        http://mislav.uniqpath.com/poignant-guide/
Monday, October 8, 12
Programming Ruby 1.9
Monday, October 8, 12
The Ruby Programming Language
Monday, October 8, 12
Ruby Best Practices
Monday, October 8, 12
Monday, October 8, 12
малко код




Monday, October 8, 12
днес на http://ruby-lang.org/

                         # 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 }




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




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




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

              puts factorial(10)




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

           puts 10.factorial




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

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




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

    puts 13.prime?
    puts 42.prime?




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




Monday, October 8, 12

More Related Content

More from Stefan Kanev

Как блогът ми ме направи по-добър професионалист
Как блогът ми ме направи по-добър професионалистКак блогът ми ме направи по-добър професионалист
Как блогът ми ме направи по-добър професионалистStefan Kanev
 
Щастливият програмист 2.0
Щастливият програмист 2.0Щастливият програмист 2.0
Щастливият програмист 2.0Stefan Kanev
 
Пак ли този Rails?
Пак ли този Rails?Пак ли този Rails?
Пак ли този Rails?Stefan Kanev
 
The Happy Programmer
The Happy ProgrammerThe Happy Programmer
The Happy ProgrammerStefan Kanev
 
ФМИ Python: Agile & Friends
ФМИ Python: Agile & FriendsФМИ Python: Agile & Friends
ФМИ Python: Agile & FriendsStefan Kanev
 
Behavior-Driven Development с RSpec и Cucumber
Behavior-Driven Development с RSpec и CucumberBehavior-Driven Development с RSpec и Cucumber
Behavior-Driven Development с RSpec и CucumberStefan Kanev
 
Test-Driven Development + Refactoring
Test-Driven Development + RefactoringTest-Driven Development + Refactoring
Test-Driven Development + RefactoringStefan Kanev
 
Защо Ruby on Rails
Защо Ruby on RailsЗащо Ruby on Rails
Защо Ruby on RailsStefan Kanev
 
5. HTTP и приятели
5. HTTP и приятели5. HTTP и приятели
5. HTTP и приятелиStefan Kanev
 
4. Метапрограмиране
4. Метапрограмиране4. Метапрограмиране
4. МетапрограмиранеStefan Kanev
 
3. Обекти и класове
3. Обекти и класове3. Обекти и класове
3. Обекти и класовеStefan Kanev
 
2. Функционални Закачки
2. Функционални Закачки2. Функционални Закачки
2. Функционални ЗакачкиStefan Kanev
 
1. Въведение в Ruby
1. Въведение в Ruby1. Въведение в Ruby
1. Въведение в RubyStefan Kanev
 
0. За курса, Ruby и Rails
0. За курса, Ruby и Rails0. За курса, Ruby и Rails
0. За курса, Ruby и RailsStefan Kanev
 

More from Stefan Kanev (15)

Как блогът ми ме направи по-добър професионалист
Как блогът ми ме направи по-добър професионалистКак блогът ми ме направи по-добър професионалист
Как блогът ми ме направи по-добър професионалист
 
Щастливият програмист 2.0
Щастливият програмист 2.0Щастливият програмист 2.0
Щастливият програмист 2.0
 
Пак ли този Rails?
Пак ли този Rails?Пак ли този Rails?
Пак ли този Rails?
 
The Happy Programmer
The Happy ProgrammerThe Happy Programmer
The Happy Programmer
 
ФМИ Python: Agile & Friends
ФМИ Python: Agile & FriendsФМИ Python: Agile & Friends
ФМИ Python: Agile & Friends
 
Behavior-Driven Development с RSpec и Cucumber
Behavior-Driven Development с RSpec и CucumberBehavior-Driven Development с RSpec и Cucumber
Behavior-Driven Development с RSpec и Cucumber
 
Test-Driven Development + Refactoring
Test-Driven Development + RefactoringTest-Driven Development + Refactoring
Test-Driven Development + Refactoring
 
за Ruby
за Rubyза Ruby
за Ruby
 
Защо Ruby on Rails
Защо Ruby on RailsЗащо Ruby on Rails
Защо Ruby on Rails
 
5. HTTP и приятели
5. HTTP и приятели5. HTTP и приятели
5. HTTP и приятели
 
4. Метапрограмиране
4. Метапрограмиране4. Метапрограмиране
4. Метапрограмиране
 
3. Обекти и класове
3. Обекти и класове3. Обекти и класове
3. Обекти и класове
 
2. Функционални Закачки
2. Функционални Закачки2. Функционални Закачки
2. Функционални Закачки
 
1. Въведение в Ruby
1. Въведение в Ruby1. Въведение в Ruby
1. Въведение в Ruby
 
0. За курса, Ruby и Rails
0. За курса, Ruby и Rails0. За курса, Ruby и Rails
0. За курса, Ruby и Rails
 

Ruby 0 2012