Alexander «snov» Semenchenko

Alexander «snov» Semenchenko

Привет! Меня зовут Александр, я из Сибири, и я, что называется, программист. Увлекаюсь computer science, цифровой графикой, математикой, современной физикой, компьютерными играми, а так же выявлением порядка в хаосе.

О целях

Моя цель — делать мир более приятным местом для существования, вносить вклад в улучшение жизни людей (и других живых существ), совершенствование и познание мира.

Считаю эту цель достижимой за счёт применения моих навыков в разработке цифровых систем в следующих областях:

  • наука
  • образование
  • медицина
  • искусство
  • индустрия игр и развлечений
  • другие массовые или специфичные услуги

О разработке

Познакомился с программированием в 2000 году. Начинал с Basic и скриптов для компьютерных игр. Работал в том или ином виде с Pascal, Delphi, C++, Scala, Rust, Haskell.

Занимаюсь веб-разработкой и считаю её основным видом своей деятельстности с 2015 года. Знаком с основными фронтенд фрейморками (Angular, Vue.js, Svelte), cпециализируюсь на React.

Занимаюсь разработкой небольших бэкендов на Node.js в формате облачных функций.

Увлекаюсь смежными с вебом областями и вообще всем, связанным с информационными технологиями, например, realtime graphics, DevOps, blockchain, machine learning. Держу руку на пульсе, слежу за новыми и набирающими популярность идеями, подходами, технологиями, фреймворками и библиотеками.

Предпочитаю работать удалённо за своим оборудованным рабочим местом.

Навыки, сухие числа и разные buzzwords

  • По скромной оценке: не менее 10000 часов, посвящённых программированием в том или ином виде.
  • Опыт удалённой работы в команде по agile методологии (Jira, Confluence, Slack).
  • Отзывчивость, внимание к мнению других участников процесса.
  • Здоровый перфекционизм, понимание неизбежности компромиссов при контакте с реальным миром.
  • Аналитический, вдумчивый подход к выбору решения конкретной задачи.
  • Знание основ computer science: сложность, алгоритмы и структуры данных.
  • Понимание и разумное использование фундаментальных принципов разработки ПО, ООП и функциональной парадигмы, паттернов проектирования.
  • Опыт проектирования архитектуры сложных клиент-серверных приложений: масштабирование, разбиение на модули, уменьшение связности.
  • Глубокие знания JavaScript: принципов работы и последних стандартов.
  • Понимание принципов работы современных JavaScript фреймворков.
  • Любовь к строгой типизации, в частности к TypeScript.
  • Понимание причин ухудшения производительности приложения и методов их устранения.
  • Знание react экосистемы: опыт работы с redux, redux-thunk, redux-saga, react-router, overmind, MobX, GatsbyJS, Next.js, styled-components, material-ui и другими популярными библиотеками.
  • Знание Node.js экосистемы: express, mongoose, Socket.io.
  • Знание современных стандартов HTML5 и CSS3, понимание принципов семантической разметки и адаптивной вёрстки.
  • Опыт использование современных методов и утилит для разработки и контроля качества кода: Webpack, Babel, Eslint, Prettier, lint-staged.
  • Опыт unit-тестирования логики и React-компонентов: Jest, react-testing-library, storybook.
  • Опыт использования Docker.
  • Опыт построения систем, основанных на облачной инфраструктуре (Firebase, Vercel, Heroku, GoogleClound, DigitalOcean).
  • Опыт работы с git (git-flow).
  • Опыт реализации CI/CD:
    • GitLab пайплайн, оптимизированный для monorepo проекта
    • Github Actions

Проекты

Личный сайт

WIP: multiplayer game (React + Overmind + WebRTC)

Примеры кода

React + SVG

Single Page Application: React + Typescript

Библиотека для упрощения настройки Webpack

Скрипты для monorepo проекта на GitLab

React + MobX

На любителя лирики

Я провёл порядка 8-ми лет на остановке С++ в основном хобби-разработки, создавая небольшие игры и утилиты для себя и узкого круга, а так же работая над проектом мечты - игровым движком, которому не было суждено увидеть свет (чудом уцелели пара видео: nzs distortion , NZS Demo #2). Из эры C++ я вынес довольно глубокое понимание ООП парадигмы и паттернов проектирования.

Осенью 2015 я решил узнать, что такое web-программирование сейчас (был мимолётный опыт с dreamweaver и narod.ru году в 2007, тогда я не был вдохновлён). На php задержался буквально на пару месяцев, ибо он сразу оттолкнул меня своим синтаксисом. С другой стороны - мне понравился JavaScript, и я узнал про node.js и понял - это то, что мне по душе. Мне не было интересно создание статичных страниц, я использовал WebSockets для взаимодействия с сервером, добавлял динамику и интерактивность, потому приходилось интенсивно манипулировать DOM'ом. Набор моих функций для этого дела разрастался и становился всё менее консистентным.

В конце 2016 я узнал про React. С тех пор я и флуктуирую вокруг React-стэка. Немного касался angular (круто, что всё из коробки, typescript, строгая структура, но для моих нужд Angular скорее был overkill'ом, и тогда я вообще не был готов), vue, svelte (очень крутая концепция). Так же развиваюсь в сторону backend и devops.

Параллельно web'у подтягиваю/восстанавливаю свои знания математики и алгоритмов, изучаю Rust (верю в светлое будущее WebAssembly), deep learning и blockchain, а так же расширяю свой общий кругозор в IT индустрии.

Не так давно количество переросло в качество, и я понял на новом уровне, что разработка, это нечто большее, чем просто знание синтаксиса языка, алгоритмов и паттернов, что это выявление проблемы, её понимание, разбиение на части и собственно решение. И ещё сильнее укрепилось моё мнение, что важно понимать основополагающие принципы и концепции. Тогда выбор и освоение конкретного инструмента для конкретной задачи будет более осмысленным и лёгким.

Так же пришло понимание бизнес стороны процесса разработки, ради которой и из-за которой всё и существует.