Блог им. Igr

Вопрос тем кто пишет роботов

    • 06 марта 2019, 14:40
    • |
    • Igr
  • Еще

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

 

примеру из вашей практики буду благодарен 

1.2К
48 комментариев
Если профессионально к делу подходить, то конечно надо с блок схемы. По ней потом писать код. Если такой метод приживется, разработки будут качественней со временем.

Пока рисуешь блок схему,  сразу вылезает много подводных камней, которые на бумаге сразу и решаются.
avatar
Андрей К, блок схему в ручную на листочке или в проге какой? 
avatar
Igr, в проге. Использую Microsoft Visio, либо Microsoft Publiser. Сейчас если найду что из не секретного, покажу
avatar

Igr, 
вот в Visio я подобные отчеты себе рисую с блок схемами (там одна есть)

https://cloud.mail.ru/public/t68c/moEkBWbp9

avatar
Igr, можно на ватмане, если схема большая, так нагляднее.
avatar
Апостол Андрей, 
, можно на ватмане, ес
у меня недавно озарение пришло, я подскочил, под рукой не было листка, стал вообще рисовать мелками на детской доске из Икеи у дочки =))
avatar
Андрей К, да шучу я)
avatar
Практически — схемку на листе бумаги, потом побольше комментариев в код. Чем больше тем лучше. У меня иногда на 1 строчку кода 5-6 строк комментариев — что там и зачем.
avatar

Это вопрос прямо отсылающий к архитектуре.

Универсальных решений здесь нет.

Но имеются относительно стандартные подходы.

Чтобы грамотно декомпозировать программу нужно иметь представление как минимум о базовых паттернах.

На эту тему рекомендую https://www.ozon.ru/context/detail/id/2457392/

Определяете какие сущности должны быть представлены, как они будут взаимодействовать(интерфейсы), используете паттерны и будет вам счастье.

Но должен предупредить, что прочитать книгу, понять и освоить — это 3 разные вещи.

Между которыми может пройти не один год.

 

Вспоминать устройство программы гораздо проще, разбирая стандартные конструкции(шаблоны).

Документация и комментарии сами собой разумеются.

Я перешёл на модель отдельная логика (блок) — отдельный файл. И побольше комментариев.
Каждый файл отвечает за свою задачу.
avatar
Даже скажу больше по поводу комментариев.
Иногда, если алгоритм сложен, я пишу огромную простыню развернутого текста — что, как, куда писать, откуда брать. Фактически, пишу программу, но на русском языке. Потом вычитываю.
Потом начинаю писать код прямо между абзацами этого текста, а текст превращаю в комментарии.
Вот так иногда и получается, что в файле из 500 строк — кода только строк 20-30. Зато он предельно понятен, даже если поднять его через 5 лет.

p.s.
Помнится, какбэгоботу я этого всего объяснить так и не смог — этот рукожоп предпочитал присылать код без единой строчки комментариев.
avatar
Turbo Pascal,  ну он же за бабки пишет, может не хочет что б заказчик мог разобраться) вдруг сам начнёт писать или его код исправлять, или ошибки сам быстрее и кучу найдёт… мало ли какие у него соображения
avatar
Igr, 
может не хочет что б заказчик мог разобраться
оставлять комменты — это культура программирования. Если не оставляет комменты, как он потом через год менять код будет по запросу заказчика
avatar

Андрей К, ну может у него и есть экземпляр с коментами 

 

я например думал если робота поставлю на сервер куда то, то надо поудалять коменты, что б тяжелее было кому то разобраться)) 

avatar
Вы затронули большую-большую проблему!
Пишу комментарии, чем больше тем лучше. Плохой коммент лучше никакого. Пишу и долго обдумываю название функций и объектов.  

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

Использую рефакторинг и агрессивно выношу куски кода в отдельные модули-файлы.

avatar
Serg Prismotrov, рефакторинг — это что, можно пример? 
avatar
Igr, это изменение кода с помощью IDE (редактора) в несколько кликов. Например переименовываете функцию — а она везде в коде меняет название, даже в модулях. Или одним кликом функцию можно вынести в отдельный файл-модуль. 
avatar
Serg Prismotrov, длинные как раз нормально выглядят.
Короткие названия приживаются из-за закомплексованности адептов. Они в своем стремлении показать мнимую лаконичность экономят на каждой букве.
На самом деле это обезьяний стиль. Он больше всего у нас заметен в перле и хаскеле, к слову. Причем, если перл действительно сахарнолаконичный, то в хаскеле каждую такую лаконичность кучей свистоперделок еще надо снабдить.

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

Eugene Logunov, спасибо

я один, самоучка 

