As a novice developer to survive the interview and not go crazy at work
From the translator: Valery Aleksiyev, an experienced programmer, told us that it is better to do a software developer at the very beginning of his career path. In particular, what tools should be used and what to look for in interviews.
The first few years of my career were years of intensive study. I faced a harsh reality and realized that I needed to get a lot of different skills that I hadn’t even thought about before. So I decided to write a small guide for other developers. The article covers such topics as interviews, working as a programmer, resources that will help to improve.
Starting a career programmer, you will immediately realize that the interview - sucks. They can be terrible for all parties involved. This is just a time killer, a stress-forming factor and the first obstacle to a successful career. But you have to deal with them, so it’s better to know what to prepare for.
Preparing for the battle
Questions and tasks can be very different, as an example I will cite the popular task of FizzBuzz.
Write a program that displays numbers from 1 to 100. But for numbers that are multiples of three, you need to output Fizz instead of the number itself, and for numbers that are multiples of five, Buzz. For numbers that are a multiple of three and five, print the word FizzBuzz.
It seems to be simple and clear, like a day, right? In fact, most novice programmers during an interview fail this task. I have even seen cases where the task was not performed by candidates for the senior position, and they had access to the network. My advice is to complete this task before the interview in the programming language you use most often. Otherwise, the interview will be a waste of time for all of its participants.
Of course, you need a lot more knowledge. In particular:
- The main data structures and algorithms: linked lists, arrays, trees and sorting.
- General information about “your” language, including string immutability, memory management, and more.
- Object-oriented programming concepts such as class vs object and inheritance.
All this is necessary to literally polish to shine, if you want to show yourself from the best side. I can advise such resources that will help prepare for interviews:
- “Cracking the Coding Interview ”, is simply a fantastic book that contains information about a large number of programming problems and their solutions;
- CodeWars , a site with unusual programming tasks that you can solve directly in your browser using various languages.
Skillbox recommends: Practical course "Profession web developer . "
We remind: for all readers of "Habr" - a discount of 10,000 rubles when writing to any Skillbox course on the promotional code "Habr".
And a little more of everything.
There are a couple more points that will help you gain additional knowledge and experience.
First, learn to clearly state your thoughts, as well as describe your knowledge and capabilities. Learn how to make good and foldable resumes. This may sound silly, but many applicants do not know how, they cannot neither explain what they are in person, nor compose a competent resume.
Secondly, post examples of your code on GitHub or any other open repository. Code samples should not be too complex, but the code needs to be made clean and efficient. This is your chance to show some of your skills before the interview.
Try to take part in an open-source project. This will show your experience and teach teamwork.
Interview your interviewer
Yes, the interview should ask not only you. You can and should be interested in the various nuances of your future work and company. Listen carefully to the answers. They can be very important, contain explicit and not very information about what constitutes a new company, its team and work.
Here are some questions to ask.
What will my standard work day be?
This is an important question, since the tasks of a software developer in different companies may differ markedly. If the answer is not too confident or vague, you can consider it a warning, an indicator that something is wrong. The person who hires you should have a clear understanding of why you are a company.
How do you test your software?
Ideally, testing should be quite diverse. If the answer is something like “We just write everything at once without bugs, haha,” it’s worth understanding that there are errors, but no one wants to or cannot fix them.
What version control system do you use?
An important question as it is necessary for teamwork. If the answer is: “What, version control system?” - then run away from such an interview quickly and far.
If your interlocutor begins to talk about the custom system, then nothing good is waiting for you in this company either, since the infrastructure here has clearly not been updated for a long time.
Do you review code?
In fact, code review is an important part of working in a team, as it allows you to identify many errors. If you are answered in the negative, then the teamwork is not very well placed. Of course, there may be exceptions, but in most cases it is. If you are told something like “We trust each other,” then it is worth thinking. Most likely, in this company, no one checks anything.
What educational programs can you offer? The programmer must constantly evolve, so most companies offer the opportunity of learning. If this is not, then either money is a problem, or developers often change.
What software development process are you using?
In any company where more than two people work, there must be some kind of algorithm for the overall work of the team, a streamlined process. If there is nothing like that, work in this company will be like riding a bike that burns, and everything around it burns, everyone burns.
How do you solve the problem of technical debt?
Technical debt, or coding debt - terms that denote long-lived bugs in the code or architecture of an application. Problems accumulate and eventually become a very serious obstacle to further work on the project.
If you are answered that there are no solutions, and the company “focuses on new functions”, then most likely, the problem has either grown to such a scale that it cannot be solved, or chaos will begin soon.
What can you tell about corporate culture?
Different companies have a very different atmosphere and culture. But keep in mind that you will need to be inside the team 40+ hours a week for several years, so listen to what they say to you.
Work as a programmer
Ok, you went through all the interview stages and got a job. Congratulations!
Now what? You need to realize a lot of interesting and not so things. Since we are programmers, let's focus on the discussion of the code.
It must meet the following criteria:
- Being readable, because the code is analyzed more often than they write. So your code should be readable and understandable both to you and to your colleagues.
- Reliable. You must be sure that all classes and methods are used correctly and will not cause the program to crash.
- Optimized. You should not be a perfectionist, but you still need to regularly review your code. You should always be prepared to do a little code optimization.
Here are a few things that you have to learn.
You will not program much.
Yes, it may seem strange, but you will spend much more time for:
- reading the code;
- meetings and writing e-mail / answers;
And let's talk about the skills that are important for the career of a programmer.
Debugging and reading code
- In order to become a pro in debugging, you need to decide on the appropriate tools. Most popular programming languages have the necessary tools for debugging. Check them out, learn how to use them, it will save you countless hours.
- Understand the foundation, the structure of the code base. You can learn code with tools like ReSharper, grep, or Sourcegraph.
- Study manuals. You will be surprised if you find out how few developers are studying technical documentation. As a result, many simply do not know how the software should work, which means that more time is spent on debugging. Just read the documentation - it will save you time.
Organization and planning
Since you have to communicate a lot with colleagues, plan and carry out tasks (and some at the same time), you need to be able to organize your time. This will help you:
- Todo / task. Your company, most likely, has a system of management of tasks and control of their implementation, but it does not hurt to start your own system. Use Trello, Todoist or something else.
- Notes. In the process of work, it is often necessary to memorize various necessary little things. It’s best to record them — for example, with Evernote, OneNote, and other tools.
- Graphics and visualization. It is best to evaluate the effectiveness of your work using tools such as Lucidchart, Visio and others.
When to use libraries?
Almost always. There is no need to reinvent the wheel again and again. In most cases, work without libraries leads to loss of time. Of course, this does not mean that you should remain in the dark about how to use algorithms or the structure of databases, because you need to understand how and where to use all this.
Standard libraries of most popular languages are extremely effective. Examine the documentation to better understand how to use them.
You should not be afraid to work with additional libraries if they help save time. It can be:
- Open-source libraries where you can evaluate the quality of the code.
- The libraries are licensed by MIT and BSD, you can use them without problems. Be careful about the GPL.
- Those that are already in use for a long time and have a wide range of possibilities.
- Supported - those that regularly receive updates.
- Used by other companies / projects, which may indicate their reliability.
This may sound trite, but you need to learn even while working, and also in your free time - every day. This helps online courses, books, blogs, as well as the second (third) education. Also it is worth paying attention to conferences and all sorts of workshops. Among the most well-known conferences, I would single out GOTO (general direction), Strange Loop (also general), PyCon (Python), CPPCon (C ++), DEF CON (security), Fluent (webdev).