Ретроспекция

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

Краен срок:
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 се оплаче за стил, получавате нула точки. Без значение какво сте написали.

Разни

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