My path is a programmer. From a QA student to a remote Java developer

Hi Habr! In this article I want to talk about my path in the field of IT. At the moment, it has already taken 6 years with me, and it is still far from complete. 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 indicate the specific companies in which I worked, so all the names will be in the style of “this one” and “other”.

So, 6 years. Not so much, and to be honest, I’m sure I don’t know anything useful and I’m not an outstanding developer. But this period was enough to gain some experience, so I will allow myself to draw some conclusions and even give little advice to those who are still at the very very beginning of their journey.

Stage 1: QA Engineer


I started working as a QA engineer (I write this very smart word, and not “tester”, because this record is in the labor) in the summer of 2010, then I switched to the 4th year of university. The university is very respected, however, it does not matter.

I firmly decided to become a developer when I was 12 years old. Then I did not have a computer yet, but there was a wonderful prefix SIUBOR, which allows you to write simple programs. But after 8 years I became a tester ... that is, sorry, QA engineer. The fact is that at first programming was pretty hard for me, and I could not grasp the idea of ​​OOP properly, and with functional programming I was also pretty mediocre.

So, I got a profile pretty close to development, and it comforted me. In addition, I did very little manual testing, because my lead almost immediately decided to leave me for auto-testing. Thank you very much for that! I wrote auto tests on Selenium WebDriver using Java. In the process of writing scripts, I met such things as JUnit and Eclipse. And at the same time I read a Java book - pretty shitty, but I still got some knowledge from it.

A year passed, I was already accustomed to work and got used to it. And he began to think about the fact that it was time to translate into reality their dreams about programming. I had a conversation with the architect and lead programmer of the product that I tested, and this conversation overwhelmed me. It turned out that I knew absolutely nothing, and my level was not enough to even take me as a junior.

Conclusion for myself: I need to devote more time to learning Java. Moreover, you need to learn more deeply, and even better to try. Superficial knowledge is not enough.

Another six months I was engaged in self-development. I went out to talk again, and at the same time 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 position of Junior iOS Developer! It’s still a mystery to me why iOS, because I interviewed in Java and answered the corresponding questions. But you know what I did? I refused, because I had to be transferred to the developers after 3 weeks!

Of course, they didn’t transfer me anywhere. Around this time, I went to a third-party Java developer course, 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 hired. And not in vain.

Conclusion: you will definitely achieve what you really want. You can not be content with mediocrity. (Looking ahead - I also do not recommend being in the comfort zone for too long. Only leaving the comfort zone can you reach new heights - more on this near the end)

Stage 2: Java Developer


Yes, they took me as a developer in the summer of 2012. At first it was almost euphoric - after all, I will now develop, and I won’t do any testing that is not interesting to me! I enjoyed this time.

Immediately upon arrival at the company, I got to the bench, because the company could not immediately identify me for the project. I sat on the bench for about two weeks - at that time I was engaged in a simple training project, where I briefly got acquainted with Struts2 and Mercurial. Then my Resource Manager wrote to me with the good news that they were ready to consider me for a real, combat project! A leading developer already worked there, and he needed a smart friend, but preferably a level higher than junior. And there was a terrible detail here - I had to go through a Skype interview with a man from Moscow! Probably, like most inexperienced beginners, I panicked at the mere thought of an interview (we now see this as a pleasant pastime where you can identify gaps in knowledge, right?). I’ll be brief - I did a good job interview, and even wrote Ping Pong on two threads as a test task. In parallel with me, they interviewed another developer from the bench, but in the end they gave preference to me. I will not hide it - 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 to me - ant, SVN, JDBC, and of course Java Core. There were so many that I decided to not even be engaged in addition, because so many things have studied each of day time. As a result, I more or less learned to use some tools, but did not have a clear understanding of how they work. As a result of this, quite often I invented a bicycle and complicated things.

Tip: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 design. I can only 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 efficiently. (The task of a very good developer is to make the code pleasant to read).

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 in the morning for the following reasons:

  • Don't get stuck in traffic jams
  • Have time to take a parking place
  • My leader came to the clock at 11. Consequently, until 11 I could read books on Java - that was my plan.

