Нелюбовь оберонщиков к динамическим языкам (и даже противопоставления, как у info21) мне вообще не понятна и объясняется только парадоксом Блаба. Оберон при статической типизации лишен какой либо арифметики типов.
Вы можете программировать на Питоне, не составляя тестовые наборы? Т.е. можете получить приемлемое качество компонента, не составив на него тесты?
Я вам уже писал как-то... Без тестов приемлемое качество вы никогда не получите. Даже на волшебном обероне (как же к слову не сказать про обилие "дурацкких" ошибок в виртовских книжках). Просто статические языки позволяют вам намного дольше жить "в кредит" с иллюзией, что вам все проверит компилятор, а ошибок в логике вы не делаете. Такой подход даже работает в случае, когда вам удается "спихнуть" проект до наступления часа Х, когда сложность поведения (даже не системы в целом, а отдельных компонент) такова, что компилятор вам уже никак не помогает, а как это должно работать на самом деле никто не знает/не помнит.
Да, на динамическом языке вам придется писать тесты
сразу и много. С одной стороны. С другой стороны - писать и споровождать их легче. Плюс - обилие тестов резко повышает качество "компонентности" системы. Да-да, не "правильная модульность" оберона сама по сбе, а юнит тесты реально
заставлют правильно декомпозировать.
Я не говорю, что правильно программировать без тестов, неплохо ими подкреплять процесс,
Вот тут принципиальная ошибка. Не подкреплять. Подкреплять вы можете комментариями, документацией и красивыми графиками, если время останется
Тесты - первичны. Они так же первичны, как дизайн и архитектура.
Теперь представьте, перехожу я на динамический язык. (Мне не надо этого представлять, ряд вещей на PHP и JS я совсем недавно писал, но боролся с их закидонами осторожностью и многократными внимательными перепроверками кода, там надо было не очень объёмные, но важные компоненты написать для других разработчиков).
Так вот, перехожу я. Положим первый вариант программы я составлю, и даже забью особо на тесты.
Дальше можно не читать... понятно чем оно кончится
Но затем я натолкнусь на дамоклов меч этой динамики - при рефакторинге, при малейшем изменении сигнатур процедур или чего ещё я буду долго биться задницей об стену. А если учесть, что даже при разработке первого варианта я пару раз люблю порефакторить... То биться буду с самого начала.
Рефакторинг - это не только изменение сигнатур функций. Вот я работаю с базой кода, которой больше 10 лет. Статический язык. Невозможно ничего отрефакторить, пока досканально не разберешься, что делает компонента и зачем. На эти разбирательства уходят дни без единой строчки нового кода. И не надо мне пытаться рассказать, что если бы это был оберон, а не С++, то было бы быстрее (скорее наоборот). Да, если бы это был динамический язык - то были бы не дни, а недели, тут я согласен
Но речь не об этом. А о том, что если бы оно было с вменяемыми тестами, то можно было бы просто брать и спокойно кромсать компоненту в свете нового понимания ее правильной работы, без риска, что потом у пользователя отвалится его самый важный юзкейс.
Те, кто работает в стиле с тестами, те скажут, "а у нас вместо компилятора - тесты". Но у меня-то нет тестовых наборов специальных... Это значит, что я должен буду их завести и привыкнуть к такому стилю. Для меня это будет избыточной работой. Я привык тратить больше времени, чем другие, на написание (чтобы сразу получать правильную программу) и вычитку кода, и ещё буду тратить время на тесты...
Ужос. Я вам это процитирую лет так через 5