Еще о языках
Dec. 10th, 2014 01:49 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Раз недавно зашел разговор о языках программирования (ЯП) и выяснилось, что среди френдов есть даже больше программистов, чем мне казалось, предлагаю неоригинальный опрос.
1. Какие ЯП вы используете (использовали) профессионально (то есть получали за работу деньги)
2. На каких ЯП, не вошедших в первый пункт, вы писали нетривиальные (то есть не уровня Hello, world) программы (во время учебы, для себя, и т.п.)
3. Какие ЯП, не вошедшие в первые два пункта, вы пробовали на уровне хотя бы небольшой программы.
Понятно, что "со словарем" можно любую программу прочитать, и мне приходилось исправлять код, скажем, на Перле, хотя я не могу включить его ни в один из пунктов.
Мой список выглядит так, если ничего не упустил:
1. С++ (Borland, MSVC, GNU), Delphi, VBA, Clarion, Java, Scala, SQL (разных диалектов), bash.
2. C (на разных операционках), (Turbo) Pascal, Basic, FoxPro, FORTH, LISP, Assembler (x86,Z80), Matlab, машкод МК-52 :)
3. J, R, Haskell, Smalltalk.
Показательно, что весь второй пункт -- это школа, университет, аспирантура. Кроме С++ из того периода, ничего профессионально использовать не пришлось. Это хорошо отражает принцип преподавания computer science, с которым я полностью согласен: учебные и промышленные языки должны быть разными, так как что-то удобно для обучения, а что-то для работы. Сейчас, впрочем, некоторые учебные языки, тот же Common Lisp, вполне себе успешно используются и для коммерческих проектов, но это, скорее, исключение, чем правило.
1. Какие ЯП вы используете (использовали) профессионально (то есть получали за работу деньги)
2. На каких ЯП, не вошедших в первый пункт, вы писали нетривиальные (то есть не уровня Hello, world) программы (во время учебы, для себя, и т.п.)
3. Какие ЯП, не вошедшие в первые два пункта, вы пробовали на уровне хотя бы небольшой программы.
Понятно, что "со словарем" можно любую программу прочитать, и мне приходилось исправлять код, скажем, на Перле, хотя я не могу включить его ни в один из пунктов.
Мой список выглядит так, если ничего не упустил:
1. С++ (Borland, MSVC, GNU), Delphi, VBA, Clarion, Java, Scala, SQL (разных диалектов), bash.
2. C (на разных операционках), (Turbo) Pascal, Basic, FoxPro, FORTH, LISP, Assembler (x86,Z80), Matlab, машкод МК-52 :)
3. J, R, Haskell, Smalltalk.
Показательно, что весь второй пункт -- это школа, университет, аспирантура. Кроме С++ из того периода, ничего профессионально использовать не пришлось. Это хорошо отражает принцип преподавания computer science, с которым я полностью согласен: учебные и промышленные языки должны быть разными, так как что-то удобно для обучения, а что-то для работы. Сейчас, впрочем, некоторые учебные языки, тот же Common Lisp, вполне себе успешно используются и для коммерческих проектов, но это, скорее, исключение, чем правило.
no subject
Date: 2014-12-09 10:53 pm (UTC)2) PL/1, FORTH, Lisp+CLOS, Basic, Assembler z80/8080
3) R, Ada, REFAL, Prolog, ЯМБ (Язык машин бухгалтерских !!!)
Плюс были разнообразные учебные языки, непонятно как называвшиеся и скриптовые языки различных программ, похожие на lisp или basic.
no subject
Date: 2014-12-10 07:22 am (UTC)no subject
Date: 2014-12-10 01:22 pm (UTC)Потому как я забыл упомянуть C# в полуторной категории (на нем было написано не слишком большое вспомогательное приложение в рамках коммерческого проекта, притом язык был выбран исключительно из соображений попробовать его в деле)
no subject
Date: 2014-12-10 06:15 am (UTC)2) Erlang, C, Scheme, Haskell, Octave, Assembler (x86, 8051), TurboPascal
3) R, Assembler (Z80, MSP430), Prolog, Perl, J, Agda, Mercury
no subject
Date: 2014-12-10 10:23 am (UTC)no subject
Date: 2014-12-10 10:26 am (UTC)Счас вот смотрю другие ответы и вижу что не написал Tex, C# в 1 и APL, LOGO в 3.
no subject
Date: 2014-12-10 10:34 am (UTC)no subject
Date: 2014-12-10 10:36 am (UTC)no subject
Date: 2014-12-10 10:42 am (UTC)Не ASCII-шная
no subject
Date: 2014-12-10 10:52 am (UTC)Вот Планкалкюль вроде экзотика, как и другие двумерные языки (сейчас не могу навскидку вспомнить)
no subject
Date: 2014-12-10 09:32 am (UTC)2. Basic, Scala, Haskell
3. LOGO, Gofer (тот же Хаскел, считай), SQL, R, Pascal, FORTH, Octave
кстати, на си или баше я писал меньше, чем на бейсике :)
no subject
Date: 2014-12-10 09:56 am (UTC)1) Fortran, C, dBASE, Pascal, Prolog, C++, Lua, SQL, bash, JS, TeX (написание пакетов, по идее, является программированием), MATLAB/Octave, Maxima.
2) Ada, LISP, Forth, Java, Delphi, R, PL/1, REXX, BASIC, Python, пара ассемблеров, ну и МК-52/61. :)
3) Haskell, Scala, C#, PHP, Julia, Erlang, VB, ALGOL (и 60, и 68), COBOL, Logo, Focal, APL, несколько DSL.
Вроде в основном все.
no subject
Date: 2014-12-10 10:20 am (UTC)- Что Вы делали на Прологе? (то есть какого рода практическую задачу)
- Я про Julia как раз на днях спрашивал (http://ushastyi.livejournal.com/246141.html), какие у Вас впечатления?
Удивительно, что уже второй человек упоминает Rexx. Видимо, OS/2 не прошла мимо многих :) Я ее тоже использовал вместо виндов (винды в эмуляторе) до выхода Windows NT 4, но необходимости писать скрипты как-то не было.
no subject
Date: 2014-12-10 01:18 pm (UTC)no subject
Date: 2014-12-10 01:33 pm (UTC)no subject
Date: 2014-12-10 02:43 pm (UTC)Беседу про Julia я как-то пропустил, но, в общем, писать особо нечего. Я периодически пробую появляющиеся варианты "числодробилок", сделал это и тут. Общее впечатление - неясно, зачем понадобилось придумывать еще один медленный комбайн при наличии многих других. Правда, вообще говоря, большинство попыток в этой области относятся к категории "давайте придумаем Фортран, но назовем его иначе, а то нас засмеют". Julia - тоже.
Как раз полуось прошла мимо меня практически полностью, в отличие от VM и ее советских клонов.
no subject
Date: 2014-12-10 03:48 pm (UTC)Как раз в Julia основной selling point в том, что это быстрый комбайн. Остальные преимущества по сравнению с R небольшие (типы получше).
А насчет "давайте придумаем Фортран" -- ну это в силу того, что это первый ЯП высокого уровня, и все (большинство) языки на него так или иначе похожи.
Кстати, как нынче студенты? Что хотят изучать и что приходится?
no subject
Date: 2014-12-10 09:40 pm (UTC)По идее, и это возможно, но тут все-таки была достаточно специфическая задача - нужно было не столько применение какого-то алгоритма выделения деталей определенного вида, сколько подбор этого алгоритма "на ходу". В общем, получилось.
Как раз в Julia основной selling point в том, что это быстрый комбайн. Остальные преимущества по сравнению с R небольшие (типы получше).
По сравнению с R - пожалуй, но это все равно соревнование черепах в скорости бега. Для серьезных вычислительных задач не годятся (пока?) оба.
А насчет "давайте придумаем Фортран" -- ну это в силу того, что это первый ЯП высокого уровня, и все (большинство) языки на него так или иначе похожи.
Нет, я не про это. Естественно, все императивные (и близкие к ним) языки чем-то похожи на Фортран. Но в данном случае речь идет о Фортране как о вычислительном языке (и, естественно, о его современных стандартах).
Кстати, как нынче студенты? Что хотят изучать и что приходится?
У нас с этим попроще - мы не готовим программистов (они, конечно, получаются как побочный продукт, но все же нам не нужно объяснять, почему на 1-м курсе не изучается "самый модный в этом сезоне" язык).
no subject
Date: 2014-12-10 10:39 pm (UTC)Понял. Я не знаком с современным состоянием фортрана. Насколько я понимаю, R придумали именно потому, что фортран (и другие языки) не очень удобны для статистических расчетов. Впрочем, можно дать и другое объяснение: что авторы R просто не знали фортран :)
> мы не готовим программистов (они, конечно, получаются как побочный продукт)
Про побочный продукт улыбнуло :)
no subject
Date: 2014-12-11 07:36 am (UTC)Фортран (пусть будет Фортран77) - это компилируемый язык общего назначения с устаревшей по сегодняшним меркам "механикой" (каково жить сейчас без рекурсии, а? :) и большим числом библиотек.
R - это свистелка для вычисления среднего у массива из тысячи чисел и отрисовки графика, зато из командной строки в два действия.
я, конечно, утрирую, на R в том числе перемалывают базы с генотипами по нескольку гигабайт, но если речь идет о сложном, длинном вычислении, то это Фортран, если о быстрой обработке не очень большого объема данных стандартными инструментами, то эр, а где-то посередине (но ближе к концу с эр) сидит питон. это всего лишь баланс времени между написанием-и-поддержкой кода и исполнением кода.
нельзя не отметить в последнее время активность питонщиков, которые всё норовят затащить под питон под крики об "обширных библиотеках" и вообще без учета необходимой культуры программирования, накладных расходов на исполнение и всего такого :)
no subject
Date: 2014-12-11 10:03 am (UTC)К слову, во всех случаях, когда требуются длинные сложные вычисления, с которыми я сталкивался, использовался вовсе не Фортран, а C/C++.
Другой немаловажный аспект состоит в том, что с развитием параллельных вычислений в последнее время получают преимущество языки, для которых параллелизация проще. Скажем, на Фортране или С++ эффективно параллельную программу надо именно специально разрабатывать. А операции над массивами, которые стандартны в R, J или Julia параллелятся практически автоматом. В свое время для инмосовских транспьютеров разрабатывали специальный язык Оккам -- а теперь многие языки позволяют настолько же эффективно реализовывать параллельность.
no subject
Date: 2014-12-11 03:03 pm (UTC)Это встречается. Почти всегда причина сводится к тому, что программисты обладают запредельно архаичными сведениями о Фортране, а также совершенно уверены, что писать надо на чем-то "современным" (каковым Фортран в силу первого обстоятельства не считается). Как правило, кончается это либо неэффективным кодом (если это C++), либо кодом с большим количеством ошибок (если это C).
Скажем, на Фортране или С++ эффективно параллельную программу надо именно специально разрабатывать. А операции над массивами, которые стандартны в R, J или Julia параллелятся практически автоматом.
Вот как раз хорошая иллюстрация к вышеизложенному. Дело в том, что операции с массивами и встроенные языковые конструкции, обеспечивающие организацию параллельных вычислений, были включены в Фортран 90 - стандарт 1990 (!) года. Часть компиляторов поддерживала их и ранее, а к середине 90-х они вошли уже во все без исключения реализации языка. Но и четверть века спустя об этом многие не знают.
no subject
Date: 2014-12-11 03:28 pm (UTC)Угу, я уже освежил свои сведения, но все же "встроенные языковые конструкции, обеспечивающие организацию параллельных вычислений" были включены не в Фортран-90, а в Фортран-95 и 2008, если верить википедии. С другой стороны, операции над массивами появились в Фортране-90, а их распараллелить большого ума не надо.
no subject
Date: 2014-12-11 04:43 pm (UTC)Но, в общем, это все равно уже давно есть - вместе с вылизанными до мелочей компиляторами и огромным объемом уже существующего и доступного без переписывания кода.
no subject
Date: 2014-12-16 04:49 pm (UTC)ну кто бы спорил, что для них нужен Ррр. другое дело, что на этом поле он конкурирует с каким-нибудь матлабом, где можно просто кнопочки мышкой тыкать. если задача небольшая, то, конечно, не надо громоздить рутину на языке общего назначения.
кстати, я под свои специфические задачи на работе сделал дсл и писал на нем.
> во всех случаях, когда требуются длинные сложные вычисления, с которыми я сталкивался, использовался вовсе не Фортран, а C/C++
в свою очередь сообщаю, что иногда даже в тех случаях, когда лучше подошли бы плюсы, у нас граждане норовят написать на фортране :) но у нас программисты тоже побочный продукт (хотя кода эти непрограммисты вбрасывают поболе, чем в иной софтверной конторе)
в нашей области много чего уже написано и отлажено на фортране, писать на нем опять же проще, если логика простая.
> в последнее время получают преимущество языки, для которых параллелизация проще
1. как ниже отметил ффантом, собственно параллелизм впихивается в любой язык, более того, в фортран его добавить проще, чем в некоторые другие языки.
2. параллелизм, на мой взгляд, подразумевает несколько иную парадигму, чем просто "давайте делать как раньше, но теперь ещё равномерно загрузим все процессоры" - ну там, персистентность данных (как это по-русски-то?) хорошо бы иметь, например. поэтому даже если Фортран проиграет Ррр на этом поле, то это не будет значить, что Фортран абстрактно "хуже" или "устарел".
no subject
Date: 2014-12-16 11:09 pm (UTC)Параллелизм можно впихнуть куда угодно, но из этого может получиться черти-что :) Ты прав насчет парадигмы. Под настоящим параллелизмом я понимаю тот, про который не надо думать. Например, матричные операции -- они все хорошо параллелятся. Этим должен заниматься транслятор-компилятор-система. В идеале, например, если я запускаю умножение матриц какой-нибудь сумасшедшей размерности на облаке -- я опять не должен думать, какие сервера и процессоры этим будут заниматься.
"Персистентность данных" -- ты имел ввиду immutable data, наверное. Не знаю, как по-русски :) Immutable data -- это сразу функциональные языки. Собственно, одна из причин, по которой они набирают популярность -- хорошо параллелятся.
no subject
Date: 2014-12-11 02:49 pm (UTC)А смысл? Прошло 37 лет, с тех пор появилось четыре других стандарта языка, не считая мелких изменений. Соответственно, Фортран 77 сейчас интересен только тем, что код на нем удастся скомпилировать и современным компилятором (за поддержанием обратной совместимости в языке тщательно следят), но писать что-то новое на нем совершенно бессмысленно.
no subject
Date: 2014-12-16 04:24 pm (UTC)no subject
Date: 2014-12-11 02:17 pm (UTC)Про побочный продукт улыбнуло :)
Ну что делать... часть выпускников всегда уходит в IT, но это все-таки не самоцель. Так что да, именно побочный продукт. :)
Давненько не брал я в руки шашек...
Date: 2014-12-23 11:17 am (UTC)Потому список короток:
1. Pascal (в основном Borland, в том числе и объектно-ориентированный), C, MS Basic (тот самый на Yamaha MSX :-) )
2. Prolog
3. Delphy, C++.
Ну и, етественно, на первых курсах записывал алгоритмы на "ЕСЛИ ТО ИНАЧЕ ВСЕ" :-)