Notes from a junior programmer: how to get your first job

    Not only I at one time, but many of my friends and classmates are now seriously concerned about the question: I want to be a programmer, how to start?

    The purpose of writing the article was not only self-doubt of my friends. I suspect that the number of people who are currently thinking on the same issue is large enough so that my first article in my life can help some kind of plan with more than a couple of friends.
    What is the problem? You need to create a resume by throwing in the “Professional skills” section a couple of technologies that correspond to the desired vacancy, send it to the vacancies, and it seems like everything will work out. But there are pitfalls:

    1) The quality of technical education. Despite the fact that my specialty is proudly called “Computer Science”, in 70% of the curriculum, knowledge in subjects is given outdated, and teachers are either simply elderly people who have long lagged behind modern technology, or to everything with growing insanity. And from this follows the problem of non-compliance with the requirements of the labor market of a student who wants to become a developer, but who has gaps in understanding modern technology. I am sure that this is not the only one who came across this.

    2) Self-doubt and doubt. A novice developer is often simply afraid to go for an interview, considering himself not ready even for an attempt. He may incorrectly assess the degree of his training. And finally, the same person sometimes knows only one way to get a job - for example, courses in a particular company. But the limited choice (the same courses have a time frame for recruitment, requirements, interviews) only raise unnecessary obstacles and doubts. The result is lost time.

    3) The presence or receipt of a diploma not in their specialty. A good developer with a technical mindset may not necessarily be his education. But a self-taught programmer often does what he likes and how he sees it. The lack of any consistency in the knowledge he acquired and the gaps in the basics can be the reasons for failures after passing the interview.

    A little about myself: I’m a fifth year student, I started working from the middle of the third year, immediately at full-time in the Automation QA position. In the previous company, I worked for almost a year and a half on two projects. Currently working as a junior java developer at Luxoft. Current experience with java: about 2 years.

    In today's publication I want to bring to your attention an overview of all the ways I know, the result of each of which may be the desired work by the developer (I will illustrate proven ones in practice with examples). All the stories mentioned below the courses of companies correspond to Kiev, the stones in the garden education - KPI, the Faculty of Informatics and Computer Engineering (a particularly large boulder for my department).

    1. Courses in a particular company.
    Luxoft, Epam, Yandex, Global Logic - not the whole list of companies that invite to their courses, internships and training centers. Many classes are open at technical universities.
    The advantages of this option are obvious:
    • free training
    • work with technologies that are in demand on the labor market on interesting real tasks
    • subsequent employment in the same company
    • in the event of a job change - an undeniable plus for other employers.
    Unfortunately, there are no less minuses:
    • time limit for recruiting students (often either from the beginning of the school year or in the spring). For those who did not have time, wait and lose time.
    • requirements for applicants. It is not profitable for companies to recruit people who are far from IT for courses, since their training and input into real projects will require more time, which means more costs. Therefore, they prefer to cooperate with certain faculties of technical universities, which means they are less likely to get a person “from the side”.

    2. Profile courses in educational centers
    On this request, Google will helpfully tell you a lot of centers, schools and courses that they are ready to make a programmer out of any person Jobs. The main thing is a desire and a serious approach to classes.
    Advantages of this option:
    • training in specialties and technologies that are in demand on the IT market
    • high probability of finding a job upon graduation (I had three colleagues in the team who took the same Java courses at different times. At the end of the two, they invited hr for an interview, and the third sent a resume). Subsequently, one of them, these courses became a good help for working on a new project (in which, for example, knowing only Core but not HER, I had to understand the campaign).
    • gaining everyone who is willing and ready to learn
    • they are not free. Often inaccessible to students whose scholarship is 2 times less than the cost of a month of study there.
    • not all courses are of equal quality. When choosing a center, focus on the reviews of real people, and not on advertising and the sweet promises of guaranteed employment.

    3. First job in position automation QA
    I'll start, perhaps, with my own example, because this was my first job in IT. In general, I was sorely lacking practical knowledge and minimal experience to work as a developer, but they took it as a tester (simple questions on Java Core and networks). I got to a project in which the client testing process consisted in writing an application by the Automation QA team of an Android application that sent many different requests to different resources according to certain patterns. Our team also had its own framework with a bunch of utilities for analyzing logs, tcp dumps, device behavior, and I got the first maiden experience in writing my own utility for configuring ip-tables. And also an understanding of the OSI model, experience with a client-server application, and finally - a completed production project, the fact of which helped in the subsequent job search. That is why I do not consider the work of automation as something shameful, primitive or a bad step towards the work of the developer - before you say no, you need to understand what it will be. On the second project in the same company, they gave me the task of covering the old functionality with unit tests, they allowed me to refactor a little. The work is of course boring, but after a few months, the tasks of fixing simple bugs went. Thus, I gained experience working with Unit testing (Powermock, Mockito) and the ability to quickly understand unfamiliar technologies (the same bug in JavaScript). allowed to refactor a little. The work is of course boring, but after a few months, the tasks of fixing simple bugs went. Thus, I gained experience working with Unit testing (Powermock, Mockito) and the ability to quickly understand unfamiliar technologies (the same bug in JavaScript). allowed to refactor a little. The work is of course boring, but after a few months, the tasks of fixing simple bugs went. Thus, I gained experience working with Unit testing (Powermock, Mockito) and the ability to quickly understand unfamiliar technologies (the same bug in JavaScript).

    I’ll highlight the advantages of this option:
    • with the right project choice - work and training in one bottle (after all, no one bothers simultaneously communicating with the developers on your own project, getting practical knowledge from them, reading and writing something yourself in your free time)
    • money . They are very motivated to grow professionally in working with their favorite technologies. Well, I want to live not only on a scholarship.
    • production experience (using Scrum, version control systems, task tracking systems (the same JIRA), etc.). Here at the university they didn’t tell me anything about this (until the middle of the third year, for sure), there was something about Scrum there in the 4th, I met C Git only this year (thanks to the teacher, an Android developer). This is an advantage when looking for the next job and when performing tasks on it (when only a junior who has a job will not have to re-create some brunch in a panic at night, or look for how to change the commit because today is the end of the sprint, but with the same Git ' om or an understanding of task planning is a mess.
    • experience with technology, which can then be profitably filed and sold, considering the position of the developer. (For example, after my first project, I have enough knowledge to apply for a position on a project with client-server interaction)
    Without cons, alas, nothing:
    • even in the case of a deep immersion in programming at the QA position, then you need to sweat a lot in the correct preparation of the resume and the presentation of your experience in order to be invited to an interview for the position of the developer. I'm not saying that this is a tough rule, read "this often happens" and not "this is a tough rule." And now I will illustrate a little. The first example is my colleague, Automation QA: without much effort, I found a new job as a developer in a small office, where previous experience played no role. The second example is me. Indeed, this minus appeared to me as an unpleasant fact when I looked for a job as a developer (they didn’t want to invite for an interview), but I correctly drew up a CV (indicating the previous position, of course, but briefly describing all my responcibilities on two projects and the general experience with Java). And I sent it wherever I found it,
    • risk of remaining a tester. Not too burdensome duties, the salary is not lower than that of the developer and a simple code relax. In this case, think about what you want at all - a lot of money, interesting tasks, or not doing anything.

    4. University training, educational projects, work in laboratories.
    Universities have a ton of opportunities to learn something by looking well. Like to make sites? Write \ rewrite \ supportport faculty or affiliate website. Do you want to code for Android? Write your application that I, as a student, would like to use. Look at the university for laboratories and educational centers - this is the first experience. In a word, it is necessary to reconsider all possible options in your own environment.
    • technical experience (in the case of a technically savvy leader, quality additional training)
    • ability to independently learn new things. My current Android development teacher made an application for students of our university with his schedule, teachers, a map of buildings and university radio as his graduation work. Despite the incompetent leader in this matter, he figured it out himself, and after graduation he got a job as an Android developer without any problems.
    • be prepared for the fact that the responsibility for the started project will fall on your shoulders, and the teacher / leader may not be competent to help you technically, but very meticulous as a customer.
    • forget about paying for your work (I hope you don’t need to explain why).

    5. Open source projects.
    Here for everyone according to their abilities and preferences. Choosing a project you like in one language or another, a great start is to add simple functionality to it or re-produce and fix a simple bug. This is an opportunity to work on a real project with experienced developers, receiving feedback and knowledge from them. Reading someone else’s code teaches not only to compile it in your head, but also to find “bottlenecks” or incorrect implementation right away.
    Pros: listed above :)
    • this method of preparation cannot be uniform, but only as an addition and consolidation of knowledge in practice.

    6. Home preparation
    It includes reading technical literature, online lessons, studying documentation, and finally purposefully preparing for an interview. The best option for home preparation is parallel running your own small project and reading literature. It’s not difficult to come up with an application that I would use myself, divide it into tasks, and deal with them for several hours every day. The main thing to start. And how to write - Google to help, a beginner can now find the answer to almost any problem that arises there.
    There are quite a few pluses:
    • reading books and documentation provides a good base not only for interviews, but also for future work
    • the first project can and should be put in the public domain, criticism of others will show bottlenecks and possible ways to change, refine, improve
    • the availability of a ready-made application (albeit small) - an argument for the employer and an opportunity for the interviewer to evaluate the practical experience of the applicant (a big plus)
    • the ability to independently plan time and solve tasks (this is far from every developer, alas)
    • the first mistakes that will not be able to find a solution, and the lack of an experienced curator, can discourage the desire to continue at all. In this case, it’s worth considering - what can you even achieve in this life if you give up from a minor problem? Hmm, perhaps this is more of a plus.
    • the absence of a curator can make the requirements, architecture or implementation of the project in the “jungle”
    7. A combination of the above.
    No one forbids working Automation QA in the evenings to take courses, or while studying and doing some kind of project at the university, at home sawing tasks in an Open Source project and reading books. The more efforts you make, the more likely you are to get your desired job. I think that in any combination, the pluses will be just all of the options listed above. The main drawback that I want to highlight here is the postponement of the job search “for later”. Constantly monitor the market, especially those vacancies that relate to the language or technology you are interested in. Periodically go for interviews in order to understand your real level and progress.

    I admit that many of the rules above have their exceptions. But, as you know, they only confirm the rules.

    Also popular now: