Как писать код? Технологии древних цивилизаций, или все новое - это хорошо забытое старое

Публикация № 987376

Разработка - Математика и алгоритмы

программирование код

Все современные технологии - это развитие и доведение до ума (или маразма) древних идей. За последнее время не придумали ничего нового - все, что мы видим, было придумано тысячи лет назад. Не является исключением и программирование, которое в сути своей является переводом с языка условностей технического задания или заявки пользователя в формализованный и абсолютно точный язык математической логики. А логику придумали (по крайней мере первыми опубликовались в ведущих научных журналах) еще древние греки.

1. Математика - гимнастика ума.

Как ни крути, но программирование - это математика. Не та математика, где диффуры и прочие пространства Минковского, а вполне себе простая описательная математика функций преобразования одного в другое. Умные люди придумали такое понятие, как "Дискретная математика", которая рассматривает графы и логические утверждения, которые обозваны в ней "Дискретными структурами". Графы - это всего лишь узлы и связи между ними. Они не так часто используются в "обычном" программировании, как логические утверждения, но тоже имеют место быть. Графы имеют несколько видов, для них существует целый класс алгоритмов, позволяющий найти какие-то оптимальные значения связей между узлами, упорядочить их и всякое такое прочее - о них мы тут говорить не будем. А вот о логических утверждениях стоит поговорить более развернуто.

1.1. Логика - раздел математики.

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

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

И - логическое умножение. Приоритет высокий.

ИЛИ - логическое сложение. Приоритет низкий.

НЕ - отрицание. Приоритет высочайший.

В выражении "А = Б И Ц ИЛИ Д И НЕ Ж" сначала будет вычислено "НЕ Ж", за ним все "И", и уже после, в самом конце, будет вычислено "ИЛИ".

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

Законы логики.

1. Никакое высказывание не может быть истинным и ложным одновременно.

Тут все просто: выражение "Х = 1 И Х <> 1" всегда ложно.

2. Любое высказывание или истинно, или ложно - третьего не дано.

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

3. Утверждение истинно, а контрутверждение ложно.

Тут тоже все достаточно просто: "(А = Б) = НЕ (А <> Б)". 

4. Силлогизм.

Классика: "Всякий человек смертен. Сократ - человек, следовательно он смертен". Примитивный пример может быть таким: "(А = Б И Б = Ц) = (А = Ц)".

Исходя из этих законов существуют преобразования логических выражений (не забываем про приоритеты):

НЕ (А ИЛИ Б) = НЕ А И НЕ Б

НЕ (А И Б) = НЕ А ИЛИ НЕ Б

А И (Б ИЛИ Ц) = А И Б ИЛИ А И Ц

А ИЛИ Б И Ц = (А ИЛИ Б) И (А ИЛИ Ц) 

А ИЛИ А И Б = А

А И (А ИЛИ Б) = А

Интереса заради можно разобрать такое вот выражение, приведенное в этой вот публикации.

((ПН И ПНП) И (РН И РНП)) ИЛИ (( ПН = Ложь ) И (РН И РНП)) ИЛИ ((ПН И ПНП) И (РН = Ложь))

Преобразуем это выражение, убрав константы:

(А И Б) И (Ц И Д) ИЛИ НЕ Ц И (А И Б) ИЛИ НЕ А И (Ц И Д)

Тут условие будет истинным в следующих случаях: 1. А = Б = Ц = Д = ИСТИНА. 2. А или Ц = ЛОЖЬ, Б = Д = ИСТИНА. При том А может быть ЛОЖЬ только тогда, когда Ц = Д = ИСТИНА, а Ц может быть ЛОЖЬ только когда А = Б = ИСТИНА.

Отсюда можно сделать вывод, что если А И Б = ИСТИНА, то нас не интересует Ц И Д, и, соответственно, наоборот. Отсюда прямо следует, что данное условие эквивалентно следующему:

(А ИЛИ Ц) И (А И Б ИЛИ Ц И Д)

Какая логика преобразований тут использовалась? Из первоначального условия ясно, что (А И Б) И (Ц И Д) - это основное условие, при этом если А ИЛИ Ц неистинны, то для А становится бессмысленно Б, а для Ц - Д. В итоге у нас должно быть истинным одно из А или Ц. Так и запишем: А ИЛИ Ц. А дальше уже мы можем А И Б логически сложить с Ц И Д, т.к. у нас или А, или Ц истинно. При ложности А будет проверяться только истинность Ц и Д, а для ложности Ц - только А и Б. Если А и Ц ложны, то и само условие тоже будет ложно.

2. Принципы древних.

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

2.1. Не стоит плодить сущности без необходимости

Данный принцип сформулировал Уильям Оккам, живший в XIII-XIV веках. Суть его в том, что если что-то можно объяснить без привлечения дополнительных сущностей, то привлекать эти сущности не нужно. Истоки же редуцирования (т.е. минимизации и упрощения) в логике сокрыты во глубине веков, а бритву и Оккама первым, если мне не изменяет память, скрестил Лейбниц (в действительности он не Оккама с ней скрестил, а номинализм, "протагонистом" которого был Оккам).

