Личный кабинет

Об эффективности ЯП

Станислав Михалкович ( Пользователь )
Цитата (Денис Кириенко, 22.12.2011, 23:38) <{POST_SNAPBACK}>
В алгоритмах очень удобно использовать такие структуры данных, как "множество" и "словарь", даже когда речь идет об учебных алгоритмах. В любом современном языке такие структуры есть, а в паскале - нет. Я уже даже не знаю, как можно писать программы без множеств и словарей.

Не во всех паскалях таких структур как множества и словари нет :)

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

Денис хорошо разобрался в этом на примере языка Питон. Задачи, предлагаемые сегодняшним школьникам, решаются значительно легче. Более того, Я думаю, что Вы, Денис, согласитесь, что меняется не просто количество строк при решении задач - дети начинают мыслить другими, более продвинутыми и современными, примитивами. Например, сортировка - это просто вызов метода sort, а на старых паскалях она превращается в вызубривание немаленького алгоритма. Более сложные алгоритмы, записанные на старых паскалях, приводят к еще большему злу - когда аналоги этих структур данных и стандартные алгоритмы пишутся вручную, перемешиваясь друг с другом и образуя сложный плохо читаемый и плохо модифицируемый код.

Я уверен, что, несмотря на привлекательность, свет клином на Питоне не сошелся: наличие подобных структур - свойство всех современных языков. Кумиру бы надо присмотреться к этому, а не пользоваться наработками двадцатилетней давности. В неявном виде в нём это заложено - исполнитель - это объект класса. Как только возникает задача создания двух однотипных исполнителей - мир КуМира сразу рушится. А решение так близко...

Виталий Потопахин ( Пользователь )
Цитата (Михалкович Станислав, 23.12.2011, 17:37) <{POST_SNAPBACK}>
Например, сортировка - это просто вызов метода sort,


При полном непонимании сути процесса
Станислав Михалкович ( Пользователь )
Цитата (Потопахин Виталий, 23.12.2011, 17:52) <{POST_SNAPBACK}>
При полном непонимании сути процесса

А в чем состоит суть процесса сортировки - можете пояснить? :)
Денис Кириенко ( Пользователь )
Цитата (Потопахин Виталий, 23.12.2011, 17:52) <{POST_SNAPBACK}>
При полном непонимании сути процесса


Я согласен с каждым из двух тезисов:

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

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

И не вижу между этими тезисами никаких противоречий.

Вы же не будете утверждать, что все, кто используют шаблон sort в C++ не понимают, как он работает?
Станислав Михалкович ( Пользователь )
Цитата (Денис Кириенко, 23.12.2011, 19:46) <{POST_SNAPBACK}>
Я согласен с каждым из двух тезисов:

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

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

И не вижу между этими тезисами никаких противоречий.

Вы же не будете утверждать, что все, кто используют шаблон sort в C++ не понимают, как он работает?

Вот теперь важный с моей точки зрения вопрос: что надо юному программисту изучать вначале - алгоритмы сортировки или алгоритмы, использующие сортировку как примитив?
Денис Кириенко ( Пользователь )
Цитата (Михалкович Станислав, 23.12.2011, 21:19) <{POST_SNAPBACK}>
Вот теперь важный с моей точки зрения вопрос: что надо юному программисту изучать вначале - алгоритмы сортировки или алгоритмы, использующие сортировку как примитив?


Я считаю, что сначала - алгоритм сортировки, а потом уже - примитив. И так - везде.

Сначала - swap через вспомогательную переменную, а потом - примитив.
Сначала - поиск максимума в списке, а потом - примитив.
Сначала - линейный поиск элемента в списке, потом - примитив.
Сначала - сортировка, а потом - примитив.

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

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

2. Я разрешаю пользоваться словарями и множествами в Питоне, не рассказывая, как они внутри устроены. Ибо реализация их заведомо сложна (половина школьников точно не поймет, а напишут - единицы), а сами эти структуры данных ну очень удобны и полезны.


Ну хотя бы потому, что нужно учить детей изобретать и реализовывать алгоритмы, развивать мышление, а для этого нужно давать задачи, чтобы они придумывали решение, а не подсовывать готовые решения.
Михаил Густокашин ( Пользователь )
Цитата (Денис Кириенко, 23.12.2011, 21:31) <{POST_SNAPBACK}>
2. Я разрешаю пользоваться словарями и множествами в Питоне, не рассказывая, как они внутри устроены. Ибо реализация их заведомо сложна (половина школьников точно не поймет, а напишут - единицы), а сами эти структуры данных ну очень удобны и полезны.

