Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет chistyakov ([info]chistyakov)
@ 2005-06-10 18:14:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Показалось важным про программирование. Выношу из комментов
Из переписки с dottedmag об объектном и прочем неестественном программировании в дискуссии "Компрачикосы от программирования".

Мой личный научно-технический интерес заключается в создании комплексов ДПЛА. Это сложные радиотехнические, авиационные, программные и ещё чёрт-те какие комплексы.
В части программирования меня интересует создание бортовых и наземных программ для таких комплексов. Требуется заставить ЭВМ делать то, что требуется комплексу для решения его целевой задачи. Причём пароль к успеху один-- "надёжность"! (подчеркну, что речь идёт НЕ о персональных компьютерах, которые в комплексах тоже есть, естественно, на рабочих местах операторов в качестве интерфейсных узлов с человеком).

Уверяю Вас, что никакие из экзотических видов программирования, перечисленных Вами, не требуются, более того вредны, при решении моих проблем. Ибо все они зиждутся на создании некоторых виртуальных слоёв архитектуры на реальном "железе" ЭВМ. Каждый такой слой, особенно когда его делали чужие люди, особенно иностранцы, является источником ненадёжности, причём принципиально непознаваемой ненадёжности.

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

Господ "программистов" просят не беспокоиться.

{+}


(Читать комментарии) - (Добавить комментарий)


[info]ex_chistyak@lj
2005-06-12 15:27 (ссылка)
Жаль некогда Вам ответить. Спишемся позже.
Советую узнать у старших товарищей про движение "Программирование без гоу ту". Много узнаете.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dottedmag@lj
2005-06-14 01:27 (ссылка)
Покажите мне хотя бы одно goto в моих разработках? При том, что структурным программированием я не пользуюсь обычно.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ex_chistyak@lj
2005-06-14 02:15 (ссылка)
Не видел я Ваих разработок, поэтому показать ничего не могу. А что Вы понимаете под "структурным программированием"? И как это Вы им не пользуетесь?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dottedmag@lj
2005-06-14 04:16 (ссылка)
Структурное программирование - это стиль программирования, в котором главными строительными элементами являются структурные (неинкапсулированные) типы данных, блочные структуры кода. Другими отличительными особенностями являются функции, не являющиеся типами, а также открытость данных.

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

(Ответить) (Уровень выше) (Ветвь дискуссии)

Я не силён
[info]ex_chistyak@lj
2005-06-14 05:20 (ссылка)
В структурном программировании я не силён на таком уровне, чтобы сходу дать ему короткое неоспоримое определение, но попытаюсь изложить своими словами то, что я вынес из дискуссий 70х.

Признаки структурного программирования:
1) разбиение задачи на уровни;
2) разбиение каждого уровня задачи на отдельные модули. Принцип: "одна функция (в человеческом смысле) -- один модуль";
3) передача управления -- только сверху вниз с обязательным возвратом управления вызвавшему модулю;
4)ограничение на размер модуля исходного текста 50..100 строк, в идеале, чтобы текст модуля помещался целиком на одной странице (экране). Если не влазит, значит надо дробить дальше. Использование отступов и других средств наглядного форматирования текста программы. Обязательные СОДЕРЖАТЕЛЬНЫЕ комментарии ко всему модулю и в местах, могущих вызвать затруднения в понимании посторонним человеком;
5) инкапсуляция данных внутри модулей, право использования глобальных переменных даётся только главному модулю верхнего уровня; обмен данными между модулями только сверху вниз и обратно, с верхних уровней на нижние через параметры, передаваемые: вниз -- по значению, вверх -- по ссылке;
4) минимизация применяемых выразительных средств языка программирования (пресловутое "без гоу ту"): только простая последовательность операторов, условный переход if then [else], циклы for и while. Этого достаточно. Для упрощения чтения программы человеком допустимо (даже желательно) использование вычисляемого оператора перехода типа case of. В случаях "аварийных исходов" модулей, чтобы не загромождать текст условными операторами, допустим безусловный переход goto, но только на конец модуля;
5)контроль модулями входных и выходных данных на "абсурдность" (без фанатизма, конечно.

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

Обратите внимание, что про типы данных тут ничего нет. Какие надо, такие и используйте. Открытостью данных и не пахнет. Что касается типов функций, то это мелкая необязательная вещь. Инкапсуляция налицо.
Что касается программирования по событиям, то в технике реального времени так делали всегда (прерывания). Это недавно вдруг комнатные "программисты" открыли и крик подняли о своей необычной гениальности. А то прерываний боялись как огня:).

{+}

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: Я не силён
[info]dottedmag@lj
2005-06-14 05:34 (ссылка)
Ну вот и все - это уже не структурное, а модульное программирование.

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

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

(Ответить) (Уровень выше)


(Читать комментарии) -