I love writing code, and I love doing it not only for myself.
It doesn't matter how big a task is.
Despite its size or complexity, I do it with full dedication using the best techniques I mastered over my career.
I started my software engineering journey from C and C++.
I felt in love with C++ and was swallowing all related books I was able to get those days.
My first C program was written in a piece of paper and when I got to a computer it didn't compile because it wasn't written in ANSI standard.
But I moved forward...
These days I still love C++ and know how to use it properly.
But I'm also good at C#, Java, Groovy, Kotlin, Python, Go.
I know a bit of Rust and I'm interested in its deterministic resource management approach.
I can write good stuff using JavaScript, Lua, Perl, Shell, or PowerShell scripting languages.
Also, I don't get attached to a specific paradigm and can use Object Oriented or Functional Programming or even mixed which I think strengthens the structure of a system maximizing its flexibility, maintainability, testability, and robustness.
Apart from experience in programming languages, I have years of experience with different application architectures, starting from small tools with a command-line interface or desktop GUI, including fancy mobile or Web apps, up to a complex multi-component cloud-based distributed applications.
The applications were developed for a wide range of industries such as civil engineering, application development its quality and life cycle management, communication, education, finance, game development.
The systems I've developed run on PCs controlled by Windows, Linux, macOS, mobile devices running Android or iOS, game consoles, and mainframes.
During my career, I've experienced a range of software development processes, some of them are more classic and a bit chaotic, some of them were almost agile.
I even tried real SCRUM on one of my projects where I was a team lead.
I like when I know exactly what needs to be done but it doesn't mean that I need direct instructions.
I need to see a goal or at least a direction towards it.
When a customer can't provide it to me I do all my best to help the customer to define it.
Regardless of the processes, all my projects were done successfully, at least that what customers said.
I've been doing Test-Driven Development I think more than 10 years already.
I do it in all the languages I've mentioned.
After years of struggling and experience in the area, I'm sure that I know how to do it properly so it doesn't impede development but speeds it up instead.
I'm a clean coder or at least trying to be it.
I believe that "the only way to go fast is to go well".
Every time leaving less mess than found.
Software development is not only writing code.
It is also an integration with other components, tools, libraries or frameworks, and even other applications.
I know how to deal with source version control systems like subversion, git, mercurial.
I've participated in the improvement and development of build systems for projects I've worked on.
Over recent years I've gained experience in Continuous Integration, Continuous Deployment, and Delivery.
I even developed the CI/CD system for microservices applications almost from scratch.
Talking about integration between software components we'll face a dependency management problem.
This is one of the hard problems in software but I have knowledge and experience how to overcome it and build maintainable, and testable systems based on interchangeable components.
And the very important aspect of software development in my standpoint is communication with colleagues, sharing ideas, and learning from each other.
I love sharing my ideas with a team and I feel need in this.
We all stand on each other’s shoulders.
And the relevance of other's experience can't be understated.
When I get some new idea I first of all search for a person who disagrees with it.
Because I know that we see this World differently and everyone's vision is an indefeasible part of a solution.
Every Friday I conduct two hours Cyber Dojo session where together with my teammates we solve common software problems using different programming languages and the Test-Driven Development approach.
And I invite not only programmers to attend the sessions.
This is pretty much it about me as a software engineer. Other testimonials you can find in my LinkedIn profile.
Programming Languages
Bash
C
C#
C++
Clojure
Fortran
Go
Groovy
Java
JavaScript
Kotlin
Lua
Object Pascal
Objective-C
Pascal
Perl
PowerShell
Python
Rust
Visual Basic
Platforms
Android
iOS
Linux
MacOS
OS/400
Windows
Tools
AutoCAD
AutoDesk AsdkModeler
bash
Borland C++ Builder
Borland Delphi
CMake
cygwin
DB2
Docker compose
Docker machine
Docker
eclipse
git
GitHub
GitLab
Gradle
Helm
IBM iSeries Access for Windows
IntelliJ IDEA
JamPlus
Jenkins
Jira
kubectl
Kubernetes
make
mercurial
Microsoft SQL Server
MySQL
OS/400 iSeries QShell
PowerShell
Rational Rose
sh
SlickEdit
Spacial ACIS Modeler
SQLite
Sublime Text
TestTrack
Trello
Umlet
Visual C++
Visual Studio Code
Visual Studio
XCode
Libraries & Frameworks
.NET ASP Core
.NET ASP MVC
.NET Core
.NET
Android SDK
ATL
AutoDesk ObjectARX
Boost
Cocoa Touch
Cocoa
COM
CppUnit
Enity Framework
Google Mock
Google Test
Iglu
jQuery
JUnit
MFC
Mockito
Mono
Moq
NUnit
OpenGL
OpenGLES
Qt
SoftFluent Entities
STL Soft
STL
Unity
VCL
Win32 API
WinForms
WPF
WTL
WxWidgets
ZeroMQ
Techniques
Actor Model
Clean Code
Code Re-factoring
Doman Driven Design
Fuctional Programming
GRASP
Object Oriented Programming
SOLID
Test Driven Development
Unit Testing