вот еще тема "про программирование"
Feb. 22nd, 2019 02:02 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Памяти сейчас много стало; большое количество кода вполне манипулируемо. И уже эпоха маленького кода, в стиле интервью, прошла.
Прошла также эпоха джавабинзов, адаптеров, адаптерменеджеров, и всякой этой нелепой ахинеи, придуманной досужими бангалорскими браминами.
Код должен:
- быть хорошо абстрагирован
- быть читабелен
- быть хорошо модулирован
- быть тотален
- не мусорить в логах
- радовать глаз (
gxachaturov )
- переводить все случающиеся дефекты на:
-- простой человеческий
-- язык статистики и МЛ (чтоб анализировать и машины могли)
Абстракции вообще главное. Код, требующий бойлерплейт - плохой код.
Прошла также эпоха джавабинзов, адаптеров, адаптерменеджеров, и всякой этой нелепой ахинеи, придуманной досужими бангалорскими браминами.
Код должен:
- быть хорошо абстрагирован
- быть читабелен
- быть хорошо модулирован
- быть тотален
- не мусорить в логах
- радовать глаз (
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
- переводить все случающиеся дефекты на:
-- простой человеческий
-- язык статистики и МЛ (чтоб анализировать и машины могли)
Абстракции вообще главное. Код, требующий бойлерплейт - плохой код.
Не удержался
Date: 2019-02-22 10:29 pm (UTC)Re: Не удержался
Date: 2019-02-23 12:00 am (UTC)Re: Не удержался
Date: 2019-02-23 06:43 am (UTC)Не понял. Можно пример ?
Re: Не удержался
Date: 2019-02-23 05:15 pm (UTC)Смотрим на эту цепочку ссылок как на один объект (дерево, частичный порядок, категорию). Тогда ее размер не играет роли.
Re: Не удержался
Date: 2019-02-23 05:19 pm (UTC)Re: Не удержался
Date: 2019-02-23 05:22 pm (UTC)Re: Не удержался
Date: 2019-02-23 07:16 pm (UTC)no subject
Date: 2019-02-23 03:56 am (UTC)no subject
Date: 2019-02-23 04:26 am (UTC)no subject
Date: 2019-02-24 04:07 am (UTC)no subject
Date: 2019-02-26 12:14 am (UTC)You are a pirate!
no subject
Date: 2019-02-23 08:20 am (UTC)no subject
Date: 2019-02-23 05:07 pm (UTC)no subject
Date: 2019-02-23 09:07 am (UTC)То есть должен скрывать все внутренние проблемы.
Заметим, нет главного свойства:
- делать то что нужно, и не делать то, что не нужно
Плюс ещё два, о которых я сейчас не готов затевать дискуссию.
no subject
Date: 2019-02-23 12:31 pm (UTC)no subject
Date: 2019-02-23 01:08 pm (UTC)Угу. А непонятные проблемы не демонстрировать. Короче, be agile
no subject
Date: 2019-02-25 12:46 am (UTC)На кол еретика!
no subject
Date: 2019-02-25 11:17 am (UTC)no subject
Date: 2019-02-23 05:05 pm (UTC)Насчет же логов, так не мусорить - это прежде всего не рапортовать о промежуточных успехах с кучей деталей.
no subject
Date: 2019-02-23 05:08 pm (UTC)no subject
Date: 2019-02-23 05:23 pm (UTC)no subject
Date: 2019-02-23 07:17 pm (UTC)no subject
Date: 2019-02-23 08:21 pm (UTC)no subject
Date: 2019-02-24 08:53 am (UTC)no subject
Date: 2019-02-23 08:58 pm (UTC)Забыл уже, спрашивал ли - вы в своей профессии какой-нибудь proof checker используете? Ну или вообще какой-нибудь формализм, Z-notation, Pi-calculus, что-нибудь такое?
no subject
Date: 2019-02-24 08:41 am (UTC)Я сейчас не занимаюсь программированием, но когда занимался, искал баги практическим использованием кода, тесты делал и т.п. Более того - на своей первой работе я факультативно занимался QA для мультимедиа-продуктов, которые контора писала, и постоянно находил баги, которые пропускал штатный стафф QA. :) Формальные тесты - это хорошо для задач обработки данных, в которых не случается ничего непредвиденного, а в реальной жизни всё куда сложнее:
no subject
Date: 2019-02-23 07:56 pm (UTC)Э-э-э-э-э?
Во времена моей молодости это было V&V (verification & validation), но, видимо, с тех пор компьютерные науки ушли далеко вперёд.
no subject
Date: 2019-02-23 08:00 pm (UTC)Если с точки зрения "дай мне функциональность и больше ничего", то да, ваша правда; если с точки зрения "разбить задачу на части с хорошо артикулированной функциональностью", то моя.
И потом, "что нужно" - на этот счет мнения расходятся. Это как бы если немецкий автомобиль ездил только по немецким дорогам, а по нашим бы отказывался - задания не было.
no subject
Date: 2019-02-23 08:18 pm (UTC)no subject
Date: 2019-02-23 09:23 pm (UTC)no subject
Date: 2019-02-24 08:47 am (UTC)no subject
Date: 2019-02-23 11:49 am (UTC)no subject
Date: 2019-02-23 01:09 pm (UTC)References space
Date: 2019-02-23 01:25 pm (UTC)Рядом должно быть наиболее логически связанное.
Кроме того, "рядом" - это не одна координата.
Рядом может быть в тексте.
Также "рядом" может быть потому что ссылка указывает. Например, вызов функции - это тоже "рядом", даже если вызванная функция находится в совсем другом файле.
Пространство ссылок тоже лучше не замусоривать.
С этой точки зрения, наследование - опасный инструмент, потому что он часто связывает друг с другом не относящуюся друг к другу функциональность (условные Cat и Dog при наследовании от Animal связываются гораздо сильнее, чем нужно и замусоривают пространство ссылок).
Re: References space
Date: 2019-02-23 05:01 pm (UTC)Re: References space
Date: 2019-02-23 09:59 pm (UTC)Re: References space
Date: 2019-02-23 10:28 pm (UTC)https://en.wikipedia.org/wiki/Trait_(computer_programming)
Re: References space
Date: 2019-02-23 10:46 pm (UTC)Re: References space
Date: 2019-02-23 11:06 pm (UTC)Same with microservices. Basically, I don't see much of a difference; it's only the way we communicate. Can be rest, can be actors, can be regular function call.
What to bundle together
Date: 2019-02-23 11:42 pm (UTC)Right, that is the way to go with excessive complexity.
But just bundling together -- is not enough. If we bundle together irrelevant things, then such code still would be much harder to understand than more optimally bundled code.
We should bundle together things that are the most logically relevant to each other.
Re: What to bundle together
Date: 2019-02-23 11:49 pm (UTC)Re: What to bundle together
Date: 2019-02-24 01:56 am (UTC)Re: References space
Date: 2019-02-23 08:19 pm (UTC)Рядом должно быть наиболее логически связанное.
Это такие шедевры логики, что мне даже и спорить не хочется.
Re: References space
Date: 2019-02-23 09:22 pm (UTC)Re: References space
Date: 2019-02-23 10:00 pm (UTC)Все связанное можно отсортировать по уровню связанности, и держать поблизости только верхнюю часть списка.
Re: References space
Date: 2019-02-23 10:26 pm (UTC)Re: References space
Date: 2019-02-23 10:39 pm (UTC)Он логически связан с другими элементами в коде [E1 ... EN] (другие переменные, функции, классы, ...).
Каждой такой связи программист может назначить Rank, в соответствии со своим пониманием кода.
В результате получается список, который можно отсортировать.
> Вот у нас есть граф
Граф состоит из вершин (и связей между ними).
Для каждой вершины можно создать список связей и выбрать наиболее значимые из этих связей.
Re: References space
Date: 2019-02-23 11:07 pm (UTC)Re: References space
Date: 2019-02-23 11:37 pm (UTC)Re: References space
Date: 2019-02-24 08:55 am (UTC)"Силой, данной нам в ощущениях"
Re: References space
Date: 2019-02-24 08:37 am (UTC)Многомерное пространство, плюс одна ось линейная, другая логарифмическая, третья вооще странная, и ещё мно других. И теперь нам по разным параметр предлагается вывесть единственное число? Или нам каждый раз под новую задачу код перетасовывать?
Re: References space
Date: 2019-02-24 12:58 pm (UTC)Скорее список чисел[*] (для упорядочивания и выборки наиболее связанного кода). С учетом текущего понимания взаимодействия кода.
[*] На самом деле, формально ранк связанности элементов кода друг с другом вычислять, обычно, нет смысла. Для грубой сортировки - достаточно интуитивного представления того, насколько элементы кода связаны друг с другом.
> каждый раз под новую задачу код перетасовывать?
Нет.
Перетасовывать нужно только если новая модель группировки кода намного лучше используемой на данный момент.
Уже написанный и протестированный код лучше не трогать без заметного выигрыша.
Кроме того, часто новая модель кода отличается от старой лишь дополнительным классом (с новой функциональностью) и небольшой модификацией в старом классе (вызов новой функциональности). В таком случае перетасовывать старый код почти не нужно.
no subject
Date: 2019-02-24 01:06 am (UTC)no subject
Date: 2019-02-24 01:12 am (UTC)no subject
Date: 2019-02-24 01:54 am (UTC)Потому что когда все в одном большом файле, то непонятно что к чему релевантно, и что не релевантно.
no subject
Date: 2019-02-24 04:10 am (UTC)я думаю о модулях, API и пр, железка должна думать о том, как это хранить физически. Причем у железки есть простой и ясный критерий - скорость компиляции. Если надо порезать на 3 файла и 7 хреней в ДБ - so be it.
no subject
Date: 2019-02-24 12:46 pm (UTC)Потому что программист, когда анализирует код - смотрит на содержимое файла.
Во всяком случае, на соседние методы.
Если соседние методы имеют сильную логическую связь с анализируемым методом, то это помогает создать правильную модель того, как взаимодействует код.
Если соседние методы не имеют существенной логической связи с анализируемым методом, то это мешает создать правильную модель того, как взаимодействует код.
no subject
Date: 2019-02-24 11:01 pm (UTC)я, конечно, не настоящий программист, каску на стройке нашел, но давно уже не смотрю на уровне "содержимое файла". Есть namespace, внутри некий модуль с API, перемещаешься от функции к функции мышкой, х.з. какие там файлы подгружаются. Какие-то, наверно, подгружаются...
> Если соседние методы имеют сильную логическую связь с анализируемым методом, то это помогает создать правильную модель того, как взаимодействует код.
и как этому могут помочь "файлы"?
модель и так лежит в голове, а если физическое представление оптимально в виде 78 файлов - so be it.
> Если соседние методы не имеют существенной логической связи с анализируемым методом, то это мешает создать правильную модель того, как взаимодействует код.
они в системе прорграммирования должны быть где-то рядом, а один файл или два, или 33 - не должно волновать
Relevant code in the same file
Date: 2019-02-25 01:02 am (UTC)Необязательно мышкой. Часто удобнее клавиатурой перемещаться. Впрочем, в контексте дискуссии "какой код класть в тот же файл?" это непринципиально.
> х.з. какие там файлы подгружаются
Ну вот файл подгрузился, и курсор указывает на имплементацию интересующей нас функции.
Часто бывает полезно взглянуть какие еще функции имплементированы поблизости, чтобы дополнить ментальную модель.
Но это полезно только если функции, находящиеся поблизости - релевантны интересующей нас функции.
> они в системе прорграммирования должны быть где-то рядом
Да.
> один файл или два, или 33 - не должно волновать
Размер файлов тоже должен волновать, потому что в больших файлах поблизости находится слишком много нерелеватного кода, что приводит к потере одного из инструментов быстрого дополнения ментальной модели кода (краткое ознакомление с функциями, находящимися поблизости к нашей функции).
Re: Relevant code in the same file
Date: 2019-02-25 08:12 pm (UTC)Часто бывает полезно взглянуть какие еще функции имплементированы поблизости, чтобы дополнить ментальную модель.
ну так надо определиться, что значит "поблизости". Нужна метрика - семантическая дистанция. Близок - это когда функции в одном неймспейсе. Еще ближе - когда меотды одного класса. Близость от того, что в файле что-то находтися близко это полная архаика.
Семантический анализ, сeмaнатические merge und search.
Деление этого добра на файлы - это для удобства железяки, а не человека
Re: Relevant code in the same file
Date: 2019-02-25 08:23 pm (UTC)Например, "поблизости" может означать - видно на одном экране монитора.
> Близок - это когда функции в одном неймспейсе.
Так тоже полезно измерять.
Но метрика "поблизости в текстовом файле с кодом" - тоже удобна.
> Деление этого добра на файлы - это для удобства железяки, а не человека
Человеку неудобно читать и скроллить файлы слишком большой длины.
no subject
Date: 2019-02-24 07:09 am (UTC)(Event driven too, as a consequence)
no subject
Date: 2019-02-24 02:03 pm (UTC)no subject
Date: 2019-02-24 10:31 am (UTC)Тактические паттерны должны умереть вместе с легаси, стратегические останутся: делать какую-нить подсистему авторизации в ERP придется одинаково вне зависмости от языка и среды.
no subject
Date: 2019-02-24 01:59 pm (UTC)Кстати, несколько лет назад все студенты прекрасно знали паттерны. Нынешних на той неделе спросил - никто никаких паттернов не знает. Ушла эпоха (слава те господи).
no subject
Date: 2019-02-24 03:54 pm (UTC)no subject
Date: 2019-02-24 01:19 pm (UTC)cries in Go
no subject
Date: 2019-02-26 12:16 am (UTC)no subject
Date: 2019-02-25 12:28 am (UTC)-- Кароши? -- строго спрашивал сиреневый мэнэджер.
-- Мировой, -- отвечал программер, кокетливо ковыряя код в IntelliJ
-- Кароши люблю, плохой -- нет, -- сурово говорил мэнэджер.
-- Как же! -- восторженно отвечал программер.
no subject
Date: 2019-02-25 12:38 am (UTC)