2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1 ... 3, 4, 5, 6, 7  След.
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение15.09.2019, 20:03 


23/12/07
1757
Pphantom в сообщении #1415323 писал(а):
Ой ли? Само-то утверждение правильное, но вот легко перейти с Pascal на С++ не получится. Вот обратно - да.

я сужу по собственному опыту. Там понятия и принципы построения языка (если речь о "классическом" c++ ) подобные, потому легко переходить.

Pphantom в сообщении #1415323 писал(а):
Так и в интересующем нас случае. Человек, хорошо знающий C++, без проблем перейдет на Python. Обратное в общем случае неверно.

Да не перейдет он легко - опять же по собственному опыту - первая "засада" будет сразу же, как он столкнется с ссылочными типами данных. В С++ семантика ссылок отличается от таковых в Python. Далее, пакеты (в C++ до сих пор нет), передачи аргументов в функцию, устройство классов и объектов, иммютабельные и неиммютабельные объекты, - все это другое, чужеродное.

Pphantom в сообщении #1415323 писал(а):
В курсе. Но вы пишете про изучение C++, а не про, например, "C с потоками ввода-вывода". Второе, естественно, проще, но это еще более странная деятельность, чем изучение C++ в целом.

Нет, именно С++, поскольку будут использоваться его средства организации ООП. Просто не будет наворотов из c++11-17.

Pphantom в сообщении #1415323 писал(а):
Сомнительное утверждение, но даже если с ним согласиться, остается вопрос, что такое "поверхностное знание". Ну, например, что из перечисленного ваши студенты, изучившие C++, обязаны уметь: писать код в процедурном стиле, использовать имеющуюся библиотеку классов, создать иерархию классов для решения некоторой задачи, использовать стандартные шаблоны, создавать шаблоны функций или классов, создавать вариативные шаблоны, использовать лямбда-выражения, использовать вывод типов?

Быть знакомыми с основными понятиями, принципами языка + владеть базовыми специфическими приемами программирования (шаблоны программирования) именно на нем (например, в JS общепринято использовать x = obj && obj.a, вместо x = obj ? obj.a : null). Знание процедурного, функционального, ООП и другого программирования идут ортогонально.

Pphantom в сообщении #1415323 писал(а):
Производительность при этом, насколько я понимаю, радикально не поменялась.

Не факт. С тех пор и компьютеры стали мощнее, и средства распараллеливания вычислений :)

Pphantom в сообщении #1415323 писал(а):
Ну знаете... Газодинамические коды можно и на арифмометре считать, в него тоже все необходимое "заложено". Да только почему-то эта идея не пользуется успехом.

Получите за 2 минуты тот же результат с теми же усилиями, что и в Mathematica на арифмометре, тогда соглашусь :)

Pphantom в сообщении #1415323 писал(а):
А учить это "специализированное ПО" (которое нередко приходится самому писать) где? И, если уж оно есть, зачем использовать инструмент, который работает на порядки медленнее? Это даже в предположении, что вы что-то увидите на меньшей сетке, а это само по себе не факт.

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

vend в сообщении #1415324 писал(а):
Хорошо, приведите пример как это надо делать - обоснуйте выбор между круглым или горячим.

я приводил в своем первом посте

-- Вс сен 15, 2019 21:06:30 --

vend в сообщении #1415328 писал(а):
PascalABC тоже!

он изучается только для учебных целей, ен более. остальные же языки - для использования на практике.
vend в сообщении #1415328 писал(а):
А вообще это уже не аргумент, на платформу завязано подавляющее число языков, тот же Python на Python-платформу,

.net - довольно специфическая платформа (windows-специфическая), а потому завязываться на нее опасно.

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение15.09.2019, 20:08 
Заслуженный участник
Аватара пользователя


30/01/06
72407
_hum_ в сообщении #1415322 писал(а):
ну да, воспользуйтесь c++ библиотекой для какой-нибудь задачи компьютерной геометрии, не зная, что такое указатели и вообще особенностей языка :)

Вообще-то современный C++ как раз и позволяет пользоваться современными библиотеками, не зная, что такое указатели. Зато желательно знать, что такое шаблоны, const, исключения, .h и RAII.

_hum_ в сообщении #1415322 писал(а):
Потому не могла быть воспринята иначе, как продолжение насмешки над тем, с чем приходится сталкиваться инженерам данной специальности.

Вообще-то там была насмешка над наивной репликой Pavia.

