Мобильный кот
2.72K subscribers
88 photos
3 videos
2 files
87 links
Все, что считаю важным про жизнь мобильного разработчика

Шкаф с материалами
https://t.me/cat_with_mobile_cabinet
Download Telegram
Это многопоточность, асинхронное (условно одновременное) выполнение задач.

В Swift есть специальный механизм, который позволяет работать с многопоточностью - Grand Central Dispatch. И если вы рассчитываете рано или поздно найти работе в качестве Swift Junior Developer, то обязаны рано или поздно изучить его.

А пока запомните, что async - это прекрасный способ, чтобы ваше приложение выполняло свои задачи. Но мне потребовались года, чтобы понять, что это хорошо для приложений, но плохо для человека.

В свои первые года профессиональной деятельности я очень гордился своей многопоточность и всячески поощрял ее. Действительно круто одной рукой писать код, другой восстанавливать упавшую Active Directory, и одновременно учить английский по учебнику. Это было круто и в 21 и в 25. Но чем ближе я подкрадывался к заветной тридцаточке (когда вроде бы надо подвести кое-какие итоги всего своего пути), тем чаще начал говорить фразу

«Почему в сутках не 25 часов?»

Мне тупо не хватало времени. Количество дел и стартапов росло, а дни становились короче;) И тогда я начал искать варианты Тайм Менеджмента, я хотел научиться впихнуть в свой график еще пару дел. Я впихивал невпихуемое, иногда за счет сна, иногда за счет выходных.
Это однопоточность, синхронное (последовательное) выполнение задач.

Swift позволяет выполнять задачи в однопоточном режиме, но пользоваться этим механизмом нужно с осторожностью. К примеру, вы можете случайно заморозить интерфейс, пока не закончится загрузка данных с сервера.

Мне потребовались года, чтобы понять, что однопоточность нужно с осторожностью использовать в приложениях, но постоянно использовать в профессиональной жизни.

За все это время я узнал десятки неправильных способов организации рабочего времени, на то, чтобы в конце концов прийти к однопоточности в своей работе. Оказалось, что мне не нужно «25 часов», мне нужно пересмотреть свой подход к работе.

Используйте однопоточность, когда делаете свою работу, выкиньте в помойку свой навык многопоточности. Все довольно просто:

1. Все задачи выполняются последовательно. Пока не завершена одна задача, я не перехожу ко второй.

2. Каждая новая задача занимает свое место в последовательности в соответствии с ее «важностью». Как определить важность? Спросите себя, чем обернется невыполнение задачи через 1-2 года. Для меня было открытием, но оказалось, что далеко не каждая задача, поступающая в режиме «надо прям сейчас, иначе хана», требует немедленной реакции и не способна отлежаться, по крайней мере до послеобеда.

3. Процесс работы делите на небольшие отрезки работа/отдых. Это так называемая техника Помодоро, когда вы, например, работаете 25 минут, после чего 5 минут отдыхаете.

4. В конце рабочего дня подводите итоги сегодняшнего дня и составляйте план на завтра, выделяя 1-2 наиболее важных дела. Остальные идут с пометкой «если будет возможность».

P.S. Очевидно, что вы практически не сможете заниматься одной задачей весь день, этого и не требуется. Рассматривайте однопоточность как в глобальном плане, когда вы не занимаетесь задачами из одной категории одновременно, так и в локальном, в рамках одного дня.
📚 Книга «ReWork Бизнес без предрассудков» Джейсона Фрайда и Девида Хайнемейера Хеннсона

#книга #стартап

Копался в своих закромах и наткнулся на это чудо от основателей компании 37signals. Сразу после выхода книга заслуженно стала бестселлером.

Текст написан очень просто, он освежает наш деревянный взгляд на то, как нужно делать бизнес, и вдохновляет к действию! В книге авторы рассказывают о своем, причем очень интересном, пути и подходах к организации работы в компании.

Сразу после прочтения я настолько вдохновился, что один за одним создал два неуспешных стартапа 😹 А еще пару десятков идей, появившихся в ходе чтения книги, ждут в блокноте своего рождения.

Лично я вынес из этой книги две важные мысли:

1. Работать нужно над тем проектом, который будет решать именно мою проблему. Чеши там, где чешется у тебя!

2. Что такое MVP* и зачем он вообще нужен, да и вообще, что это наиболее правильный способ работы над стартапом.

* Minimal viable product - минимальный жизнеспособный продукт
Генератор .gitignore-файлов для GIT

#инструменты

Просто укажите используемый язык, среду, менеджер пакетов и некоторые другие параметры и получите готовый «игнорщик». С его помощью можно заставить систему контроля версий игнорировать различные конфигурационные, временные и конфиденциальные, да и вообще любые, файлы, который не должны быть частью репозитория.

https://toptal.com/developers/gitignore
Как оттачивать свои навыки разработчика?

🤜🏻 Ката
- небольшая задача, позволяющая оттачивать профессиональные навыки разработчика.

#эффективность