During this time, I read Bruce Eckel’s book The Java Philosophy and the first volume of the Java book by Kay Horstman and Gary Cornell. Honestly, reading was difficult. I think this is due to the fact that I did not fully imagine what would happen after I finish them. I didn’t really imagine my future, there were only blurry 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, which you want to do less and less with time.

For various reasons, the project was curtailed, and somewhere in the summer of 2013 I got to another project. Perhaps the worst project in a lifetime. I have nothing against SAP, but this project was on SAP. I don’t remember very much - probably, my brain deliberately guarded this area of ​​memory in order to protect me, therefore I will describe only briefly what was there:

  • We got there together with a friend, with whom we went to courses together. This is a plus. Only.
  • We ourselves edited the JSP pages and the Struts classes. And on the side of ABAP there was a loafer, we could wait hours for corrections from it. The simplest edits.
  • JSP pages contained almost the entire logic of the application.
  • A disgusting resemblance to a project manager, who once a week appeared on Skype and asked: “Well, is everything all right?”. Therefore, we solved all problems with the customer ourselves.
  • It was impossible to immediately see the results of their edits. And the deployment could also last for hours, besides the deployment 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 especially liked was the fact that I became more familiar with JavaScript and jQuery (then it was sort of used as well). And there was a very harsh self-made analogue of Hibernate. This was because Hibernate was 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 well make sense - the system had millions of queries daily, so it was up to JDBC (if you are not from the Java world, then JDBC is Java DataBase Connectivity, just an interaction mechanism with a database without any conversion of database records to objects).

About six months later, I began to realize that I was stagnating, so I asked to be transferred to another project. I justified this request: I’m tired of the project, it’s quite ancient, but I want something new. The management reacted normally, and a month later I got to 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 need to deal with my projects, because one theory will not go far. At this time, I moved to a new stage.

Stage 3: Change of work and your projects


I realized that my current job does not give me development. I was working on a rather old and clumsy project, and it started to bother me. 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 out the main cons:

  • Interview I was interviewed not in a meeting room, but in an ordinary office, where people sat and worked. I think this bothered not only me.
  • Recycling. I came just during the rush hour, 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-on-one rate with the wording: “Well, you haven’t done anything particularly 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 tasks were set either by skype or by phone manager. Of course, everything was always forgotten, and something was not done or was being done wrong.
  • Disgusting office with a small kitchen made from a room and a shared toilet on the floor.
  • The requirement to appear in the office at 10 am. Terribly inconvenient, because in the morning I like to play sports. Of course, you can get up early, but that I do not like.
  • All my suggestions for process improvement have had no effect.
  • There wasn’t much to learn from — there weren’t really strong developers.

The longer I worked, the more clearly I understood that this stage would be short-lived. On this project I met GWT, Spring and worked more closely with Hibernate. Actually, I really did not like GWT, I considered it to be completely incompetent against the background of modern tools. Well, I also did not study GWT. I will say right away that this is only my impression of a collision with him.

But at that time I had a small project in common with my friends. The project was quite simple, but it was still interesting to design and implement it. I became more familiar 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 “Clean Code” book.

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 in general - structure, architecture, refactoring, and of course tests.

9 months after the change of work, I clearly understood that the current place was pulling me down, so I decided to return to my previous place of work. Naturally, for a slightly larger salary and an interesting project.

Tip: if there is a rather strong discomfort in the work, then you should not be afraid to put an end to this. Even at the cost of a job change. In the end, there is nothing to worry about. The agreement is initially considered to be mutually beneficial, and if it is not beneficial 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 to the benefit of the company. But if you feel that you are stagnating, that your knowledge is not in demand, or that people are driving you, then re-read 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 consider Hadoop not so modern, but this does not detract from the modernity of the trend itself. And just then I met Slack and really appreciated this tool.

Our project consisted of a manager and two Java developers in our office, as well as a manager and Java developer in the USA. Having returned, I immediately felt the whole difference between good processes and their absence:

  • We used Jira and worked on Agile.
  • We had really short stand-ups in the morning and there were no long tiresome calls.
  • There was much to learn from the second developer in our office.
  • Adequate code review.
  • 3 times a week we had short calls, where the manager provided us with a brief squeeze of what is happening in the company and on neighboring projects, as well as plans for the project.

