Pull to refresh
24
0.1
Ивлев Александр @ivlevAstef

Senior/Lead iOS software developer

Send message

Где-то в дороге мы забыли о мастерстве программирования

Level of difficultyEasy
Reading time3 min
Views16K

«Поставляй!»

«Мы теперь Agile, детка. Двигайся быстро и ломай вещи!»

«Мы оцениваем наших инженеров по тому влиянию, которое они оказывают!»

Где‑то по пути, в разгар agilification программного обеспечения или золотой лихорадки зарплат инженеров‑программистов, мы забыли о мастерстве.

Читать далее
Total votes 39: ↑33 and ↓6+27
Comments70

Что в голове у программиста? ч.1

Reading time5 min
Views28K

Все привет!
Меня зовут Сергей и я практикующий психолог.

Так складывается, что ко мне обращаются и остаются в работе преимущественно клиенты интеллектуального склада и рода деятельности. Это люди, которые всю жизнь решали любые проблемы "через голову" и находили рациональные причины всего и вся, старались докопаться до истины (и окружающих людей).Такой подход неизбежно накладывает отпечаток на личность и способствует формированию особенностей, о которых и пойдет речь.

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

Познать себя
Total votes 54: ↑48 and ↓6+42
Comments125

Как устроен счетчик ссылок в Swift

Reading time14 min
Views19K

Мы в iOS команде Vivid Money стремимся глубже понимать инструменты, которыми пользуемся каждый день. Один из таких – это язык программирования Swift. Он состоит из нескольких частей: компилятора, стандартной библиотеки и рантайма. Компилятор преобразует код понятный для человека в код понятный компьютеру. Стандартная библиотека предоставляет разработчикам готовые структуры данных, оптимизированные для применения в боевых проектах. А вот рантайм – это, поистине, сердце языка. В нем происходит выделение памяти, динамическое приведение типов и подсчет ссылок. И нам стало интересно, как реализован подсчет ссылок в рантайме. И  вот мы вдохновились публикациями легендарного Майка Эша (Mike Ash), собрали компилятор и начали исследовать. Посмотрели на работу алгоритма подсчета ссылок и в этой статье расскажем вам о нём.

Читать далее
Total votes 21: ↑21 and ↓0+21
Comments14

Охота на мифический MVC. Обзор, возвращение к первоисточникам и про то, как анализировать и выводить шаблоны самому

Reading time24 min
Views141K
— Не понимаю, почему люди так восхищаются этим Карузо? Косноязычен, гугнив, поёт — ничего не разберешь!
— А вы слышали, как поёт Карузо?
— Да, мне тут кое-что из его репертуара Рабинович напел по телефону.

Детектив по материалам IT. Часть первая


Я осознаю, что писать очередную статью на тему Модель-Вид-Контроллер это глупо и вредно для «кармы». Однако с этим «паттерном» у меня слишком личные отношения – проваленный проект, полгода жизни и тяжелой работы «в корзину».


Проект мы переписали, уже без MVC, просто руководствуясь принципами – код перестал быть похож на клубок спагетти и сократился наполовину (об этом позже, в обещанной статье про то, как мы применяли «принципы» в своем проекте). Но хотелось понять, что же мы сделали не так, в чем была ошибка? И в течении долгого времени изучалось все, что содержало аббревиатуру MVC. До тех пор пока не встретились исходные работы от создателя – Трюгве Реенскауга…


И тогда все встало на свои места. Оказалось что фактически на основе принципов мы пере-изобретали «original MVC». А то, что зачастую преподносится как MVC, не имеет к нему никакого отношения… впрочем также как и к хорошей архитектуре. И судя по тому сколько людей пишет о несостоятельности «классического MVC», спорит о нем и изобретает его всевозможные модификации, не одни мы столкнулись с этой проблемой.


Более 30 лет собранные в MVC идеи и решения остаются наиболее значимыми для разработки пользовательских интерфейсов. Но как ни странно, несмотря на существующую путаницу и обилие противоречивых трактовок, разработчики продолжают довольствоваться информацией «из вторых рук», черпая знания о MVC из википедии, небольших статей в интернете и фреймворков для разработки веб-приложений. Самые «продвинутые» читают Мартина Фаулера. И почему-то почти никто не обращается к первоисточникам. Вот этот пробел и хотелось бы заполнить. И заодно развеять некоторые мифы.


Читать дальше →
Total votes 73: ↑71 and ↓2+69
Comments387

20 вещей, которые я узнал за 20 лет работы инженером-программистом

Reading time8 min
Views99K

