Привет! Меня зовут Миша Бусырев, и я ищу TypeScript разработчика в компанию Crazy Panda, чтобы дать вторую жизнь одной нашей очень успешной игре. В августе 2016 года я начал исследовать возможность портирования Flash-игры на HTML5. к концу 2016 года стало понятно, как осуществить этот проект, заработал прототип графдвижка, к концу лета 2017 был завершён второй из трёх этапов исследования, написан транспилер AS3 -> TypeScript. Сейчас мы работаем над рантаймом флеша. Мы работаем вдвоём, я и @ivanpopelyshev и с радостью примем третьего человека в нашу команду. Ваня подхватил разработку движка и скрестил его с PIXI, я специализаруюсь на транспайлере. Проект подходит к своей кульминации, скоро ожидается возможность запустить прототип сконвертированной игры целиком и таки собрать все части воедино. Естественно, во многих местах конвертер сделан, что называется "крупными мазками", предстоит ещё множетсво различных задач, по доведению портированной игры до состояния запуска.
Мы портируем клиент большой и успешной социальной игры с Flash на WebGl. Игра очень большая по объёму кода (1900 классов, 10 мегабайт кода) и продолжает развиваться, поэтому о том, чтобы переписать её с нуля, речи не идёт. Вместо этого пилим автоматический конвертер – то есть, игровую логику писать руками заново не придётся. В данный момент мы активно используем внутренние апи компилятора, и удалось сделать транспилер ActionScript 3.0 в TypeScript последней версии. Если крадко, то удалось научить компилятор тайпскрипта понимать ActionScript. И загрузив AST, мы преобразуем его используя апи для трансформаций кода. Этап исследований по транспайлингу кода завершён, все приципиальные проблемы решены, одним кликом код из actionscript 3.0 конвертируется в typescript и сохраняет работоспособность, написано множество тестов, которые также после конвертации правильно работают, да uint правильно работает в js, да интерфейсы правильно представлены в рантайме, и ещё куча всего, что работает во флеше, но не работает в TS симулировано, причём с адекватной производительностью. Ещё требуется немного работы напильником над конвертером, но все основные очертания ясны и работают, сейчас мы соредоточены на рантайме флеша, выбирая между Mozilla Shumway, OpenFL и других библиотек мы остановили свой выбор на Mozilla Shumway, который уже адоптировали под свременный TypeScript, попутно найдя и исправив некоторое количество багов.
Наши графические задачи не по зубам готовым фреймвёркам, однако Ваня смог адаптировать наш полностью кастомный рендеринг под инфраструктуру PixiJS. Все анимации осуществляются на вершинном шейдере, в то же время мы получаем многие плюшки инфраструктуры пикси. Вот видео тестовой сцены https://www.youtube.com/watch?v=Qynuu95oioU я надеюсь оно снимет вопрос, почему же свой кастомный движок. А вот вкрутили интерактив https://www.youtube.com/watch?v=adixpp9CK_A
Браузеры поддержим все популярные: Chrome, Firefox, Edge, IE 11 (на западе он ещё вполне жив). WebGL во всех них работает нормально, так что многих проблем непосредственно совместимости с браузерами не ожидается, DOM использовать почти не будем.
Вообще, автоматизация портирования подарит нам множество незабываемых часов, дней и ночей. Работать будем небольшой и независимой командой технарей (втроём). Это ультрамарафон, активная стадия разработки идёт уже полтора года, а работы ещё вагон, дальше – поддержка и, возможно, портирование других проектов. Ожидается огромный профессиональный рост всех участников в процессе, так как количество технических вызовов огромно, а сложность задачи пугает с первого взгляда. Да, internal апи typescript слабо документировано. Много приходится изучать по исходникам, тестам, проводить эксперименты, кстати мы таки форкнули компайлер и сидим на кастомном билде тайпскрипта, при этом обновляя его синхронно с выходом новых версий.
Crazy Panda основана в 2010 году, и наши игры собрали более ста миллионов игроков; компания уверенно стоит на ногах с момента своего основания и закрепилась на множестве рынков. Более подробно о Crazy Panda можно узнать на официальном сайте: https://crazypanda.ru/o-nas и в интервью (хоть оно и немного устарело): https://goo.gl/I0Xgrd Фотки офиса можно посмотреть тут https://moikrug.ru/companies/9031891857
Профессионализм и увлечённость. Готовность произвести большое количество изысканий и воплотить результаты на практике. Вам нужно иметь представление о том, из чего складывается производительность кода, обладать гибкостью ума и открытым взглядом на мир разработки, быть готовым изучать совершенно новые для себя вещи. Вы должны уметь выдвигать и проверять гипотезы, в том числе о производительности, вы должны понимать как доказать что решение А лучше чем Б.
Искренне любить строгую типизацию и понимать, зачем она нужна. Пишем с noImplicitAny. Уметь строить прозрачную и эффективную архитектуру больших проектов. Уметь писать хорошо читаемый и при этом высокопроизводительный код, уметь профилировать. Понимать, что такое модульность программ и зачем она нужна. Плавать среди замыканий как рыба в воде. Любить и читать спеки. Возможно, ваш опыт в TypeScript небольшой, но вы обладаете хорошим опытом в JavaScript и хотите двигаться в сторону TypeScript. Ваша библия: http://www.ecma-international.org/ecma-262/7.0/index.html и https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md
Работаем только в офисе в Москве (м. Автозаводская). Переезд из другого города или страны? Отлично, мы поможем. Плюшки: компенсации по страховке, фитнесу и парковке; гибкий рабочий график; английский разного уровня в офисе; холодильник с едой и напитками, печеньки с темной стороны, кофе-машина, приставки, пинг-понг, бамбук, Oculus Rift и HTC Vive для развлечений.
Если вы чувствуете в себе силы и уверенность, но какие-то моменты не соответствуют вышеуказанным требованиям, всё равно пишите – обсудим! Вы же умеете осваивать новое?
Уровень зарплаты? Наши требования весьма гибки и мы рассматриваем кандидатов с широким диапазоном знаний. Ну давайте, скажем, 100-200 тысяч рублей в месяц на руки, обсуждение на собеседовании. Стоящий кандидат получит стоящее предложение. Если заинтересовались, напишите мне пару слов на m.busyrev@crazypanda.ru. Есть резюме – отлично, но если лень его обновлять – не проблема, обсудим голосом. Также меня можно найти на почти любом BeerJS или MoscowJS.
Бусырев Михаил. Руководитель WebGL Research, Crazy Panda. m.busyrev@crazypanda.ru
Если есть AST - в чем именно проблема кодогенерации? Покрыт ли проект тестами, которыми можно проверить корректность сгенерированного приложения? Можете поделиться, примерами плохой документации typescript internal API? Они вроде хорошо принимают PR на доки. Может какая-то часть вашего конвертера есть в опенсорс? Интересно посмотреть