OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 05:10

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Программирование. Начала
СообщениеДобавлено: Вторник, 16 Февраль, 2010 22:25 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
В соседней ветки начиная с этого сообщения пошло довольно интересное обсуждение.

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

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

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

Примеры:

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

Что думаете?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование. Начала
СообщениеДобавлено: Вторник, 16 Февраль, 2010 22:48 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Интересно, интересно.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование. Начала
СообщениеДобавлено: Вторник, 16 Февраль, 2010 22:51 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Димыч писал(а):
После накопления некоторого материала можно будет попробовать как-то его классифицировать.

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


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

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Предлагаю писать пока сюда, а потом, по мере накопления/обсуждения можно и в wiki.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование. Начала
СообщениеДобавлено: Среда, 17 Февраль, 2010 00:39 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Тогда нужно давать в двух видах:
1. Типовой алгоритм на формализованном псевдоязыке (например, на русском);
2. Конкретные примеры реализации на нескольких языках.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование. Начала
СообщениеДобавлено: Среда, 17 Февраль, 2010 07:51 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Димыч писал(а):
В программировании, насколько мне известно, такого справочника не существует.
Есть описание высокоуровневых шаблонов, про низкоуровневые ни слова.
Почему же ни слова.

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


Последний раз редактировалось Info21 Среда, 17 Февраль, 2010 08:01, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование. Начала
СообщениеДобавлено: Среда, 17 Февраль, 2010 07:58 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование. Начала
СообщениеДобавлено: Среда, 17 Февраль, 2010 08:02 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Валерий Лаптев писал(а):
1. Курс знаменит среди вас одного
1. не одного.
2. речь шла не о знаменитости, а об отсутствии слов вообще.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование. Начала
СообщениеДобавлено: Среда, 17 Февраль, 2010 08:13 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Info21 писал(а):
2. речь шла не о знаменитости, а об отсутствии слов вообще.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование. Начала
СообщениеДобавлено: Среда, 17 Февраль, 2010 08:25 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
А вот нарыли в сети:
http://inf.1september.ru/2007/14/01.htm


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

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
TAoCP -- Д. Кнут, Искусство программирования для ЭВМ -- не этот ли справочник жаждет увидеть автор топика?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование. Начала
СообщениеДобавлено: Среда, 17 Февраль, 2010 09:35 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
А также тонны других...


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование. Начала
СообщениеДобавлено: Среда, 17 Февраль, 2010 09:49 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Бинарный поиск в тот же шаблон цикла вписывается (если потом не оптимизировать): поиск на последовательности сходящихся интервалов.


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

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

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование. Начала
СообщениеДобавлено: Среда, 17 Февраль, 2010 11:22 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Димыч писал(а):
Не совсем.
Не "не совсем", а вообще из другой оперы.


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

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Димыч писал(а):
Хочется видеть более простой справочник, в который можно было бы ткнуть носом коллегу и сказать, что цикл надо вот так писать, а не так как ты тут у себя наваял, зараза.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование. Начала
СообщениеДобавлено: Среда, 17 Февраль, 2010 14:03 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Geniepro писал(а):
Димыч писал(а):
Хочется видеть более простой справочник, в который можно было бы ткнуть носом коллегу и сказать, что цикл надо вот так писать, а не так как ты тут у себя наваял, зараза.

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование. Начала
СообщениеДобавлено: Среда, 17 Февраль, 2010 14:04 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Geniepro писал(а):
Если меня так коллега ткнёт носом в какую-то книгу, я спрошу: "Это ГОСТ? Нет? Отвали!"


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


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

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Найдет насяльника, который в этом не бельмеса


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB