НовостиОбзорыСобытияIT@WorkРеклама
Идеи и практики автоматизации:

Блог

Про идеальный язык программирования

На сайте Кристины Лопес, одной из авторов  технологии аспектно-ориентированного программирования и разработчика языка AspectJ, развернулась интереснейшая дискуссия на тему исследований в программной инженерии.

Главный вопрос риторичен (да и сама тема, понятно, довольно абстрактна): почему мы по сей день применяем ЯП, разработанные тридцать лет назад -- где инновации-то? Почему именно отсутствие инноваций -- одна из объединяющих черт современных технологий программирования?

[spoiler]Ведь и по сей день популярные Си и Фортран создавались с прицелом на совсем медленные по современным меркам машины с крохотными ресурсами. Но и сегодня они используются в мега-проектах, очень часто просто потому, что преподаются в институтах именно эти языки. А зачем?

Недаром многие удачные языки часто создаются отнюдь не коллективами. Лопес приводит список известных языков (который дополнен в комментах), созданных фактически как хобби, для удовольствия или решения конкретных и локальных задач -- PHP, Python, Ruby, JavaScript, и тем не менее ставших всемирно известными. "Корпоративно" же были разработаны Си, Фортран, Кобол, Смолток, Лисп.

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

Они должны обеспечивать:
- высокую производительность, способность масштабироваться на будущие многоядерные архитектуры;
- продуктивность работы программиста;
- эффективную верификацию/тестирование.

Однако абсолютное большинство утверждений, что "а вот язык XXX самый удобный" ни на каких измеряемых критериях не основываются. В лучшем случае организуется далеко не всегда корректное сравнение по быстродействию, и приводятся ссылки на маловразумительные графики популярности наподобие такого:


По этой причине Лопес даже прекратила научную деятельность в сфере компьютерных наук в официальном формате, полагая, что подобная деятельность приносит больше вреда, чем пользы. Как можно объективно выявить разницу в продуктивности разработчиков, использующих разные ЯП? Можно, конечно, но такие исследования будут весьма ресурсоемкими, и привлекать к ним надо прикладных психологов. Но столь высокая планка просто уничтожает академические исследования ЯП.

Лопес полагает, что главное качество создателя хорошего ЯП -- это отличные навыки проектирования программно-аппаратных систем, когда в технологии воплощается богатый проектный опыт. Действительно, одни из лучших на сегодня языков созданы на инвестиции крупных фирм, но осваивали их все же гениальные люди. Java -- Джеймс Гослинг; C#/.NET -- Андерс Хейлсберг (автор Delphi).

ЯП меж тем продолжают и продолжают "порождаться". Гугль выпустил за последние год-два Go и  Dart, вот свежая новость про "открытый динамический язык программирования Julia, использующий наработки проекта LLVM, нацеленный прежде всего на техническое программирование в статистико-математических областях, с областью применения аналогичной таким известным решениям, как Matlab, язык R и связка из Python и NumPy... Julia мультипарадигменный язык, который может комбинировать разные стили программирования, такие как императивный, объектно-ориентированный и функциональный. Синтаксис Julia очень близок к синтаксису MATLAB..."

Акцент в анонсах подобных систем сейчас уже делается на первом пункте (эффективности), и в частности поддержке параллельности, но по второму пункту (продуктивность разработчика) в лучшем случае упоминается некий гибрид "лучших фич" из других известных ЯП ("богатый язык типов для описания и конструирования объектов"), а вот каковы объективные причины выбора именно такой комбинации языкового синтаксиса и семантики (да и есть ли они), остается лишь гадать.
Андрей Губанов
Относительно SQL не все ясно. Имеется в виду "чистый" SQL, на котором, например, можно делать приложения в APEX Oracle XE, который я неоднократно упоминал? Или это SQL, уже "участвующий" в проектах на других языках программирования, например, на C++ или Python для информационных систем, или на PHP для разработки WEB-приложений - тут вариантов будет масса. Т.о., получаем, что SQL входит почти в любой проект, работающий с СУБД, и его доля должна быть очень высока.
Андрей Губанов
Проект Julia можно рассматривать именно с исследовательской точки зрения. А уж сравнение, которое источник приводит, например, с R, не выдерживает критики. Ибо в R главное не собственно синтаксис, удобство, графические возможности и т.д., а богатейшая библиотека прикладных алгоритмов. Словом, это не новость, а так себе, а вот это - новость про R и СПО (из рассылки Oracle от 15 марта):

Oracle R Enterprise Integrating Open Source R with Oracle Database 11g
http://www.oracle.com/technetwork/database/options/advanced-analytics/r-enterprise/index.html?msgid=3-6085552149
Евгений
Хотите инноваций? У нас их есть =!
Сначала перешли на чистый икскуери вместо нечистого эскуэля. Получили возможность гибко и динамично менять структуру БД и прочие плюшки, включая полный стек XRX (XQuery+REST+XForms), но код все еще оставался изолирован от данных. И смена схемы последних приводит к рефакторингу кода в любом случае.  В итоге родился язык Animo и среда для него Animotron. https://docs.google.com/document/d/1DrlUT30L1qeRcyjTxGi3Zu5IPUpI4ia3Uu7YHoDYMGE/edit