Обо мне

Специализация и профессиональные навыки

  • C#/.NET, ASP.NET MVC, Entity Framework, MS SQL — основные технологии в последнее время;
  • C/C++, PHP, MySQL, Windows API — есть большой опыт, сейчас использую редко;
  • F#, Java, Ruby, Perl, Powershell, XSLT, DB2, Oracle, UML — есть не очень большой опыт;
  • JavaScript, jQuery — регулярно применяю, глубоко не владею;
  • HTML/XHTML/XML, CSS — умею;
  • Паттерны проектирования — задействую;
  • DDD, TDD, CI — знаю;
  • Windows, Debian, Android, TFS, Redmine, SVN, Mercurial, Git, Jira — работал.

Профессиональные цели

  • Вежливый пользовательский интерфейс.
  • Функциональное программирование, искусственный интеллект.
  • Распределённые вычисления.

Интересуют

  1. Задачи-вызовы, решением которых можно гордиться.
  2. Командная работа, высокий уровень организации процесса разработки, гибкие методологии, дружеская атмосфера.
  3. Участие в проектировании.
  4. Качество в приоретите, а не «если останется время».

Не интересуют

  1. Open space, больше 5 человек в одной комнате, шум.
  2. Работа, где требуются стрессоустойчивые программисты.
  3. Работа, где выход в субботу и воскресенье является обычной практикой.
  4. Работа, где отсутствует организация процесса.

А ещё

Отвечаю на вопросы на сайте stackoverflow.com. Если не загружен основной работой, отвечаю часто, и вхожу в top 3% рейтинга среди отвечающих.

Образцы кода

https://github.com/markshevchenko/learningbasic — интерпретатор языка Бейсик, написанный на C#. Для вычислений задействованы деревья выражений и динамическая типизация. Чтобы они заработали вместе, пришлось исследовать IL-код компилятора. Много модульных тестов (приблизительно один тест на семь строк кода), небольшие классы, короткие методы, внедрение зависимостей. Всё, как у классиков.

Функционально — обычный, полный по Тьюрингу Бейсик (в перводе на русский язык — массивы в языке реализованы, вместе с IF/THEN/ELSE и GOTO). Есть цикл FOR/NEXT, целые и плавающие числа, строки. Есть около тридцати встроенных функций. Технологически — полукомпилятор с шитым кодом.

Наконец

Двое детей, поэтому работу после работы и в выходные дни считаю признаком слабой организации.

Турист, поэтому «командная работа» для меня не пустой звук. В туристический сезон ценю возможность взять несколько дней за свой счёт, потому что не всегда удаётся уложиться в отпуск.

Профессиональные навыки
Опыт работы
Февраль 2015 — по настоящее время
Hawk House Integration
Руководитель группы разработки
Москва
Обязанности и достижения

Участвую в проектировании и разработке отечественной BPM-системы. Инвестором и внутренним заказчиком выступает компания Правильные люди.

Фактически не выполняю руководящую функцию, больше соответствую должности ведущего программиста. Де факто, являюсь штатным техническим интервьювером, подготовил набор вопросов в соответствии с пожеланиями руководства и собственными представлениями о том, что такое хорошее техническое интервью.

Активно продвигаю модульное тестирование, и Domain Driven Design (последний безуспешно). Возможно смогу внедрить несколько решений из области функционального программирования (есть потребность и конкретные идеи). Стараюсь привнести «правильное» использование IoC-контейнеров.

C#, Entity Framework, MS SQL, WCF, Autofac, NLog, Jira, Git.

Результаты: разработано несколько модулей системы, предложено решение по организации DAL, найдены два очень сильных разработчика.

Август 2013 — Декабрь 2014
Веб-разработчик
Москва
Обязанности и достижения

Разработка коробочного веб-решения для доступа к лизинговой конфигурации 1С.

C#, ASP.NET MVC, MS SQL, Entity Framework, WCF, HTML5/CSS, JavaScript, jQuery. Mercurial.

Решение работает в нескольких лизинговых компаниях, одна из них входит в тройку крупнейших на рынке. Выпущено три версии продукта.

