vit_r: default (vit_r)
[personal profile] vit_r
Замечаете ли вы странности в следующем ряду?
'127'
'238'
'301'
'11Z'
'281'
'109'
'118'


Да, среди цифр затесалась буква 'Z', очень похожая на двойку.

Это из сегодняшнего. И, судя по всему, двойка там и должна была быть. Причём, разных значений там не семь, а больше сотни.

Каждый раз читая посты [livejournal.com profile] ivan_gandhi, [livejournal.com profile] orleanz и других восхищённых проповедников функционального программирования, думаю: «Выглядит-то оно замечательно. Но что останется от этой красоты, после того, как туда вставить хотя бы банальную трассировку?»

Потому что правильная программа - это не та, которая падает, дрыгая ножками, получив на входе значение, не входящее в область определения изящной функции.

Это не та, которая сообщает пользователю «Вася, ты дурак! А ну-ка быстро исправь бяку!»

Вася может быть в другой стране, в другом часовом поясе и вообще не понимать, о чём идёт речь.

Это также и не та программа, что тихо пишет какие-нибудь умные размышления в потаённые логи, который никто никогда не смотрит.

И, естественно, не та, которая думает, что неправильные входные данные - правильные, в на выходе производит горы мусора.

Правильная программа пережёвывает всё это дерьмо и выдаёт результаты, которые конечный пользователь может применять в своей деятельности. Это, кстати, относится и к сообщениям об ошибках.

Welcome to the real world, товарищи математики!

Date: 2014-12-11 01:33 pm (UTC)
From: [identity profile] swamp-agr.livejournal.com
Несколько смелый переход от Z к ФП.
Одна из фич ФП - это алгебраические типы данных.
С их помощью можно обыграть ситуацию с Z и другими "левыми" символами с лёгкостью, ещё даже легче, чем мейнстримные технологии (субъективно легче).
Некоторые так и делают. И если это делают не все, то из этого не следует, что ФП не подходит для решения задач реального мира.

Для примера, в офисе приходится генерировать 560 LoC в ходе реализации какой-то фичи. Дома идентичный функционал обыгрывается с помощью ФП (Haskell) в 25 LoC. Код ФП пишется тяжелее, но читается легче. Пространственно-временнные замеры показывают, что ФП не уступает по времени/ресурсам мейнстриму.

Date: 2014-12-11 01:38 pm (UTC)
From: [identity profile] vit-r.livejournal.com
С их помощью можно обыграть ситуацию с Z и другими "левыми" символами с лёгкостью, ещё даже легче, чем мейнстримные технологии

Нет такого "всего", чего бы нельзя было сделать теоретически. А на практике получается жопа.

И какие там данные, никто не узнает, пока не поймаешь ошибки. Потому что доверять нельзя никому. Даже себе.

Date: 2014-12-11 01:45 pm (UTC)
From: [identity profile] swamp-agr.livejournal.com
Про практику и говорю.
Субъективный опыт показывает следующее:
* Java, Perl, C++, PHP, C#: быстрая реализация -> баги, каверзные баги, race condition, многочасовая отладка.
* J, Haskell: тяжелая реализация -> ни одного падения, ни одного зависания, ни одной ошибки, все сообщения о невалидных входных данных читаемы, понятны.

Конечно, понимаю, что опыта - шишек набито - мало для суждения.
Возможно, через пять лет буду рассуждать иначе. Но сейчас так.

Date: 2014-12-11 03:10 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Пардон, когда система стоит у клиента и ежедневно выдаёт данные, характеристика "тяжелая реализация" однозначно означает неприменимость.

Кстати, у меня на Perl и C++ не выполняется условие "баги, каверзные баги, race condition, многочасовая отладка". Что я делаю не так?
(deleted comment)

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-11 04:43 pm (UTC) - Expand

(no subject)