Давайте соотнесем это с программированием. В данном случае суть проста: не нужно делать лишнего. Т.е. лишних переменных, функций, процедур, действий. Лишнее обычно образуется не из задачи, как таковой, а из подзадачи, когда локальный творец не видит всего творения. Избежать лишних сущностей позволит хорошо проработанная архитектура решения. Исходя прямо из формулировки принципа, можно определить, что система, содержащая минимальное достаточное количество элементов будет лучше системы, в которой элементов будет больше.

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

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

2.2 Лучшее - враг хорошего.

Данный принцип любит употреблять некий В.В.Шахиджанян. И он тут вполне прав, т.к. нет пределу совершенству. Есть мнение, что люди, сидящие на сайтах знакомств так привыкают к тому, что найдется что-то лучше, что не особо хранят имеющиеся отношения, предполагая, что всегда найдется как минимум не хуже. И в этом что-то есть!

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

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

2.3. Все гениальное - просто.

Так Йозеф Геббельс перефразировал слова Леонардо да Винчи. И если выкинуть из объяснения чего-либо все лишнее, то получится как раз простое и достаточное этого чего-либо объяснение. Другими словами, это предельный вариант принципа Оккама.

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

2.4. Глаза боятся - руки делают.

В словаре народной фразеологии данное понятие отражено весьма полно:

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

Для разработчиков программного обеспечения данное выражение должно быть крайне полезно, т.к. сложность, с которой приходится работать, бывает весьма высока. Это как раз следствие того, что большинство программных продуктов (особенно на 1С) не представляют из себя образчиков гениальности - в них полно лишних сущностей, но это цена компромисса между работающим ПО и сферическим в вакууме ТЗ, которое никто и никогда не будет писать.

3. Мораль.

Исходя из вышесказанного могу подытожить следующим образом:

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

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

3. Не стоит тратить множество времени на идеальное ТЗ - оно все равно скорее всего не будет идеальным, но полностью отказываться от раздумий на тему того, как это сделать, тоже не стоит.

4. Не стоит усложнять задачу. Иногда, если отвлечься, приходит неплохое и достаточно простое решение.

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

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. gubanoff 50 23.01.19 15:30 Сейчас в теме
(0) Всегда рекомендую читать классику - "Совершенный код" С. Макконнелл. Там написано все и подробно.

Не хочется обижать авторов статей, но они освещают только малый процент того, что есть в "совершенном коде".
JohnConnor; YPermitin; kraynev-navi; ilialin; ivanov660; PLAstic; klinval; zqzq; CSiER; lunjio; wowik; Vladimir Litvinenko; starik-2005; +13 Ответить
2. starik-2005 2198 23.01.19 15:39 Сейчас в теме
(1) так я, например, постоянно предлагаю Макконнелла читать всем и каждому. Моя статья тут совершенно о другом - о том, что нужно знать программисту, чтобы вообще иметь возможность писать программы. Ну и о том, что совершенного кода написано не так много, что лучше написать не такой совершенный, но работающий код, чем не написать никакого кода )))
Serg O.; mvxyz; Dem1urg; +3 Ответить
23. zqzq 21 25.01.19 09:24 Сейчас в теме
(2) Кстати, по поводу Совершенного кода, в оригинале название книги "Code Complete", совсем другой нюанс смысла.
34. kote 519 27.02.19 19:17 Сейчас в теме
(23) не-а, как раз перевод "совершенный" тут самое то - "совершенный" оно от "свершился -> завершился"..
Завершенный, законченный, самодостаточный - как раз это значение у "complete".. а просто перевод "завершенный" - лишен смысла, который в самой книге.
38. Crazy_Max 63 26.04.19 13:30 Сейчас в теме
(34)
не-а, как раз перевод "совершенный" тут самое то - "совершенный" оно от "свершился -> завершился"...

(34)
Тогда нужно акцентировать внимание на букве "Ё" в слове "совершённый". А вообще, я бы перевёл название во что-то вроде "Конечный код". В любом случае название "Совершенный код" несёт практически противоположный смысл, чем тот, который вкладывал Макконнелл.
40. starik-2005 2198 26.04.19 14:51 Сейчас в теме
(38)
я бы перевёл название во что-то вроде "Конечный код"
"Конченный код" ))) Типа писал его совсем конченный программер )))
41. Crazy_Max 63 26.04.19 19:41 Сейчас в теме
Ну уж кто чего видит...
3. pm74 177 23.01.19 16:10 Сейчас в теме

Отсюда прямо следует, что данное условие эквивалентно следующему:
(А ИЛИ Ц) И (А И Б ИЛИ Ц И Д)


ну неправильно же , исправьтесь

(А И Б) И (Ц И Д) ИЛИ НЕ Ц И (А И Б) ИЛИ НЕ А И (Ц И Д)

