На чем писать сервер для игры?
Оценить 4 комментария
jagev: хотите асинхронности — берите Эрланг/Эликсир, чего уж там. До 100к rps можно как угодно быдлокодить, все сожрет и не поморщится.
Главное про основные возможности отстрелить ногу почитать заранее, и все.
У нас есть опыт работы с Node.JS
не уверены, что он подойдет для игры у которой будет тысяча человек в онлайне
Я бы выбрал Go, он отлично подходит для разработки серверной части игр.
Для общения с клиентом можно использовать protobuf.
Но лучше всего вам будет нанять человека с таким опытом к себе в команду.
Поэтому ищите человека с опытом, берите его в команду.
Иван Филатов: ООП конечно круто, но от него обычно отказываются, если нужна производительность. А как жить без, можно спросить у Линуса.
p.s. не холивара ради! 🙂
Количество онлайн вообще не так считается. Все зависит от игры.
У меня был проект с онлайн под 100.000 в сутки. Легко держалось на php/fastcgi, правда для одной штуки пришлось написать примочку на ассемблере и внедрить как либу для apache, но к онлайну это отношения не имеет.
Опять таки, при высокой динамичности, проблема начинает возникать в трафике, а не в CPU.
что значит «имелся человек»? Сами и написали.
Ассемблер не такой уж и сложный, если нужно написать конкретную процедуру расчета, а не что-то более сложное. Там всего пару страниц кода было. Вполне достаточно начальных знаний.
Есть пользователь, у него есть ID и timestamp последнего обновления его данных.
Тоже выбираю сервер сейчас для игры, прочитал море отзывов про существующие сервера и технологии, пока остановился на Forge. Он запускается в инстансе Unity и поддерживает всю юнитевскую физику, коллайдеры и иже с ними, а значит Fully Authoritative на нём будет реализовать довольно просто.
P.S.: В рамках js можно было бы ещё упомянуть MeteorJS. Но на мой взгляд, если игра real-time, а не turn-based, то он не потянет.
Как я увидел в комментариях, раз уж хотите отказаться от ООП (сам не люблю его), то берите Go.
Сильно там всё равно не набыдлокодить, а вот инструменты по типу сетевых соединений и параллельная работа очень простые и легко освоите, чтобы сделать сервер.
У самого был опыт создания игрового сервера на Go, но там игра пошаговая, так что мой пример вам не поможет 🙂
На каком языке писать сервер?
Re: На каком языке писать сервер?
Re: На каком языке писать сервер?
java. корок не бывает, memory leak’и не беспокоят. есть дебаггеры, интегрированные среды разарботчика. сокорость в серверных приложениях приближается к скорости программ на си++.
Re: Re: На каком языке писать сервер?
Аноним, видимо, пошутил про скорость жабы, сравнимую с C++;)))
Честно говоря, в среде разработчиков, кто профессионально разрабатывает серверный софт на коммерческих UNIX’ах, даже сама постановка вопроса о сравнении по скорости и потребляемым ресурсам (память) C++ и жабы, вызывает, мягко говоря, некоторое недоумение.
Как бы не упирались маркетологи по поводу универсальности жабы, всегда есть и останется такое явление, как натурный эксперимент. Возьми и попробуй. И если окажется так, что тебе понравится жаба, то просто ты еще не перерос ту грань, за которой подобные средства разработки не приемлемы.
p.s. если на C++ программы работают медленно (сравнимо с жабой), то в этом не язык виноват, а прокладки, которые находятся между клавиатурой и стулом.
Re: На каком языке писать сервер?
Re: Re: На каком языке писать сервер?
Re: На каком языке писать сервер?
Re: Re: На каком языке писать сервер?
Re: На каком языке писать сервер?
Э, а можно мне, как фанату Ады, поинтересоваться, в чём это gnat нечестный? 🙂 И что за сервер имеется в виду?
Re: На каком языке писать сервер?
Про скорость java отнюдь не шутка. В версии 1.3 скорость заметно улучшилась, особенно это заметно на вычислительных задачах. Бенчмарки java vs c++ можно найти здесь:
Re: На каком языке писать сервер?
2 justme: Ну, может, не совсем корректный термин. Типа дергает
сишные функции из либсов с мясом. Да еще и переменные к ним
надо конветировать, блин. Короче, я попробовал только ps
кастрированный начирикать, дык у меня прога разбухла супротив
сишной раза в два. Если убедишь, что я не прав, буду только рад.
Re: На каком языке писать сервер?
>с адресной арифметикой,
PS: а сервер точно лучше на C писать.
Re: На каком языке писать сервер?
Re: На каком языке писать сервер?
> PS: а сервер точно лучше на C писать.
Аргументируй, а то голословно получается. В Си нет поддержки потоков на уровне языка, нет модулей, нет динамической сборки мусора, нет обработки исключительных ситуаций, нет нормальной поддержки строк (strcpy и co не предлагать).
Нормальной обработки исключительных ситуаций нет даже в си++. На мой взгляд не стоит использовать на стороне сервера язык в котором конструкция вида int *a=NULL; try < *a = 12345; >catch (. ) < >> гарантированно приводит к падению программы.
2 Kasper: примеры в интернете есть не только для си.
Re: На каком языке писать сервер?
2 последний anonymous: Ну посмешил. 🙂
Re: На каком языке писать сервер?
Ничего не имеюпротив явы и еще чего угодно,пишите хоть на
баше )))
Re: На каком языке писать сервер?
Re: Re: На каком языке писать сервер?
Re: На каком языке писать сервер?
Re: Re: На каком языке писать сервер?
Re: Re: На каком языке писать сервер?
Ну давай, построй мне формальную модель системы типов в дурацком Цэ, в процессе этого дела и поймёшь, в чём ублюдочность. Потом сравни с системой Хиндли-Милнера, и после этого без отвращения на Цэ смотреть уже не сможешь.
Зачем нужна адресная арифметика, я вообще не понимаю. И ты этого объяснить не сможешь, так что даже не пытайся.
Что такое мусор ты знаешь наверняка, не обманывай. Не верю я, что тебе так нравится кучу free() писать, и потом лики отлавливать. Вызов функции в Цэ ублюдочен чрезвычайно, так что хвостовую рекурсию приходится самостоятельно, ручками раскручивать. Что тоже не радует.
Re: Re: На каком языке писать сервер?
Да уж куда оголтелым цешникам и жаболюбам знать, что на exception-ах очень даже весело логику строить можно, а вовсе не только ошибки отлавливать.
Re: Re: Re: На каком языке писать сервер?
Re: Re: На каком языке писать сервер?
1) На Ocaml можно и вполне себе императивно писать, в процессе апгрейда мозгов. Постепенно мозги развивать иногда всё же лучше, чем скачком.
Re: На каком языке писать сервер?
Насчёт GNAT’а: вообще-то особых причин, по которым генерируемый им код должен быть больше, чем C, я не вижу. За исключением run-time библиотеки и проверок. Но я смотрю, Антихрист тут успешно проталкивает OCaml, так что мне агитировать за Аду, по всей видимости, бесполезно.
Re: Re: На каком языке писать сервер?
Re: На каком языке писать сервер?
Ок, сеньк»ю вери матч ту ол оф ю.
Re: На каком языке писать сервер?
Re: На каком языке писать сервер?
> Assuming that it is not mission critical and not really big, OCAML, ADA, Java, Perl, anything. *choke* Ada не для big и mission-critical? Излюбленный язык NASA и DoD.
> I’d say COBOL, but as far as i know there are no suitable compilers for COBOL under linux. which is a pity. А за такие предложения вообще расстреливать на месте надо.
Антихристу: CL-HTTP, в общем-то, плохой пример функционального стиля.
Re: На каком языке писать сервер?
> Assuming that it is not mission critical and not really big, OCAML, ADA, Java, Perl, anything.
*choke* Ada не для big и mission-critical? Излюбленный язык NASA и DoD.
> I’d say COBOL, but as far as i know there are no suitable compilers for COBOL under linux. which is a pity.
А за такие предложения вообще расстреливать на месте надо.
Антихристу: CL-HTTP, в общем-то, плохой пример функционального стиля.
Re: Re: На каком языке писать сервер?
Re: На каком языке писать сервер?
> Could you explain why?
Попробуй пописать на Коболе, поймешь. Некоторые думают что внося в язык программирования неоднозначность и раздутость естественного языка они делают исходники читабельнее а программы надежнее, но только малая часть человечества настолько мазохисты чтобы пользоваться их шедеврами.
А к расправе над коболистами еще Дийсктра призывал, так что я тут вполне консервативен.
> Now, Java code in any realisation is MUCH MUCH slower than code compiled to native like ada, c, etc.
In any? А о JIT компиляторах слыхал? Тестировал?
И что, ява медленне перла? PHP? Ты же говорил *the slowest solution*?
> One more time if you are saying that it is not you have never been counting miliseconds.
Once more, если задача heavily CPU-bound, C/C++ обычно *тоже* слишком медленный. А грамотное использование профайлера и нормального языка в сочетании с ассемблерными вставками в критических циклах даст гораздо больший эффект.
> What I meant was that if you pass from C++ to Java..you have to acquire some extra knowledge but its minimal, while passing from C++ to OCAML would require much more studying.
Изучение языка занимает небольшое время (особенно если ты уже знаком с 5-6 достаточно разных языков), по сравнению с изучением методологии этого языка. Ява это не только синтаксис, это API, EJB, JavaBeans, JSP, whatever. Это все за 21 день не выучишь.
> Judging by this posting of yours you just wanted to show off.
Я так глубоко не рефлексировал. Возможно, но маловероятно.
Судя же по твоим высказываниям, ты пытаешься скрыть за посредственным английским отсутствие практического опыта. Только мазохист или дилетант будет советовать писать сервер на ассемблере или коболе.
7 лучших языков программирования для серверной веб-разработки
Главное меню » Программирование » 7 лучших языков программирования для серверной веб-разработки
Точно так же, когда дело доходит до серверной веб-разработки – нам в первую очередь требуется язык программирования серверной части (или, вы можете сказать, серверный), чтобы веб-сайт работал вместе с различными другими инструментами и технологиями, такими как базы данных, фреймворки, веб-серверы и т. д. и т.п.
Хорошо, позвольте нам сказать вам – вам необходимо выбрать язык программирования, учитывая различные параметры, такие как требования проекта, его кривая обучения, производительность, надежность и т. д. Кроме того, вы также должны учитывать спрос и популярность. конкретного языка программирования в мире технологий, особенно если вы хотите изучить язык программирования с точки зрения карьеры, поскольку нет смысла изучать язык программирования, который устарел или не востребован на рынке.
В этой статье мы предоставляем вам список лучших языков программирования, которые вы можете изучить, чтобы начать веб-разработку:
1. JavaScript
Всякий раз, когда речь идет о веб-разработке – скорее всего, в 9 из 10 случаев речь идет о названии JavaScript. Согласно ежегодным отчетам различных популярных платформ, таких как Stack Overflow и Octoverse, JavaScript является одним из наиболее предпочтительных и ведущих языков программирования в мире технологий. Одна из основных причин этого заключается в том, что конкретный язык может использоваться как для интерфейсной веб-разработки, так и для внутренней веб-разработки. Глядя на несколько прошлых тенденций и статистику, можно сказать, что популярность Node.js каким-то образом увеличила использование JavaScript в качестве внутреннего языка для веб-разработки. Между тем, язык предоставляет вам несколько замечательных функций для внутренней разработки, таких как облегченный язык сценариев, динамический набор текста, интерпретируемый, поддержка объектно-ориентированного программирования, проверка на стороне клиента,
2. Python
Хотя Python довольно известен среди людей своей совместимостью с передовыми технологиями, такими как машинное обучение, Интернет вещей (IoT), Data Science и т. д., Позвольте нам сказать вам, что этот обогащающий язык программирования широко используется и очень подходит для серверной веб-разработки. также. Даже один из ведущих ИТ-гигантов в настоящее время Google в значительной степени полагается на Python, и это один из трех основных языков, используемых Google (два других – Java и C ++). Одним из основных преимуществ использования Python для веб-разработки является огромная коллекция стандартных библиотек, которые делают работу разработчиков сравнительно простой и эффективной. Дополнительные выдающиеся и уникальные особенности Python, такие как улучшенная читаемость кода. более простая интеграция с другими языками, поддержка программирования GUI, переносимость,
3. PHP
PHP (или, можно сказать, препроцессор гипертекста) – ветеран в мире веб-разработки. Этот серверный язык сценариев с открытым исходным кодом создан в 1994 году и специально используется для веб-разработки. Поскольку это интерпретируемый язык – он также не требует компилятора, а также может работать практически во всех основных операционных системах, таких как Windows, Linux, macOS, Unix и т. д. Говоря о расширяющих функциях PHP, таких очень много. простота в освоении, кроссплатформенная совместимость, функции ООП, поддержка различных стандартных баз данных, таких как MySQL, SQLite и т. д., огромная поддержка сообщества и многие другие. В остальном PHP очень безопасен как язык сценариев на стороне сервера, поскольку в PHP имеется множество хеш-функций для шифрования данных пользователя. В частности,
4. Java
5. Ruby
Ruby – это интерпретируемый язык программирования общего назначения, который поддерживает различные парадигмы программирования, такие как процедурное, функциональное и объектно-ориентированное программирование. Этот язык широко используется для веб-разработки по всему миру и очень рекомендуется новичкам для начала работы с серверной веб-разработкой, так как он сравнительно проще в освоении. Как и Python, Ruby также фокусируется на повышении производительности разработчиков, что в конечном итоге ускоряет процесс веб-разработки. Конкретный язык поддерживает почти все основные платформы, такие как Windows, Mac и Linux, и позвольте нам также сказать вам, что Ruby сильно основан на многих других языках программирования, таких как Perl, Lisp, Eiffel, Ada и т. д. Динамическая типизация и Duck набор текста, автоматический сбор мусора, большая стандартная библиотека, настраиваемое поведение отправки, гибкость и
6. Golang
Если вы думаете, что Go не так популярен среди разработчиков, позвольте нам сказать вам, согласно прошлогоднему отчету Stack Overflow – это был один из 5 самых любимых языков программирования разработчиками во всем мире. Go – это статически типизированный язык программирования, разработанный в Google и имеющий синтаксис, очень похожий на язык C. Язык позволяет разработчикам более эффективно создавать масштабируемые и безопасные веб-приложения. Одним из основных преимуществ использования Go является то, что он обеспечивает отличную поддержку многопоточности, а также имеет функцию сборки мусора для автоматического управления памятью. Некоторые из других значительных особенностей языка Go – это простой в изучении, читаемый код, поддерживаемый Google, скомпилированный язык, управление пакетами, мощная стандартная библиотека, поддержка параллелизма, высокая производительность и многое другое.
C# – один из тех немногих языков, который в течение последних нескольких лет постоянно входит в пятерку лучших языков программирования по различным стандартным индексам. Однако вам необходимо знать, что этот универсальный язык изначально был разработан Microsoft в первую очередь для среды.Net. Наряду с серверной веб-разработкой, теперь C # широко используется во многих областях, таких как разработка приложений Windows, разработка игр и т. д. Язык предоставляет вам различные дополнительные функции, такие как более быстрая компиляция, совместимость, масштабируемость и возможность обновления, компонентно-ориентированная. & структурированный язык и многие другие. Кроме того, C # предлагает богатый набор библиотек, которые помогают разработчикам ускорить и повысить эффективность процесса разработки. Следовательно,
Итак, мы упомянули наиболее рекомендуемые и стоящие языки программирования для серверной веб-разработки, которые вы можете изучить. Однако позвольте нам еще раз напомнить вам, что прежде чем выбирать какой-либо конкретный язык из вышеупомянутых, вам необходимо рассмотреть различные индивидуальные аспекты, в том числе ваши цели, требования к проекту, кривую обучения и т. д.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
На каком языке удобней писать websocket сервер?
Добрый день.
Стоит задача сделать web-приложение (на сайт). Если в общем, то что-то вроде тикет системы на стероидах с рядом особенностей. Приложение пишется для себя и своей команды разработчиков, поэтому особо сильной нагрузки не планируется.
Все под MIT лицензией, чтобы если встретится кто-то с такими же как у нас требованиями к процессу разработки, мог взять и запустить у себя, предварительно допилив если требуется.
Связь клиент-сервер через веб сокеты. Стандартный rest не подходит т.к. бОльшая часть всех действий происходит по инициативе сервера. На данный момент планируется только веб морда, но в дальнейшем нужна возможность к этому api прикрутить мобильное приложение.
Думаю не понадобиться fullstack фреймвок тип django, ror. Достаточно будет собрать несколько либ, чтобы не перегружать приложение: orm, роутинг, кеш. От последнего в случае scala/erlang можно вообще отказаться, а держать данные в памяти средсвами самого языка. Хотя если будет что-то легковесное, подходящее под требования, то можно воспользоваться.
База данных реляционная.
Сам я специализируюсь на php и о других языках знаю только в теории. Но опыт разработки позволяет сесть за новый язык и начать писать.
Но с серверным языком я несколько сомневаюсь. Писать демона на php можно, но лучше я возьму язык, у которого долгоживущие процессы являются частью его модели.
На данные момент я вижу такие варианты:
1. scala + akka. Акторная модель хорошо подходит под задачу. Плюс JVM позволяет запускать сервер на любой оси.
2. python.
3. Можно упороться и сделать на Erlang. Акторы. Виртуальная машина. Отсутствие тяжелых вычислений позволяет не бояться просадок производительности.
4. Go. Слышал краем уха. При беглом просмотре понравилась удобная многопоточность. Но что у него с экосистемой, я не знаю.
Nodejs подходит, но отказался сразу ибо терпеть не могу js. И если на клиенте это неизбежное зло (про typescript, coffescript и т.п. знаю), то на сервере можно избежать поедания кактусов.
Rust тоже имеет акторную модель, но, как по мне, черезчур сложный для этой задачи.
Важный момент: так как это личный проект, который я сам делаю для облегчения своей работы и работы своей команды, то меня не волнует легкость поисков разработчиков на выбраном языке. При этом для меня важна легкость запуска уже собраного приложения.
Я занимался разработкой rest серверов, а с реалтайм системами не работал и потому могу не до конца знать все подводные камни. У кого есть опыт в разработке таких систем, посоветуйте, какой язык будет удобней и быстрей для разработки сервера?
UPD: Всем спасибо за участие!
Решил писать на PHP, а для сокетов перед ним поставить центрифугу. Потому что:
1. PHP очень распространен. Т.к. код будет открытым, не хочеться создавать другим проблемы при допиливании под себя. Чем распространенней язык, тем проще другим будет использовать приложение.
2. Т.к. ображение к приложению остаеться по стандартной rest схеме, не придеться отдельно писать API. Центрифуга может обращаться к стандартному API приложения, к которому так же и другие приложения могут вязаться.
Какой серверный язык выбрать…мобильному разработчику
Вы скажете, какое вообще дело мобильному разработчику до того, на чем написан бэкенд. Главное, чтобы API туда был удобный, понятный, гибкий. А нам так не кажется.
Мы в AppsConf думаем, что всем нам необходимо иногда выходить за пределы мобильной разработки и прокачивать шляпку буквы T в модели T-shape. Вот, например, познакомиться с серверными языками чуть глубже, чем: «Я слышал, что Ruby умер». И чуть шире — то есть не только с популярными, но и из вторых рядов и даже андеграундными.
Чтобы и вы прониклись идеей Introductory-трека, записали интервью с Никитой Соболевым. Собирались говорить о языках программирования, а получилось о программистах. Заходите под кат, если считаете, что лучше быть просто хорошим разработчиком, а не Android- или iOS-разработчиком, а особенно, если не согласны с этим. Пятница — самое время поспорить.
— Как тебе идея целого трека обзорных докладов по разным технологиям от бэкенда до фронтенда на конференции по мобильной разработке, который мы назвали Introductory?

