2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5  След.
 
 Re: Научный код
Сообщение09.01.2022, 21:20 


08/01/22

41
lel0lel в сообщении #1545666 писал(а):
Если, например, учёный пишет некую программу исключительно для личного использования, то он может написать её так, как ему удобно и понятно. При этом правила использования макросов, расстановка скобок и другие нюансы могут быть самые разнообразные, лишь бы он в этом легко ориентировался.

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

В примерах я привёл ещё относительно сносный код, который разрабатывает и использует большой коллектив из разных организаций. Код, который циркулирует в научных институтах это просто жуть. У меня была попытка задействовать научный код в коммерческом проекте. Отдел потратил год на то чтоб понять что научный код не работает (работает в специально подобранных частных случаях), исправить его невозможно, разобраться в предметной области и переписать всё самим с нуля.

 Профиль  
                  
 
 Re: Научный код
Сообщение09.01.2022, 22:07 
Заслуженный участник


20/04/10
1876
Programer в сообщении #1545670 писал(а):
От учёного ждут правдивой и объясняемой картины области его исследования
Результаты будут оформлены в виде теорем. Программа может служить инструментом для поиска новых результатов и нет необходимости писать её код на некотором конкретном языке. Ну а если есть необходимость, то учёный приведёт псевдокод, хотя это уже дополнение. Главное, чтобы он изложил результаты в виде теорем.

 Профиль  
                  
 
 Re: Научный код
Сообщение09.01.2022, 22:25 
Аватара пользователя


11/12/16
13849
уездный город Н
Programer
Ниже - сугубое имхо.
1. Вы совершенно неверное определяете "коммерческий код", как код, который продаётся путем тиражирования.
Есть куча примеров, когда код пишется под использование внутри компании. Пример с Яндексом приводился. И там тоже - "коммерческий код".

2. На качество кода, во всех смыслах, от качества оформления кода до написания и поддержания в актуальном состоянии автотестов, сильно влияет - будет ли код дальше поддерживаться той же командой\компанией, или он будет разово (или много разово - неважно) продан без поддержки (или просто брошен автором\авторами).

Так вот.

1. Код, "который ходит в институтах", зачастую в основе своей имеет или какие-то наколенные поделки для решения конкретных задач автора кода, или дипломные работы. То есть изначально
а) не предполагалась его длительная поддержка.
б) не существовало никакой организованной команды для его написания.
Качество кода, естественно, получается соответствующим.

2. С другой стороны, если "в институтах" код пишется специально выделенной командой, или даже небольшой группой людей, но с заточкой на длительное использование и поддержку, то код будет хорош.
Не забываем, что
а) хотя интернет вышел из ARPANET (вообще говоря, из военной разработки), софт и стандарты для него разрабатывались в университетах.
б) протокол http и, соответственно, его первые реализации, были разработаны в CERN под собственные нужды.
в) вся эта ваша бигдата - ответ на накопление больших данных с секвенаторов. Ну и немножко для поисковых машин.
г) касательно более специальных областей - библиотеки MININEC3 и NEC2 для расчета антенн, тоже "код из научных институтов".

 Профиль  
                  
 
 Re: Научный код
Сообщение09.01.2022, 22:35 


10/03/16
4444
Aeroport
mihaild в сообщении #1545583 писал(а):
Вообще, чтобы это куда-то уехало, прошу дать хоть какие-то определения "коммерческому коду" и "хорошему коду".


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

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

1. Что делает код?
2. Делает ли он это?
3. За сколько человекочасов можно модифицировать данный код, чтобы он делал то то и то то? В последнем не уверен.

Пойдут определения?

 Профиль  
                  
 
 Re: Научный код
Сообщение09.01.2022, 23:02 
Заслуженный участник
Аватара пользователя


16/07/14
9144
Цюрих
Programer в сообщении #1545629 писал(а):
То что соответствует всем требованиям из неё можно считать хорошим кодом
Но программиста, который всегда пишет только код, который соответствует этим требованиям, уволят, и правильно сделают.
Programer в сообщении #1545629 писал(а):
Непонятно зачем макросы all, sz снижают читаемость, на олимпиаде размер текста программы оценивают?
На олимпиаде оценивают скорость написания кода. Которая при использовании известных автору сокращений увеличивается.
Programer в сообщении #1545629 писал(а):
Фичи новых редакций С++ (auto и пр.) приводят к плохой портируемости
Да и вообще использование С++ приводит к плохой портируемости, надо писать на каком-нибудь древнем фортране.
Programer в сообщении #1545629 писал(а):
vector<vector<int>> это ошибка в некоторых компиляторах
Это часть стандарта с С++11 ЕМНИП.