Ката обычно представляет собой типовую задачу, вроде:

- найти все четные числа в переданной последовательности
- разбить строку на подстроки по определенным правилам

Выделяйте для решения ката один-два раза в день по 10 минут, воспринимайте это как

1. разминку перед рабочим днем
2. способ узнать новое интересное решение уже известной проблемы
3. наработать механическую память решения определенной задачи

Где брать ката?
Самый популярный сборник задач - codewars.com

P.S. Использовать понятие ката в разработке предложил Роберт Мартин в книге «Идеальный программист»
📚Книга «Чистый код» Роберта Мартина

#книга #оформлениекода

Роберт Мартин известен под кодовым именем «дядя Боб». Когда вы слышите о дяде Бобе, вы знаете, что речь идет о Роберте Мартине. И наоборот😬

То, о чем пишет дядя Боб - это опыт разработчика с двухсотлетним стажем. Он участвовал во многих громких и интересных скандалах проектах своего времени, набил большие шишки, общаясь с заказчиками и работодателями, и натер немалые мозоли, набивая код на клавиатуре.

Уникальность его книг в том, что дядя Боб знает, как делать правильно. И книга «Чистый код» тому доказательство.

Чистый код - это то, о чем рано или поздно задумывается каждый разработчик. Рано или поздно вы захотите, чтобы ваши проекты стали более прозрачными, а код более читабельным и понятным. Рано или поздно вы задумаетесь о том, что жизнь программного кода не должна завершаться вместе с окончанием работы над проектом. Код должен жить, развиваться, рефакториться при каждой возможности.

Так появляется опыт.

То, о чем пишет дядя Боб в этой книге - это подходы, советы и рекомендации по форматированию и оформлению вашего программного кода.

Долой говно-код! Разработчик в ответе за то, что он пишет! Будем создавать только качественный и красивый код.
📚 Предзаказ 6 издания книги "Swift. Основы разработки приложений под iOS" - 2020 год. Swift 5.3, Xcode 12

Скидка - 20 %
до окончания предзаказа

Доступ к скачиванию и отправка книги ориентировочно стартуют 23.11.2020 г.

Совместный заказ в другие страны
Австралия и Океания- @cdcpmv
Украина - @belik_ivan

При покупке книги вы получаете:
🔸 Бумажный вариант книги с отправкой по России, странам СНГ и всему миру (после 23.11.2020).
🔸 Электронный вариант (цветной PDF) книги с доступом из личного кабинета на сайте (после 23.11.2020)
🔸 Электронный вариант 5-го издания (сразу после покупки в личном кабинете)
🔸 Промокод на доступ к курсу с заданиями и тестами (будет отправлен на почту, активируете, когда захотите)

Что нового?

- формат книги изменен (теперь она больше и толще).
- материал актуализирован в соответствии со Swift 5.3 и Xcode 12. Переписаны и обновлены большинство глав в книге.
- добавлен новый материал, который ранее не входил в книгу:
- глава про SwiftUI.
- глава о выборе между классами и структурами.
- глава о протокол-ориентированном программировании.
- глава о числовом типе данных Decimal.
- глава о ключевом слове some.
- глава о принципах работы ARC и хранении value type и reference type в памяти.
- глава о новых методах для работы с массивами.
- разделы «Для чего это использовать», которые кратко показывают, для чего в реальных проектах могут быть использованы изученные возможности.
- наборы (set) переименованы в множества.
- обновлены графические материалы (схемы, рисунки, графики и скриншоты).
- исправлены найденные опечатки и учтены пожелания и замечания читателей по оформлению и содержанию.

По доставке

Я подключил Почту России и СДЭК, что обеспечивает покрытие практически по всему миру.

СДЭК - прекрасное решение по России, Белоруссии и Армении.
Почта России хороша тем, что доставляет по всему миру. Но время доставки может быть увеличено в связи с пандемией. Сейчас вы можете уточнить его на сайте Почты России.

После оформления и оплаты предзаказа купон будет отправлен вам на почту, а также доступен в личном кабинете на сайте.

📚 Ссылка на книгу
https://swiftme.ru/product/kniga-swift-razrabotka-prilozhenij-pod-ios-i-ipados-6-e-izdanie-kniga-1/

Ссылка на курс к книге
https://swiftme.ru/prakticheskie-zadaniya-i-testy-k-knigam/
Про оценку сроков выполнения работы

#продуктивность

У каждого из нас рано или поздно возникают проблемы с определением адекватных сроков выполнения работы. Сейчас я расскажу вам об схеме PERT - способе, которым пользуюсь лично я при оценке сроков доработок. Я говорю именно о доработках, а не реализации полноценных проектов. Для оценки крупномасштабной задачи так же можно использовать этот способ, но задачу потребуется разбивать на подзадачи и оценивать каждую отдельно.

PERT - была создана в 1957 году для ВМС США. При оценке по PERT вы должны определить три показателя:

О - оптимистичная оценка. Это срок выполнения задачи, при условии, что все без исключения во вселенной будет благоволить вашей работе, все пройдет гладко.