Наткнулся на любопытный материал, в котором автор систематизировал и записал свой опыт инженера-программиста в 20 тезисов. Я работаю в коммерческой разработке ПО больше 25 лет, и этот текст отозвался во мне практически каждой буквой — большинство советов я тоже регулярно практикую, не облекая их в формат ёмких афоризмов. В общем, решил сделать перевод.

Особенно отзываются пункты «стройте компактные системы» и «лучший код — это отсутствие кода». Последний совет я превращаю в цитату из какого-то второсортного фильма про самураев: «Лучшая победа — та, которую ты одержал, не доставая меч из ножен» (думаю, сослуживцы за моей спиной уже закатывают глаза). И, конечно, бесконечные разговоры про легендарных 10x-программистов постоянно хочется прервать советом не связываться с 0,1x-программистами (которые реально существуют, в отличие от 10x).

Читать далее
Total votes 186: ↑181 and ↓5+176
Comments158

DI в iOS: Complete guide

Reading time24 min
Views38K

Всем привет, меня зовут Виталий, я iOS-разработчик в юните мессенджера в Тинькофф. Сегодня поговорим о том, что такое DI, зачем он нужен, рассмотрим известные библиотеки для DI и сравним их между собой. Поехали!

Читать далее
Total votes 29: ↑29 and ↓0+29
Comments7

SwiftUI для прошлого конкурсного задания Telegram Charts (март 2019 года): все просто

Reading time21 min
Views7.8K


Сразу начну с замечания о том, что приложение, о котором пойдет речь в этой статье, требует Xcode 11 и MacOS Catalina , если вы хотите использовать Live Previews, и Mojave, если будете пользоваться симулятором. Код приложения находится на Github.

В этом году на WWDC 2019, Apple анонсировала SwiftUI, новый декларативный способ построения пользовательского интерфейса (UI) на всех устройствах Apple. Это практически полное отступление от привычного нам UIKit, и я — как и многие другие разработчики — очень хотела посмотреть этот новый инструмент в действии.

В этой статье представлен опыт решение с помощью SwiftUI некоторой задачи, код которой в рамках UIKit несопоставимо более сложный и его не удается на мой взгляд представить в читабельном виде.
Читать дальше →
Total votes 18: ↑16 and ↓2+14
Comments4

Чему я научился на своём горьком опыте (за 30 лет в разработке ПО)

Reading time22 min
Views117K
image

Это циничная, клиническая коллекция того, чему я научился за 30 лет работы в разработке программного обеспечения. Повторюсь, некоторые вещи весьма циничны, а остальное — результат долгих наблюдений на разных местах работы.
Читать дальше →
Total votes 187: ↑178 and ↓9+169
Comments128

Внедрение зависимостей с DITranquillity

Reading time6 min
Views3.6K

Dependency Injection — довольно популярный паттерн, позволяющий гибко конфигурировать систему и правильно выстраивать зависимости компонентов этой системы друг от друга. Благодаря типизации, Swift позволяет использовать удобные фреймворки с помощью которых можно очень коротко описать граф зависимостей. Сегодня я хочу немного рассказать об одном из таких фреймворков — DITranquillity.

Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments2

Как стать разработчиком игр, если ты риелтор

Reading time2 min
Views43K
Добрый день, Хабр.

Два года и несколько месяцев назад, я написал здесь свой первый и единственный пост, как, не имея никакого опыта разработки игр, я создал свое первое android-приложение. Пусть и потратил на это весь свой тогдашний отпуск. Хотя игрой это было и сложно назвать, хе-хе.

image

Вы тепло приняли этот пост и это дало мне хороший толчок в нужном направлении. За эти два года я попробовал и научился многому: работал с 3D моделями, знакомился с C++, рисовал текстуры, записывал звуки, писал тексты и диз-доки, но самое главное – я нашел для себя подходящую среду разработки, а именно — божественный Unreal Engine 4.

Я не решался ничего писать до тех пор, пока не смогу сделать что-то, что сможет порадовать хотя бы меня. И, думаю, мне это удалось. Довольно приятно видеть тот большой и тернистый путь, который был пройден, чтобы, начав с картинки в начале статьи, дойти до того, что под катом ;)
Читать дальше →
Total votes 101: ↑97 and ↓4+93
Comments150

Национальная лаборатория Ок-Ридж решила главную проблему разработчиков космических устройств: дефицит плутония-238

Reading time3 min
Views24K


В 2015 году на Хабре публиковалась статья о том, что малое количество производимого плутония-238 ставит под угрозу планы НАСА по запуску космических аппаратов на термоэлектрических генераторах. Плутоний-238 (Pu-238) — почти идеальное топливо для спутников, роверов и космических скитальцев иных типов, созданных руками человека. Так, всего четырех килограммов топлива вполне хватит для обеспечения энергией корабля.

