My story

The beginning

I began to develop websites in 1998 year. It’s all began with well-known PHPNuke (1998) CMS. While hacking it around and learning PHP, I began to understand that PHPNuke is based on very ugly spaghetti 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.

DotNet Developing

Thus, in 2003, C# and ASP.Net came into my life. I was very excited with C#, the language that was so different from PHP, and the smell of enterprise and OOP bloat was so intersting to dig into.

.Net Framework covered most of my needs, and MS Visual Studio was quite good product. To be honest, I think MS have only three products what world is really need to have: Windows, .Net, DirectX.

While learning C#, I wrote few desktop applications, and one simple site with MySQL connection. The more I develop on .Net, to more I started to notice that I 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 and not limit myself with proprietary stack.

At the same time I migrated to Linux from Windows, cause PHP developing on Linux is more natural.

PHP (again)

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, probably with the release of PHP5 became popular, 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 framework (v2.1 as I remember) came into my life…

This was it! Simple, elegant, great organized and designed, with excellent ORM… I loved it, and until I become familiar with RoR and Ruby, I used only Kohana in my work.

Testing

At those times the TDD & Agile concepts 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 habit - write tests before code.

Having good tests coverage, especially in complex applications, and if you do it right, really saves time as I noticed later.

Of course over time I adapted TDD to my needs: it become much more forgiven, I developed my own pragmatic ad-hock testing approach. Probably the most important type of tests for me become the system/integration tests, that let me develop features top-down: setup global pre-conditions, call system as blackbox, and check the final state change.

The main point here is testing become my daily tool to control the quality of my work.

In my case TDD approach transformed from religion to more natural form I use daily.

Ruby on Rails

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 I should check the origin of its concepts.

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.

But probably the most elegant part of Roby on Rails was the first part of its name: Ruby. I never saw anything more beautiful in my life. That was love at first sight!

// PHP 5.3.
// Release date: 2009-06-30
// WARN: Completely meaningless code for demo only
$numbers = range(1, 20, 2);
$keys_array = array_slice($numbers, 0, 10);

$values_array = array_map(function($number) {
    return "The number associated with key_" . $number . " is " . $number . ".";
}, $keys_array);

$key_prefixes = array_map(function($number) {
    return "key_" . $number;
}, $keys_array);

$final_hash = array_combine($key_prefixes, $values_array);
# Ruby 1.8
# Release date: 2003-07-31 (6 years before PHP 5.3)
# WARN: Completely meaningless code for demo only
# UPD: to_h was added in Ruby 2.0, but you get the point
(1..20).step(2).take(10).map
       .with_index { |num, idx| ["key_#{idx}", "#{idx} is #{num}"] }.to_h

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 testing, I’ve started to search a testing tool (and documenting my Ruby research at the same time), and found Rspec.

That was another shock, comparable with Ruby and RoR discovering. 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 did those days.

Upwork

Two crucial things happened in my life in 2011.

  1. In my life I spend total of maybe one year being working in office, I was made for remote work, and developed all required soft skills for that long before COVID hit the planet. It was kind of fun to me to see people discovered this way of work 18 years later :)

  2. I felt I was ready to sell my services on international market: internal was not enough to me, and I heard a lot how different and kind Western clients are. To say upfront: I didn’t get back to internal market after that decision.

With all that in mind, I felt I’m ready for my first RoR commercial project. And so was made quite simple abc-logistik.ru (first and last RoR client on internal market), and later pelesend.com (Upwork), and higginsmd420.com (Upwork). The internal complexity of applications grows with each new client.

Nirvana

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.

Ruby improved a lot since I started using it (v1.8), each major release make syntax even more elegant and powerful, the performance boost between v1.8 and v2.0 was amazing.

Ruby performance notes

  • There’s a old myth of Ruby being slow, that is not true for more than 13 years, nowadays Ruby performs similar to Python3, and the only thing that slows it down is compexity of Rails, for the cost of best in the world product’s Time to Market. BTW, Rails perform better with each release, they drop down legacy rubies, taking advantage of new ruby’s features and performance improvements.
  • This is always compromise: TTM or performance, so nothing new here. If your product is good enough, you’ll find resources for servers.

Next 10 years I spent becoming proficient in Ruby, Python (where it shines: its ecosystem), networking, DevOps, clouds, OpenTelemetry, clustering and tens of other related stuff. The industry was evolving much slower back then, so I was absorbing new knowledge with each new client at Upwork.

I started to look into interesting languages.

I had contract were I created SPA with Elm, that IMHO should be the de-facto standard for SPA instead of React.

The concepts of lisps (Clojure/Emacs lisp) I found pretty interesting, I love simplicity, but I failed to fall in love with Clojure’s base: JVM. BTW, I really hope the steel (Scheme implementation on Rust) may become the next lisp. Lisps are beautiful!

Golang I found very boring by design. I understand why designers chose to do that, but I can’t work without having fun. Anyway, it’s in my toolbox, though I have never used it in production.

In the same way, I couldn’t find a place to use Elixir in my work. I played a bit with Erlang back in 2006, so the OTP way of doing things was familiar. Though, as I understand, its killer features like GenServer and supervision trees are not so popular nowadays, they were revolutionary for the time Erlang was created.

C language stopped to look scary to me, that will play role a bit later.

By the 2021, I became a truly multipotentialite developer, with expertise that covered most of my clients’ needs.

My life was well balanced, I was happy.

Last part of 2021 I felt that something is coming, something really terrible. When you live in Russia, this is usual sense, but at those times it was different.

The war

On the evening of February 21, 2022 , it became clear that the hopes I had harbored for the last 10 years about things getting better in Russia were definitively shattered.

The fake president of Russia had not yet finished his delusional speech to the nation , and I had already written to my mother that I was leaving forever, and that I was done with this country. It was physically difficult for me even before this, but now an atmosphere simply incompatible with life had arrived. I don’t want people to be killed in my name.

The decision to leave itself came suspiciously easily, because I had been thinking about it for 10 years, since non-legitimate elections , and I regret not doing it sooner. However, an entire year of my life went into selling everything I had, moving, and adapting in another country.

New beginning

These massive changes led me to reconsider many things. Most importantly, I decided to close the knowledge gaps: I started learning technologies 1) in depth, 2) breadth, and 3) not on demand, but out of interest.

I set myself the task of learning at least 1-2 languages per year. I wanted to update and deepen my knowledge of cryptography, blockchain, and new network protocols, to try out embedded device development, and other technologies.

In the period 2023–2025, I learned as much new material as I had in the previous 10 years (this, by the way, is visible in the commits on my profile , even assuming I like remote rebase, if used correctly).

The constantly increasing level of knowledge helped me survive the adaptation and gave me a sense of control over life.

I finally got deeply into fantastic Rust language, and I enjoyed it no less than I did when Ruby entered my life.

I discovered that CSS has advanced so far that you can finally enjoy frontend development again (no need in JavaScript aside of WebAPIs).

The hypermedia slow adapting trend makes FE development even more pleasant, because in reality HM is backend development :)

AI took some time to master and learn where it worth to be used and where not.

Dozens of technologies, tons of technical debt closed, I’m happy again!


P.S. Be creative, stay positive, and never stop learning. Don’t let any motherfucker bring you down.