avatar
Об ошибках: Мне этот способ не прижился, но некоторым нравится: Unit tests. Вы создаёте много проверочных тестов, простых и сложных для своих подпрограмм, объектов, функций, модулей. Ну вот считаете RSI, а он же в диапазоне 0.100 должен быть. Unit test такой — случайная выборка (искусственные цены) отдаётся вашей subroutine, выход должен быть в диапазоне 0..100, если нет — unit test не пройден. 

У вас получается много-много unit tests, которые в хорошей IDE запускается пакетом. Если вы модифицировали код, запустили тесты, а они не прошли — значит ваши изменения (коммит) с багами.  
Для серьёзных проектов помогает.
Мне не подошло, много исследовательской работы на тяп ляп и в ней не до серьёзных подходов.
avatar

Serg Prismotrov, прога для теста прог?  не, это слишком для меня

 

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

avatar
Блок-схема алгоритма это для линейного программирования, канувшего в лету. Ну или если очень простенькая прога. А так ООП. Там немного все иначе.
avatar
Karim, блок схемы есть разного характера. Как глобальные с описанием общей логики, так и частного характера, например алгоритм сдвигания заявок в стакане.
avatar
Я хоть и не программист, но даже пользуясь простыми (так говорят, хех) языками типа AFL, я начал понимать, что такое вовремя оставить комментарий к коду. Иной раз достаешь что-то старое, затестил, возможно даже плюсует, а что именно оно делает и зачем уже не вспомнить без разборок с кодом. Теперь краткую логику можно описать в названии, двумя-тремя сокращенными словами, уже будет запоминаться ассоциация глядя на список файлов или каталогов, потом в начале кода можно описать подробную логику, ход разработки и теста, и правки по очередности (патчи, типа))
avatar
Friendly Deep Space, на самом деле, зачастую, комментарии порождают такой же ад, проще код прочитать, чем комментарии. При сопровождении, любое изменение нужно отражать, кто-то на это ложит, в итоге это все превращается в помойку и не работает, коментарии не соответствуют.
Даже свои собственные комментарии не так просто понять через годик-второй.
Вместо того чтобы на логике концентрироваться, будешь голову ломать как все лучше описать.
Это все ложная религия
avatar
Friendly Deep Space, А в конечном счете все превращается в нечто такое

push(myElement, myArray)// Here we pushed myElement to MyArray

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

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

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

Если нужно что-то писать на быстром многословном, невыразительном языке, то можно взять язык прототипирования, который позволяет емко выражать логику. Подойдет пистон например.
Еще лучше самопис или DSL.
Идеально спроектировать язык под задачу, и решать эту задачу на этом специальном языке, а уже потом, либо шлифовать узкие места, либо переписать.
Это позволяет сконцентрироваться на логике и забыть о нюансах
Но это уже высший пилотаж. Это то, как должно было бы быть вообще в IT-инженерии, но не сбылось
avatar
Я просто на бумажке расписываю логику по пунктам, ну это в принципе та же блок схема. Рисую график и сделки, как должно быть по логике. Ленюсь только комментарии в коде делать, а надо бы
avatar
можно проще сделать. Я летом 2018 г. стукнул компьютер, отчего полетел жесткий диск, с концом. Полгода восстанавливал все алгоритмы и заново писал код. Поэтому теперь очень не плохо его помню на память.
avatar

Max, ) я на флешечку копирую) 

но надо бы винт запасной иметь .... 

avatar
Igr, Облако Вам в помощь…
Igr, поддерживаю всё, что выше написано. От себя добавлю (может и есть уже выше):
0. Логику робота действительно важно строго сформулировать и зафиксировать на бумаге или файле.
1. на начальном этапе лучше И стол для бумаг, И стена для ватмана(-ов) и листков
2. обязательно папки «архив» и «идеи» как в бумажном, так и в компьютерно-облачном виде. Так сказать Ваше «детище» будет связано и с прошлым и с будущим. В Microsoft Visio или Microsoft Publiser обязательно вкладки с предыдущими блок-схемы логики проги. Диалектически, предыдущие версии могут быть лучше.
3. поддерживаю полное комментирование кода
4. поддерживаю блочность кода. Итоговая прога — сборка модулей-программ
5. проверка идей по очереди. Не вноси в блок-схемы и в код сразу несколько идей сразу. Одну внес-проверил-всё работает и работает как планировал, то делаем копию и только потом вносим изменения по другой идее.
avatar
FullCup, Ну извините. Я не думал что кого-то могут задевать плюсы и минусы к комментариям. Сам то я на эту тему «толстокож», все эти лайки-дизлайки мне глубоко фиолетовы.

P.S. Ну вот! Хотел наплюсовать ваш комментарий, чтобы вы так не расстраивались, а вы меня уже в бан отправили.  
avatar
Igr, 2019 год на дворе. В интернете полно бесплатных сервисов для управления постоянно изменяющимися файлами — github.com, bitbucket.org, gitlab.com. Миллионы программистов и непрограммистов пользуются ими. Хранят там исходный код, статьи, книги, переводы.
avatar
бабочка

Для разворотных алгоритмов использую схемы в виде бабочек таких.
Идёт поток данных, используются состояния нахождения «робота».
Вначале состояние 0, нет позиций. 
Основной цикл 0, 11, 12.
Предположим, имеется хороший признак, позволяющий ходить от 11 к 12 и обратно в среднем с прибылью. На рисунке наступление его обозначено e+.

Часто добавление трейлинг-стопа результаты ещё улучшает. На схеме состояния 13 и 14. То есть если прошли достаточно в нужную сторону (от 11 к 13), то дальнейшие события: разворот по признаку e+ (от 13 к 12) или стоп (небольшой выигрыш, от 13 к 0).

Вопрос в нахождении такого e+ и удостоверении в его надёжности.
avatar
Лично у меня, блок-схема в голове...
Написал в коде первый блок — запустил — проверил как работает;
Написал в коде второй блок — запустил — проверил как работает;
И так далее...
Ошибки устраняются при тестировании каждого блока...
Затем система в целом…
Андрей Кольцов, Есть два основных вида ошибок:
1.ошибка логики (например определил контртренд а ошибочно перенаправил на трендовые входы)
2.ошибка в коде (опечатки или пропуски каких-то строк например)
Ошибка логики как раз и находится по блок-схеме.
То есть можно получить на выходе работающую программу и даже не заметить что она делает не совсем то, что хотел разработчик. И не факт что ошибка логики вылезет быстро, если не будет ошибок в коде то ошибка логики может и через год только выявиться или даже позже.
Хотя если вести логи операций программы, то ошибка логики может быть выявлена довольно быстро.
Сергей Сергаев, Блок-схема одним помогает, а другим — мешает. Например, мне — только мешает. В относительно сложных программах нужны и комменты, и локальные тесты и логи. И осмысленные имена, и модульность, и этапность разработки. А еще контроль входных данных «на вшивость». Если человек работает в команде, должны быть какие-то общие правила. А если один — можно исходить из личного опыта. 
avatar
SergeyJu, Соглашусь. Правда и когда работаешь один — со временем создаешь сам себе какие-то правила чтобы работать в команде «я сегодняшний» + «я завтрашний» + «я послезавтрашний» 
Eugene Logunov, 
«я такой опытный строитель, что строю дома без проекта»

Не смешите.
На коленке можно делать только собачьи будки, а не дома.
Ну, есть и гении среди нас — эти могут всё.
avatar
Комментарии, рисунки с блок схемами — все хрень. Я всегда сначала пишу автоматические тесты, потом пишу код. Тесты запускаются много раз в день во время разработки. И никогда не врут. Если тесты упали, значит они рассинхронизировались с кодом.
avatar
 Сложные алгоритмы я разбиваю на много-много маленьких классов и методов, для каждого из которых всегда сначала пишу тест, потом реализацию. Прежде чем из множества методов собрать сложный алгоритм, я пишу интеграционный тест и затем делаю реализацию. Для управления состоянием сложной обработки можно использовать «контейнер состояния» вроде Redux-а.
avatar
 Пример теста для алгоритма, который из заявок сводит сделки.
avatar
Я до блок-схем не дорос еще, видимо. Комментарии писать лень, да и потребности их читать за собой не замечаю. Зато для каждого нового куска кода пишу тестирующую функцию, которая на выходе обычно выдает текстовый файл размером в десятки мегабайт. При этом нужно добиться того, чтобы получаемый файл полностью совпадал с аналогичным полученным совершенно другим способом — условно говоря, предыдущей версией кода. При таком подходе отлавливаются все ошибки и остаются для истории примеры корректного использования кода.
avatar

Читайте на SMART-LAB:
5 идей в российских акциях. Индекс МосБиржи снова на грани 2700
Индекс МосБиржи опять торгуется на грани значимого уровня 2700 п. Сейчас не исключен очередной отскок от указанного уровня. Кроме того, рынок...
Фото
Саратовэнерго. Надбавки на 26г. установлены, но это уже не важно. Изменение целевой цены и рейтинга
Комитет государственного регулирования тарифов Саратовской области опубликовал постановление №390 от 26.12.2025г. об установлении сбытовой...
ПАО «ГЛОРАКС» может показать сильные финансовые результаты за 2025 год
Сегодня на снижающемся российском фондовом рынке небольшой рост показывают акции ПАО «ГЛОРАКС», дорожающие на 0,11% до 63,41 руб. за акцию....
Фото
Хэдхантер. Ситуация на рынке труда в декабре идет ко дну - хуже не было никогда
Вышла статистика рынка труда за декабрь 2025 года, которую Хедхантер публикует ежемесячно, что же там интересного: Динамика...

теги блога Igr

....все тэги



UPDONW
Новый дизайн