Учиться программисту нужно всегда, чтобы не отстать от бешеных темпов развития технологий 21-ого века. Еще полезно программисту учиться на чужих ошибках. В качестве ежедневного чтива люблю читать следующие сайты:
- IT Happens — жалко, что владельцы сайта перестали его обновлять в 2015 году
- WTF Daily — каждый день — новая история
- Spectrum Risk Factor

Очень рекомендую для общего развития книгу Inviting Disaster: Lessons From the Edge of Technology
- великолепная глубокая книга по общим ошибкам дизайна, тестирования и эксплуатации.
- полезно почитать, чтобы опыт других сфер деятельности применить к опыту создания программных систем
Каждая глава в книге посвящена какой-то отдельной катастрофе, и из фактов делаются глубокие и далеко идущие и поучительные выводы для дизайнеров, программистов, системных архитекторов и тестировшиков:
- авария на нефтяной платформе
- авария на АЭС Тримайл Айленд
- катастрофа Челленджера
- торпеды mark 14, которые не взрывались
- скандал с телескопом Хаббл
Мои заметки по прочтению этой книги:
- Современные системы становятся все сложнее. Это приводит к тому, что один человек с трудом может понять, как они работают. Человеческий мозг слишком мал, чтобы составить себе ментальную модель сложной системы с множеством изменяющихся одновременно параметров, с большим числом взаимодействующих друг с другом под-систем.
- Опасность такого уровня сложности заключается в том, что это непонимание работы сложной системы может привести еще большему усугублению критической ситуации, которая произошла из-за первоначальных ошибочных действий.
- Редко, когда одна ошибка приводит к катастрофе. Чаще всего это череда нескольких ошибок подряд, сложившихся в цепь и образовавших «линию разлома». Каждая новая ошибка оказывает positive feedback на всю систему, что приводит к дальнейшему усугублению ситуации и в конечном счете — к катастрофе.
- Ошибки могут накапливаться. Катастрофа в какой-то момент может показаться необычной, случайной, неожиданной. Но исследование причин покажет, что к катастрофе вели маленькие ошибки, которые накапливались днями, неделями, годами.
- Так как мы судим о состоянии системы по контрольным системам, если контрольные системы неисправны, врут нам или дают неверную информацию, мы совершаем ошибочные действия, т.н «слепая зона».
- Сами контрольные системы еще больше увеличивают сложность и без того сложных систем.
- Тесные взаимосвязи составных частей системы приводят как так называемому «tight coupling». Выход из строя одной подсистемы моментально передается на другие системы. За короткий промежуток времени неисправность распространяется во все уголки системы, и у человека нет физической возможности среагировать на это.
- К катастрофам часто приводит желание удовлетворить некие формальные и бюрократические требования. В стремлении преодолеть бюрократические препоны люди замалчивают существование проблемы, преуменьшают их значимость, игнорируют их или даже просто привыкают к ним.