Принцип, который приходит с опытом. Усложнять намного легче, чем упрощать. В емкости и лаконичности решений и кода чувствуется мастерство. Любой код должен решать четко поставленные задачи и чаще не больше.
Обычно о нем говорят так: "Это позволяет вести разработку, руководствуясь экономическими критериями — Заказчик не должен оплачивать ненужные ему функции, а разработчики не должны тратить своё оплачиваемое время на реализацию того, что не требуется".
Как заметили в предыдущем посте про KISS, то они с YAGNI очень похожи. Но все же есть отличия.
Если KISS нацелен на упрощение и полезен в плане работы с теми требованиями, которые имеют место быть, то YAGNI более категоричен и применяется для ограждения проектов по разработке ПО от «размывания» их рамок.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍1
Время важных опросов: как выбираете работу?
Anonymous Poll
74%
Достойная оплата труда
46%
Интересные задачи
39%
Коллектив
26%
Бренд компании
45%
Сильные разрабы
22%
Техно культура
52%
Перспективы развития
32%
Возможность работы заграницей
18%
Прозрачность
14%
Я безработный
Инвестиция в знания
Опрос выше показал ожидаемую картину. Первый пункт не так важен, потому что он необходим для базового существования. Гораздо важнее, что ниже. Как распределены голоса не показывают реальную картину мира, а скорее портрет моих читателей. Меня радует, какие лидирующие показатели, ведь для людей, проголосоваших за это, я и пишу.
Каждый день мы сопротивляемся. Заработанные вчера деньги завтра не принесут счастье. В нашей реальности значимость цифр диктуется курсом и инфляцией. Держа в кармане деньги не станешь богаче. Хвалясь вчерашним победам не станешь счастливей.
Каждый день я пишу. Думая, кем стану делая это год. Идя на работу для меня важнее, кем я стану проработая там год. Я готов сократить расходы сегодня, чтоб приумножить завтра. Но не наоборот. Синица в руках обесценится как только попала в руки.
Такую философию прошу учитывать при бета-тестинге симулятора) Гребанный эйпл тестит экстернал сборку тысячу лет. Всем приду в лс, кто оставлял заявки.
Опрос выше показал ожидаемую картину. Первый пункт не так важен, потому что он необходим для базового существования. Гораздо важнее, что ниже. Как распределены голоса не показывают реальную картину мира, а скорее портрет моих читателей. Меня радует, какие лидирующие показатели, ведь для людей, проголосоваших за это, я и пишу.
Каждый день мы сопротивляемся. Заработанные вчера деньги завтра не принесут счастье. В нашей реальности значимость цифр диктуется курсом и инфляцией. Держа в кармане деньги не станешь богаче. Хвалясь вчерашним победам не станешь счастливей.
Каждый день я пишу. Думая, кем стану делая это год. Идя на работу для меня важнее, кем я стану проработая там год. Я готов сократить расходы сегодня, чтоб приумножить завтра. Но не наоборот. Синица в руках обесценится как только попала в руки.
Такую философию прошу учитывать при бета-тестинге симулятора) Гребанный эйпл тестит экстернал сборку тысячу лет. Всем приду в лс, кто оставлял заявки.
🔥9😐1
Почему книги Мартина такие популярные? Быть может дело в его форме подачи. В простых вещах. Высоких стандартах. Хз.
Её я впервые взял 5 лет назад еще до начала разработки на iOS. Тогда я писал на Node.js и React. Изучал SOLID и микросервисную архитектуру.
Идеи Мартина всегда и везде трактуют по-разному. И каждый готов написать по тысячи слов или сотни часов рассказов в чем ты не прав и о чем же по-настоящему хотел рассказать Мартин. Будь это 40 летний пхпшник или мобильщик с 10 годами опыта — каждый из них посчитает, что если он не попытается ни с кем поспорить, то он не настоящий эксперт
Но если отбрасывать теориков и смотреть к адекватным практикам, то главное не слова, а код. Хорошо организованный проект должен помогать выполнять задачи, а не слепо следовать чьим-то интерпретациям. Все идеи из книги должны быть использованы не отбрасывая здравый смысл и пожелания бизнеса. А если они не помогают — значит идеи были не так поняты и использованы.
Поэтому стоит приходить к этой книге после нескольких лет практики, когда потыкаешь безобразный прод. Перечитав ее сейчас я освежил знания и понял какую пользу должен приносить хороший дизайн проекта
#books
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3
По каким причинам система может решить убить приложение?
🟢 lvl: jun+
Удивительно, но многие часто ограничивают свои знания о сбоях в приложениях только force unwraping'ом или дедлоком. Простой вопрос "По каким причинам у нас может вылететь приложение?" вызывает панику.
У эйпл есть куча материалов. Пройдемся по базе:
Aborts (Abnormal Exits) — Это обычно происходит, когда апка сталкивается с вызовом abort(). Чаще это какое-то нежелательное поведение или assert.
Memory Limit — ну тут все просто, память переполняется и происходит крэш
Bad Access — Неправльный доступ к памяти. Например, попытка обратиться к несуществующему индексу массива.
Illegal Instruction — если простыми словами, это когда система не может понять инструкции языка. Как-то раз у меня такое было с одной версией хкода, где внутри структуры был тюпла и это приводило к крашу в рантайме. Пофиксилось обновлением.
App Watchdog — внутри системы есть таймер, который определяет время запуска нашего приложения. И, если майнтред отвечает слишком долго, то происходит принудительное завершение апки
Memory Pressure — иногда апка может сдохнуть, если находится в бекграунде и при этом используемому приложению потребуется больше памяти. Тогда система завершает свернутые в фон приложения.
- Почему мое приложение убивается?
- Причины заверешения работы апки
Удивительно, но многие часто ограничивают свои знания о сбоях в приложениях только force unwraping'ом или дедлоком. Простой вопрос "По каким причинам у нас может вылететь приложение?" вызывает панику.
У эйпл есть куча материалов. Пройдемся по базе:
Aborts (Abnormal Exits) — Это обычно происходит, когда апка сталкивается с вызовом abort(). Чаще это какое-то нежелательное поведение или assert.
Memory Limit — ну тут все просто, память переполняется и происходит крэш
Bad Access — Неправльный доступ к памяти. Например, попытка обратиться к несуществующему индексу массива.
Illegal Instruction — если простыми словами, это когда система не может понять инструкции языка. Как-то раз у меня такое было с одной версией хкода, где внутри структуры был тюпла и это приводило к крашу в рантайме. Пофиксилось обновлением.
App Watchdog — внутри системы есть таймер, который определяет время запуска нашего приложения. И, если майнтред отвечает слишком долго, то происходит принудительное завершение апки
Memory Pressure — иногда апка может сдохнуть, если находится в бекграунде и при этом используемому приложению потребуется больше памяти. Тогда система завершает свернутые в фон приложения.
- Почему мое приложение убивается?
- Причины заверешения работы апки
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍4
Экспертность
Любая форма управления вам скажет, что нет ничего лучше для работника и поддержки своей ценности на рынке, в компании, семье — это уровень твоей экспертизы. Но как почувствовать этот уровень?
Достаточно ли обдурить человека многочасовыми непонятными докладами на разных бесполезных площадках? Провести 1000 часов менторства? Собрать 1млн подписчиков на канале? Выпустить крутой продукт? Сделать полезную либу? Выиграть телеграмм конкурс? Получить должность тимлида?
Ни один из перечисленных выше приемов не доказывают ничего. Подписчики на канале легко накручиваются, а на накрутки идут зеваки. Джунам можно заливать любую дичь. Продукт становится успешным благодаря командам, а не разрабам. Должность тимлида можно получить просто потому, что предыдущий решил уйти, а никого рядом не было.
Экспертность проверяется выдержкой. Многолетним успехом. С опытом понимаешь, что только регулярные практики помогают поддерживать форму. Олимпийские игры идут раз в 4 года, и 3 года из них люди готовятся к ним. Хотим ли мы быть программистами олимпийского уровня и высока ли их ценность с экспертизой, ответ дает каждый сам себе.
Любая форма управления вам скажет, что нет ничего лучше для работника и поддержки своей ценности на рынке, в компании, семье — это уровень твоей экспертизы. Но как почувствовать этот уровень?
Достаточно ли обдурить человека многочасовыми непонятными докладами на разных бесполезных площадках? Провести 1000 часов менторства? Собрать 1млн подписчиков на канале? Выпустить крутой продукт? Сделать полезную либу? Выиграть телеграмм конкурс? Получить должность тимлида?
Ни один из перечисленных выше приемов не доказывают ничего. Подписчики на канале легко накручиваются, а на накрутки идут зеваки. Джунам можно заливать любую дичь. Продукт становится успешным благодаря командам, а не разрабам. Должность тимлида можно получить просто потому, что предыдущий решил уйти, а никого рядом не было.
Экспертность проверяется выдержкой. Многолетним успехом. С опытом понимаешь, что только регулярные практики помогают поддерживать форму. Олимпийские игры идут раз в 4 года, и 3 года из них люди готовятся к ним. Хотим ли мы быть программистами олимпийского уровня и высока ли их ценность с экспертизой, ответ дает каждый сам себе.
❤🔥6👍2
никогда не перестану делиться лучшим контентом из лучшего канала на ютубе
https://www.youtube.com/watch?v=X8W-6RDHqxM
https://www.youtube.com/watch?v=X8W-6RDHqxM
YouTube
ТЕОРИЯ ВЕРОЯТНОСТЕЙ ДЛЯ ПРОГРАММИСТА
Курс “Профессия Разработчик” от Skillbox — https://l.skbx.pro/GcgzunНовогодняя скидка на курс - 55%! Акция действует до конца декабря
Кэшбэк 10% на всё до конца года с бесплатной дебетовой Альфа-Картой. Закажите и получите вечное бесплатное обслуживание:…
Кэшбэк 10% на всё до конца года с бесплатной дебетовой Альфа-Картой. Закажите и получите вечное бесплатное обслуживание:…
👍5❤🔥3
Чтобы ответить на этот вопрос надо определить что такое вообще "просадка"? Frame drop? Ошибка движка отрисовки?
Нет, куда проще начать с простейшей реализации счетчика. Зачем же нам счетчик? Я уже говорил о системном Watchdog'e.
Концепция сложнее для многих, чем реализация. Сторожевой пес следит за нашим главным потоком и если он выполнится дольше, чем нужно, то он начинает лаять. Супер простая концепция узнать об избыточной нагрузки на main thread.
Распишу простую реализацию в картинках. Пример максимально упрощенный и нужен лишь для понимания самой концепции. Реальный боевой код был бы более масштабируемым, и покрывал бы больше корнер-кейсов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4
Один из важнейших вопросов на финалках во многие продуктовые компании от hr и тимлидов. Чьи интересы важнее при выполнении задач?
Anonymous Poll
65%
Бизнеса
52%
Пользователей
4%
Разрабов
1%
Дизайнеров
4%
Мои
5%
Ничьи. Че по кайфу то и делаем
1%
Нам планы генерирует нейронка
15%
Всех
О коммуникации
Я же обещал делиться материалами с учебы. Попробую в формате мини-эссе.
Многие разработчики не любят общаться. Не любят, не хотят, не умеют. Это нормально. У многих осталось мышление, что разраб — только исполнитель. Он должен просто писать код.
Но чем больше твоя компания и команда, тем сложнее твой продукт и больше у тебя продуктовых и технических зависимостей.
Программирование становится лишь малой частью твоей работы. Прежде чем написать код нужно много думать, искать компромиссы, формулировать и согласовывать. Ведь много вопросов, а ответов почти нет.
Даже имея две руки супер сеньор никогда не сможет кодить быстрее 15 джунов. Ему их нужно будет координировать и обучать. Здесь придется идти к бизнесу. Брать задачи. Отдавать их и писать замечания на код ревью (как минимум).
Писать и общаться на родном языке придется больше, чем на любом из программирования.
Никто не любит разговаривать, но это неизбежно. Этому нужно учиться, чтоб речи не стали пустыми, избыточными, слишком сухими или чересчур эмоциональными.
Эффективные коммуникации супер важная вещь для карьеры
Я же обещал делиться материалами с учебы. Попробую в формате мини-эссе.
Многие разработчики не любят общаться. Не любят, не хотят, не умеют. Это нормально. У многих осталось мышление, что разраб — только исполнитель. Он должен просто писать код.
Но чем больше твоя компания и команда, тем сложнее твой продукт и больше у тебя продуктовых и технических зависимостей.
Программирование становится лишь малой частью твоей работы. Прежде чем написать код нужно много думать, искать компромиссы, формулировать и согласовывать. Ведь много вопросов, а ответов почти нет.
Даже имея две руки супер сеньор никогда не сможет кодить быстрее 15 джунов. Ему их нужно будет координировать и обучать. Здесь придется идти к бизнесу. Брать задачи. Отдавать их и писать замечания на код ревью (как минимум).
Писать и общаться на родном языке придется больше, чем на любом из программирования.
Никто не любит разговаривать, но это неизбежно. Этому нужно учиться, чтоб речи не стали пустыми, избыточными, слишком сухими или чересчур эмоциональными.
Эффективные коммуникации супер важная вещь для карьеры
👍4😁1🤔1
Поприветствуем один из популярных паттернов. А также один из моих любимых.
Удивительно, как многие не знают реализацию самого популярного паттерна для изменения данных.
Для большинства легче затащить RxSwift или Combine, которые в 90% юзаются только для прослушки данных пары классов.
Здесь на помощь приходит он.
Пример опять максимально упрощенный и скорее академический, который не советует требованиям в реальном проде. Это вы должны всегда учитывать, когда смотрите что-то в интернете.
Чего вы еще ждете от бесплатных постов? Тут банально формат не позволяет делать качественный контент для ВАШЕГО прода и не подходит под контексты. Проектирование - очень индивидуальная вещь, которая зависит от бизнес приоритетов, легаси и ресурсов.
Хотите норм разборы — заказывайте консультацию или оформите в будущем подписку на симуляторе
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍6💯3🏆2⚡1🔥1
Так, походу разработка уже вымирает и ИИ скоро нас заменит. Делаю доклады "как работать на 3х работах используя ИИ". Зафиксирую авторские права на этот контент и подам в суд на всех копипастеров
https://www.youtube.com/watch?v=RmaCJyvSyUE
https://www.youtube.com/watch?v=RmaCJyvSyUE
YouTube
Will ChatGPT Destroy iOS Developer Jobs? A Demonstration
Head to https://squarespace.com/seanallen to save 10% off your first purchase of a website or domain using code SEANALLEN.
I demonstrate how to use ChatGPT to create an iOS App that makes a network call to the GitHub API to pull down a list of my followers…
I demonstrate how to use ChatGPT to create an iOS App that makes a network call to the GitHub API to pull down a list of my followers…
😁5
После огромных проектов, с групповыми танцами с бубнами и сборками по 40 минут ты мягко говоря удивишься, когда более 60 разрабов работают с проектом и он собирается за пару минут на м1. Разрабам на интел чуть не везет, но все же.
Команда Speed — это эталон организации технических команд, когда целый отдел из сильных разрабов (даже есть из фейсбука), следят за твоими секундами по настройке окружения, билдингу и всему, что занимает хоть лишнюю секунду твоей жизни. Всем бы в дом такую команду
https://youtu.be/YnojvzNPVeg
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
iOS CI из конфет и мечей | Влад Алексеев, lead iOS engineer
О докладе Влада:
- Авитовцы творят, ЧТО ХОТЯТ с своей фермой миников, а конкуренты КУСАЮТ ЛОКТИ — почему тесты идут так быстро?
- Россияне обомлели, когда увидели, что iOS-релиз требует ХОТФИКСА. Авитовцы делятся секретом, как.
- Написали свою GUI-тулзу для…
- Авитовцы творят, ЧТО ХОТЯТ с своей фермой миников, а конкуренты КУСАЮТ ЛОКТИ — почему тесты идут так быстро?
- Россияне обомлели, когда увидели, что iOS-релиз требует ХОТФИКСА. Авитовцы делятся секретом, как.
- Написали свою GUI-тулзу для…
👍8❤6🔥3
🔃 Delegate
⏺ lvl: jun
Удивительный паттерн. Мы все его юзаем постоянно, но скажи нам объяснить что это — зависнем и испытаем когнитивную перегрузку. Пойдем к доке:
❔ Делегирование — это шаблон проектирования, который позволяет классу или структуре передавать (или делегировать ) часть своих обязанностей экземпляру другого типа. Протокол может быть принят классом, структурой или перечислением, чтобы обеспечить фактическую реализацию этих требований
В отличной статье Джона Сандела также описывается цель делегата:
❕ Основная цель шаблона делегата — позволить объекту обмениваться данными со своим владельцем несвязанным образом. Не требуя, чтобы объект знал конкретный тип своего владельца, мы можем писать код, который намного проще повторно использовать и поддерживать.
Говоря другими словами, мы зависим от абстракции, а не от деталей. А делегат — это исполнитель, который выполняет часть задач от своего руководителя. Протокол же — это список обязанностей, которые передадут исполнителю. И пока он не выполнит реализацию требований — работа не будет начата.
Удивительный паттерн. Мы все его юзаем постоянно, но скажи нам объяснить что это — зависнем и испытаем когнитивную перегрузку. Пойдем к доке:
В отличной статье Джона Сандела также описывается цель делегата:
Говоря другими словами, мы зависим от абстракции, а не от деталей. А делегат — это исполнитель, который выполняет часть задач от своего руководителя. Протокол же — это список обязанностей, которые передадут исполнителю. И пока он не выполнит реализацию требований — работа не будет начата.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡14❤3
С какой стороны зайти к диспетчирезации? Наверное, с перфоманса. Все часто говорят о магических цифрах. О цифрах на порядок больше с final у класса, но давайте проверим на практике.
Все очень просто. Берем
measure
для трекинга и класс. Для него будем играться с модификаторами и смотреть на результат.Для примера буду юзать класс с координатами, приватный и публичный метод.
Внутри теста на перфоманс — инициалиция класса и цикл на 10 млн операция с вызовом публичного метода.
Посмотрим на результат в картинках
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😁2