Фундаментализм в неожиданных областях
Эта тема часто поднимается в профильных соцсетях, включая собственные ресурсы компании, и почему-то она вызывает болезненную реакцию. Для начала, функция клонирования самого класса «строка» на самом деле ничего не клонировала, а лишь создавала ещё один указатель на начало области памяти, где строка хранится. Это знали все разработчики, для кого это было принципиально важно. Исторически в библиотеке существовала функция копирования строки, которая какое-то время работала, но недавно её объявили устаревшей и добавили комментарий с призывом не использовать в будущих версиях библиотеки. В чём сыр бор?
С точки зрения компании-разработчика программистам не нужна копия строки, потому что строка — объект неизменяемый. Раз создана, строка навсегда остаётся неизменной в той области памяти, куда её поместил исходный код, независимо от её источника. Любые операции над строкой приводят к созданию её изменённой копии, например при смене регистра или замене и удалении символов. Тем не менее компания-разработчик запрещает программистам изменять строку или создавать её точную копию. С их точки зрения это настолько не нужно, что нельзя. С чего бы?
Что случится, если программист изменит строку, например при необходимости перевести её в другой регистр? Если бы это разрешалось, то операция не приводила бы удвоению требуемого размера памяти. Казалось бы, это прекрасно, но почему-то настолько неприемлемо для Microsoft, что они приняли против этого меры и продолжают, отвечая на соответствующие вопросы в Интернет в негативном ключе. Что случится, если программист создаст точную копию строки? Он всего-навсего займёт ещё столько же байт в памяти, что всё равно случилось бы, используй он предоставленные Microsoft библиотечные функции. Казалось бы, это не имеет ни для кого больше никакого значения, но почему-то настолько неприемлемо для Microsoft, что они приняли против этого меры и продолжают, отвечая на соответствующие вопросы в Интернет в негативном ключе. В чём же дело?
Особенно странным кажется это положение дел, принимая во внимание всё равно существующую возможность склонировать строку через промежуточный массив символов. Microsoft что, борется с ветряными мельницами? Складывается такое впечатление, особенно после прочтения ответов её сотрудников на вопросы удивлённых программистов. Все они следуют общему правилу не допустить клонирования или изменения строк любой ценой, включая хамство, личные нападки, высмеивание и другие технологии информационной войны. Да что тут творится?
С одной стороны, искусственное стимулирование спроса на аппаратное обеспечение путём замедления и разбухания обеспечения программного осведомлённые участники индустрии ИТ подозревают уже давно. Строки бесспорно являются самыми большими объектами, которые ПО хранит в памяти, поэтому принудительное создание копии фактически удваивает объём оперативной памяти, суммарно требующийся для этой отрасли. Недавний скачок цен, повторяющий такие же предыдущие, указывает на полезность такой практики для производителей. Но с другой же компания-разработчик запрещает явно создавать клоны! Да что здесь происходит?
Бытуют убеждения в том, что слово имеет особый статус. Одни сторонники таких взглядов уверены в том, что ценность слова превосходит ценность действия, что слово само по себе способно материализоваться. Другие убеждены в том, что слова нельзя изменять. Сложите два и два, и вы получите полное совпадение с практикой, применённой в библиотеке .NET, бессмысленной с точки зрения кибернетики. Что это? Личная инициатива какого-то разработчика? Врядли, ведь налицо информационная война по защите этого подхода, в которой участвуют множество бойцов. Возможно, это политика компании? Ладно, чёрт с ними, пусть бесятся, но результат-то оказывает влияние и на ничего не подозревающих пользователей, которые сидят и ждут, пока ПО покажет им каталог товаров или переведёт их средства со счёта на счёт.
Ни для кого в отрасли не секрет, что положение Microsoft, как лидера в области средств разработки, несколько лет назад пошатнулось, и произошёл исход разработчиков в Python, Ruby, и другие сторонние языки и технологии. С .NET и SQL Server соскакивают толпами. Казалось бы, у фундаменталистов в компании должно было что-то шевельнутся в голове, но нет: догмы продолжают затмевать их разум. Так бывает с каждым, кто оглядывается на вдолбленные им убеждения, вместо того чтобы руководствоваться научным подходом.
Как следовало поступить? Гибко. Одни операции со строками выгоднее делать на копии, например удаление или добавление символов, в результате чего строка или сокращается, или удлиняется, но и на оригинале их вполне можно провести, хотя иногда и с падением производительности. Другие операции, например любая замена символа на символ, как при смене регистра и в других случаях, прекрасно работают на оригинале. Любые запреты должны иметь под собой веское основание, и при наличии в библиотеке .NET подсистемы «небезопасных» вызовов, которые дают прямой доступ в память, они бессмысленны и лишь затрудняют и удлиняют разработку. Но гибкость почему-то недопустима для компании-разработчика и воспринимается в штыки.
Личные убеждения хороши, когда они никому не приносят вреда. Читай свои книги дома, тверди свои заклинания дома или в каком-нибудь клубе по интересам, но сам и себе. Поскольку строки, как уже упоминалось, - это самые большие объекты в памяти компьютерных систем, и работа с ними — это самая медленная операция, любые отклонения от оптимальных подходов ощутимо ударяют по глобальному кошельку человечества. Каждый из нас, может быть, и не чувствует ущерб, пока сидит и ждёт, чтобы в браузере отрисовалась страница магазина или банка, или текстовый редактор произвёл глобальную замену слова, но секунды ожидания складываются в минуты, они в часы, а те в дни глобально, для всего человечества. Так фундаментализм компании-разработчика тянет человечество за ноги на дно. Кому-то приходится поднимать цены, другим увольнять сотрудников, а третьим вести войны. Волнует ли это фундаменталиста, для которого слово важнее дела, а его неизменность важнее всех остальных соображений? Врядли.
В истории было несколько моментов, когда личный фундаментализм можно было навсегда сбросить и поставить во главу угла научный подход, но каждый раз эта возможность была упущена. В результате мы расхлёбываем упорное стремление фундаменталистов навязать свои убеждения окружающим. Это в очередной раз доказывает неспособность человечества расставлять правильные приоритеты и его стремление сосредоточиться на второстепенном в ущерб главному. А в результате творится дурдом.
Свидетельство о публикации №226071201602