Боюсь, это безнадёжное дело. Кто понял шутку - тот понял. Кто хочет воспринимать в штыки то, что не было к нему адресовано, - тот всё равно это так воспримет.

_hum_ в сообщении #1415322 писал(а):
Четких обоснованных ответов в пользу выбора того или другого так и не услышал.

Ну не услышали, и не услышали. Это уже проблема слуха.

_hum_ в сообщении #1415322 писал(а):
А ITS(Intelligent transportation system) , по-вашему, нет?

Как вам сказать... Реализацией таких систем смогут заниматься не те люди, которых вы готовите.

-- 15.09.2019 20:15:19 --

Pphantom в сообщении #1415323 писал(а):
Ну, например, что из перечисленного ваши студенты, изучившие C++, обязаны уметь: писать код в процедурном стиле, использовать имеющуюся библиотеку классов, создать иерархию классов для решения некоторой задачи, использовать стандартные шаблоны, создавать шаблоны функций или классов, создавать вариативные шаблоны, использовать лямбда-выражения, использовать вывод типов?

Я бы к пунктам "создавать классы" и "создавать шаблоны" добавил:
    - пользуясь smart-pointer-ами?
    - пользуясь исключениями?
    - пользуясь const safety?
    - пользуясь RAII?
    - пользуясь exception safety?
    - пользуясь multithreading?
    - пользуясь thread safety?
    - пользуясь собственным управлением памятью?


-- 15.09.2019 20:18:51 --

_hum_ в сообщении #1415330 писал(а):
Просто не будет наворотов из c++11-17.

Надо сказать, некоторые из них (если не многие) жизнь упрощают, а не усложняют.

_hum_ в сообщении #1415330 писал(а):
владеть базовыми специфическими приемами программирования (шаблоны программирования)

Под шаблонами сегодня понимается немного другое, design patterns.

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение15.09.2019, 20:24 


23/12/07
1757
Munin в сообщении #1415332 писал(а):
Вообще-то современный C++ как раз и позволяет пользоваться современными библиотеками, не зная, что такое указатели. Зато желательно знать, что такое шаблоны, const, исключения, .h и RAII.

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

Munin в сообщении #1415332 писал(а):
Вообще-то там была насмешка над наивной репликой Pavia.

какая именно насмешка? Pavia же не сказал ничего несуразного

Munin в сообщении #1415332 писал(а):
Как вам сказать... Реализацией таких систем смогут заниматься не те люди, которых вы готовите.

инженеры могут участвовать в разработке таких систем, соответственно, должны представлять себе хотя бы в общем, на чем они построены, какие из-за этого есть возможности и нюансы их поддержки и использования (а в реальности этим инженерам еще нет-нет, да придется столкнуться с необходимостью самим писать хотя бы те же шлюзы между различными подсистемами таких систем - это реальные задачи)

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение15.09.2019, 20:27 


16/08/19
70
_hum_ в сообщении #1415330 писал(а):
.net - довольно специфическая платформа (windows-специфическая), а потому завязываться на нее опасно.


Это давно не так, прекрасно идет на Андроиде и на Юниксах, правда не так популярна.

_hum_ в сообщении #1415326 писал(а):
в том, что нет учебных часов на тот и другой (у Wolfram(Mathematica) порог вхождения высокий, требует немало времени для обучения)


В общем, совет вам можно дать только один - возьмите монетку и подбросьте её, если выпадет орел - Вольфрам, если решка - то Питон. Другого способа нет.

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение15.09.2019, 20:34 


23/12/07
1757
Munin в сообщении #1415332 писал(а):
Надо сказать, некоторые из них (если не многие) жизнь упрощают, а не усложняют.

я же не сказал, что все, а только "навороты" (которые сложны сразу для новичка)

Munin в сообщении #1415332 писал(а):
Под шаблонами сегодня понимается немного другое, design patterns.

нет, я хотел подчеркнуть именно шаблоны программирования, а не проектирования (последние более-менее универсальны, а первые - очень специфические для языка).
ну, например, использование в JS конструкций наподобие:
Код:
const module = (function () {
  // private
  return {
    // public
  };
}());

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение15.09.2019, 20:37 
Заслуженный участник


