| 18. Плохие привычки | |
| Некоторое время назад я рассказывал о привычках, которые помогут вам обезопасить себя от некоторого рода ошибок. Это были хорошие привычки. Сейчас же мы поговорим о привычках, которые наоборот приводят к ошибкам. То есть, о привычках плохих. | |
| Никогда не откладывайте проверку ошибок в долгий ящик. Предположим, что вы открываете файл и что-то из него читаете. Сразу же сделайте все необходимые проверки: существует ли файл, не залочен ли он каким-то другим пользователем или программой, успешно ли окончилась попытка чтения из файла, валидны ли прочитанные данные. Не откладывайте такие проверки на потом. Печальная практика показывает, что человеку не удается удержать в голове все места, к которым необходимо вернуться через некоторое время и сделать проверку — человек обязательно что-нибудь упустит, и, в один прекрасный день, последствия лени всплывут перед программистом как айсберг перед «Титаником». | |
| Не жертвуйте изяществом кода и архитектуры ради производительности. Вообще не думайте о производительности. Сратайтесь решать задачи красиво. Приемлемая производительность практически всегда будет естественным следствием изящного решения. | |
| Избегайте любых решений, дающих вам сиюминутное удобство, но заставляющих вас отступать от канонов. Например, глобальные сущности, нарушение инкапсуляции или «прыганье» по уровням абстракции, приведение вниз по иерархии, отмена константности, модификатор mutable, и так далее. Старайтесь решать задачи «как правильно», а не «как быстрее, лишь бы работало». И не вздумайте полагать, что «сейчас я сделаю как быстрее, а потом, когда все заработает, переделаю на „как надо“». Нет, вы обязательно что-нибудь упустите. Пишите правильно! | |
| Не унифицируйте run-time-овые свойства сущностей, тем самым усложняя логику и понимание их работы. Ваш run-time должен быть туп до безобразия. А так же во время безобразия и после безобразия. Унифицируйте compile-time. Унификация run-time-а вносит неявное поведение на стадии выполнения. Вы должны четко понимать что и как у вас работает. Единственное исключение, быть может — искусственный интеллект. Однако, и в этом случае вы должны четко понимать все принципы. Вся нетривиальность работы должна определяться данными, а не связями между языковыми функциональными типами. | |
| Не складывайте все яйца в одну корзину. Четко разделяйте сущности по задачам. Не возлагайте на одну сущность более одной обязанности. Помните — лучше «переразделить», чем «недоразделить». | |
| Источником всех плохих привычек являются: лень (во всех своих проявлениях), мысли о том, что человек умнее компилятора (скажу сразу — это не так) и желание внести универсальность туда, где она на самом деле не нужна. Если у вас возникло желание отойти от канонов, то прежде всего подумайте, не движет ли вами что-либо из только что перечисленного. | |