SlideShare a Scribd company logo
Програмиране с 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

KEY
Debugging Habits
PPT
Informatiethema's: Internet
PPTX
RuboCop
PDF
Clojure: Return of the Jedi
PDF
Модерни езици за програмиране за JVM (2011)
PPTX
Deploying Solution Enhancements to Production
PDF
Ruby 0
PDF
Защо MongoDB?
Debugging Habits
Informatiethema's: Internet
RuboCop
Clojure: Return of the Jedi
Модерни езици за програмиране за JVM (2011)
Deploying Solution Enhancements to Production
Ruby 0
Защо MongoDB?

More from Stefan Kanev (15)

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

Ruby 0 2012