пятница, 9 сентября 2011 г.

[prog] Афоризм Алана Перлиса в тему волны языкостроения

Сегодня с утра увидел на RSDN-е тему, поднятую ув.тов.Курилкой (коего я всегда рад видеть у себя в блоге и пользуясь случаем передаю привет): Волна языкостроения продолжается?

Хотел разродится пространной заметкой на эту тему. Действительно, за последний год или чуть больше, появились сведения о новых языках от, что важно, солидных игроков на софтверном рынке. Go от Google, Ceylon от RedHat, недавно, кажется, Kotlin от JetBrians. Теперь вот Dart опять от Google (не знаю, как язык, но название уже зачетное ;) Только вот, на мой взгляд, не взлетят. По крайней мере шансы есть только у Go.

Собираясь потратить кучу слов на объяснение своей точки зрения я, к счастью, стал перечитывать афоризмы Алана Перлиса. И обнаружил очень точное и лаконичное объяснение:

A language that doesn't affect the way you think about programming, is not worth knowing.

Что в моем вольном переводе звучит как: язык, который не меняет способа вашего мышления, лучше и не знать.

Когда я учил Паскаль после Бейсика – это поменяло мое сознание. Равно как и С с ассемблером после Паскаля. Еще больше мозги перестроились после C++. Даже сильно похожая на C++ Java и то на какие-то вопросы заставила смотреть сильно иначе. Точно как и Ruby. И, в какой-то степени, OCaml.

Но вот Ceylon, Kotlin, да и в изрядной степени, Go, не заставляют думать иначе. Потому их лучше и не знать ;) А значит и не взлетят :)

8 комментариев:

lsddao комментирует...

А если еще вспомнить функциональные языки типа Haskell... Там вообще совсем другой тип мышления.

Евгений Охотников комментирует...

@lsddao:

Haskell не изучал, но для понимания примеров, которые приходилось разбирать, мне хватало того сдвига, который я получил знакомясь с OCaml и Erlang.

Полагаю, что сильно мышление поменяется при серьезной работе с системами типов и языками вроде agda2. Но тут у меня есть сильные сомнения о применимости всего этого в мейнстриме (т.е. в условиях масштабной разработки силами очень разноуровневых программистов).

Анонимный комментирует...

.NET сильно заставляет думать иначе?

На мой взгляд язык программирования - это инструмент решения задачи. Если он удобнее для решения каких-то задач, его будут использовать для этих задач. Так появился C++ из C. Он может внести свою доктрину в CS, а может и не очень, но удобство по сравнению с другими языками будет оценено.

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

Насколько я знаю, сейчас средняя зарплата Java программиста выше, чем C++. При этом работодатели поскуливают, что C++ программера трудно найти, но денег больше не предлагают.

P.S. CyclonE - не Редхатовский. У них Ceylon (как чай :).

Евгений Охотников комментирует...

@Леша Сырников

.NET -- это отдельная история. Я рассматриваю .NET как заточенный специально под Windows вариант Java. Т.е. Java сначала поменяла мышление, а затем .NET дал возможность без заморочек использовать его на WIntel-е. А теперь и не только на WIntel-е.

jazzer комментирует...

Java поменяла мышление?

Евгений Охотников комментирует...

@jazzer

>Java поменяла мышление?

Таки да :) И, поскольку дело было году в 1996-м, то довольно новыми для меня тогда вещами стали:

- сборка мусора. До того времени я плотно работал с универсальными языками с ручным управлением памятью -- Паскаль, C, C++. Экзотика вроде Prolog или скриптовые языки для меня лежали в строне от универсализма;

- кроссплатформенность не на уровне исходного кода, а на уровне результатов компиляции. Плюс к тому, ее нужно было достигать не имея в своем распоряжении #if/#else и макросов;

- как следствие бинарной кроссплатформенности, возможность создавать приложения, в которых адаптированный для пользователя код уже в скомпилированном виде может загружаться к пользователю. Без заботы о платформе пользователя. Java апплеты как пример этих возможностей.

Так что Java не как язык мышление изменил, а как технология, которая изменила взгляд на некоторые вещи.

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

Борис Сивко комментирует...

> язык, который не меняет способа вашего мышления, лучше и не знать

> А значит и не взлетят :)

Поэтому нужно изучать QCL, Church или, например, Forth.

Евгений Охотников комментирует...

@Борис Сивко

Поэтому нужно изучать QCL, Church или, например, Forth.

Существует множество экзотических языков. Только не все йогурты одинаково полезны ;) Программирование -- это практическая деятельность. Поэтому в первую очередь нужно смотреть на языки, которые позволят на жизнь заработать :) К тому же прочувствовать полностью язык можно только в реальных проектах, желательно побольше размером и сложностью.

Тот же Форт, например, не смотря на свою знаковость, таки мейнстримом не стал.