В любом случае, вы не ответили на вопрос, который всегда нужно задавать в первую очередь прежде чем думать о предложения что-то улучшить:
mihaild в сообщении #1545562 писал(а):
А за чей счет будет этот банкет?


ozheredov в сообщении #1545677 писал(а):
Пойдут определения?
Ну вот в определении коммерческого кода вы с ТС уже разошлись (по его определению я не пишу коммерческий код, по вашему - пишу).
С вашим определением коммерческого кода, подозреваю, написать хорошую реализацию какого-нибудь Пакоса невозможно в принципе, т.к. никая разумная референсная группа не поймет алгоритм за разумное время.

 Профиль  
                  
 
 Re: Научный код
Сообщение09.01.2022, 23:13 
Заслуженный участник


20/04/10
1876
ozheredov в сообщении #1545677 писал(а):
1. Что делает код?
2. Делает ли он это?
Тогда почти любой код, в основе которого лежит некоторый математический алгоритм, то есть как раз научный код, будет плохим, так как понять что он делает можно только ознакомившись с математикой по статьям или если есть по учебникам. Пример -- алгоритм Fiduccia, не почитав статью понять его практически невозможно, как бы хорошо его не оформили. Ну или всё это должно быть прописано в комментариях к коду. А так, максимум что будет понятно это то, что есть такие-то циклы, в результате которых возвращаются такие-то значения, но какой у них смысл останется тайной. Другое дело если имеют место какие-то стандартные процедуры с данными, тогда можно будет понять изучая сам код.

 Профиль  
                  
 
 Re: Научный код
Сообщение10.01.2022, 00:15 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
mihaild в сообщении #1545569 писал(а):
Не знаю, что вы понимаете под качественном кодом в смысле ТС, но вообще писать качественный код учат в ШАДе, учат на ФКН (я лично учил), и подозреваю еще много где.
Я (внезапно) понимаю ровно то, что что сказал сам ТС в стартовом посте:
Programer в сообщении #1545520 писал(а):
Лёгкая доработка, в том числе программистом не знакомым с кодом - одно из главных требований к коммерческому коду.

И как человек, много работавший на больших легаси проектах, могу сказать, что нет, не учат. 8-)
На тех проектах, где я работал, объемы исходников к моменту моего прихода могли составлять до 4 - 5 МБ текста. Для сравнения, "Война и Мир" - это, емнип, порядка 1 МБ. Как именно написан сам код в таких случаях уже не играет решающего значения. Что действительно имеет значение - это документация, объясняющая, что вообще происходит. Документация отсутствует в 100% случаев. Практически везде для управления проектом используется какая-нибудь автоматизированная система (чаще всего - JIRA), и к комментариях к коду любят писать что-нибудь типа "см. тикет 1234". И на вопрос "у вас хоть что-нибудь задокументировано?" - обычно отвечают "У нас все задокументировано". Умалчивая о том, что вся документация размазана тонким слоем по тикетам, и в половине из них забыли упомянуть, что в процессе личного обсуждения фичи с заказчиком требования изменились, и то, что написано в тикете, не соответствует тому, что реализовано в коде. Или комментарий вида "Вася изменил эту функицю по просьбе Пети из отдела продаж". Только к моменту, когда приходит время поправить функцию еще раз, Васи уже нет, Пети нет, отдела продаж нет. Вместо отдела продаж - департамент сбыта, который на вопрос "А вот у нас системе есть такая фича, почему вы просили сделать в ней такое вот изменение?" - отвечает: "У нас есть такая фича? Офигеть!".

Если вас в Яндексе научили, как такого не допускать, ну что я могу сказать? Яндекс божественен.


Programer в сообщении #1545572 писал(а):
Тоже около 15 лет в IT-индустрии.
Странно. Я видел ваш пост еще до того, как модератор заставил вас его немного поменять. Пост выглядел как типичный наброс от вчерашнего студента, который сейчас научит этих окостеневших динозавров новейшим достижениям науки и техники и тем самым спасет от вымирания. Я потому и не стал ничего по существу писать, а отписался анекдотом.

Programer в сообщении #1545629 писал(а):
Хороший код определить сложнее. Есть книга «Совершенный код». То что соответствует всем требованиям из неё можно считать хорошим кодом.
Можете напомнить вкратце, что там написано? Я читал давно, по диагонали и детали забыл. Ну и в любом случае - не помню, чтобы там было что-то для решения проблемы
Programer в сообщении #1545520 писал(а):
Лёгкая доработка, в том числе программистом не знакомым с кодом
В чем именно проблема - я уже написал выше.

 Профиль  
                  
 
 Re: Научный код