За время работы в компании сделал два проекта, не связанные с .NET/C#/MVC:
1. Интегрировал 1С с системой защиты Sentinel. На C++ разработал модуль расширения, который обращается к Sentinel API, и выполняет часть вычислений, используя константы, защифрованные в ключе защиты. Помог большой опыт разработки на C++ и Windows API.
2. Разработал на Java приложение для Android, которое связывается с 1С через SOAP и отображает историю изменения ключевых показателей. За короткое время освоил несколько незнакомых технологий, и подготовил демо-версию продукта. Особым достижением считаю предварительную разработку пользовательского интерфейса в соответствии с методологией Алана Купера.

Резюме: хорошая работа, которой не хватало C#-коллег  — работать приходилось с разработчиками 1С. (Как говорит мой друг: кому и 1С — программисты). Работа неожиданно закончилась в связи с кризисом 2014 года.

Сентябрь 2012 — Май 2013
Главный разработчик
Москва
Обязанности и достижения

Доработка существующих приложений (за всё время работы более десяка). В приложениях применялось множество технологий, в том числе незнакомых. например, ExtJS, NHibernate, Oracle — всё осваивал на ходу.

C#, ASP.NET MVC, MS SQL, jQuery, Entity Framework, WCF, TFS.

Разработал шлюз для выгрузки данных по тендерам — ASP.NET XML Web Service, который агрегировал данные из разных источников.

Исправлял ошибки и разрабатывал новые функции в многочисленных проектах, демонстрируя чудеса работы с чужим кодом в авральных условиях.

Одной из самых сложных решённых задач явилась доработка отчётной системы, где пришлось прочитать и понять тысячи строк на Transact SQL.

Резюме: самое неорганизованное рабочее место, где пришлось работать: непредсказуемость процесса, ежемесячные авралы. Наверное, полезный опыт, но очень не хочется его повторения.

Апрель 2011 — Сентябрь 2012
Лидинг Линк
Ведущий программист
Москва
Обязанности и достижения

Организация деятельности отдела разработки, техническое руководство, проектирование, программирование.

PHP, MySQL, Apache, Smarty, Debian, VirtualBox, Redmine, Mercurial.

Меня пригласили в стартап инвесторы, у которых возник конфликт с предыдущей командой разработки. Задачи: принять код, набрать новую команду, довести проект до запуска.

Проект был запущен в начале 2012 года, но в 2013-м году его уже не существует, поскольку не удалось выйти на запланированную посещаемость.

Решённые задачи:
1. Спланирована и настроена конфигурация для непрерывной разработки, внедрена системы контроля версий Mercurial и трекер Redmine.
2. Проведён десяток собеседований, найдены 3 программиста.
3. Проведён рефакторинг кода: избавились от «вермишели», разбили код на 3 уровня, внедрили MVC.
4. Параллельно с разработкой проведено обучение разработчиков, поскольку PHP-программисты редко знают, что такое паттерны проектирования и принципы SOLID.

О главном своём достижении узнал через полгода после завершения проекта: бывшие подчинённые, устроившись уже в разные места, пригласили в ресторан и поблагодарили за обучение и серьёзный профессиональный рост.

Резюме: погрузился в незнакомый мне мир Unix-программирования. Был бы рад, если бы проект «выстрелил», но, к сожалению, этого не случилось.

Октябрь 2009 — Март 2011
Топ Сольюшнз
Программист .NET
Москва
Обязанности и достижения

Разработка шлюзов для обмена данными между SWIFT и внутренними системами Сбербанка.

Шлюзы потребовались в связи с переходом SWIFT на IBM WebSphere MQ.

C#, MS SQL, IBM WebSphere MQ.

Реализована проприетарная схема проверки подлинности сообщений на базе алгоритма SWIFT LAU и внутренней библиотеки Сбербанка.

Для повышения надёжности шлюза во время разработки использовалось модульное тестирование.

Резюме: небольшая аутсорсинговая компания, полная самостоятельность. Не хватало командной работы и ясных перспектив.