While working on this project, I already had a certain experience and took a certain initiative. And this time all my suggestions were listened to, if necessary, corrected and accepted. For the first time I took part in the design of the module, and then I implemented the artefact created by me. Of course, my colleagues helped me identify 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. For almost half a year I worked 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 do front-end. I got really tired of working with Big Data. I'm tired of going through several remote desktops to the server. I’m tired of starting my Job and then delving into logs for a long time and analyzing them. In no case will I call it a boring and tedious job, but something has changed. What at first seemed very new and interesting, after a while, it began to bother and become a routine. I went to the authorities and honestly said everything: I wanted to try the front-end. And in parallel with this, I sent a “crazy” resume to a randomly seen, but very interesting vacancy.

The management listened to me again and promised to think. And at that time I went for an interview and got a test task. And, to be honest, here I started to rush about. On the one hand, the vacancy was very tempting, and on the other, I didn’t want to leave a good company that trusted me six months after my return. 2 weeks were allocated for the test task, but I dragged on for 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 helped the project. Looking ahead - I do not regret it.

Tip:once again - you do not owe anything to anyone. If possible, do not miss it. This is your development. But treat your employer with understanding - do everything possible so that your care does not affect the project. Work hard in these last 2 weeks and close all your tasks, create documentation on your achievements, if you have not done so already. Advise someone in your place. But do not miss the opportunity.

Stage 5: RoR Developer


Yes. I started writing in 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 into a combat project
  • A project colleague, also a former Java developer, actively helped and talked about the features of the language
  • The head of the department also participated very actively in my development and training.
  • I read the documentation and several books on the topic.

Apparently, in this company everything was very good. About six months it took me to stop experiencing any difficulties in the process of writing code. It took another six months to better learn the subtleties of the language and start writing on the Rails Way.

So, late autumn 2015. I already worked for six months in a new company, there was enough salary for everything, although the project was not the most interesting, but for me there was a lot of new, therefore I did not get bored. On the project, I met a lot of interesting tools: some services Amazon, Heroku, rspec and many gems for rails. But most importantly - I felt a dynamic programming language. And if at first it was absolutely nothing clear, then six months later the euphoria from this magic began. And then again it became incomprehensible.

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 cool. 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 inconvenient 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, it’s only in direct hands, which I did not manage to fully grow in a year of working on RoR.

So, six months have passed since I write in 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 for 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 work. Duration - from a month to three. In short - I worked for a month, then the project collapsed due to a startup. It was very difficult - the first week I worked all 40 hours in addition to those 40 at my main job. Then I worked 35, 30 and 25 hours in the second, third and fourth weeks, respectively. It bothered me so much that I decided to take a break from additional projects for several months. Although, it is worth noting that I earned quite well during this time.

So, I decided to focus on the main work, and in the evenings relax or engage in self-education, and not work on another. Such a regime lasted for some time - I did not strain myself, learned new things and lived in peace. And then the project was given to the Indians, and they threw me at ... 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 jambs in the company's processes, which I did not pay attention to at first. The main ones: a meager set of projects and a complete lack of analytics, as well as the lack of a tester on the project.

Tip:if in the vacancy in the section “we expect from the applicant” the item “ability to work without complete requirements” appears, then better know the translation: “We do not have analytics in the company, so you should do it. And then I will realize the task according to my own requirements. ”

Remember, I said that only leaving the comfort zone can we reach new heights? Working on this job, I received a good salary, I was satisfied with the team and the office. In general, it was comfortable, and I could stay on that project, especially when you consider that the download on it was not complete. I could read articles and even engage in personal projects in my free time. But what development did I receive, besides my personal endeavors? How has the current workplace contributed to my development? You can’t go far in one study, you need practice. And practice is needed not only in free time, but also in everyday work.

I decided to work on Upwork.

Stage 6: Fulltime on Upwork


I searched a bit and found a job suitable for me. This is a long-term collaboration with a fairly large American company. The first 3 weeks I worked in parallel at two jobs, and quit only after I received an email indicating that the employer is very pleased with the quality of my work, and there will be no end to the cool tasks and the sea of ​​fun.

