OberonCore
https://forum.oberoncore.ru/

Программирование. Начала
https://forum.oberoncore.ru/viewtopic.php?f=82&t=2359
Страница 1 из 3

Автор:  Димыч [ Вторник, 16 Февраль, 2010 22:25 ]
Заголовок сообщения:  Программирование. Начала

В соседней ветки начиная с этого сообщения пошло довольно интересное обсуждение.

Суть вкратце можно свести к тому, что "к программе не надо относится как к тексту - это не литературное произведение и оно подчиняется определенным законам".

Каким? На этот вопрос у меня нет ответа.

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

Примеры:

Механика.
Надо подать вращающий момент под углом 90 градусов.
Пожалуйста: конические шестерни, червячная передача, гибкий вал. Открываем справочник, читаем плюсы/минусы/ограничения, выбираем то, что нужно.

Гидравлика.
Надо сбросить воздух из труб системы.
Пожалуйста: кран Маевского, расширительный бачок. Открываем справочник, читаем плюсы/минусы/ограничения, выбираем то, что нужно.

Электротехника.
Надо провести электричество из комнаты в комнату.
Пожалуйста: проводка для улицы, комнаты, 2/3 фазы, нагрузка, способы разводки. Открываем справочник, читаем плюсы/минусы/ограничения, выбираем то, что нужно.

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

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

В программировании, насколько мне известно, такого справочника не существует.
Есть описание высокоуровневых шаблонов, про низкоуровневые ни слова.

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

Попробую пояснить, что я имею ввиду.
В соседней ветке обсуждается шаблон линейного поиска.
Код:
взять_первую_ситуацию;
WHILE ~конец_ситуаций & ~( ... условие поиска ..) DO
  ... возможно, но не очень часто встречается  - действие над текущей ситуацией ...
  взять_следующую_ситуацию
END;
IF ~конец_ситуаций THEN
  ... нашли, делаем что надо, с той ситуацией, на которой остановился цикл...
ELSE
  ... не нашли, делаем что-то, если нужно
END


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

Можно сказать, что это изучается в курсе "структуры данных и алгоритмы". Изучается, но этого мало.

Можно включать и более простые вещи, например сравнение чисел разной размерности (тут важно только описание "граблей"), механизмы формирования ветвления, использование операторов case/switch (тут важны потенциальные проблемы с потерянным break/else).

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

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

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

Еще один важный момент. Те шаблоны, о которых я говорю, практически не зависят от языка, хотя, речь, безусловно, идет в первую очередь об императивных языках. У функциональных языков свои шаблоны; у DSL тоже свои шаблоны (пример - perl).

После накопления некоторого материала можно будет попробовать как-то его классифицировать.

Что думаете?

Автор:  Илья Ермаков [ Вторник, 16 Февраль, 2010 22:48 ]
Заголовок сообщения:  Re: Программирование. Начала

Интересно, интересно.

Такую задачу начали ставить; но обычно идут сверху, от уровня крупной разработки (viewtopic.php?f=57&t=2250, viewtopic.php?f=75&t=2302).
Считается, что уровень кода - это а) "тривиально" б) "индивидуально".
А в итоге - "небоскрёбы на болоте".

Автор:  Евгений Темиргалеев [ Вторник, 16 Февраль, 2010 22:51 ]
Заголовок сообщения:  Re: Программирование. Начала

Димыч писал(а):
После накопления некоторого материала можно будет попробовать как-то его классифицировать.

Что думаете?
Можно продолжить накопление материала в разделе "Алгоритмизация и программирование" в вики.

Автор:  Димыч [ Вторник, 16 Февраль, 2010 23:00 ]
Заголовок сообщения:  Re: Программирование. Начала

Предлагаю писать пока сюда, а потом, по мере накопления/обсуждения можно и в wiki.

Автор:  Валерий Лаптев [ Среда, 17 Февраль, 2010 00:39 ]
Заголовок сообщения:  Re: Программирование. Начала

Тогда нужно давать в двух видах:
1. Типовой алгоритм на формализованном псевдоязыке (например, на русском);
2. Конкретные примеры реализации на нескольких языках.

Автор:  Info21 [ Среда, 17 Февраль, 2010 07:51 ]
Заголовок сообщения:  Re: Программирование. Начала

Димыч писал(а):
В программировании, насколько мне известно, такого справочника не существует.
Есть описание высокоуровневых шаблонов, про низкоуровневые ни слова.
Почему же ни слова.

В моем знаменитом курсе полно таких слов 8)

Автор:  Валерий Лаптев [ Среда, 17 Февраль, 2010 07:58 ]
Заголовок сообщения:  Re: Программирование. Начала

1. Курс знаменит среди вас одного - не все имели возможность с ним ознакомиться. Предлагаю: издать соответствующую книжку с предисловием, направляющим тему в данном направлении. Одно из возможных изданий - в Интуите именно как курса лекций.
2. Есть еще у Дьяконова справочник по Бейсику - довольно давнишний. Но там имеенно типовые решения приведены.