Октябрь 2008 — Октябрь 2009
Финам
Программист ASP.NET, C#
Москва
Обязанности и достижения

Участие в разработке социальной сети http://comon.ru.
C#, ASP.NET, ADO.NET, MS SQL, TFS, HTML, JavaScript, jQuery.

Подключение внешней библиотеки, написанной на C++, для работы с Forex (P/Invoke).

Разработка и тестирование SQL-скриптов при масштабных реструктуризациях БД (несколько сотен строк на T-SQL).

Резюме: хорошая команда, хороший проект, плохие условия работы.

Ноябрь 2002 — Сентябрь 2008
Фриланс
Программист
Москва
Обязанности и достижения

В разные годы работал над следующими проектами в качестве приглашённого разработчика:
1. Трёхмерная карта города Набарежные Челны. В мои обязанности входила разработка движка. Основная программа писалась на Delphi, так что нужно было интегрировать OpenGL и Delphi. Данные загружались из 3D MAX.
2. Разработка шлюза для Райфайзен Банка. Данные принимались через WebSphere MQ, обрабатывались и загружались в DB2.
«Для себя» писал:
1. Интепретатор Бейсика на C#. Лексический и синтаксический анализаторы написаны вручную, включая устранение левой рекурсии в грамматике LL(1) и реализацию приоритета операторов.
2. Анализатор языка разметки Creole Wiki на fslex и fsyacc (инструменты лексического/синтаксического анализа F#). Разработка велась с целью проверить адекватность средств функционального программирования в стандартных современных задачах.
3. Doom-образный трёхмерный движок.

Июль 2001 — Октябрь 2002
Акелла
Программист C++
Москва
Обязанности и достижения

Участие в разработке компьютерной игры Age Of Sales II.

С++, Visual SourceSafe.

Разработка модуля ИИ на основе нечёткой логики. Делать нечёткую логику на C++ весьма непривычно, поскольку правила декларативны, а язык императивен.

Игра выпущена на рынок. В обзорах писали, что ИИ лучше, чем в первой версии, хотя всё ещё не идеален.

Освоены паттерны проектирования и Visual SourceSafe.

Резюме: исключительный профессиональный уровень команды, такого больше нигде никогда не встречал. Очень радовала атмосфера, совместное решение интересных алгоритмических задач, освоение нового тогда понятия паттернов.

Март 2000 — Апрель 2001
Вебмастер
Набережные Челны
Обязанности и достижения

Техническое руководство разработкой корпоративного сайта.

В составе группы из 3-х человек разработал первую версию сайта в 1999-м году. Затем на постоянной основе возглавил техническую команду, которая поддерживала и дорабатывала сайт.

Работа в крупной компании позволила понять схему функционирования бизнеса и освоить управленческий язык (до этого общался с заказчиками как программист). Освоил понятие бизнес-процессов и их инжиниринга, изучил IDEF0.

По роду деятельности активно сотрудничал с разработчиками в самых разных подразделениях, участвовал в проектировании решений уровня корпорации — от общих архитектурных вопросов до разработки структуры БД.

Из интересного — именно тогда впервые плотно опробовал Perl и MySQL. С тех пор на Perl практически не писал, так как где-то через год ушёл на PHP.

На связке Perl/MySQL разработал систему проведения тендеров, что явилось нетривиальной задачей, учитывая количество состояний, в которых может пребывать каждая заявка.

Одним из результатов работы стала статья о том, «как правильно разрабатывать сайты», опубликованная в 49-м номере Компьютерры: http://old.computerra.ru/offline/1999/327/2750/.

Резюме: лучшее рабочее место в Республике с одним единственным минусом — профессионально расти больше некуда. В результате пришлось перебираться в Москву.

Март 1992 — Август 1999
Разные организации в г. Набережные Челны до переезда в Москву
Программист
Набережные Челны
Обязанности и достижения

Это было давно, и те технологии давно уже массово не используются. Писал на C, Assembler, C++, Delphi.
Вряд ли всё это интересно современному работодателю. Я внёс этот пункт для корректного вычисления трудового стажа на сайте.