Седма задача - ретроспекция
- Краен срок:
- 16.01.2017 17:00
- Точки:
- 6
Срокът за предаване на решения е отминал
Ретроспекция
Решете първите пет задачи отново. Целта е да постигнете кратки и ясни решения, които да включват всичко, което сте научили до момента. В решенията си сте допуснали някои грешки. Сега имате възможност да ги оправите. Имате на разположение всички чужди решения, включително и нашите.
Досега не сме видели решения, в които няма какво да се подобри. Това включва и нашите. Ако разгледате десетина, ще ви дойдат идеи. Ще има какво да научите. Ще има какво да подобрите. Опитайте се да направите най-краткия и ясен код, на който сте способни.
Новите ви решения ще съдържат подобрения над старите. Това са неща, които сте научили. Искаме списък с двадесет такива — например по около четири на задача. Това могат да бъдат дребни работи, свързани с Ruby, или по-общи, концептуални неща. Дори неща, свързани с подход към проблемите и методология. Всяко едно трябва да бъде видимо подобрение спрямо предишното ви решение. Например, ако сте научили, че нещо може да стане с map
вместо с each
, трябва старото ви решение да бъде с each
, докато новото - с map
.
Ако си мислите, че двадесет неща са много — не се притеснявайте. Просто се опитайте да направите по няколко подобрения на всяко от решенията си. Списъкът бързо ще набъбне. Може да гледате на тези двадесет неща и като на commit съобщения, които бихте направили, докато рефакторирате предишните си решения.
Ако не сте решили някоя задача, това е добър шанс да научите това, което задачата цели да ви покаже. Вие избирате кога да погледнете готови решения. В този случай, нещата, които ще запишете, са неща, които са ви направили впечатление по решението – хитри моменти в езика, добри практики, лоши пракитики, които трябва да избягвате и прочее.
Форма на предаване
За да предадете това домашно, трябва да имате GitHub акаунт. Ако случайно все още нямате такъв, сега е един добър момент да си направите. Fork-нете нашето хранилище за ретроспекцията, клонирайте си (git clone ...
) вашия fork и променете solution.rb
файловете за всяка от задачите. Първият ви commit трябва да бъде със старите ви решения във вида, в който сте ги предали в сайта за последен път. Ако не сте предали решение за дадена задача, оставяте файла на решението празен.
Можете да проверите дали решенията ви минават тестовете и ограниченията с:
$ bundle exec rake check_all
Може да проверите същото само за една конкретна задача така:
$ bundle exec rake check[3]
В тази команда, 3
е номерът на задачата, която искате да проверите.
Забележете, че през GitHub ще предадете само кода. Научените уроци се предават в сайта на курса, с добре познатия ви формуляр. Този път, вместо цяла ruby програма, искаме само една дефинирана константа, REPOSITORY
и списък от неща в коментари. Например:
REPOSITORY = 'https://github.com/georgyangelov/ruby-retrospective-2016'
# Двадесет неща, които научих.
#
# 1. Монадите в Haskell са много широка абстракция. Приложими са на много места,
# но това ги прави трудни за научаване. Любимият ми пример е Maybe монадата,
# в която верига от операции връща Nothing, ако връзка от веригата върне
# Nothing.
# 2. case клас (в Scala) е по-подходящ за промоция, от стандартен такъв.
# 3. Проверката за възраст може да се реализира по-добре с полиморфизъм, отколкото
# с case или if.
Разбира се, това е примерен текст. Искаме уроци за Ruby решенията ви, не разсъждения за други забавни езици.
REPOSITORY
трябва да съдържа HTTP URL-а до вашия fork на хранилището за това ретроспективно домашно.
Обърнете внимание, че кодът ви е публичен, но списъкът с двадесетте научени неща не е. Не го споделяйте нито в GitHub, нито във форумите, нито помежду си.
Съвети и бележки
- Не променяйте други файлове в хранилището, освен вашите решения. Всички други промени ще бъдат игнорирани.
- Уверете се, че при предаване на решенито през формуляра на сайта, имате дефинирана въпросната константа, че стойността ѝ е низ и че не е коментирана.
- Не забравяйте да push-нете последните промени, които сте направили, в GitHub хранилището си. Промени, качени в GitHub след крайния срок на задачата няма да се зачитат.
- Не copy-paste-вайте директно нашите решения. Можете да използвате код от тях, но не 1:1.
Оценяване
За тази задача получавате от 0 до 6 точки. Колко точно зависи от двадесете неща и доколко са приложени в решенията ви. Ако имате страхотни решения, но половината от нещата са несериозни, ще получите половината точки. Ако имате невероятни решения и нямате списък от научени неща, ще получите нула точки.
Впрочем, минаващите тестове и стилистична проверка са задължителни. Ако rake check_all
открие дори една грешка в стила или един неуспешен тест на дори една от старите задачи, получавате нула точки за цялата ретроспекция.
Автоматична проверка при промяна на файл
Може да пуснете следната команда:
$ bundle exec rake watch
Тя ще следи за промени по файловете с решенията и ще пуска автоматично тестовете и rubocop проверките при промяна на файла. Командите са дефинирани в Rakefile
-а. Разгледайте го за повече подробности.
Разни
- Пишете грамотно. Да съчините двадесет изречения, без те да преливат от пунктуационни, правописни или граматически грешки, не трябва да е особено сложно. Няма да се заяждаме за дреболии, но набиващи се на очи проблеми ще се наказват с отнети точки.
- Чувствайте се свободни да дискутирате всичко във форумите. Този път кодът е публичен. Може да питате каквото искате: "Как да направя това по-добре?", "Това добра идея ли е?", "Не мога да преценя кое от тези две неща е по-удачно", "Тази конструкция ми допада много." и прочее.