Пета задача
- Краен срок:
- 21.01.2015 17:00
- Точки:
- 6
Срокът за предаване на решения е отминал
Ретроспекция
Решете първите четири задачи отново. Целта е да постигнете кратки и ясни решения, които да включват всичко, което сте научили след домашното. В решенията си сте допуснали някои грешки. Сега имате възможност да ги оправите. Имате на разположение всички чужди решения, включително и нашите.
Досега не сме видели решения, в които няма какво да се подобри. Това включва и нашите. Ако разгледате десетина, ще ви дойдат идеи. Ще има какво да научите. Ще има какво да подобрите. Опитайте се да направите най-краткия и ясен код, на който сте способни.
Новите ви решения ще съдържат подобрения над старите. Това са неща, които сте научили. Искаме списък с двадесет такива — например по около пет на задача. Това могат да бъдат дребни работи, свързани с Ruby, или по-общи, концептуални неща. Дори неща, свързани с подход към проблемите и методология. Всяко едно трябва да бъде видимо подобрение спрямо предишното ви решение. Например, ако сте научили, че нещо може да стане с map
вместо с each
, трябва старото ви решение да бъде с each
, докато новото - с map
.
Ако си мислите, че двадесет неща са много — не се притеснявайте. Просто се опитайте да направите по няколко подобрения на всяко от решенията си. Списъкът бързо ще набъбне. Може да гледате на тези двадесет неща и като на commit съобщения, които бихте направили, докато рефакторирате предишните си решения.
Ако не сте решили някоя задача, това е добър шанс да научите това, което задачата цели да ви покаже. Вие избирате кога да погледнете готови решения. В този случай, нещата, които ще запишете, са неща, които са ви направили впечатление по решението – хитри моменти в езика, добри практики, лоши пракитики, които трябва да избягвате и прочее.
Форма на предаване
За да предадете това домашно, трябва да имате GitHub account. Ако случайно все още нямате такъв, сега е един добър момент да си направите. Fork-нете нашето хранилище, клонирайте си (git clone ...
) вашия fork и променете .rb
файловете за всяко от решенията. Първият ви commit трябва да бъде със старите ви решения във вида, в който сте ги предали в сайта за последен път. Ако не сте предали решение за дадена задача, оставяте файла празен.
Обърнете внимание, че има нови стилови изисквания към всяка от задачите. Можете да проверите дали решенията ви минават тестовете и ограниченията с:
$ bundle exec rake check
Може да проверите същото само за една конкретна задача така:
$ bundle exec rake tasks:03
В тази команда, 03
е номерът на задачата, която искате да проверите.
Забележете, че през GitHub ще предадете само кода. Научените уроци се предават в сайта на курса, с добре познатия ви формуляр. Този път, вместо цяла ruby програма, искаме една дефинирана константа, REPOSITORY
и списък от неща в коментари. Например:
REPOSITORY = 'http://github.com/mitio/ruby-retrospective-4'
# Двадесет неща, които научих.
#
# 1. Монадите в Haskell са много широка абстракция. Приложими са на много места,
# но това ги прави трудни за научаване. Любимият ми пример е Maybe монадата,
# в която верига от операции връща Nothing, ако връзка от веригата върне
# Nothing.
# 2. case клас (в Scala) е по-подходящ за промоция, от стандартен такъв.
# 3. Проверката за възраст може да се реализира по-добре с полиморфизъм, отколкото
# с case или if.
Разбира се, това е примерен текст. Искаме уроци за Ruby решенията ви, не разсъждения за други забавни езици.
Обърнете внимание, че кодът ви е публичен, но списъкът с двадесетте научени неща не е. Не го споделяйте нито в GitHub, нито във форумите, нито помежду си.
Оценяване
За тази задача получавате от 1 до 6 точки. Колко точно зависи от двадесете неща и доколко са приложени в решенията ви. Ако имате страхотни решения, но половината от нещата са несериозни, ще получите половината точки. Ако имате невероятни решения и нямате списък от научени неща, ще получите нула точки.
Впрочем, минаващите тестове и стилистична проверка са задължителни. Ако rake check
открие дори една грешка в стила или един неуспешен тест, получавате нула точки. Без значение какво сте написали.
Watchr
Може да пуснете watchr
с:
$ bundle exec rake watch
Той ще следи за промени по файловете с решенията и ще пуска автоматично тестовете и skeptic проверките при промяна на файла. Задачите са дефинирани в Rakefile
-а. Разгледайте го за повече подробности.
Разни
- Чувствайте се свободни да добавяте коментари в решенията си, казващи какво ви е направило впечатление за дадена конструкция. Или пък да задават въпроси. Въпрос на ваш избор е.
- Пишете грамотно. Да съчините двадесет изречения, без те да преливат от пунктуационни, правописни или граматически грешки, не трябва да е особено сложно. Няма да се заяждаме за дреболии, но набиващи се на очи проблеми ще се наказват с отнети точки.
- Чувствайте се свободни да дискутирате всичко във форумите. Този път кодът е публичен. Може да питате каквото искате: "Как да направя това по-добре?", "Това добра идея ли е?", "Не мога да преценя кое от тези две неща е по-удачно", "Тази конструкция ми допада много." и прочее.