Физики-химики-биологи обычно пишут совершенно невероятный код. Чаще всего вообще без оглядки на производительность, необходимость дальнейшей поддержки, реюз и т.п. Но порог наступления катастрофы разный. На Python, она наступает раньше. То есть кривой код, который достаточно быстро и безболезненно работает на фортране превращается в полную катастрофу на питоне. На Julia такой же примерно код с большей вероятностью как-то заработает. И да, сломать можно любой язык. Добро пожаловать в новый дивный мир, в котором почти все программируют. В этом мире всех учат «кодить,» но не учат «программировать» (а это прежде всего software engineering).
Многофункциональность нужна далеко не всем. А пиарят его потому, что сейчас все студенты физики/математики/химики/биологи и т.п. должны обязательно учить «программирование». И что-же они учат? Не C/С++ или даже Fortran, а R и Python. Потом, когда нужно что-то посчитать (и нарисовать табличку и график), написанная абстрактным PhD студентом программка на питоне считает часами или даже днями при этом сжирая всю память и вводя модный Макбук в ступор. Вот для такой аудитории этот язык, не для общей computer science или абстрактного многофункционального «программирования.»
Все — на C++? Вы серьезно? Вы думаете не-программист (физик, химик, биолог) его осилит? Julia проста как питон (никакого компилятора) и при этом быстро почти как как в C. Для вычислений самое то что надо. Для всего остального она точно не подходит. Этот язык занимает нишу R, Matlab, и т.п. Отсюда и все эти странности с точки зрения программиста.
Год продолжается, яблоки нет. Индексированная переменная — дискретная величина: первая, вторая, и т.д. Или индекс может быть real? (от такого ужаса даже в Фортране отказались полностью). И не надо рассказывать про смещение как в С, оно интуитивно понятно только программистам, да и то далеко не всем. Для физиков-статистиков-биологов-бухгалтеров и т.п. индексация с 1 интуитивно понятнее (они и слов-то таких как смещение не слышали).
Это сделано для нормальных людей. Как человек считает яблоки: первое, второе, третье…. Вряд ли кто-то начинает с нуля. Что такое нулевое яблоко? Шиза. В Фортране кстати тоже индексирование начинается с нуля.
И сейчас студентов ему учат. У него очень низкий порог вхождения: это же просто транслятор формул. Конечно же Фортран нишевый язык. Но в высокопроизводительных вычислениях он довольно таки доминирует. Посмотрите, интереса ради, что работает на довольно типичной HPC. Fortranных задач тут на порядки больше чем всего остального, включая C и C++. Python — всего лишь малюсенькая точечка. Интересно, что тенденция с течением времени почти не меняется (может быть даже Pythonа за год стало меньше, но это мое субьективное).
Не, я не предлагаю новичку сразу учить все, что упомянуто в моем сообщении.
для новичка, у которого предметная область связана с вычислениями, простой Фортран вполне неплохой выбор в качестве первого языка.
Не поймите меня неправильно, я не предлагаю всем начинать с Фортрана. Можно и с Python'а и с Julia. Все зависит от цели и характера предметной области. Но я не думаю, что новичку в программировании начинать Python+numpy будет легко. Я исхожу из требований среднего студента в вакууме с нулевыми навыками написания программ, которому нужно быстро с ходу начать работать с кодом и делать свою MSc или PhD. У такого студента, не computer science, нет ни времени ни желания изучать сложные стеки и технологии. Но уже скорее всего есть минимальные навыки работы с цифрами в Экселе. На Фортране он сможет быстро начать генерировать данные, хоть на лаптопе (а чуть позже и на HPC системе) и сразу начать работать с ними в привычном Экселе (и тут же получить свои credits). Тот же студент может работать и с кусками готового (г****-)кода. И да, Фортран изучают (ок, я не в России). После Фортрана легко освоить любые другие языки (потом можно его и ненавидеть, нет проблем).
Статья-то вообще не о том, на чем лучше программировать или лучше считать, а о том, с какого языка начинать программировать с нуля. Фортран один из вариантов.
Ну я не думаю, что python+numpy хорошо подойдет для новичка, это почти как два разных языка в одном флаконе. Для более продвинутого уровня в Фортране есть `ISO_C_BINDING`: можно линковать с C, вызывать из Python/R/Matlab и многого другого. Обработка данных и графика — в большинстве случаев отдельная работа с данными. Ее не обязательно делать там-же где данные генерируются. Новичок может делать ее хоть в GUI-пакетах вроде SPSS или Statistica, или даже в Экселе. В общем для новичка, у которого предметная область связана с вычислениями, простой Фортран вполне неплохой выбор в качестве первого языка. Julia и Python тоже.
Точно! Это и есть главный вопрос — зачем, с какой целью, в какой предметной области собираетесь программировать. «Какой язык учить?» полностью определяется целью. Если «просто попрограммировать» для общего понимания на досуге, то что-то простое, хоть Python хоть Scratch, или тот же Бейсик. Если нужно считать Fortran/Matlab/PythonC/C++, Если предметная область статистика и data analysis: R, или даже SAS/Stata (если нужно). Если ML, NN: Julia/Python. Если веб, то тут лучше меня посоветуют спецы :) Я вообще сомневаюсь, что бывает просто программирование в отрыве от предметной области. Разве что чистая computer science. Но это совершенно отдельная вещь.
Полностью согласен и полностью несогласен. Главный вопрос, очевидно, зачем учиться программировать. Если цель — разработка ПО, то вне всяких сомнений — учите «хорошие» языки C/C++ и т.п… Если же нужно что-то быстро посчитать в пределах своей предметной области, то часто лучший выбор это именно Фортран. Студента с нуля можно научить азам программирования на Фортране за неделю с нуля. Для многих C++ слишком сложен. В C++ даже для «профессионального разработчика» туча сложностей и неочевидностей (на Хабре была статья о множестве методов инициализации переменной, инициализации — переменной), плюс разного рода старые конструкции (которые часто гуглятся в первую очередь). Фортран же прост как огурец.
Велосипедостроение — неоспоримое зло. Но опять же, часто быстрее сделать свой велосипед, чем учить C++ и множество либ/API etc. Преимущество Фортрана — в нем есть почти все что нужно для расчетов. Я имею в виду, главным образом, работу с массивами. В C++ arrays практически нет, нужны либы. А ограниченность Фортрана — на самом деле благо, он почти никогда не позволяет выстрелить себе в ногу. Если важны элегантные «шашечки,» то однозначно не Фортран, если «просто ехать» (да, тяп-ляп и в расчеты) — то Фортран.
Да, и еще одно преимущество Фортрана — самая жуткая древность почти всегда заработает. Можно взять пыльные перфокарты 60-х годов, и оно почти всегда скомпилируется и запустится. Даже если нет (редко что было исключено из языка, например `real` индекс цикла) — флаг компилятора вернет все обратно. Как тебе такое, Python?
Это разные «Jobs» бывают. Вот в качестве (наполовину-) шутки — по количеству «jobs» Fortran сильно опережает все остальное: www.archer.ac.uk/status/codes (кластер Archer).
Ну а на linked.in, indeed.com, dice.com, куча предложений по слову Fortran. Но это конечно не в России. И это не совсем «IT»: Computation scientist, CDF engineer, Mechanical engineer, Aerodynamics engineer, Modeling and simulation engineer, Radar modeling analyst, propulsion engineer, GNC engineer, Meteocean modeler, Oceanographer и т.д. на любой вкус. Вплоть до Electronic warfare.
Fortran — а где Фортран? Реально найти позицию в разработке, хотя и не в «айти». Разработка, но не игрушечек, смартфончиков и скриптиков, а железяк. Все большие железки от полуметра и крупнее: Машинки, танчики, самолетики, корабли, нефтеплатформы, мосты, большие дома, заводы и ракеты. Инженерные расчеты остаются в большой степени на нем. Ну не считая химии и много чего другого. В науке — астрономы и физики его все еще особенно любят. Ну и начать программировать на нем очень легко. Он почти как Бейсик или Python, хотя не очень далек и от C. Процедурное программирование естественно ОО — тоже можно. Параллельное: coarrays, OpenMP, MPI. Минимальный бойлерплэйт. Выучив Фортран легко двигаться как в сторону интерпретируемых языков, так и в сторону C.
Печально, но это коммерческая компания, которая следует законодательству в своей юрисдикции. Переезжайте на территорию, на которую не распространяются санкции. Или поднимите свой сервис.
А вообще по большому счету это прекрасная иллюстрация того факта, что если вы не занимаетесь политикой, политика придет к вам и займется вами.
У Фортрана порог вхождения намного ниже чем в C/С++, неплохая поддержка объектно-ориентированного программирования, встроенная поддержка параллельного выполнения (coarrays), практически отсутствует алиасинг и как следствие код хорошо оптимизируется компилятором. Но — это классический старый язык, без онлайн инфраструктуры модулей и библиотек (как Питон), т.е. графики, GUI и т.п. прикрутить не всегда тривиально. Для HPC, там где нет GUI и требуется высокая производительность — сложно найти более сбалансированный вариант чем Фортран. Да и самые большие модели (>миллиона loc) — глобальный климат — почти все на Фортране.
Статья-то вообще не о том, на чем лучше программировать или лучше считать, а о том, с какого языка начинать программировать с нуля. Фортран один из вариантов.
Велосипедостроение — неоспоримое зло. Но опять же, часто быстрее сделать свой велосипед, чем учить C++ и множество либ/API etc. Преимущество Фортрана — в нем есть почти все что нужно для расчетов. Я имею в виду, главным образом, работу с массивами. В C++ arrays практически нет, нужны либы. А ограниченность Фортрана — на самом деле благо, он почти никогда не позволяет выстрелить себе в ногу. Если важны элегантные «шашечки,» то однозначно не Фортран, если «просто ехать» (да, тяп-ляп и в расчеты) — то Фортран.
Да, и еще одно преимущество Фортрана — самая жуткая древность почти всегда заработает. Можно взять пыльные перфокарты 60-х годов, и оно почти всегда скомпилируется и запустится. Даже если нет (редко что было исключено из языка, например `real` индекс цикла) — флаг компилятора вернет все обратно. Как тебе такое, Python?
Ну а на linked.in, indeed.com, dice.com, куча предложений по слову Fortran. Но это конечно не в России. И это не совсем «IT»: Computation scientist, CDF engineer, Mechanical engineer, Aerodynamics engineer, Modeling and simulation engineer, Radar modeling analyst, propulsion engineer, GNC engineer, Meteocean modeler, Oceanographer и т.д. на любой вкус. Вплоть до Electronic warfare.
А вообще по большому счету это прекрасная иллюстрация того факта, что если вы не занимаетесь политикой, политика придет к вам и займется вами.