За всю историю освоения космического пространства НАСА потратило 140 кг плутония, включая эксперименты в рамках программы «Аполло», миссию «Галилео» и другие. Но производство изотопа плутония-238 было остановлено в США еще в 1988 году. Топливо покупали у России, но его все равно не хватало. Сейчас проблему дефицита, похоже, удалось решить.
Total votes 37: ↑29 and ↓8+21
Comments43

Алан Кей: «Какие книги Вы бы посоветовали прочесть тому, кто учится на Computer Science»

Reading time4 min
Views21K
Если вкратце, то я бы посоветовал читать много книг, не имеющих отношения к информатике.

image

Важно понимать, какое место занимает понятие «science» в «Computer Science», и что означает «engineering» в «Software Engineering».

Современное понятие «науки» можно сформулировать так: это попытка перевести явления в модели, которые можно более-менее легко объяснить и предсказать. На эту тему можно прочесть «Sciences of the Artificial» (одна из важных книг Герберта Саймона). На это можно смотреть с такой точки зрения: если люди (особенно разработчики) строят мосты, то учёные могут объяснять эти явления, создавая модели. Самое интересное в этом то, что наука почти постоянно будет находить новые, лучшие способы наведения мостов, так что дружеские отношения между учеными и разработчиками вполне могут улучшаться с каждым годом.

Примером подобного из сферы Computer Science является Джон Маккарти, размышляющий о компьютерах в конце 50-х годов, то есть о невероятно большом спектре того, что они могут сделать (может быть, ИИ?), и создание модели вычислений, которая является языком, и может служить в качестве собственного метаязыка (Lisp). Моя любимая книга на эту тему — «The Lisp 1.5 Manual» от MIT Press (автор Маккарти с соавторами). Первая часть этой книги по-прежнему остается классикой того, как нужно думать в целом и об информационных технологиях в частности.
Total votes 14: ↑14 and ↓0+14
Comments5

Мьютексы и захват замыканиями в Swift

Reading time11 min
Views17K


Перевод статьи Мэтта Галлагера.

В этой статье речь пойдёт об отсутствии потокового выполнения (threading) и инструментов синхронизации потоков в Swift. Мы обсудим предложение о внедрении «многопоточности» (concurrency) в Swift и то, как до появления этой возможности потоковое выполнение в Swift будет подразумевать использование традиционных мьютексов и общего изменяемого состояния (shared mutable state).

Использовать мьютекс в Swift не особенно сложно, но на этом фоне хотелось бы выделить тонкие нюансы производительности в Swift — динамическое выделение памяти во время захвата замыканиями. Мы хотим, чтобы наш мьютекс был быстрым, но передача замыкания для исполнения внутри мьютекса может снизить производительность в 10 раз из-за дополнительных расходов памяти. Давайте рассмотрим несколько способов решения данной проблемы.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments0

Описание алгоритмов сортировки и сравнение их производительности

Reading time24 min
Views667K

Вступление


На эту тему написано уже немало статей. Однако я еще не видел статьи, в которой сравниваются все основные сортировки на большом числе тестов разного типа и размера. Кроме того, далеко не везде выложены реализации и описание набора тестов. Это приводит к тому, что могут возникнуть сомнения в правильности исследования. Однако цель моей работы состоит не только в том, чтобы определить, какие сортировки работают быстрее всего (в целом это и так известно). В первую очередь мне было интересно исследовать алгоритмы, оптимизировать их, чтобы они работали как можно быстрее. Работая над этим, мне удалось придумать эффективную формулу для сортировки Шелла.

Во многом статья посвящена тому, как написать все алгоритмы и протестировать их. Если говорить о самом программировании, то иногда могут возникнуть совершенно неожиданные трудности (во многом благодаря оптимизатору C++). Однако не менее трудно решить, какие именно тесты и в каких количествах нужно сделать. Коды всех алгоритмов, которые выложены в данной статье, написаны мной. Доступны и результаты запусков на всех тестах. Единственное, что я не могу показать — это сами тесты, поскольку они весят почти 140 ГБ. При малейшем подозрении я проверял и код, соответствующий тесту, и сам тест. Надеюсь, что статья Вам понравится.
Читать дальше →
Total votes 80: ↑76 and ↓4+72
Comments55

Дайджест интересных материалов для мобильного разработчика #197 (27 марта-2 апреля)

Reading time3 min
Views9.7K
На этой неделе у Samsung вышел новый Galaxy, у Apple новая iOS 10.3, в которой наконец-то разработчики могут отвечать на отзывы пользователей, вышел новый прогноз для рынка приложений от App Annie в котором прогнозируется, что уже в 2017 магазины приложений Android обгонят по доходам App Store. Ну и традиционно много всего другого интересного.

Читать дальше →
Total votes 15: ↑13 and ↓2+11
Comments0

Тет-а-тет: задаем правильные вопросы

Reading time7 min
Views40K
Чтобы успешно построить работу в команде (коллективе) и добиться высоких результатов, важно уметь продуктивно общаться с подчиненными и задавать правильные вопросы. Профессионализм заключается не только в нахождении нужного времени, места и момента для беседы с сотрудником, но и в получении и доведении нужной информации.

Если вы на пути к проведению регулярных индивидуальных встреч с сотрудником или уже практикуете их, но не знаете, о чем еще спросить, наша статья будет полезна! Ниже вы найдете список вопросов, ответы на которые помогут улучшить взаимодействие в командах, повысить лояльность к компании, узнать проблемы, волнующие ваших коллег. Эта подборка должна быть для вас не столько готовыми формулировками, сколько обозначением направления, опираясь на которые вы можете сформулировать более точные и подходящие вопросы, с учетом личностных особенностей собеседника, особенностей работы именно в вашей компании.

Читать дальше →
Total votes 22: ↑15 and ↓7+8
Comments22

CSS для Swift: использование стилей для любых подклассов UIView

Reading time5 min
Views8.8K
Оригинальное название статьи: Composable, type-safe UIView styling with Swift functions

Прежде, чем вы познакомитесь с материалом, мне хочется добавить кое-что про абстрагирование стилей от себя. Этот метод может облегчить вашу жизнь при работе на крупных проектах и особенно — в активно меняющемся продукте. Мы в полной силе ощутили это на таком проекте, как ИЛЬ ДЕ БОТЭ, где требования к визуальной составляющей приложения были значительными.

По мере развития в проект вносились существенные UI-изменения, и благодаря выделению стилей нам удалось отделаться малой кровью. В своем подходе мы использовали расширения для стандартных классов (UITextField, UILabel, UITextView, UIFont, UIColor). Нам кажется, что автору статьи удалось поднять данный подход на пару ступеней выше — настолько, что мы, потирая ладошки, бросились использовать его в нашем новом проекте. Надеемся, наш перевод поможет вам оптимизировать время на разработку и сделать проекты лучше.


Читать дальше →
Total votes 9: ↑8 and ↓1+7
Comments3

Статические анализаторы для Swift и Objective-C

Reading time10 min
Views15K

Предисловие


Существует большое количество статей, посвященных статическим анализаторам для С/С++/С#, Java и т.д. Что касается исследований применения различных статических анализаторов для нативной разработки под MacOS/iOS, то им уделено гораздо меньше внимания.

Предлагается разбор применения статических анализаторов кода, используемых в различных проектах на ObjC и Swift. При этом, это не обзор, а скорее некоторые заметки применения различных инструментов, позволяющих находить ошибки того или иного рода в коде, начиная от утечек памяти и заканчивая поиском уязвимостей. Однако данные не претендуют на объективность и полноту сделанных выводов, а также на глубину анализа полученных результатов по каждому инструменту.
Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments18

Routing слой в iOS-приложениях

Reading time4 min
Views17K
Случалось ли с вами, что вы открыли Storyboard и от увиденного вас начинают переполнять положительные эмоции?

В этот момент, возможно, вы задумываетесь, что хорошо продуманная навигация между экранами (в дальнейшем Routing) в крупных проектах может стать крайне значимой задачей, решение которой поможет экономить время и нервы всем, кто будет участвовать в проекте.
Читать дальше →
Total votes 23: ↑20 and ↓3+17
Comments25

Как искать путь к победе на Russian AI Cup 2016, но не в том направлении

Reading time15 min
Views12K
есть только два пути, к победе или в леса После не сильно долгих уговоров, меня убедили, что 30 место не так уж и плохо, и написать статью стоит. Я – участник с ником Stef, и занял в песочнице около 30 места.

Картинка нарисованная рядом, имеет глубокий смысл – вместо того чтобы уделить достаточное время и быть призером соревнования, я пошел другим путем — потратил одну треть времени на то, что делать было не обязательно. Если быть точнее, то я занялся алгоритмом поиска пути в пространстве, где нет непробиваемых стен, а есть лишь деревья которые можно или рубить или проходить рядом с ними.

Что из этого получилось, можно посмотреть в видео, а желающих познать все тайны леса прошу под кат.
Читать дальше →
Total votes 39: ↑37 and ↓2+35
Comments2
1

Information

Rating
2,849-th
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity