Hi Habr! In this article I want to talk about my way in the field of IT. At the moment, he took me for 6 years, and is not yet completed. I started as a QA engineer while still a student, and now I work remotely through Upwork for a fairly large American company. It makes no sense to specify the specific companies in which I worked, so all the names will be in the style of "this one here" and "other."
So, 6 years. Not so much, and, to be honest, I am sure that I don’t know practically nothing useful and am not an outstanding developer. But this period was enough to get some experience, so I will allow myself to draw some conclusions and even give little advice to those who are still at the very beginning of their journey.
Stage 1: QA Engineer
I started working as a QA engineer (I am writing this clever word, and not a “tester”, because it is this record that I work for) in the summer of 2010, then I switched to the 4th year of university. The university is highly respected, however, it does not matter.
I was determined to become a developer when I was 12. At that time I didn’t have a computer, but there was a great prefix called LITTLE, which allows me to write simple programs. But after 8 years I became a tester ... that is, excuse me, QA engineer. The fact is that at first programming was pretty hard for me, and I couldn’t grasp the idea of ​​OOP properly, and with functional programming I was also rather mediocre.
')
So, I settled on a profile that was pretty close to development, and that was comforting me. In addition, I did very little manual testing, because my lead almost immediately decided to drop me to auto testing. Thank him so much for that! I wrote auto tests on Selenium WebDriver using Java. In the process of writing scripts, I met things like JUnit and Eclipse. And at the same time I read a Java book - pretty bad, but I still learned some knowledge from it.
A year has passed, I got used to work and got comfortable. And he began to think about the fact that it is time to translate into reality their dreams of programming. I had a conversation with the architect and lead programmer of the product I was testing, and this conversation suppressed me. It turned out that I know absolutely nothing, and my level is not enough to be taken even by a junior.
Conclusion for myself: I need to spend more time learning Java. And you need to learn deeper, and even better to try. Superficial knowledge is not enough.
Another half a year I was engaged in self-development. I went to the conversation again, and in parallel I went for an interview to another company. And - my labors were rewarded! The guys from the project said that I had grown a lot, and that I could probably transfer to the developers in a month. And a week later, they called me from another company and congratulated me — after all, they are ready to take me to the Junior iOS Developer position! Until now, it's a mystery to me why iOS is exactly, because I interviewed Java and answered relevant questions. But you know what I did? I refused, because I had to be transferred to the developers in 3 weeks!
Of course, I was not transferred anywhere. Around this time, I went to a Java developer course at a third company, and after 3 months I quit. The courses were supposed to end 2 months after my dismissal, but I believed that I, as one of the best students, would be taken on staff. And for good reason.
Conclusion: you will definitely achieve what you really want. You can not be content with mediocrity. (Looking ahead - I also do not recommend staying in the comfort zone for too long. Only by leaving the comfort zone can new heights be reached - this is closer to the end)
Stage 2: Java Developer
Yes, they took me as a developer in the summer of 2012. At first it was almost euphoric - because now I will develop, and I will not do any boring testing at all! I enjoyed this time.
Immediately upon joining the company, I got to the bench, because the company could not immediately identify me for the project. At the bench, I sat for about two weeks - at that time I was engaged in a simple educational project, where I had a glimpse of Struts2 and Mercurial. Then I wrote my Resource Manager with the good news that they are ready to consider me for a real, combat project! The lead developer was already working there, and he needed a smart comrade, but preferably a higher level than junior. And there was a terrible detail here - I needed to have a skype interview with a man from Moscow! Probably, like most inexperienced beginners, I panicked at the thought of an interview (this is now we see it as a pleasant pastime, where you can identify gaps in knowledge, right?). I'll be brief - I did a good interview, and even wrote Ping Pong on two streams as a test task. In parallel with me they interviewed another developer with Bench, but in the end they gave me preference. I will not hide - I was very pleased, especially against the background of the news that they wanted to take at least some experienced person.
At first, everything was new for me - ant, SVN, JDBC, and of course Java Core. There were so many things in total that I decided not to even study further, for so much I studied every single working day. As a result, I more or less learned to use some tools, but did not have a clear understanding of how they work. Because of this, quite often I invented the bicycle and complicated things.
Advice: always thoroughly study what you are dealing with. Knowing the details will help you write more efficient and concise code. Many will say that in order to drive a car, it is not necessary to know the engine device. Let me just say that this is a rather delusional analogy, and that for me the developer is not a driver, but a mechanic. But he still needs to know a little bit, right? The task of a bad developer is to make it work. The task of a good developer is to work effectively. (The task of a very good developer is that it is also a pleasure to read the code).
About a year I worked on this project. I remember that the office was far from home, and I decided to go to work by 7:30 am for the following reasons:
- Do not get into traffic jams
- Have time to take a place in the parking lot
- My lead would arrive at 11 o'clock. Consequently, before 11 I could read books in Java — that was my plan.
At that time, I read Bruce Ekkel’s book The Java Philosophy and the first volume of a book on Java by Kay Horstman and Gary Cornell. Honestly, reading was difficult. I think this is due to the fact that I did not fully understand what would happen after I finished reading them. I didn’t really imagine my future; there were only vague goals like “to become a good developer”.
Tip: always set a goal when reading a book. Just ask yourself: “Why am I reading this book? What do I want to know after reading it? How will this help me? ”. Simple reading quickly becomes a routine that one wants to do less with time.
For various reasons, the project was curtailed, and somewhere in the summer of 2013 I got on another project. Perhaps the worst project ever. I have nothing against SAP, but this project was on SAP. I do not remember very much - probably, my brain deliberately fenced this area of ​​memory in order to protect me, so I will only describe briefly what was there:
- We got there together with a friend, with whom we went to the courses. This is a plus. Only.
- We did the edits of the JSP pages and the Struts classes. And on the side of ABAP there was a quitter, edits from which we could wait for hours. The simplest edits.
- JSP pages contained almost all the logic of the application.
- Disgusting similarity of the project manager, who once a week appeared in Skype and asked: “Well, is everything alright?”. Consequently, we solved all the problems with the customer.
- It was impossible to immediately see the results of their edits. And the deployment could also last for hours, besides the deployments needed to be coordinated.
The project lasted only 2 months, but we managed to draw a lot of emotions.
And so, somewhere in 2013, I got on a real Enterprise. There I met Maven and a number of IBM products: WebSphere, RAD, DB2. What I particularly liked was the fact that I became more closely acquainted with JavaScript and jQuery (at that time they seemed to use it). And there was a very severe self-written analogue of Hibernate. This was due to the fact that Hibernate is a “brake”, and we needed an ORM jet engine that would instantly put records into the database and take them from there. I would not say that I agree with this, but at that time it could have made sense - the system had millions of requests every day, so the JDBC was left (if you are not from the world of Java, then JDBC is a Java DataBase Connectivity, just an interaction mechanism with the base without any conversion of database records to objects).
Somewhere after half a year I began to realize that I was stagnant, so I asked to transfer me to another project. I motivated this request: I am tired of the project, it is quite old, but I want something new. The management reacted normally, and a month later I got on an even more ancient project. Then I decided it was time to take more drastic measures. In general, the goal was achieved - I became a developer, but we need to set a new goal - to become a good developer and work with a modern stack, move on. And then I decided that I needed to do my own projects, because you cannot go too far on the same theory. At this time I moved to a new stage.
Stage 3: Change of job and your projects
I realized that the current place of work does not give me development. I worked on a rather old and awkward project, and I started to get tired of it. I was not ready to settle in one place, having learned practically nothing.
Skipping the little things - I got into a terrible company, but for a higher salary and other technologies. I want to write the main disadvantages:
- Interview. I was interviewed not in a meeting, but in a regular office, where people sat and worked. I think it bothered not only me.
- Recycling. I came just in the time of the job, and after 3 working weeks I had to go out for a month on weekends. For this, I received compensation for one and a half working days at a one-to-one rate with the wording: “Well, you didn’t do anything useful, you don’t know the project yet”
- Processes. More precisely, their absence. We had Jira, but nobody used it. Activities were noted in Google, and the tasks were set either on Skype or by phone manager. Of course, everything was always forgotten, and something was not done or was done wrong.
- Disgusting office with a small kitchen made of the room, and a common toilet on the floor.
- The requirement to appear in the office at 10 am. Terribly uncomfortable, because in the morning I like to play sports. Of course, you can get up early, but I already do not like it.
- All my suggestions for improving the process had no effect.
- There was not much to learn from anyone - there were no really strong developers.
The longer I worked, the more clearly I understood that this stage would be short. On this project, I met GWT, Spring and worked more closely with Hibernate. Actually, I really didn’t like GWT, I considered it completely incapable against the background of modern tools. Well, I didn’t study GWT either. I will state at once that this is only my impression of a collision with him.
But at this time I had a small project that I shared with friends. The project was quite simple, but it was still interesting to design and implement it. I got closer acquainted with JavaScript, Spring, Hibernate and JUnit.
During this period, I began to read books not so much technical as writing code in general. In many ways, I was inspired by Uncle Bob’s Pure Code book.
The statement of fact: at a certain stage comes the realization that you need to know not only the technologies used, but also the rules for writing good code as a whole - the structure, architecture, refactoring, and of course, the tests.
After 9 months after the change of work, I clearly understood that the current place strongly pulls me down, so I decided to return to the previous place of work. Naturally, for a slightly larger salary and an interesting project.
Tip: if there is quite a strong discomfort in the work, then do not be afraid to put an end to this. Even at the cost of changing jobs. In the end, there is nothing to worry about. The agreement is initially supposed to be mutually beneficial, and if it is unprofitable for you, correct the situation.
PS: without fanaticism. I do not advocate the idea of ​​jumping from place to place in an attempt to raise my position and salary. First of all, you need to constantly learn something and apply knowledge for the benefit of the company. But if you feel that you are stagnating, that your knowledge is not in demand or that you are being driven, then reread the advice above.
Stage 4: Homecoming
So, I returned to the company that gave me a start as a developer. I came across a rather large project with Big Data, and we used a completely modern stack: Spring, Hadoop (and its ecosystem: HBase, Oozie etc), Maven, TestNG. Probably, many will find Hadoop no longer so modern, but this does not detract from the modernity of the trend itself. And it was then that I met Slack and greatly appreciated this tool.
Our project consisted of a manager and two Java developers in our office, as well as a manager and a Java developer in the USA. When I returned, I immediately felt the difference between good processes and their absence:
- We used Jira and worked on Agile.
- We had really short stand-ups in the mornings and there were no tight boring calls.
- There was something to learn from the second developer in our office.
- Adequate code review.
- 3 times a week we had short phrases, where the manager provided us with a brief squeeze of what was happening in the company and on neighboring projects, as well as plans for the project.
Working on this project, I already had some experience and showed some initiative. And this time, all my proposals were listened, corrected and accepted if necessary. For the first time I took part in the design of the module, and then realized the articpectura I created. Of course, my colleagues helped me identify the pitfalls, but, nevertheless, I was quite motivated and appreciated the fact that I was perceived as a good developer and communicate on an equal footing. I worked for almost half a year and did not know the troubles, but then something started to change anyway.
I suddenly felt a keen desire to work closer to the client, maybe even take up the front-end. I started to bother working with Big Data terribly. I'm sick of walking through several remote desktops to the server. I’m tired of running my Job and then digging through the logs for a long time and analyzing them. In no case will I call this a boring and tedious job, but something has changed. What at first seemed very new and interesting, after a while began to bother and become a chore. I went to the authorities and honestly said everything: I wanted to try the front-end. At the same time, he sent a “crazy” resume to an accidentally seen, but very interesting job.
The management again listened to me and promised to think. And at that time I went for an interview and got a test task. And to be honest, here I began to rush. On the one hand, the vacancy was very tempting, but on the other hand, I did not want to leave a good company that trusted me six months after returning. The test task was allocated 2 weeks, but I pulled a month. In the end, they called me for a second interview and made an offer.
In short, I accepted the offer, after which I had an unpleasant conversation with RM. Unpleasant because, as I expected, I heard something like “how to trust you after such actions”. But I decided not to take it to heart, because during these six months I brought the company a certain profit, and it helped the project. Looking ahead - I do not regret it.
Tip: once again - you owe nothing to anyone. If possible - do not miss it. This is your development. But treat the employer with understanding - do everything possible so that your care does not affect the project. Work hard during these last 2 weeks and close all your tasks, create documentation on your best practices, if you haven’t already done so. Advise someone in your place. But do not miss the opportunity.
Stage 5: RoR Developer
Yes. I started writing on Ruby on Rails. I will not write in detail about the process of learning a new language, only the most important thing:
- I was almost immediately thrown on a combat project.
- The project colleague, also a former Java developer, actively helped and talked about the features of the language.
- The head of the department was also very active in my development and training.
- I have read the documentation and several books on the subject.
As you can see, in this company everything was quite good. It took me about half a year to stop experiencing any difficulties in the process of writing code. It took another half a year to better learn the subtleties of the language and start writing on Rails Way.
So, late autumn 2015. I worked in a new company for half a year, I had enough salary for everything, although the project was not the most interesting, but for me there was a lot of new things, therefore I did not miss. On the project, I became acquainted with many interesting tools: some services from Amazon, Heroku, rspec, and many gems for rails. But most importantly, I felt a dynamic programming language. And if at first there was absolutely nothing clear, then six months later, the euphoria of this magic began. And then it became again unclear.
Opinion: Dynamic languages ​​are very cool. You can literally write a meta-code in one line, which on the fly will write another code that will do a lot of work. ActiveRecord is awesome. On the other hand, when the euphoria passed and gray days came, this magic began to like less and less. At times, the code was hard to read and uncomfortable to debug. In the end, I came to the conclusion that I personally like static languages ​​more, it is more pleasant to write on them. Although, the matter is only in direct hands, which I did not fully grow over the year of work for RoR.
So, half a year has passed, as I write on Ruby on Rails. Around this time I became interested in Upwork. But I found the order on JavaFX and worked on it for about a month, 10-20 hours a week. I liked it, but the schedule 40 + 10 (20) began to tire, so after the end of the project I decided to take a break from Upwork for a couple of months.
Then I found another project, already on Ruby on Rails. The rate was $ 25 / h, and there was also a condition: fulltime job. Duration - from a month to three. In short - I worked a month, then the project was curtailed due to a startup. It was very hard - the first week I worked all 40 hours in addition to those 40 on the main job. Then I worked 35, 30 and 25 hours during the second, third and fourth weeks, respectively. It so exhausted me that I decided to take a few more months off from additional projects. Although, it is worth noting, I earned quite well during this time.
So, I decided to focus on the main work, and in the evenings to relax or engage in self-education, and not work for another. Such a regime lasted for some time — I did not over-exert myself, studied the new and lived quietly. And then the project was given to the Indians, and they threw me on ... the most ancient project on old Ruby and with the old legacy system that we supported. Apparently, this is my rock - work on old projects. In addition to this, I began to see more and more clearly the shoals in the company's processes that I did not pay attention to at first. The main ones are: a scant set of projects and the complete absence of analytics, as well as the absence of a tester on a project.
Advice: if the vacancy in the “we expect from the applicant” section contains the item “ability to work without having completed requirements”, then you should know the translation better: “We don’t have analytics in the company, so you should do it. And then realize the task, too, according to your own requirements. ”
Remember, I said that only leaving the comfort zone, you can reach new heights? Working at this job, I got a good salary, I was satisfied with the team and the office. It was generally comfortable, and I could have stayed on that project, especially considering that the download was not complete. I could read articles and even do personal projects in my free time. But what development did I get apart from my personal undertakings? How did the current workplace contribute to my development? One study will not go far, you need practice. And practice is needed not only in free time, but also in everyday work.
I decided to come to grips with Upwork.
Stage 6: Fulltime on Upwork
I searched a bit and found a job that suits me. This is a long-term cooperation with a fairly large American company. The first 3 weeks I worked in parallel for two jobs, and I quit only after I received an email indicating that the employer was very pleased with the quality of my work, and there would be no end to the classroom tasks and the sea of ​​fun.
At the moment I have been working here for a little over 2 months, and so far everything suits me: the stack, the processes and the team. I like western management more. I like to hear the words “amazing”, “fantastic”, “awesome” when evaluating my work. Of course, for my part, I also make maximum efforts to hear these words.
I will not describe how to find a job at Upwork - there are a lot of articles on this topic in Habré. I will describe the main, most important points in my opinion:
- Filling in your profile is very important. This is what the employer sees secondarily.
- Of course, well-passed tests on your hand.
- Cover letter is extremely important. This is what the employer will see first. Indicate who you are and where you are from, what time zone you have, and whether you are ready to work on the employer's business hours, at least partially. Indicate your experience and stack, and also make it clear that you are very familiar with the employer's stack. Do not lie. Drop your profile on linkedin / github / stackoverflow. If you are just starting and you do not have a reputation for Upwork yet, you can indicate your readiness to perform a test task for a couple of hours.
- Portfolio is also not superfluous.
- Work only with employers who have a rating of 5 stars. Read reviews. Remember that an inadequate client can spoil your reputation.
- Someone recommends grabbing at first for any orders, even if it is a five-dollar fix-price. I do not think that the fulfillment of cheap orders paints you as an experienced developer, so I initially took only for hourly orders with a price of at least $ 20 / h.
- Avoid "Jews."
Concerning the last point I will give an example I somehow found a good hourly order, and the client had a good rating. This ended with the client immediately asking to evaluate the tasks in hours and said that he would only pay for the time that was set as an estimate. As a result, we had a dialogue similar to the following:
- This task can be completed in less than 12 hours. I will pay only 10.
- If you hired me, then if you please follow my estimates. I described in great detail why it would take exactly 12 hours.
- I worked as a developer in the past and understand something. In addition, I disagree with the time that you have identified risks. It can be excluded.
- These watches can not be excluded from the estimate, as I need to maintain the old code - in the process of introducing features, something can go wrong.
- Artem, you are a professional and you should understand that this is a business - I only pay for the work actually done, and not for your hours.
- First, your business does not concern me. You are also a professional and must understand that you are investing not only in the actual work done, but also in the knowledge of the project by the developer who will support it. If I spend 12 hours on the task, I will expect to pay for 12 hours. If I spend 8, pay me 8 hours. In other words, I expect to pay for all the time that I spend on your projects. Secondly, we had an agreement on hourly work, and the current development of events does not suit me.
- Ok, please commit everything you have. I will find another developer.
So again I repeat - do not rush to the very first project that seemed interesting. Study first the history of this employer.
Let me deviate from the lyrics and describe the main advantages that I see in the current workplace:
- Staffed team: analytics, development, QA, devops.
- Work on sprints with a clear formulation of tasks.
- Salary is 3.5 times higher than in the past workplace.
- Working from home is a plus for me, since I have no problems with self-motivation and discipline.
To be honest, I do not know how long the sky overhead will be cloudless. On the one hand, work in Russia in accordance with the Labor Code of the Russian Federation looks more reliable. On the other hand, a couple of months of work remotely enough to create a very comfortable airbag. At the moment, nothing foreshadows trouble, the employer has a large scopes of tasks for many months in advance, and my work quite suits him. And every week my reputation grows on Upwork, so I dare to hope that, if necessary, I will find a new job pretty quickly. I will also add that I work strictly according to the Labor Code of the Russian Federation - I have registered an IP and pay taxes.
Tip: take your time. In total for 4 projects on Upwork, I saw a lot of terrible code. People often go to the free field, not getting enough experience. Their corny nobody pokes his nose in their shoals and does not say how to do it correctly.
My path so far has taken me 6 years, of which 4 I have devoted to the development and constant self-education. 80% of the time I was commanded by experienced and wise tmlids who gave me a piece of their experience. Do not rush to go to freelance / distant work.Conclusion
Yes, 6 years is a little. But still quite a long way has been passed. I do not regret a single step along this path. For the most part, this article is just my memories and highlights. And all the advice that I allowed myself to voice - these are the advice that I would give myself if I could. But, nevertheless, I will be very happy if this semblance of memoirs will help or inspire someone to something. Successes!