Ретроспекция
- Краен срок:
- 29.04.2013 17:00
- Точки:
- 6
Срокът за предаване на решения е отминал
Решете първите четири задачи отново. Целта е да постигнете кратки и ясни решения, които да включват всичко, което сте научили след домашното. В решенията си сте допуснали някои грешки. Сега имате възможност да ги оправите. Имате на разположение всички чужди решения.
Досега не сме видели решения, в които няма какво да се подобри. Ако разгледате десетина, ще ви дойдат идеи. Ще има какво да научите. Ще има какво да подобрите. Опитайте се да направите най-краткия и ясен код, на който сте способни.
Новите ви решения ще съдържат подобрения над старите. Това са неща, които сте научили. Искаме списък с двадесет такива — по около пет на задача. Това могат да бъдат дребни работи, свързани с Python, или по-общи, концептуални неща. Всяко едно трябва да бъде видимо подобрение спрямо предишното ви решение. Например, ако сте научили, че нещо може да стане с list comprehension вместо с добрия стар C-style for, трябва старото ви решение да бъде с този for, докато новото - с list comprehension-а.
Ако си мислите, че двадесет неща са много — не се притеснявайте. Просто се опитайте да направите по няколко подобрения на всяко от решенията си.
Форма на предаване
За да предадете това домашно, трябва да имате GitHub account. Клонирайте нашето хранилище и променете solution.py файловете. Първият ви commit трябва да бъде със старите ви решения във вида, в който сте ги предали в сайта за последен път. Ако не сте предали решение за дадена задача, оставяте файла празен.
Пускате всички тестове с
$ python tests.py
Забележете, че през GitHub ще предадете само кода. Научените уроци стават с добре познатата форма в сайта. Този път, вместо цяла python програма искаме една дефинирана константа, REPOSITORY и списък от неща в коментари. Например:
REPOSITORY = 'http://github.com/gvanrossum/python-retrospective'
# Двадесет неща, които научих.
#
# 1. Монадите в Haskell са много широка абстракция. Приложими са на много места,
# но това ги прави трудни за научаване. Любимият ми пример е Maybe монадата,
# в която верига от операции връща Nothing, ако връзка от веригата върне
# Nothing.
# 2. case клас (в Scala) е по-подходящ за промоция, от стандартен такъв.
# 3. Проверката за възраст може да се реализира по-добре с полиморфизъм, отколкото
# с case или if.
Разбира се, това е примерен текст. Искаме уроци за Python решенията ви, не разсъждения за други забавни езици.
Обърнете внимание, че кодът ви е публичен, но списъкът с двадесетте научени неща не е. Не го споделяйте нито в GitHub, нито във форумите, нито помежду си.
Оценяване
За тази задача получавате от 1 до 6 точки. Колко точно зависи от двадесете неща и доколко са приложени в решенията ви. Ако имате страхотни решения, но половината от нещата са несериозни, ще получите половината точки. Ако имате невероятни решения и нямате списък от научени неща, ще получите нула точки.
Впрочем, минаващите тестове и стилистична проверка с pep8
са задължителни. Ако някой от тестовете изгърми или pep8 се оплаче за стил, получавате нула точки. Без значение какво сте написали.
Разни
- Чувствайте се свободни да обяснявате на дълго и на широко какво ви е направило впечатление за дадена конструкция, в решението, което предавате през сайта. Или пък да задавате въпроси.
- Пишете грамотно. Да съчините двадесет изречения, без те да преливат от пунктуационни, правописни или граматически грешки, не трябва да е особено сложно. Няма да се заяждаме за дреболии, но набиващи се на очи проблеми ще се наказват с отнети точки.
- Чувствайте се свободни да дискутирате всичко във форумите. Този път кодът е публичен. Може да питате каквото искате: "Как да направя това по-добре?", "Това добра идея ли е?", "Не мога да преценя кое от тези две неща е по-удачно", "Тази конструкция ми допада много." и прочее.