Глазами ученого на Хабре

Почитайте (сам исходный пост не айс, а вот комменты осилить очень рекомендую), очень здорово видна разница в образе мышления программистов и “ученых”:

https://habrahabr.ru/post/349624/

В комментах, правда, выясняется, что “ученый” тоже в говне моченый, но и “оппоненты” отжигают не по-детски.

PS И даже не знаю, какой из этих двух вариантов омерзительнее:

C и С++ изучают только программисты. Естественнонаучники (за очень редким исключением) учат программирование на Делфи, а потом всякие спецпакеты. Максимум пролог будет. Там не учат С98. Там не учат что памятью в принципе можно управлять. Тем более — что нужно. Учат так: вы придумываете правильный алгоритм, компьютер его выполняет. Учат как переписать алгоритм из головы на паскаль.

https://habrahabr.ru/post/349624/#comment_10682588

или

Я не знаю где вас учили, но на моём естественно-научном факультете сначала был курс C# (2 года). А теперь вообще идёт курс Java EE c Хадупами и всем фаршем.

https://habrahabr.ru/post/349624/#comment_10682700

11 комментариев

  1. hirou пишет:

    “Он плавно доходит до координаты 6524, а затем вдруг его кусает бешеная блоха. Он скачет вверх и вниз абсолютно случайно и заполняет всё оставшееся полупространство справа кромешной тьмой. ”

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

  2. kettle пишет:

    Только фортран! Остальное – пижонство.

    И это, Шура, ну прикрутите уже защиту от сперов, что-ли…

    • Ну это в целом несколько осмысленнее, чем “учат программирование на Делфи, а потом всякие спецпакеты”. И уж тем более куда полезнее для “естественнонаучников”, чем “курс Java EE c Хадупами и всем фаршем”.

      • kettle пишет:

        пункт первый: фортран был популярен даже в 90х, когда были более другие ЯП, во многом потому, что под него было огромное число расчетных библиотек на все случаи жизни, и что немаловажно они за годы были идеально отлажены. Т.е. там крайне невысокая вероятность того, как в хабровской статье аффтор пишет: подсунули пнг с тремя каналами оно все и упало.
        пункт второй: учить надо программированию, а не языку.
        Меня за период от средней школы до выпуска из ВУЗа учили бейску, паскалю и фортрану, а це, макро-11 и к580вм80, уж как-то сам освоил. Еще было крайне поверхностное знакомство с алмир на ЭВМ Мир-1 с видом на черное море, язык академика Ершова – не помню был или нет, вроде как в лекциях что-то было абстрактно-алгоритмическое.
        Но насколько я сейчас вспоминаю, учили не столько языку, сколько алгоритмам. В т.ч. и как не про#бать результат в условиях ограниченной разрядности, что бы не получить “Он скачет вверх и вниз абсолютно случайно”.
        И когда сейчас меня вторую неделю агитируют перейти на питон, я задорно смеюсь и предлагаю привести более убедительные аргументы чем “это стильно, модно, молодежно!”. :)

        • Насчет пункта первого – книжку Numerical Recipes на Си++ окончательно переписали только к середине 2000-х, а что касается численных методов вообще – то вроде бы некоторые конструкции в фортране компилируются в машинный код эффективнее, чем аналоги на Си с плюсами или без.

          А про питон – некоторые модные молодежные штуки, типа нейросеток и прочего machine learning, сейчас принято делать именно на нем (с некоторыми плясками с бубном, чтобы включить CUDA, без нее там все печально).

          • kettle пишет:

            я не вижу причин, по которым конструкции фортрана должны компилироваться в более эффективный код, с учетом того, что Си, по сути, это немного приукрашенный ассемблер.
            А что касается питона какие у него в принципе преимуществ, за исключением упоротого синтаксиса?
            Про нейросети – опять же все упирается в библиотеки. Это как аргументация за питон: ну мы используем джанго. Так бля, не используйте джанго! Используйте джумлу и вордпресс! :)

            • https://stackoverflow.com/questions/146159/is-fortran-easier-to-optimize-than-c-for-heavy-calculations – тут парочку примеров приводят; прежде всего дело в том, что в фортране реализованы полноценные массивы, а не сишные указатели; с точки зрения машины это почти одно и то же, но массивы – это еще и подсказка компилятору, что здесь можно заоптимизировать.

              • kettle пишет:

                Там слишком многа букф иностранных, я после суток без сна их не асиливаю. :)
                Но суть понятна, хотя хотелось бы заценить ассемблерный результат компиляции логически одинакового кода с двух разных языков, причем в тот ассемблер который я разумею, а разумею я макро-11. :)

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

                  void transform (float *output, float const *input, float const *matrix, int *n)

                  output, input, matrix и n не пересекаются – поэтому не может заоптимизировать вложенный цикл (теоретически запись в output может испортить matrix). Фортрановские же массивы по определению пересекаться не могут.

                  • kettle пишет:

                    логически вы умножаете матрицу на матрицу. Но циклов я таки не вижу. :)

                    • for (i=0; i<*n; i++) – не цикл, да? :)

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