From: [identity profile] swamp-agr.livejournal.com - Date: 2014-12-12 05:25 am (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-12 08:20 am (UTC) - Expand

(no subject)

From: [identity profile] swamp-agr.livejournal.com - Date: 2014-12-12 08:52 am (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-12 09:59 am (UTC) - Expand

(no subject)

From: [identity profile] swamp-agr.livejournal.com - Date: 2014-12-12 12:01 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-12 12:09 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-12 12:12 pm (UTC) - Expand

(no subject)

From: [identity profile] swamp-agr.livejournal.com - Date: 2014-12-12 01:04 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-12 08:57 pm (UTC) - Expand

(no subject)

From: [identity profile] swamp-agr.livejournal.com - Date: 2014-12-12 09:02 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-12 09:06 pm (UTC) - Expand

(no subject)

From: [identity profile] swamp-agr.livejournal.com - Date: 2014-12-13 01:17 pm (UTC) - Expand

(no subject)

From: [identity profile] swamp-agr.livejournal.com - Date: 2015-09-14 08:57 pm (UTC) - Expand

Date: 2014-12-11 06:20 pm (UTC)
From: [identity profile] sab123.livejournal.com
И наверное именно поэтому в примерах в книжках про ФП - просто ошибки на ошибках.

(no subject)

From: [identity profile] swamp-agr.livejournal.com - Date: 2014-12-12 05:27 am (UTC) - Expand

(no subject)

From: [identity profile] sab123.livejournal.com - Date: 2014-12-12 07:38 am (UTC) - Expand

(no subject)

From: [identity profile] swamp-agr.livejournal.com - Date: 2014-12-12 07:53 am (UTC) - Expand

(no subject)

From: [identity profile] rdia.livejournal.com - Date: 2014-12-14 06:17 am (UTC) - Expand

(no subject)

From: [identity profile] sab123.livejournal.com - Date: 2014-12-14 06:47 am (UTC) - Expand

Date: 2014-12-11 01:47 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Нет, на практике с ФП получается сильно легче, особенно вот в таких случаях.
Заворачиваем в тип
"ХорошиеДанные(int) | ПлохиеДанные (строка)" и протаскиваем его до того места, где есть хоть что-нибудь или кто-нибудь, способное разобраться и сконвертировать это в настоящий int

Date: 2014-12-11 03:07 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Я уже написал, что "протаскивать" придётся в другую страну в организацию, с ИТ мало чего общего имеющую.

Это не мелкая обозримая компания, это энтерпрайз, где маленький отдел где-то по размерам с такую компанию.

Правильная тактика - это установка заплатки. Временной, чтобы ошибка не мешалась другим процессам, а потом постоянной, потому что "Мир так устроен".

(no subject)

From: [identity profile] perdakot.livejournal.com - Date: 2014-12-11 03:53 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-12-11 03:58 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-11 03:59 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-11 04:00 pm (UTC) - Expand

Date: 2014-12-11 01:38 pm (UTC)
From: [identity profile] rudakov.livejournal.com
Но мне все-таки кажется, что предупреждение о несоответствующих входных данных должно быть. Как и логи – хотя бы один, но нормально доступный, а не потаенный.

Date: 2014-12-11 03:13 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Не работают предупреждения. Единственный способ адекватного восприятия пользователем - это дотащить до выходных данных сообщение "А вот тут значение выдано быть не может, потому что во входных данных вот такая-вот фигня"

Сообщения об ошибках в процессе работы приводят только к бесполезному общению и попыткам объяснения того, что софт делает только то, что нужно, а не то, что хочется.

Логи - это просто из серии "забыть"

Date: 2014-12-11 09:23 pm (UTC)
From: [identity profile] rudakov.livejournal.com
Выступаю как админ: логи должны быть, но они, конечно же, не для пользователей. Предупреждения, кстати, туда лучше сбрасывать – если они на процесс не влияют, то пользователю их видеть не нужно.

А вообще для пользователей любая программа должна представлять собой одну большую кнопку "Пуск" и больше ничего. Даже маленькая кнопка "Дополнительно" в уголке окошка – уже большой вопрос, поскольку кто-нибудь туда обязательно залезет и что-нибудь поломает.

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-11 10:05 pm (UTC) - Expand

Date: 2014-12-11 02:53 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
>Правильная программа пережёвывает всё это дерьмо и выдаёт результаты, которые конечный пользователь может применять в своей деятельности. Это, кстати, относится и к сообщениям об ошибках.

Если это можно сформулировать четко и непротиворечиво, получится все та же математика. Не вижу противоречия с реальным миром.

Больше логики и непротиворечивости - больше математики, меньше багов.
Меньше логики и непротиворечивости - меньше математики, больше багов.

Date: 2014-12-11 03:04 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Если это можно было бы сформулировать четко и непротиворечиво, мир был бы гораздо лучше.

Речь не идёт о результатах хитрых идей. Есть ошибки, с которыми приходится сосуществовать. Причём, производить из ошибочного правильное.

Больше логики и непротиворечивости - больше математики, меньше багов.
Меньше логики и непротиворечивости - меньше математики, больше багов.


Этак можно тысячу багов заменить одним: "Программа не работает"

Date: 2014-12-11 03:25 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Производить из ошибочного правильное - вполне себе математически допустимое действие. Расширили область определения (иногда заодно и область значений функции) и работаем дальше.
Математика тут добавляет возможность внятно рассуждать о происходящем и решать задачу наиболее правильным методом, минимизируя количество заплаток на частные случаи.

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-11 03:43 pm (UTC) - Expand

Date: 2014-12-11 04:14 pm (UTC)
From: [identity profile] anonim-legion.livejournal.com
Вам в копилку ехидства:

-------
Есть технологии из разряда "Берешь и делаешь", а есть технологии из разряда "Человечество осуществило посадку зонда на комету, но так и не научилось выравнивать блоки с помощью CSS".
-------

Date: 2014-12-11 04:36 pm (UTC)
From: [identity profile] vit-r.livejournal.com
При посадке на комету а) не закрепились гарпуны и б) не сработали прижимные двигатели (если бы скальной стенки не было бы, он мог бы вообще улететь мимо кометы), в результате чего в) зонд вместо полярной области оказался в тени гор, что снижает период его освещённости до 90 минут.

