Agil Gadzhiev, Senior iOS developer at Kotelov, tells how to start looking for a job: how to draw up a CV, whether it’s worth faking experience, and most importantly, what you should focus on in order to stand out from other candidates.
Getting off the ground
iOS development is not about high barriers to entry. Below are recommendations to get started.
Master the basics. Don’t waste your time searching for the perfect course or program—you can master the basics using free platforms. For instance, videos on The Swift Developers channel are a good way to learn Swift, and you can also read Stanford courses. Apple documentation is a decent source of information as well, we recommend to use the translation on swiftbook.ru.
Create a pet project. This will help you bring the knowledge into focus. You can pick a common idea like a task tracker, news parser or calorie counter, or come up with your own one. Overall, don’t get too creative on your first project, as its goal is to practice in coding.
Learn the theory. This refers to topics that will definitely be raised on a technical interview and are essential for working even in starting positions. Such topics and places to study them are listed further in the article.
You can prepare on your own, but it’s better to find a mentor for a few months: this will help you stay on track and avoid stupid mistakes that all juniors make. This does not mean you cannot prepare on your own, but it will be faster and easier with a mentor.
What you need to learn to stand out in an interview
Below is the list of things a beginner in iOS development needs to know to rock a technical interview:
As a caveat from the outset, you don’t have to know 100% of everything listed below. These are the knowledge and skills of the perfect candidate in a perfect world: most likely, the requirements will vary depending on the customer. However, these are the topics that will make you stand out among hundreds of other juniors.
ARC, Automatic Reference Counting
Memory management is a common topic in interviews. You need to demonstrate not just your theoretical knowledge, but also the ability to apply it in practice.
Indeed, on the one hand, a junior doesn’t have to know how ARC works under the hood. On the other hand, understanding the issues that are usually asked only to middle developers will help you build yourself up in an interview.
What you need to know:
- reference types: weak, unowned, strong;
- how an object retains in memory, and when it releases;
- what a reference counter is; and
- how to solve the retain cycle problem.
Most likely, you will be asked about the difference between weak and unowned references. In rare cases, the conversation may turn to side tables—if you manage to explain why this mechanism was added to Swift, you will show yourself favorably.
GCD and multithreading
This is an important topic, and its knowledge will earn you extra credit. Here’s a summary of what you need to know:
— multithreading, asynchronicity, thread, process. The former two are rarely asked, but it’s better to learn them once and have them in your pocket; besides, it’s not that difficult;
— a queue over GCD, as opposed to a thread;
— types of queues in GCD;
— a quality-of-service (QoS) class: you need to understand when and why it is used;
— multithreading problems: there are many, but three major will suffice: deadlock, race condition and priority inversion. You need to understand when these problems arise and be able to solve them;
— thread safety and synchronization methods in iOS (barriers, semaphores, mutex: there are more, but these should suffice); and
— DispatchGroup, DispatchWorkItem and what they are for.
UIKit
Although Apple is slowly transiting development to SwiftUI, most apps still use UIKit. Therefore, there are much more jobs that require knowledge of this framework.
Here are the topics you should know:
— ViewController life cycle;
— Auto Layout workflow;
— how to design screens with code; and
— TableView and CollectionView.
General questions
— SOLID: describer each letter meaning with examples.
— OOP: describe all the concepts with examples.
— Value vs Reference types: you need to understand which types belong to Value and which belong to Reference; what is stored in the heap and what is in the stack; you also need to be able to provide examples of exceptions to these rules.
— Structures vs classes: you need to be able to list all the differences.
— Copy on write: definition, purpose, what types are supported by default, and how you can use this principle on your own.
— hitTest: before, juniors weren’t asked about touch processing, but now this topic comes up in interviews. It would be useful to understand how touch skipping works and what the point(inside:with:) method is used for.
— Dispatching: definition, types of dispatching in Swift.
— Basic architectural patterns and algorithms: understand how MVP, MVC, and MVVM are structured, be able to name their similarities and differences.
The most important: your CV
We made several videos and tutorials about the proper CV creation, so let’s skip this part, but here’s what’s important to know:
List your achievements, not the process. Instead of “was doing, developing, programming,” it is better to word it as “have created, implemented, invented, and developed.” It is important for everyone to see the outcome of your work. The perfect way to describe the result is in numbers—for example, “I have speeded up screen loading by n%.”
Tell about your pet projects. If you are looking for your first job, make sure your mentioned your pet projects, but do not insert links to unfinished ones. Store your pet projects on GitHub.
Write cover letters. You don’t want to drop out because a company only considers CVs with cover letters? But don’t spend too much time on this: prepare a couple of good templates and change 1–2 paragraphs for each company.
What about fake experience in your CV?
This is a dicey topic, so let’s consider possible pros and cons.
There are few vacancies for juniors on the market, which forces many applicants to fake or round up their experience to attract recruiters. Some developers and HRs do not consider this a problem, because it will reveal at the interview stage: if you are not good enough, you won’t pass it. One the other hand, if you got a job offer, it means you have enough skills to cover the lack of experience. That’s why, if you’re tired of your CV getting overlooked, you can add some experience and come to the interview perfectly ready to prove your experience.
We talked about how recruiters view this on the podcast with Anna Afonina.
Mentoring
Mentor is not a must have for everyone. You can learn almost any technology without anyone’s help having invested some time in it. Here is how mentoring will help you on your way to your first job:
- Control. Many people need an extra kick to start doing something—this is what a mentor is perfect at.
- Saving time on studying. A mentor will be able to immediately tell you what you need to learn right now and what to postpone. A good mentor doesn’t just send you links to content but analyzes questions from scratch to the interview level.
- Support. You will always have someone to ask for help, even in your free time. At first you may face issues that take you several hours to solve, but an experienced person could cope with them in a couple of minutes—in this case, you can ask a mentor.
- Customized approach. Mentoring involves tailoring a program specifically to your needs, with due consideration of your abilities. A training system built this way helps not to drop studies when facing your first difficulty.
The only drawback is cost. However, you will be able to cover these expenses with your first IT paycheck. Therefore, everyone makes their decision: to move on their own or seek help.