Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Програмиране с Ruby 2015, лекция 0 (с бележки)

Програмиране с Ruby 2015, лекция 0 (с бележки)

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

More Decks by Programming Ruby @ fmi.uni-sofia.bg

Other Decks in Programming

Transcript

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

    View full-size slide

  2. Александър И.
    Александър И.
    Георги А.
    Георги Г.
    Георги Д.
    Марио
    Митьо
    Никола
    Станислав
    Стефан
    Христо
    И други...

    View full-size slide

  3. И нашата цел днес е...

    View full-size slide

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

    View full-size slide

  5. “Трябва да има кръв и пот.”
    — Стефан Кънев

    View full-size slide

  6. И същевременно…

    View full-size slide

  7. Engaging & Inclusive

    View full-size slide

  8. 1. Имате нужда от кредити
    2. Искате лесна/висока оценка за
    повишаване на средния бал
    3. Трябва ви бройка ИД от ЯКН
    Ако сте тук защото:

    View full-size slide

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

    View full-size slide

  10. 1. Да развиете техническите си
    умения
    2. Да се срещнете с нови технологии
    3. Да развиете нетехническите си
    (комуникационни) умения
    4. Да повишите кръвната си захар
    Ако искате:

    View full-size slide

  11. Дошли сте на
    правилното място

    View full-size slide

  12. Две целеви групи:
    1. По-напреднали и по-“лакоми” за
    информация
    2. Студенти с минимални познания, опит
    и понякога – демотивирани
    Нашите наблюдения от предишни
    курсове са, че има основно два типа
    студенти:
    1. Силно мотивирани, с повече опит
    и теоретични познания, готови да
    отделят много време на курса и
    които напредват с много бързи
    темпове.
    2. Студенти на ръба на
    демотивацията,с минимални
    познания и минимален или
    никакъв опит.

    View full-size slide

  13. Втората група обикновено е жертва на
    проблеми както в образователната
    система като цяло, така и във ФМИ в
    частност.

    View full-size slide

  14. Искаме да
    адресираме и
    двете групи

    View full-size slide

  15. Няма да стане без
    вашата помощ

    View full-size slide

  16. 1. Задавай въпроси
    2. Не се отказвай
    Ако чувствате, че има нещо, което
    не сте осмислили добре – не се
    отказвайте лесно. Задайте въпрос.
    Няма нищо срамно в това.
    Няма нито един от нас, в тази зала,
    който да е с неограничена
    компетентност. Всеки се е борил с
    определен клас проблеми и е
    опитен в едни неща, но не толкова в
    други неща.
    И ключът в това да не спрем

    View full-size slide

  17. развитието си, е да си признаем – пред
    себе си и пред другите – когато не
    разбираме или не знаем нещо. И да се
    опитаме да разберем.
    Умението да програмираш, без
    значение от език или платформа, е
    невероятно оръжие. Сега, в този
    университет, имате златен шанс да се
    въоръжите. Не го пропускайте. Не се
    отказвайте. Ще помагаме :)

    View full-size slide

  18. Ако има въпрос, по който се
    чувствате по-компетентни и видите
    възможност за помощ – включете
    се. Така помагате не само на свой
    колега, но и на себе си. Не мога да
    изброя всички примери, в които съм
    осмислил или задълбочил
    познанията си за дадена концепция,
    опитвайки се да я обясня на друг.
    Също така, ще си помогнете за
    оценката :)
    Програмистката общност винаги ми

    View full-size slide

  19. е харесвала със своята готовност да
    приема начинаещи и да споделя
    знание. Винаги сме готови да
    разказваме разпалено за технология,
    език, принцип… И това е чудесно. Така
    се развиваме, защото притокът на
    свежи хора и идеи поставя на
    изпитание някои закостенели виждания
    и ни кара да се движим напред.

    View full-size slide

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

    View full-size slide

  21. Сбирките ни са само лекции, няма
    семинари.
    Ден Час Зала
    Понеделник 19:00 200
    Сряда 19:00 200
    Кога?

    View full-size slide

  22. http://fmi.ruby.bg
    Регистрацията е
    отворена.
    Имаме сайт. Това е основното
    място, където ще се случват нещата
    в курса – там ще качваме
    материали, ще пускаме новини, ще
    предавате домашни, ще
    дискутираме проблеми. Това ще е
    вашият нов дом във следващите
    четири месеца. Когато напишете “f”
    в лентата за URL на браузъра,
    трябва първото предложение да ви
    бъде fmi.ruby.bg, а не facebook.com.
    Затова, трябва да се регистрирате

    View full-size slide

  23. максимално скоро. За целта ще имате
    нужда от три имена на кирилица и
    факултетен номер.

    View full-size slide

  24. Записване с
    молба
    Става, но трябва да ни пишете,
    ако ви няма в СУСИ –
    три имена и факултетен номер
    [email protected]
    В СУСИ има лимит от 100 човека.
    Обикновено го достигаме и много
    хора записват курса с молба. Това е
    напълно окей с нас. Няма проблем
    да ви я подпишем, така или иначе е
    само формалност.
    За да се регистрирате в сайта в този
    случай, ще има нужда да ни
    изпратите на [email protected] три имена
    и факултетен номер.

    View full-size slide

  25. Свободен
    достъп
    Ако не сте студент във ФМИ, или ако
    не сте студент изобщо – няма
    проблем да идвате на курса. Ще се
    отнасяме към вас както към другите
    студенти. Ще ви направим и
    регистрация в сайта.
    Изпратете ни три имена на
    [email protected] и ще ви върнем
    фиктивен факултетен номер, с който
    да се регистрирате.

    View full-size slide

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

    View full-size slide

  27. Група “Програмиране с Ruby”
    https://facebook.com/groups/programming.ruby/
    Много удобна за организация на
    различни извънкласни занимания,
    за които ще споменем ей сега.

    View full-size slide

  28. @rbfmi
    Не е особено активен в момента, но
    може и да ни хрумне да го
    посъбудим. Съветваме да го
    следите.

    View full-size slide

  29. Много е важно да разчупим леда и
    да изградим малка общност. Така
    най-ефективно ще споделяме
    знания и опит.

    View full-size slide

  30. “Лекция” на “по бира”
    (подробности скоро)
    Най-вероятно ще е сряда, 21
    октомври. Ще я обявим като новина
    в сайта и ще направим събитие във
    фейсбук. Ще ни е важно да знаем
    колко от вас ще идват, за да
    изберем подходящо място, така че
    преценете рано.

    View full-size slide

  31. оценяване

    View full-size slide

  32. Скалата

    View full-size slide

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

    View full-size slide

  34. ● десет броя
    ● предават се онлайн
    ● проверяват се автоматично
    ● обикновено 0-6 точки
    ● могат да дават допълнителни точки
    ● има и наказателни точки
    ● имате право да пропуснете три
    ● чуждите решения са публични
    Задачите

    View full-size slide

  35. Тестовете
    ● два броя
    ● 30 въпроса за един час
    ● 30 точки на тест
    ● много гнусни, но не са критични за оценката

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  39. ● малки задачки относително често
    ● малки: 4-10 реда код
    ● често: до 1-2 пъти в седмицата
    ● ще имате около 24 часа за всяко
    Предизвикателства

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  42. спазване на конвенциите на езика
    само валидни английски думи за именуване
    и други...
    Тежките
    ограничения

    View full-size slide

  43. Строги
    конвенции и стил

    View full-size slide

  44. В края оценяваме
    усилия
    Точковата система ни помага да се
    ориентираме, но малки вариации
    там не са фатални. Това, което е
    най-важно за нас, е вашето желание
    да се развивате и усилията, които
    ще положите. Това е, което ще е
    ключово за оценката.
    Ако записвате курса само за оценка
    и кредити – по-добре го отпишете
    сега и направете места за хората,
    които имат желанието да
    инвестират време в развитието си.

    View full-size slide

  45. За какво ще говорим в
    курса?

    View full-size slide

  46. 1. Език за
    програмиране
    Очевидно, ще говорим за езика за
    програмиране Ruby и екосистемата
    около него.

    View full-size slide

  47. 2. Принципи
    Но ще говорим много и за принципи.
    Смятаме, че принципните неща, до
    които сме достигнали като изводи от
    опита си, са от основополагащо
    значение.
    Дори може да се каже, че езикът,
    който ще изучаваме, е по-скоро
    платформа, с чиято помощ ще се
    опитаме да ви предадем
    принципните неща, които не са
    пряко свързани с една конкретна
    технология.

    View full-size slide

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

    View full-size slide

  49. Добър код

    View full-size slide

  50. Добър код

    View full-size slide

  51. “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-а

    View full-size slide

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

    View full-size slide

  53. Принципи

    View full-size slide

  54. https://en.wikipedia.org/wiki/SOLID_
    (object-oriented_design)
    Single Responsibility Principle
    Open-Closed Principle
    Liskov Substitution Principle
    Interface Segregation Principle
    Dependency Inversion Principle

    View full-size slide

  55. Law of Demeter

    View full-size slide

  56. Single Level of Abstraction Principle
    (SLAP)

    View full-size slide

  57. Практики

    View full-size slide

  58. Test-Driven
    Development

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  64. Yukihiro “Matz” Matsumoto

    View full-size slide

  65. designed for
    programmer
    productivity and fun
    Въпреки, че не е толкова популярен
    колкото Java, C++, Python, C# - е
    съвсем зрял инструмент, с който
    спокойно и прилично може да си
    изкарвате прехраната. Има търсене
    и недостиг на качествени Ruby
    кадри, както у нас, така и на
    международния пазар.
    Накратко – Ruby не е език-играчка.
    Ruby е като Tesla Model S. Може би
    не е с най-бързите параметри, но не
    е и никак бавен. Едно превозно

    View full-size slide

  66. средство, което е представител на
    бъдещето и което ти доставя уникално
    удоволствие, когато го използваш. И
    определено може да те придвижи от
    точка А до точка Б.
    Дори и да не ползвате Ruby в
    ежедневната си работа, покрай него ще
    научите неща, които ще са ви полезни и
    там. Дори това да е, че не може да
    продължите да пишете повече на
    текущите си език и технология, при
    положение, че има езици като Ruby :)

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  69. динамичен

    View full-size slide

  70. $ 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
    интерпретира се

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  74. роден 1994 г.
    набира популярност
    2004 г. заради Rails

    View full-size slide

  75. култура

    View full-size slide

  76. open source!

    View full-size slide

  77. $ gem install rails

    View full-size slide

  78. Community хостинг за Ruby
    (безплатни) библиотеки (наричат се
    gems).
    ● Над 100 хил. библиотеки
    ● Над 90 хил. потребителя
    ● Над 6 милиарда изтегляния
    https://rubygems.org

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  81. screencasts & podcasts

    View full-size slide

  82. колорит

    View full-size slide

  83. _why the lucky
    stiff

    View full-size slide

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

    View full-size slide

  85. David Heinemeir Hanson

    View full-size slide

  86. от 2011 - зрялост
    Ако през 2011 г. сме казали, че Ruby
    и екосистемата около него са
    достигнали зрялост, три години по-
    късно това е вярно с още по-голяма
    сила.

    View full-size slide

  87. иновация

    View full-size slide

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

    View full-size slide

  89. Urban Dictionary

    View full-size slide

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

    View full-size slide

  91. Това е за ваше добро. Ако много,
    много, много държите да правите
    проект на Rails, елате и говорете с
    нас.
    Rails проекти –
    забранени

    View full-size slide

  92. Въпроси, диалог
    и обратна връзка
    Обратната връзка и комуникацията
    както между вас и нашия екип, така
    и межу вас самите, са ключът към
    един успешен курс.

    View full-size slide

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

    View full-size slide

  94. 1.8 vs 1.9 vs 2.0 vs 2.x

    View full-size slide

  95. ще ползваме само 2.2 и по-
    нови

    View full-size slide

  96. Текущата най-нова е 2.2.3

    View full-size slide

  97. JRuby
    Rubinius
    IronRuby
    MacRuby
    + още десетки

    View full-size slide

  98. ресурси

    View full-size slide

  99. Programming Ruby 1.9 and 2.0
    Освен множеството ресурси онлайн,
    ако предпочитате по-структуриран
    подход и нямате търпение да
    започнете още сега, може да
    пробвате някоя книжка. Има няколко
    и на О’Reilly.

    View full-size slide

  100. Metaprogramming Ruby 2

    View full-size slide

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

    View full-size slide

  102. малко код

    View full-size slide

  103. # 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  110. Какво следва?
    Добре. Да кажем, че сте решили да
    запишете курса. Какво следва?

    View full-size slide

  111. Още днес
    • Регистрирайте се на сайта:
    http://fmi.ruby.bg/
    • Качете си профилна снимка
    • Попълнете анкетата
    • Инсталирайте си Ruby 2.2.3:
    http://fmi.ruby.bg/topics/1
    Защо профилна снимка? Отново –
    по-добра комуникация. Хората
    инстинктивно търсим връзка между
    име и лице и това ни помага да си
    изградим образ за даден човек,
    което пък от ствоя страна ни помага
    да комуникираме по-ефективно с
    него.

    View full-size slide

  112. Q&A
    Време за въпроси.

    View full-size slide