N - номинальная оценка. Это наиболее вероятный срок выполнения работы.

P - пессиместичная оценка. Это срок выполнения с учетом всех возможных неприятностей (кроме, конечно, глобальных катастроф).


Итоговая формула ожидаемого срока (М)

M = (О + 4N + P) / 6


✳️ Среднеквадратичное отклонение (F)

F = (P - O) / 6

Не стану объяснять, что это такое, скажу, как я использую это.


Обычно я указываю срок выполнения от M до (M+F) дней, например

📊 Задача.
В лучшем случае я выполню ее за 2 дня (O = 2)
Скорее всего я выполню ее за 5 дней (N = 5)
Маловероятно, что работа займет 13 дней (P = 14)

M = (2 + 4*5 + 14) / 6 = 6 дней
F = (14 - 2) / 6 = 2 дня

Вывод
Я выполню эту задачу за 6-8 дней.


⁉️ Кажется слишком просто и мудрено? Просто попробуй один раз, прежде чем отказываться.
🧲 Ортогональность, наследование, протоколы, Swift

#пишемхорошийкод

Каждый из нас рано или поздно задумывается о качестве своего кода. И на помощь в решении этого вопроса приходят архитектурные паттерны и различные методики, вроде принципов SOLID. И такое желание вполне естественно: без этого не берут в профессиональные программисты на большие зарплаты, в каждой второй вакансии на HH требуют знание знание правил, описанных дядей Бобом (aka Джордж Мартин, автор книги «Чистая архитектура»).

И вот вы познаете MVС, MVP и другие архитектуры, пытаетесь разделять функционал приложения между компонентами, создаете относительно независимые элементы кода, аббревиатура SOLID больше не пустой набор звуков, вы даже имеете представление о законе Деметры.

Но в процессе изучения матчасти вы рано или поздно в книгах или на stackoverflow встречаетесь с понятием Ортогональности. И не до конца понимаете, что оно значит. А ведь именно ортогональность лежит в основе всего материала, который вы изучали.

Читать далее на Telegra.ph
📚Книга «Программист-прагматик»

#книга #эффективность

Если и существует Библия программистов, то по моему скромному мнению это именно она!

Эта книга говорит о двух основных «китах» профессионального программиста:

1. Ответственность - если взялся за дело, то делай его до конца. В книге не просто говорится о том, что «ты должен», но и о том, как это «должен» воплощать в жизнь.

2. Высокое качество - каждый проект, над которым ты работаешь, должен быть первоклассным. В книге рассматриваются практические аспекты работы с программным кодом и построения архитектуры приложений.

Моей ошибкой при прочтении книги стало то, что я читал ее залпом, хотя не был готов к некоторым главам. Читайте только то, до чего доросли в профессиональном плане, так материал будет усваиваться проще и лучше.
Автоматическая проверка и коррекция стилевых ошибок Swift-кода прямо в Xcode

#инструменты

SwiftLint - библиотека, которая будет делать ваш код только лучше. Автоматическая проверка оформления кода с учетом предустановленных правил и возможностью создавать собственные правила. Особенно полезно при работе в команде.

https://github.com/realm/SwiftLint
Шорткаты Xcode. Часть 1

#пишемхорошийкод #инструменты #xcode

Общаясь с разработчиками довольно часто я вижу (и очень удивляюсь этому), что даже матерые девелоперы, пришедшие в iOS с богатым опытом других языков, совершенно не используют горячие клавиши при работе в Xcode. При этом, сколько раз вы видели огромные списки шорткатов? Я думаю видели и не один раз, но из-за размера этих списков прохожили мимо. Я считаю, что:

1. Шорткаты обязательно нужно использовать, это один из показателей профессионализма.
2. Вводить их в необходимо по чуть-чуть, иначе вы их просто не будете использовать.

Сейчас предлагаю попробовать в действии три базовых шортката, которые позволят быстрее редактировать код:

Переместить указатель в начало/конец строки: ⌘ + → или ⌘ + ←
Переместить указатель на слово влево/вправо: ⌥ + → или ⌥ + ←
Выделить текст: комбинации выше + ⇧

Попробуйте их в действии.
Например, чтобы полностью удалить какую-либо строку строку:
1. Переведите указатель в нее
2. Нажмите ⌘ + ← (перейди в начало строки)
3. Нажмите + ⌘ + → (выдели весь текст до конца строки)
4. Нажмите Backspace (удали выделенный код)
Xcode 12.3 - Проблема с периодическим/постоянным зависанием среды разработки

#xcode

Все чаще в сети и тематических чатах появляются сообщения от разработчиков о внезапном зависании Xcode 12.3. Он просто перестает отвечать, постоянно крутится индикатор загрузки. Писать код в таких условиях становится просто невозможно.

Решение: Как оказалось, вся проблема в беспроводной загрузке приложений на физическое устройство. До появления нового патча нам необходимо отказаться от этого способа загрузки, отключив его в окне настроек Устройств и симуляторов.