JavaRush /Java Blog /Random EN /How an old humanist went to IT
PieIsLie
Level 35
Санкт-Петербург

How an old humanist went to IT

Published in the Random EN group
Firework! Actually, for a long time I thought about what exactly I would write in this post and whether I would write it at all. It just so happened that in different periods of the last two years I assessed my chances of getting a Java developer position in different ways: from “sooner or later - definitely” to “I have no chance in IT.” How an old humanist went to IT - 1However, almost exactly two years have passed since I registered with JavaRush. A couple of months ago I received my first offer, a little later I received my second, and then I started a new job. Success stories helped me a lot during the course, so I decided to post my own. Since the course took place in '18, some information may not be current. I’ll say right away that there will be a lot of text, because... I’ll try to tell you about training and job searches (requirements, responses, technical specifications, interviews, etc.). I will also write a couple of general tips that helped me personally and may help others. Briefly about myself: 32 years old, 10 years of experience in management and sales, liberal arts education and absolutely no technical background. Several years ago I tried to get into C++, then into Python - I got nothing but a headache. Therefore, it’s difficult to call me a talented developer: rather the opposite.

STAGE 1. Training

I came to JavaRush consciously: an adequate monthly price list, a clear structure of the material, a lot of practice and the presence of my own community. The first point is all clear, but learning a language without structure is quite difficult, and such training will certainly leave a person with serious gaps in Java Core. The experience of interviews and technical specifications shows that questions about the “core” can be used for everything: from bitwise shifting and casting of generics to IO and serialization. Practice is a must-have; I still can only understand and remember half of the things if I wrote them myself. Well, the community: you solved the problem - brag about it in the comments; If you haven’t decided, you’re welcome to ask questions, but most likely no one will give you a ready-made solution. And I returned to custom articles on free topics even after finishing the course, there is a lot of good stuff there to start with (especially the first experience with frameworks using step-by-step examples + questions for interviews). In general, I am grateful to this project for the base I received, but I would not rely only on JavaRush - the same Shildt best of all goes “overlapping” on the topic being studied, and often reveals some points. A lot has already been said in the reviews about tasks that sometimes go ahead of theory and force you to Google. For me, this is more of a plus than a minus - and it’s not a fact that now the situation is the same as when I was studying. Immediate advice to those who, like me, enter Java “from scratch” : at some stage you may become bored or difficult:
  1. It’s hard for everyone starting from scratch; God forbid, only 5% of people reach the end of the course. Your task is to become one of them.

  2. I became interested after a month or two, when the tasks became more difficult and interesting. Be patient.

  3. The main thing is weekly progress. After two weeks of rest, it’s already difficult to return, and not everyone can write every day for several months in a row. Give yourself a limit of hours for the week - for example, 15. You can code for 1.5 hours every weekday and another 3-4 hours on both weekends, or you can take a couple of evenings off, but the “weekend limit” will increase. This way, the schedule will be flexible, but regular. Of course, then it will be possible to measure work by tasks and projects, but at the syntax and kernel level, hours will do.
In general, it took me about 5 months to complete the course (before accessing the internship) , despite the fact that I could afford both vacation and short breaks; again, working a five-day week left only weekends and weekday evenings free from 22 to 00. So, with a looser schedule or a more rigid training regime, you can cope much earlier. Then I planned to get an internship, but in the end it didn’t work out.

STAGE 2. Self-education

So, I didn’t get the internship: I only left a couple of days on the technical requirements until the end of recruitment into the group and didn’t have time to figure out the requirements - there were too many unfamiliar words. Because I didn’t want to wait another three months, I decided to move on myself. Fortunately, there are guides and video tutorials for all popular frameworks. Over the next few months, I dealt with Spring MVC, Spring Boot + Data, Spring Security, Hibernate, jUnit, Maven, Git, RDBMS, mastered SQL and tried to put it all together into a single whole. Six months later, I had projects that are scary to look at now, but I gained practical experience in using “adult” frameworks and a GitHub that could be shown at the request of a potential employer. Adviсe :
  1. The sooner you learn about .gitignore, the better. ;)

  2. Many guides include several frameworks at once; use this and add your own. We wrote an online store using Maven + Spring Boot + Data - add authorization, unit tests and logging.

  3. For web projects, you can take free frontend templates from the Internet - they are more pleasant to work with, they look better as screenshots in the README on Git. At the same time, you will be able to remember HTML and CSS - you will probably want to correct the styles and layout.

The easiest way to create such a development plan for yourself is to go through HH for Junior\Middle Java Developer vacancies and see which technologies and frameworks are indicated most often. Write them down, come up with technical specifications for them, set yourself deadlines for implementation. Although, maybe if I started with a local internship, I wouldn't have to spend several months on home projects.

What I was missing (later I got burned during an interview)

  1. Algorithms. To avoid my mistakes, I immediately recommend a short book in Russian, “Grocking Algorithms.” What is the complexity of algorithms, what does it consist of, why quicksort is not enough, an introduction to graph theory - everything is there and in the most understandable language.

  2. Collections "under the hood". I don't remember if this was in JavaRush, but it's useful to know how HashMap.get() works or why a HashSet is not guaranteed to preserve element order. Again, which collections are thread safe and why.

  3. SQL. You need at least up to JOINs - what they are, how they work, the ability to write a SELECT on two tables on paper on the fly. I recommend www.sql-ex.ru: it will take you to the desired level in a day or two.

  4. Spring Core: what annotations are there, what is a context, how beans are created, which Bean Scope is thread safe, and how to solve mutual injection - all interview questions. How to return a page, how to return JSON, etc. I’m currently reading “Spring 5 for Professionals” in Russian, but in general they recommend “Spring in Action”.

STAGE 3. Job search

Actually, in the first couple of months after completing home projects, I sent about 30 responses to various Junior\Trainee vacancies (through HH, LinkedIn, recruitment agencies), with near-zero results. I focused only on vacancies without experience, honestly indicated a stack familiar to me and wrote about my high learning ability in cover letters. The result is two calls (one of which immediately ended in my pre-intermediate English), two more companies sent technical specifications, there was only one “meeting”, and then I was there alone solving problems on algorithms on a piece of paper, after which HR simply took away the papers and "We'll call you." I tried to get a couple of internships (unpaid and conditionally paid): I did the technical specification, but did not go beyond the final social security; but now I can say that trainees are definitely recruited by T-Systems, CFT, Andersen and EPAM (they have mixed reviews, decide for yourself). As for me, it’s a good way to enter the field if you have the opportunity to sit without income for several months and not die =) In general, after this experience I became somewhat depressed, and put the whole story with the search on pause for almost six months - I continued to work on the previous profile , wrote some applications just for fun, but didn’t even post them on Git. Until I met one acquaintance, to whom I casually told about the failures with vacancies: at that time he was already working as a middle developer, but he started in the same way - with self-study. An acquaintance gave me a couple of recommendations , which he used himself and which greatly helped me with my job search in the future. Whether you follow them or not is up to you, because... they are, in some way, not entirely honest. So, further quotes:
  • In any way, provide yourself with 6+ months of commercial experience in your resume: internships, graduation projects, freelancing, remote work - whatever. This will greatly help at the stage of initial screening of resumes by HR;

  • remove the word Junior and expected salary from your resume; just leave it as Java Developer, and discuss the money individually with each company;

  • try to have HR name the “fork” of the proposed salary before you name your expectations. If a company offers 80-120k, and you are looking for 40k or more, some selectors will treat you with disdain;

  • Apply to all vacancies that suit your stack, even if they require 1-3 years of commercial experience.

After I followed all these recommendations, the search situation improved significantly. Firstly, out of about 12 new responses, half almost immediately ended in either a meeting, or Skype, or TK (which was already very different from being ignored in previous months). Secondly, HR people started writing to me, to whom I did not respond - in instant messengers, in mail, in LinkedIn. Thirdly, the commercial experience requirements turned out to be really not too strict - many companies were ready to communicate with a candidate who did not fall within the specified range of 1-3 years of corporate practice. As a result - one offer for a junior, one for a middle with a probationary period. In total, the search took two months. Adviсe :
  1. Include in your resume the entire stack of languages, technologies, and frameworks you have worked with.

  2. Register on LinkedIn - there are really a lot of HR people from different companies there. Fill out your profile carefully - in fact, this is also your resume. To develop your network of contacts, add LIONs relevant to your profile; they accept requests from all users.

  3. Try yourself in free Java tests - they are often given on paper before the Junior interview. It's better to prepare in advance.

A few words about interviews
  1. They always ask about the collections: which ones are there, how they differ, when is the best time to use them.

  2. Always on abstract classes and interfaces - can they have methods, fields, which ones, can they be inherited, etc.

  3. Almost always on multithreading - what you used in your work, keywords, methods, are you familiar with util.concurrent.

  4. Often when working with memory - the heap, the stack, and will these strings be equal, and these objects, why.

  5. Sometimes about algorithms - which ones do you know, what complexity, why, can you write an algorithm now.

  6. Sometimes based on patterns - which ones you know, which ones you use, write a singleton or factory.

  7. Sometimes in SQL - types of JOINs, what a transaction is, how to conduct it in JDBC, write a short query.

In fact, everything very much depends on the company : someone doesn’t ask a single question about Java Core, but spends 40 minutes talking about frameworks and SQL; Some people don’t use popular frameworks at all and ask only about algorithms, types, collections and memory. About half of the meetings began with tests - sometimes in Russian, sometimes in English (20-30 questions for 20-30 minutes); Usually questions at the level of “here is the code, will it run or not, and if not, then on what line” or “here are several objects, will they be equal after N operations.” A few words about technical specifications : 70% of companies starting communication sent me technical specifications before or after the meeting. Usually, completion is given from a couple of days to a week, but most often the deadlines can be moved a little. Anything can be used as technical specifications. Here are the examples I did:
  • Salesforce profile business contacts page with editing and adding new records;

  • simulation of an elevator in a multi-story building using the Spring State Machine with console control;

  • Android application based on the LibGDX library with character-by-character text output when a button is pressed;

  • REST imitation of car sharing, with adding clients via HTTP request and returning JSON;

  • problem of sorting an undirected graph through a free cell;

  • search for isosceles triangles using coordinates from a file;

  • refactoring of finished code using Stream API;

  • UI calculator with support for ternary expressions;

  • race of threads with writing the results to a file.

Sometimes calculation methods are asked to be covered with unit tests, and query methods are asked to be covered with integration tests. Adviсe :
  1. Try not only to complete the task, but also to ensure that the code complies with OOP principles.

  2. Check your code for efficiency - I was once rejected because, among other things, I used PrintStream instead of BufferedWriter.

  3. Plan your execution time with a 50% margin - it’s better to start and finish earlier than to do a git push at eight o’clock in the morning of the deadline.

Well, everything I wanted, I think I wrote. The most important thing is that water wears away stones. You can’t write a lot, a lot in Java, then look for a job for a long, long time, and in the end come up with nothing. If a 30-year-old humanities specialist pulled it off, you can do it even better. The main thing is not to be afraid of the first calls, technical assignments and interviews: after each failed time, I was guaranteed to learn something for myself and improve it - the longer, the more confident you feel. If somewhere it turned out chaotic or there are errors - I apologize in advance, write, I will correct it. I hope my experience will help at least someone =)
Comments
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION