2010-02-02

Code Recycling

Когда я впервые услышал об идее переписывать заново куски, написанные несколько лет назад, просто потому, что они написаны несколько лет назад, даже если они с тех пор нормально работали, я подумал, что это дурацкая идея. Не надо ремонтировать то, что не сломано. Но чем больше я думаю об этом, тем больше убеждаюсь во мнении, что в этом есть здравое зерно и не одно.

Известно, что читать код дороже, чем писать. Написать новый код можно быстро, если хорошо понятно, что он должен делать, рефакторить старый, незнакомый код сложно и дорого. Свой код совершенно понятен, чужой полон неприятных сюрпризов. Переписав, получаешь хорошее знание тонкостей и понятную codebase, которую можно развивать дальше. Конечно, надо хорошо знать, что делаешь, и быть готовым к тому, что что-то окажется сломано. Это должно компенсироваться некоторыми новыми возможностями. Не надо менять шило на мыло. Шило надо менять на электродрель.

Технологии со временем развиваются и стиль программирования меняется. Меняются языки, рантаймы, библиотеки. Старый сишно-фортрановский код с кучей статических переменных в начале программы заменяется динамическими структурами, свалка функций - классами и интерфейсами, а 'goto err' - исключениями. Переписав в новом стиле получишь значительно более понятный и управляемый код, что есть самое важное качество живого кода.

Живое постоянно регенерируется. Мёртвое обрастает полипами и кораллами, багами и их фиксами, ненужными забытыми фичами, и раньше или позже, но обязательно разваливается под их тяжестью.

2 comments:

SKuznetsov said...

Есть соображение о распределении времени: иногда фрагменты кода пишутся в спешке, без структурной оптимизации (рабочая заплатка). А если есть время на рефакторинг, то есть время сделать это красиво.

SKuznetsov said...

Как невыгодно модернизировать старый компьютер, так и программа имеет область применения и, соответственно, время жизни. От старой программы берутся только идеи, она выкидывается вместе со старым железом, которое неприменимо в новых задачах. Тут уж время для рециклинга прошло...