Сообщение10.01.2022, 00:36 


08/01/22

41
EUgeneUS в сообщении #1545676 писал(а):
.
в) вся эта ваша бигдата - ответ на накопление больших данных с секвенаторов. Ну и немножко для поисковых машин.
г) касательно более специальных областей - библиотеки MININEC3 и NEC2 для расчета антенн, тоже "код из научных институтов".

в)
Бигдата это «внешние» алгоритмы из трёхтомника Кнута. Не из потребностей науки они появились а из потребностей экономики.
г)Сравните эти поделки с коммерческим кодом ANSYS который считает всё что угодно (будь то механика или электродинамика) и практически без ошибок, ну разве что в ну очень сложных случаях.

-- 10.01.2022, 00:39 --

lel0lel в сообщении #1545675 писал(а):
Programer в сообщении #1545670 писал(а):
От учёного ждут правдивой и объясняемой картины области его исследования
Результаты будут оформлены в виде теорем. Программа может служить инструментом для поиска новых результатов и нет необходимости писать её код на некотором конкретном языке. Ну а если есть необходимость, то учёный приведёт псевдокод, хотя это уже дополнение. Главное, чтобы он изложил результаты в виде теорем.

Я под научным кодом подразумеваю код для потребностей естественных наук, к коим математика не относится.
Если математику его отстойный код помог доказать важную теорему то честь ему и хвала.

 Профиль  
                  
 
 Re: Научный код
Сообщение10.01.2022, 00:51 
Заслуженный участник


09/05/12
25179
Programer в сообщении #1545686 писал(а):
Сравните эти поделки с коммерческим кодом ANSYS который считает всё что угодно (будь то механика или электродинамика) и практически без ошибок, ну разве что в ну очень сложных случаях.
Это сложный вопрос. Что именно считает ANSYS - тайна сия велика есть (именно потому что коммерческий и закрытый), а результаты, да, весьма похожи на правду там, где их можно проверить. Но по этой же причине никто, вообще говоря, не берется сказать, что получится, если использовать пакет для задачи с параметрами, выходящими за "стандартный" диапазон. По косвенным данным кажется, что внутрь, кроме честного МКЭ, заложена еще и более-менее эффективная интерполяция, которую "разносит" за пределами области, для которой есть базовые данные.

P.S. Ну и, возвращаясь к предмету беседы - именно качество кода ANSYS оценить совсем нереально (если не работать в ANSYS Inc.).

 Профиль  
                  
 
 Re: Научный код
Сообщение10.01.2022, 01:17 


10/03/16
4444
Aeroport
mihaild в сообщении #1545681 писал(а):
С вашим определением коммерческого кода, подозреваю, написать хорошую реализацию какого-нибудь Пакоса невозможно в принципе, т.к. никая разумная референсная группа не поймет алгоритм за разумное время.


Да, классифицировать принадлежность кода, который понимает ровно 1 (один) человек, по определению невозможно. Это, наверное, парадокс и сюрприз (нет).

lel0lel в сообщении #1545682 писал(а):
Тогда почти любой код, в основе которого лежит некоторый математический алгоритм, то есть как раз научный код, будет плохим, так как понять что он делает можно только ознакомившись с математикой по статьям или если есть по учебникам.


Т.е. по-Вашему нельзя просто понять пошагово, что делает Fiduccia (безотносительно к оценке разумности этих шагов)?

 Профиль  
                  
 
 Re: Научный код
Сообщение10.01.2022, 01:27 
Заслуженный участник
Аватара пользователя


01/09/13
4656
ozheredov в сообщении #1545690 писал(а):
Т.е. по-Вашему нельзя просто понять пошагово, что делает Fiduccia (безотносительно к оценке разумности этих шагов)?

Глубоко оптимизированный код, даже для простого алгоритма, понять без подробного описания малореально.

 Профиль  
                  
 
 Re: Научный код
Сообщение10.01.2022, 01:27 
Заслуженный участник
Аватара пользователя


16/07/14
9144
Цюрих
rockclimber в сообщении #1545685 писал(а):
Документация отсутствует в 100% случаев.
На практике обычно хуже - документация есть, но она не соответствует действительности. Комментарии в коде имеют небольшие шансы какое-то время сохранять актуальность, внешняя документация - нет.
Народная мудрость писал(а):
1. Не пишите устаревший (legacy) код.
2. Любой код без тестов - устаревший.
Поэтому одно из важных свойств хорошего кода - он должен требовать как можно меньше внешней документации.
ozheredov в сообщении #1545690 писал(а):
Т.е. по-Вашему нельзя просто понять пошагово, что делает Fiduccia (безотносительно к оценке разумности этих шагов)?
Ну на каком-то уровне можно сказать, что "пошагово" можно понять любой код на языке с известным синтаксисом.

 Профиль  
                  
 
 Re: Научный код
