Александр «snov» Семенченко
Web разработчик
Привет! Меня зовут Александр, я из Сибири, и я, что называется, программист. Увлекаюсь computer science, цифровой графикой, математикой, современной физикой, компьютерными играми, а так же выявлением порядка из хаоса.
О целях
Моя цель — делать мир более приятным местом для существования, вносить вклад в улучшение жизни людей (и других живых существ), совершенствование и познание мира.
Считаю эту цель достижимой за счёт применения моих навыков в разработке цифровых систем в следующих областях:
- наука
- образование
- медицина
- искусство
- индустрия игр и развлечений
- другие массовые или специфичные услуги
О разработке
Познакомился с программированием в 2000 году. Начинал с Basic и скриптов для компьютерных игр. Работал в том или ином виде с Pascal, Delphi, C++, Rust.
Занимаюсь веб-разработкой и считаю её основным видом своей деятельстности с 2015 года. Знаком с основными фронтенд фрейморками (Angular, Vue.js, Svelte), cпециализируюсь на React.
Занимаюсь разработкой небольших бэкендов на Node.js в формате облачных функций.
Увлекаюсь смежными с вебом областями и вообще всем связанным с информационными технологиями, как то: Information Theory, Realtime Graphics, DevOps, 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-ми лет на остановке С++ в основном хобби-разработки, создавая небольшие игры и утилиты для себя и узкого круга, а так же работая над проектом мечты - игровым движком, которому не было суждено увидеть свет. Из эры C++ я вынес довольно глубокое понимание ООП парадигмы и паттернов проектирования.
Осенью 2015 я решил узнать, что такое web-программирование сейчас (был мимолётный опыт с dreamweaver и narod.ru году в 2007, тогда я не был вдохновлён). На php задержался буквально на пару месяцев, ибо он сразу оттолкнул меня своим синтаксисом. С другой стороны - мне понравился JavaScript, и я узнал про Node.js и понял - это то, что мне по душе. Мне не было интересно создание статичных страниц, я использовал WebSockets для взаимодействия с сервером, добавлял динамику и интерактивность, потому приходилось интенсивно манипулировать DOM'ом. Набор моих функций для этого дела разрастался и становился всё менее консистентным.
В конце 2016 я узнал про React, который с тех пор и является моим основным фронтенд фреймворком. Немного касался Angular (круто, что всё из коробки, TypeScript, строгая структура, но для моих нужд Angular скорее был overkill'ом, и тогда я вообще не был готов), vue, svelte (очень крутая концепция).
Параллельно web'у подтягиваю/восстанавливаю свои знания математики и алгоритмов, изучаю Rust (верю в светлое будущее WebAssembly), Deep Learning, развиваюсь в BackEend, DevOps направлениях, и вообще расширяю свой кругозор в IT индустрии.
Не так давно количество переросло в качество, и я понял на новом уровне, что разработка, это нечто большее, чем просто знание синтаксиса языка, алгоритмов и паттернов, что это выявление проблемы, её понимание, разбиение на части и собственно решение. И ещё сильнее укрепилось моё мнение, что важно понимать основополагающие принципы и концепции. Тогда выбор и освоение конкретного инструмента для конкретной задачи будет более осмысленным и лёгким.
Так же пришло понимание бизнес стороны процесса разработки, ради которой и из-за которой всё и существует.