На мой взгляд, это лучший трек на мобильной конференции.
Мне вообще очень не нравится идея узких специалистов. Мне гораздо ближе идея T-shape person — то есть человека, хорошо разбирающегося в чем-то одном, но при этом с широким горизонтом понимания проблем в предметной области.
К сожалению, мне кажется, что мобильные разработчики в этом смысле сами по себе. Дело усугубляется еще тем, что они очень сильно зависят от вендора. Грубо говоря, закроется Apple — они уйдут на мороз.
Поэтому мне очень нравится идея Introductory-трека и то, что гостям конференции предлагают посмотреть вокруг, узнать, что есть у других, перенять их опыт и улучшить себя как специалиста в плане широты взглядов.
— Для каких еще конференций актуальна эта идея?
Для очень многих. У меня под рукой пример Python. В прошлый раз мы пригласили специалистов по Go, Elixir и Julia. В этом году я хочу пригласить фронтендера и хаскелиста (кстати, Call for Papers уже открыт). Потому что Python-разработчики тоже разные, многие из них работают как full-stack, им тоже полезно нагребать знания со стороны.
— Как думаешь, мобильные разработчики стали охотнее смотреть по сторонам, потому что это стало необходимо для профессионального развития, или так всегда и было, просто сообщество созрело?
Мне трудно точно судить, последний раз я писал мобильное приложение в 2010 году. Мой основной язык тогда был Java, я взял Objective-C и написал приложение для iOS. Был воодушевлен, думал, сейчас стану всем этим заниматься. Но нет: управления памятью не было, никаких библиотек не было, управления зависимостями не было, система сборки была отвратительная. С тех пор в эту сферу я внимательно не смотрел.
А сейчас я вижу несколько трендов, которые естественно привлекают мобильщиков к «серьезному программированию».
Раньше в данной сфере языки были сугубо специализированными. Objective-C был только для разработки под Apple. А сейчас, например, Swift пытаются вытащить на сервер и на нем что-то делать. Java для бэкенда и для Android — были двумя разными языками. А сейчас Kotlin более или менее похож и для того, и для другого. JavaScript появился в мире разработки мобильных приложений, а это какой-никакой серверный язык, и в это же время язык для фронтенда.
Появляется единая инфраструктура, которая начинает людей интересовать. Если раньше (в моем случае это 2010 год) мобильная разработка была совсем в отрыве, то сейчас все по-другому.
Причем сближение идет в обе стороны. Более плотная интеграция платформ дает людям возможность и необходимость за этой интеграцией следить.
— Но если интеграция сама идет к мобильному разработчику, зачем ему разбираться в языках для бэкенда?
У меня есть философский ответ на этот вопрос.
Если хочешь быть Android-разработчиком, то разбираться в бэкенде, наверное, не надо. А если хочешь быть просто разработчиком — конечно, надо.
Разработчик — это тот, кто решает проблемы из реального мира при помощи кода. Соответственно, решения могут возникнуть везде, в том числе в мобильном приложении, на сервере, на фронтенде. Хороший разработчик может решить в принципе любую проблему реального мира, с помощью инструментов разработки.
Понятно, что есть вход в каждый из этих инструментов, наработка практики и прочее, но жесткая фиксация на одной технологии, на мой взгляд, губительна для индивида, который этим занимается.
Как минимум технологии устаревают. Языки, которые были популярны 15 лет назад, сейчас практически не используются. Навык постоянно развиваться и учиться новому, смотреть на соседей, критично важен для любого разработчика. В частности, важно разбираться в бэкенде, потому что бэкенд фундаментален для всей разработки, сегодня все как-то да общается с сервером.
Кроме того, наверняка, мобильщикам бывает некомфортно с другими разработчиками, которые легче находят общий язык. Фронтендер и бэкендер все равно ближе, чем разработчик мобильных приложений к любому из них. Мой доклад поможет в некоторой степени закрыть проблему человеческого общения, помочь интегрироваться.
Насколько глубоко или поверхностно надо разобраться, другой вопрос. Особенно, если мы говорим о мобильном разработчике, которому, как ни крути, надо глубоко копать в свою область.
Я за то, что нужно активно смотреть по сторонам и в прошлое. Важно изучать историю программного обеспечения и программирования. Если не знаешь историю, то будешь заново изобретать очень многие вещи, которые уже придумали и от которых отказались по вполне объективным причинам. Я веду telegram-канал, где делюсь ссылками на классные open source проекты без привязки к языку, стараюсь выделить важные идеи.
— Разработчику мобильных приложений достаточно общих представлений или нет?
Зависит, прежде всего, от окружающей среды. Если у человека есть потребность напрямую влиять на бэкенд в своей компании: ставить им более правильные задачи, участвовать в процессе, возможно, управлять этими людьми, то придется разобраться глубоко.
Но если ты занимаешься только мобильной разработкой, то достаточно иметь поверхностное представление, что там вообще происходит, какие есть языки, проблемы, популярные решения. На таких людей и рассчитан мой доклад на Saint AppsConf. Естественно, за один доклад глубокое представление невозможно дать.
— Что еще нужно разработчику, чтобы быть классным разработчиком?
— То есть ты считаешь, что надо разбираться в предметной области?
Ограниченно, конечно, но надо. Например у нас одновременно есть 3-4 проекта, я, естественно, не разбираюсь в них всех идеально, но понимаю базовые концепции, с которыми работаю. Как они взаимосвязаны между собой, как они влияют на деньги, где расход, где приход, зачем все это надо бизнесу.
И другим разработчикам тоже советую. В нашей компании для них мы составляем документацию, как работает бизнес, какие проблемы мы решаем, почему это нельзя решить руками. Иногда нанять человека, чтобы он один раз, например, перебрал справочник товаров, дешевле. Если же мы автоматизируем процесс, нужно понимать, зачем.
— Давай разберем на примере. Если ты пишешь сервис доставки для пекарни, ты должен разбираться в том, как работает доставка, но не обязан разбираться в видах булочек, которые печет эта пекарня?
И в некоторых видах булочек тоже. Потому что некоторые булочки могут храниться час, а какие-то два дня. Соответственно их доставка будет отличаться.
— В своем докладе ты обещаешь рассмотреть сразу несколько популярных языков, несколько языков из вторых рядов и несколько языков из глубокого underground. Что это будут за языки?
Я не возьму те языки, которые слушатели конференции и так могут знать: Kotlin, Java, JavaScript. Бессмысленно о них рассказывать, если большая часть аудитории и так с ними знакома. Я решил рассказать о языках, которые люди гарантированно не знают, потому что мобильные приложения на них совсем не пишут. Выбирать и так есть из чего.
Я в принципе люблю языки программирования. Без конкретной задачи. Мне нравится язык программирования как идея. Какие-то люди подумали: «Есть вот такой набор проблем, их можно объединить и решить все разом. Сделаем для этого язык». Он будет решать определенный список проблем. А другой язык будет решать другие проблемы, потому что обычно все проблемы разом не решить.
Мне очень нравится смотреть за тем, какие проблемы каждый язык решает и зачем это может быть нужно на практике. Сам язык становится для меня объектом интеллектуального искусства. Большое количество людей работали, думали, проектировали, оптимизировали. Это очень интересно, поэтому я слежу за многими языками программирования.
Те языки, которые я выбрал для доклада, обладают несколькими интересными характеристиками. Во-первых, они спорные. Ни один из них это не язык, который ультимативно хорош во всем в сознании сообщества.
Все знают, что Python медленный, но это все равно самый популярный язык, он используется повсеместно. Я постараюсь объяснить, почему он используется.
А если говорить о Ruby, первое, что скажут люди, — Ruby умер. А на самом деле разработчики Ruby сейчас больше, чем в каком-либо другом языке, заморачиваются с архитектурой и внедряют огромное количество идей из других языков — функциональных, объектно-ориентированных и делают из этого что-то очень интересное.
Если говорить о Go, то у Go очень узкая сфера применимости, но на волне хайпа на нем начали писать вообще все.
Каждый из языков, которые я выбрал, для того чтобы представить во время выступления, обладает каким-то конфликтом.
Как персонаж хорошей истории. И суть конфликта в том, что какие-то вещи работают хорошо, а какие-то нет. Этот конфликт и будет во главе доклада.
— Ты считаешь, что нужно выбирать свой язык под каждую задачу, проект?
Это хорошая идея, но она не работает на практике. Ровно по тому, с чего мы начали. Есть Android-программисты, есть Python-программисты, которые, когда им показываешь код на Ruby, который ну то же самое, только в профиль, говорят: «Ой нет, все непонятно, не хочу разбираться».
Конечно, хотелось бы, чтобы люди были более универсальны и могли выбирать инструмент под задачу, но получается, что люди знают что-то одно и берут этот инструмент всегда.
Сюда же добавляется фактор найма. Например, в нашей компании мы могли бы не выбирать из TypeScript и Python. Но, если мне понадобится нанять Elixir-разработчика, я буду искать его всю жизнь. Я знаю таких разработчиков, но их не то чтобы много, и не то чтобы я смогу их быстро к себе переманить. Поэтому приходится умерить амбиции и подстраиваться под рынок и под заказчиков, которые тоже в соответствии с рынком имеют ограниченный стек.
— Ты обещаешь субъективный взгляд чуть ли не на 10 совсем разных языков. Ты правда с ними со всеми близко знаком, что-то писал на них всех?
С каждым по-разному, но, конечно, я всех их пробовал хоть в какой-то степени.
Например, на Rust я пишу open source, а на pony я написал 15 строчек кода, прочитал туториал, восхитился, и теперь хочу показать участникам конференции. Чтобы они тоже прониклись идеей.
— Очевидно, за один доклад ты не сможешь дать полной картины и понимания каждого языка. Почему людям стоит пойти на твой доклад, а не погуглить?
Причина в том, что когда тебе рассказывает живой человек, это совсем другое. Доклад в какой-то степени — это всегда шоу. Когда люди приходят на шоу они получают не только контент, но и эмоции. Когда гуглишь, получаешь только контент. Если он тебе интересен, ты и так погуглишь. А формат выступления живого человек позволяет популярно и легко получить интересные знания.
— Что будет главным элементов твоего «шоу»?
Языков много, они все классные, но писать не на чем.
Есть много популярных языков для решения своих бизнес-задач: найм, заказчики, библиотеки. Но все они стали популярными не просто так. Как правило, основная причина в том, что они очень простые. В их основе простые концепции, на которых легко начать, но тяжело продолжать.
Есть нишевые языки, и вот там уже появляются очень интересные сложные концепции, на которых можно построить что-то большое и надежное: Rust с его прекрасным компилятором, Elixir с его абсолютно бронебойной виртуальной машиной, Haskell с его системой типов и т.д. Но они не могут стать популярными как раз из-за высокого порога входа.
Большинство разработчиков, которые хотят чему-то научиться, берут популярные языки и на них пишут. И вопроса, зачем может быть нужно что-то еще, не возникает, потому что в тех проектах, с которыми они работают, и не требуется ничего более сложного.
Для разработчика очень важно понимать ограничение инструмента.
Чтобы понять ограничение, нужно упереться в него лбом, повоевать с проблемой, а потом отойти назад и на это большое посмотреть издалека. Только в докладах людей, которые очень много лет с чем-то работали, это и проявляется. А я хорошо знаком с этими людьми, накопил разные случаи и знаю, где во что можно упереться. И смогу обобщить свой опыт и опыт других людей.
— Написать «Hello world» на Haskell уже большой подвиг, но этого недостаточно?
Да, нужно повариться в сообществе функциональщиков. Послушать, какие проблемы они решают, какие доклады они делают — так можно понять срез.
Например, в сообществе хаскелистов очень остро стоит проблема входа. Они до сих пор не могут ее решить и сделать свой язык дружелюбнее к новичкам. Исторически сложилось, что в Haskell используется совсем другой синтаксис и совсем другие правила, просто чтобы хоть что-то написать. Даже опытному разработчику сначала будет совсем непонятно, что происходит в этом коде.
И дело не только в функциональном программировании. Если начинать знакомство с функциональщиной с Elixir, то будет гораздо проще. Elixir по синтаксису очень похож на Ruby. На первых порах будет не видно разницы, можно писать так же как и на Ruby. А только потом станет понятно, что это функциональный язык. Ты этого не замечаешь до какого-то момента, а потом открываешь для себя дополнительные возможности. Понимаешь, что на самом деле он строится на совершенно других принципах. Зная эту базу, становится легко перейти на менее дружелюбный функциональный язык.
— Кроме популярных языков и языков, как ты говоришь, вторых рядов, который хотя бы в какой-то степени на слуху, ты собираешься представить и совсем неизвестные. Например, что это за pony?
Pony is an open-source, object-oriented, actor-model, capabilities-secure, high-performance programming language. То есть строготипизированный, памятибезопасный (memory safe), акторный язык. Он очень молодой и очень интересный.
Его разработчики создают язык, где ты можешь создавать очень большое количество акторов, как в Elixir, но эти акторы гарантировано типобезопасные. Границы применимости этого языка еще совсем непонятны. Но я бы сказал, что он может ударить по Go, а я активно поддерживаю все, что может ударить по Go.
— Если все языки имеют недостатки и ограничения, как быть? Что с этим делать?
Страдать. И продолжать искать техническое совершенство. Это недостижимая мечта любого инженера, но процесс поиска этого совершенства — это отличная цель.
Saint AppsConf через 10 дней. Программный комитет отобрал 35 докладов и 12 митапов, среди которых каждый мобильный разработчик найдет идеи полезные для решения ежедневных задач и для своего профессионального и личного развития. Встретимся 21 и 22 октября в Санкт-Петербурге!
Бонусный вопрос для тех, кто хочет поделиться опытом, но почему-то еще не стал спикером. Ты часто выступаешь, зачем тебе это и что мотивирует?
У меня есть три цели:










