Георги обнови решението на 18.01.2015 19:26 (преди почти 10 години)
+
+
+REPOSITORY = 'https://github.com/joromir/ruby-retrospective-4'
+
+
+# Двадесет неща, които научих:
+
+
+# 1. Спазването на ръководството по стил и конвенциите е от голямо значение.
+# Кодът се чете повече пъти, отколкото пъти се пише. Научих се
+# да подреждам кода си по-добре чрез четенето му отзад-напред - по този
+# начин логиката не може да ми отклони вниманието от това да проследя дали са
+# правилно подредени различните изрази.
+
+# 2. Когато се върнах назад и прочетох остарелия ми вече код, разбрах,
+# че наистина правилното именуване на променливи и методи е много важно нещо.
+
+# 3. Когато дефинираме метод извън даден клас, той става метод на
+# класа Object. Това трябва да се избягва, освен в много специални случаи.
+
+# 4. Добра практика е избягването на повторения - повтаряне на идеи,
+# писане на код, който наподобява вече написан друг такъв и т.н. Когато
+# се използват вече дефинирани методи се скъсява кодът.
+# По този начин се подобрява четимостта, кодът става по изчистен и по-ясен.
+
+# 5. Винаги, когато е възможно, трябва да се избягва ползването на
+# "monkey patching". Това "замърсява" библиотеките и може да предизвика
+# непредсказуемо поведение.
+
+# 6. Следването на SOLID принципа прави кода по-разбираем, а и дава по-малко
+# пространство за грешки и бъгове.
+
+# 7. Дефинирането и използването на глобални променливи трябва да се избягва,
+# защото това е лош стил на програмиране и е възможно да възникнат проблеми
+# със сигурността.
+
+# 8. Когато дефинираме метод each, трябва да мислим и за случая,
+# когато не подаваме блок на въпросния метод. По този начин each трябва да
+# връща Enumerator. (Enumerable <-> each <-> Enumerator)
+
+# 9. По-интелигентно е при някои ситуации да си създадем помощен клас или
+# модул с методи, вместо да трупаме допълнителни такива по останалите класове.
+
+# 10. Не трябва да се забравя, че в case може да използваме "," , за да си
+# спестим писането на допълнителни редове, водещи до едно и също нещо.
+
+# 11. Всеки метод, който не е задължително да е public е по-добре да бъде
+# private, защото така капсулацията е по-добра.
+
+# 12. Паралелното присвояване в някои случаи ни спестява писането на повече
+# код, но за сметка на това кодът става по-труден за четене.
+
+# 13. В рамките на модула RBFS, можем да се обърнем към класа Directory
+# по следните два начина: Directory.new и RBFS::Directory.new като за
+# предпочитане е първият начин.
+
+# 14. Можем да достигнем до по-елегантно решение на даден проблем, ако
+# използваме стойности по подразбиране в методите в дадени ситуации.
+
+# 15. Можем да използваме map, select, reduce и с тази съкратена форма:
+# (1..22).reduce(&:+)
+# ["banana", "muffin", "YEAH!"].map(&:to_sym)
+# [1,2,3,4].select(&:odd?)
+
+# 16. Трябва да include-нем Enumerable и да дефинираме each,
+# за да може да викаме в нашите класове методи като reduce, map и други.
+
+# 17. Добре е да се възползваме от функционалните елементи на езика като цяло,
+# защото по този начин пестим време и усилия.
+
+# 18. Понякога е по-добре е да използваме ламбда функция вместо да дефинираме
+# метод, който се използва само на едно единствено място.
+
+# 19. Може да повтаряме някакъв шаблон с puts, когато го използваме
+# по следния начин: puts 'la ' * 4 или puts "ba" + "na" * 2
+
+# 20. ...и не на последно място - от много голямо значение е да се чете
+# повече чужд код. :)