Either you are currently a job seeker or not, as a web developer there are basic and advanced topics that you need to know. You need to know them in order to develop products of high quality that have a good performance and that use the fittest technologies.
In this article, we will go through my experience as a job seeker and we will review the most important things to learn in order to prepare our skill set and maximize the chances to get our dream job.
Before we start
There are two recommended articles to read before this article. They don't depend on each other.
One of the most popular questions in interviews is 'Tell me about something you built'. This is a question that you can practice in your home before the interview. Sometimes it's even hard to discuss this request without any preparation. You need to pick something that you built or a part in one of your projects which you know its details. You don't must to choose something that you implemented by yourself, but
As much as you implemented and understood more parts of the solution, the discussion about it will be easier and more natural
When you asked to do so you need to draw the main blocks of the architecture. It depends on how much it's big. If it's not so big you can draw the classes that you chose to use if there is. Otherwise, you can draw blocks of Micro-Services or other parts of the architecture. It's preferred to explain shortly the requests and the restrictions that you implemented the solution according to them. You need to be able to explain the flow of the process. For example, REST APIs that the service can serve.
This part of the interview can be evolved in some ways. You can be asked to implement some parts of the solution in details. You can be asked to suggest an improvement to the solution according to some new restrictions or information which the interviewer will give to you. For example, 'There are some points of failure in a big flow of your report generation, how can you cope with them?' or 'There is a massive operation that stuck other requests from being served, what can you do?'. Some of the answers can be 'implement a queue', 'do preprocessing', 'add scheduled tasks', 'add more instances of the service', and many more.
As you can see this part is very dynamic and can be flown to a lot of parts of knowledge and experience. With all of this, you need to remember that it's something you can practice and learn before the interview. My advice is to do so. Think about the solution, pros, cons, obstacles and restrictions that can appear. As such as you be more prepared for this part, you will have confidence and you will be less nervous. I like this kind of parts in interviews :)
Microservices and Microfrontends
When your team gets bigger and bigger, more difficulties appear in the project. It's not easy for developers to work on the same code base. For production purposes, you need to deploy only some part of your application, but in a monolith, you must deploy all the project. This is where Micro-Services get into your life. Microservices is an architectural style that structures an application as a collection of loosely coupled services. Each of those services can focus on sub-domain of the application.
This architecture enables the continuous delivery of large and complex applications. It also enables organizations to evolve their technology stack because each service is an autonomy and have a defined API for communication. Microservices improve fault isolation, eliminate long-term commitment to a single technology stack and make it easier for a new developer to understand specific parts of the application functionality.
As microservices in the backend, there are Microfrontends in the frontend. These concepts bring a lot of advantages to organizations. The world walks there, and in a lot of companies is already there. Demonstration of knowledge in these topics can add you some good points in the interview. It can show that you look at the big picture and this is something that companies are looking for. But if we are looking for a prioritization, I don't rank it as a high priority if you have other gaps in more important topics and you are not a senior developer. So, even if you don't know it, it's OK. It's nice to have.
It doesn't matter which of the frameworks do you know - it matters if you understand the principles behind them
A component encapsulates functionality and behaviors of a software element into a reusable and self-deployable binary unit. The architecture reduces the time to market and makes the developers' life easier. The code is more understandable. It's convenient to work on one application with more than one team. It's more reusable, replaceable, extensible and encapsulated. Component-based development isn't just the future of the web. It's what you should be doing now, in any application on the web.
AngularJS, Angular, React, React Fiber, Vue
SPA is in the front of the web development in the last years. A big part of the hallway conversations you do is about the main participant - Angular, React and Vue. SPA frameworks are predominant on the web. Therefore, it changes the web architecture, the software courses' syllabuses, and the high tech recruitment demands.
One of the major advantages of React and Vue is the Virtual DOM mechanism. The virtual DOM is a copy of the DOM which used to check what are the differences between the current DOM and the new output (new DOM) of the rendering process. React and Vue use this mechanism to render only the differences on the real DOM because the DOM operations are expensive. Therefore, this is a huge boost for application's performance.
More important facts to drill down to:
- Angular is backed by Google. React is backed by Facebook
- React and Vue are only view libraries. Angular is a whole platform
- React Fiber is a reimplementation of React's core algorithm
- Angular is so much different from AngularJS, that they get an attention as two different technologies
The wealth and various in technologies is one of the best things that is done in the web zone and we are part of it
Know how to speak about them in tech-talks is an advantage for a candidate. It's easy to understand if you quote slogans from blogs or you have an understanding of the whole picture. Knowing the evolution of these technologies is a good point to start.
When you use some library and you want to be able to replace it in the future, you use Adapter pattern. Angular's HTTP service is also a kind of Adapter. RxJS is one of Angular's dependencies. When you use RxJS' Subject/Observer/Subscribers you are making a use of Observer pattern.
And I really can go on. Design Patterns are everywhere
It's not something that stays in the university course and you can forget it. It is part of the things which make us good developers. If we use design patterns correctly, it makes our code more maintainable, readable, and scalable. My advice here is to know the common DPs and be sure you know how to implement at least three of them.
Algorithms, Data-Structures, and Riddles
If you are a junior developer without a web experience, this section is especially for you. When you don't have any experience in this field, most of the questions focus on the topic which learned in the university. Those topics can contain a various pull of algorithms and data-structure problems. I suggest building a good basis of sorting algorithms, problems like TSP, graphs, trees, search, recursion and dynamic programming.
As you keep reading you probably collecting some of buzzwords, terms, and topics which are less familiar to you. Write them on a side note and start to investigate them by the links which I attached in their paragraphs above. In the field of design patterns, be sure you know how to implement at least three of them.
The purpose of LeetCode is to provide you a hands-on training on real coding interview questions. The Online Judge gives you immediate feedback on the correctness and efficiency of your algorithm which facilitates a great learning experience. LeetCode helps you to level up your coding skills and quickly land a job. This is one of the best places to expand your knowledge and get prepared for your next interview. You can find questions on a lot of topics including Object Oriented Design, Operating System, Algorithms and Databases.
Codewars is a community of developers, which called Code Warriors (or just warriors), that train on improving their development skills. Think of it like a coding dojo - where developers train with each other and help each other to get better through practice. Codewars currently supports 21 languages, including Go, Clojure, Haskell and Typescript, and 11 languages in beta, including Kotlin, Groovy, R, and Scala.
Glassdoor is my favorite place to search for a position. You can read summary information, ranking, reviews and salaries about various companies from current and previous employees. In addition, you can find job interviews questions from hundreds of companies in a great user experience. I recommend you to enter and practice the relevant questions from the company you have an interview there. I also recommend to practice Facebook interview questions - there are a lot and they are interesting.
Interviews are something that you can prepare yourself for. The preparation can helps you to improve your self-confidence and can reminds you topics that you unusually use. It's recommended to take some time to do it, but you need to stay focused.