At the moment I have been working here for a little more than 2 months, and so far everything suits me: the stack, processes and the team. I like the western management style more. I like to hear the words “amazing”, “fantastic”, “awesome” when evaluating my work. Of course, for my part, I also make every effort to hear these words.

I will not describe how to find a job on Upwork - there are a lot of articles on this topic in Habré I will describe the main, most important points in my opinion:

  • Filling out your profile is very important. This is what the employer will see secondarily.
  • Of course, well-tested tests are at your fingertips.
  • Cover letter is crucial. This is what the employer will see first. Indicate who you are and where you are from, what your time zone is, and whether you are ready to work according to the employer's business hours, at least partially. Indicate your experience and stack, as well as make it clear that you are familiar with the employer's stack. Do not lie. Drop your profile on linkedin / github / stackoverflow. If you are just starting out and you do not yet have a reputation for Upwork, you can indicate your readiness to complete the test task for a couple of hours.
  • Portfolio will also be by no means superfluous.
  • Only work with employers with a rating of 5 stars. Read reviews. Remember that an inadequate client can damage your reputation.
  • Someone recommends grabbing at first for any orders, even if it is a five-dollar fixed price. I don’t think that fulfilling cheap orders paints you as an experienced developer, so I initially took up only hourly orders with a price list of at least $ 20 / h.
  • Avoid the Jews.

Concerning the last paragraph, I will give an example. I somehow found a good hourly order, and the client had a good rating. This ended with the fact that the client immediately asked to evaluate the tasks in hours and said that he would pay only for the time that is put down as estimate. As a result, we had a dialogue about the following contents:

- This task can be completed faster than 12 hours. I will pay only for 10.
- If you hired me, then please be guided by my estimates. I described in great detail why this will take exactly 12 hours.
- I worked in the past as a developer and I understand something. In addition, I do not agree with the hour you set aside for risks. It can be excluded.
- This clock cannot be excluded from the estimate, since I need to maintain the old code - something may go wrong during the implementation of the feature.
- Artem, you are a professional and must understand that this is a business - I pay only for the work actually done, and not for your hours.
- Firstly, your business does not concern me. You are also a professional and should understand that you are investing money not only in the work actually performed, but also in the knowledge of the project by the developer who will support it. If I spend 12 hours completing the task, I will expect payment in 12 hours. If I spend 8, pay me 8 hours. In other words, I expect to pay for all the time that I will spend on your projects. Secondly, we had an agreement on hourly work, and the current development of events does not suit me.
“Okay, please commit everything you have.” I will find another developer.

So I repeat again - do not rush to the first project that seemed interesting. Study the history of this employer first.

I allow myself to move away from the lyrics and describe the main advantages that I see in the current workplace:

  • A complete team: analytics, development, QA, devops.
  • Work on sprints with a clear statement of tasks.
  • Salaries are 3.5 times higher than at the previous workplace.
  • Work from home is a plus for me, as I have no problems with self-motivation and discipline.

To be honest, I don’t know how long the sky above my head 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 is enough to create a very comfortable airbag. Nothing bodes ill at the moment, the employer has a large scope of tasks for many months to come, and my work suits him perfectly. And every week my reputation on Upwork grows, 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 registered an IP and pay taxes.

Tip:do not hurry. In total, for 4 projects on Upwork I saw a lot of terrible code. People often go to free fields without having received enough experience. Nobody pokes their trite nose at their doorposts and does not say how to do it right. My path so far has taken me 6 years, of which 4 I have devoted to development and continuous self-education. 80% of the time I was commanded by experienced and wise team leaders who passed me a piece of their experience. Do not rush to go to freelance / remote work.

Conclusion


Yes, 6 years is a bit. But still quite a long way has already been traveled. I do not regret a single step along this path. For the most part, this article is just my recollections and an extract of the highlights. And all the advice that I allowed myself to voice is the advice that I would give to myself if I could. But, nevertheless, I will be very happy if this semblance of memoirs helps someone or inspires something. Good luck!

Also popular now: