LINUX.ORG.RU

Программы - не стихи, их надо проектировать, а не писать.

 , , , ,


3

2

Этот пост как спроектировать.... заставил меня вспомнить о замечательном человеке и его статье. Есть такой дедушка, зав. кафедрой в ИТМО - Анатолий Шалыто. Очень толковый препод. И вот его статья «Программы –не стихи, их надо проектировать, а не писать» - http://is.ifmo.ru/main/article_ap.pdf .

Кроме критики сложившейся ситуации с производством ПО, Шалыто даёт ссылки на свои примеры проектирования и показывает почему так делать правильно. Ссылки прямо там в статье. Битых ссылок не встречал.

Вот самые интересные цитаты:

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

Бардак с ПО творится почти во всем мире. Если аппаратура проектируется всегда, и только потом производится, то проектная документация на программы на практике выпускается крайнередко. Универсальный язык моделирования (UML), на который одно время у многих были большие надежды, используется далеко не всегда, причем даже в тех случаях, когда он применяется, диаграммы обычно строят одни люди –архитекторы, а другие –программисты в лучшем случае в них заглядывают.

Я считаю, что до того, как начинать программирование системы, необходимо разобраться с ее поведением, ипредлагаю не начинать сразу писать программу, а сначала нарисовать «картинки»–графы переходов, которые опишут поведение будущей программы в терминах состояний, переходов между ними и действий, выполняемых в состояниях и/илипереходах.

К чему это я? Мне хотелось бы узнать, много ли на ЛОРе среди разработчиков моих единомышленников - тех кто солидарен с мыслями изложенными в статье и тоже практикует проектирование ПО перед кодингом. А заодно интересно каким софтом вы пользуетесь для рисования схем, графов, алгоритмов. Может кто-то поделиться своими примерами проектов ПО.

PS, для модераторов. Линукс здесь при том, что:

Простота требует проектирования и хорошего вкуса.

Л. Торвальдс



Последнее исправление: MittenShmitten (всего исправлений: 1)
Ответ на: комментарий от AntonI

сам он не уймется и все тут загадит своим фонтаном.

Показывай сообщения где я не прав, балабол.

anonymous
()
Ответ на: комментарий от Miguel

Алгоритмы — это и есть код.

не то только. точнее, код чего именно?

algorithm=logic+control

(c) Robert Kowalski, 1979

у него по прологу много статей/книг было.

так вот, если «алгоритм+данные=программа»(с)Никлаус Вирт, и «алгоритм=логика+управление»(с)Роберт Ковальски, то есть, «программа=логика+управление+данные»,

то что же мешает эти модели/метамодели (программ,логик,управлений, данных) прорабатывать по отдельности, а не все сразу (не)посредственно в коде?

ровно это и происходит у А.Шалыто в SWITCH-технологии: есть две архитектурные схемы, логики и управления отдельно. данные там флаги для конечного автомата, не так интересны, хотя тоже есть какой-то порядок с типами переменных вместо тупо каких-то рандомных флагов.

далее, что же мешает по модели строить реализацию, а по метамодели ещё одну модель?

да ничего особого.

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

anonymous
()
Ответ на: комментарий от anonymous

Интуитивно ООП = КА + ФП. Если выделить из объектов состояние в явном виде, не любую память, а именно то состояние которое влияет на логику обработки, то смысла в объекте станет не много, останутся вычисленные значения и буферы.

kolpakchi
()
Ответ на: комментарий от AntonI

Рассчитаны параметры квантового компьютера для взлома ключей, используемых в Bitcoin

!ъ:

Расчёт показал, что взлом Bitcoin при помощи квантовых компьютеров как минимум в ближайшие 10 лет нереалистичен.

В частности, на подбор 256-разрядного ключа ECDSA в течение часа потребуется 317 × 10^6 физических кубитов. Открытые ключи в Bitcoin можно атаковать только в течение 10-60 минут после инициирования транзакции, но даже если на взлом можно было бы потратить больше времени, порядок мощности квантового компьютера при увеличении времени остаётся на том же уровне. Например, для подбора в течение дня требуется 13 × 10^6 физических кубитов, а 7 дней - 5 × 10^6 физических кубитов. Для сравнения самый мощный из ныне созданных квантовых компьютеров насчитывает 127 физических кубитов.

так что множить на ненулевые делители нуля можно ещё очень долго :))

anonymous
()
Ответ на: комментарий от kolpakchi

ну да, например через монады как в хаскеле или через замыкания как в схеме.

опять же, модели данных можно упростить если делать их в стиле эрланг.

anonymous
()
Ответ на: комментарий от Toxo2

Тут-то как раз ПО как стихи

тихо, улитка, позли
мне systemd,pulseaudio,polkit, javascript и python
не нужно.

надо же, дырка в polkit’е
у них да была
совсем не заметил.

совсемд
мне не нужно совсем!
как я свободен от моды

захотелось медитаций.
запускаю confgiure.sh
лейся, LFS по просторам харда.

anonymous
()
Ответ на: комментарий от TDrive

ну или ты предлагаешь всех водителей сделать умными?

Можно глупых удалять с дорог или не выпускать на них.

ya-betmen ★★★★★
()
Ответ на: комментарий от AntonI

Да сколько ж говорить, что не ракета это была, а разгонный блок. Ракета его довела куда надо, а дальше он сам лажанулся. Ну и прошивка там была единая, просто алгоритм 20-летней давности на такую последовательность координат оказался не рассчитан.

hobbit ★★★★★
()
Ответ на: комментарий от anonymous

мой размер довольно прост:
хайкай-но ренга гекзаметр
да в полный рост.

anonymous
()
Ответ на: комментарий от MittenShmitten

Разумно ожидать от навигатора маршрута, который соответствует ПДД.

Яндекс так не считает и у тебя есть возможность не использовать их навигатор если ваши понятия «разумности» расходятся.

ya-betmen ★★★★★
()
Ответ на: комментарий от anonymous

Разумеется это определение - кал

IEEE, ISO и IEC в том или ином виде пересказывают определение Майерса, маня.

anonymous
()
Ответ на: комментарий от anonymous

Сидел я как то на семинаре по квантовым вычислениям. У них основная печаль (кроме нехватки кубитов) - куда эти вычисления прислонить. Рассказывают что присобачили квантовую нейронную сеть риски инвестивания для банка оценивать, нереальная круть! И тут коллега рядом, с покерфейсом, сует мне под нос статейку про хомяка трейдера… https://quote.rbc.ru/news/article/6151f1179a794751775e9ca0

AntonI ★★★★★
()
Ответ на: комментарий от ya-betmen

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

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

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

Я рад, что так произошло. Но речь про ошибки ПО, а яндекс не гарантирует полное соответствие пдд.

ya-betmen ★★★★★
()
Ответ на: комментарий от ya-betmen

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

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

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

никому не обещал не устраивать концлагеря

Вообще-то обещал. И чё все прикопались к Гитлеру? Людей в печи не Гитлер лично закидывал.

no-such-file ★★★★★
()
Ответ на: комментарий от ya-betmen

это не апелляция а пример, гитлер тут не является аргументом в защиту моей позиции.

TDrive ★★★★★
()
Ответ на: комментарий от no-such-file

устроил то все это он, а ге он обещал не делать этого?

TDrive ★★★★★
()
Ответ на: комментарий от StoryTeller

Cool story, bro.

Без всяких waterfall

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

Обычные блок-схемы алгоритмов, графы переходов конечных автоматов,

Ну, нарисовать на бумажке граф переходов состояний - да, полезно. Но вот блок-схемы алгоритмов. Ты уверен что это надо? Эта методика придумана когда программировали в машинных кодах. Сейчас наступило светлое будущее, ЯВУ, большие мониторы, можно позволить себе писать верхний уровень декомпозиции используя вменяемые имена функций и переменных, делая тем самым ту же блок-схему только в коде. Рисуя эту схему ты просто выполняешь давно потерявший смысл ритуал, а если ты эту блок-схему ещё и прилагаешь к документации, то, через пару лет разработок/доработак она будет просто врать о том, что делает твоя программа.

khrundel ★★★★
()

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

Bagrov ★★★★★
()
Ответ на: комментарий от no-such-file

Но советских людей расстреливал лично Сталин! Бггг.

anonymous
()
Ответ на: комментарий от Toxo2

Потому что надо читать документацию на языке оригинала, а не кривые переводы:

The following example finds the average of the weight of all products. It substitutes the value 50 for all NULL entries in the Weight column of the Product table.

А что, кто-то ещё по своей собственной воле использует SQL Server?

theNamelessOne ★★★★★
()
Ответ на: комментарий от modest

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

Вот о тебе и стало всё сразу ясненько.

при этом даже не разбираясь в том, на что ты отвечаешь, но моё сообщение тебя задело — значит, ты лицемер с болезненным самомнением. И аргументированно ответить на моё сообщение ты не можешь, поэтому пытаешься апеллировать к «культуре».

Я буду писать тебе так, как я захочу, иди поплачь в подушку.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 4)
Ответ на: комментарий от theNamelessOne

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

Я буду писать тебе так, как я захочу, иди поплачь в подушку.

Ваще умиляешь

modest
()
Ответ на: комментарий от Miguel

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

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

MittenShmitten
() автор топика
Ответ на: комментарий от modest

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

Ну тогда может расскажешь, как Swagger UI может помочь в задаче автогенерации swagger.json/openapi.json из кода? Или почему ты можешь писать другим людям в таком тоне, в котором ты захочешь, но в твою сторону никому так же делать нельзя?

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 1)

А уважаемый господин заведующий кафедрой не забыл рассказать, как надо работать с изменениями?

CaveRat ★★
()
Ответ на: комментарий от theNamelessOne

ни как, это только одна часть свагера из трех

TDrive ★★★★★
()
Ответ на: комментарий от theNamelessOne

а почему тебе важно что бы этим занимался именно свагер юай? у него из названия следует что это не его работа

TDrive ★★★★★
()

атем

крайнередко

ипредлагаю

и/илипереходах

А тут нужно писать. Желательно правильно. Перечитывать копипасту из пэдээфок. Исправлять.

anonymous
()
Ответ на: комментарий от anonymous

Сваггер – производная от ниггер и свингер.

anonymous
()
Ответ на: комментарий от anonymous

мнение анонимусов тут ценится, правда, продолжай

TDrive ★★★★★
()

и предлагаю не начинать сразу писать программу, а сначала нарисовать «картинки»–графы переходов, которые опишут поведение будущей программы

Ни сранный заказчик, ни конченный начальник на это не пойдут. Зачем это делать? Я не буду за это платить. И так далее.

Это вообще не к программистам относится. Программист – низшее звено. И спрашивать его как оно правильно никто не будет.

Все, расходимся. Зря кипеш поднимали. Все тлен.

anonymous
()
Ответ на: комментарий от TDrive

а почему тебе важно что бы этим занимался именно свагер юай?

Почитай тред, если тебе интересно.

у него из названия следует что это не его работа

Я с тобой полностью согласен.

theNamelessOne ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.