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)
Примеры кода
Single Page Application: React + Typescript
Библиотека для упрощения настройки Webpack
Скрипты для monorepo проекта на GitLab
На любителя лирики
Я провёл порядка 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 индустрии.
Не так давно количество переросло в качество, и я понял на новом уровне, что разработка, это нечто большее, чем просто знание синтаксиса языка, алгоритмов и паттернов, что это выявление проблемы, её понимание, разбиение на части и собственно решение. И ещё сильнее укрепилось моё мнение, что важно понимать основополагающие принципы и концепции. Тогда выбор и освоение конкретного инструмента для конкретной задачи будет более осмысленным и лёгким.
Так же пришло понимание бизнес стороны процесса разработки, ради которой и из-за которой всё и существует.