Well, I found
my hands time to share my little story.
PrologueLet's start with the fact that I am 30, I have a higher education in chemistry (I won't go into details), and I've worked at a factory for almost 8 years. The work was actually quite interesting, but looking at my coworkers, I realized that I didn't want to work here for twenty years until retirement. This is not the way I want to spend my life. I also want to add that I have a family, including two kids (my oldest is 6, the youngest is 1 year old), and predictably, a mortgage. Finally, I decided to try to move to another place, to another factory with higher pay and real career growth. I had put down roots at the first factory, so it was hard to leave, but I had made up my mind. My trip to St. Petersburg lasted a month. I was officially on the job there for a week when I realized that the situation with factories in our country (Sviatoslav is from Russia — editor’s note) is dismal for the most part. I returned to my hometown. I didn't want to go back, since it seemed to me that this was a step backwards. At this point, I decided that if I change my life — and change it radically! For about a week I pondered on which programming language to choose, and, well, the choice fell to Java. After that, I started looking for courses. The reality is that there are a lot of good courses, some of them are even reasonably priced, but I had a problem: I was super motivated and had a lot of time to study, but my financial cushion would last at most 3-4 months. All the courses that I liked were for half a year or more with two lessons per week (most often). But then a friend recommended CodeGym to me after she heard that it is a very good resource. I saw that this course has everything I needed:
- a subscription with learning materials and tasks;
- no time limits — I could study just as much as my schedule (which was wide open) and my desire (as I said above, I was super motivated) would allow.
Part 1: In search of knowledgeOn November 26, 2019, I signed up and began my studies. I will say right away that there were some days when I sat for 14 hours straight, studying, reading all the related links, and trying to find more beautiful solutions (without peeking at the Help). Only when I thought that my solution was the best did I look at the Help. I was quite often amazed at the solutions that were even more beautiful and more concise. At the end of January, upon reaching Level 17, I decided to start going to interviews, dangling out my skills, and seeing what the market even wants. As it happened, no one really responded to me, but there was one office that took me on as an unpaid probationary intern: the first month was unpaid, the second and third included a small stipend. Next there would be another interview based on my performance after three months, and if the internship was successful — then employment.
Part 2: Rushing into battleMy internship involved writing a Chrome plugin with a Java back-end to automate the routine tasks of one of the company's internal departments. I had a wonderful mentor with a lot of knowledge, which I think is also important. Basically, to avoid getting lost in the weeds, I'll tell you now about the technology stack I used, and then at the end of the article I'll provide several links that turned out to be very useful for me.
Technology stack:Java 11 (the project was written completely from scratch), Spring (Boot, Security, OAuth2); I used MongoDB for a database; for automated tests, I used AssertJ, Mockito, and Spring-boot-starter-test; and I used the fairly popular GitHub flow (see this article). BTW, if you struggle with English, then this is the time to advise you to learn it. My fluency level is A2, but I always try to read articles in English (without using a translator, of course). This was my biggest difficulty as I began the internship project, because I had to work with a third-party CRM, and all of its documentation was in English. Also, when working with Spring, it is best to read the original documentation. It is very good and detailed. What's more, almost all the documentation is English (a little from Captain Obvious). Also, my mentor told me to write all comments in the code and API documentation in English, so I repeat once again: learn English, if you’re not a native speaker! Even if you are not going to work with foreign customers or travel abroad, this skill will simply greatly simplify your study and development.
Part 3: OutcomeThis part will be much shorter :) At the end of the internship, I successfully passed the performance evaluation interview and got a job, where I continued to work on this project. The first stage was to be implemented as part of my internship, but there were three stages in all. Due to the onset of the pandemic, many commercial projects disappeared, and I implemented all the stages and every other idea/wish there could be for this project. There were other tasks, but, as they say, that's another story.
Part 4: There was a happy ending, though things are far from over ;)In mid-July, I got a call and was asked if I was looking for work. I had posted my resume, though it had not been updated for a long time. I decided to test myself. I went through 3 stages: a test task, a technical interview, and an interview with the boss. They sent me an offer and... This was an offer I couldn't refuse. I understand, of course, that in your first couple of jobs, you'll try to get in wherever they will take you, but still. My first job was an outstaffing position, but my current job is in the food industry. They also hired me as a junior dev, but I'm not upset at all, since there is room to grow both in terms of knowledge and money.
EpilogueSo, friends, do not be discouraged. The main thing is to make up your mind and not deviate from your path. In my case, I had a huge responsibility to take care of my family and a desire to change something in my life, to start doing what I really enjoy. Software development is especially great, because you can climb the career ladder, regardless of whether there is a higher vacancy at your company, regardless of whether someone has retired after working for twenty years, and regardless of whether you have the personal connections to land the higher job. In our field, everything is in our hands!
Here are some articles I would like to share:
- Understanding architecture. I personally read this article 4 times just as we were working out the architecture of a future application. I use the word "we", because my mentor checked everything and sent it back for corrections (i.e. he did code reviews). The first time I didn't understand much. Then I read it 3 months later, and found that I then understood why. Later, I read it 2 more times in order to solidify and fully assimilate all the information.
- Interactive Git learning.
- I recommend that everyone should learn how to work with streams. They are really glorious: you can often replace huge volumes of code with a small stream.
- Spring documentation.
- Because I worked with a non-relational database, and most companies (especially large ones) work with SQL, in my free time I tried to solve at least a couple of problems involving building SQL queries. There are a lot of different websites for this.
- I would also recommend reading about writing tests (Assertj, Mockito), but I don't remember any good articles, just documentation.
- And when you are developing an application (but now we're beyond the beginner level), try to use design patterns. At least take a quick look at well-known patterns. That will be useful as you get started.