Питон для меня выглядит настолько внезапно интерпретируемым, что идея изучать на нем алгоритмы кажется странной - можно, конечно, считать сложность выполнения понятием целиком абстрактно-математическим, но это как-то слишком свежо. А при попытке подойти практически время выполнения ведет себя как-то очень неясно, и, что хуже, мне вот не удается разъяснить происходящее даже гуглом и документацией ): Наверное, я не умею его готовить, но мне современный питон кажется просто "удобным" средством дать подергать за АПИ на библиотеки на С, как в случае с машинным обучением. Причем структуры данных там так интересно реализованы, что производительность по памяти и/или времени при попытке сделать шаг за туториал буквально-таки расстреливает (:
Это веселье все сейчас в таком состоянии, что взрослые-то с трудом разбираются, куда уж восьмиклассников учить. И да, между сортировкой пузырьком и ответом на вопрос, какого фига твой маленький скрипт для обработки небольшой кучки данных сожрал всю память, закусил свопом, окуклился и никуда не движется уже пятый час - пропасть, заполненная в основном stackoverflow (:
Это у вас развёрнутое описание проблемы двух языков, из-за которой была выдумана Julia. Julia обладает сравнимой с Питоном выразительностью, или даже чуток получше (но не объект-ориентирована), а ещё в ней можно по-старинке заглянуть в код на уровне LLVM или даже машинном языке, если очень хочется, а скорость как у Сей и стык с Сями в обе стороны родной (аки твой Фортран). Как раз язык для любителей алгоритмов и их отладки. Ну, и ещё много всяких других штучек, типа "прямого переноса мат.нотации, прямо с греческими буквами".
Но вокруг Julia сейчас учебная пропасть, я её как раз живописал в посту. Пахать, пахать и пахать, чтобы эту пропасть как-то замостить.
Насколько я понимаю предыдущего комментатора, претензия у него не к скорости, а к не прогнозируемости потребления ресурсов (вычислительных и по памяти). Я не знаю, так это или нет в Julia, но в традиционных языках, на котором учат программированию, зависимость скорости выполнения от алгоритма и структур данных явная и прогнозируемая.
Есть проблема, что высокоуровневые языки и быстрое железо разлучают писать оптимальные программы. Даже не так, не просто разучают, а вообще этот вопрос (оптимальности) выпадает из контекста, о нем просто не задумываются.
Вот как раз оптимизация кода -- это главный вопрос на Julia. В языке тщательно документировано, как следует писать код, чтобы он был оптимальный по памяти-скорости, очень много текстов по разъяснению сложных моментов -- Julia ведь предназначена для вычислительных алгоритмов прежде всего, т.е. проблемы скорости, памяти и параллельности считаются главными. Как раз вопросы computer science (мощность языка, расширяемость языка) отходят на второй план -- но после того, как "люди фортрана и матлаба" очаровываются Julia, они находят, что эти вопросы "языка программирования общего назначения" тоже удивительно тщательно проработаны.
> Вот как раз оптимизация кода -- это главный вопрос на Julia. <...> Julia ведь предназначена для вычислительных алгоритмов прежде всего <...> Как раз вопросы computer science (мощность языка, расширяемость языка) отходят на второй план
Вот-вот, я как раз об этом. Язык оптимизирован под вычисления, он сугубо инженерный (не случайно ""люди фортрана и матлаба" очаровываются Julia"), поэтому традиционные понятия алгоритмической сложности в нем спрятаны от программиста. Именно поэтому, мне кажется, Julia -- не самый удачный язык для обучения программированию как таковому, хотя, наверное,это прекрасный инструмент для решения прикладных задач.
Не понимаю аргумента: ориентированность на вычисления как раз заставляет традиционные понятия алгоритмической сложности выносить наружу. Что же касается расхождения "классических шагов из теории" и "реального времени вычисления в секундах", так сегодня кэш процессора не меньше влияет на результат, чем всякие автоматические распараллеливатели кода на все доступные ядра. Счастья теоретика не бывает, и недаром Кнут свой учебник алгоритмики писал на выдуманном машинном коде.
Это веселье все сейчас в таком состоянии, что взрослые-то с трудом разбираются, куда уж восьмиклассников учить. И да, между сортировкой пузырьком и ответом на вопрос, какого фига твой маленький скрипт для обработки небольшой кучки данных сожрал всю память, закусил свопом, окуклился и никуда не движется уже пятый час - пропасть, заполненная в основном stackoverflow (:
Reply
Но вокруг Julia сейчас учебная пропасть, я её как раз живописал в посту. Пахать, пахать и пахать, чтобы эту пропасть как-то замостить.
Reply
Это, мягко говоря, не так. Julia тормознее даже Python порядка в 10 раз.
Reply
Вот тут в конце странички бенчмарк (старой, правда, версии. Сейчас 0.4.6 уже): http://julialang.org/
Reply
Есть проблема, что высокоуровневые языки и быстрое железо разлучают писать оптимальные программы. Даже не так, не просто разучают, а вообще этот вопрос (оптимальности) выпадает из контекста, о нем просто не задумываются.
Reply
Reply
Вот-вот, я как раз об этом. Язык оптимизирован под вычисления, он сугубо инженерный (не случайно ""люди фортрана и матлаба" очаровываются Julia"), поэтому традиционные понятия алгоритмической сложности в нем спрятаны от программиста. Именно поэтому, мне кажется, Julia -- не самый удачный язык для обучения программированию как таковому, хотя, наверное,это прекрасный инструмент для решения прикладных задач.
Reply
Reply
Leave a comment