и

(А ИЛИ Ц) И (А И Б ИЛИ Ц И Д)

не эквивалентны
Алексей_mir2mb; +1 Ответить
4. starik-2005 2198 23.01.19 16:23 Сейчас в теме
(3) не эквивалентны в двух случаях из 16-ти. Может Вы предложите, как сократить это выражение?
Алексей_mir2mb; +1 Ответить
5. pm74 177 23.01.19 16:26 Сейчас в теме
(4) ну например
Ц И Д И (НЕ А ИЛИ Б) ИЛИ НЕ Ц И А И Б
или
(НЕ Ц ИЛИ Д) И (НЕ А ИЛИ Б) И (Ц И Д ИЛИ А И Б)

наверняка есть и получше варианты
Алексей_mir2mb; starik-2005; +2 Ответить
7. starik-2005 2198 23.01.19 16:41 Сейчас в теме
(5) как вариант! Полезно иногда понимать, что где-то ошибаешься.
8. pm74 177 23.01.19 16:46 Сейчас в теме
(7) может кто нибудь заморочится и напишет обработку на тему алгоритма Квайна-МакКлоски
9. starik-2005 2198 23.01.19 16:55 Сейчас в теме
(8) кстати, очень интересная тема. Постараюсь нарисовать ее в ближайшее время.
6. pm74 177 23.01.19 16:38 Сейчас в теме
Просто оставлю здесь
ВЫБРАТЬ
	ИСТИНА КАК БУЛЕВО
ПОМЕСТИТЬ ИСТИНАЛОЖЬ
ОБЪЕДИНИТЬ
ВЫБРАТЬ
	ЛОЖЬ
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ИСТИНАЛОЖЬ.БУЛЕВО КАК А,
	ИСТИНАЛОЖЬ2.БУЛЕВО КАК Б,
	ИСТИНАЛОЖЬ3.БУЛЕВО КАК Ц,
	ИСТИНАЛОЖЬ4.БУЛЕВО КАК Д
ПОМЕСТИТЬ СОЧЕТАНИЯ
ИЗ
	ИСТИНАЛОЖЬ КАК ИСТИНАЛОЖЬ,
	ИСТИНАЛОЖЬ КАК ИСТИНАЛОЖЬ2,
	ИСТИНАЛОЖЬ КАК ИСТИНАЛОЖЬ3,
	ИСТИНАЛОЖЬ КАК ИСТИНАЛОЖЬ4
;

////////////////////////////////////////////////////////////­//////////////////// 
ВЫБРАТЬ
А,Б,Ц,Д,
((А И Б) И (Ц И Д)) ИЛИ  (( А = Ложь ) И (Ц И Д)) ИЛИ ((А И Б) И (Ц = Ложь)) КАК Шаблон,
(А И Б) И (Ц И Д) ИЛИ НЕ Ц И (А И Б) ИЛИ НЕ А И (Ц И Д) КАК Выражение1,
(А ИЛИ Ц) И (А И Б ИЛИ Ц И Д) КАК Выражение2,
Ц И Д  И (НЕ А ИЛИ Б) ИЛИ НЕ Ц И А И Б  КАК Выражение3
ПОМЕСТИТЬ ПРОВЕРКА
ИЗ
	СОЧЕТАНИЯ КАК С
	;
ВЫБРАТЬ
А,Б,Ц,Д, 
Шаблон = Выражение1 Проверка1,
Шаблон = Выражение2 Проверка2,
Шаблон = Выражение3 Проверка3
Из   ПРОВЕРКА КАК П

Показать
Алексей_mir2mb; singlych; fancy; unichkin; acanta; +5 Ответить
10. Painted 33 24.01.19 10:00 Сейчас в теме
2.4.1. Слона надо есть по кусочкам.
Если задача пугает громоздкостью и/или сложностью, разбейте ее на более простые подзадачи. И разбивайте до тех пор, пока они не станут простыми и легко реализуемыми.
IgorS; Yimaida; Yakud3a; alex-l19041; starik-2005; +5 Ответить
11. FreeFin 20 24.01.19 12:32 Сейчас в теме
Frustra fit per plura quod potest fieri per pauciora
Но почему почти никто не задумывается, что достаточное не всегда правильное? Привычка, так принято и иначе нельзя? Всего лишь вопрос, а почему нельзя? Потому что "Оккам так сказал"?
Алексей_mir2mb; +1 Ответить
14. ADirks 182 24.01.19 14:13 Сейчас в теме
(11) потому что правильное не всегда правильно
brr; Алексей_mir2mb; +2 Ответить
16. starik-2005 2198 24.01.19 14:37 Сейчас в теме
(11) всегда есть смысл предметно поговорить об этом. Но для этого нужно какой-то пример разобрать. У Вас есть пример?
12. logarifm 1080 24.01.19 12:44 Сейчас в теме
2. Любое высказывание или истинно, или ложно - третьего не дано.


