October 31, 2018

Мартынов

26 Октябрь, 20:13

Здравствуйте. Да, конечно могу рассказать.

Начинал писать еще в школе, классе в 8-ом на паскале. Использовал стандартные примеры которые были в той же директории что и PascaleABC. Потом примеров стало не хватать и я нашел группу в ВК по паскалю(вот она https://vk.com/jk98vpascalprogram). Проявлял там большую активность, и мне написал администратор. Оказалось что админу столько же сколько и мне, и он ходит на курсы по C#. Я тоже начал изучать C#. Толком ничего не писал, просто смотрел как и что работает. Потом после того как закончил школу, я пошел в универ, и к этому времени я заканчивал первую игру. У меня была идея - сделать игру где ты можешь собрать ракету и запускать ее в космос. Писал ее на С++ CLI(просто потому что хотел разобраться с С++, в это время и с WinAPI разбирался). Но в итоге в игре можно было только лететь в космос) Физики не было, графика тоже была ужасная. Потом на первом курсе я узнал про игровые движки. Я захотел сделать в игре физику. Прочитал кучу книг по физике, в итоге помог Эйлер. За 3 месяца сделал его, но потом понял что проще было взять уже готовое решение и начал изучать Box2D. UI кстати работал на WinForms, а графика рисовалась через Graphics. Мы постоянно делились опытом с администратором той группы по паскалю, мы с ним до сих пор общаемся)

Он меня познакомил с одним человеком который скупал проекты. Он меня попросил сделать игру где будут сервера, и вирусы, и тебе нужно будет заразить все сервера противника. Художника кстати не было. Я это все сделал на графиксе, а график отрисовывает все на CPU, и пришлось переписывать на DX, я тогда с ним был уже достаточно знаком чтоб сделать подобное. Вот она https://vk.com/limide?w=wall-71023327_143%2Fall

Уровни генерировались рандомно. Так же я интересовался нейронными сетями и там тоже пару интересных вещей сделал. Потом в ВК я наше группу tproger(https://vk.com/tproger), когда еще у них и сайта не было, и аудитория меньше. Там был раздел с альбомами, и был альбом: "мои проекты", куда самые разные разработчики выкладывали свои проекты(скрины, ссылки), потом от туда альбомы убрали. Я начал писать различные проекты и выкладывать туда чтоб послушать критику. Вот некоторые которые люди оценили:

https://vk.com/limide?w=wall-71023327_198%2Fall (android)

https://vk.com/limide?w=wall-71023327_185%2Fall (pc)

https://vk.com/limide?w=wall-71023327_135%2Fall

https://vk.com/limide?w=wall-71023327_227%2Fall

Так я познакомился с разными людьми. Но это были одни разработчики, а я нуждался в художнике. Я собрал всех своих ближайших знакомых в одной беседе, предложил написать игру по одной книжке, но нужно было найти еще художника. Я начал писать игру(мне кажется что даже сейчас если ее написать, то была бы очень интересной). В итоге нашли художника, сделали набросок сценария и в итоге нас кинул художник и все как-то развалилось. И таких примеров с художниками есть штук 5. Я конечно пытался обратиться за настоящим художникм, но у студента вроде меня было тогда около 300 баксов, а художник просил в больше 1к. Потом от безысходности я не знал чем заняться и без графики и вспомнил что есть такая вещь как блок-схемы(когда ты строишь программу по блокам "начало", "считать", "конец" и т.д). Поспорил с одним знакомым кто быстрее подобное реализует(я должен на WPF, он под web). В итоге я выйграл) https://vk.com/limide?w=wall-71023327_209%2Fall

Спор был на интерес. После этого мне начали писать различные люди, преподаватели с других универов(я их не знал), говорили что носили своим студентам на пары показывать. Потом я понял что хоть все это пишу, но я не знаю самого основного - алгоритмов, паттернов и т.д. Долгое время занимался просто этим. Так же один из знакомых сказал что нашел открытую базу данных TinyWebDB, и показал какой чат на этом сделал. Я пока сидел и разбирал этот код понял что это отличная вещь для трояна. Тогда я начал писать трояна который может расширяться. Ты можешь отправлять ему dll либы, и он сам мог встраивать их в себя расширяя функционал. Тогда я еще сильней подучил WinAPI в связке с C#. После чего заинтересовался в GPU. Начал изучать шейдеры, Пытался что-то считать на GLSL шейдерах. После того как порисовал пробовал вычислять, узнал про OpenCL и сделал с ним тоже несколько интересных проектов. И еще много разного пробовал на подобие библиотеки Speech, bass.net, asp.mvc, sql и т.д. Все шло хаотично.

Шел 3-ий курс, к нам пришел человек на 1 семестр по обмену опытом. На первой паре он каждого спрашивал кто-что знает, я рассказал что знаю C#, SQL, с графикой что-то делаю. После пар он подошел ко мне и предложил работать с ним, я согласился. Прошел собеседование и через неделю начал работать. Это была ERP (система автоматизации производственного технического процесса) написаная на java + vaadin + (postgresql и mssql). Это был монолитный проект, с java я достаточно быстро разобрался и разрабатывал к примеру кейс для валидации данных вводимых в базу данных. Нужно было взаимодействовать для этого с другой db и многими компонентами системы. Писал модуль для визуализации 3D модели в этой системе. Там использовал three.js(я с ним до этого работал, так же как и с js, ts, node.js, grunt...). Интегрировал 1С с нашим сервисом по AMQ через RabbitMQ и т.д. Тот человек который меня туда позвал оказался моим тимлидом(я с ним до сих пор общаюсь чуть ли не каждый день чтоб узнавать что-то новое). Использовали agile scrum. 1 стендап в пятницу и таски в trello. Хостинг для git использовали GitLab - потому что можно было держать приватный репозиторий бесплатно. Все запускалось из под докер-контейнеров. Я все еще хотел в GameDev (статейку написал для хабра https://habr.com/post/333040/), но хотел набраться опыта в командной разработке. Потом от нас ушел тимлид из-за того что с руководством были разногласия. После того как он ушел работать стало не возможно. Репозиторий перенесли на локальную машину(писать из дома нельзя), постоянно кто-то начал отвлекать, из-за лишних дел(к примеру - сходить к кому-то, узнать то-то, записать важные моменты, вернуться). Я понял что нужно идти потому что больше никакого опыта не получаю. Хотел попасть в GameDev, но вакансий не смог тогда найти(именно на тот промежуток времени). В итоге нашел компанию science data software которая занимается разработкой системы для работы с химическими данными. Она сама расположена в Вашингтоне, сдвиг по времени 7 часов(Ньюйорк таймс), удаленная, все тот же agile scrum, только стендапы каждый день(понедельник, среда, пятница .- общие, вторник, четверг - бэкенд компандой). Я тогда переехал в Санкт-Петербург. Система была микросервисной, на .net core(на начале 1.0, потом перенесли на 2.1). Я начал с покрытия web api интеграционными тестами, потом нагрузычными тестами (через jmeter). Потом начал отвечать с все что связано с web api, потом к этому добавилась MongoDB и ELK стек, а потом писал свои микросервисы и интегрировал их с web api. Для взаимодействия сервисов использовался все тот же AMQ, только не на чистом RabbitMQ а на MassTransit. Вместе с MassTransit использовался для аггрегации данных Automatonymous(это асинхронный конечный автомат управляемый при помощи коман�� и евентов от MassTransit). Для хранения данных использовали MongoDB, а для логов Redis. Так же мы придерживались архитектурного паттерна CQRS/ES (https://martinfowler.com/bliki/CQRS.html). Последние 2 буквы обозначают использование EventStore. Мы в него писали все что делает пользователь, и чтоб он вернуться к действию X. Так же мы его использовали и для внутренних решений, но там много думаю писать :) Если в кратце, то мы его использовали для хранения евентов и он позвалял нам правильно валидировать события и получать информацию о том, как отработала та или иная команда. Использовали все тот же докер для поднятия инфраструктуры. К проекту я подключил ELK стек позволящий логировать состояния системы через heartbeat, metricbeat, auditbeat и т.д., все это отображалось в kibana. Там мы хранили код на bitbucket, использовали jira и confluence. Ездили на разные встречи, конференции. Последняя была в Москве, я там выступал с докладом по CQRS/ES. И все равно постоянно думал о играх. Поискал работу геймразработчиком, и толком ничего не нашел. Нашел одну, пришел на собеседование, сказал что не знаю unity и ушел от туда. А времени на изучение unity не было. Потом я подумал что лучше буду заниматься тем что люблю но за гроши) Сказал начальству что ухожу и начал писать небольшой фреймверк для 2D игр. Идей хватало, оставалось только реализовать. Разобрался как пользовать Adobe Illustrator, договорился с знакомыми на счет рекламы, и вот заканчиваю писать его и начну писать игру, половина графики уже готова в flat. Пишу на Xamarin чтоб запускалась на всех платформах, для графики использую Skia, через GPU. Для desktop есть контрол SKGLControl для этого, но когда его используешь, Skia выдает ошибку. По этому пришлось для desktop заново реализовывать вершинный буфер с текстурой чтоб рисовать на GPU. Код лежит тут: https://github.com/Winster332/HipsterEngine

Так же на Node.js писал проект когда-то с web socket. Это было похоже на Agario.io, дома купил белый IP, настроил сервер и играли с знакомым. Не пустил в открытый доступ т.к. запускал я тогда с старого ноута, и ничего другого больше не было.

Вот, как-то так)

Ожидания по зп: 40-60 т.р.

Юнити думаю получится выучить крайне быстро. Я его пробовал, просто смотрел как и что работает но ничего на нем не написал