09/05/12
25179
_hum_ в сообщении #1415330 писал(а):
Там понятия и принципы построения языка (если речь о "классическом" c++ ) подобные, потому легко переходить.
Только в том случае, если рассматривается небольшое (и не очень специфичное) подмножество C++. Проще говоря, если C++ фактически не используется.
_hum_ в сообщении #1415330 писал(а):
Быть знакомыми с основными понятиями, принципами языка + владеть базовыми специфическими приемами программирования (шаблоны программирования) именно на нем (например, в JS общепринято использовать x = obj && obj.a, вместо x = obj ? obj.a : null). Знание процедурного, функционального, ООП и другого программирования идут ортогонально.
А конкретно по списку можно? Что "вот это студенты обязаны, вот это - некоторые могут, а это - совсем нет".
_hum_ в сообщении #1415330 писал(а):
Не факт. С тех пор и компьютеры стали мощнее, и средства распараллеливания вычислений :)
Факт. Существенно больше из персоналки вы не выжмете.
_hum_ в сообщении #1415330 писал(а):
Получите за 2 минуты тот же результат с теми же усилиями, что и в Mathematica на арифмометре, тогда соглашусь :)
На сетке $2 \times 2$ - без проблем. :-) А если серьезно, то разницы нет: результаты с таким разрешением и такими временными затратами сейчас не нужны. Вот полвека назад это было бы великолепно.
Munin в сообщении #1415332 писал(а):
Я бы к пунктам "создавать классы" и "создавать шаблоны" добавил:
Слишком детально. Для начала надо бы ответ на вопрос в его исходной формулировке выяснить (потому что мне как-то кажется, что за пределы третьего пункта мы не вылезем).

-- 15.09.2019, 20:39 --

_hum_ в сообщении #1415339 писал(а):
нет, я хотел подчеркнуть именно шаблоны программирования, а не проектирования
Если что, я имел в виду языковые конструкции template в C++. Странно, что это надо специально уточнять.

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение15.09.2019, 20:46 
Заслуженный участник
Аватара пользователя


06/10/08
6422
_hum_ в сообщении #1415335 писал(а):
во-первых, там, где нужна скорость, никакого RAII и исключений не будет, ибо они очень затратные по времени. А, во-вторых, какая разница - суть остается той же - не имея базы языка, вы не воспользуетесь библиотекой.
Есть разные уровни "скорости", и до того уровня, где проблемы возникают из-за правильно используемых исключений на современном компиляторе, не так много систем добираются.

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение15.09.2019, 21:26 


23/12/07
1757
_hum_ в сообщении #1415339 писал(а):
олько в том случае, если рассматривается небольшое (и не очень специфичное) подмножество C++. Проще говоря, если C++ фактически не используется.

если речь о PascalABC, то в нем есть и ООП (а также лямбды, автовыведение типов и проч.. [правда, нет ручной работы с динамическими массивами]), а потому переход на С++ не требует таких затрат, как например, требовал бы переход на Python.

Pphantom в сообщении #1415340 писал(а):
А конкретно по списку можно? Что "вот это студенты обязаны, вот это - некоторые могут, а это - совсем нет".

какому списку? я же объяснял, что я имел в виду - не темы программирования, а приемы, специфические именно для данного языка (например, как в JS на основе замыкания функции делается объект с приватными свойствами и открытыми методами)

Pphantom в сообщении #1415340 писал(а):
Если что, я имел в виду языковые конструкции template в C++. Странно, что это надо специально уточнять.

а это тут причем, я отвечал Munin на его поправку о том, что вместо понятия "шаблоны программирования" нужно использовать "pattern design"

Xaositect в сообщении #1415341 писал(а):
Есть разные уровни "скорости", и до того уровня, где проблемы возникают из-за правильно используемых исключений на современном компиляторе, не так много систем добираются.

без каких-то конкретных отсылок к фактам, сложно в это поверить

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение15.09.2019, 21:55 
Заслуженный участник
Аватара пользователя


06/10/08
6422
_hum_ в сообщении #1415343 писал(а):
без каких-то конкретных отсылок к фактам, сложно в это поверить
http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf, секция 5.4, особенно пункт 5.4.1.2 - исключения могут быть реализованы с минимальным оверхедом в неисключительной ситуации, хотя и за счет значительных потерь по памяти и значительным замедлением в случае, если исключение происходит.
Как следствие, исключения в C++ можно использовать для исключительных ситуаций (duh!) или ситуаций, которые по своей природе уже связаны с дополнительными задержками времени (напр. обрыв связи, требующий достаточно долгой попытки восстановления).

Для realtime приложений, разумеется, исключения неприменимы, но realtime это не все.