В терминах 1С еще Или НЕОПРЕДЕЛЕНо :)
jif; Алексей_mir2mb; sm.artem; +3 Ответить
13. qwinter 624 24.01.19 13:57 Сейчас в теме
(12) Только в случае если оно существует)))
15. starik-2005 2198 24.01.19 14:36 Сейчас в теме
(12)
В терминах 1С еще Или НЕОПРЕДЕЛЕНо :)
Результат логической операции не может быть неопределен. Или может? )))
19. ADirks 182 24.01.19 17:33 Сейчас в теме
(15) В Булевой алгебре не может, т.к. эта алгебра определена на множестве {Истина, Ложь}
А в SQL может, т.к. там множество {Истина, Ложь, Null}
Serg O.; Алексей_mir2mb; +2 Ответить
17. Jokemas 136 24.01.19 15:01 Сейчас в теме
Хорошая статья. Порадовало упоминание создателя "Соло на клавиатуре" =)).
18. capitan 1734 24.01.19 15:19 Сейчас в теме
У некоторых программистов бывает еще так:
rpgshnik; Bajo; kote; TABEZI1234; EVKash; Алексей_mir2mb; Yakud3a; starik-2005; +8 Ответить
31. TABEZI1234 25.01.19 22:33 Сейчас в теме
20. morin 14 24.01.19 19:54 Сейчас в теме
Спасибо автору за статью.
Процентов 80 работы программиста - это не написание кода, а его чтение (изучение чужого кода, отладка, изучение документации). У программистов 1С эта доля может доходить до 98 процентов.
Может кто-нибудь поделится, как читать код (опыт, методики, инструменты)?
Но, думаю, это тема для отдельной статьи.
ilialin; acanta; starik-2005; Алексей Воробьев; Алексей_mir2mb; +5 Ответить
26. starik-2005 2198 25.01.19 10:40 Сейчас в теме
(20)
Но, думаю, это тема для ...
Кстати, хорошая идея. Попробую изложить свое видение данной проблемы в эти выходные.
kote; json; +2 Ответить
27. genayo 25.01.19 10:53 Сейчас в теме
(26) Обязательно пишите, вроде неплохо получается :)
21. Артано 673 25.01.19 04:14 Сейчас в теме
Спасибо за внесенную лепту. А также, за своеобразный пинок меня, чтобы я продолжил публикации ))
22. 1c-intelligence 10516 25.01.19 07:23 Сейчас в теме
24. awk 718 25.01.19 10:02 Сейчас в теме
Про логику порадовало

С. Н. Виноградов, А. Ф. Кузьмин
Логика
УЧЕБНИК ДЛЯ СРЕДНЕЙ ШКОЛЫ СССР
*** 1954 ***

https://sheba.spb.ru/shkola/logika-vinograd1954.htm

очень рекомендую....

Я правда читал для вузов, вышеприведенный попроще...
starik-2005; +1 Ответить
28. Painted 33 25.01.19 16:03 Сейчас в теме
(24)
УЧЕБНИК ДЛЯ СРЕДНЕЙ ШКОЛЫ СССР
*** 1954 ***
Сорри, немного оффтопа. О вечном.
Недавно с удивлением узнал, что мой ребенок учит дифференциалы по Фихтенгольцу. По которому в свое время учился я и, секундочку, моя мама. ))
29. awk 718 25.01.19 17:24 Сейчас в теме
(28)
Фихтенгольцу


Тут оказалось, что учебники 40-50 гораздо более понятны и адекватнее современных. Энтузиасты взялись за переиздание. Кто использует говорят эффект потрясающий, школьники которые считались в школе безнадежно тупыми - выбиваются в уверенные хорошисты (но это по слухам - не проверял сам).
39. Crazy_Max 63 26.04.19 13:47 Сейчас в теме
(28)
дифференциалы по Фихтенгольцу

Это не тот Фихтенгольц, который еще и по программированию учебники писал? Я, будучи школьником, изучал по нему Паскаль в 10-м классе, а в 11-й класс пошел в другую школу. Там препод посмотрел на книжку, по которой я учился, затем указал мне на лучший компьютер в классе и попросил, чтобы я не мешал ему на уроках.
А книжка, и в правду, давалась с кровью и седыми волосами. Только позже, когда мне попались в руки другие книги по программированию, я в сравнении осознал, насколько это было жестоко по отношению к моей невинной детской головушке...
25. rwn_driver 8 25.01.19 10:34 Сейчас в теме
Можно ещё почитать занимательную логику или Рэймонд М. Смаллиан "Как же называется эта книга?".
30. vasilev2015 1894 25.01.19 21:45 Сейчас в теме
Хочу поблагодарить Сергея за поддержку статьи про логику и математику
32. TABEZI1234 25.01.19 22:33 Сейчас в теме
не понял, это сарказм был в статье?
33. TABEZI1234 25.01.19 22:34 Сейчас в теме
Процентов 80 работы программиста - это не написание кода, а его чтение (изучение чужого кода, отладка, изучение документации). У программистов 1С эта доля может доходить до 98 процентов.
Может кто-нибудь поделится, как читать код (опыт, методики, инструменты)?
Но, думаю, это тема для отдельной статьи. ---Согласен
Crazy_Max; kote; +2 Ответить
35. 3vs 23.04.19 11:18 Сейчас в теме
"2. Любое высказывание или истинно, или ложно - третьего не дано."
А как же Троичная логика?
ru.wikipedia.org/wiki/Троичная_логика

