Download PDF

Skills

Preferred Programming Languages

C#, F#, TypeScript, Python, Go, Haskell.

Main Tech Stack
  •  .NET:
    • WPF as a desktop client;
    • NET Framework/.NET Core ASP NET MVC/Web Api;
    • TPL/Reactive Extensions for async and parallel processing.
  • Angular.
  • Haskell mainly for advanced parsing (Parsec) and pure pipes for an intensive data processing. In quite .NET-specific cases, F# could be taken as alternative.
  • Pyhton or Type Script for sketching and trying out new ideas on the fly.
  • Databases:
    • Highly prefer graph-driven databases (like Neo4j) over a traditional SQL;
    • MS SQL;
    • SQL Express.
  • Docker as a way to deploy and update various services, especially when it comes down to a microservices architecture.
  • Version control systems:
    • GIT, either GitLab or GitHub;
    • TFS.
  • Continuos integration:
    • Jira;
    • Team City;
    • Octopus.

Reliable Programming Techniques I Trust In

Async programming with reactive extensions. Map/reduce approach for data parallel processing. Object oriented programming design patterns (GoF), functional programming design patterns (curried higher order functions, functors, applicative functors, monoinds, monads, etc.). Randomized property testing using QuickCheck for Haskell and FsChech for .NET. Traditional test driven development. Domain Specific Languages (DSL), where business would benefit from those. Even sourcing, well-designed state machines, monadic compositors, mutable and immutable datastructures where appropriate.

Category Theory

A modern mathematics that can be applied to explain a lot about programming and inspire with a much better solution than traditional OOP standards.

Data structures and algorithms

Complexity theory (O(n) notation), basic knowledge of classical algorithms and data structures. Experience with solving concrete production problems with a right datastructure in a right place.

Performance measuring and optimization

Experience in profiling and optimizing .NET apps. Preferred tools: dotTrace/dotMemory for comparatively easy cases, Windows Performance Recorder/Analyzer for more complicated issues. 

Good command of English

At least Upper Intermediate in  both oral and written English.

Knowledge sharing

I am one of the guys who can explaing sophisticated theories in such a way that not familiar people would understand. As a consequence, I can teach and mentor junior colleagues and, in fact, have been doing this since 2016.

Work experience

2018-2019

Data Art

Overview:

Moved to Saint Petersburg to join local Data Art office. Project: flexible messaging service designed to send alerts in a number of supported ways. Main tech stack: Autofac, AsyncPoco, xUnit, FluentValidation, WCF/ASP NET Core Web Api, Angular, MS SQL, Jira, Team City, Octopus.

Main responsibility:

Architecturing and implementing core components from scratch, refactroing old WCF-based components to a Web API  respecting best known practicies.

20172018

Gunvor Services

Overview:

Was relocated to Estonia and  employed for the Gunvor Services (http://gunvorservices.com) as a .NET developer to work on ahuge server/client application. Main tech stack: Caliburn Micro, Autofac, NHibernate, nUnit, Rabbit MQ, reactive extensions, TPL, Scale Out, MS SQL, Jira, Team City, Octopus, GIT.

Main responsibility:

Backend development, server\client performance issues investigation and improvements, unit and integration testing, some WPF frontend as well.  

20132017

Freelance

While living in Ukraine, was in the position of a middle backend .NET developer. Chiefly ASP.NET MVC + Web Api, TypeScript, sometimes Angular as a client.

Employment expectations

Ideally, I'd like to work remotely, however relocation to an employer could be an option too.

Summary

  1. I'd like to learn. Currently, my weak points are 1) advanced category theory as a theoretical base for not only Haskell itself, but entire programming; 2) advanced algorithms and datastructures; 3) manual concurency (especially lock-free/wait-free kinds). I would love to join a project done by devs, knowledgable in any of the abovementioned areas, and sharp my skills.
  2. I'd like to share knowledge I already got. I will join a team built of proactive, knowledge-eager guys, open for constructive communication and experience exchange.
  3. I'd like to apply knowledge I already got, which implies that I am given resources and space to be creative and participate in a project evolution freely.