Developer on a remote site - from scratch to a hero

Recently, an increasing number of people begin to dream about how they will stay at home, write cool projects in a distributed team, pet a cat with a cup of home coffee and loot good money for it. And in fact there is nothing wrong with it, thousands of developers work this way. However, this is often started to be discussed by guys who do not have sufficient experience, and in reality are unlikely to be able to get such a job without gaining combat experience in the office.







Jones on the remote are not needed



As the guys from Toaster like to say, in particular the curators of most sections, they don’t need any jones on a remote site, just like the probability of earning something from a june on freelance. And indeed it is. But also everyone knows that there will always be a person who will do what was considered almost impossible.



And so, my name is Sergey, I am an enterprise developer, I live in Ussuriysk (Primorsky Krai, 200k population, +7 hours with Moscow), I do not have a profile education, and I have not worked in the office as a developer for a day. And this story is about how I got to such a life.



I do not set as my goal to inspire the guys from the province so that they all rush together and start trying to get a job on a remote site. I want to show that huge amount of time that I spent to grow to a developer (without a doubt, if there was an “office” in my city, I would have done it much faster).



After university



Initially, I planned to work in the gambling sector, so after school I went to the “Socio-cultural service and tourism”, but the law of the Russian Federation on the prohibition of gambling activity came out on the 2nd year. Although I live in the Primorsky Territory, where the casino was supposed to be built by 2012, all the deadlines were broken, and in fact, by the time of my release there was nothing. More precisely, there were underground casinos, but these were the places where you would definitely not want to work.



As a result, I first got a job at a wholesale rice company, then left the place as an Internet connection installer, and then in support of 1C-Franchisee. It all took about a year and a half. As they say, in the hands of a red university diploma, and all the doors in front of you are open.



Technical support



All this time I was looking at something more suitable, and one day at My Circle I saw a vacancy in night technical support. I figured that taking into account my time zone, 7 am in Vladivostok, it’s 0-00 in Moscow, I can work the night shift practically during the day. I responded, talked, and got a job.



Naturally, just like that, the left person will not be taken in support. From school I was fond of site building and made various sites for my dotka team and the local game club. Plus, due to my education, I had good enough English, which allowed me to also support clients from Australia, New Zealand and the USA. I actually had the level of such a good webmaster with English, plus experience of support from 1C.



Move on



At one of the corporate congresses, I talked with the guys from the development department, and realized that the topics discussed were not some kind of “rocket science”, and that I could try as well. Plus, formal education was humanitarian, but still we had mathematics, statistics, economics, accounting and programming, so I was not very afraid of formulas and numbers.



It was 2014, everywhere they shouted that php sucks, that python is the future and so on (How naive and stupid I was!). So I started learning programming from him. How I did it:



1) I downloaded the books by Mark Lutz “Learning Python”, “Programming in Python”. Books were quite difficult, because reading them was extremely boring, however, they gave a very good base. If you have a choice, start quickly or read some fundamental book on programming, then I highly recommend starting with the second one to get the necessary base. It is important to understand, not only “How,” but also “Why” and “Why.”



After the books, I decided to play around a bit and started writing various parsers for game portals (Brablay / GoodGame) in order to collect statistics on certain topics. In particular, it was interesting to see how certain people leave comments, in particular their huge number.



2) Then I decided to do something more meaningful and put together an article portal in Python. I read a book on Django (To be honest, I didn’t understand it very much - the information was too fast and too “vacuum”). So I watched a couple of ITVDN Django introductory videos and turned to the official documentation.



For 4 months of development, I got used to layout, I understood how to work with the database, write migrations, set SSL and so on. As a result, the next year I spent on launching a number of my own projects and developing small sites for local children (drop-shippig site, bicycle shop, sports nutrition store, and so on).



3) After a year, I got bored of developing projects on Django. I began to look what else could be thought up on Python. I probably read all the Python books that were on the Ozon website. Starting from a book on Devops, ending with computer vision and machine learning. These topics didn’t really inspire me (I didn’t see the applied value on my scale that I can use right here and now), but these terms from some unknown magic and “skynet” turned into ordinary formulas and application libraries.



4) In the end, I decided to raise my level of computer literacy a bit and started reading books on C / C ++ / Java / Computer Networks / PostgreSQL / TDD and Corporate Patterns. To be honest enough, an interesting experience when you understand how another technology works, what it relies on, what challenges it entails, and how it solves "complex problems" from your stack.



Separately, we can mention the book on Spring, which showed how much more complex an enterprise application is than a "easy-going" project on Django.



Testing and Automated Testing



After three years of work in support, I, unfortunately, were denied access to the development department, but there was an opportunity to get a position in the testing department. By that time, I knew Python freely and could in Java, so it would be foolish to disagree.



The testing department gave a fairly good understanding of how complex systems are being developed, how teams interact within themselves and with each other. Configuration of various test environments, task prioritization and much more.



Naturally, this is test automation at selenium with jerking tests through jenkins when new builds are released.



I also liked the topic of test design. The company had a large pool of various testing courses, so you could learn a lot of cool chips with them that you had never thought of from the field of test design before. For example, designing the minimum number of test cases to cover the most number of system variants using pairwise (http://www.pairwise.org/) generators. These are cool things from the work of QA-Engineer, which many developers do not even think about.



Transition to development



After a year and a half in the testing department, I got an agreement that if I provide a working prototype on the php stack, I will get the opportunity to take an internship in the development department.

One month I spent on books on PHP. After Python and Java, mastering PHP turned out to be quite easy, although from time to time the questions “Why not here like that” appeared.



And I spent three months on the Symfony API service (web muzzle, personal account, business logic, mail notifications, pdf generator, parsing complex json structures and more). Suddenly, it turned out that Symfony was a kind of hybrid between Django and Spring, so there was no understanding problem at all.



As a result, I showed my project and received an internship in the development department, from where I was already transferred to a full-fledged developer.



Early months as a developer



I was provided with a mentor who actually reviewed my code and suggested why I should do this and not otherwise. Sometimes the calls lasted for one and a half to two hours, when the code was analyzed in detail on the ball and recommendations were given on how to improve it. In fact, it turned out that I made decisions in the right time with the right logic, but due to the fact that I did not have experience in corporate development, they turned out to be too confusing and complicated. Plus from time to time there were questions about the work of Redis / RabbitMQ / Elastic, etc. But still, the main work was carried out in the field to simplify the code and make it testable (when you write the code for yourself, you don’t even think that other people will not be able to read it). As a result, in 4 months my code pulled up in style to corporate standards.



In reality, when you write the code yourself, you don’t even think about how other people will understand it, and whether it is correct to express your thoughts in this way. Team work experience is difficult to replace with something.



Total experience in order to get the developer’s work on a remote site from scratch - 4 years, 9 months.



As a result of remote work from scratch:






All Articles