Сообщение10.01.2022, 02:33 


08/01/22

41
rockclimber в сообщении #1545685 писал(а):
На тех проектах, где я работал, объемы исходников к моменту моего прихода могли составлять до 4 - 5 МБ текста. Для сравнения, "Война и Мир" - это, емнип, порядка 1 МБ. Как именно написан сам код в таких случаях уже не играет решающего значения. Что действительно имеет значение - это документация, объясняющая, что вообще происходит. Документация отсутствует в 100% случаев.

Сколько ж тогда документация займёт? Поэтому и говорят нам гуру что коммерческий код должен быть самодокументируемым.

-- 10.01.2022, 02:42 --

rockclimber в сообщении #1545685 писал(а):
Programer в сообщении #1545572 писал(а):
Тоже около 15 лет в IT-индустрии.
Странно. Я видел ваш пост еще до того, как модератор заставил вас его немного поменять. Пост выглядел как типичный наброс от вчерашнего студента, который сейчас научит этих окостеневших динозавров новейшим достижениям науки и техники и тем самым спасет от вымирания. Я потому и не стал ничего по существу писать, а отписался анекдотом.

Иногда мне кажется что нынешние студенты легко уделают динозавров программирования и меня в том числе. Недавно заходил на кафедру и посмотрел какие названия имеют курсовые и дипломные нынешних студентов. Страшно стало. Каждый студент пишет за время учёбы несколько офигенных проектов которые раньше писали коллективы годами.

 Профиль  
                  
 
 Re: Научный код
Сообщение10.01.2022, 12:06 


10/03/16
4444
Aeroport
Geen в сообщении #1545691 писал(а):
Глубоко оптимизированный код, даже для простого алгоритма, понять без подробного описания малореально.


Хорошо написанный код ПРИ ПРОЧИХ РАВНЫХ понять более реально (за некоторый фиксированный отрезок времени), чем плохо написанный код. Хорошо написанный (что в т.ч. предполагает наличие содержательных комментариев) глубоко оптимизированный код понять более реально (за некоторый фиксированный отрезок времени), чем плохо написанный глубоко оптимизированный код.

-- 10.01.2022, 12:14 --

mihaild в сообщении #1545692 писал(а):
Ну на каком-то уровне можно сказать, что "пошагово" можно понять любой код на языке с известным синтаксисом.


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

Код:
pieces_of_graph = Fiduccia(entire_graph)

 Профиль  
                  
 
 Re: Научный код
