├── .gitignore ├── .github ├── scripts │ ├── exclude_paths.txt │ ├── custom.markdownlint.jsonc │ ├── spell_check.py │ └── exceptions.txt └── workflows │ └── content_validation.yml ├── README.md ├── LICENSE ├── CONTRIBUTING.md ├── qa ├── web-interview.md └── mobile-roadmap.md ├── managers └── roadmap.md └── mobile-developers ├── roadmap-android.md └── roadmap-ios.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store -------------------------------------------------------------------------------- /.github/scripts/exclude_paths.txt: -------------------------------------------------------------------------------- 1 | .git/ 2 | .github/ 3 | .gitignore 4 | LICENSE -------------------------------------------------------------------------------- /.github/scripts/custom.markdownlint.jsonc: -------------------------------------------------------------------------------- 1 | /* 2 | Документация по кодам ошибок 3 | https://github.com/DavidAnson/markdownlint/tree/v0.37.4/doc 4 | */ 5 | 6 | { 7 | "MD013": false, 8 | "MD024": false, 9 | "MD033": false 10 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Привет! На связи Контур 2 | 3 | Собрали материалы, которые позволят узнать о нашей внутренней кухне и подскажут, как начать путь в новой профессии. Этой информацией делимся с коллегами по цеху или новичками в профессии. 4 | 5 | --- 6 | 7 | Контур – это IT-компания. Мы делаем продукты для бизнеса, предоставляя удобные и надежные сервисы, помогаем нашим клиентам добиваться успеха в своей деятельности. У нас есть электронный документооборот, коммуникации, банк, автоматизация бизнеса, электронная отчетность, учет и ещё 50+ продуктов. 8 | 9 | ## Будем на связи 10 | 11 | - [tech.kontur.ru](https://tech.kontur.ru) 12 | - [habr.com/skbkontur](https://habr.com/ru/companies/skbkontur) 13 | - [youtube.com/@KonturTech](https://youtube.com/@KonturTech) 14 | - [tg/@KonturTech](https://t.me/KonturTech) 15 | - [kontur.ru](https://kontur.ru) 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Kontur 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/content_validation.yml: -------------------------------------------------------------------------------- 1 | name: Linter 2 | 3 | on: 4 | push: 5 | branches: 6 | - '*' 7 | pull_request: 8 | branches: 9 | - 'main' 10 | 11 | jobs: 12 | markdown_check: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v4 16 | 17 | - uses: DavidAnson/markdownlint-cli2-action@v19 18 | with: 19 | config: '.github/scripts/custom.markdownlint.jsonc' 20 | globs: '**/*.md' 21 | 22 | links_check: 23 | runs-on: ubuntu-latest 24 | steps: 25 | - uses: actions/checkout@v4 26 | 27 | - name: Run linkspector 28 | uses: umbrelladocs/action-linkspector@v1 29 | with: 30 | filter_mode: nofilter 31 | fail_on_error: true 32 | 33 | spell_check: 34 | runs-on: ubuntu-latest 35 | steps: 36 | - name: Checkout code 37 | uses: actions/checkout@v4 38 | 39 | - name: Set up Python 40 | uses: actions/setup-python@v4 41 | with: 42 | python-version: '3.x' 43 | 44 | - name: Install dependencies 45 | run: | 46 | python -m pip install --upgrade pip 47 | pip install pyenchant 48 | pip install names 49 | sudo apt-get install -y aspell-ru hunspell-ru 50 | 51 | - name: Run spell checker 52 | run: | 53 | python .github/scripts/spell_check.py -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Внесение изменений в документы 2 | 3 | ## Что предлагать 4 | 5 | Принимаются корректировки опечаток. 6 | 7 | Мы рады предложениям по добавлению новых источников, актуализации существующих или удалению устаревший. Такие предложения оцениваются коллективом авторов, который оставляет за собой права отказать в принятии изменений. 8 | 9 | ## Как предлагать 10 | 11 | - Зарегистрируйтесь на [GitHub](https://github.com/). 12 | 13 | - Откройте в браузере документ, в который собираетесь внести изменения. 14 | 15 | - Нажмите кнопку редактирования `Edit this file`. 16 | 17 | - В открывшемся редакторе внесите изменения в файл. Вы всегда можете переключиться между режимом редактирования и просмотра кнопками `Edit` и `Preview`. 18 | 19 | - Сохраните изменения, нажав `Commit changes`. 20 | 21 | - В открывшемся окне: 22 | - Напишите сообщение в поле `Commit message`; 23 | - Создайте новую ветку, выбрав `Create a new branch for this commit and start a pull request`; 24 | - Дайте название ветке. 25 | 26 | - Сохраните изменения через кнопку `Propose changes`. 27 | 28 | - На открывшейся странице нажмите `Create pull request`. 29 | 30 | ### Ветки 31 | 32 | Ветки создавать от `main`. В названии ветки укажите тип действия `update` и через дефис `название изменяемого файла` 33 | 34 | ### Commit 35 | 36 | В описании к `Commit` укажите краткое резюме вносимых изменениях. Допускается на русском языке. 37 | 38 | ### Pull request 39 | 40 | Изменения проверит кто-то из автора проекта. После одобрения изменения попадут в ветку `main`. 41 | 42 | ### Markdown 43 | 44 | Наши документы используют язык разметки [Markdown](https://ru.wikipedia.org/wiki/Markdown). Если вы не работали в markdown, то быстро научитесь. [Ознакомьтесь с синтаксисом](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet). 45 | 46 | Для проверки корректности синтаксиса markdown в Visual Studio Code рекомендуем использовать расширение [markdownlint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint). Запуск проверки синкаксиса `Ctrl+Shift+M` или `⇧+⌘+M`. 47 | 48 | Перейти в Markdownlint: Config. В настройках расширения дополнительно указать: 49 | 50 | ```json 51 | "markdownlint.config": { 52 | "MD013": false, 53 | "MD024": false, 54 | "MD033": false 55 | } 56 | ``` 57 | 58 | ### GitHub Actions 59 | 60 | Работоспособность ссылок в документах проверяются через [action-linkspector](https://github.com/UmbrellaDocs/action-linkspector). Синтаксис markdown – через [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2). Орфография – через python-скрипт. 61 | 62 | Проверки запускаются при команде `Push` в рабочую ветку или `main` или при `Pull Request` в ветку `main`. Информация о проверке выводится на странице `Pull Request` или на вкладке Actions. 63 | -------------------------------------------------------------------------------- /qa/web-interview.md: -------------------------------------------------------------------------------- 1 | # Собеседование в Контур 2 | 3 | ## Что будет 4 | 5 | ### Переписка или короткий звонок с HR 6 | 7 | HR-менеджер свяжется, чтобы узнать ваши ожидания от новой работы — нам важно, чтобы новичкам было комфортно и интересно в Контуре. 8 | 9 | ### HR-интервью (60 мин.) 10 | 11 | Познакомимся поближе, обсудим ваш опыт и в конце ответим на вопросы про компанию, технологии и задачи. 12 | 13 | На интервью 14 | 15 | - Обсудим проекты, в которых вы работали. Нам интересно узнать о команде, ваших задачах и роли в них. 16 | - Узнаем ваши ожидания от работы. Выясним, что для вас важно, что драйвит, а что демотивирует. 17 | 18 | ### Тестовое задание 19 | 20 | После встречи с HR мы можем предложить сделать тестовое домашнее задание — на ручное тестирование или на автоматизацию, если у вас есть такой опыт. Задание можно решить в спокойном режиме, в среднем кандидаты выполняют его в течение трех дней. 21 | 22 | ### Техническое собеседование (90 мин.) 23 | 24 | На встрече будет один-два опытных тестировщика. 25 | 26 | - Подробнее поговорим про опыт с технической точки зрения: стек, инструменты, примеры влияния на процессы тестирования. 27 | - Разберем задачу на ручное тестирование. Нужно будет ненадолго пошарить экран, чтоб мы понимали ход ваших мыслей. 28 | - Прочитаем автотест, если у вас уже был такой опыт. 29 | 30 | ### Онлайн-знакомство с командой 31 | 32 | В Контуре 120+ команд разработки и все они разные. После успешного технического собеседования мы предложим вам познакомиться с командой, которая больше всего вам подойдет. На встрече будет уже знакомый вам HR, руководитель тестировщиков Контура и несколько ребят из команды. 33 | 34 | На встрече обсудите особенности конкретного сервиса, ваши и командные ценности. Вы сможете понять, подходит ли вам эта команда, зажигают ли задачи, которые она решает. Интервью займет до 1,5 часов. 35 | Если искры с первой командой не случится, мы подберем для вас другую и пригласим на знакомство. 36 | 37 | --- 38 | 39 | ## Как подготовиться 40 | 41 | ### Организуйте комфортную обстановку 42 | 43 | - Выделите достаточно времени на встречу 44 | - Постарайтесь обеспечить себя стабильным интернетом, комфортным и тихим местом для интервью 45 | - Приготовьтесь поделиться экраном компьютера — пройти собеседование с телефона не получится 46 | 47 | ### Приготовьтесь рассказать про ваш опыт, освежите теоретические знания 48 | 49 | #### Нам интересно узнать про 50 | 51 | - Стек технологий и инструменты, с которым вы работали 52 | - Опыт, демонстрирующий ваши навыки и достижения 53 | - Сложные ситуации, с которыми вы сталкивались и то, как получилось или не получилось их преодолеть 54 | - Внепроектные активности 55 | - Если у вас есть опыт в автоматизации тестирования, поговорим о ваших проектах и использованных технологиях 56 | 57 | ### Рекомендуем посмотреть и почитать 58 | 59 | #### Книги 60 | 61 | - Роман Савин. Тестирование dot com 62 | - Сэм Канер. Тестирование программного обеспечения 63 | - Джефф Каролло, Джейсон Арбон. Как тестируют в Google 64 | - Ли Коуплэнд. Практическое руководство по тест-дизайну 65 | - Борис Бейзер. Тестирование черного ящика. Технологии функционального тестирования программного обеспечения и систем 66 | - Хенрик Книберг. Scrum и XP: заметки с передовой 67 | 68 | Ещё есть хорошая подборка переведённых книжек на портале [software-testing](https://software-testing.ru/books/testing-books?layout=default). 69 | 70 | #### Ресурсы и статьи 71 | 72 | - [Материалы ISTQB](https://www.rstqb.org/ru/istqb-downloads.html) — учебный план и словарь терминов 73 | - [TestBase](https://testbase.ru/) — карта «Что должен уметь начинающий тестировщик» 74 | - [Software-Testing.ru](http://Software-Testing.ru) — портал тестировщиков, форум для общения, полезные статьи 75 | - [Практические площадки-песочницы для QA-тренировки](https://habr.com/ru/articles/906152/) 76 | - [Полное руководство по всем видам тестирования](https://habr.com/ru/companies/otus/articles/923480/) 77 | - [Освоение тестирования REST API](https://quality-lab.ru/blog/rest-api-testing/) 78 | - [Настройка TeamCity для новичков](https://habr.com/ru/companies/skbkontur/articles/205402/) 79 | 80 | #### Курсы 81 | 82 | - [Тестирование ПО на Ulearn](https://ulearn.me/Course/testing-2022/Znakomstvo_41b8e6be-7800-4c4a-9f5a-6f91dd8546cd) 83 | 84 | С нетерпением ждём встречи. 85 | -------------------------------------------------------------------------------- /.github/scripts/spell_check.py: -------------------------------------------------------------------------------- 1 | import os 2 | import enchant 3 | import re 4 | import sys 5 | import names # Используем библиотеку для распознавания имен 6 | 7 | # Укажите папку с файлами для проверки 8 | FILES_DIR = "./" 9 | 10 | # Файлы конфигурацииå 11 | EXCEPTIONS_FILE = ".github/scripts/exceptions.txt" # Список слов-исключений 12 | EXCLUDE_PATHS_FILE = ".github/scripts/exclude_paths.txt" # Список файлов/папок для исключения 13 | 14 | # Регулярное выражение для извлечения слов из текста 15 | WORD_REGEX = re.compile(r'\b\w+\b', re.UNICODE) 16 | 17 | # Регулярное выражение для обнаружения ссылок (URL) — улучшенное 18 | URL_REGEX = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', re.UNICODE) 19 | 20 | # Инициализация словарей для английского и русского языков 21 | en_dict = enchant.Dict("en_US") 22 | ru_dict = enchant.Dict("ru_RU") 23 | 24 | def load_exceptions(file_path): 25 | """ 26 | Загружает список слов-исключений из указанного файла. 27 | """ 28 | try: 29 | with open(file_path, 'r', encoding='utf-8') as f: 30 | return set(word.strip() for word in f if word.strip()) 31 | except FileNotFoundError: 32 | print(f"Exceptions file not found: {file_path}") 33 | return set() 34 | 35 | def load_exclude_paths(file_path): 36 | """ 37 | Загружает список исключённых файлов и папок. 38 | """ 39 | try: 40 | with open(file_path, 'r', encoding='utf-8') as f: 41 | return set(path.strip() for path in f if path.strip()) 42 | except FileNotFoundError: 43 | print(f"Exclude paths file not found: {file_path}") 44 | return set() 45 | 46 | def is_excluded(file_path, exclude_paths): 47 | """ 48 | Проверяет, исключён ли файл или папка из проверки. 49 | """ 50 | for exclude_path in exclude_paths: 51 | # Проверяем совпадение с файлом или вложенность папки 52 | if file_path.startswith(exclude_path): 53 | return True 54 | return False 55 | 56 | def is_url(word): 57 | """ 58 | Проверяет, является ли слово ссылкой (URL). 59 | """ 60 | return bool(URL_REGEX.match(word)) 61 | 62 | def is_name(word): 63 | """ 64 | Проверяет, является ли слово вероятным именем. 65 | """ 66 | return names.get_first_name() == word # Простое сравнение с именем, можно улучшить 67 | 68 | def remove_urls(text): 69 | """ 70 | Удаляет все URL из текста. 71 | """ 72 | return re.sub(URL_REGEX, "", text) 73 | 74 | def check_spelling(file_path, exceptions): 75 | """ 76 | Проверяет орфографию в указанном файле, пропуская слова-исключения, ссылки и имена. 77 | """ 78 | errors = [] 79 | with open(file_path, 'r', encoding='utf-8') as f: 80 | lines = f.readlines() 81 | for line_number, line in enumerate(lines, start=1): 82 | # Удаляем URL из строки 83 | cleaned_line = remove_urls(line) 84 | 85 | # Извлекаем слова из очищенной строки 86 | words = WORD_REGEX.findall(cleaned_line) 87 | for word in words: 88 | # Пропускаем имена, слова-исключения 89 | if is_name(word) or word in exceptions: 90 | continue 91 | if not (en_dict.check(word) or ru_dict.check(word)): 92 | errors.append((line_number, word)) 93 | return errors 94 | 95 | def main(): 96 | """ 97 | Основная функция для проверки всех файлов. 98 | """ 99 | # Загрузка исключений и путей 100 | exceptions = load_exceptions(EXCEPTIONS_FILE) 101 | exclude_paths = load_exclude_paths(EXCLUDE_PATHS_FILE) 102 | 103 | print(f"Loaded {len(exceptions)} word exceptions.") 104 | print(f"Loaded {len(exclude_paths)} excluded paths.") 105 | 106 | # Флаг для отслеживания наличия ошибок 107 | error_found = False 108 | 109 | # Проверка файлов 110 | for root, _, files in os.walk(FILES_DIR): 111 | for file in files: 112 | file_path = os.path.join(root, file) 113 | relative_path = os.path.relpath(file_path, start=".") 114 | if is_excluded(relative_path, exclude_paths): 115 | print(f"Skipping excluded file: {relative_path}") 116 | continue 117 | 118 | print(f"Checking file: {relative_path}") 119 | errors = check_spelling(file_path, exceptions) 120 | if errors: 121 | print(f"Found errors in {relative_path}:") 122 | for line, word in errors: 123 | print(f" Line {line}: {word}") 124 | error_found = True 125 | print() 126 | 127 | 128 | # Если найдены ошибки, завершить с кодом 1 129 | if error_found: 130 | print("Spell check found errors. Exiting with failure.") 131 | sys.exit(1) 132 | else: 133 | print("No spelling errors found.") 134 | sys.exit(0) 135 | 136 | if __name__ == "__main__": 137 | main() -------------------------------------------------------------------------------- /.github/scripts/exceptions.txt: -------------------------------------------------------------------------------- 1 | автотест 2 | Адизес 3 | Адпативный 4 | активити 5 | Активити 6 | акторами 7 | акторов 8 | акторы 9 | Алистер 10 | Алферов 11 | Андерсон 12 | Антихрупкость 13 | Апелло 14 | Арбон 15 | архитектур 16 | архитектурам 17 | Ахметчанов 18 | багов 19 | Баранцев 20 | Батырев 21 | БД 22 | Бейзер 23 | Беркун 24 | Блек 25 | брейкпоинты 26 | Бреслав 27 | бумерам 28 | Вигерс 29 | Видеоурок 30 | Внепроектные 31 | вовлеченности 32 | Высокоуровневые 33 | Гайдлайны 34 | гайдлайны 35 | Гайды 36 | Голдратт 37 | Даниэль 38 | дебаг 39 | девайсов 40 | девайсы 41 | Дейв 42 | ДеМарко 43 | десериализация 44 | Джедайские 45 | Джейсон 46 | дженерики 47 | Джефф 48 | Джонсон 49 | Джошуа 50 | Дэвид 51 | Дэниел 52 | Жемеров 53 | Зонова 54 | зумеров 55 | Ильяхов 56 | Ильяхов 57 | Ицхак 58 | Канбан 59 | Канеман 60 | Карен 61 | Кейнер 62 | Книберг 63 | Коберн 64 | компетенций 65 | консистентности 66 | Канер 67 | Каролло 68 | Контур 69 | Коуплэнд 70 | Купер 71 | Ларсен 72 | Ларсон 73 | Ленгольд 74 | Ленсиони 75 | Логан 76 | логирование 77 | Логирование 78 | Ложечкин 79 | лямбды 80 | Майнд 81 | Миддл 82 | многопоточное 83 | Многопоточность 84 | мобилок 85 | Мэнсон 86 | мэпок 87 | налажать 88 | Нассим 89 | Нефункциональные 90 | обфускация 91 | ООП 92 | опциональная 93 | опциональные 94 | Орлова 95 | паттерн 96 | Паттерн 97 | паттернов 98 | паттерны 99 | Паттерны 100 | Паттон 101 | Пермишены 102 | Пименов 103 | подкаст 104 | подкастами 105 | Подкасты 106 | подтема 107 | Поппендик 108 | Потапова 109 | Поттер 110 | прокси 111 | проксимэн 112 | протокольно 113 | Пуш 114 | расшарить 115 | Рекс 116 | репозиториев 117 | репозиторием 118 | репозиторий 119 | рефакторинг 120 | рефакторинга 121 | роадмэпы 122 | Русова 123 | Савин 124 | Сазерленд 125 | Селиховкин 126 | семантичных 127 | сервис 128 | сервисов 129 | сервисы 130 | Сервисы 131 | сериализация 132 | синкаксиса 133 | скиллы 134 | Скрам 135 | Скриншот 136 | скриншот 137 | сниффер 138 | снифферами 139 | снифферов 140 | Снифферы 141 | сущностей 142 | Талеб 143 | Талеб 144 | Телеграм 145 | тестировщик 146 | тестировщика 147 | тестировщикам 148 | тестировщики 149 | тестировщиков 150 | Технополисе 151 | тимлида 152 | Тодд 153 | Туториалы 154 | УАЗ 155 | Уилл 156 | фасилитатора 157 | фасилитация 158 | Фасилитация 159 | Фаулер 160 | Фитцпатрик 161 | фич 162 | фичи 163 | фреймворк 164 | фреймворка 165 | фреймворках 166 | фреймворки 167 | фреймворков 168 | Хабре 169 | Хадсона 170 | Хенрик 171 | хостинги 172 | Шароватов 173 | Элиезер 174 | Эльяху 175 | Эмпатия 176 | эмулировать 177 | эмулирует 178 | Эстер 179 | Юдковский 180 | Юрген 181 | Яндекс 182 | ЯП 183 | Activity 184 | AgileDays 185 | Alamofire 186 | Android 187 | Android API 188 | Android App 189 | Android Jetpack Compose 190 | Android SDK 191 | Android Studio 192 | AndroidManifest 193 | AOSP 194 | API 195 | App Bundle 196 | App Clip 197 | App Store Connect 198 | AppDelegate 199 | AppDrive 200 | AppExtension 201 | AppGallery 202 | AppKit 203 | Apple Pay 204 | AppMetrica 205 | ARKit 206 | ArrayDeque 207 | ArrayList 208 | AssertJ 209 | async 210 | Atlassian 211 | AutoLayout 212 | AVFoundation 213 | Avito 214 | AvitoTech 215 | AWS 216 | Back-End 217 | Base64 218 | BigData 219 | Bootstrap 220 | BORSHEV 221 | C++ 222 | cтандартная 223 | cтруктурированный 224 | CameraX 225 | Carthage 226 | Cheatsheet 227 | Chet 228 | ChildViewController 229 | Chucker 230 | CI/CD 231 | CLI 232 | cli2 233 | Cloud 234 | CloudKit 235 | Cocoa Touch 236 | Cocoapods 237 | CocoaPods 238 | Codable 239 | CodeReview 240 | CodeWars 241 | CodinGames 242 | config 243 | Config 244 | ContentProvider 245 | CoreAnimation 246 | CoreData 247 | CoreGraphics 248 | CoreML 249 | coroutines 250 | Crashlogs 251 | CSS 252 | CSS3 253 | Ctrl 254 | CusDev 255 | D8 256 | Dagger 257 | Dagger2 258 | Database 259 | Databinding 260 | Debug 261 | Demistify 262 | detekt 263 | Dev 264 | Devcolibri 265 | devcrowd 266 | Django 267 | Docker 268 | DOM 269 | Doubletapp 270 | Eckel 271 | ElasticSearch 272 | Encryption 273 | Entity 274 | enum 275 | Enum 276 | EnvironmentObject 277 | Erlang 278 | ES6 279 | EventEmitter 280 | ExoPlayer 281 | Fastlane 282 | FDD 283 | FEDOR 284 | Firebase 285 | flatMap 286 | FlowController 287 | Flutter 288 | forEach 289 | Formatters 290 | Fragment 291 | GameKit 292 | Genymotion 293 | getOrElse 294 | Git 295 | GitHub 296 | GitLab 297 | gradle 298 | Gradle 299 | GraphQL 300 | groupBy 301 | Haase 302 | habr 303 | Hashable 304 | HashMap 305 | HashSet 306 | HealthKit 307 | HTML 308 | Huawei 309 | iCloud 310 | Intent 311 | Intruments 312 | io 313 | iOS 314 | iOS SDK 315 | iOS Simulator 316 | Isakova 317 | iTunes Connect 318 | JavaScript 319 | Jetpack 320 | json 321 | JSON 322 | ISTQB 323 | JTBD 324 | JUnit 325 | JVM 326 | Kakao 327 | Kaspresso 328 | Keychain 329 | Keystore 330 | KMP 331 | Knott 332 | Koin 333 | kontur 334 | Kontur 335 | KonturTech 336 | Kotlin 337 | Kotlin Coroutines 338 | ktlint 339 | Lambda 340 | LAMP 341 | LeakCanary 342 | LeSS 343 | lifecycle 344 | Lifecycle 345 | LinkedHashMap 346 | LinkedList 347 | linkspector 348 | Linux 349 | LiveData 350 | LLDB 351 | Logcat 352 | Lottie 353 | macOS 354 | MainActor 355 | Manifest 356 | MapKit 357 | Marcin 358 | markdownlint 359 | Markdownlint 360 | Material Design 361 | Mattt 362 | Maven 363 | MD013 364 | MD024 365 | MD033 366 | Metal 367 | MobileApps 368 | Mockito 369 | Mockk 370 | MongoDB 371 | Moskala 372 | Moya 373 | Multiplatform 374 | MVC 375 | MVI 376 | MVP 377 | MVVM 378 | NDK 379 | Nield 380 | Node.js 381 | NoSQL 382 | NSHipster 383 | NSManagedObject 384 | NSPredicate 385 | NSURLConnection 386 | NSURLSession 387 | NSUserDefaults 388 | nv 389 | OAuth 390 | objc 391 | Objective-C 392 | ObservedObject 393 | OkHttp 394 | OOP 395 | OpenAPI 396 | orEmpty 397 | otg 398 | Ousterhout 399 | plist 400 | Pluralsight 401 | PMBOK 402 | Podlodka 403 | PostgreSQL 404 | ProDev 405 | Proguard 406 | ProGuard 407 | Proxyman 408 | PureSwift 409 | Push Notifications 410 | PushKit 411 | R8 412 | Raywenderlich 413 | React 414 | React Native 415 | ReactJS 416 | Readme 417 | rebase 418 | RecyclerView 419 | Redmadrobot 420 | REST 421 | RESTful 422 | roadmap 423 | Roadmap 424 | Roadmaps 425 | Ronan 426 | Room 427 | ru 428 | Ruby 429 | Ruby on Rails 430 | RuStore 431 | RxCocoa 432 | RxJava 433 | RxSwift 434 | RxSwift 435 | SAFe 436 | SceneKit 437 | ScrumTrek 438 | SDK 439 | SDK Manager 440 | seanallen 441 | sendable 442 | SharedPreferences 443 | SiriKit 444 | skbkontur 445 | SkillBranch 446 | Smartreading 447 | Smyth 448 | sparrowcode 449 | Spring 450 | SQL 451 | SQLDelight 452 | Srategy 453 | SSH 454 | stackoverflow 455 | StateObject 456 | Stetho 457 | Storyboard 458 | Svetlana 459 | Swift 460 | Swift Package Manager 461 | SwiftBook 462 | SwiftData 463 | SwiftfulThinking 464 | SwiftUI 465 | t_repeat_yourself 466 | TaskGroup 467 | TaskPriority 468 | TaskSequence 469 | TDD 470 | TeamCity 471 | TeamLead 472 | TechLead 473 | TechSparks 474 | TestBase 475 | TestFlight 476 | TestLab 477 | tg 478 | ThreeTenABP 479 | UI 480 | UI/UX 481 | UIButton 482 | UICollectionView 483 | UIHostingConfiguration 484 | UIHostingController 485 | UIKit 486 | UIKit 487 | UILabel 488 | UINavigationController 489 | UISplitViewController 490 | UIStackView 491 | UITableView 492 | UITextField 493 | UIView 494 | UIViewController 495 | UIViewControllerRepresentable 496 | UIViewRepresentable 497 | Ulearn 498 | URL 499 | URLSession 500 | UserDefaults 501 | UUID 502 | VCS 503 | ViewBuilder 504 | ViewControllers 505 | ViewModel 506 | ViewModifier 507 | VPN 508 | Vue.js 509 | WatchKit 510 | WatchOS 511 | websocket 512 | WebSocket 513 | WebSockets 514 | whatsnewinswift 515 | WidgetKit 516 | wikipedia 517 | WWDC 518 | XCode 519 | Xcode 520 | XCTest 521 | XMind 522 | xml 523 | Xml 524 | XML 525 | YAGNI 526 | YAML 527 | Yandex 528 | yaspeller 529 | youtube 530 | Youtube 531 | Youtube 532 | -------------------------------------------------------------------------------- /managers/roadmap.md: -------------------------------------------------------------------------------- 1 | # Что почитать менеджеру разработки 2 | 3 | Эти материалы не претендуют на вселенскую истину. Мы составили сборник рекомендаций на основе опыта наших коллег. Мы понимаем, что каждый человек уникален, и то, что работает для одного, может не подойти другому. 4 | 5 | Часть наших коллег обучалась по этим материалам, и они нашли в них полезные советы и ресурсы. Однако, мы призываем вас критически оценивать каждую рекомендацию и адаптировать ее под свои нужды и контекст. 6 | 7 | Удачи в вашем профессиональном развитии! 8 | 9 | --- 10 | 11 | На наш взгляд ключевые навыки профессии менеджера разработки лежат в организации процессов производства, ответственности за коллектив людей, развитии продукта и управлении проектами. Ещё мы ценим навыки планирования и тайм-менеджмента, управления рисками и знания инструментов разработки, эффективные коммуникации, лидерство и фасилитация. 12 | 13 | ## Процессы 14 | 15 | ### Литература 16 | 17 | - Сазерленд Джефф «Scrum. Революционный метод управления проектами» 18 | - Иван Селиховкин «Черная книга Скрам» 19 | - Дэвид Дж. Андерсон «Альтернативный путь в Agile. Канбан» 20 | - Алексей Пименов «Канбан Метод. Базовая практика» 21 | - Сергей Зыков «Основы проектирования корпоративных систем» 22 | - Нассим Талеб «Антихрупкость» 23 | 24 | ### Youtube 25 | 26 | - [Кто такой менеджер разработки](https://youtu.be/wjPfvmugyd0?si=KOPrJuCsDTOfRjtk) 27 | - [О ролях в разработке](https://www.youtube.com/playlist?list=PLc82OEDeni8RFsfRuEkWCAtd4R39dnkds) 28 | - Игорь Устюжанин [«Комната с опускающимся потолком»](https://www.youtube.com/watch?v=xwRt1Ozz7cA) 29 | - Максим Дорофеев [«Эффективность неэффективности»](https://www.youtube.com/watch?v=XDF02KmgJFE) 30 | - Павел Ахметчанов [Как прогнозировать время выполнения задач? Методики прогноза](https://www.youtube.com/watch?v=cw1U5XXXuiI) 31 | 32 | --- 33 | 34 | ## Люди 35 | 36 | ### Литература 37 | 38 | - Максим Ильяхов «Новые правила деловой переписки» 39 | - Пинк Дэниел «Драйв: Что на самом деле нас мотивирует» 40 | - Уилл Ларсон «Элегантная головоломка. Системы инженерного менеджмента» 41 | - Апелло Юрген «Agile-менеджмент: Лидерство и управление командами» 42 | - Роб Фитцпатрик «Спроси маму» 43 | - Виталий Шароватов [«О разработке и людях (про увольнения)»](https://sharovatov.github.io/entries/2020-06-firing.html) 44 | - Максим Батырев «45 татуировок менеджера» 45 | 46 | ### Youtube 47 | 48 | - Клава Потапова [«Руководитель, от которого не уходят, — кто он?»](https://www.youtube.com/watch?v=pnRV2TTl63E) 49 | - Андрей Бреслав [«Эмпатия в IT: как рационально использовать свою человеческую природу»](https://www.youtube.com/watch?v=Tvxd7P_ycAk) 50 | - Полина Зонова [Как бумерам мотивировать зумеров?](https://www.youtube.com/watch?v=P2AfQF9bByY) 51 | - Клавдия Потапова [«Увольняем ведущих разработчиков: как, когда и почему это бывает необходимо»](https://www.youtube.com/watch?v=n_p8xkUd2GE) 52 | 53 | --- 54 | 55 | ## Продукты 56 | 57 | ### Литература 58 | 59 | - Даниэль Канеман «Думай медленно... Решай быстро» 60 | - Эльяху Голдратт «Цель», «Цель 2», «Критическая цепь» 61 | - Нассим Талеб «Шкура на кону» 62 | - Эрик Рис. «Бизнес с нуля. Метод Lean Startup для быстрого тестирования идей и выбора бизнес-модели» 63 | - Джефф Паттон «Пользовательские истории. Искусство гибкой разработки ПО» 64 | 65 | --- 66 | 67 | ## Проекты 68 | 69 | ### Литература 70 | 71 | - Том ДеМарко «Deadline. Роман об управлении проектами» 72 | - Скотт Беркун «Искусство управления IT-проектами» 73 | 74 | --- 75 | 76 | ## Управление рисками 77 | 78 | ### Литература 79 | 80 | - Том ДеМарко «Вальсируя с медведями. Управление рисками в проектах по разработке программного обеспечения» 81 | - Том ДеМарко «Человеческий фактор. Успешные проекты и команды» 82 | 83 | --- 84 | 85 | ## Тайм-менеджмент 86 | 87 | ### Литература 88 | 89 | - Максим Дорофеев «Джедайские техники» 90 | - Максим Ильяхов «Пиши, сокращай» 91 | - Катерина Ленгольд «Просто космос» 92 | 93 | --- 94 | 95 | ## Лидерство 96 | 97 | ### Литература 98 | 99 | - Ицхак Адизес «Развитие лидеров. Как понять свой стиль управления и эффективно общаться с носителями иных стилей» 100 | - Тодд Генри «Укрощение тигров. Как стать лидером творческой команды» 101 | - Дейв Логан «Лидер и племя. Пять уровней корпоративной культуры» 102 | 103 | --- 104 | 105 | ## Фасилитация 106 | 107 | ### Литература 108 | 109 | - Сэм Кейнер «Руководство фасилитатора» 110 | - Диана Ларсен, Эстер Дерби «Agile ретроспектива. Как превратить хорошую команду в великую» 111 | 112 | --- 113 | 114 | ## Для общего кругозора менеджера в IT 115 | 116 | ### Ресурсы 117 | 118 | - [Технологии в Контуре](https://tech.kontur.ru/managers) 119 | - [Исследование руководителей разработки от devcrowd](https://devcrowd.ru/tl24/) 120 | - [Atlassian](https://www.atlassian.com/agile) 121 | - [Smartreading](https://smartreading.ru) 122 | 123 | ### Подкасты 124 | 125 | - [Podlodka podcast](https://music.yandex.ru/album/7570122?dir=desc&activeTab=about). 126 | - [Podlodka #166 – Переговоры](https://on.soundcloud.com/MorfdzUGVQyxwmfM7) 127 | - [Podlodka #383 – Переговоры о деньгах](https://on.soundcloud.com/t3gNKJ3cK5U2iFBu5) 128 | - [Podlodka #132 – Дисфункции организаций](https://on.soundcloud.com/TtCawL8r1vbiv1pm6) 129 | - [Podlodka #169 – Увольнения](https://on.soundcloud.com/vZgYj3au5VgFi1ZG8) 130 | - [Podlodka #132 – Обязательные знания для тимлида](https://on.soundcloud.com/zVkgSFRoLJw4pMFbA) 131 | - [Бреслав и Ложечкин](https://music.yandex.ru/album/25789910?dir=desc&activeTab=about). 132 | - [Выпуск завтра](https://music.yandex.ru/album/9294155?activeTab=track-list). 133 | 134 | - [Стратоплан](https://stratoplan-school.com) 135 | - [Яндекс практикум](https://yandex.ru/jobs/pages/techman-interview) 136 | - [ScrumTrek](https://scrumtrek.ru/blog/knowledge-base/) 137 | 138 | ### Телеграм-каналы 139 | 140 | - [Технологии в Контуре](https://t.me/KonturTech) 141 | - [FEDOR BORSHEV](https://t.me/pmdaily) 142 | - [TeamLead Good Reads](http://t.me/leadgr) 143 | - [Daily Reminder](https://t.me/justakindreminder) 144 | - [TechSparks](https://t.me/techsparks) 145 | - [Чтобы не выгорать](https://t.me/notburningout) 146 | 147 | ### Профильные конференции 148 | 149 | - [Podlodka TeamLead Crew](https://podlodka.io/tlcrew) 150 | - [TeamLead Conf](https://teamleadconf.ru) ([Youtube](https://youtube.com/@managementchannel)) 151 | - [Product sense](https://productsense.io) ([Youtube](https://www.youtube.com/@ProductSense)) 152 | - [AgileDays](https://agiledays.ru) ([Youtube](https://www.youtube.com/@ScrumTrekOfficial)) 153 | 154 | ### Roadmaps 155 | 156 | - [Карта компетенций менеджера разработки](https://miro.com/app/board/o9J_kwJaDMk=/) от Контура 157 | - [Профили технических менеджеров](https://github.com/avito-tech/playbook/blob/master/techlead-profile.md) от Avito Tech 158 | - [TeamLead Roadmap](https://tlroadmap.io) от Егора Толстого 159 | 160 | ### Что-то ещё 161 | 162 | - Элиезер Юдковский «Гарри Поттер и методы рационального мышления» 163 | - Марк Мэнсон «Тонкое искусство пофигизма» 164 | - Патрик Ленсиони «Пять пороков команды», «Почему не все любят ходить на работу. Правда о вовлеченности сотрудников» 165 | - Мэри и Тома Поппендик «Бережливое производство программного обеспечения: от идеи до прибыли» 166 | - [Плейлист для TeamLead / TechLead от AvitoTech](https://www.youtube.com/playlist?list=PLknJ4Vr6efQHZAidwoVPiRIpRLp-195AY) 167 | - О системах материальной и нематериальной мотивации у сотрудников 168 | - О discovery и delivery процессах 169 | - О принципах JTBD и CusDev 170 | - Обзорно о фреймворках: SAFe (Scaled Agile Framework), LeSS (Large-Scale Scrum), Nexus Framework, DA (Disciplined Agile), FDD (Feature-Driven Development) 171 | - Записи кейс-клубов и управленческих поединков 172 | 173 | ## Глубже в разработку 174 | 175 | Выше была основа для менеджера разработки. Если её освоить, получится отличный набор базовых знаний для старта. Но если ты уже опытный менеджер, то следующие материалы помогут тебе лучше понять функциональные роли команды разработки, с которыми предстоит работать. 176 | 177 | ### Интерфейс 178 | 179 | - [Контур.Гайды](https://guides.kontur.ru) 180 | - Алан Купер «Психбольница в руках пациентов» 181 | 182 | ### Системный анализ 183 | 184 | - Алистер Коберн «Современные методы описания функциональных требований к системам» 185 | - Карл Вигерс «Разработка требований к программному обеспечению» 186 | 187 | ### Программирование 188 | 189 | - Роберт Мартин «Идеальный программист» 190 | - Сергей Константинов «API» 191 | 192 | #### Онлайн тренажер по Git 193 | 194 | - [https://learngitbranching.js.org/](https://learngitbranching.js.org/) 195 | - [https://githowto.com/ru/](https://githowto.com/ru/) 196 | 197 | #### Курсы по языкам программирования 198 | 199 | - [Python на Ulearn](https://ulearn.me/course/python/Yazyk_Python_cfe94d1b-80ef-4256-8f7c-303c2c49c24b) 200 | - [Основы JavaScript (HTML, CSS)](https://htmlacademy.ru) 201 | 202 | ### Тестирование 203 | 204 | - Рекс Блек «Ключевые процессы тестирования» 205 | 206 | #### Курс 207 | 208 | - [Курс по тестирования на Ulearn](https://ulearn.me/Course/testing-2022/Znakomstvo_41b8e6be-7800-4c4a-9f5a-6f91dd8546cd) 209 | 210 | ## Проекты 211 | 212 | - Павел Алферов «Проектное управление: как правильно делать правильные вещи» 213 | - «Руководство PMBOK. Руководство к своду знаний по управлению проектами» 214 | -------------------------------------------------------------------------------- /qa/mobile-roadmap.md: -------------------------------------------------------------------------------- 1 | # План погружения в мобильное тестирование 2 | 3 | Если ты уже работаешь в тестировании, но впервые сталкиваешься с мобильным направлением, этот план — твой помощник. Здесь собраны материалы, которые помогут понять основы, освоить инструменты и научиться тестировать мобильные приложения эффективно. 4 | 5 | Этот план не претендует на универсальность и не ставит цели охватить всё возможное. Скорее, это твой гибкий помощник, благодаря которому ты быстрее почувствуешь себя уверенно в мобильном тестировании. Ты можешь использовать его как отправную точку, добавлять собственные находки и адаптировать под свои задачи. 6 | 7 | ## Введение в мобильное тестирование 8 | 9 | - [Типы мобильных приложений](https://vladislaveremeev.gitbook.io/qa_bible/mobilnoe-testirovanie/tipy-mobilnykh-prilozhenii) — статья рассказывает о различных типах мобильных приложений (нативные, гибридные, веб-приложения), об их преимуществах и недостатках с точки зрения тестирования. 10 | - [Мобильные приложения и их тестировщики: all you need to know](https://habr.com/ru/company/tdb/blog/337234/) — очень подробная и интересная статья, которая дает обзор тестирования мобильных приложений, рассматривая ключевые аспекты, такие как особенности платформ, типы тестирования и основные инструменты. 11 | - [5 принципов тестирования мобильных приложений](https://habr.com/ru/articles/244345/) — старая, но все еще актуальная статья о ключевых моментах, которые следует учитывать при тестировании мобильных приложений. 12 | - [Мнемоники мобильного тестирования](https://software-testing.ru/library/testing/mobile-testing/2942-mobile-app-testing-mnemonic) — советы по запоминанию важных аспектов тестирования. 13 | - [Особенности планирования работ по тестированию мобильных приложений](https://quality-lab.ru/blog/key-principles-of-planning-mobile-applications-testing/). 14 | 15 | ## Платформы мобильных приложений 16 | 17 | - [Основные различия Android и iOS](https://github.com/VladislavEremeev/QA_bible/blob/master/mobilnoe-testirovanie/osnovnye-razlichiya-android-ios.md) — короткая статья, где тезисно сравниваются особенности этих ОС. 18 | - [Философия iOS vs ANDROID | РАЗБОР](https://www.youtube.com/watch?v=KnINsmXT9_c) — видео, раскрывающее ключевые различия между этими платформами. 19 | - [Кросс-платформенное тестирование мобильных приложений: особенности, инструменты и решения](https://habr.com/ru/companies/domclick/articles/859546/) — статья раскрывает тему особенностей тестирования iOS и Android. 20 | 21 | ### Android 22 | 23 | - [Архитектура Android](https://github.com/VladislavEremeev/QA_bible/blob/master/mobilnoe-testirovanie/android/arkhitektura-android-os.md). Статья рассматривает архитектуру операционной системы Android, включая её основные компоненты, уровни и взаимодействие между ними и принципы работы мобильных приложений. 24 | - [Архитектура приложений на Android](https://github.com/VladislavEremeev/QA_bible/blob/master/mobilnoe-testirovanie/android/arkhitektura-android-application.md). Здесь про архитектуру приложений на Android, включая их основные компоненты и жизненный цикл Activity. 25 | 26 | ### iOS 27 | 28 | - [Архитектура iOS](https://github.com/VladislavEremeev/QA_bible/blob/master/mobilnoe-testirovanie/ios/arkhitektura-ios.md). 29 | - [Архитектура приложений на iOS](https://github.com/VladislavEremeev/QA_bible/blob/master/mobilnoe-testirovanie/ios/arkhitektura-ios-application.md). 30 | - [Учебное пособие по тестированию приложений iOS: руководство и автоматизация](https://www.guru99.com/ru/getting-started-with-ios-testing.html) — руководство по тестированию iOS-приложений, охватывающее как ручные, так и автоматизированные подходы, с акцентом на проверку совместимости на разных устройствах и версиях iOS. Открывать с VPN. 31 | 32 | ## Дизайн мобильных приложений 33 | 34 | Для поддержания консистентности всех компонентов, используемых в мобильных приложениях Контура, применяется дизайн-система. 35 | 36 | > Дизайн-система — это набор правил, принципов и инструментов, которые помогают поддерживать единство дизайна цифровых продуктов или услуг. Основная цель дизайн-системы — обеспечить целостный и последовательный пользовательский опыт на всех платформах и устройствах. Она формирует общий язык и набор стандартов для дизайнеров, разработчиков и маркетологов, что сокращает время и усилия, необходимые для создания новых продуктов. 37 | 38 | Во многих компаниях есть своя дизайн-система; следует обязательно узнавать о ее наличии. 39 | 40 | Ниже перечислим материалы, которые будут полезны для ознакомления с основными понятиями, а также для понимания, на каких основополагающих правилах строится любая дизайн-система 41 | 42 | - [UI-элементы и жесты в мобильных приложениях](https://habr.com/ru/companies/youla/articles/540768/) — статья рассматривает основные термины и понятия, связанные с дизайном мобильных приложений, описывая ключевые элементы интерфейса. 43 | - [Гайдлайны Google Material и Apple Human Interface](https://www.youtube.com/watch?v=28m34MR_g2c) — полезное видео про гайдлайны. 44 | - [iOS и Android в дизайне](https://www.youtube.com/watch?v=eBlPBoCStp4) — еще одно видео. 45 | - [Гайдлайны Android и iOS](https://software-testing.ru/library/testing/mobile-testing/3103-android-and-ios-guidelines). 46 | - [Material Design](https://m3.material.io/) — рекомендации по проектированию интерфейса приложения от Google. 47 | - [Human Interface](https://developer.apple.com/design/human-interface-guidelines/) — гайдлайны iOS - рекомендации по проектированию интерфейса приложения на устройствах Apple. 48 | 49 | ## Проверки, специфичные для мобильных приложений 50 | 51 | - [Нефункциональные проверки мобильных приложений](https://habr.com/ru/companies/kuper/articles/707280/). 52 | - [Мобильное тестирование: чек-лист и основные подходы](https://software-testing.ru/library/testing/mobile-testing/3518-mobile-app-testing-checklist) — структурированная информация о необходимых проверках при тестировании мобилок. 53 | - [Тестирование push-уведомлений](https://habr.com/ru/articles/706190/). 54 | - [Тестирование push-уведомлений (часть 2)](https://habr.com/ru/articles/811297/). 55 | - [Accessibility-тестирование мобильных приложений](https://rutube.ru/video/5134740332c20a804cafc858a319caf5/) — видео про тестирование доступности. 56 | - [Пермишены (permissions) для тестировщика: зачем нужно, что такое и как с этим работать](https://habr.com/ru/articles/816951/). 57 | 58 | ### Тестирование фрагментации 59 | 60 | Когда речь идет о фрагментации в мобильном тестировании, в первую очередь подразумевается Android. Эта ОС представлена большим количеством устройств с разными версиями системы, диагоналями и разрешениями экранов, аппаратными возможностями и даже наличием или отсутствием Google-сервисов (например, Huawei). В отличие от iOS, где экосистема более контролируема, в Android разнообразие устройств создает дополнительные сложности для тестирования. 61 | 62 | - [Почему фрагментация на Android — это хорошо](https://androidinsider.ru/os/pochemu-fragmentacziya-na-android-eto-horosho.html) — статья описывает само понятие фрагментации и подходы к тестированию в Android с ее учетом. 63 | - [Особенности тестирования Android без Google-сервисов](https://habr.com/ru/companies/surfstudio/articles/559106/) — тема, которую стоит осветить отдельно. Про устройства Huawei и AppGallery. 64 | - [Фермы мобильных устройств](https://habr.com/ru/companies/microsoft/articles/333606/) — Зачем использовать фермы, их возможности. Отметим, что в нашей команде фермы не используются по соображениям безопасности. 65 | 66 | #### Выбор мобильных устройств для тестирования 67 | 68 | Отдельно хочется затронуть тему выбора мобильных устройств для тестирования. Как правильно выбрать размеры экранов, версии ОС, модели устройств. 69 | 70 | - [Как выбрать мобильные девайсы для тестирования и не налажать](https://habr.com/ru/companies/otus/articles/509596/) — небольшая статья, главная мысль которой в том, что при выборе устройств мы опираемся на статистику, внешнюю или внутреннюю. 71 | - [Покрытие девайсов](https://github.com/VladislavEremeev/QA_bible/blob/master/mobilnoe-testirovanie/pokrytie-devaisov.md). 72 | - [Выбор мобильных устройств: пошаговая инструкция для начинающих QA. Часть I](https://software-testing.ru/library/testing/mobile-testing/3433-choosing-mobile-devices-1). 73 | - [Выбор мобильных устройств: пошаговая инструкция для начинающих QA. Часть II](https://software-testing.ru/library/testing/mobile-testing/3434-choosing-mobile-devices-2). 74 | - [AppMetrica](https://yandex.ru/adv/edu/materials/summary-appmetrica) — один из инструментов, который мы используем для сбора статистики и не только. Познакомься с инструментом, чтобы понимать, для чего он и какие задачи помогает решить. 75 | 76 | ## Инструменты мобильного тестировщика 77 | 78 | ### Эмуляторы и симуляторы 79 | 80 | - [Отличия эмуляторов и симуляторов](https://testengineer.ru/ehmulyatory-i-simulyatory-v-chem-raznica/) — сначала немного теории. 81 | - [Simulator iOS XCode](https://www.youtube.com/watch?v=LimscelXdFI). 82 | - [Android Studio](https://github.com/VladislavEremeev/QA_bible/blob/master/mobilnoe-testirovanie/android/android-studio-dlya-qa.md) - интегрированная среда разработки (IDE) для работы с платформой Android. Позволяет работать с эмуляторами. 83 | 84 | #### Genymotion 85 | 86 | - [Официальное руководство пользователя Genymotion](https://docs.genymotion.com/desktop/) - Подробная документация от разработчиков, охватывающая все аспекты использования Genymotion, включая установку, настройку и основные функции. 87 | - [Руководство по использованию Genymotion для новичков](https://fb.ru/article/498574/2023-genymotion-kak-polzovatsya-podrobnoe-rukovodstvo-dlya-novichkov) - Статья, подробно описывающая процесс установки и настройки Genymotion, а также решение распространенных проблем, с которыми могут столкнуться новички. 88 | - [Мы спасены! Genymotion — забудьте про вашего медленного эмулятора Android](https://habr.com/ru/articles/185096) - Статья на Хабре, рассказывающая о преимуществах использования Genymotion по сравнению с другими эмуляторами Android. 89 | 90 | ### Работа с логами 91 | 92 | - [Снятие логов на Android и iOS](https://habr.com/ru/companies/redmadrobot/articles/687184/). 93 | - [Logcat](https://habr.com/ru/articles/818751/): вывод логов системы и приложений Android. 94 | 95 | ### Сервисы для доставки сборок тестировщикам 96 | 97 | Для доставки новых версий используются системы дистрибуции мобильных приложений. В Контуре мы используем собственную систему под названием AppDrive. 98 | 99 | ### Снифферы трафика 100 | 101 | - [Снифферы трафика и обзор Charles, Fiddler, Proxyman](https://www.youtube.com/watch?v=Q6fHTKAE0lk&utm_source=chatgpt.com) 102 | 103 | Далее перечислим полезные материалы по работе с различными снифферами. Не нужно изучать статьи по каждому инструменту. Лучше выбрать один и пользоваться им. 104 | 105 | #### Charles Proxy 106 | 107 | - [Официальный сайт](https://www.charlesproxy.com/). 108 | - [Настройка Charles Proxy для тестирования мобильных приложений](https://testgrow.ru/article27). 109 | - [Видеоурок: Установка и Настройка Charles Proxy и подключение смартфона](https://www.youtube.com/watch?v=6DIrVKlu1t0). 110 | - [Charles Proxy. Practice for QA Engineer](https://youtu.be/74mvpPOczgI?si=bqfkTD6JKIrtoHHZ). 111 | 112 | #### Proxyman 113 | 114 | - [Официальная документация](https://docs.proxyman.io/). 115 | - [Видеоурок: Proxyman (проксимэн) — как установить, пользоваться, обзор...](https://www.youtube.com/watch?v=Vuu_OIUq8xA). 116 | - [Почему Proxyman — сын маминой подруги в мире снифферов](https://software-testing.ru/library/testing/testing-tools/3765-proxyman). 117 | 118 | #### Fiddler 119 | 120 | - [Первые шаги с Fiddler Classic](https://habr.com/ru/articles/533138/). 121 | - [Fiddler = удобный сниффер + прокси сервер](https://habr.com/ru/articles/554562/). 122 | 123 | ### Майнд-карты 124 | 125 | - [Mind Map в тестировании — или легкий способ тестировать сложные приложения](https://habr.com/ru/articles/515990/) - статья для понимания, что это за зверь. 126 | - В Контуре для построения мэпок мы используем инструмент [XMind](https://xmind.app/). 127 | 128 | ### Работа с API 129 | 130 | - [Postman - основы тестирования](https://habr.com/ru/companies/vk/articles/750096/). 131 | 132 | ### Git 133 | 134 | - [Git для тестировщиков](https://habr.com/ru/companies/intec_balance/articles/865098/). 135 | - [Первый тренажер для изучения Git](https://learngitbranching.js.org/?locale=ru_RU). 136 | - [Второй тренажер для изучения Git](https://githowto.com/ru). 137 | 138 | ### Режим разработчика 139 | 140 | - [Режим разработчика на Android](https://lifehacker.ru/kak-vkluchitj-rezhim-razrabotchika-na-android/). 141 | - [Режим разработчика на iOS](https://www.iphones.ru/iNotes/kak-vklyuchit-rezhim-razrabotchika-na-iphone-i-ipad-chto-delat-esli-takogo-razdela-net-v-nastroykah-03-13-2024). 142 | 143 | ## Полезные ресурсы 144 | 145 | ### Сайты 146 | 147 | - — русскоязычный сайт с библиотекой статей, форумом и полезными материалами. 148 | - — крупнейшее сообщество тестировщиков с форумами, событиями и статьями. 149 | - — сайт с подкастами и статьями по автоматизации тестирования, включая мобильные приложения. 150 | - — статьи о тестировании, фермах устройств и полезных инструментах. 151 | - - тоже очень полезный ресурс для изучения мобильного и тестирования в целом. 152 | 153 | ### Telegram каналы 154 | 155 | - [QA ru - русскоговорящее сообщество](https://t.me/qa_ru) и [подтема про мобильное тестирование](https://t.me/qa_ru/200491). 156 | - [MobileApps - мобильное тестирование](https://t.me/QAMobileApps). 157 | 158 | ### Youtube каналы 159 | 160 | - [Канал Артема Русова](https://www.youtube.com/@rusau) - здесь очень много полезной информации, в том числе, [подборка для мобильных тестировщиков](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=894127499). 161 | - [QA Mobile](https://youtube.com/@qamobile?si=HzraSvI-6h4qYx6M) — канал о мобильном тестировании. 162 | - [QA TestLab](https://www.youtube.com/@QATestLab) — канал с полезными видео о тестировании веб- и мобильных приложений. 163 | - [Automation Step by Step](https://youtube.com/@raghavpal?si=vSOOIHyZfWLzM9Ss) — уроки по инструментам автоматизации тестирования. 164 | 165 | ### Литература 166 | 167 | - «Тестирование мобильных приложений: руководство» Алексей Баранцев. 168 | - «Continuous Testing for Mobile». Книга о непрерывном тестировании в контексте мобильных приложений. 169 | - «The Art of Mobile App Testing». Подробное руководство по мобильному тестированию с фокусом на сложные сценарии и автоматизацию. 170 | - «Ключевые процессы тестирования» Рекс Блек. 171 | - «Mobile Testing Tips» Карен Джонсон. 172 | - «Тестирование dot com» Роман Савин. Базовая книга по тестированию, включая мобильные приложения. 173 | - «Testing Mobile Applications» — John Flanagan. Практическое руководство по тестированию мобильных приложений. 174 | - «Mobile Testing Handbook» — Daniel Knott. Полное руководство по тестированию мобильных приложений. 175 | - «Android Studio Development Essentials» Neil Smyth. Основы работы с Android Studio, полезно для ручного и автоматизированного тестирования. 176 | 177 | ## Для общего кругозора мобильного тестировщика 178 | 179 | ### Покупки 180 | 181 | - [Как начать тестировать подписки в Google Play и App Store](https://habr.com/ru/articles/873950/). 182 | - [Тестирование покупок в Android-приложениях](https://vladislaveremeev.gitbook.io/qa_bible/mobilnoe-testirovanie/android/testirovanie-pokupok-v-android-prilozheniyakh). 183 | - [Тестирование покупок в iOS-приложениях](https://vladislaveremeev.gitbook.io/qa_bible/mobilnoe-testirovanie/ios/testirovanie-pokupok-v-ios-prilozheniyakh). 184 | - [Тестирование платежей: руководство по тестовым платежам в RuStore](https://vladislaveremeev.gitbook.io/qa_bible/mobilnoe-testirovanie/testirovanie-push-uvedomlenii). 185 | 186 | ### Скриншот тесты 187 | 188 | - [Две стратегии скриншот-тестирования в мобильных проектах](https://apptractor.ru/info/articles/dve-strategii-skrinshot-testirovaniya-v-mobilnyh-proektah.html). 189 | -------------------------------------------------------------------------------- /mobile-developers/roadmap-android.md: -------------------------------------------------------------------------------- 1 | # Рекомендации от Контура для Android-разработчиков 2 | 3 | Ниже представлен roadmap от Android-разработчиков Контура. Этот roadmap не претендует на абсолютную правду и является субъективным мнением авторов. По такому пути мы шли сами и хотели бы видеть таких коллег рядом. 4 | 5 | ## Roadmaps 6 | 7 | Здесь представлены популярные маршруты знаний от разных авторов. Их цель – дать представление об Android-разработке и помочь сориентироваться в умениях и навыках. 8 | 9 | - [Android Developer Roadmap for beginners](https://roadmap.sh/android) 10 | - [Android Developer Roadmap 2](https://github.com/mobile-roadmap/android-developer-roadmap) 11 | - [Android Developer Roadmap 3](https://trello.com/b/fsc44tYh/android-developer-roadmap) 12 | - [Android Developer Roadmap 4](https://github.com/MindorksOpenSource/android-developer-roadmap) 13 | 14 | ## Level 1️: Intern 15 | 16 | Стажер должен обладать знаниями, чтобы пройти порог входа в профессию программиста и в промышленную разработку. Эти материалы помогут попасть на твою первую стажировку в компанию, пройти испытательный срок и получить опыт в Android-разработке. 17 | 18 | ### Kotlin 19 | 20 |
21 | Почему Kotlin, а не Java? 22 | 23 | В 2021 году уже нет большого смысла учить Java как первый язык программирования (ЯП). 24 | Если сравнить ЯП с ездой на машине, то Java – это отечественный УАЗ на механике. Проедет везде, но удовольствия мало. Kotlin – иномарка на автомате. Идеальный вариант, чтобы учиться и ездить с комфортом в большом городе. Но это не значит, что не нужно учить JVM (Java Virtual Machine) 25 | 26 |
27 | 28 | - Объявление переменных, типы данных. Понимать разницу между `val` и `var`. 29 | - Логические выражения: `if/else`, `when`, `while`, `for` 30 | - Базовые коллекции: `ArrayList`, `LinkedList`,`HashMap`, `LinkedHashMap`,`HashSet`, `ArrayDeque` 31 | - [Модификаторы доступа](https://kotlinlang.ru/docs/reference/visibility-modifiers.html). Определяют откуда функция будет доступна для вызова. Например, некоторые функции можно скрыть для всех классов кроме того, в котором она объявлена. Это помогает в соблюдении принципа инкапсуляции. 32 | 33 |
34 | Функции, классы, интерфейсы и объекты 35 | 36 | - Классы: обычные, data, sealed и enum. 37 | - Интерфейсы 38 | - Объекты 39 | 40 |
41 | 42 | #### Источники 43 | 44 | - Официальная документация [RUS](https://kotlinlang.ru) | [ENG](https://kotlinlang.org) 45 | - [Playground](https://play.kotlinlang.org/), чтобы попробовать Kotlin 46 | - [CodeWars](https://www.codewars.com) или [CodinGames](https://www.codingame.com/home), чтобы порешать задачки и держать себя в форме 47 | 48 | ### Android 49 | 50 | - [Activity](https://developer.android.com/guide/components/activities/intro-activities) и [Fragments](https://www.raywenderlich.com/1364094-android-fragments-tutorial-an-introduction-with-kotlin). 51 | Это специальные классы, которые позволяют управлять экранами приложения. Активити – это один из базовых компонентов android-приложения, который предоставляет экран, с которым пользователи могут взаимодействовать, чтобы что-то делать. Фрагмент представляет поведение или часть пользовательского интерфейса в Активити. 52 | 53 | - [The Activity lifecycle](https://developer.android.com/guide/components/activities/activity-lifecycle) и [Fragment lifecycle](https://developer.android.com/guide/fragments/lifecycle). 54 | У приложения в целом, и у каждого экрана в отдельности есть свой жизненный цикл. С его помощью разработчики могут управлять поведением приложения, когда пользователь его открывает, закрывает, или переворачивает телефон 55 | 56 | - [Xml разметка](https://www.youtube.com/watch?v=pjsADVZh45I). 57 | Файл, описывающий внешний вид экрана 58 | 59 | - [Context](https://developer.alexanderklimov.ru/android/theory/context.php). 60 | C помощью этого класса можно взаимодействовать с системой Android 61 | 62 | - [SharedPreferences](http://developer.alexanderklimov.ru/android/theory/sharedpreferences.php). 63 | Самый простой способ постоянно хранить данные в памяти. Данные хранятся по принципу «ключ - значение» 64 | 65 | - [AndroidManifest.xml](http://developer.alexanderklimov.ru/android/theory/AndroidManifestXML.php). 66 | Файл, в котором указываются название приложения, его иконка, версия, разрешения, стартовая Activity и другие базовый компоненты приложения. 67 | 68 | - [Gradle](https://riptutorial.com/android-gradle). 69 | Это система сборки проекта. В файлах gradle можно указать минимально поддерживаемую версию Android, подключить сторонние библиотеки, настроить правила, по которым будет собираться проект 70 | 71 | - [RecyclerView](http://developer.alexanderklimov.ru/android/views/recyclerview-kot.php). 72 | Компонент для оптимизированной работы со списками данных 73 | 74 | - [Паттерн MVVM](https://www.section.io/engineering-education/implementing-mvvm-architecture-in-android-using-kotlin/). 75 | Один из самых популярных презентационных паттернов в Android, который позволяет отделить бизнес логику от пользовательского интерфейса. 76 | 77 |
78 | Работа с сетью 79 | 80 | - [JSON](https://ru.wikipedia.org/wiki/JSON) – текстовый формат обмена данными, в основном используется для обмена данными между клиентом и сервером 81 | 82 | - Библиотека [Retrofit](https://github.com/square/retrofit) 83 | Помогает создать интерфейс для работы с API. 84 | Потренироваться в ее использовании можно на бесплатных API, например, [здесь](https://jsonplaceholder.typicode.com/todos) 85 | 86 |
87 |
88 | Базы данных 89 | 90 | - Знать [принципы работы реляционных баз данных](https://www.oracle.com/ru/database/what-is-a-relational-database/) 91 | 92 | - Библиотека [Room](https://developer.android.com/training/data-storage/room). 93 | Самая распространенная библиотека базы данных на Android. В ней есть методы для самых распространенных запросов. Если нужного метода нет - запрос придется писать самому. Для этого нужно знать как [составлять запросы на языке SQL](http://developer.alexanderklimov.ru/android/sqlite/android-sqlite.php) 94 | 95 |
96 | 97 | #### Источники 98 | 99 | - [Официальная документация](https://developer.android.com/docs) 100 | - Канал [Start Android](https://www.youtube.com/channel/UCzE7HcbvyEiS5ea1rVRbPLQ), курс [Kotlin. Уроки по основам разработки android-приложений](https://www.youtube.com/watch?v=1ruPswojG6E&list=PLyfVjOYzujuj20Y-3kVhT3Zro9CrMNgNS) 101 | 102 |
103 | Курсы на Pluralsight 104 | 105 | - [Курс Android Fundamentals](https://app.pluralsight.com/profile/author/sriyank-siddhartha) 106 | - [Android Apps with Kotlin: Build Your First App](https://app.pluralsight.com/library/courses/android-apps-kotlin-build-first-app/table-of-contents) 107 | - [Android Data Binding: Getting Started](https://app.pluralsight.com/library/courses/android-data-binding-getting-started/table-of-contents) 108 | - [Android Apps with Kotlin: ViewModel and Lifecycle](https://app.pluralsight.com/library/courses/android-apps-kotlin-viewmodel-lifecycle/table-of-contents) 109 | - [Android Fundamentals: Implementing Effective Navigation](https://app.pluralsight.com/library/courses/android-fundamentals-effective-navigation/table-of-contents) 110 | - [Android Apps with Kotlin: Tools and Testing](https://app.pluralsight.com/library/courses/android-apps-kotlin-tools-testing/table-of-contents) 111 | - [Android: Room Fundamentals](https://app.pluralsight.com/library/courses/android-room-fundamentals/table-of-contents) 112 | - [Android: Getting Started with Retrofit](https://app.pluralsight.com/library/courses/android-retrofit-getting-started/table-of-contents) 113 | 114 |
115 | 116 | ### Git 117 | 118 | Git – это одна из популярных систем контроля версий. 119 | 120 |
121 | Нужно уметь в базовые команды 122 | 123 | - `git init` 124 | - `git clone` 125 | - `git remote add` 126 | - `git add` 127 | - `git commit` 128 | - `git reset` 129 | - `git branch` 130 | - `git checkout` 131 | - `git merge` 132 | - `git rebase` 133 | - `git push` 134 | - `git fetch` 135 | - `git pull` 136 | 137 |
138 | 139 | #### Источники 140 | 141 | - [Документация](https://git-scm.com/book/ru/v2) 142 | - [Онлайн-тренажер 1](https://learngitbranching.js.org/) 143 | - [Онлайн-тренажер 2](https://githowto.com/ru/) 144 | 145 | ### Принципы ООП 146 | 147 | Принципы объектно-ориентированного программирования (ООП) помогают разделить код, дробя его на сущности, объединенные общей функциональностью. 148 | 149 | Если следовать этим принципам, повторяющегося кода будет меньше, добавлять новые функции станет проще. 150 | 151 | #### Источники 152 | 153 | - [Принципы объектно-ориентированного программирования](https://javarush.ru/groups/posts/1966-principih-obhhektno-orientirovannogo-programmirovanija) 154 | - [DRY](https://ru.wikipedia.org/wiki/Don’t_repeat_yourself) 155 | - [KISS](https://ru.wikipedia.org/wiki/KISS_(принцип)) 156 | 157 | ## Level 2️: `Junior` 158 | 159 | Junior-разработчик – полноценный член команды разработки. Он пишет понятный, читаемый код. Хорошо знает язык, легко использует его стандартные методы и конструкции. Может самостоятельно проектировать задачи средней сложности. 160 | 161 | ### Kotlin 162 | 163 |
164 | Функции 165 | 166 | - `extension fun`, `infix fun`, `inline fun`, `operator fun` 167 | - `Generics` 168 | 169 |
170 |
171 | Синтаксический сахар 172 | 173 | Так называют приятные мелочи языка, которые позволяют писать более простой и красивый код: 174 | 175 | - Функции для работы с коллекциями: `forEach`, `map`, `flatMap`, `filter`, `sort`, `reduce`, `groupBy`, `orEmpty`, `getOrElse` 176 | - Именованные аргументы 177 | - `Single abstract method` 178 | - Высокоуровневые функции и лямбды 179 | - `Destructive declaration` 180 | - `Labels` 181 | - `let`, `apply`, `also`, `with` 182 | 183 |
184 | 185 | ### Android 186 | 187 |
188 | Разделение зон ответственности между разными компонентами приложения 189 | 190 | - Изучил архитектурные паттерны MVP, MVVM, MVI 191 | 192 |
193 | 194 |
195 | Паттерны проектирования 196 | 197 | - Factory 198 | - Singleton 199 | - Decorator 200 | - Facade 201 | - Command 202 | - State 203 | - Srategy 204 | - Observer 205 | 206 | Источники: [раз,](https://ru.wikipedia.org/wiki/Design_Patterns) [два](https://refactoring.guru/design-patterns/catalog) 207 | 208 |
209 | 210 | - Работа с сетью 211 | - Иметь представление в каком виде приходят данные с сервера. 212 | Как проходит сериализация и десериализация 213 | - Библиотека OkHttp (встроена в Retrofit) 214 | - Навигация между фрагментами/активити 215 | Cicerone, Jetpack navigation 216 | - Многопоточность 217 | - Kotlin coroutines 218 | - RxJava 219 | - DI 220 | 221 | [Dependency injection](https://habr.com/ru/post/434380/) – внедрение зависимостей. Помогает писать менее зависимый код, значительно упрощает написание тестов. 222 | 223 | Самые популярные библиотеки для внедрения зависимостей на Android это Toothpick, Dagger2, Koin, Hilt 224 | 225 | - Service Locator 226 | [Service Locator](https://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D0%BA%D0%B0%D1%82%D0%BE%D1%80_%D1%81%D0%BB%D1%83%D0%B6%D0%B1) - паттерн, используемый для получения зависимостей из общего хранилища. Отличается от DI тем, что самостоятельно не создает компонент, то есть не вызывает его конструктор. 227 | - Single Activity (дописать) 228 | Отличная [статья](https://habr.com/ru/companies/redmadrobot/articles/426617/) про Single Activity 229 | - Clean Architecture ([Чистая архитектура](https://nuancesprog.ru/p/11445/)). В ее основе чистое ядро и доменные сущности, независимые от платформы и фреймворков 230 | - Тестирование приложения 231 | - Unit-тесты 232 | Тестируют отдельные классы и методы. 233 | Самые популярные библиотеки – JUnit, Mockito. 234 | - UI-тесты. 235 | Тестируют работу приложения в целом, имитируя действия реального пользователя. Библиотеки для UI тестов - Espresso, Kaspresso, Kakao 236 | - [Material Design](https://material.io) - дизайн нативных android-интерфейсов, разработанный Google 237 | 238 | #### Android Studio 239 | 240 | - [Debug-меню](https://medium.com/@artem_shevchenko/android-studio-debugging-%D0%B1%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B5-%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%B8%D1%8F-%D0%B8-%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8-658ee6dcc641). Инструмент в Android Studio, упрощающий нахождение багов в приложении 241 | - Отладка приложений 242 | - Flipper 243 | - Proxyman 244 | - [Stetho](http://facebook.github.io/stetho/) 245 | - Hotkey - с их помощью можно быстро переименовывать файлы, названия переменных, классов или методов. Можно увидеть все использования функции или класса, и много чего еще - [ссылка](https://medium.com/mindorks/11-android-studio-shortcuts-every-android-developer-must-know-a153e736e611) 246 | - Эмуляторы - эмулирует Android на компьютере. Это полезно, если нужно проверить работу приложения на определенной версии системы, или на устройстве с большим/маленьким размером экрана. Позволяет задавать практически любую конфигурацию - менять версию Android, размер экрана, эмулировать камеру, местоположение. 247 | 248 | #### ООП 249 | 250 | - SOLID 251 | [Принципы SOLID](https://medium.com/webbdev/solid-4ffc018077da) помогут лучше понять ООП и применять его правильно 252 | 253 | #### Git 254 | 255 | - Нужно уметь использовать консоль и\или UI-клиент 256 | [Fork](https://git-fork.com) 257 | - Нужно уметь работать с удаленным git-репозиторием 258 | - Уметь подключать к проекту хостинги git-репозиториев, например GitHub или GitLab 259 | - Умеет делать `merge request` и решать `merge conflict`, знает про `stash` и `cherry-pick`. 260 | 261 | ### Источники знаний 262 | 263 |
264 | Телеграм-каналы 265 | 266 | - [Kotlin Adept Notes](https://t.me/kotlin_adept) (Канал нашего коллеги) 267 | - [Android broadcast](https://t.me/android_broadcast) 268 | - [Mobile Native](https://t.me/mobile_native) 269 | - [Kotlin Broadcast](https://t.me/kotlin_broadcast) 270 | - [Android Good Reads](https://t.me/droidgr) 271 | - [Android Дичь](https://t.me/shitty_android) 272 | - [Start Android](https://t.me/startandroid) 273 | - [Android Live](https://t.me/android_live) 274 | - [Android Guards Today](https://t.me/android_guards_today) 275 | - [ProDev | Всё об Android разработке](https://t.me/droDev) 276 | - [Devcolibri](https://t.me/dcolibri) 277 | 278 |
279 | 280 |
281 | Книги 282 | 283 | - Bruce Eckel, Svetlana Isakova. [Atomic Kotlin](https://www.atomickotlin.com/atomickotlin/) 284 | - Chet Haase. [Androids: The Team That Built the Android Operating System](https://www.amazon.com/Androids-Built-Android-Operating-System/dp/1737354810/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr=) 285 | - Дмитрий Жемеров. [Kotlin в действии](https://www.labirint.ru/books/612984/) 286 | - Thomas Nield. [Learning RxJava](https://www.oreilly.com/library/view/learning-rxjava/9781787120426/) 287 | - Джошуа Блох. [Java. Эффективное программирование](https://www.litres.ru/book/dzhoshua-bloh/javatm-effektivnoe-programmirovanie-48411247/) 288 | - John Ousterhout. [A Philosophy of Software Design](https://www.amazon.com/Philosophy-Software-Design-John-Ousterhout/dp/1732102201) 289 | - Marcin Moskala. [Effective Kotlin](https://leanpub.com/effectivekotlin) 290 | - Роберт Мартин. [Чистый код. Создание, анализ и рефакторинг](https://www.labirint.ru/books/642466/) 291 | - Чад Фаулер. [Программист-фанатик](https://www.labirint.ru/books/647973/) 292 | 293 |
294 | 295 |
296 | Курсы 297 | 298 | - [Курс от Doubletapp](https://www.youtube.com/playlist?list=PLQ09TvuOLytS_vYHtFHQzZJFcnbYCYF6x) 299 | - [Уроки по разработке от Mail.ru](https://youtu.be/GmZEFB0is6Y) (видео) + [Курс по Android в Технополисе 2019](https://github.com/polis-vk/2019-android) 300 | - [Школа мобильной разработки от Yandex](https://www.youtube.com/playlist?list=PLQC2_0cDcSKBNCR8UWeElzCUuFkXASduz) 301 | - [Уроки по Android/Kotlin от SkillBranch](https://www.youtube.com/channel/UCWLKyJUZ32GJvSIisQjU3kw/playlists) 302 | - [Бесплатный текстовый курс по Android разработке](https://github.com/ArturVasilov/AndroidSchool) 303 | 304 |
305 | 306 |
307 | Статьи 308 | 309 | - [52 ресурса для начинающих и профессиональных Android-разработчиков](https://apptractor.ru/develop/51-resurs-dlya-nachinayushhih-i-professionalnyih-android-razrabotchikov.html) 310 | 311 |
312 | 313 | ## Level 3️: `Middle` 314 | 315 | Middle-разработчик может сам спроектировать приложение, настроить среду и CI/CD. Имеет не только основные, но и смежные знания. Обучает стажеров. 316 | 317 | ### Софт-скиллы 318 | 319 | - Умеет ставить задачи 320 | - Умеет аргументировать свою позицию 321 | - Адекватно воспринимает критику, исправляет ошибки 322 | - Умеет давать обратную связь 323 | 324 | ### Хард-скиллы 325 | 326 |
327 | CI/CD 328 | 329 | [Концепция непрерывной интеграции и доставки](https://medium.com/southbridge/ci-cd-%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B-%D0%B2%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B-f0626b9994c8) 330 | 331 |
332 | 333 |
334 | Работа с устройством 335 | 336 | - GPS 337 | - Камера 338 | - Гироскоп 339 | - NFC 340 | - Микрофон 341 | - Датчик света 342 | - otg-порт 343 | 344 |
345 | 346 |
347 | Сервисы Google 348 | 349 | - Firebase 350 | - Google Maps 351 | - Google Play 352 | - Google Pay 353 | 354 |
355 | 356 |
357 | Безопасность 358 | 359 | - Proguard, D8, R8 360 | - Keystore 361 | 362 |
363 | 364 |
365 | Android Jetpack 366 | 367 | - Databinding 368 | - Compose 369 | - CameraX 370 | 371 |
372 | 373 |
374 | Сервисы Google 375 | 376 | - Firebase 377 | - Google maps 378 | - Google Play 379 | - Google Pay 380 | 381 |
382 | 383 |
384 | Kotlin Multiplatform (KMP) 385 | 386 | Kotlin Native 387 | Targets/Source sets 388 | Compose Multiplatform 389 | 390 |
391 | 392 | ### Знаешь эти инструменты 393 | 394 | - Работа с HTTP/S — [OkHttp](https://square.github.io/okhttp/), [Retrofit](https://github.com/square/retrofit) 395 | - Работа с WebSockets — [Scarlet](https://github.com/Tinder/Scarlet), [nv-websocket-client](https://github.com/TakahikoKawasaki/nv-websocket-client) 396 | - Работа с БД — [Room](https://developer.android.com/topic/libraries/architecture/room), [Realm](https://github.com/realm/realm-java), [SQLDelight](https://github.com/cashapp/sqldelight) 397 | - Логирование — [Timber](https://github.com/JakeWharton/timber) 398 | - Работа с датами — [ThreeTenABP](https://github.com/JakeWharton/ThreeTenABP) 399 | - Навигация — [Cicerone](https://github.com/terrakok/Cicerone), [Navigation Component](https://developer.android.com/guide/navigation/navigation-getting-started) 400 | - Dependency Injection — [Toothpick](https://github.com/stephanenicolas/toothpick), [Koin](https://github.com/InsertKoinIO/koin), [Dagger2](https://github.com/google/dagger), [Hilt](https://developer.android.com/training/dependency-injection/hilt-android) 401 | - Посмотреть утечки — [LeakCanary](https://github.com/square/leakcanary) 402 | - Тесты — [Mockito](https://github.com/mockito/mockito), [Mockk](https://mockk.io), [AssertJ](http://joel-costigliola.github.io/assertj/assertj-core.html), [Kakao](https://github.com/agoda-com/Kakao), [Kaspresso](https://github.com/KasperskyLab/Kaspresso) 403 | - Анализ кода — [ktlint](https://github.com/pinterest/ktlint), [detekt](https://github.com/arturbosch/detekt) 404 | - Обработка потока данных — [RxJava](https://github.com/ReactiveX/RxAndroid), [Kotlin coroutines](https://kotlinlang.org/docs/coroutines-overview.html) 405 | - Работа с изображениями — [Picasso](https://square.github.io/picasso/), [Glide](https://github.com/bumptech/glide), [Fresco](https://github.com/facebook/fresco) 406 | - Debug — [Stetho](http://facebook.github.io/stetho/), [Chucker](https://github.com/ChuckerTeam/chucker), [Flipper](https://fbflipper.com), [Proxyman](https://proxyman.io) 407 | - Проверка орфографии — [yaspeller](https://github.com/hcodes/yaspeller) 408 | - Оптимизация и обфускация кода — Proguard, D8, R8 409 | 410 | ### Источники знаний 411 | 412 | - [Большой список книг, каналов, библиотек](https://kotlin.link) 413 | - [Блог Android developer](https://medium.com/androiddevelopers) на Medium 414 | - [Блог Pro Android Dev](https://proandroiddev.com) 415 | - [Android Developers Blog](https://android-developers.googleblog.com/) 416 | 417 | ## Level 4️: `Senior` 418 | 419 | ### Roadmap 420 | 421 | - [TeamLead Roadmap](https://tlroadmap.io/) – как развиваться самому в качестве TeamLead. Roadmap от Егора Толстого. 422 | -------------------------------------------------------------------------------- /mobile-developers/roadmap-ios.md: -------------------------------------------------------------------------------- 1 | # Рекомендации от Контура для iOS-разработчиков 2 | 3 | Ниже представлен roadmap от iOS-разработчиков Контура. Этот roadmap не претендует на абсолютную правду и является субъективным мнением авторов. По такому пути мы шли сами и хотели бы видеть таких коллег рядом. В конце статьи вы также найдёте ссылки на роадмэпы от других авторов. 4 | 5 | ## Level 1: `Intern` 6 | 7 | Стажер должен обладать знаниями, чтобы пройти порог входа в профессию программиста и в промышленную разработку. Эти материалы помогут попасть на твою первую стажировку в компанию, пройти испытательный срок и получить опыт в iOS-разработке. 8 | 9 | ### Базовые знания 10 | 11 | - Жизненный цикл приложения и жизненный цикл контроллера 12 | 13 |
14 | Концепции объектно-ориентированного программирования (ООП) 15 | 16 | - типы данных 17 | - переменные 18 | - функции и методы 19 | - наследование 20 | - структуры 21 | - классы и протоколы 22 | 23 |
24 |
25 | Базовые конструкции языка 26 | 27 | - использование выражений `if/else`, 28 | - оператора `switch`, 29 | - циклов, 30 | - инструкций `break`, `continue`. 31 | 32 |
33 |
34 | Структуры данных 35 | 36 | - коллекции: массивы, множества и словари 37 | 38 |
39 |
40 | Система контроля версий 41 | 42 | - [для чего нужен Git](https://git-scm.com/book/ru/v2) 43 | 44 | Как его использовать: 45 | 46 | - [онлайн-тренажер раз](https://learngitbranching.js.org/) 47 | - [онлайн-тренажер два](https://githowto.com/ru/) 48 | 49 |
50 |
51 | Проектирование программного обеспечения 52 | 53 | - как организовать и оформить код для удобства чтения 54 | - как реализовать паттерн проектирования Model View Controller и Model View ViewModel 55 | 56 |
57 |
58 | Работа с сетью 59 | 60 | - как выполнять асинхронные вызовы API 61 | - как хранить и извлекать сетевые данные 62 | - как использовать формат JSON для взаимодействия с сервером 63 | 64 |
65 | 66 | Опционально 67 | 68 | - Локальное хранение данных: как использовать Core Data, Realm, Codable и User Defaults для локального хранения данных приложения. 69 | - SwiftUI: как использовать фреймворк Apple для создания пользовательских интерфейсов, которые хорошо выглядят на всех устройствах. 70 | 71 | ### Источники 72 | 73 | - [The Swift Programming Language](https://docs.swift.org/swift-book/) – официальное издание по языку программирования Swift от Apple. 74 | - Серия книг от Apple познакомит с инструментами для iOS разработчика, базовыми концепциями программирования, и лучшими практиками. Плюс можно пройти практические упражнения и научиться создавать приложения с нуля. 75 | - [Develop in Swift Fundamentals](https://books.apple.com/ru/book/develop-in-swift-fundamentals/id1556365994) 76 | - [Develop in Swift Explorations](https://books.apple.com/ru/book/develop-in-swift-explorations/id1556366287) 77 | - [Develop in Swift Data Collections](https://books.apple.com/ru/book/develop-in-swift-data-collections/id1556365920) 78 | - [SwiftBook](https://swiftbook.org) – самая крупная русскоязычная платформа для обучения основам Swift. 79 | - [iOS App Dev Tutorial](https://developer.apple.com/tutorials/app-dev-training/) – основы Xcode, SwiftUI и UIKit для создания нативных приложений. Интерактивное обучение от Apple. 80 | - [Курсы от Raywenderlich](https://www.raywenderlich.com/ios) для обучения с 0 до начинающего iOS разработчика. 81 | 82 | ## Level 2: `Junior` 83 | 84 | ### Базовые знания 85 | 86 |
87 | Язык программирования Swift 88 | 89 | - [Classes and Structures](https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html) – классы и структуры, в чем их отличия 90 | - [Property Observers и Wrappers](https://docs.swift.org/swift-book/LanguageGuide/Properties.html)– наблюдатели и обёртки свойства 91 | - [Enumerations](https://docs.swift.org/swift-book/LanguageGuide/Enumerations.html) – перечисления ассоциативные/исходные значения 92 | - [Collection Types](https://docs.swift.org/swift-book/LanguageGuide/CollectionTypes.html) – типы коллекций: массивы, множества и словари (`Array`, `Set`, `Dictionary`) 93 | - [Closures](https://docs.swift.org/swift-book/LanguageGuide/Closures.html) – замыкания и списки захвата 94 | - [Protocols](https://docs.swift.org/swift-book/LanguageGuide/Protocols.html) – протоколы такие как `Codable`, `Equatable`, `Hashable` 95 | - [Extensions](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/extensions/) - расширения типов 96 | - [Optional Chaining](https://docs.swift.org/swift-book/LanguageGuide/OptionalChaining.html) – опциональные типы данных и опциональная последовательность 97 | - [ARC](https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html) – автоматический подсчёт ссылок 98 | - [Access Control](https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html) – атрибуты доступа, такие как `private` и `public` 99 | - [Concurrency](https://developer.apple.com/documentation/swift/concurrency) - cтруктурированный параллелизм (`async`,`await`, `Task`, `MainActor`, `sendable`) 100 | - [Generics](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/generics/) - дженерики, ключевые слова `some` и `any` 101 | 102 |
103 |
104 | Создание приложений 105 | 106 | - Компоненты фреймворка [UIKit](https://developer.apple.com/documentation/uikit/) для создания и управления пользовательскими интерфейсами 107 | - `UIView` и его основные компоненты `UIButton`, `UITextField`, `UILabel` 108 | - `UIViewController` + `Child`, `UITableView`, `UINavigationController`, `UIStackView` 109 | - `Auto Layout` для построения адаптивных интерфейсов вместе с `Compression Resistance`/`Content Hugging Priorities`. 110 | 111 | - Компоненты фреймворка [SwiftUI](https://developer.apple.com/documentation/swiftui/) 112 | - `View`, `@ViewBuilder`, `ViewModifier` + основные компоненты `Text`, `Button`, `V/H/Z-Stack`, `List` 113 | - `@State`, `@Binding`, `@Published` - обёртки свойств и зачем они нужны 114 | - Протокол `ObservedObject`, обёртки `@StateObject`, `@ObservedObject`, `@EnvironmentObject`, понимание разницы между ними 115 | 116 | - Компоненты фреймворка [Foundation](https://developer.apple.com/documentation/foundation) для разработки базового слоя функциональности приложений 117 | - хранение данных `UserDefaults`, `Keychain` 118 | - обработка текста `Formatters` 119 | - вычисление даты и времени `Date` 120 | - работа с сетью: `Error+Result`, `URLSession` 121 | 122 | - Работа с сетью: [Moya](https://github.com/Moya/Moya), [Alamofire](https://github.com/Alamofire/Alamofire), URLSession async 123 | 124 | - Использование модулей и добавление новых зависимостей: `Cocoapods` / `Swift Package Manager` 125 | 126 | - Архитектура для UIKit: `MVC` с использованием `ChildViewController`, `MVVM`. Подходы с использованием `Data Driven ViewControllers(Props)`, `Coordinator` или `FlowController` 127 | 128 | - Архитектура для SwiftUI: `MVVM` или `MV/MV State` 129 | 130 | - [Шаблоны и паттерны проектирования](https://refactoring.guru/design-patterns/catalog) 131 | - [Singleton](https://refactoring.guru/design-patterns/singleton) 132 | - [Command](https://refactoring.guru/design-patterns/command) 133 | - [Factory Method](https://refactoring.guru/design-patterns/factory-method) 134 | - [Observer](https://refactoring.guru/design-patterns/observer) 135 | - [Delegation](https://www.swiftbysundell.com/articles/delegation-in-swift/) 136 | 137 | - Разработка на основе TDD (Test Driven Development), Unit Testing, UI Testing 138 | - [Unit Testing Best Practices on iOS with Swift](https://www.vadimbulavin.com/unit-testing-best-practices-on-ios-with-swift/) 139 | - [Тестирование приложений: описание и чек-лист](https://ru.hexlet.io/blog/posts/testirovanie-prilozheniy-opisanie-i-chek-list) 140 | - [Начинаем писать тесты (правильно)](https://ru.hexlet.io/blog/posts/how-to-test-code) 141 | - [Test doubles in Swift: dummies, fakes, stubs, and spies.](https://mokacoding.com/blog/swift-test-doubles/) 142 | 143 | - RxSwift или Combine — чтение кода, использование операторов и семантичных сущностей. 144 | 145 | - Основы [Grand Central Dispatch](https://developer.apple.com/documentation/dispatch) - многопоточное программирование, основные понятия и методы 146 | 147 |
148 |
149 | Инструменты и процессы 150 | 151 | - Xcode 152 | - Система контроля версий git и основные команды push, pull, commit, tags, merge/pull request, rebase, merge, cherry-pick, stash 153 | - Профилирование и дебаг: поиск утечек памяти, циклов, дебаг UI, брейкпоинты, работа с консолью 154 | - Принципы ООП, SOLID, KISS, DRY, YAGNI. 155 | 156 |
157 |
158 | Архитектуры 159 | 160 | - [iOS Architecture Patterns](https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52) – поверхностный обзор архитектур 161 | - [MVC is not your problem](https://www.youtube.com/watch?v=A1vzcxR-Ss0) — доклад о том, как делать MVC, не делая его massive. 162 | - [Правильный MVC](https://www.youtube.com/watch?v=J8u-tIt5wo4) — как справиться с MVC. Доклад от Redmadrobot 163 | - [Awesome iOS architecture](https://github.com/onmyway133/awesome-ios-architecture) – репозиторий с шуточным проектом по составлению новых акронимов "лучших iOS архитектур". Но в Readme проекта есть список полезных материалов по разным архитектурам. 164 | - [MVC: Model View Controller](https://rambo.codes/posts/2020-02-20-mvc-with-sugar) – доходчиво о MVC ([видео](https://www.youtube.com/watch?v=ZShE3toDPIk)) 165 | - [MVP: Model View Presenter](https://blog.moove-it.com/going-from-mvc-to-mvp-on-ios/) – от MVC к MVP 166 | - [MVVM: Model View ViewModel](https://www.objc.io/issues/13-architecture/mvvm/) – введение в MVVM 167 | - [Viper](https://github.com/strongself/The-Book-of-VIPER) – книга от Rambler 168 | - [Математические основы Auto Layout](https://habr.com/ru/company/oleg-bunin/blog/437584/) – работа в Auto Layout относительно простым языком 169 | 170 |
171 | 172 | ### Источники 173 | 174 | - [Raywenderlich.com](https://www.raywenderlich.com/ios) – книги и материалы по iOS-разработке. Платная подписка дает доступ к обновляемым материалам. 175 | - [Swift Language](https://developer.apple.com/swift/) ([в переводе](https://swiftbook.org/docs/tur-po-swift/)) – углубленное изучение Swift 176 | - [whatsnewinswift.com](https://www.whatsnewinswift.com/) – сравнение Swift по версиям 177 | - [Swift Standard Library](https://developer.apple.com/documentation/swift/swift_standard_library) – cтандартная библиотека aka [PureSwift](https://github.com/PureSwift) 178 | - [Coordinator and FlowController](https://github.com/onmyway133/blog/issues/106) 179 | - [Как работать с сетью правильно](https://www.youtube.com/watch?v=7HtE3Ci78nU) — доклад от Сбербанка. URLSession и нативные подходы к работе с сетью. 180 | - [100 Days of SwiftUI](https://www.hackingwithswift.com/100/swiftui) - обучение основам SwiftUI от Пола Хадсона (Hacking with Swift) 181 | - [Advanced Combine Publishers & Subscribers](https://www.youtube.com/watch?si=0rWk7kpLJmRVOFD4&v=RUZcs0SWqnI&feature=youtu.be) - разбор работы с Combine 182 | - Видео с WWDC про [async](https://developer.apple.com/videos/all-videos/?q=async) и [structured concurrency](https://developer.apple.com/videos/all-videos/?q=structured%20concurrency) - там есть почти вся нужная информация 183 | - [Туториалы от sparrowcode](https://sparrowcode.io/ru) 184 | - [SwiftUI Property Wrappers](https://swiftuipropertywrappers.com/) 185 | 186 | ## Level 3: `Middle` 187 | 188 | Миддл разработчик способен за разумное время вникнуть в проект, вносить изменения в код, не ломая при это существующие сценарии. Может реализовывать фичи средней сложности, затрагивающие небольшое число компонентов. Умеет работать с существующим CI/CD и при необходимости вносить небольшие изменения. Понимает, как устроено создание сборок на iOS (certificates, app id, provisioning profiles). 189 | 190 | ### Базовые знания 191 | 192 |
193 | Язык программирования Swift 194 | 195 | - Отличия между классами, акторами и структурами и понимание о том, что из них следует использовать 196 | - Создание перечислений, структур, классов и протоколов 197 | - Функциональное программирование, использование замыканий (trailing, auto, escaping closures) 198 | - Понимание, как создаются и удаляются объекты с помощью автоматического подсчета ссылок (ARC) 199 | - Понимание, потенциальной возможности возникновения сильного ссылочного цикла в замыканиях и переменных класса 200 | - Swift - как протокольно-ориентированный язык программирования, применение таких протоколов, как Equatable, Comparable, Sequence 201 | - Функционально-реактивное программирование (RxSwift, RxCocoa, Combine) 202 | - Error Handling - ошибки программирования, ошибки пользовательского ввода, асинхронные ошибки 203 | - [Макросы](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/macros/) в Swift (опционально) 204 | 205 |
206 |
207 | Создание приложений 208 | 209 | - Компоненты фреймворка [UIKit](https://developer.apple.com/documentation/uikit/): UISplitViewController, UICollectionView, жизненный цикл UIView. 210 | - Auto Layout - Адпативный текст и UI, Size Classes, создание ограничений в коде, понимание Layout Engine, иерархии представлений 211 | - SwiftUI: жизненный цикл View, View Identity, понимание как и когда перерисовывается view 212 | - Взаимодействие между UIKit и SwiftUI (`UIViewControllerRepresentable`, `UIViewRepresentable`, `UIHostingController`, `UIHostingConfiguration`) 213 | - Сетевой слой приложения: реализация взаимодействия с сетью, основа сетевого уровня, HTTP, REST, `NSURLSession`, сериализация JSON, тестирование запросов 214 | - Уровень хранения данных приложения: plist, NSUserDefaults/Keychain, File/Disk storage, CoreData 215 | - Архитектура: MVC, MVVM, MVP, VIPER, MV (SwiftUI), подход Clean Architecture 216 | - Дизайн паттерны и принцип SOLID 217 | - CoreAnimation, Drawing 218 | - [Grand Central Dispatch](https://developer.apple.com/documentation/dispatch) – многопоточное программирование, последовательные и параллельные очереди, основной поток, фоновый поток 219 | - [Concurrency](https://developer.apple.com/documentation/swift/concurrency) - cтруктурированный параллелизм (`TaskGroup`, `TaskSequence`, `Checked/Unsafe-Continuation`, `actor`, `TaskPriority`) и как он работает внутри, cooperative thread pool, акторы, управление памятью в задачах (ARC), отмена задач, actor hopping и другие проблемы акторов 220 | - Пуш уведомления 221 | - TDD (Test Driven Development), Unit Testing, UI Testing 222 | - Локализация приложений - String Catalogs или другие фреймворки 223 | - [Observation Framework](https://developer.apple.com/documentation/observation) и [SwiftData](https://developer.apple.com/documentation/swiftdata) (опционально) 224 | - [WidgetKit](https://developer.apple.com/documentation/widgetkit) и [App Intents](https://developer.apple.com/documentation/appintents) (опционально) 225 | 226 |
227 |
228 | Инструменты и процессы 229 | 230 | - CodeReview, Design Review 231 | - Xcode Intruments и LLDB - применение на практике для анализа проблем и отладки 232 | - Системы контроля версий git, GitLab 233 | - CI (Continuous integration), CD (Continuous Delivery) - инициация сборок, инструменты и сервисы, GitLab CI, Fastlane 234 | 235 |
236 | 237 | ## Список полезных и интересных материалов 238 | 239 |
240 | Периодические материалы 241 | 242 | - [https://podlodka.io/](https://podlodka.io) — подкаст обо всём 243 | - [https://iosdevweekly.com](https://iosdevweekly.com/) — недельный дайджест мира iOS/macOS разработки 244 | 245 |
246 |
247 | Блоги 248 | 249 | - [https://objc.io/](https://www.objc.io) — статьи и видео 250 | - [https://www.swiftbysundell.com/](https://www.swiftbysundell.com/) — блог и подкаст, хорошие статьи по базовым материалам 251 | - [https://nshipster.com](https://nshipster.com/) — блог с глубокими знаниями и разбором от инженера Apple 252 | - [https://www.avanderlee.com](https://www.avanderlee.com/) — блог с хорошим контентом на разные темы. 253 | - [https://www.pointfree.co/](https://www.pointfree.co/) — видео, есть бесплатные. Функциональные подходы. 254 | - [https://useyourloaf.com](https://useyourloaf.com/) — отличный блог и книга про AutoLayout. Контент книги = статьи из блога. 255 | - [https://refactoring.guru/ru](https://refactoring.guru/ru) - отличный сайт, есть книга. Паттерны ООП, разбор рефакторинга, примеры кода. 256 | - [https://www.hackingwithswift.com](https://www.hackingwithswift.com/) — хороший контент. Первый выбор для поиска типичных решений вместо stackoverflow 257 | - [https://sarunw.com/](https://sarunw.com/) — емко, четко, по делу, и приятный сайт 258 | - [@SwiftfulThinking](https://www.youtube.com/@SwiftfulThinking/videos) и [@seanallen](https://www.youtube.com/@seanallen/videos) - неплохие Youtube-каналы, актуальный контент 259 | - [WWDC Notes](https://wwdcnotes.com/documentation/wwdcnotes/) - краткий обзор видео и новостей с WWDC 260 | - Ещё блоги: [https://swiftrocks.com](https://swiftrocks.com/), [https://www.vadimbulavin.com](https://www.vadimbulavin.com/), [https://byby.dev/ios](https://byby.dev/ios) 261 | 262 |
263 |
264 | Статьи 265 | 266 | - [Поверхностный обзор архитектур](https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52) 267 | - [Математические основы AutoLayout](https://habr.com/ru/company/oleg-bunin/blog/437584/) 268 | - [MVC, и как его можно улучшить](https://rambo.codes/posts/2020-02-20-mvc-with-sugar). 269 | Отличная статья про FlowController, Child controllers. Используем часто в Контуре. 270 | - [FlowController против Coordinator](https://github.com/onmyway133/blog/issues/106). 271 | В Контуре мы перешли от координаторов к FlowController. 272 | - [Building Large-Scale Apps with SwiftUI: A Guide to Modular Architecture](https://azamsharp.com/2023/02/28/building-large-scale-apps-swiftui.html) 273 | - [Memory management when using async/await in Swift](https://www.swiftbysundell.com/articles/memory-management-when-using-async-await/) 274 | 275 |
276 |
277 | Книги 278 | 279 | - [App Architecture](https://www.objc.io/books/app-architecture/) – книга по архитектурам с примерами 280 | - [Книги на objc.io](https://www.objc.io/books) 281 | - [Разные книги с крутым контентом](https://store.raywenderlich.com/) 282 | Для начала в iOS хорошая iOS Apprentice. 283 | - [Книги от Mattt (NSHipster)](https://flight.school/) 284 | 285 |
286 |
287 | Swift 288 | 289 | - [Сравнение фич swift по версиям](https://www.whatsnewinswift.com/) 290 | - [Стандартная библиотека Swift](https://developer.apple.com/documentation/swift/swift_standard_library) 291 | 292 |
293 |
294 | RxSwift и Combine 295 | 296 | - [RxSwift Playground](https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Playgrounds.md) 297 | - [отличная книга по RxSwift с примерами](https://store.raywenderlich.com/products/rxswift) 298 | - [RxSwift to Combine Cheatsheet](https://github.com/CombineCommunity/rxswift-to-combine-cheatsheet) 299 | - [Using Combine](https://heckj.github.io/swiftui-notes/index.html) 300 | 301 |
302 |
303 | WWDC must watch 304 | 305 | - [Testing Tips & Tricks](https://developer.apple.com/videos/play/wwdc2018/417/) 306 | - [iOS Memory Deep Dive](https://developer.apple.com/videos/play/wwdc2018/416/) 307 | - [Understanding Crashes and Crashlogs](https://developer.apple.com/videos/play/wwdc2018/414/) 308 | - [Demistify SwiftUI](https://developer.apple.com/videos/play/wwdc2021/10022/) и [Demistify SwiftUI performance](https://developer.apple.com/videos/play/wwdc2023/10160/) 309 | - [Efficiency awaits: Background tasks in SwiftUI](https://developer.apple.com/wwdc22/10142) 310 | 311 |
312 |
313 | Доклады 314 | 315 | - [MVC is not your problem](https://www.youtube.com/watch?v=A1vzcxR-Ss0) — доклад о том, как делать MVC, не делая его massive. 316 | - [Правильный MVC](https://www.youtube.com/watch?v=J8u-tIt5wo4) — как справиться с MVC. Доклад от Redmadrobot 317 | - [Как работать с сетью правильно](https://www.youtube.com/watch?v=7HtE3Ci78nU) — доклад от Сбербанка. URLSession и правильные подходы к работе с сетью. 318 | 319 |
320 |
321 | Интересные каналы Telegram 322 | 323 | - [https://t.me/iosdev](https://t.me/iosdev) 324 | - [https://t.me/iosmakesmehate](https://t.me/iosmakesmehate) 325 | - [https://t.me/swift_ioss](https://t.me/swift_ioss) 326 | - [https://t.me/iosgt](https://t.me/iosgt) 327 | - [https://t.me/iosgr](https://t.me/iosgr) 328 | - [https://t.me/sparrowcode](https://t.me/sparrowcode) 329 | - [https://t.me/swift_ui](https://t.me/swift_ui) 330 | - [https://t.me/coffeeCodeEverywhere](https://t.me/coffeeCodeEverywhere) 331 | - [https://t.me/apptractor](https://t.me/apptractor) 332 | 333 |
334 | 335 | ## Level 4: `Senior` 336 | 337 | ### Roadmap 338 | 339 | - [TeamLead roadmap](https://tlroadmap.io/) – как развиваться самому в качестве TeamLead. Roadmap от Егора Толстого 340 | 341 | ### Other Roadmaps 342 | 343 | Здесь представлены популярные маршруты знаний от разных авторов. 344 | Их цель – дать представление об iOS-разработке и помочь сориентироваться в умениях и навыках. 345 | 346 | - [iOS developer roadmap](https://gist.github.com/azimin/a44086ef3e2d5992aa411b8aa60d05a3) от [Александра Зимина](https://twitter.com/ZiminAlex?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor) 347 | - [Swift developer roadmap](https://trello.com/b/hLGyiEEE/swift-developer-roadmap) от [Ronan Rodrigo](https://twitter.com/ronanrodrigodev) 348 | - [iOS developer roadmap](https://github.com/BohdanOrlov/iOS-Developer-Roadmap/blob/master/RoadmapProject/Script/Generated/ROADMAP.md) от [Богдана Орлова](https://twitter.com/bohdan_orlov) 349 | --------------------------------------------------------------------------------