-- Вс сен 15, 2019 20:24:13 --

Вот бенчмарк, спрашивает у ядра 64 раза случайное число, и кидает исключение/возвращает ошибку в заданном проценте случаев.
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include <benchmark/benchmark.h>
#include <unistd.h>

template <int percent>
unsigned work_exception()
{
  unsigned u;
  unsigned s = 0;
  for (int i = 0; i < 64; ++i) {
    // Do some real work, like asking the kernel for randomness
    getentropy((void *)(&u), sizeof(unsigned));
    s += u;
  }
  if (u % 100 < percent) {
    throw 0;
  }
  return s;
}

template <int percent>
int work_error(unsigned & sum)
{
  unsigned u;
  unsigned s = 0;
  for (int i = 0; i < 64; ++i) {
    // Do some real work, like asking the kernel for randomness
    getentropy((void *)(&u), sizeof(unsigned));
    s += u;
  }
  if (u % 100 < percent) {
    return -1;
  }
  return 0;
}

template <int percent>
void benchmark_exception(benchmark::State& state) {
  unsigned f;
  for (auto _ : state) {
    unsigned s;
    try {
      benchmark::DoNotOptimize(s = work_exception<percent>());
    } catch (int & i) {
      f++;
    }
  }
  benchmark::DoNotOptimize(f);
}

template <int percent>
void benchmark_error(benchmark::State& state) {
  unsigned f;
  for (auto _ : state) {
    unsigned s;
    benchmark::DoNotOptimize(f += work_error<percent>(s));
  }
  benchmark::DoNotOptimize(f);
}

//Oops, benchmark lib does not allow templates
void benchmark_exception_00(benchmark::State& state) {
  benchmark_exception<0>(state);
}

void benchmark_exception_05(benchmark::State& state) {
  benchmark_exception<5>(state);
}

void benchmark_exception_10(benchmark::State& state) {
  benchmark_exception<10>(state);
}

void benchmark_exception_50(benchmark::State& state) {
  benchmark_exception<50>(state);
}

void benchmark_error_00(benchmark::State& state) {
  benchmark_error<0>(state);
}

void benchmark_error_05(benchmark::State& state) {
  benchmark_error<5>(state);
}

void benchmark_error_10(benchmark::State& state) {
  benchmark_error<10>(state);
}

void benchmark_error_50(benchmark::State& state) {
  benchmark_error<50>(state);
}

BENCHMARK(benchmark_exception_00);
BENCHMARK(benchmark_exception_05);
BENCHMARK(benchmark_exception_10);
BENCHMARK(benchmark_exception_50);

BENCHMARK(benchmark_error_00);
BENCHMARK(benchmark_error_05);
BENCHMARK(benchmark_error_10);
BENCHMARK(benchmark_error_50);

BENCHMARK_MAIN();


Результаты на моем нетбуке (Intel Celeron N2840, x86-64, Linux 5.2.0, GCC 9.1.0, -std=c++17 -O3):

Код:
--------------------------------------------------------------
Benchmark                       Time           CPU Iterations
--------------------------------------------------------------
benchmark_exception_00     186256 ns     185426 ns       3771
benchmark_exception_05     187104 ns     186161 ns       3754
benchmark_exception_10     187411 ns     186595 ns       3755
benchmark_exception_50     191124 ns     189929 ns       3692
benchmark_error_00         186290 ns     185388 ns       3775
benchmark_error_05         186291 ns     185386 ns       3776
benchmark_error_10         186284 ns     185393 ns       3775
benchmark_error_50         186327 ns     185398 ns       3776


Потери от исключений по сравнению с использованием кодов возврата в районе процента, пока исключения не начинают вылетать в половине случаев.

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение15.09.2019, 22:53 
Заслуженный участник
Аватара пользователя


30/01/06
72407
_hum_ в сообщении #1415335 писал(а):
инженеры могут участвовать в разработке таких систем

Ну, те, которых вы готовите, - очень-очень сбоку, судя по всему.

_hum_ в сообщении #1415335 писал(а):
соответственно, должны представлять себе хотя бы в общем, на чем они построены

Это другая задача, ознакомительная. И для неё, как тут уже упоминали, полезно сделать общий обзорный курс (по чему именно - тут надо смотреть на то, что больше пригодится).

Pphantom в сообщении #1415340 писал(а):
Для начала надо бы ответ на вопрос в его исходной формулировке выяснить (потому что мне как-то кажется, что за пределы третьего пункта мы не вылезем).

