Hello! My name is Ivan, and I'am backend developer since 1998. This site's primary purpose is to demonstrate my skills in different technologies, especially in my current favorites: Ruby language, RoR and BDD.
My Ruby Portfolio
Please, keep in mind, this is a list of major Ruby projects I was involved in. There's a lot of scripts/parsers and gems I've created for these years
The way I work
- I'm a huge fan of TDD/BDD and particulary Rspec
- Use SOLID, KISS and DRY (amoung others) principles and don't overengineer using them
- Always trying to be smart and accurate while refactoring, start it only after I have tests covered refactoring zone (if this is my code, it's always true) and find a compromise between complexity and readability
- Break large tasks onto small ones, it it's still complex, repeat
- I believe that modern developer must learn something new every day, especially in our information century, to be on the edge of new ideas and technologies
- Love to read the source code if it's readable, of course
- Write clean code and find simple and elegant solutions using language-specific technics
- Learn fast (thanks to 17 years of experience)
- RTFC, RTFM and google in every unexpected situation
- Keep my workspace and tools simple and responsive, so they don't bother me, allowing me to fully concentrate on current task
Here I skipped things which level of knowlege is hard to measure, such as TDD or SOLID.
This group of languages I know very vell (some of them I don't use anymore, though)
- Ruby - today is my primary language I use for several years, and feel myself very comportable with it. For a few last years there are rumors what Ruby is dying, but trust me - it's allright with language, there's a problem on how pepople use it. I'm about monkey-patching, God classes and other bad practicies. Ruby gives a lot of freedom and because of that requires a lot of developer's responsibility. That's why principles such as SOLID works so good for Ruby - they prevent developers from wrong language using (take a look at my favorite example - Lotus framework).
- *sh - every developer must feel comfortable with at least one of them, and knowing their different tricks and edge-cases. *sh itself not very hard to learn. Much more important to learn common tools provided by *nix and tasks they allow to complete.
- PHP - I don't use PHP anymore, but this was my primary language for more that 10 years. I stopped using it when PHP began to demonstrate features of solid language like namepsaces, but that was too late for me.
- C# - I don't use it anymore, but that was a great experience, and I believe it will help me with Java
- Lua - using for creating custom ConTeXt writers for Pandoc (I love parsers and books! :). Easy to learn, have unusual RegExp engine, and not much popular...
The languages below I'm currenlty learning one by one. As soon as my knowlege and practical using of them will be enought, I will move them to the upper list.
- Elixir/Phoenix - this is what I'm curently actively learning, and I love it!
- Elm - crazy thing, but looks so sexy to me. Quick touch give some nice results, but I just don't need frontend lang.
- Clojure/ClojureScript - this is the next language I plan to learn. Maybe before/after Elm, it depends on how things will go. There are tree reasons: get functional, ClojureScript as fronted lang and Elisp.
- Go - two factors mixed into one here. (UPD Jul 2016: deep learning of Go delayed in favor of Elixir, but I'll get back to you, Go) First, because of Ruby is learned very well, I decided to move further and learn something really new. And the second factor: 'cause last years there is a trend on separating apps into microservices (which is very nice idea), I don't want to be outide of that trend. After some experiments and research I decided what Go will match the best for such tasks: it's simple, fast, young but with solid ecosystem already.
- Java - though I have some experience with Java many years ago (before C# came into scene), I realized what since then Java world changed a lot. Practically speaking I'm learning Java from the start, but thanks to C# experiance this process is quite fast. One of the main goals I have - is to dig into the world of JVM again, to fell comfortable while learning the rest two languages below
- Scala - yep, I believe, what if there will be task to create something serious for JVM, I will use this language. It's Scala I want to use for my first Android app and backend for it (I'm looking toward Play Framework)
It's easier to list only major ones: Grape, Rails, Devise, Cancancan, OmniAuth, Capistrano, Sidekiq, RSpec, Capybara, Lotus, tons of them...
- PostgreSQL - this is my favorite RDBMS since I begin to use Rails. My experience includes: all the common stuff, administration/migration, triggers, rules, functions, materialized views, PL/pgPSQL, extensions like cube, uuid-ossp, hstore and so on. I'm not a Postgre guru, but it's always interesting for me to learn something new about it.
- MySQL - I do not use that one for years, but used since 1998. In other words I'm not interested in MySQL after I met PostgreSQL.
- Redis - I began to use it in my own project when the trend of NoSQL started back to year 2010 (approx).
- MongoDB - I began to use it at the same time as Redis within the same project
- Elasticsearch - never used, but actually this is my next DB to learn, I believe that will be very interesting
- Twilio - this API I learned very well since I was responsible to refactor complex communication part of recent project.
- Apple Passbook API (Web, Pushes and Pass format itself). I used all of these while creating this app.
- Slack - easy integration, nothing interesting: fancy bot messages with images and so on
- Rollbar - error tracking service
- NewRelic - famous easy and configurable app monitoring and analytics (used for Rails and Sidekiq app)
- Papertrail - easy to setup, nothing too huge here
- Dead Man’s Snitch - small service for trackin' cron jobs running.
- Amazon EC2
- Amazon S3
- Amazon RDS
- Amazon SES (including DNS configuration)
- Amazon Elastic Beanstalk
- Amazon EC2 Containers (learning)
I have a little experience with Heroku, but none of my clients actually used it. Anyway, that should not be a trouble.
- OS X - my primary every-day OS
- Debian family - my previous main OS (ubuntu particulary). Now I'm using it for deployment/containers
- FreeBSD - my favorite server OS I use for my own dedicated server
- ArchLinux/Gentoo - 'cause it's fun and healthy for brain :)
- Windows - games only, nothing interesting there
There's a lot of frontend tools I use, but I use them for my personal projects, and not looking for frontend related job. Quick fixes, nothing more. So this section I'll keep empty
I began to develop websites in 1998 year. It's all began with well-known PHPNuke CMS. While hacking it around and learning PHP, I began to understand that PHPNuke is based on very ugly spagetti code, and developers used all the bad programming habbits writing it. Anyway, thanks to PHPNuke, I learned PHP well, but began to look for something more elegant.
Thus, in 2003, C# and ASP.Net came into my life. I was very excited with C# and till now think it's one of the beautiful languages with strong toolkit, provided by .Net Framework and supported by amazing MS Visual Studio. To be honest, I think MS have only three products what world is really need to have: Windows 7, .Net, DirectX.
While learning C#, I wrote few desktop applications, and one simple site with MySQL connection. The more I develop on .Net, the more I tired to write all this huge amount of code need to do simple tasks. Even MSVS & Resharper didn't help much.
This time my decision was to finalize desktop and Windows development, and get back to more interesting for me web backend development using PHP. At the same time I migrated to Linux from Windows, cause PHP developing on Linux is more natural.
After returning to web development, as any developer with few years of experience, I decided to develop my own framework, using all I knew, to make something handy for me in everyday work, and to consolidate all my knowledge. Inspired by great .Net libraries and many books I read till then, I began to work, and the final result was almost completely satisfy me - it had a simple ORM, routing system, and built a lot like MVC pattern. I've made two sites using it, but began to understand, that the whole architecture could be better: I had to wrote too many things to make it work, and should be a way to avoid it. And in that moment I stepped to the next level: I began to read others code.
In those days a boom of PHP frameworks happened: Zend, Codeiniter, Cakephp, an AST.net-style Qcodo & Prado. Looking at how they solves my framework's problems, a decided what my experiment with own framework was finished. It helped my a lot with understanding of how to design systems's architecture, how to make system more decoupled etc. Now I had to choose my favorite framework for every-day using, and learn it completely.
After some experiments (and one site done on) with Qcodo, I've noticed dejavu: this is too familiar with ASP.net - again to much code, and actually this is not a PHP style of coding. And then, in 2008, Kohana (2.1 as I remember) came into my life...
This was it! Simple, elegant, great organized and designed, with excellent ORM... I loved it, and untill I become familliar with RoR and Ruby, I used only Kohana in my work.
TDD: Brain revolution
At those time the TDD & Agile concept became more and more popular, and this was my next step to another level. It was not so easy to completely change the way I used to work, and it took about a year to make it a habbit - write tests before code. But TDD, especially in complex applications, and if you do it right, really saves time as I noticed later.
The great RoR migration
Using Kohana, I often read that it's very basic PHP port of something called Ruby on Rails, written on mysterious Ruby language. Thus, finally, I decided to take a look at RoR, as if Kohana is so great, maybe RoR is something fantastic...
And so in 2011 I find a RoR video course at Lynda.com, and was excited how great RoR is. My dream became true: I can write so little code (thanks to Ruby) to do so amazing things.
I really regret I didn't met RoR and Ruby earlier, and that regret led to another experience level: since then, I'm trying to be on the edge of backed development technologies, to not to miss something really interesting and making my life simpler.
Spec the Ruby
After RoR inspiration and digging in its code, I've realised what I should learn Ruby language itself first, to read and understand what actually happening there. Since by that time I was a huge fan of TDD, I've started to search a tool for testing (and documenting my Ruby research at the same time), and find Rspec. That was another shock, comparable with RoR itself. I've fell in love with the expressiveness of Rspec (again, thanks to Ruby), and till today I can't imagine my work without it.
After few months of learning Ruby and RoR through Rspec & Capybara, I decided to forget about PHP, and completely switch to RoR, like many others PHP developers.
In the beginning of 2012 I felt I'm ready for my first RoR commercial project. And so was made quite simple abc-logistik.ru, and later pelesend.com, and higginsmd420.com. The internal complexity of applications grows in the same order.
It's been a long time since I've switched to Ruby and it's ecosystem, but still, every day I'm using it, I'm learning beautiful things, interesting ways of solving problems, finding myself, finally, at home.
Today I'm learning Elixir/Phoenix and building own little service using them. It's always better to learn something by example. I'm creating only backend part now, and if things will go well, I will need web-client for it. This is the moment there I should decide which lang, CJ or Elm will be the best for me and project to use for front-end.