Не знаю, может, я просто устал от всего этого и у меня какой-нибудь очередной кризис среднего возраста или еще какая напасть. Не подумайте плохо, я не отрицаю ни один из советов известных гуру программирования, я и сам всем то же самое советую. Но энтропия - безжалостная гадина, на сроках 10 - 15 лет любой программный продукт превращается в тыкву
Народная мудрость писал(а):
1. Не пишите устаревший (legacy) код.
2. Любой код без тестов - устаревший.
Поэтому одно из важных свойств хорошего кода - он должен требовать как можно меньше внешней документации.
Согласен, но вот пример с одного из прошлых проектов. 6000 тестов. Изменение в одном месте валит, например, 150 тестов, 50 из которых, казалось бы, вообще в никак не связанных местах. Потом начинаешь выяснять - оказывается нет, места все-таки связаны. Как это удалось выяснить? Путем реверс-инжиниринга. Давайте уже называть вещи своими именами. Если вам нужно долго читать код, а потом запускать его (особенно если несколько раз), чтобы понять, как он работает, вы занимаетесь реверс-инжинирингом. Это дорогая процедура, вообще-то.
Другой пример с того же проекта. Проект - сервис для мобильных операторов (есть несколько компаний в мире, которые занимаются проведением взаиморасчетов между мобильными операторами - кто кому сколько трафика нагнал, кто кому сколько должен, и т. д. - вот это один из таких сервисов) Код, который делает небольшой расчет того, как нужно управлять трафиком. Мне дали этот кусок задачи, потому что на проекте был всего один человек, который знал, как это работает (когда я закончил, таких людей стало двое, а когда грянул корона-кризис, компания сократила нас обоих - троектратное хахаха, товарищи!). У меня ушел чуть ли не месяц, чтобы разобраться во всех нюансах. А по итогу могу сказать, что общую идею я бы смог описать за день, максимум за два. С подробнейшим текстом с картинками и схемами. А прочитать за пару часов. Но на проекте не было принято писать документацию, а вот ковыряться в недокументированном коде - это нормально. Тесты тоже были - простыня с цифрами. 12 столбцов (1 столбец - 1 месяц), и черт знает сколько строк. Тут исходные данные - тут расчетные. А сам код был "предельно простой", кстати - 1 SQL запрос, который помещался на один экран
-- 11.01.2022, 09:21 --На тех проектах, где я работал, объемы исходников к моменту моего прихода могли составлять до 4 - 5 МБ текста. Для сравнения, "Война и Мир" - это, емнип, порядка 1 МБ. Как именно написан сам код в таких случаях уже не играет решающего значения. Что действительно имеет значение - это документация, объясняющая, что вообще происходит. Документация отсутствует в 100% случаев.
Сколько ж тогда документация займёт? Поэтому и говорят нам гуру что коммерческий код должен быть самодокументируемым.
Ну займет она 20 МБ, и что? HDD лопнет?
Самодокументируемый код - это хорошо, он у на всех моих проектах самодокументируемый был. А толку-то? На том же проекте, что я упоминал выше, был случай. Ключевого разработчика сократили (того-самого; потом, правда, через месяц взяли обратно, а еще через полгода сократили еще раз, уже окончательно). Закачик сказал - в рачетах ерунда какая-то. Посмотрите. А там расчет всего на свете в один заход. Анализ трафика за 2 года (клиент - крупная компания, владеющая 30+ мобильными операторами на всех континентах), прогнозы, учет всех нюансов условий договоров всех со всеми по всему миру и расчет прогнозируемых доходов на год вперед. Ну запустил я расчет. Он вывалил в лог 30К+ строк. Вызов около 100 разных функций и процедур. Да, они все самодокументируемые, компактные (не занимают больше одного экрана), покрыты тестами - все, как завещали гуры. А толку? Тупо прочитать все это - это задача на несколько дней. А потом нужно удержать все это в памяти, включая последовательность вызовов и всякие условия ветвлений.
-- 11.01.2022, 09:31 --Тоже около 15 лет в IT-индустрии.
Странно. Я видел ваш пост еще до того, как модератор заставил вас его немного поменять. Пост выглядел как типичный наброс от вчерашнего студента, который сейчас научит этих окостеневших динозавров новейшим достижениям науки и техники и тем самым спасет от вымирания. Я потому и не стал ничего по существу писать, а отписался анекдотом.
Иногда мне кажется что нынешние студенты легко уделают динозавров программирования и меня в том числе. Недавно заходил на кафедру и посмотрел какие названия имеют курсовые и дипломные нынешних студентов. Страшно стало. Каждый студент пишет за время учёбы несколько офигенных проектов которые раньше писали коллективы годами.
Проблема не в том, что я принял вас за студента. Проблема в том, что стартовый пост выглядел как наброс на вентилятор.
Что касается способностей студентов... Знаете, какое животное бегает быстрее всех? Секрет этого вопроса в том, что в таком виде он недоформулирован. Нужно еще дистанцию указать и другие условия. На дистанции до 1 км бегают быстро почти все, а некоторые - прямо совсем быстро. А вот если вы предложите пробежать 30 км по жаре, 99% животных вам просто скажут "да ну нафиг", а почти самым быстрым бегуном окажется, внезапно, человек. Человека обгоняет разве что верблюд, ну и может какая специально для таких случаев выведенная лошадь.
Возвращаясь к студентам. Мне даже не кажется, я точно уверен - любой студент, даже честный троечник (в смысле, сам учился, не бездельничал, просто не тянет немного) запросто обгонит меня в решении задач на литкоде или еще какой такой фигне. А вот давайте посоревнуемся в ведении сложного проекта на протяжении 10 лет, например... Ну, я могу посочувствовать студенту. Будет переписывать все с нуля каждые 2 года по ночам
Здесь я уверен в своих силах.