Ну, сам ТС проявляет знакомство с экспшенами и RAII. Вот его студенты - сомнительно.

Кроме того, имхо, названные мной пункты образуют ступени (навыков) столь же крупные, как и перечисленные вами. Код человека, знакомого с ними, и не знакомого, различаются радикально. (Я бы ещё STL/boost добавил как главную ступень, но там договорились библиотеки не трогать.)

_hum_ в сообщении #1415343 писал(а):
а это тут причем, я отвечал Munin на его поправку о том, что вместо понятия "шаблоны программирования" нужно использовать "pattern design"

Снова ерунда. Я такого не говорил. Я говорил, что вообще слово "шаблоны" в таком смысле использовать не следует. Это не заслуживает называться шаблонами. Ближе к usual style.

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение16.09.2019, 07:19 
Аватара пользователя


31/10/08
1244
Munin в сообщении #1415332 писал(а):
Вообще-то там была насмешка над наивной репликой Pavia.

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

И тем более дальше он использовать её не будет. Потому что, туда банально нельзя загрузить 3D модель из того же Solidworks'а. В этом плане python перспективние.

Вы заменяет им PascalABC. Отдельно начитываете курс по основам численным методам на нём. А вот уже потом даёт символьные вычисления и численные для прикладных задач. Причем скорее всего питон тут будет в составе FreeCad'а и Blender'а.

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение16.09.2019, 10:49 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Pavia в сообщении #1415395 писал(а):
Я пишу о том что реально нужно в работе.

Простите, а вы по какой специальности работаете?

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение16.09.2019, 17:00 
Аватара пользователя


31/10/08
1244
Munin в сообщении #1415413 писал(а):
Простите, а вы по какой специальности работаете?

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

Расчёты нужны, но не так часто, раз в полгода. На прочность, на ветровые нагрузки, на охлаждение, на вибрацию, кинематические схемы, распространение радиоволн и электрические цепи, гироскопы и тд.

В разных отделах по разному. Но в целом дефицит специалистов. Все кто приходит учатся сами не отрываясь от производства.

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение16.09.2019, 17:21 
Заслуженный участник


09/05/12
25179
_hum_ в сообщении #1415343 писал(а):
если речь о PascalABC, то в нем есть и ООП (а также лямбды, автовыведение типов и проч.. [правда, нет ручной работы с динамическими массивами]), а потому переход на С++ не требует таких затрат, как например, требовал бы переход на Python.
Ок. Если это все изучается, то ситуация лучше. Правда, тогда не совсем ясно, зачем нужно тратить время на Pascal, можно сразу начинать с C++.
_hum_ в сообщении #1415343 писал(а):
какому списку?
Который я привел. Это список возможностей C++, которые можно либо знать, либо нет (Munin: я понимаю, что он далеко не полон, но нет смысла перебирать возможности десятками, иначе шансов на получение ответа вообще не будет).
_hum_ в сообщении #1415343 писал(а):
а это тут причем
Это элемент вопроса выше. temlate'ми в C++ ваши студенты пользоваться умеют или нет?

 Профиль  
                  
 
 Re: Wolfram(Mathematica) vs Python для инженеров
Сообщение16.09.2019, 18:49 


23/12/07
1757
Xaositect в сообщении #1415350 писал(а):
исключения могут быть реализованы с минимальным оверхедом в неисключительной ситуации, хотя и за счет значительных потерь по памяти и значительным замедлением в случае, если исключение происходит.

дык, обычно для такого рода библиотек это важно - гарантировать, что у вас время работы будет более-менее стабильное, даже если какой-то расчет не сможет быть выполнен. а с исключениями этого нельзя гарантировать:
Цитата:
because of the need to examine potentially large and/or complex state tables, the time it takes to respond to an exception
may be large, variable, and dependent on program size and complexity.

Кроме того, как пишут на том же stackoverflow, это может еще зависеть от возможностей кэширования и проч. системных вещей: stackoverflow/Are Exceptions in C++ really slow

Pphantom в сообщении #1415452 писал(а):
Правда, тогда не совсем ясно, зачем нужно тратить время на Pascal, можно сразу начинать с C++.

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

По остальному- я уже потерял нить беседы - к чему тут какие-то списки возможностей С++, при чем тут тема умения студентами пользоваться С++-ыми шаблонами *пожимает плечами*

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

Модераторы: Модераторы, Супермодераторы



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group