Сообщение11.01.2022, 11:11 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
Не знаю, может, я просто устал от всего этого и у меня какой-нибудь очередной кризис среднего возраста или еще какая напасть. Не подумайте плохо, я не отрицаю ни один из советов известных гуру программирования, я и сам всем то же самое советую. Но энтропия - безжалостная гадина, на сроках 10 - 15 лет любой программный продукт превращается в тыкву :-(

mihaild в сообщении #1545692 писал(а):
Народная мудрость писал(а):
1. Не пишите устаревший (legacy) код.
2. Любой код без тестов - устаревший.
Поэтому одно из важных свойств хорошего кода - он должен требовать как можно меньше внешней документации.
Согласен, но вот пример с одного из прошлых проектов. 6000 тестов. Изменение в одном месте валит, например, 150 тестов, 50 из которых, казалось бы, вообще в никак не связанных местах. Потом начинаешь выяснять - оказывается нет, места все-таки связаны. Как это удалось выяснить? Путем реверс-инжиниринга. Давайте уже называть вещи своими именами. Если вам нужно долго читать код, а потом запускать его (особенно если несколько раз), чтобы понять, как он работает, вы занимаетесь реверс-инжинирингом. Это дорогая процедура, вообще-то.
Другой пример с того же проекта. Проект - сервис для мобильных операторов (есть несколько компаний в мире, которые занимаются проведением взаиморасчетов между мобильными операторами - кто кому сколько трафика нагнал, кто кому сколько должен, и т. д. - вот это один из таких сервисов) Код, который делает небольшой расчет того, как нужно управлять трафиком. Мне дали этот кусок задачи, потому что на проекте был всего один человек, который знал, как это работает (когда я закончил, таких людей стало двое, а когда грянул корона-кризис, компания сократила нас обоих - троектратное хахаха, товарищи!). У меня ушел чуть ли не месяц, чтобы разобраться во всех нюансах. А по итогу могу сказать, что общую идею я бы смог описать за день, максимум за два. С подробнейшим текстом с картинками и схемами. А прочитать за пару часов. Но на проекте не было принято писать документацию, а вот ковыряться в недокументированном коде - это нормально. Тесты тоже были - простыня с цифрами. 12 столбцов (1 столбец - 1 месяц), и черт знает сколько строк. Тут исходные данные - тут расчетные. А сам код был "предельно простой", кстати - 1 SQL запрос, который помещался на один экран :mrgreen:

-- 11.01.2022, 09:21 --

Programer в сообщении #1545694 писал(а):
rockclimber в сообщении #1545685 писал(а):
На тех проектах, где я работал, объемы исходников к моменту моего прихода могли составлять до 4 - 5 МБ текста. Для сравнения, "Война и Мир" - это, емнип, порядка 1 МБ. Как именно написан сам код в таких случаях уже не играет решающего значения. Что действительно имеет значение - это документация, объясняющая, что вообще происходит. Документация отсутствует в 100% случаев.

Сколько ж тогда документация займёт? Поэтому и говорят нам гуру что коммерческий код должен быть самодокументируемым.
Ну займет она 20 МБ, и что? HDD лопнет?
Самодокументируемый код - это хорошо, он у на всех моих проектах самодокументируемый был. А толку-то? На том же проекте, что я упоминал выше, был случай. Ключевого разработчика сократили (того-самого; потом, правда, через месяц взяли обратно, а еще через полгода сократили еще раз, уже окончательно). Закачик сказал - в рачетах ерунда какая-то. Посмотрите. А там расчет всего на свете в один заход. Анализ трафика за 2 года (клиент - крупная компания, владеющая 30+ мобильными операторами на всех континентах), прогнозы, учет всех нюансов условий договоров всех со всеми по всему миру и расчет прогнозируемых доходов на год вперед. Ну запустил я расчет. Он вывалил в лог 30К+ строк. Вызов около 100 разных функций и процедур. Да, они все самодокументируемые, компактные (не занимают больше одного экрана), покрыты тестами - все, как завещали гуры. А толку? Тупо прочитать все это - это задача на несколько дней. А потом нужно удержать все это в памяти, включая последовательность вызовов и всякие условия ветвлений.

-- 11.01.2022, 09:31 --

Programer в сообщении #1545694 писал(а):
rockclimber в сообщении #1545685 писал(а):
Programer в сообщении #1545572 писал(а):
Тоже около 15 лет в IT-индустрии.
Странно. Я видел ваш пост еще до того, как модератор заставил вас его немного поменять. Пост выглядел как типичный наброс от вчерашнего студента, который сейчас научит этих окостеневших динозавров новейшим достижениям науки и техники и тем самым спасет от вымирания. Я потому и не стал ничего по существу писать, а отписался анекдотом.
Иногда мне кажется что нынешние студенты легко уделают динозавров программирования и меня в том числе. Недавно заходил на кафедру и посмотрел какие названия имеют курсовые и дипломные нынешних студентов. Страшно стало. Каждый студент пишет за время учёбы несколько офигенных проектов которые раньше писали коллективы годами.
Проблема не в том, что я принял вас за студента. Проблема в том, что стартовый пост выглядел как наброс на вентилятор.
Что касается способностей студентов... Знаете, какое животное бегает быстрее всех? Секрет этого вопроса в том, что в таком виде он недоформулирован. Нужно еще дистанцию указать и другие условия. На дистанции до 1 км бегают быстро почти все, а некоторые - прямо совсем быстро. А вот если вы предложите пробежать 30 км по жаре, 99% животных вам просто скажут "да ну нафиг", а почти самым быстрым бегуном окажется, внезапно, человек. Человека обгоняет разве что верблюд, ну и может какая специально для таких случаев выведенная лошадь.
Возвращаясь к студентам. Мне даже не кажется, я точно уверен - любой студент, даже честный троечник (в смысле, сам учился, не бездельничал, просто не тянет немного) запросто обгонит меня в решении задач на литкоде или еще какой такой фигне. А вот давайте посоревнуемся в ведении сложного проекта на протяжении 10 лет, например... Ну, я могу посочувствовать студенту. Будет переписывать все с нуля каждые 2 года по ночам 8-) Здесь я уверен в своих силах.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 73 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Модератор: Модераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: mihaild


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group