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

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

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

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

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

Other Decks in Programming

Transcript

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

    View full-size slide

  2. Александър

    Героги А.

    Георги Г.

    Марио

    Митьо

    Никола

    Николай

    Сава

    Станислав

    Стефан

    Христо

    И други...

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    — @skanev

    View full-size slide

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

    View full-size slide

  7. Engaging & Inclusive

    View full-size slide

  8. Две целеви групи:
    1. По-напреднали и по-“лакоми” за
    информация

    2. Студенти с минимални познания, опит и
    понякога – демотивирани
    Нашите наблюдения от предишни курсове са, че има основно два типа студенти:
    !
    1. Силно мотивирани, с повече опит и теоретични познания, готови да отделят много време на курса и които напредват с много бързи темпове.
    2. Студенти на ръба на демотивацията,с минимални познания и минимален или никакъв опит.
    !
    Втората група обикновено е жертва на проблеми както в образователната система като цяло, така и във ФМИ в частност.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  12. Задавай въпроси

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

    View full-size slide

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

    View full-size slide

  14. Ден Час Зала
    Понеделник 19:00 200
    Сряда 19:00 200
    Кога?

    View full-size slide

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

    View full-size slide

  16. Записване с молба
    Става, но трябва да ни пишете,

    ако ви няма в СУСИ –

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  23. Code Jam Session
    Тази година планираме да направим експериментално 1-2 “code jam sessions”, в които вместо лекция, идвате с лаптоп и решавате един или повече
    малки проблеми, които ние поставим. Ще има повече от екипа в тези дни и ще ви помагаме с решенията. Ако имате коментари по тази точка, може
    да ни пишете.

    View full-size slide

  24. оценяване

    View full-size slide

  25. Скалата

    View full-size slide

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

    View full-size slide

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

    • предават се онлайн

    • проверяват се автоматично

    • обикновено 0-6 точки

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

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

    • имате право да пропуснете три

    • чуждите решения са публични

    View full-size slide

  28. Тестове
    • два броя

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

    • 30 точки на тест

    • много гнусни, но не са критични за оценката

    View full-size slide

  29. Проекти
    • на края на семестъра

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

    • 60 точки

    • 1/3 функционалност, 1/3 стил, 1/3 тестове

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

    View full-size slide

  30. Бонуси
    • Предизвикателства

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

    • Участие във форумите (помощ на другарчето)

    • Бонус точки за елегантни решения

    • Принос в GitHub

    • Изнасяне на кратка презентация по време на
    курса

    View full-size slide

  31. Участие в час
    • даваме Snickers за добри въпроси, отговори или
    коментари

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

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

    • ако прекалите с глупостите ще хванете захарна
    болест

    View full-size slide

  32. Предизвикателства
    • малка задачки относително често

    • малки: 4-10 реда код

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

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

    View full-size slide

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

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

    максимум Х метода в клас

    View full-size slide

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

    максимум 2 нива на влагане в метод

    максимум 10 метода в клас

    View full-size slide

  35. Тежките ограничения
    спазване на конвенциите на езика

    само валидни английски думи за именуване

    View full-size slide

  36. Строги

    конвенции и стил

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  42. Добър код

    View full-size slide

  43. Добър код

    View full-size slide

  44. “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

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

    !
    — H. Abelson and G. Sussman

    View full-size slide

  46. Принципи

    View full-size slide

  47. Single Responsibility Principle
    Open-Closed Principle
    Liskov Substitution Principle
    Interface Segregation Principle
    Dependency Inversion Principle

    View full-size slide

  48. Law of Demeter

    View full-size slide

  49. Single Level of Abstraction Principle
    (SLAP)

    View full-size slide

  50. Практики

    View full-size slide

  51. Test-Driven
    Development

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  57. Yukihiro “Matz” Matsumoto

    View full-size slide

  58. designed for programmer

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

    View full-size slide

  59. Brevity

    Simplicity

    Balance
    “Treating Code as an Essay”

    View full-size slide

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

    View full-size slide

  61. динамичен

    View full-size slide

  62. $ 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

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  66. култура

    View full-size slide

  67. open source!

    View full-size slide

  68. $ gem install rails

    View full-size slide

  69. близо 90 000 библиотеки днес

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  72. screencasts & podcasts

    View full-size slide

  73. колорит

    View full-size slide

  74. _why the lucky stiff

    View full-size slide

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

    View full-size slide

  76. David Heinemeir Hanson

    View full-size slide

  77. през 2011:
    зрялост
    Този слайд е отпреди 3 години. :)
    Ако през 2011 г. сме казали, че Ruby и екосистемата около него са достигнали зрялост, три години по-късно това е вярно с още по-голяма сила.

    View full-size slide

  78. иновация

    View full-size slide

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

    View full-size slide

  80. Urban Dictionary

    View full-size slide

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

    View full-size slide

  82. Rails проекти – забранени

    View full-size slide

  83. Въпроси, диалог

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

    View full-size slide

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

    View full-size slide

  85. 1.8 vs 1.9 vs 2.0 vs 2.1

    View full-size slide

  86. ще ползваме само 2.1 и по-нови

    View full-size slide

  87. Текущата най-нова е 2.1.3

    View full-size slide

  88. JRuby
    Rubinius
    IronRuby
    MacRuby
    + още 50-ина...

    View full-size slide

  89. ресурси

    View full-size slide

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

    View full-size slide

  91. Metaprogramming Ruby 2

    View full-size slide

  92. why’s poignant guide to Ruby

    http://mislav.uniqpath.com/poignant-guide/

    View full-size slide

  93. малко код

    View full-size slide

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

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

    View full-size slide

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

    View full-size slide

  97. def factorial(n)

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

    end


    puts factorial(10)

    View full-size slide

  98. class Integer

    def factorial

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

    end

    end


    puts 10.factorial

    View full-size slide

  99. def prime?(n)

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

    end


    puts prime?(13)

    puts prime?(42)

    View full-size slide

  100. class Integer

    def prime?

    2.upto(pred).all? { |a| remainder(a).nonzero? }

    end

    end


    puts 13.prime?

    puts 42.prime?

    View full-size slide

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

    View full-size slide

  102. Още днес
    • Регистрирайте се на сайта: http://fmi.ruby.bg/

    • Качете си профилна снимка

    • Попълнете анкетата

    • Инсталирайте си Ruby 2.1.3
    Защо профилна снимка? Отново – по-добра комуникация. Хората инстинктивно търсим връзка между име и лице и това ни помага да си изградим
    образ за даден човек, което пък от ствоя страна ни помага да комуникираме по-ефективно с него.

    View full-size slide

  103. Core Ruby @ Hack Bulgaria
    Програмиране с Ruby @ ФМИ
    +
    Тази година си партнираме с екипа на Хак България и курсът им Core Ruby. В модела на Хак България – inverted classroom – на сбирките решавате
    задачи, а теорията и лекциите са за домашно.
    !
    Тъй като на този курс във ФМИ нямаме упражнения, комбинацията между двата курса е много удачна. Местата в Core Ruby са ограничени, но може
    да пишете на [email protected], ако желаете да се присъедините към курса, за да видите дали има възможност за това.
    !
    Няма застъпване в графика на двата курса.

    View full-size slide

  104. въпроси?
    Време за въпроси. След въпросите и преди да се разотидем, искам да кажа и едно последно, кратко нещо.

    View full-size slide

  105. shteglasuvam.com
    Гласувайте на пети октомври.

    View full-size slide