Автор:  Info21 [ Среда, 17 Февраль, 2010 08:02 ]
Заголовок сообщения:  Re: Программирование. Начала

Валерий Лаптев писал(а):
1. Курс знаменит среди вас одного
1. не одного.
2. речь шла не о знаменитости, а об отсутствии слов вообще.

Автор:  Валерий Лаптев [ Среда, 17 Февраль, 2010 08:13 ]
Заголовок сообщения:  Re: Программирование. Начала

Info21 писал(а):
2. речь шла не о знаменитости, а об отсутствии слов вообще.

То есть я правильно понимаю, что вы своих физиков учите именно типовым низкоуровневым шаблонам, о которых пишет Димыч?
До какого уровня у вас шаблоны? Например, поиск пути по графу - алгоритм Дейкстры - это шаблон?
Или обход дерева - это шаблон? Я первое как шаблон пока не воспринимаю, а второе - вполне.
Кстати, есть смысл здесь обсудить этот самый вопрос: до какого уровня сложности считать шаблоном, а после - уже творческим алгоритмом?

Автор:  Валерий Лаптев [ Среда, 17 Февраль, 2010 08:25 ]
Заголовок сообщения:  Re: Программирование. Начала

А вот нарыли в сети:
http://inf.1september.ru/2007/14/01.htm

Автор:  Geniepro [ Среда, 17 Февраль, 2010 09:28 ]
Заголовок сообщения:  Re: Программирование. Начала

TAoCP -- Д. Кнут, Искусство программирования для ЭВМ -- не этот ли справочник жаждет увидеть автор топика?

Автор:  Peter Almazov [ Среда, 17 Февраль, 2010 09:35 ]
Заголовок сообщения:  Re: Программирование. Начала

А также тонны других...

Автор:  Rifat [ Среда, 17 Февраль, 2010 09:44 ]
Заголовок сообщения:  Re: Программирование. Начала

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

Автор:  Илья Ермаков [ Среда, 17 Февраль, 2010 09:49 ]
Заголовок сообщения:  Re: Программирование. Начала

Бинарный поиск в тот же шаблон цикла вписывается (если потом не оптимизировать): поиск на последовательности сходящихся интервалов.

Автор:  Димыч [ Среда, 17 Февраль, 2010 10:45 ]
Заголовок сообщения:  Re: Программирование. Начала

Geniepro писал(а):
TAoCP -- Д. Кнут, Искусство программирования для ЭВМ -- не этот ли справочник жаждет увидеть автор топика?

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

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

Возможно, что это все не нужно и я тут зря распинаюсь. Но пока меня никто в этом не убедил :)
Валерий Лаптев писал(а):
А вот нарыли в сети:
http://inf.1september.ru/2007/14/01.htm

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

Автор:  Info21 [ Среда, 17 Февраль, 2010 11:22 ]
Заголовок сообщения:  Re: Программирование. Начала

Димыч писал(а):
Не совсем.
Не "не совсем", а вообще из другой оперы.

Автор:  Geniepro [ Среда, 17 Февраль, 2010 11:33 ]
Заголовок сообщения:  Re: Программирование. Начала

Димыч писал(а):
Хочется видеть более простой справочник, в который можно было бы ткнуть носом коллегу и сказать, что цикл надо вот так писать, а не так как ты тут у себя наваял, зараза.

Если меня так коллега ткнёт носом в какую-то книгу, я спрошу: "Это ГОСТ? Нет? Отвали!"

Надо искать среди стандартов -- государственных, отраслевых, внутрифирменных, наконец. Вот, в соседней ветке приводили пример: внутренний стандарт проекта LLVM:
http://llvm.org/docs/CodingStandards.html

Автор:  Валерий Лаптев [ Среда, 17 Февраль, 2010 14:03 ]
Заголовок сообщения:  Re: Программирование. Начала

Geniepro писал(а):
Димыч писал(а):
Хочется видеть более простой справочник, в который можно было бы ткнуть носом коллегу и сказать, что цикл надо вот так писать, а не так как ты тут у себя наваял, зараза.

Если меня так коллега ткнёт носом в какую-то книгу, я спрошу: "Это ГОСТ? Нет? Отвали!"

Надо искать среди стандартов -- государственных, отраслевых, внутрифирменных, наконец. Вот, в соседней ветке приводили пример: внутренний стандарт проекта LLVM:
http://llvm.org/docs/CodingStandards.html

Не... Справочник Семендяев-Бронштейн - это не стандарт, а именно справочник.

Автор:  Илья Ермаков [ Среда, 17 Февраль, 2010 14:04 ]
Заголовок сообщения:  Re: Программирование. Начала

Geniepro писал(а):
Если меня так коллега ткнёт носом в какую-то книгу, я спрошу: "Это ГОСТ? Нет? Отвали!"


А если насяльник? :)

Автор:  Galkov [ Среда, 17 Февраль, 2010 14:08 ]
Заголовок сообщения:  Re: Программирование. Начала

Найдет насяльника, который в этом не бельмеса

Страница 1 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/