tower of weaking (tribute)
Mar. 19th, 2024 02:39 pmЕсли при чтении кода какого-то ПО человеком, который это ПО только использовал, ему всё понятно, значит, это ПО не прячет сложность.
Хорошее ПО прячет сложность от пользователя. Это означает, что исходный код ПО содержит в себе сложность, о которой потребитель ПО не знает. Наоборот, если потребитель очень хорошо знает эту сложность, ПО плохо её прячет.
Из этого можно сделать вывод, что большая часть хорошего ПО очень сложна. Можно даже довести до максимы, чем более в использовании простое ПО, тем оно сложнее для чтения.
Хорошее ПО прячет сложность от пользователя. Это означает, что исходный код ПО содержит в себе сложность, о которой потребитель ПО не знает. Наоборот, если потребитель очень хорошо знает эту сложность, ПО плохо её прячет.
Из этого можно сделать вывод, что большая часть хорошего ПО очень сложна. Можно даже довести до максимы, чем более в использовании простое ПО, тем оно сложнее для чтения.
no subject
Date: 2024-03-19 01:55 pm (UTC)Забавная мысль. А ведь возможно, что сложность просто не очевидна.
no subject
Date: 2024-03-19 03:27 pm (UTC)no subject
Date: 2024-03-19 05:20 pm (UTC)Hу вас послушать, так получается, что качество продукта оценивается по неспособности пользователя понять суть вещей. Это странно. С другой стороны, насчет простого интерфейса - тут я двумя руками за.
no subject
Date: 2024-03-20 09:47 am (UTC)На самом деле моё рассужение про обратный путь - есть софт хороший, то он обязан содержать в себе неведомую хтонь, о которой опытный пользователь никогда не думал до чтения сырцов.
no subject
Date: 2024-03-20 10:19 am (UTC)Я все больше перестаю понимать. Можно на примерах, для простого народу? Вот
xargs, илиgrep, илиcurl, илиncdu- они входят в этот узкий круг загадочных утилит?no subject
Date: 2024-03-20 11:36 am (UTC)xargs - хороший пример. Все умеют пользоваться xargs, и он работает волшебно просто.
Открываем сырцы:
...
...
...
ifdef SIGUSR1
ifdef SIGUSR2
/* Accept signals to increase or decrease the number of running child processes. Do this as early as possible after setting proc_max. */ sigact.sa_handler = increment_proc_max; sigemptyset(&sigact.sa_mask); sigact.sa_flags = 0; if (0 != sigaction (SIGUSR1, &sigact, (struct sigaction *)NULL)) error (0, errno, _("Cannot set SIGUSR1 signal handler"));
sigact.sa_handler = decrement_proc_max; sigemptyset(&sigact.sa_mask); sigact.sa_flags = 0; if (0 != sigaction (SIGUSR2, &sigact, (struct sigaction *)NULL)) error (0, errno, _("Cannot set SIGUSR2 signal handler"));
endif /* SIGUSR2 */
endif /* SIGUSR1 */
...
/* Failures here are undesirable but not fatal, since we can still guarantee that this child does not have a duplicate value of the indicated environment variable set (since the parent unset it on startup). If the user doesn't want us to set the variable, there is nothing to do. However, we defer the bail-out until this point in order to get better test coverage. */ ...
... /* we know the child is about to exit, so wait for that. * We have to do this so that wait_for_proc () does not * change the value of child_error on the basis of the * return value -- since in this case we did not launch * the utility. * * We do the wait before deciding if we failed in order to * avoid creating a zombie, even briefly. */ ...
И это только малое подмножество нюансов внутри. Там ещё отдельно работа с системами с локалью и без, правильное поведение в нескольких edge-case'ах.
Я увидел больше, чем хотел знать. xargs - чертовски хорошая утилита, скрывающая огромный пласт сложности по правильному запуску процессов.
Про curl я даже говорить не буду - с той стороны бездна с миллионом разных шифроалгоритмов, поддержкой антиквариата и bleeding edge. Оба - очень хорошие утилиты, скрывающие бездну внутри себя.
no subject
Date: 2024-03-20 12:09 pm (UTC)О да; но разве кто-то считает xargs простой штучкой? Да и много ли народу ее знает? Я каждый раз, когда меня спрашивают, что подучить, советую изучать xargs. И да, заглянув в эту бездну, начинаешь ещё больше ужасаться, конечно.
no subject
Date: 2024-03-20 12:10 pm (UTC)no subject
Date: 2024-03-23 02:18 am (UTC)no subject
Date: 2024-03-27 12:14 pm (UTC)А как насчёт того, чтобы похвалить хорошее?
no subject
Date: 2024-03-28 03:57 am (UTC)И об интересе к плохому: https://telegra.ph/Pochemu-vezde-tolko-plohie-novosti-10-05
no subject
Date: 2024-03-28 10:09 am (UTC)А вот я обнаружил, что минимальное внимание к хорошему резко повышает продуктивность. Нашёл хорошее? Цепляйся к нему и старайся использовать по-максимуму, и тогда вокруг тебя будет больше хорошего.