продолжая беседу
Mar. 9th, 2018 08:34 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Т.к. есть такое европейское мнение, что рефакторинг - это метросексуальный аджальный метод продажи навоза юзерам, то я вдруг задумался - а что в Европе делают, когда их хакают и информацию воруют? Ну понятно, против воровства в Европе есть законы, например, GDPR; а в Швейцарии так даже масс шутинги запрещены (это мне швейцарцы когда-то сказали); но вот если случилось, так что тогда? Компьютеры сжигают на свалке, покупают новые, и пишут для них новые программы?
Ведь, я слышал, в Европе сначала на Z-notations и на Rational Rose весь дизайн правильно напишут, так что европейская программа не может быть неправильной, так что и рефакторить там нечего. Она совершенна.
И вот если она сломалась, то чо. Неужели с нуля переписывают?
Тесты-то понятное дело что не нужны; программист выполняет приказ менеджера, а менеджер не может ошибаться; и только плохой программист пишет код с ошибками. Немецкий код работает везде и без ошибок. Ой, тут сразу вспоминается Энигма, и три ушлых поляка, которые ее кракнули как раз перед Второй Мировой.
Ведь, я слышал, в Европе сначала на Z-notations и на Rational Rose весь дизайн правильно напишут, так что европейская программа не может быть неправильной, так что и рефакторить там нечего. Она совершенна.
И вот если она сломалась, то чо. Неужели с нуля переписывают?
Тесты-то понятное дело что не нужны; программист выполняет приказ менеджера, а менеджер не может ошибаться; и только плохой программист пишет код с ошибками. Немецкий код работает везде и без ошибок. Ой, тут сразу вспоминается Энигма, и три ушлых поляка, которые ее кракнули как раз перед Второй Мировой.
no subject
Date: 2018-03-10 07:38 am (UTC)no subject
Date: 2018-03-10 09:28 am (UTC)no subject
Date: 2018-03-10 09:56 am (UTC)No, not of correctness, but only that the corresponding theorem is proven.
Example:
Function a: List -> b: List sorts list a, if b_i <= b_(i+1) for all i.
Then functions
duh _ = []
duh2 xs = [head xs | _ <- xs]
clearly satisfy that theorem.
So one needs to start with the correct theorem involving a proposition that the output list is necessarily a permutation of the input list. How does one prove the "correctness" of the theorem?
no subject
Date: 2018-03-10 02:14 pm (UTC)no subject
Date: 2018-03-10 05:05 pm (UTC)і проміжок між "треба відсортувати" (постановкою ТЗ) та записом у вигляді теореми.
(no subject)
From:no subject
Date: 2018-03-10 11:16 am (UTC)А недавно вот я сам наблюдал как чел на конфе дизайн в пэйнте лайф рисовал. Да, прям вот так, прямоугольничками и текстом. Architect lead, кстати.
Кстати да, EA у нас тоже юзают.. те же люди, которые весь код в виме пишут. Это наверное правильные программисты.
no subject
Date: 2018-03-10 11:29 am (UTC)В случае изменений это называется не рефакторингом, а "исправлением ошибок модели" или "внесением новых требований".
И вот если она сломалась, то чо.
То, что бывает, когда сломалась программа управления педали газа, наглядно показала Тайота. Судя по слухам, там внутренности сделаны совсем не по-немецки. Видимо, теоретиков новых подходов начитались.
no subject
Date: 2018-03-10 03:43 pm (UTC)Насчет педали газа - у Тойоты пластмассовая штучка блокировала эту педаль.
no subject
Date: 2018-03-10 07:06 pm (UTC)А какой подход лучше, зависит от задач. Многое прекрасно решается структурным подходом. Особенно, если в код люди практически не заглядывают, всё делают на уровне моделей.
no subject
Date: 2018-03-10 09:19 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-03-10 09:00 pm (UTC)Рекурсию, Карл!
В общем, переполнение стека, вот это вот все.
https://users.ece.cmu.edu/~koopman/pubs/koopman14_toyota_ua_slides.pdf
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-03-10 11:36 am (UTC)no subject
Date: 2018-03-10 04:03 pm (UTC)С другой стороны, японские производители что, каждый год с нуля пишут софт для новой модели автомобиля? Про японских не знаю, а для Форда точно не с нуля.
Мои телевизоры апгрейдится регулярно, например. И мои японские машины тоже, каждый раз, как в сервис приволоку.
Короче, попробую открыть вам глаза на природу софтвера.
Это две разные вещи, деплоймент и девелопмент. Никто при деплойменте рефакторинга не делает. А в девелопменте это то, что мы и делаем все время.
Это ничего, что вы не в курсе; плохо, что вы, будучи не в курсе, несете всякую чушь, чисто как зритель с трибун. Bay Area не угодила, надо же. Плохо мы тут программируем. Твитер с фейсбуком, хром с андроидом, гугл и эпл, нетфликс и линктин недостаточно хороши, надо же. Давайте их заменим японскими или немецкими.
no subject
Date: 2018-03-10 06:30 pm (UTC)Твиттер с Мордокнигой и Гугль с Хромом - это безобразный код, и в плане ресурсоёмкости, и в плане совместимости. Нормальный код - повторюсь, - это код в вайфай-карточке, бейзбанде сотового телефона, в контроллере SSD или жёсткого диска, в авионике и том же автопроме, когда устройство может работать непрерывно десятилетиями без единого сбоя. И да - такой код пишется в подавляющем числе случаев на ANSI C, поскольку модные ныне языки просто не дают нужного уровня контроля над кодом, а "компилятор лучше знает" и "если что - выделим ещё мощностей в AWS" в машинах и самолётах не прокатывает. Вот когда эмбеддеры на джаваскрипте и скале начнут писать авионику - тогда я готов буду признать, что это именно я чего-то недопонимаю, but till they don't, I doesn't too, for sure. :)
P.S.: по поводу рефакторинга - когда изначально спроектированная система в процессе написания конечного кода требует именно рефакторинга (т.е. переделки изначальной модели) - это всегда означает проблемы проектирования и аналитики модели. Это примерно как если бы в линуксе бы с каждым изменением в какой-нибудь внешней библиотеке приходилось бы переписывать куски ядра. Рефакторинг - это необходимая вещь, но не в процессе разработки, а в процессе изменения/расширения первоначального проекта, а-ля смена мейджорной версии и расширения функциональности, а если это процесс оказывается постоянным, то о качестве работы архитекторов системы очень сложно говорить в ползитивном ключе.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-03-11 03:26 pm (UTC)Говно.
>хром с андроидом
Дважды говно.
1.
Все мы знаем сайты с бесконечной прокруткой. Началось это безобразие с твиттера, потом дошло до Tumblr и далее везде. Пользователь докручивает страницу до низа, она снизу подгружается, и так без конца. Обычно это сопровождается отсутствием поиска по дате и вообще какого бы то ни было поиска.
Рано или поздно любая подобная страница начинает тормозить, потому что элементов в ней становится больше, чем способен вовремя обработать движок браузера и какие-то промежуточные скрипты на странице. Внимание, вопрос — а почему никто вместе с добавлением элементов в конец страницы не удаляет их из начала? То есть, после определённого количество "разрастаний" страницы, добавление каждого следующего элемента ленты влечёт за собой еще и удаление элемента из начала. В результате, страница будет иметь хоть и большой, но всё же конечный размер.
2.
Проблема: в некоторых случаях браузер жрёт немерянно много памяти. С недавних пор Firefox стал 64битным и не ограниченным адресным пространством в 2гб. Вдобавок, он еще и многопроцессный. Иногда, видимо из вредительских целей, вкладки с google translate на некоторых сайтах отжирают по 6 ГБ, а все процессы браузера - больше 12ГБ, и через некоторое время вся система уходит в жесткий своппинг.
В браузере такой настройки "не жрать, сука!" почему-то нет. Job objects, которые виндовые ограничения, не могут быть вложенными (начиная с Win 8 могут, но у меня Win 7), а Firefox уже использует оные job'ы для своих дочерних процессов, и еще одно ограничение наложить не получается.
Какая же дрянь это современное айти.
no subject
Date: 2018-03-11 12:57 am (UTC)how much of that code is there?
"а не трудной и кропотливой работой"
трудная и кропотливая работа doesn't scale. Don't work hard.
"Самый лучший пример - ..."
Proof by example? Ok, here's another example.
The OVA we sold also rarely needs refactoring (after we sold it). And we rarely refactor it, as long as we can sell it, and do not spend cycles to make it do new things.
See? We don't refactor things, because we can sell them. And if we can keep selling it without making changes, why would we make any changes to it? The absence of refactorings is not a measure of anything; it only indicates the absence of a business need.
The example with Toyota and their software is not the proof (by example!) of the evils of recursion and the drawbacks of being too clever a programmer. It is the invalidation of the theory that just having the famed development procedures and best practices is what makes the embedded code exceptional.
"хренак-хренак и в продакшн"
is a meaningless analogy. The "продакшн" part for AWS services and embedded mean different things. We can start selling AWS service at the beginning of its lifecycle. You can start selling embedded software only at the end of its lifecycle. All these musings about embedded software development is being somehow superior, is nonsense. You simply can't sell embedded software until all the refactorings (others prefer to proudly call it "fixing bugs in the model") happened.
The difference in when things are sold is hardly anything to do with software engineering (or computer science for that matter).
no subject
Date: 2018-03-11 01:07 am (UTC)That's if they are going to close the engineering dept after release. If not, if they plan to build the next version the next year, they either refactor, or write from the scratch.
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-03-11 01:48 am (UTC)Если хочется работать программистом и при этом не трудиться, то лучше выбрать другую профессию, поскольку лёгкая работа не бывает качественной (лучше даже не начинать спорить, - эта тема вообще выходит далеко за рамки программирования и точно так же работает в искусстве, к примеру).
"We can sell" к качеству кода имеет весьма опосредованное отношение, поскольку среднестатистический потребитель оценивает всё, что угодно, но не этот параметр, - у него элементарно нет для этого должной квалификации (а если есть, то это кошмар аутсорсера). Например Canon долго использовал в своих продуктах VxWorks, но потом задолбался получать дебильный саппорт от Уиндривера, который трабл-тикеты патчил месяцами, если не годами, и с 2006-2007 года перешёл на свою собственную самописную Dry OS. Речь выше была несколько про другое: рефакторинг в процессе перевода модели в код законченного продукта говорит о проблемах архитектуры системы, т.е. о недостаточной проработке, - в том числе это касается и математического подхода, который Влад декларирует единственно верным: при работе с железом соблюдение концептуальных правил программирования из сферы ФП никак не поможет, это разные миры с разными требованиями.
Разумеется, - я примерно о том же регулярно говорю здесь: different programming styles and rules are not better or worse, only usable or useless in different use cases. Просто в случае, если производитель выпустит SSD или винт с плохим кодом в фирмвари, то он может легко прогореть, а если стартап, ваяющий на джаве или скале, напишет клиенту тормозной, но в целом рабочий говнокод, то маркетинг может навешать лапшу про то, что-де код офигеть какой сложный, так что надо купить ещё два шкафа серверов и всё будет зашибись. Я уже тут как-то приводил пример с одним моим клиентом - повторюсь: как-то меня позвали на обсуждение, как заказчику собрать почтовый сервис. Как, говорю, - postfix/dovecot, отдельный сервер с базой данных и файловым хранилищем почты, система бэкапов, - всё реализуется на двух рэковах одноюнитовых серверах (с резервированием - на трёх), стоит копейки. На меня так посмотрели и сказали - гм, это всё хорошо, но мы на таком решении не заработаем. В результате сделали какой-то немыслимый огород на десяти (!) серверах, причём с AD, Forefront, HyperV, резервированием, выносом виртуалок на фиберченнеловскую полку, везде понаставили Windows Server 2012, общей ценой всего примерно в лям, при этом за год, пока я это всё наблюдал, майкрософтовский админ постоянно что-то чинил, два раза с приходом апдейтов умирал RDP сервис во всех виндах одновременно и приходилось ездить в датацентр, чтобы вручную через консоль поставить все апдейты заново и т.п. Вот как раз второй подход характерен для свежих модных ФП стартапов. :)
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2018-03-11 03:31 pm (UTC)Doesn't web scale?
>We can start selling AWS service at the beginning of its lifecycle.
И это явление нужно засунуть обратно, туда, откуда оно вылезло. И еще добавить к софту гарантийные требования, вместо "AS IS".
(no subject)
From:(no subject)
From:no subject
Date: 2018-03-10 02:45 pm (UTC)http://www.zdnet.com/article/skype-cannot-fix-security-bug-without-a-massive-code-rewrite/
no subject
Date: 2018-03-10 04:04 pm (UTC)no subject
Date: 2018-03-10 07:04 pm (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2018-03-10 07:05 pm (UTC)no subject
Date: 2018-03-11 07:28 am (UTC)no subject
Date: 2018-03-11 02:50 pm (UTC)