Милан обнови решението на 29.12.2012 02:52 (преди около 12 години)
+REPOSITORY = 'https://github.com/milanov/ruby-retrospective-2'
+
+# Двадесет неща, които научих.
+#
+# Общи:
+# 0) Малко дисциплина. Въпреки заканите на първата лекция, не очаквах да е наистина
+# токова сериозен курса. Поздравления. Донякъде. :D
+# 1) Много по-добре е домашните да се предават рано отколкото късно. Дори и да не бъдат
+# максимално изпипани feedback-а от преподавател е много по-ценен от търсене в Google.
+# 2) Да се замислям как си именовам променливите. Откакто карам курса забелязвам как
+# добрите ми преподаватели по програмиране винаги се замислят преди да измислят име на
+# променливите си. Ако бързат или в краен случаи поне се извиняват за curpos и т.н. :)
+# 3) Научих се да си стилизирам кода по-добре или по-скоро да не си държа прекалено много
+# на собствения стил (да не навлизам в прекалено тесни рамки). Много вероятно е и на работа
+# да ми се налага да спазвам вече изградени "ръководства за стил", така че добре да свиквам
+# отрано.
+# 4) Добих много по-голяма представа за това как работят функционалните езици. Не че
+# Ruby е изцяло такъв, но се научих да използвам малко по-разумно ламбда функциите, map,
+# filter, а и разбрах малко по-добре модела на средите.
+# 5) Какво в общи линии е TestDriven Development, ролята на тестовете и защо е хубаво да ги има.
+#
+# Първа задача:
+# 6) Научих, че в Ruby съществува модул Enumerable. В него има прекрасни функции като #all?,
+# #any?, #none?, #one? и т.н.
+# 7) Разликата между приоритета на операторите &&/|| и and/or.
+# 8) Да не използвам #each толкова грозно, когато решението с #map е толкова по-лесно, четимо,
+# разбираемо, интуитивно и още толкова позитивни определения.
+# 9) Разнообразието от синонимни функции в Ruby. Разбрах също, че дори и да има няколко
+# "еднакви" функции, Ruby community-то винаги си има своя любима (или поне вие двамата).
+#
+# Втора задача:
+# 10) Къде да поставям методите attr_reader/writer/accessor. Може и да е на пръв поглед нещо
+# малко, но според мен е важно. Така първото нещо, което виждаме в класа ни е как той работи
+# (или поне част от неговия интерфейс), което е почти сигурно това, което търсим.
+# 11) Къде точно се пазят класовите методи, синтаксиса за тяхното дефиниране, Singleton класа,
+# каква е връзката между него и самия клас и др.
+# 12) Възможността да подавам направо '&:method' като параметър на #map/#select/т.н., вместо
+# да описвам в блок извикването на #method над всеки от елементите.
+# 13) Добре разбрах (поне така мисля) видовете променливи - класови, локални(?) и инстанционни.
+# До първия feedback на тази задача не знаех дали и къде мога да използвам всеки от видовете.
+# 14) Какво е множествено присвояване.
+# 15) Разбрах в малко по-големи детайли какво са блоковете/proc-овете и че в случая е можело да
+# използвам и двете. Също колко по-добре изглежда решението с блокове.
+#
+# Трета задача:
+# 16) Трябва да си купя и да прочета книга за шаблони за дизайн. Възможно е и за запиша
+# курса във ФМИ, важното е само да добия спешно представа поне за най-основните. Самостоятелното
+# ми решение на задачата, без да използвам примерната йерархия бе със скромните 60-80 реда по-дълго
+# от средните дължини на решенията на другите. След немалка "помощ" от страна на авторовото решение
+# стигнах до мое такова, което обаче ме научи, че имам още доста да уча.
+# 17) Колко ефективно може да е понякога предефинирането на операторите. В общия случай колко
+# полезно е да се прави refactoring на кода.
+#
+# Четвърта задача:
+# 18) Малко метапрограмиране. Хубаво е да си начешеш крастата понякога с късо и спретнато решение,
+# използващо само един или два метода за да дефинира десетки.
+# 19) Да съм по-концентриран при предаването на домашните. Най-хубавото ми (според мен естествено)
+# решение досега, най-краткото и мета-решение не мина тестовете само заради няколко символа (^-$ vs
+# \A-\z) (multiline режима на Ruby). Още нещо - тестовете ви са подли.
+# 20) Да използвам магическите променливи от Perl. Не са чак толкова страшни в крайна сметка.