Так что с зондами тоже всё в порядке.

Date: 2014-12-11 04:19 pm (UTC)
From: [identity profile] anonim-legion.livejournal.com
Вообще для предотвращения вот такой фигни в базе были придуманы домены (которых нигде нет) и констрейнты (которыми пользоваться в больших конторах вроде вашей не хотят, потому что умные люди туда на постояную работу не пойдут).

Трассировка как раз монадами и реализуется.

Логи люди таки читают. Умение читать журнал системых событий винды сильно облегчает жизнь.

И так далее...

Date: 2014-12-11 04:50 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Есть много способов делать правильно. И тут, даже, банальные мозги важнее всех хитрых штучек. Но применяется это редко.

Тем более, что в больших системах данные приходят откуда угодно, хоть из Ексел-таблицы секретарши.

То, что я видел как попытки трассировки на монадах, критики не выдерживает. Теоретически может и проще, практически пока что функциональные люди работают в мире без ошибок.

Пользователи не читают ничего, даже инструкции. Сажать рядом с ними бакалавра компьютерных наук, чтобы лазил по логам, занятие слишком дорогое и вряд ли реализуемое.

Date: 2014-12-11 05:09 pm (UTC)
From: [identity profile] anonim-legion.livejournal.com
Если пользователь не читает инструкцию, я к нему приду, а он скажет, что то-то и то-то сделать не может, потому что потому. Потом выяснится, что он неправ, а фирма потеряет клиента. Возможно, работнику сделают выговор, если я пожалуюсь на его некомпетентность. А нервный клиент такому "нечитающему" сотруднику может и нос сломать.

Поэтому, неправильно говорить о том, что люди-де не читают и это нормально. Не нормально. Я согласен с тем, что программы пишутся для облегчения работы, а не для создания проблем. НО ваши предложения в комментариях - вешать временные заплатки, которые станут постоянными - это создание еще бОльших проблем на будущее.

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-11 05:28 pm (UTC) - Expand

Date: 2014-12-11 04:28 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Сегодня противопоставлять ФП и реальный мир уже поздновато как-то. Как рассуждать о том, заработает ли сотовая связь в реальном мире. В лице первоклассных функций, лямбд, иммутабельных коллекций, общих идей и всяких частностей, вроде аппликативных функторов, ФП уже проникло во все основные языки, кроме самых закостенелых.

То, что где-то по организационным причинам нельзя использовать языки А и Б, а можно только COBOL, скажем, не мешает другим людям в других ситуациях те языки использовать с успехом.

Date: 2014-12-11 04:40 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Мало ли, что на заборе написано.

Я знаю языки, где процентов 80 красивых штучек просто не используется. В большинстве серьёзных контор есть стандарты, где стоит "За попытки вот такие красивости изобразить - вызов на ковёр с докладом, почему не получается с делать по-человечески, а вот за такое - канделябром по башке сразу"

И бьют. Причём, больно.

Не потому, что "старые закостенелые ретрограды", а потому, что знают, во что это выливается в реальных условиях.

Edited Date: 2014-12-11 04:41 pm (UTC)

Date: 2014-12-11 04:51 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Ну тогда лишь остается порадоваться за всех тех из нас, кто работает в нереальных условиях и не имеет таких канделябриационных ограничений.

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-11 05:31 pm (UTC) - Expand

Date: 2014-12-11 06:19 pm (UTC)
From: [identity profile] sab123.livejournal.com
На самом деле - никакой противоположности. Программы в ФП пишутся именно таким образом, методом тыканья в разные стороны в темноте пока оно кое-как не заработает при оптимистических условиях. Что произойдет при других условиях - никто не знает.

Date: 2014-12-11 06:42 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Сейчас большинство программ пишется по принципу "Пока ошибка не видна, её нет"

В принципе, в телекоммуникациях достаточно хорошая область данных и Эрланг прекрасно работает. Только там в программировании больше инженеров чем информатиков.

Date: 2014-12-11 07:29 pm (UTC)
From: [identity profile] sab123.livejournal.com
Вообще говоря, нет. Сейчас как раз широко распространилось автоматизированное тестирование. А agile - так прямо стоит на нем.

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-11 07:48 pm (UTC) - Expand

(no subject)

From: [identity profile] sab123.livejournal.com - Date: 2014-12-12 02:42 am (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-12-12 08:22 am (UTC) - Expand
From: [identity profile] livejournal.livejournal.com
User [livejournal.com profile] swamp_agr referenced to your post from Промежуточные итоги дискуссии о ФП и реальном мире (http://swamp-agr.livejournal.com/40383.html) saying: [...] По итогам дискуссии [...]

Profile

vit_r: default (Default)
vit_r

January 2026

S M T W T F S
    12 3
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 9th, 2026 09:41 am
Powered by Dreamwidth Studios