Ну конкретно в этом случае можно заставить их написать хотя бы реализацию этих вещей с помощью одномерного массива. Хотя это упражнение на линейный поиск в массиве, не более того.
Станислав Михалкович ( Пользователь )
Цитата (Денис Кириенко, 23.12.2011, 21:31) <{POST_SNAPBACK}>
Я считаю, что сначала - алгоритм сортировки, а потом уже - примитив. И так - везде.

Сначала - swap через вспомогательную переменную, а потом - примитив.
Сначала - поиск максимума в списке, а потом - примитив.
Сначала - линейный поиск элемента в списке, потом - примитив.
Сначала - сортировка, а потом - примитив.

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

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

2. Я разрешаю пользоваться словарями и множествами в Питоне, не рассказывая, как они внутри устроены. Ибо реализация их заведомо сложна (половина школьников точно не поймет, а напишут - единицы), а сами эти структуры данных ну очень удобны и полезны.

Всё, что Вы написали - ровно это использую и я. По-видимому, это просто баланс здравого смысла. Скажем так, если это - классический простой алгоритм, то школьник должен уметь его писать. Таких алгоритмов, которые используются при решении других задач, не так уж много. Гораздо больше таких примитивов, которые мы используем, но не даем школьникам их реализовывать. Например, преобразование из вещественного в строку и обратно, поиск подстроки в строке, вычисление синуса если хотите. Подавляющее большинство питоновских методов именно таковы. Поэтому, мне кажется, Вы немного передёргиваете. Не надо уметь их реализовывать чтобы ими пользоваться. Надо знать базовые алгоритмы, коих немного. Их на том же Питоне можно писать. И это перпендикулярно решению более сложных задач.

Я абсолютно уверен, что можно построить методику "вначале sort как примитив, потом - реализация". Потому что реализация более сложна чем использование. А вначале надо учить более простым вещам. К сожалению, такие методики пока - редкость. Причина - мы привыкли к старым подходам.

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

Цитата (Михаил Густокашин, 23.12.2011, 22:15) <{POST_SNAPBACK}>
Ну конкретно в этом случае можно заставить их написать хотя бы реализацию этих вещей с помощью одномерного массива.

Можно. Но по большому счету не нужно. Уж точно не нужно сначала заставлять реализовывать, а потом пользоваться.
Виталий Потопахин ( Пользователь )
Цитата (Денис Кириенко, 23.12.2011, 19:46) <{POST_SNAPBACK}>
Я согласен с каждым из двух тезисов:

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

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

И не вижу между этими тезисами никаких противоречий.

Вы же не будете утверждать, что все, кто используют шаблон sort в C++ не понимают, как он работает?


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

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

Поэтому надо различать потребности ученика и потребности промышленного программиста, и эти потребности на наших ветках по моему мнению постоянно смешиваются.
Олег Чебан ( Пользователь )
Цитата (Потопахин Виталий, 24.12.2011, 07:57) <{POST_SNAPBACK}>
..
Поэтому надо различать потребности ученика и потребности промышленного программиста, и эти потребности на наших ветках по моему мнению постоянно смешиваются.

Очень точное, своевременное и мудрое высказывание!
п.с.
с позволения приведу такой пример, один программист работая на предприятии время от времени решал прикладные задачи, но тут к нему приставили ученика, который получал даже больше программиста.. В общем, ученик плелся по пятам и очень удивился, что у программиста нет никаких секретов и он не носить заветную тетрадку с разгадками. Одно не понимал "ученик" - все разгадки сформированны трудом по изучению как профессиональной стороны дела, так и пограничной. Т.е. понимая, например, общую концепцию автоматизации производства, хранения и структурирования данных, нагрузку сети запросами и т.п., "учитель" на фундаментальном (громко конечно) уровне понимал "где собака зарыта".
Ученики и раньше сортировали для того, чтобы понимать и развивать алго-мышление, должны и теперь это делать. По сути, багаж знаний по вспомогательным функциям, т.е. прикладной, никак не сравнится с багажом умений и пониманий фундаментального(опять громко) программирования.. Первый забьется в тупик на перво-же повороте, второй найдет выход сам и укажет другим
Слово понимание, ключевое.

footer logo © Образ–Центр, 2018. 12+