Правильные Atomic свойства
Как-то на интервью меня спросили как сделать правильный atomic класс. Был дан класс, в котором есть свойство с геттером и сеттером. Что с ним не так?
В теории, все ок. Только есть один нюанс. Я помнил о нем. По отдельности геттер и сеттер будут работать нормально, но если будет оператор +=, то начнется гонка.
Потом уже я вспомнил решение, которое помогает нам решить эту проблему — создать отдельный метод для мутации.
Дополнительно про атомарность:
- Swift Atomic Properties with Property Wrappers
- Atomic Properties in Swift
- Benchmarking Swift Locking APIs
Как-то на интервью меня спросили как сделать правильный atomic класс. Был дан класс, в котором есть свойство с геттером и сеттером. Что с ним не так?
final class Atomic<Value> {
private let queue = DispatchQueue(
label: "com.test.atomic"
)
private var value: Value
var wrappedValue: Value {
get { return queue.sync { value } }
set { queue.sync { value = newValue } }
}
}
В теории, все ок. Только есть один нюанс. Я помнил о нем. По отдельности геттер и сеттер будут работать нормально, но если будет оператор +=, то начнется гонка.
Потом уже я вспомнил решение, которое помогает нам решить эту проблему — создать отдельный метод для мутации.
Дополнительно про атомарность:
- Swift Atomic Properties with Property Wrappers
- Atomic Properties in Swift
- Benchmarking Swift Locking APIs
www.objc.io
Swift Tip: Atomic Variables
Providing synchronized access to values
❤🔥7👍3👎2
Не зовите джунов и мидлов проводить сложные собесы
Ревьюер часто ошибается. У нас в компании есть обучение перед тем, как проводить собес. На каждой секции тебе надо 3 раза быть слушателем и 2 раза получить апрув под присмотром опытного ревьюера. Всего секций может быть 5. Быть хорошим интервьюером тоже навык.
Мне иногда ставят собесы, чтобы я оценивал тимлидов или техлидов. Хоть я и прошел весь отбор к собесам и провел уже >50 разных, без обучения таким собесам я отказываю. Одно дело собесить разрабов с небольшим опытом… Есть несколько причин:
1. Тимлидов должен оценивать опытный ревьюер тимлид или пара сеньоров
2. У нас с ними будет другой язык
Помимо четких односложных формулировок, опытный интервьюер должен обладать многими навыками. Где чаще софты не менее важны, чем харды . Часто бывает, что неопытные интервьюеры допускают ошибки при оценки кандидата. Они закапываются в незначительные детали, спорят о незадокументированных редких вещах или уходят в споры о теории. Это проблемы из-за малого практического опыта. В представлениях новичков есть свои проекции черного и белого.
Еще хуже, когда собеседование превращается не в лайтовый процесс оценки кандидата, а в стрессовую конкуренцию. Интервьюера может занести не туда и думать, что это интеллектуальная игра "Что? Где? Когда?" в которой он должен быть победителем.
Кто-то скажет, что методички помогают. Но часто нет. Методички всеми трактуются по-разному, даже если их четко прописать. Их будут игнорировать или забывать. А еще чаще видно, что автор задач в методичке закладывал один смысл, а менее опытный интервьюер или разработчик вложил свои идеи и домыслы.
Ревьюер часто ошибается. У нас в компании есть обучение перед тем, как проводить собес. На каждой секции тебе надо 3 раза быть слушателем и 2 раза получить апрув под присмотром опытного ревьюера. Всего секций может быть 5. Быть хорошим интервьюером тоже навык.
Мне иногда ставят собесы, чтобы я оценивал тимлидов или техлидов. Хоть я и прошел весь отбор к собесам и провел уже >50 разных, без обучения таким собесам я отказываю. Одно дело собесить разрабов с небольшим опытом… Есть несколько причин:
1. Тимлидов должен оценивать опытный ревьюер тимлид или пара сеньоров
2. У нас с ними будет другой язык
Помимо четких односложных формулировок, опытный интервьюер должен обладать многими навыками. Где чаще софты не менее важны, чем харды . Часто бывает, что неопытные интервьюеры допускают ошибки при оценки кандидата. Они закапываются в незначительные детали, спорят о незадокументированных редких вещах или уходят в споры о теории. Это проблемы из-за малого практического опыта. В представлениях новичков есть свои проекции черного и белого.
Еще хуже, когда собеседование превращается не в лайтовый процесс оценки кандидата, а в стрессовую конкуренцию. Интервьюера может занести не туда и думать, что это интеллектуальная игра "Что? Где? Когда?" в которой он должен быть победителем.
Кто-то скажет, что методички помогают. Но часто нет. Методички всеми трактуются по-разному, даже если их четко прописать. Их будут игнорировать или забывать. А еще чаще видно, что автор задач в методичке закладывал один смысл, а менее опытный интервьюер или разработчик вложил свои идеи и домыслы.
👍45
Fast Safe Mutable State
Старый, но интересный доклад про решения частых задач и устройство языка Swift:
🟡 Оценка сложности функций высшего порядка при разных контекстах
🟡 Оптимизация решений
🟡 Разбор частых проблем
🟡 Бенчмарки решений
🟡 Оптимизации с помощью Copy-On-Write
🟡 Анализ исходников языка и коллекций
Когда искал бронзу, а нашел золото
Старый, но интересный доклад про решения частых задач и устройство языка Swift:
Когда искал бронзу, а нашел золото
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Ben Cohen - Fast Safe Mutable State
👍18❤🔥2
8 лучших технологий управления временем
Про планирование и таймменеджменте говорят уже 10 лет и тяжело его назвать модным навыком. Уже есть множество техник и у каждого есть свои фавориты.
Про это рассказали уже во многих статьях и даже внедрили в обязательную программу высшего образования. Это обязательный софт скилл.
Назову ли я себя экспертом в планировании? Нет. Продолжаю ли я расписывать свой день и жить по расписанию? Да.
Недавно я решил улучшить этот навык и структурировать этот вопрос. Собрал, на мой взгляд, лучшие практики:
🔵 Принцип Парето
🔵 Матрица Эйзенхауэра
🔵 Mindmaps
🔵 Пирамида Франклина
🔵 Метод АБВГД
🔵 Задачи лягушек
🔵 Джедайские техники
🔵 Метод помидора
Про планирование и таймменеджменте говорят уже 10 лет и тяжело его назвать модным навыком. Уже есть множество техник и у каждого есть свои фавориты.
Про это рассказали уже во многих статьях и даже внедрили в обязательную программу высшего образования. Это обязательный софт скилл.
Назову ли я себя экспертом в планировании? Нет. Продолжаю ли я расписывать свой день и жить по расписанию? Да.
Недавно я решил улучшить этот навык и структурировать этот вопрос. Собрал, на мой взгляд, лучшие практики:
Please open Telegram to view this post
VIEW IN TELEGRAM
Forbes.ru
Закон Парето, или правило 80/20: как достигать большего при минимальных усилиях
Иногда усердие не окупается, и мы получаем результат, далекий от ожидаемого. Всегда ли эти вещи соотносятся? Закон Парето (его еще называют правилом 80/20) заключается в том, что 20% усилий дают 80% результата. И если избавиться от факторов, которые
👍14👎6
Чистая архитектура для SwiftUI
Автор статьи говорит, что большинство архитектурных шаблонов уйдут в историю вместе с UIKit. Концептуальные и технические изменения не оставят никого в стороне:
🟢 MVVM новый общий стандарт
🟢 Координаторы тесно связаны с маршрутизацией
🟢 VIPER, VIP, RIB больше не имеют смысла
🟢 Хоть и кол-во слоев в Clean Architecture либерально, но чаще достаточно только три
Мне кажется, со временем мобильная разработка станет похожа на современный web, где понятие архитектурный шаблон сократилось до пары штук
Автор статьи говорит, что большинство архитектурных шаблонов уйдут в историю вместе с UIKit. Концептуальные и технические изменения не оставят никого в стороне:
Мне кажется, со временем мобильная разработка станет похожа на современный web, где понятие архитектурный шаблон сократилось до пары штук
Please open Telegram to view this post
VIEW IN TELEGRAM
Alexey Naumov
Clean Architecture for SwiftUI
Are VIPER, RIBs, MVVM, VIP, or MVC suitable for a SwiftUI project?
👍19👎10
MVU для SwiftUI
Об MVU я случайно узнал от андроид разрабов. Говорят, он уже 2 года как один из модных паттернов. Сразу пошел гуглить о нем и нашел статью, что паттерн стремительно набирает популярность в среде фронтенда, андроидов и геймдева.
MVU, популяризированный архитектурой Elm. В MVU модель определяет состояние приложения, представление отображает пользовательский интерфейс на основе состояния (модели), а функция обновления изменяет состояние на основе сообщений (таких как действия пользователя или ответы сервера). Этот однонаправленный поток данных обеспечивает предсказуемость пользовательского интерфейса и существенно упрощает отладку.
Еще один однонаправленный паттерн, который нам так не хватало.
Об MVU я случайно узнал от андроид разрабов. Говорят, он уже 2 года как один из модных паттернов. Сразу пошел гуглить о нем и нашел статью, что паттерн стремительно набирает популярность в среде фронтенда, андроидов и геймдева.
MVU, популяризированный архитектурой Elm. В MVU модель определяет состояние приложения, представление отображает пользовательский интерфейс на основе состояния (модели), а функция обновления изменяет состояние на основе сообщений (таких как действия пользователя или ответы сервера). Этот однонаправленный поток данных обеспечивает предсказуемость пользовательского интерфейса и существенно упрощает отладку.
Еще один однонаправленный паттерн, который нам так не хватало.
Medium
SwiftUI: Model View Update - Everything you need to know.
SwiftUI is essentially based on the MVU (Model-View-Update) pattern. In this pattern, the view observes observable variables to update…
👎14👍3
Что выведется в консоль?
Anonymous Quiz
16%
a, b, b, a
4%
nil, nil, b, a
8%
a, b, nil, nil,
45%
nil, nil, nil, nil
5%
Будет ошибка
22%
Посмотреть результат
👍10👎9
2# Что выведется в консоль ?
Anonymous Quiz
3%
a, b, nil, nil
10%
nil, b, b, nil
48%
a, b, b, a
11%
nil, nil, nil, nil
2%
nil, nil, b, a
3%
a, nil, nil, a
5%
будет ошибка
19%
посмотреть результат
👎11👍6😡6 1
Что выведет в консоль? #3
Anonymous Quiz
20%
a, b, b, a
3%
a, nil, nil, a
7%
nil, b, b, nil
35%
nil, b, nil, nil
12%
nil, nil, nil, nil
23%
Посмотреть результат
👍7👎7
Forwarded from Мобильная разработка
Если пропустили новость, то Ян «Hixie» Хиксон, фаундер и техлид Flutter, покинул Google
Новость грустная. Но что она значит на самом деле? Ведь, как сказал сам Hixie, OpenSource тем и хорош, что даже в этом случае он сможет продолжать работать над Flutter.
Скорее всего, последствия печальны не столько для Flutter сколько для Google. Разработчик из Apple Тим Снит подтвердил, что последняя неделя была сложной для команды Flutter, а в Google по непонятной причине не понимают ценность этого проекта и необходимость сохранения ресурсов его разработчиков.
«Любой негатив, который последнее время публикуют про ситуацию в команде Flutter, исходит от людей, которые хотели, чтобы их старшие руководители лучше распоряжались этим удивительным наследием» — считает разработчик.
Он так же рассказал: «Дело не в зарплате. Это разработчики, которые считают эту работу своим призванием. Это не взаимозаменяемые ресурсы, которые можно перераспределять по своему усмотрению. Я надеюсь, что Google наконец осознает, какими ценными активами она обладает, пока не стало слишком поздно. Часы тикают».
#flutter #google
Новость грустная. Но что она значит на самом деле? Ведь, как сказал сам Hixie, OpenSource тем и хорош, что даже в этом случае он сможет продолжать работать над Flutter.
Скорее всего, последствия печальны не столько для Flutter сколько для Google. Разработчик из Apple Тим Снит подтвердил, что последняя неделя была сложной для команды Flutter, а в Google по непонятной причине не понимают ценность этого проекта и необходимость сохранения ресурсов его разработчиков.
«Любой негатив, который последнее время публикуют про ситуацию в команде Flutter, исходит от людей, которые хотели, чтобы их старшие руководители лучше распоряжались этим удивительным наследием» — считает разработчик.
Он так же рассказал: «Дело не в зарплате. Это разработчики, которые считают эту работу своим призванием. Это не взаимозаменяемые ресурсы, которые можно перераспределять по своему усмотрению. Я надеюсь, что Google наконец осознает, какими ценными активами она обладает, пока не стало слишком поздно. Часы тикают».
#flutter #google
👍7👎2❤🔥1😡1
Реимплементация опционала с дженериком и Equatable
Сейчас, когда SwiftUI весь в дженериках, то вопросы о них стали звучать чаще. На собесах почти всегда уже просят написать свой опционал, а к нему добавить Equatable или Hashable. Почти все такие вопросы легко гуглятся. Но есть интересные статьи.
Самые частые вопросы, которые мне задавали давно и недавно:
🔵 Как написать свой Optional?
🔵 Как использовать Equatable, Comparable и Hashable протоколы?
🔵 Как ограничить дженерики протоколами
🔵 Как написать свой uwrap
🔵 Написать функцию, которая удаляет дубликаты
Пример не для прода, а скорее концептуальный
Cтатьи:
- Re-implement optionals in Swift
- GENERICS in Swift
Сейчас, когда SwiftUI весь в дженериках, то вопросы о них стали звучать чаще. На собесах почти всегда уже просят написать свой опционал, а к нему добавить Equatable или Hashable. Почти все такие вопросы легко гуглятся. Но есть интересные статьи.
Самые частые вопросы, которые мне задавали давно и недавно:
Пример не для прода, а скорее концептуальный
Cтатьи:
- Re-implement optionals in Swift
- GENERICS in Swift
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12😡3 1
Буду иногда заливать прикольный ит контент
На западе чет слишком качественные короткие видосы пошли
На западе чет слишком качественные короткие видосы пошли
👍26😡7 4❤🔥3 1
Как умер один фуллстек разработчик
Нельзя объять необъятное. Эту фразу больше 10 лет назад сказала мой преподаватель по программированию. Она возвращается бумерангом каждые пару лет в разных сферах. В спорте. В жизни. В работе.
Начнем с моего it лора. В проде писал на многих многих языках. Сайты начинал с php и его долларов. Потом ушел в JavaScript и в его динамичную типизацию. Писал фронт, бэк и мобилку. В то время было модно быть фуллстэком, технологий не так много и бизнес хотел сократить расходы. Мода прошла. В итоге все снова пришло к узким спецам, а под словом фуллстэк многие представляют широкого спеца в плохом смысле. Он нахватался поверхностно отовсюду, но толком ни в чем не разбирается. Он хорош на легких проектах или стартапах, но почти бесполезен в по-настоящему крупных и сложных проектах.
На днях мы общались с парой команд из кроссплатформ. Я вел эту встречу и задавал 90% вопросов. Они выбрали натив. Точнее их попросили. Две разные команды. Две разные технологии. Их проблема была не в технологиях, а в людях. В найме. Сложно найти качественного спеца, который одинаково хорошо разбирается в технологиях, не боится алгоритмов, знает глубокие специфики обеих платформ и хорошо шарит за архитектуру. Легче переписать все на натив.
Мой отец тренер физкультуры. Он ярый фанат спорта и всю жизнь хотел приучить меня к каждому виду. Так я пришел к смешанным единоборствам. Тогда было несколько школ обучения. Одни хотели прокачать все скиллы равномерно. Другие качали преимущественно свои сильные навыки, а остальные были второстепенные. Первые были хороши на слабых соревнованиях. Выигрывали сложные и показывали высокий результат последние. Даже тут нет чемпионов среди тех, кто знает много стилей. Тут чемпионы те, кто отлично владеет одним.
Даже опытные стратеги скажут, что играя одними фигурами или юнитами чаще худшая тактика на высоких уровнях или со сложными задачами. Хороший отряд или команда должна быть сбалансирована из разных спецов, лучших в своём деле. Этому меня научил Xcom на последних сложностях.
На двух стульях не усидишь. А на пяти и подавней. Написав Хеллоу ворд на незнакомом языке не делает тебя экспертом. Пнув по мячу ногой ты не станешь футболистом. Заборов разок соперника борцом. Нет ни одного музыканта, кто хорош во всех инструментах. Художника, во всех стилях.
Нужно быть экспертом в одной специфике, а не бежать соперничать со всеми во всем. Каждый должен быть хорош в чем-то одном. Выбирать нужно работу, людей, тренеров, которые улучшают сильные стороны. И не бежать качать слабые.
Нельзя объять необъятное. Эту фразу больше 10 лет назад сказала мой преподаватель по программированию. Она возвращается бумерангом каждые пару лет в разных сферах. В спорте. В жизни. В работе.
Начнем с моего it лора. В проде писал на многих многих языках. Сайты начинал с php и его долларов. Потом ушел в JavaScript и в его динамичную типизацию. Писал фронт, бэк и мобилку. В то время было модно быть фуллстэком, технологий не так много и бизнес хотел сократить расходы. Мода прошла. В итоге все снова пришло к узким спецам, а под словом фуллстэк многие представляют широкого спеца в плохом смысле. Он нахватался поверхностно отовсюду, но толком ни в чем не разбирается. Он хорош на легких проектах или стартапах, но почти бесполезен в по-настоящему крупных и сложных проектах.
На днях мы общались с парой команд из кроссплатформ. Я вел эту встречу и задавал 90% вопросов. Они выбрали натив. Точнее их попросили. Две разные команды. Две разные технологии. Их проблема была не в технологиях, а в людях. В найме. Сложно найти качественного спеца, который одинаково хорошо разбирается в технологиях, не боится алгоритмов, знает глубокие специфики обеих платформ и хорошо шарит за архитектуру. Легче переписать все на натив.
Мой отец тренер физкультуры. Он ярый фанат спорта и всю жизнь хотел приучить меня к каждому виду. Так я пришел к смешанным единоборствам. Тогда было несколько школ обучения. Одни хотели прокачать все скиллы равномерно. Другие качали преимущественно свои сильные навыки, а остальные были второстепенные. Первые были хороши на слабых соревнованиях. Выигрывали сложные и показывали высокий результат последние. Даже тут нет чемпионов среди тех, кто знает много стилей. Тут чемпионы те, кто отлично владеет одним.
Даже опытные стратеги скажут, что играя одними фигурами или юнитами чаще худшая тактика на высоких уровнях или со сложными задачами. Хороший отряд или команда должна быть сбалансирована из разных спецов, лучших в своём деле. Этому меня научил Xcom на последних сложностях.
На двух стульях не усидишь. А на пяти и подавней. Написав Хеллоу ворд на незнакомом языке не делает тебя экспертом. Пнув по мячу ногой ты не станешь футболистом. Заборов разок соперника борцом. Нет ни одного музыканта, кто хорош во всех инструментах. Художника, во всех стилях.
Нужно быть экспертом в одной специфике, а не бежать соперничать со всеми во всем. Каждый должен быть хорош в чем-то одном. Выбирать нужно работу, людей, тренеров, которые улучшают сильные стороны. И не бежать качать слабые.