Сделал прототип клиента .NET, и как-то он мне совсем не понравился. Во-первых, для качественного игро-обучающего UI все же нужна более-менее симпатичная спрайтовая графика. Тогда либо DirectX, либо встраивать в стандартную форму нечто вроде Vortex2D.NET (
http://vortex2d.codeplex.com/), с которым куча проблем по совместимости, капризный в плане драйверов GPU итд.
Поэтому, очередным волевым решением) , решил, что клиент будет на JavaScript (серверная часть пока занимает 11 строчек на пыхапы).
Во-первых, абсолютная кросс-платформность, можно запускать на любых мобилках и планшетах, независит от ОС. Дополнительно скачивать ничего не надо, достаточно браузера.
Во-вторых, JavaScript хорошо подходит для функционального стиля программирования. Сами функции -- это объекты, поэтому легко констуируются функции высших порядков, можно создавать композиции. Есть анонимные функции, асинхронные вызовы, замыкания, генераторные выражения, имеется замечательная eval; можно "сконструировать" монады (
http://blog.jcoglan.com/2011/03/06/monad-syntax-for-javascript/).
В-третьих, jQuery оказывается написана в стиле ФП и даже немножечко декларативно (
http://codingcraft.ru/web-design/jquery.php).
В-четвертых, прекрасно получается метапрограммировать:
http://matraska23.blogspot.ru/2011/05/java-script.htmlhttp://www.terminally-incoherent.com/blog/2008/01/15/simple-metaprogramming-with-javascript/http://fingernailsinoatmeal.com/post/292301859/metaprogramming-ruby-vs-javascriptВ-пятых, даже Matthew Podwysocki последние два поста в своем блоге (
http://codebetter.com/matthewpodwysocki/) посвятил JavaScript и Reactive Extensions.
"Хотите использовать Observable Collections? Слышали про Reactive Extensions? Нравится LINQ? Не нравится писать спагетти-код? Нужны монады? И все это на JavaScript?"
http://habrahabr.ru/post/132463/