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: Программирование. Начала |
Димыч писал(а): В программировании, насколько мне известно, такого справочника не существует. Почему же ни слова.Есть описание высокоуровневых шаблонов, про низкоуровневые ни слова. В моем знаменитом курсе полно таких слов |
Автор: | Валерий Лаптев [ Среда, 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/ |