Дневник Senior iOS разработчика
Или "Стать Senior iOS разработчиком за 2.5 года"
Сейчас я работаю Джуном. Но я не хочу тут засиживаться. Тем более что на текущем месте я работаю по сути сам с собой. Никакого обучения кроме как самостоятельного тут нет. Нет CodeReview, нет ТимЛида и Сеньера. Есть просто приложение с дизайном и ты его полностью делаешь. И даже вопрос по архитектуре некому задать. Ну и хороший код я тоже не вижу на практике.
Есть много вариантов того, как разделают профессию по уровням и далеко не всегда понятно, а что все-таки отличает Senior'a от Джуна. Нужно примерно выделить основные моменты на которые я буду ориентироваться:
- Достаточное количество опыта работы со всеми основными технологиями под выбранную платформу. Чтобы он не гуглил каждый метод. Понятно, что выучить все нельзя, но уверенно знать фундамент и базовые фреймворки нужно обязательно.
- Понимание Computer Science в целом. Нужно понимать что и как работает под капотом, как устроена та или другая технология, какие идеи в это заложены. Знание Алгоритмов и Структур данных
- Понимание и применение разных практик по разработке ПО. Есть TDD, BDD, DDD, разные принципы и еще много чего.
- Умение разрабатывать архитектуру больших проектов, которые потом будут поддерживаться.
- Умение решить любую задачу в рамках платформы. А для этого нужно все выше перечисленное.
Это мои мысли и кто-то может не согласится. Но у меня выходит как-то так.
В целом я себе уже составил примерный список книг и курсов которые хочу пройти. Хотел чтобы было около 50 источников, но пока что насобирал примерно 25. Остальное наберу в процессе.
Примерно план такой:
- Углубляем знания в Computer Science: как все работает под капотом, как развивалась сфера. Что-то из этого я знаю, чего-то нет, о чем-то только слышал. Пока на примете одна книга + курс от Гарварда
- Алгоритмы и структуры данных. Читал одну простенькую книгу и статьи. Понятно, что все я не выучу и тем более не смогу писать все алгоритмы из головы, но я хочу ориентироваться в них. Потому что уже сталкивался с ситуациями когда (казалось бы) простое решение о выборе алгоритма дает разницу в производительности около 400%. Базовые вещи я знаю, но хочу нырнуть чуть поглубже, 2-3 книги, может быть какой-то курс (надо будет поискать от Гарварда или Стенфорда)
- Архитектура. Пока что не сильно ориентируюсь в этой теме. Что-то знаю, но не понимаю как это применить на практике. Почти все варианты так называемых "архитектур" для iOS под капотом не различаются и представляют собой по сути шаблон для работы с интерфесом. А это не имеет ничего общего с архитектурой приложения. В общем тема очень глубокая, и невероятно важная.
- Ну и все что связано с iOS.
- Многие вакансии требуют умения писать код на Objective-C, так как многие старые проекты написаны именно на нем. Читать его я уже научился. Теперь нужно научится на нем писать. В целом выучить язык не так сложно, пары недель должно хватить. Учитывая что все остальное остается без изменений (системные библиотеки и фреймворки).
- Понимание структуры приложений и основных компонентов. Есть неплохая книга на эту тему.
- Написание кастомных компонентов под разные задачи. Без этого в большом проекте скорее всего обойтись нельзя.
- Анимации, есть книга от Рея по этой теме. Без анимаций тоже никуда. Есть базовые вещи, которые я уже знаю. Но есть очень много продвинутых вещей которые предстоит изучить.
- Есть еще такая тема как реактивное программирование. Не могу сказать что я в восторге от этой идеи, но пощупать это хочу, чтобы лучше понимать.
- И еще 100500 вещей которые нужно выучить и пройти на практике.
Еще планирую выпустить несколько приложений. Идей есть много, но никак не начну их делать. А есть и такие, в которых есть ограничения. Например, есть несколько, для которых нужен бекенд. В целом не большая проблема, есть друзья которые могут помочь, или можно вспомнить свои приключения в JS и NodeJS. Или можно попробовать Питон или Го. Короче вариантов много. Но начну я с приложения без бека. А еще есть такие, где нужно много контента. Или нужно на старте какое-то количесвто юзеров.
Еще хочу пройти нынче популярный челлендж "100 дней кода" (https://www.100daysofcode.com/). Вот только врядли я буду использовать для этого Твиттер, но в Инсте такая тема тоже работает. Вижу много ребят кто ежедневно выкладывает посты с этим хештегом и отчитывается о своем прогрессе.
Еще (да сколько можно этих "Еще"?)
Нужно развивать себя как бренд. Профили в социальных сетях: пока что больше всего нравится Инста. Плюс ЛинкедИн обязательно, особенно это важно для зарубежных работодателей и заказчиков.
Свой сайт, пока что это скорее для галочки. Но потом там можно сделать блог, обучение какое-то, заметки и мысли. И свои проекты можно тут оформлять в виде лендингов для их рекламы.
Ну и гитхаб. Пока что не знаю что именно я могу туда заливать, но я придумаю. Как минимум есть пара идей для библиотечек, которые как я вижу, я буду применять в многих своих реальных приложениях.
Где-то в промежутках между другими пунктами буду ходить на собеседования. Как минимум на них весело ходить, ну и полезно узнать, чего я не еще не знаю. И зная в целом ситуацию по сфере - устроиться работать не сложно. Как говорит мой знакомый: "Главное не бросаться на острые предметы и не пить воду из лужи". Короче нужно быть адекватным. Ну и знать то, что ты делаешь.
One more thing! Несколько полезных вещей:
- Слепая печать на русском и английском 10 пальцами. Я могу печатать вслепую, но по "своей" методике. Пару месяцев назад активно занимался практикой, были хорошие результаты по скорости набора и точности, но потом я забросил и старые привычки вернулись. В общем хочу печатать 10 пальцами, чтобы прям руки по другому уже не умели.
- Английский. Куда без него разработчику? В целом я неплохо его понимаю, спокойно читаю и слушаю. Нужно это поддерживать и немного развивать. Ну обещаю что буду упорстовать по этой теме, но нужно помнить и регулярно что-то смортеть и читать на инглише.
Планирую писать раз в пару дней. Буду описывать что изучил, с чем познакомился. Какой прогресс идет по проектам. Просто свои мысли. Ссылки интересные, полезные статьи и прочее.
Чуть позже напишу пошаговый план, потому что задач много и сразу все не получится записать. Цель будет развиваться параллельно со мной.
Критерий завершения
Я работаю на позиции Senior iOS разработчик
-
Computer Science
Советовали пока только книгу "Теоретический минимум по computer Science" + нашел курс от Гарварда "CS50: Introduction to Computer Science". Еще знакомый говорил про неплохую книгу - как узнаю - запишу ее.
-
CS50: Introduction to Computer Science
-
Теоретический минимум по computer Science
-
Computer science an overview
-
Харольд Абельсон, Джеральд Джей Сассман «Структура и Интерпретация Компьютерных Программ»
-
-
iOS development
Тут книг достаточно, и курсов и туториалов. Но нужно копать глубже и докапываться до основ: как устроена система, как все работает под капотом, как работает иерархия классов и View.
-
Programming iOS 12., Deep dive into controllers, views
-
Data Structures & Algorithms in Swift | raywenderlich.com
-
Realm RayWenderlich
-
iOS animations RayWenderlich
-
Курс от Стенфорда по разработке на Swift
-
Objective c Programming - Big Nerd Guide
-
Apple WWDC 2017 - Session 230 - Advanced Animations with UIKit https://youtu.be/35_nNRtkc54
-
-
Алгоритмы и паттерны
Общая тема
-
Грокаем алгоритмы
-
«Паттерны проектирования», Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес
-
«Регулярные выражения», Джеффри Фридл ED
-
Томас Кормен, Чарльз Лейзерсон, Рональд Ривест и Клиффорд Штайн «Алгоритмы: построение и анализ»
-
Небольшой курс на сайте https://regexone.com
-
-
Архитектура и разработка в целом
Это пока что представляется самым сложным. Потому что тут нет однозначных правил. Есть только принципы, которые можно использовать и интерпретировать по разному. Некоторые книги в этой теме чисто практические, с примерами, другие более философские, или общего назначения.
-
Принципы, паттерны и методики гибкой разработки на языке C#
-
«Совершенный код. Мастер-класс» – Стив Макконнелл
-
Предметно ориентированный дизайн
-
Чистый код
-
Проектирование с применение UML 2.0
-
Бертран Мейер «Почувствуй класс. Учимся программировать хорошо с объектами и контрактами»
-
«Экстремальное программирование: разработка через тестирование», Кент Бек
-
Гради Буч «Объектно-ориентированный анализ и проектирование с примерами приложений»
-
М. Фаулер «Рефакторинг»
-
Э. Хант, Д. Томас «Программист-прагматик»
-
-
Прокачка своих аккаунтов
Как и говорил в описании, хочу целенаправленно развивать Инстаграм как социальную сеть. Плюс, поддерживать в актуальном состоянии профиль на Линкеде и ГитХабе. В идеальном варианте на Гит еще что-то регулярно заливать и обновлять.
-
100 дней кода
Каждый день на протяжении 100 дней минимум 1 час в день писать ко. Более подробно распишу когда решу начать этот челлендж.
-
Разработка своих приложений
Пока что не выбрал что именно я хочу написать. но задача до конца года (2019) выпустить минимум 2 приложения. Скорее всего это будет что-то на тему целей, привычек, самоанализа. Люблю эту тему и хочу делать полезные приложения. Хотя с точки зрения рынка и пользователей я могу быть не прав и в итоге пролечу с такими идеями)
-
Слепая печать 10 пальцами
На стабильной скорости выше 300 символов в минуту. В целом это не так быстро как кажется. Пока что просто печатаю в сплепую 15 минут каждый день на английском, нужно будет на русском тоже начать.
-
На английском 300 знаков в минуту
-
На русском 300 знаков в минуту
-
На английском 400 знаков в минуту
-
- 1593
- 17 марта 2019, 18:38
Не пропустите новые записи!
Подпишитесь на цель и следите за ее достижением