Пузырь лопнул
Как я уже говорил любым начинающим и всем, кто приходит на обучение — сейчас вкатываться в ит не лучшее время. Лучше развиваться в своем направлении и всегда понимать, что поиск работы — это не самое главное. Впереди еще спринты закрывать и конкурировать.
Cтать итшником не делается по щелчку пальцев. Сейчас вакансий все меньше, а отборы сложнее. Единственный вариант повысить себе шансы на успех, не разочароваться и не выгореть — настраивать себя на долгий марафон.
Ежедневная практика, образование, общение в кругу уже практикующих итшников. А тут вам поможет будущий симулятор иосника. Кстати, на след недели будет голосование на лучшее название.
Dev OS, Swift AI или симулятор безработного🤬 🤣 😬
https://www.youtube.com/watch?v=1S_1MmOY0yY
Как я уже говорил любым начинающим и всем, кто приходит на обучение — сейчас вкатываться в ит не лучшее время. Лучше развиваться в своем направлении и всегда понимать, что поиск работы — это не самое главное. Впереди еще спринты закрывать и конкурировать.
Cтать итшником не делается по щелчку пальцев. Сейчас вакансий все меньше, а отборы сложнее. Единственный вариант повысить себе шансы на успех, не разочароваться и не выгореть — настраивать себя на долгий марафон.
Ежедневная практика, образование, общение в кругу уже практикующих итшников. А тут вам поможет будущий симулятор иосника. Кстати, на след недели будет голосование на лучшее название.
Dev OS, Swift AI или симулятор безработного
https://www.youtube.com/watch?v=1S_1MmOY0yY
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
IT пузырь лопнул. Что делать junior разработчикам? / Мобильный разработчик
Всем привет. Я думаю многие заметили, что вокруг что-то происходит и это как-то отражается на разработке. Я давно уже объяснял в различных чатах, на что стоит надеяться и что делать тем, кто решил стать мобильным разработчиком. Теперь я все это просуммировал…
🗿6😁3💅2
365 дней богу Алгоритмов: Отчет за неделю
Вкратце: задачи на строки в swift — боль
Напомню, что вместо ежедневных постов решил сделать еженедельный.
Где-то получилось решить задачи костыльно, где-то с небольшими подсказками. А те, над которыми тупил и пришлось разбирать на ютубе — я просто пока не буду публиковать. Через время к ним вернусь без подсказок.
9. Найти наибольшое число, которое больше больше остальных минимум в 2 раза: Здесь я не стал что-то изобретать и просто закостылил. Не смотрел норм решения еще, потом разберу. Мб кто подскажет сразу как нужно было норм сделать
10. Плюс один к большому числу. Тут 2 решения: мое и неправильное. Неправильное оно потому, что решается как-то в лоб. А мое просто не срабатывало из-за больших чисел🤣 Ладно, признаю, что переусложнил
11. Две суммы. Супер стандартная задача на всех собесах. Эту вариацию решил через хэшмапу
12. Конкатенация строки. Эту задачу решил сделать максимально просто и без использования системных функций. Можно и лучше, но пока не смотрел решения
13. Поиск первого индекса подстроки. Тут я наоборот пошел в сторону системных функций, ибо со строками добавлять только доп массивами норм решить, а этого не хочется делать
14. Самый длинный префикс. Решение неоптимальное. Строки все же боль в свифте
15. Реверс строки. Решил через 2 поинтера. Все супер изи. Дефолт задача на собесах
16. Две суммы в отсортированном массиве. Очень похожая задача с прошлой, но решил через 2 поинтера также
#365_дней_богу_алгоритмов
Вкратце: задачи на строки в swift — боль
Напомню, что вместо ежедневных постов решил сделать еженедельный.
Где-то получилось решить задачи костыльно, где-то с небольшими подсказками. А те, над которыми тупил и пришлось разбирать на ютубе — я просто пока не буду публиковать. Через время к ним вернусь без подсказок.
9. Найти наибольшое число, которое больше больше остальных минимум в 2 раза: Здесь я не стал что-то изобретать и просто закостылил. Не смотрел норм решения еще, потом разберу. Мб кто подскажет сразу как нужно было норм сделать
10. Плюс один к большому числу. Тут 2 решения: мое и неправильное. Неправильное оно потому, что решается как-то в лоб. А мое просто не срабатывало из-за больших чисел
11. Две суммы. Супер стандартная задача на всех собесах. Эту вариацию решил через хэшмапу
12. Конкатенация строки. Эту задачу решил сделать максимально просто и без использования системных функций. Можно и лучше, но пока не смотрел решения
13. Поиск первого индекса подстроки. Тут я наоборот пошел в сторону системных функций, ибо со строками добавлять только доп массивами норм решить, а этого не хочется делать
14. Самый длинный префикс. Решение неоптимальное. Строки все же боль в свифте
15. Реверс строки. Решил через 2 поинтера. Все супер изи. Дефолт задача на собесах
16. Две суммы в отсортированном массиве. Очень похожая задача с прошлой, но решил через 2 поинтера также
#365_дней_богу_алгоритмов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7🏆3⚡1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Версия: 1.0 (7)
Сегодня понедельник, а значит время для обновлений по “симулятору иосника”.
Наши спринты недельные и в этой версии для бета-тостеров мы добавили “Избранное”. Теперь можно фильтровать материалы по названию и добавлять понравившиеся в избранное.
Также мы сделали:
- Исправили баги предыдущей версии и завели новые
- Добавили дебаг меню. Теперь можно настраивать время тестов
- Убрали запрет на скриншоты и запись. Все равно до релиза все поменяется 😉
- Добавили новые материалы
- Локальные пуши. Теперь вам будут приходить напоминания о ежедневной практике
- Тренажеры: GCD, escaping closure, Method Dispatch, capture list, hit testing
- Собеседования.
- Ежедневные испытания
А я напоминаю, что если хотите стать бета-тестером — заходите в этот чат. На отметке 100 человек закроем прием заявок.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6💅4🐳2❤1
Метод двух указателей
Одна из базовых техник решения алгоритмов.
В примерах видна суть: мы пользуемся тем, что при увеличении значения одного указателя значение другого указателя тоже может только увеличиваться. Если мы перебираем i в порядке возрастания, то j тоже будет только возрастать — поэтому не надо перебирать каждый раз заново, можно просто продолжать с предыдущего значения.
Когда применять?
Если требуется решить задачу с поиском подмассивов или подстрок.
Многие задачи, решаемые двумя указателями, можно решить и бинпоиском ценой дополнительного logN в сложности решения.
Одна из базовых техник решения алгоритмов.
В примерах видна суть: мы пользуемся тем, что при увеличении значения одного указателя значение другого указателя тоже может только увеличиваться. Если мы перебираем i в порядке возрастания, то j тоже будет только возрастать — поэтому не надо перебирать каждый раз заново, можно просто продолжать с предыдущего значения.
Когда применять?
Если требуется решить задачу с поиском подмассивов или подстрок.
Многие задачи, решаемые двумя указателями, можно решить и бинпоиском ценой дополнительного logN в сложности решения.
❤5👍2🔥1🌭1
Наш любимый паттерн в иос. Куда не глянь в системные АПИ, то почти везде синглтон. Нужно разобрать в чем же прикол и когда же будет полезен.
Назначение:
Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
Мотивация:
Для некоторых классов важно, чтобы существовал только один экземпляр. Хотя в системе может быть много принтеров, но возможен лишь один спулер. Должны быть только одна файловая система и единственный оконный менеджер. В цифровом фильтре может находиться только один аналого цифровой преобразователь (АЦП). Бухгалтерская система обслуживает только одну компанию.
Применимость:
- должен быть ровно один экземпляр некоторого класса, легко доступный всем клиентам;
- Предоставляет глобальную точку доступа. Единственный экземпляр должен расширяться путем порождения подклассов, и клиентам нужно иметь возможность работать с расширенным экземп ляром без модификации своего кода.
- Клиенты должны получать только доступ через свойство shared
Почти реализации требуют скрыть конструктор по умолчанию и создать публичный статический метод, который и будет контролировать жизненный цикл.
- Нарушает принцип единственной ответственности класса.
- Маскирует плохой дизайн.
- Проблемы многопоточности.
- Требует постоянного создания Mock-объектов при юнит-тестировании.
- Какой-нибудь душнила прибежит и скажет нужен обязательный приватный init
Пример взят из официальной доки эйпла
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍4💅2
Не решал 100 задач на литкоде — не программист
Ну че, кто пойдет тренить алгосы в топ 2 ит компанию СНГ? (После авито)
https://yandex.ru/yaintern/algorithm-training
Ну че, кто пойдет тренить алгосы в топ 2 ит компанию СНГ? (После авито)
https://yandex.ru/yaintern/algorithm-training
Тренировки Яндекса по алгоритмам, ML и DevOps
Новый сезон Тренировок по алгоритмам и ML
👍8
Как плохой дизайн стоил шесть разрабов
Когда сталкивался с плохим дизайном, то не сразу это понимал. Еще чаще не понимают те, кто запроектировал. Эффект икеи. То когнитивное искажение, что увеличивает в глазах стоимость дерьма, сделанное своими руками.
Самым запоминающим случаем стала подработка парт-тайм в одном крупном приложении. Только после заподозрил неладное, когда уже сказали об ушедших пяти разрабах до меня и как же долго меня искали.
Плохой дизайн — это когда простые вещи долгие и сложные. Хочешь открыть дверь в туалет, но на этой двери замок, ключ к которому генерится рандомно. Зачем? Внезапно стал грабителем банка био-материалов. В добавок появляются неожиданные сюрпризы. Нажимаешь на смыв, а выключается свет. Выключатель же выполняет функцию смыва. Почему?
Мы хотим обвинить других в непонимании наших дизайнерских решений. Ведь я же живу, удобно. А вон те, смотрите, ноют. Но всё стоит на общих правилах. Первый из них — не изобретай велосипед.
Хороший дизайн сложно достичь и легко потерять. Оригинальность фразы из пабликов вк, но суть передает хорошо. Отлично запроектированная система почти никогда не получится с первого раза. Для нее нужен хороший опыт, тонкости которого приходят со временем. Опыт приводит к проверенным практикам. Проверенные практики избавляют от изобретения велосипедов. Но это не значит, что мы должны от него отказываться. Хороший дизайн полезен для новичков и тебя, если код требует сопровождения.
Еще бывает, что соло разработчики специально шифруют решения. Искусственно повышая свою стоимость, изобретая паттерны, которые поймут только они. Приковывают себя наручниками к батареи и глатают ключ. Спустя время другие же просто не захотят жить в этом болоте. А тебе этот мир стал абсолютно понятным.
Прошедшие временем практики облегчают разработку. Особенно новым разработчикам. Каждый раз изобретая что-то свое лучше задавать вопрос "А не делал ли кто-то это до меня?". Почти всегда ответ будет, что делал. Следующий вопрос: "А чем мое изобретение лучше?". Почти всегда ответ будет, что ничем.
С помощью общих паттернов можно улучшить порог вхождения, документацию и сопровождение. Да и в конце концов деньги и время. А если это не важно, то большой вопрос зачем ты это делаешь.
P.S. Если ты подумал про дизайн интерфейсов, то перечитай
Когда сталкивался с плохим дизайном, то не сразу это понимал. Еще чаще не понимают те, кто запроектировал. Эффект икеи. То когнитивное искажение, что увеличивает в глазах стоимость дерьма, сделанное своими руками.
Самым запоминающим случаем стала подработка парт-тайм в одном крупном приложении. Только после заподозрил неладное, когда уже сказали об ушедших пяти разрабах до меня и как же долго меня искали.
Плохой дизайн — это когда простые вещи долгие и сложные. Хочешь открыть дверь в туалет, но на этой двери замок, ключ к которому генерится рандомно. Зачем? Внезапно стал грабителем банка био-материалов. В добавок появляются неожиданные сюрпризы. Нажимаешь на смыв, а выключается свет. Выключатель же выполняет функцию смыва. Почему?
Мы хотим обвинить других в непонимании наших дизайнерских решений. Ведь я же живу, удобно. А вон те, смотрите, ноют. Но всё стоит на общих правилах. Первый из них — не изобретай велосипед.
Хороший дизайн сложно достичь и легко потерять. Оригинальность фразы из пабликов вк, но суть передает хорошо. Отлично запроектированная система почти никогда не получится с первого раза. Для нее нужен хороший опыт, тонкости которого приходят со временем. Опыт приводит к проверенным практикам. Проверенные практики избавляют от изобретения велосипедов. Но это не значит, что мы должны от него отказываться. Хороший дизайн полезен для новичков и тебя, если код требует сопровождения.
Еще бывает, что соло разработчики специально шифруют решения. Искусственно повышая свою стоимость, изобретая паттерны, которые поймут только они. Приковывают себя наручниками к батареи и глатают ключ. Спустя время другие же просто не захотят жить в этом болоте. А тебе этот мир стал абсолютно понятным.
Прошедшие временем практики облегчают разработку. Особенно новым разработчикам. Каждый раз изобретая что-то свое лучше задавать вопрос "А не делал ли кто-то это до меня?". Почти всегда ответ будет, что делал. Следующий вопрос: "А чем мое изобретение лучше?". Почти всегда ответ будет, что ничем.
С помощью общих паттернов можно улучшить порог вхождения, документацию и сопровождение. Да и в конце концов деньги и время. А если это не важно, то большой вопрос зачем ты это делаешь.
P.S. Если ты подумал про дизайн интерфейсов, то перечитай
👍8💯3
Поговорим о не особо популярных паттернах, но встречающихся гораздо чаще, чем мы ожидаем. На секунду даже удивился, что это устаканенный паттерн.
Один раз я встречал его на горе проекте, который взял концепцию ReactorKit, но смешал это с Worker'ами и Observer'ами.
Реакторы идеально ложатся на event-driven архитектуры. Где у нас есть общее событие для приложения, которое может повлиять на состояние экранов в разных местах. Допустим достижение нового уровня изменит наносимый и получаемый урон, откроет новые диалоги и локации.
Реактор — это тот паттерн, который поможет управлять нашими событиями. Он как телефоный оперетор, который отвечает на звонки и переводит их на необходимые контакты.
В мире иос — реактором можно назвать обработку нажатий. Где есть Event Loop, который СИНХРОННО по-умолчанию выполняет обработку событий: тачи, таймеры, сигналы ОС. Очень важная деталь в синхронности, потому что если асинхронно, то это паттерн проактор.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍59
В авито есть общие ценности. Я о них уже писал в начале карьеры и напишу о них на 9м месяце.
Больше всех мне нравится ценность «действуй масштабно и смело». С ней даже произошло пару забавных моментов. О них позже.
Эта ценность стала понятней после десятков спринтов, а еще сильнее, когда начал делать симулятор иосера. Она говорит об умении отпустить задачи.
Теперь о забавных ситуациях. Сама ценность говорит о потенциальном скоп-дропе, о задачах на которые ты согласился, но потом отбросил из-за низкой приоритетности. В этот момент владельцы этих задач могут написать нехороший фидбэк на перф ревью. Ведь их задачи не масштабные и амбициозные по-твоему мнению.
Благо этот вопрос решается здравым смыслом и оценками большинства.
Это очень важный принцип, который помогает в целеполагании и развитии.
Зрелый разработчик может опустить задачу с минимальным импактом пожертвовав немного внешними показателями, ради большей выгоды. Пусть даже ее не получив и потерпел поражение. Сама смелость приветствуется
Главное часто не проигрывать 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2🔥2
Event Loop — это цикл, который обрабатывает события. Это не уникальная особенность iOS платформы. Такой механизм почти всегда используются в графических интерфейсах (Windows) и на серверах (node.js) .
События, которые обрабатывает Event Loop:
- Нажатие кнопок, клавиатуры
- Вводные данные от устройств, датчиков
- Сообщения от других потоков и программ
У каждого потока есть свой собственный Event Loop, но он может не работать и придется запускать самому.
Автор статьи сам с нуля делает свой Event Loop. Очень полезно понять как все работает кодом, когда же почти всегда о ранлупе говорят только концептуально. В cтатье и ограничение иттераций, и реализация очереди для тасок с нуля
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14⚡1👍1
Что будет в консоли?
Anonymous Quiz
2%
С, B, A, A
17%
B, C, A, C
16%
A, B, C, C
2%
A, C, B, C
41%
A, B, C
1%
C, A, B
20%
B, C
👍5🔥1