Перечень значений нечёткой трёхзначной логики с двумя чёткими и с одним нечётким значением помимо «истинно» и «ложно» включает также третье значение, которое нечётко и трактуется как «не определено» или «неизвестно», или, в простонародье, х.з.

Примерами значений нечёткой трёхзначной логики с одним чётким и с двумя нечёткими значениями являются: («меньше», «равно», «больше»), («уклон влево», «прямо», «уклон вправо») и другие.

Примерами значений нечёткой трёхзначной логики с тремя нечёткими значениями, к которым сводится очень большое количество практических народнохозяйственных задач, являются: («меньше», «равно, в допустимых пределах», «больше»), («уклон влево», «прямо, в допустимых пределах», «уклон вправо»), («холодно», «прохладно», «жарко») и другие.
37. Perfolenta 189 23.04.19 21:26 Сейчас в теме
(36) да, были люди в наше время... богатыри, не мы...
42. Rustig 1556 07.08.19 10:40 Сейчас в теме
пусть идет учиться не на очередной сертификат, а на курс логики.

для улучшения собственных навыков программирования идеально подходит парное программирование с более опытным наставником

понравилась мысль про "глаза боятся - руки делают". спасибо!
43. starik-2005 2198 07.08.19 22:26 Сейчас в теме
(42) этим мыслям тысячи лет)))
Оставьте свое сообщение

См. также

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    34532    ids79    40    

1С: Документооборот, Data Science и Python

Документооборот и делопроизводство Математика и алгоритмы ДО Бесплатно (free)

В статье рассказывается о создании и обучении модели Data Science на языке Python и интеграции с системой 1С: Документооборот

04.08.2020    1469    Vaganov_Alexey    4    

Применение математических достижений в решении сложных задач бизнеса

Математика и алгоритмы Бесплатно (free)

Как правило, самые сложные задачи решаются с точки зрения математики очень легко. Но чтобы найти правильное решение, важно понять бизнес-цель, которую достигает эта задача. О практическом применении математических достижений для эффективного решения сложных задач бизнеса на конференции Infostart Event 2019 Inception рассказал Дмитрий Мишнов.

25.05.2020    3323    Mishnov    17    

Улучшение пооперационного планирования в 1С:ERP 2.4 внешними средствами

Математика и алгоритмы Производительность и оптимизация (HighLoad) Бесплатно (free)

Задача построения оптимального производственного расписания требует сравнения тысяч и десятков тысяч вариантов. Выполнять такие вычисления средствами платформы 1С Предприятие нецелесообразно. Как реализовать пооперационное планирование с использованием генетических алгоритмов и параллельных вычислений в докладе на конференции Infostart Event 2019 Inception рассказал генеральный директор компании «ИНТЕХ» Сергей Сафаров.

02.03.2020    5089    ildarovich    7    

Как работает серверный вызов в 1С Промо

Математика и алгоритмы v8::УФ Бесплатно (free)

Клиент-серверная архитектура заложена в платформе изначально — со времен «1С:Предприятие 8.0». Однако при разработке на 8.0 и 8.1 о разделении кода на клиентскую и серверную часть можно было не заботиться, поскольку на клиенте (на толстом клиенте) был доступен тот же функционал, что и на сервере. Всё изменилось с выходом платформы «1С:Предприятие 8.2», когда появился тонкий клиент. Теперь на клиенте доступен один функционал, на сервере — другой. Клиент и сервер «общаются» между собой с помощью серверного вызова. Конечно, это усложнило процесс разработки, но с другой стороны – можно создавать более оптимальные (быстрые) решения, поскольку все сложные задачи выполняются на сервере.

18.11.2017    55634    pahich    82    

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

Математика и алгоритмы Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Предлагается ознакомиться с редким способом графического представления иерархических данных. Приводится алгоритм формирования и пример реализации.

18.02.2020    4758    randomus    18    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    27930    YPermitin    24    

"Хочу универсально!" [Часть 1]

Математика и алгоритмы Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Сентябрьская серия статей про то, как начинающий разработчик Вася проходит путь от простой задачки к созданию своего механизма. На этот раз - открытие значения из текущей колонки.

02.09.2019    9780    SeiOkami    35    

Будни автоматизации или "мне нужна программка для 3D упаковки" Промо

Практика программирования Математика и алгоритмы Оптовая торговля Оптовая торговля v8 1cv8.cf УУ Бесплатно (free)

