Седма задача - ретроспекция

Предадени решения

Краен срок:
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-а. Разгледайте го за повече подробности.

Разни

  • Пишете грамотно. Да съчините двадесет изречения, без те да преливат от пунктуационни, правописни или граматически грешки, не трябва да е особено сложно. Няма да се заяждаме за дреболии, но набиващи се на очи проблеми ще се наказват с отнети точки.
  • Чувствайте се свободни да дискутирате всичко във форумите. Този път кодът е публичен. Може да питате каквото искате: "Как да направя това по-добре?", "Това добра идея ли е?", "Не мога да преценя кое от тези две неща е по-удачно", "Тази конструкция ми допада много." и прочее.