My story as a software engineer

Story

Pre 2011

My parents bought me my first computer in 5th grade (2008). I was 11.

I had been using it for gaming & reading primarily until 2011.

Because one day my Windows installation showed me The blue screen of death.

It took me more than a week to reinstall Windows . Why? Because I couldn't buy an official Windows software license from Microsoft. Sorry, Microsoft.

Trying to understand how did I broke my workstation, I decided that I need to use antivirus software. Another week was spent to find a way to use Anti-virus software for free.

2011. Text markup

Vk.com (formerly vkontakte.ru) is the first social network I have ever used. Before that, I had used messengers like ICQ, Skype.

Back in 2011, I started creating and trying to grow vk.com groups. Someday I saw a group with a "beautiful" graphical menu inside a group description. A month later I learned how to make them. I used Photoshop & Vk markup language.

Two months later I ended up selling my "ability" to make these menus:

These menus are so creepy...

2012. Games

Since 2012 I started playing NFS World a lot. I didn't like to spend a lot of time leveling my account up. That's why I ended up using a lot of cheats & bots to 'pimp up' my cars. I had been blocked a couple of times, but it was easy to restore my account using EA support. Sorry, EA.

2013. First lines

Since Summer 2013 I was playing Tanki Online more than NFS. There was the same story with cheats, but these guys were a little bit tougher than EA. They were blocking my accounts forever. After the (n)th lifetime ban I sad "Ok, no problem" and started trading game accounts. Sorry, APL.

In June 2013 I started studying HTML & CSS. It's crazy but the site I was learning from is still alive: Ruseller. I was making poor websites using html, css & photoshop sprites.

Reading a lot about web development I got interested in Linux and started using Ubuntu in a dual-boot mode.

2013 Q4. Asking

At the end of 2013, I was asking developers out there a lot of questions. A lot means >20/person. 'Where should I start from?', 'Which language should I learn first?' etc. I don't know how these people were standing me out, but thank them.

After a lot of discussions, I started learning Python & reading Mark Lutz's books.

At the end of 2013, I found out about Sorax. His materials taught me about javascript, CoffeeScript, CSS preprocessors. Thank you.

2014. Dead PC

In 2014 I started playing an awful game on vk.com/games platform. There was no way to use cheats because the game was hosted by vk.com. I joined a clan and was leveling my account up playing with more experienced gamers (like 150+ lvl teammates, while I was on lvl 30). I learned a lot about human beings playing this game because being a part of a clan means you should communicate with your teammates. A lot of them were above 25 y.o. and I was just observing their lives.

Summer 2014 I decided to learn C/C++ :D. And guess what? June 2014 my PC was burned out due to voltage drop.

Living without a PC was hard. Especially after the 1st of September 2014. I was using my cousin's laptop, thank god our houses were in the same neighborhood.

Despite the problem, I started studying c/c++ syntax using books. It was hard, but I kept reading some Russian book about c/c++ syntax. Somehow I knew they use it in Russian universities to teach CS students.

Later I decided to make money and buy parts I needed to repair my PC. I was still trading 'tankionline.ru' accounts, but I was taking only a small commission. I needed ~ 2300 UAH = 200$.

I found a pretty bad way of making money using online games I played. I won't describe it here, shame on me.

By 25.08.2014 I had ~1700 UAH.

On 09.09.2014 I ordered new parts for my machine:

      Во вторник, 09.09.2014, НБУ установил следующие валютные курсы:
      Доллар США (USD) – 12.9261 грн.
    

The whole story with a broken PC taught me a lot about Motherboards, Processors, RAM and other basic parts of this magic box.

2014. Rehabilitation

Later, on 12th Oct 2014 @sorax published his Spotlight #01 about Node.js. Take a look at this spotlight, it's the most effective and beautiful lecture about node.js. It's pretty hard to stay uninspired after such kind of material, so I decided to write a web service using node.js

That's how I wrote Tavle. This project was written in a very bad way. I didn't care about support, code structure, architecture, callback hells, etc. I didn't know I should. I pitched my project to @microsoft Bizspark in 2015 and got the prize :)

Notice how much practice in coding I had until this moment of my life: no practice except shitty websites a was building on localhost. After publishing tavle.ru I understood that no matter how much theoretical knowledge you have it's useless without a huge amount of practice.

2015. Math

May 2015 Graduated school. Exams. Exams. Exams.

Oct 2015 was notified that I passed all exams and have a chance to study at the Faculty of Mathematics and Informatics, Sofia University. My parents were super supportive, they bought me a laptop and gave me all the things I needed to be able to study for my degree.

Migration. Lectures. 2 Month later: Math. The fact that I should learn so much math was terrifying. Most students were from math-oriented gymnasiums.

Unfortunately, I wasn't. That's why I decided to sit down at home (dormitory) and study the whole program by myself. Fortunately, it worked out! I passed all exams on the first try.

2016 - 2020

During this period I learned a lot about tech, programming, software engineering. I met a lot of amazing people and they taught me a lot. I joined the @brainhub team.

Summer 2016 I had a huge interest in C++ and graphic libraries like SFML, SDL, imgui... Later I attended a course about advanced C++, where I was learning things like type_traits, move semantics, virtual functions, etc. Honesty, I miss those days. Writing C++ code is more exciting than writing JS, Python, or any other language.

Since I started working with the Brainhub team, I have been writing web applications except a small number of projects with Qt, Unity, and Kotlin. We wrote an OpenGL visualization for gestures tracking, using Bluetooth and our palm-bracelet (GR). We wrote a health measurements sharing platform, using Kotlin, React, Django and Node.js for the realtime part. It's kinda tricky to re-render the React view on high frequencies, but there are some exciting techniques for that.

A lot of other projects were written using React or Angular (TS), Django or Node.js. I prefer using Angular & Django, but of course, there are scenarios when you should use other tools. I've spent a lot of time on Angular SSR, there are a lot of small pitfalls and if you're interested in helping the Angular community with SSR problems checkout this github issue .
Django channels and the whole asgi topic is pretty interesting and huge. I ended up using gunicorn for WebSocket communication over daphne, but I still have a lot of questions. Maybe nowadays it's easier to use Node.js for that kind of thing, but I'm still interested in combining DRF & Websockets, there is a lot of opportunity for 'the WebSocket world'.

You can find information about other projects here

As soon as I joined Brainhub, my teammate advised me to use openSUSE. I was impressed by zypper and overall openSUSE ecosystem. But lastly, all of us migrated to archlinux. I started using i3 - a tiling window manager. Today my daily driver is arch + i3 / urxvt + tmux + neovim / vscode / chrome.

Even though I have never attended lectures, my university gave me the time and my study program. I used a lot of Berkeley, MIT, Harvard public resources for studying. Blogs, private resources, Facebook groups, youtube channels, driven by amazing human beings are the most important sources of knowledge in the Internet era.

I learned data structures, algorithms, advanced c++ techniques, object-oriented, aspect-oriented, functional programming, haskell, scheme, networks, statistics, ai, basic algebra, geometry, mathematical analysis, discrete structures, os, elixir, databases, containers, project management, software architecture, requirements analysis, QA and more using only google and my study program.

As for me, self-education & practice is the best way to acquire any knowledge I need.

I earned my software engineering degree in Jan 2020. Check out my university results: uni_results.pdf

Conclusion

Self-educate, practice, and work.

I was made with in Ukraine