Автоматизация отечественных предприятий, которой приходиться заниматься, это нужная и высокооплачиваемая, но довольно нервная работа. Выручает юмор. Например, при общении с требовательным клиентом можно вспомнить анекдот: "Держась руками за стену, на ногах еле стоит мужик. К нему пристает ребенок: "Ну, папа, пожалуйста, сделай мне кораблик!", папа отвечает: "Ага! - Сейчас все брошу и пойду делать тебе кораблик!". Про один такой сделанный для клиента "кораблик" и хочется рассказать. Надеюсь, совместное погружение в теплое ламповое (то есть клиентоориентированное) программирование доставит Вам положительные эмоции, да и задача попалась интересная. Поплыли?

24.03.2014    45247    ildarovich    116    

Иерархия без "В ИЕРАРХИИ"

Математика и алгоритмы v8 Бесплатно (free)

Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи "Уровни, глубина, прародители, циклы и аналоги запросом" [https://infostart.ru/public/160707/].

22.08.2019    12302    ildarovich    19    

EnterpriseData – часть 3. Загрузка данных, идентификация объектов

Практика программирования Математика и алгоритмы Перенос данных из 1C8 в 1C8 Разработка v8 v8::УФ 1cv8.cf Бесплатно (free)

Основные этапы загрузки данных через EnterpriseData. Идентификация объектов загружаемых полностью и по ссылке. Приведены схемы процессов загрузки данных. Описание основных операций и обработчиков. Перечень процедур БСП, используемых при загрузке данных, структура «КомпонентыОбмена».

22.08.2019    14786    ids79    8    

Обработчики событий при записи объектов. Зачем и что за чем?

Математика и алгоритмы v8 Бесплатно (free)

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    49041    AlbinaAAA    28    

Метод Кларка-Райта. Оптимальное планирование маршрутов грузоперевозок Промо

Математика и алгоритмы Бесплатно (free)

Одной из наиболее важных задач каждого предприятия, осуществляющего доставку грузов в крупных населенных пунктах, является сокращение издержек. Возможное решение данной проблемы заключается в сокращении пробега автотранспорта и, как следствие, уменьшении расхода ГСМ. Появляются такие вопросы ... - СКОЛЬКО НУЖНО МАШИН ДЛЯ РАЗВОЗКИ КОНКРЕТНОГО ОБЪЕМА ГРУЗА ПО АДРЕСАМ ДОСТАВКИ ? - КАК РАЗБИТЬ ТОЧКИ ДОСТАВКИ НА ОПТИМАЛЬНЫЕ ПО ПРОБЕГУ И ЗАГРУЗКЕ МАШИН МАРШРУТЫ ? ... В этой статье Вы найдете один из многих способов получить ответ на эти вопросы.

10.02.2016    59729    mi1man    20    

Как проводятся документы в типовых конфигурациях от 1С

Математика и алгоритмы Практика программирования Разработка v8::ОУ ERP2 УТ11 Россия УУ Бесплатно (free)

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге "Разработка управляемого интерфейса" (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

24.07.2019    27216    skv_79    35    

Управление качеством кода

Математика и алгоритмы Рефакторинг и качество кода v8 Бесплатно (free)

О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

22.07.2019    16345    Stepa86    33    

Что делает "В ИЕРАРХИИ" в запросе?

Математика и алгоритмы v8 Бесплатно (free)

Описание действий платформы 1С при использовании конструкции "В ИЕРАРХИИ" в запросах.

16.07.2019    26025    YPermitin    34    

Приемы обработки больших данных в 1С Промо

Универсальные обработки Математика и алгоритмы Перенос данных из 1C8 в 1C8 v8 1cv8.cf Бесплатно (free)

Рассказ об эффективных приемах организации обработок больших объемов данных на платформе 1С

07.08.2015    66974    tormozit    27    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    51764    ids79    25    

Реализуем Стек, Очередь и Приоритетную очередь в 1С

Практика программирования Математика и алгоритмы v8 1cv8.cf Россия Бесплатно (free)

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

24.06.2019    14075    RonX01    65    

Почему вообще работает мой запрос? или Ещё раз о планах запросов

Математика и алгоритмы Практика программирования Разработка v8::Запросы Бесплатно (free)

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

10.06.2019    9361    DataReducer    12    

XDTO - это просто Промо

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты. Целью данной статьи (или цикла статей, как получится) стало желание поделиться накопленным опытом. Мне кажется, многие неочевидные вещи в механизме XDTO необходимо осветить получше.

24.12.2012    293097    Evil Beaver    173    

Вычисление 200 тысяч знаков числа pi

Математика и алгоритмы v8 Россия Бесплатно (free)

В статье рассматриваются возможности платформы выполнять сверхточные вычисления без использования сложных алгоритмов и внешних компонент на примере вычисления числа pi.

28.05.2019    7857    Oleg_nsk    96    

Регистры накопления. Виртуальные таблицы. Часть №1: Обороты

Практика программирования Математика и алгоритмы Разработка v8 1cv8.cf Бесплатно (free)

Описание работы платформы 1С:Предприятие 8.2 с виртуальной таблицей "Обороты" регистров накопления.

20.05.2019    27089    YPermitin    7    

Выдержки из книги Чистый код

Математика и алгоритмы Бесплатно (free)

Недавно я прочитал книгу "Чистый код" Роберта Мартина (Robert Cecil Martin). В ней описываются принципы организации и форматирование исходного кода программы так, чтобы в дальнейшем было легко поддерживать такой код. Эта книга является библией для многих программистов, но вот в среде программистов 1С, к сожалению, не очень распространено чтение подобной фундаментальной литературы. Книга более 400 страниц и так много порой лениво читать, да и времени всегда не хватает. По этому я решил выделить в виде цитирования по разделам самые важные моменты. А также снабдил текст своими примерами кода.

16.05.2019    10397    FreeArcher    105    

Самоучитель языка запросов 1С. Промо

Практика программирования Решение задач на 1С:Специалист Математика и алгоритмы v8 v8::Запросы Бесплатно (free)

Сервис для изучения запросов 1С: "Консоль изучения запросов 1С:Предприятие 8". Теперь и с конструктором запросов!

07.05.2013    109856    bpc222    327    

Что такое алгоритм?

Математика и алгоритмы Бесплатно (free)

Как ответить на этот вопрос и не попасть пальцем в небо.

25.02.2019    8260    mkalimulin    274    

Криптовалюты, а также иные взгляды на природу денег в терминах 1С

Математика и алгоритмы Бесплатно (free)

Это отчасти полемическая статья. Я задумал написать ее как ответ на другую хорошую статью о криптовалютах. Хотелось поспорить с некоторыми утверждениями автора, а ещё больше с некоторыми комментариями. А чтобы текст был более понятным для местной аудитории, я решил использовать, где только возможно, терминологию и практику 1С.

28.01.2019    6214    mkalimulin    89    

Антидот

Практика программирования v8 Бесплатно (free)

Необходимое лекарство для тех, кто случайно передозировал чтение статей о хорошем-плохом программировании на 1С.

22.01.2019    7351    mkalimulin    183    

Предметно-ориентированное проектирование (3D) в 1С. Виртуальная машина. Промо

Математика и алгоритмы Бесплатно (free)

Проектирование программного обеспечения - это постоянная битва за простоту.

03.06.2014    40199    Evgen.Ponomarenko    88    

Роберт Мартин: "Будущее программирования" / Robert Martin: "The Future of Programming"

Математика и алгоритмы Блоги Бесплатно (free)

Перевод-транскрибация выступления.

14.01.2019    15629    Vladimir Litvinenko    38    

Многоязычное программирование: создание систем с использованием нескольких языков

Математика и алгоритмы Россия Бесплатно (free)

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

09.01.2019    11827    kalyaka    36    

Решение транспортной задачи запросом Промо

Математика и алгоритмы v8 Бесплатно (free)

Списание по двум последовательностям партий запросом (без программной обработки)

1 стартмани

30.04.2014    35015    bforce    22    

Размышления о хороших практиках, навеянные одной статьей

Математика и алгоритмы Бесплатно (free)

Прочитал статью "Ректальное программирование: основы для практикующих 1С-программистов". Статья очень хорошая и своевременная. Но у меня возникло некоторое сомнение. А достаточно ли автор любит и понимает предмет, о котором пишет? Насколько богат его опыт ректального программирования и занимался ли он им вообще? Как человек обладающий многолетним опытом РП, я решил представить вам необходимые дополнения к статье.

21.12.2018    6791    mkalimulin    61    

Ректальное программирование: основы для практикующих 1С-программистов

Математика и алгоритмы Бесплатно (free)

Одной из самых популярных и зарекомендовавших себя методологий программирования в 1С является так называемое ректальное программирование. Редкий проект внедрения и сопровождения учётных систем на платформе 1С обходится без его использования. Зачастую без знания данной методологии программистам даже бывает сложно найти работу в сфере 1С, потому что работодатели, особенно фирмы-франчайзи, в основном отдают предпочтение классическим, зарекомендовавшим себя методикам, а не новомодным заграничным веяниям.

19.12.2018    42980    for_sale    351    

Многопоточное восстановление последовательностей

Производительность и оптимизация (HighLoad) Практика программирования Математика и алгоритмы Универсальные функции v8 Бесплатно (free)

Универсальный алгоритм многопоточного фонового восстановления любой последовательности.

05.12.2018    13175    _ASZ_    33    

Парсер запросов 1С. Часть 1: Введение, разбор математических выражений Промо

Математика и алгоритмы v8 Бесплатно (free)

Рано или поздно становится скучно решать типичные задачи, для которых придумана 1С. Голова пухнет от бухгалтерских терминов и очередных "хотелок" пользователей. Именно в такие моменты хочется гордо поднять голову, воскликнуть "Но я же программист!" и заняться чем-то интересным. В цикле статей я постараюсь доступно описать, как устроены парсеры в целом и на примере парсера языка запросов 1С. Требования к навыкам читающего: основы языка 1С, основы алгоритмизации.

1 стартмани

04.12.2013    30705    juntatalor    49    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

Математика и алгоритмы Практика программирования v8 Россия Бесплатно (free)

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

23.08.2018    38282    Rain88    46    

Учебный курс. Повышение качества разработки. Ошибки программы

Практика программирования Математика и алгоритмы Рефакторинг и качество кода Бесплатно (free)

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста. Лекции № 3,4,5. Эти лекции посвящены ошибкам программ, их классификации и способам исправления

10.07.2018    19581    Артано    92    

Що там у них в Java

Математика и алгоритмы Бесплатно (free)

Развенчание мифа о тяжёлой жизни не 1С программистов на примере создания веб сервиса редактирования таблички с использованием framework spring в Java.

24.05.2018    11196    van_za    62    

Сервис для изучения методов платформы 1С:Предприятие 8. Бесплатно! Промо

Практика программирования Решение задач на 1С:Специалист Математика и алгоритмы v8 Бесплатно (free)

Бесплатный ON-Line сервис изучения методов платформы 1С:Предприятие 8. Подготовка к аттестации 1С:Специалист on-line! Тестовые задания по различным видам учета! Подсказки для оптимального решения!

27.06.2013    50000    bpc222    52    

Учебный курс. Повышение качества разработки. Вводная лекция, часть 2

Практика программирования Математика и алгоритмы Бесплатно (free)

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста. Лекция №2. Эта лекция посвящена абстракциям, их свойствами и практическому применению в рамках классических парадигм программирования.

24.05.2018    12948    Артано    36    

Учебный курс. Повышение качества разработки. Вводная лекция

Математика и алгоритмы Бесплатно (free)

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста.

10.05.2018    17877    Артано    51    

"Взлом" теста "1С:Профессионал" методом машинного обучения

Практика программирования Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

Нейронные сети – не единственная модель, реализующая принципы машинного обучения. Есть еще байесовская модель, которая математически строже и определеннее, поскольку построена на надежном фундаменте теории вероятностей. Применению байесовского вывода к решению интересной теоретической задачи и посвящена данная статья. Слово "взлом" в заголовке использовано для привлечения внимания. Речь идет исключительно о математическом методе, показанном на примере знакомой всем задачи. 

12.03.2018    19153    ildarovich    19    

Внутреннее качество разработки конфигураций 1С Промо

Практика программирования Математика и алгоритмы Бесплатно (free)

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

21.06.2013    37791    ig1082    50    

Правила программирования и автоматизации

Математика и алгоритмы Бесплатно (free)

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

21.02.2018    18334    Dzenn    127    

Творим Историю вместе

Математика и алгоритмы Бесплатно (free)

Расширяем границы, выходим за рамки, ставим новые цели - все, как вы любите.

17.01.2018    17431    1c-intelligence    108    

Использование git при разработке на 1С

Математика и алгоритмы Россия Бесплатно (free)

Продолжение цикла статей по основам CI. Данная статья расскажет о реализации возможности хранения кода продукта в системе управления версиями git и познакомит со специализированным инструментарием, предназначенным для решения этой и других смежных задач.

27.12.2017    32431    real_MaxA    57    

v8: Концепция минимального изменения конфигурации для легкого обновления Промо

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

"Лучше день потерять потом за пять минут долететь" ((с) "Крылья, ноги и хвосты") или как сделать так чтобы обновление конфигурации проходило с минимальными трудозатратами.

28.01.2013    38093    MarSeN    57    

Об уровне абстракции и сложности системы

Математика и алгоритмы Бесплатно (free)

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

21.12.2017    12276    m-rv    15    

Двоичное дерево, двоичное дерево поиска, двоичная куча, B-дерево

Математика и алгоритмы Бесплатно (free)

В большинстве реляционных СУБД в качестве структуры данных для индексов (та или иная их реализация) используются именно деревья. И не просто деревья, а сбалансированные деревья поиска. В этой статье как раз о них.

24.11.2017    15860    Irwin    5    

Введение в CI для 1С

Математика и алгоритмы v8 Россия Бесплатно (free)

Значение роли тестирования при разработке ПО трудно переоценить, его применение позволяет повысить надёжность продукта и улучшить качество кода. Для продуктов для платформы 1С:Предприятие существует ряд инструментов для проведения тестирования, в том числе и от самого вендора. Но, также появились открытые инструменты, реализующие мировые практики проведения тестирования (проверки продукта), поддерживаемые сообществом. В этой статье описаны базовые принципы, которые необходимо понимать перед началом применения этих инструментов.

21.11.2017    23632    real_MaxA    22