В этом году в Программном комитете AppsConf супер классные специалисты по мобильной разработке. У всех за плечами большой опыт, работа в компаниях-лидерах и стартапах, корпоративные решения и свои продукты — они знают, что в тренде, и сами могут поделиться многими хитростями.
О конкретных кейсах рабочих проблем будем говорить на конференции, а пока обсудим: рабочие инструменты, тайм-менеджмент, мотивацию продуктовой разработки, роль образования в работе программиста, и другие интересности.
В третий выпуск Run Loop — подкаста про тех, кто делает продукты своими собственными руками — ведущие решили никого не звать. А рассказать о себе, потому что они тоже делают полезные и крутые вещи.
Опыт. Публичные активности
Роман: Первое, о чём хочется рассказать, это про опыт: где мы засветились и чем мы занимаемся, а не только те строчки текущей должности.
Я в iOS разработке практически с самого начала. Я помню, когда платформа ещё называлась iPhone SDK, это была вторая Beta iOS 2.0. Меня привлекло в платформу то, что я практически год пользовался первым iPhone, я любил на него фотографировать разные интересные вещи из своей жизни, но фотографии так и оставались на устройстве, а мне хотелось ими с кем-то поделиться. Мой первый проект был как раз клиент, который умел эти фотки загружать из моего iPhone в интернет. Дальше оно закрутилось, завертелось. Тогда я работал в Яндекс и там этот проект приняли с большим интересом. В моем послужном списке отметились Яндекс.Карты, Поиск, Браузер, КиноПоиск, smartpass — это приложение для iPad, которое пускает вас в кинотеатры, Яндекс.Афиша.
На заре становления iOS разработки информации было очень мало, и мне очень хотелось самому о чём-то рассказать и найти тех первопроходцев, которые также копали в своем уголке, потому что тогда это еще не было модно. Потихоньку-помаленьку я стал организовывать Яндекс субботники по мобильной разработке, которые постепенно переросли в отдельный формат мероприятия Yandex Mobile Camp, который дорос до отдельной мобильной секции на большой конференции ЯндексаYet another conference. Список публичных активностей можно дополнить и подкастами. В первый раз я стал гостем в Подлодке. Этот опыт мне понравился так, что я решил продолжить, и теперь я с вами в выпуске подкаста Run Loop. Вот такая моя краткая история.
Илья: У меня опыт, конечно, не такой внушительный, как у Романа. В iOS разработке я относительно недавно — всего 5 лет. Я начал с iOS 6. Всё моё знакомство с iOS разработкой пошло из института. На третьем курсе мы с ребятами начали делать проект. Мне понравилось, и я подумал, что программирование может быть интересным: это же не просто там писать какую-то ерунду, а можно делать приложения и трогать их руками, это классно. Так я начал заниматься iOS разработкой. После этого я успел поработать в нескольких стартапах. Одни закрывались за пару месяцев, а другие жили несколько лет. Всё было более-менее хорошо. Потом я попал в большую компанию. Это был Альфа-Банк, в котором я работаю уже три года. За это время я успел побыть в Альфа-Банке обычным продуктовым разработчиком, потом лидом, на текущий момент я руковожу всей iOS разработкой.
Из публичного мне всегда было интересно выступать на митапах — я всегда боялся этого. Поэтому мы решили сделать свои митапы, которые должны были быть более камерными с меньшим количеством людей (не так страшно), и рассказывать именно про то, как у нас происходит это в Альфа-Банке. Мы хотели рассказывать про свой опыт и показать всем, что банки могут быть не только страшными, огромными, бюрократическими организациями, но и классными с точки зрения инноваций и технологий. Так появился iOS-митап Mobile Talks. В подкастах я первый раз, и за это стоит сказать спасибо AppsConf.
Опыт. Дорога в программирование
Алексей: Я занимаюсь Android около 5 лет. Из них три года и один месяц работаю в App in the Air. Началось всё еще в школе. Я уже начал понимать, что программирование это что-то интересное. Когда у тебя просто был компьютер, вроде бы не было ничего, потом ты что-то такое написал, и появилось что-то новое. Такая магия программирования завлекала. Но входить я в это дело начал, мягко говоря, сбоку. Я не знаю, почему так получилось, но первое, что мне попалось, это учебник Perl. Это было довольно страшно. Ни для кого не секрет, что приличная часть российского общего и высшего образования — это шпаргалки, без них никуда. После того, как мы с друзьями сдали все экзамены в физмат лицее, мы решили, что всё, что у нас было по физике и всем разделам математики неплохо было бы загнать в какую-то электронную шпаргалку. Так появилось наше первое Android приложение. Потом мой товарищ адаптировал его под iOS. Приложение «Книга формул» — это справочник с формулами, который до сих пор живет в обоих Store: Google Play и AppStore. Был несколько темный период, когда мы с тем же другом занимались стартапом, рассказывать про который подробно я не буду. Единственное про него скажу, что хостился он на ныне покойном Parse, если помните, у Фейсбука был такой Parse.com. Это была соцсеточка, которая дала много разного интересного опыта, потому что пришлось позаниматься очень многими аспектам. Она успешно загнулось, когда я был студентом второго курса. Деньги нужны. Я понял, что программирование — это ж тема, оно всем интересна. Я подумал, что родители заинтересованы в том, чтобы учить детей программированию, и предложил репетиторство: «Научу делать Android приложения». Я рассчитывал на детскую младшую аудиторию, а в итоге как-то так получилось, что учил 30-40 летних дядек. Это было довольно странно, но интересно. Кстати, несколько из них за наши курсы, за то время, что мы занимались, практически от ничего успешно дошли до оффера и пошли джунами куда-то работать. На третьем курсе я думал, куда бы отправиться на летнюю практику. Сначала думал, что надо просто взять список топ студий по мобильной разработке, которые есть в Москве, написать им кто я такой и что умею, чтобы меня взяли практикантом. Но пока я рассказывал эту штуку одной хорошей подруге, через неё вышел на App in the Air. Я пришел к ним, сделал тестовое задание, прошел практику, стажировку и с тех пор я там.
Роман: Алексей поднял интересную тему о пути в программирование. Мой опыт тоже непрямой, так как я не учился на чисто программистском факультете. Я практически всегда решаю с помощью компьютера какие-то свои прикладные задачи. Мой первый компьютер — это была игровая станция, где я учился переставлять windows. Я до сих пор, наверное, помню, как это делается, даже с закрытыми глазами смогу сделать. Именно в программирование я пришёл, благодаря курсам ещё в школе. Я увидел, какие красивые рисунки, графики можно запрограммировать. Они меня настолько завлекли, что я решил записаться на курсы. Это был Pascal, и было очень увлекательно. Илья, ты учился на программиста или это тоже было сбоку?
Илья: Я со школы понимал, что кажется, мне нравится информатика и математика, и было бы интересно это всё попробовать. Соответственно, я пошёл учиться в МАИ на факультет прикладной математики и программирования. Первые два курса я очень жалел о своем выборе, потому что была какая-то жесть: куча матанализа, очень много разработки на С, где мы писали какие-то странные штуки типа суффиксных деревьев, всяких жутких алгоритмов. Мне это не нравилось, я не понимал, зачем это надо. Потом попробовал iOS разработку и вот тут понял, что уже точно программирование мне нравится. Теперь я, конечно же, понимаю зачем нужны были все эти алгоритмы. Это очень классная база, которая мне сейчас помогает. Но тогда я думал, что она абсолютно бесполезна.
Алексей: Про жуткую математику. Я закончил в итоге тоже прикладную математику в ВШЭ. Впечатления точно такие же: ужасная математика 4 года. Разница только в том, что последние два года она была не столь ужасной, потому что я не часто появлялся в универе. Это очень помогает. Такой совет как бороться с математикой.
Роман: Лайфхак замечательный. Пожалуйста, не слушайте его, дорогие студенты, это вредный совет.
Образование программистов
Илья: У вас работают ребята без диплома? У меня прямо в команде есть человек без диплома, и у нас есть несколько Android разработчиков, которые тоже ничего не закончили и при этом кодят очень круто.
Алексей: У нас довольно много людей, которые еще студенты. В App in the Air такая политика подбора кадров. Мы всегда приглашаем очень много студентов на летнюю практику. Они делают какие-то задания. Те, кто сделал круче всего, получают подарки и предложения уже прийти на стажировку. БОльшая часть тех, кто сейчас есть, набирались с таких практик и стажировок. До недавнего времени бОльшая часть была из Высшей Школы Экономики, но не с прикладной математики, а с программной инженерии.
Роман: Я никогда не обращал на это внимание. Вопрос поставил меня в тупик. Но, если мне не изменяет память, много ребят с дипломами. Мы всегда смотрим на результат. Скорее всего, все с высшим образованием.
Про продуктовую разработку
Илья: Давайте поговорим про что-то приближенное к тому, чем мы занимаемся — про продуктовую разработку. Лёша, что ты считаешь важным в продуктовой разработке?
Алексей: Довольно интересный вопрос, я бы даже сказал сложный. Самое важное — это просто не забывать о том, что в итоге ты делаешь штуку (я конкретно про мобильную разработку), которая будет рисоваться на небольшом экране, и с ней будет взаимодействовать живой человек. Это всё, чем ты занимаешься. В погоне за модными техническими решениями, за гибкими архитектурами надо помнить, что в реальности пользователю плевать, что у тебя внутри — главное, чтобы оно работало, желательно быстро и без багов. Почаще обращать внимание на фидбеки, которые тебе дают, как пользователь себя чувствует.
Илья: Да, тут я с тобой согласен. Это в первую очередь клиентское приложение. Но ты так говоришь, что можно услышать так: «Забейте на архитектуру, это вообще неважно, какая разница». На самом деле это же не совсем так. Если мы на начальном этапе не сделаем что-то, оно нам потом аукнется. Всё равно об этом нужно думать.
Роман: Я бы здесь дополнил. Архитектура становится важна в те моменты, когда у тебя команда большая, и продукт постоянно развивается. Когда проект не очень большой, то, на мой взгляд, это мешает, потому что у тебя появляются накладные расходы в плане большого количества файлов. В небольшой устоявшейся команде архитектура, скорее, мешает. Под небольшой командой я имею в виду три человека, максимум четыре. Если больше, а если это еще и разные города, то там уже нужны процессы и правила, о которых вы не просто договорились, а которые формально прописаны на бумаге. Если возвращаться к продуктовой разработке, для меня всегда были интересны те продукты и приложения, которыми я сам пользуюсь с удовольствием.
Илья: Да, это самое крутое, что может быть, когда ты пользуешься и действительно получаешь удовольствие от того, чем занимаешься еще и на работе. Я считаю, что самое полезные приложения — это те, которые позволяют нам экономить свое время.
Это было одной из причин, почему я пошел работать именно в банк. Деньги занимают огромную часть нашей жизни. Мы их получаем на работе, мы их тратим везде, и если мы можем сэкономить те минуты, часы, которые мы тратим на работу с ними, по-моему, это круто.
Роман: Интересно. Я чуть-чуть хочу отойти в сторону и задать вопрос Лёше. Я почему-то думал, что App in the Air — это одно приложение. У вас их несколько?
App in the Air
Алексей: По факту это одно приложение на Android и на iOS. Если совсем просто, то App in the Air — это трекер полетов — помощник путешественникам. Наша целевая аудитория — это люди, которые очень часто летают. Мы стараемся сделать всё, для того чтобы облегчить их жизнь тем, о чём говорил Илья — сохранить им время. Есть ещё побочный продукт, который является маленькой копией App in the Air для встречающих. То есть если ты встречаешь родственника с самолета, то можешь использовать приложение с урезанным функционалом. Но это не основная ветка, и был, скорее, эксперимент.
Роман: Что меня удивило, ты сказал, что вы постоянно приглашаете людей на стажировку. У меня создалось ощущение, что у вас большая команда, и вы чем-то все занимаетесь, но App in the Air — это одно небольшое приложение. Это так или нет?
Алексей: Да, это так. До недавнего времени, даже меньше, чем год назад, нас было в сумме 10 человек: обе платформы, back-end, аналитика, поддержка. На текущий момент нас 25 человек в главном чатике. Это связано с тем, что, во-первых, некоторые места, как поддержка, расширяются, и появились некоторые дополнительные направления, на которые тоже нужны люди.
Роман: Все эти стажеры, которых вы приглашаете, в разработку идут или равномерно распределяются по всем направлениям в компании?
Алексей: Примерно равномерно. Как это происходит? Приходят студенты, которым нужна практика. Мы им говорим: «Смотрите, можно делать то-то, то-то и то-то». Там целая пачка самых разных реальных задач. Не выдуманные, а то, что мы можем, если сделано хорошо, взять встроить и использовать. Они выбирают, что им больше нравится: кому-то Android, кому-то iOS, кому-то backend, кому-то Веб. Много задач по Data Science и машинному обучению. Даже если пришло очень много студентов, далеко не все в итоге остаются, но какая-то часть всё равно оседает у нас в компании и становятся нашими сотрудниками.
Рабочий день
Роман: Интересно послушать, как у кого строится типичный рабочий день. Илья, как у тебя всё происходит?
Илья: У меня не совсем типичная история, потому что я сейчас больше менеджер, чем разработчик. Поэтому типичный рабочий день состоит у меня из нескольких встреч, нескольких параллельных встреч, нескольких срочных встреч и еще ряда дел, которые надо срочно решить. Бывает проблема, что нужно все успеть, а что-то не нужно. Нужно расставлять приоритеты. Это, наверное, самое сложное в моей работе, потому что нужно понимать, чем ты должен заниматься через 5 минут, и желательно понимать это заранее.
Роман: Когда я руководил группой разработки Яндекс.Браузера, очень сложно давалось несколько встреч в один день. Даже после двух часовых встреч в день, я чувствовал себя выжатым, как лимон. Как ты справляешься с таким потоком?
Илья: Наверное, я к этому привык. Мой обычный день — четыре встречи минимум. Некоторое время я себе сам бронирую в календаре, когда знаю, что мне нужно сделать какую-то техническую задачу или что-то по проекту. Я иногда всё же стараюсь контрибьютить куда-то. Поэтому планирую дела в календаре. У меня всегда есть план на неделю, что я обязательно должен сделать.
Например, все мои рабочие и нерабочие дела, я ещё параллельно ремонтом дома занимаюсь, находятся в одном Task Tracker. Это всё один список, в который я накидываю себе на день дела и этим занимаюсь. Это помогает решать проблемы. Например, есть полчаса между встречами, и кажется, не успеешь ничего закодить и ничего важного решить, но зато можешь сделать какую-то задачу, которую тебе не нужно будет выполнять вечером по дороге домой.
Роман: Получается, что у тебя и рабочие задачи, и твое личное где-то хостятся в одном месте.
Илья: Да. Я использую для этого Wunderlist. Если говорить про рабочие задачи, то там все же это календарь и чуть-чуть Jira. Например, для AppsConf мы используем Trello. Но мне лично Trello не очень хорошо заходит. Для своих вещей я использую Wunderlist.
Алексей: Илья, ты говоришь, что у тебя есть свой Wunderlist, в котором у тебя все задачи. Как ты его синхронизируешь с тем, что используется в работе? Вручную происходит синхронизация или что-то настроено для этого?
Илья: Да, вручную. Я обычно завожу задачку и туда, и туда. Это не занимает у меня много времени. Поэтому пока меня такой вариант устраивает. Но вроде там есть какие-то готовые вещи, которые можно прикрутить и всё сделать. Но пока не болит, я это не решаю.
Роман: Помимо работы в твой рабочий день что-то ещё вписывается? Например, хобби. Что ты делаешь утром, вечером?
Илья: Конечно, главное хобби — это ремонт, как же без него. Много вещей, связанных с каким-то дополнительными активностями: либо запись подкаста, чем мы сейчас занимаемся, либо подготовка AppsConf. Пока больше ни на что времени хватает. Иногда успеваю погулять вечером, но это максимум.
Алексей: Рома, ты уже много лет крутишься в iOS разработке. Наверняка у тебя выработаны какие-то железные, проверенные временем подходы, которые ты для себя используешь. Как ты выстраиваешь свой рабочий день?
Роман: Мой рабочий день относительно спокойный в плане встреч. Каждый день есть stand-up, мы синхронизируемся нашей распределенной командой. Несколько человек сидит в Москве, бОльшая часть в Новосибирске. Как обычно все стендапятся, так и мы стендапимся. За всё время, что я занимаюсь разработкой, у меня есть два режима работы.
Мне это сильно помогает. Дальше супер полезно — это выключить все мессенджеры и поставить автообновление почты на раз в час, а еще лучше просто руками запускать почтовый клиент и проверять, что нападало за это время.
Илья: Тут я с тобой полностью согласен. Я решил провести эксперимент и включил в телефоне режим «не беспокоить». Единственное, что я оставил, это все входящие звонки. В таком режиме я живу уже третью неделю. Блин, как же спокойно стало. Я вообще не дергаюсь теперь по любой вибрации, потому что их просто нет.
Роман: Я долгое время жил с iPhone и Apple Watch. Что меня раздражало в Telegram, так это то, что по умолчанию все уведомления приходят в часы и жутко вибрируют. Сейчас я решил поставить эксперимент: полностью переехал на Android. Я не стал туда ставить ни Twitter, ни Instagram, Telegram по умолчанию в беззвучном режиме. Это тоже помогает. Я чувствую себя гораздо спокойнее.
Алексей: Я очень плюсую за это выключение всего. Я так живу уже не первый год. У меня полностью нет никаких звуков, уведомлений. Когда сажусь работать, я просто переворачиваю телефон. Некоторые модели мигают индикатором, когда что-то пришло, и это всё берёт на себя внимание.
Илья: Лёша, расскажи, пожалуйста, как проходит у тебя рабочий день.
Алексей: У меня всё пересекается с вами за исключением некоторых нюансов. Ты обычно просыпаешься, завтракаешь, делаешь какие-то дела и садишься работать, неважно дома или в офисе, смотря какой день. Я полностью выключаю всё: никакие чаты, почта, уведомления мне не приходят. Я тоже пробовал Pomodoro технику, но ничего не получилось: она больше мешала, чем помогала. Я на это дело забил. Прошло какое-то время, и я попробовал ее снова, но просто в другой инкарнации. Я начал с того, что час ты работаешь, не отвлекаясь, потом делаешь перерыв 10-15 минут. Такими часовыми интервалами работаешь. Интересная штука, которую я заметил, что со временем вот этого часового интервала тебе начинает не хватать. Ты привыкаешь фокусироваться, и со временем этот интервал увеличивается до полутора-двух часов. У всех всё персонально, каждому свое, но у меня работает такая штука.
Сейчас я обычно работаю двухчасовыми интервалами. Сажусь, два часа ни на что не отвлекаясь пишу код, либо какие-то около кодовые вещи решаю. Проходит два часа, я открываю мессенджер и могу ответить что-то. Надо, наверное, предупредить, что могут возникать определенные сложности с тем, что тебе кто-то пишет, а ты два часа молчишь. Особенно коллегам это может быть не очень приятно, потому что они хотят у тебя что-то узнать. Когда у тебя начинающий разработчик спрашивает, не отвечай ему час, он за этот час сам найдет ответы и напишет тебе: «Ой, я всё решил». Неважен уровень разработчика, многие решения люди сами спокойно находят. На другие вещи у нас даже возник в одно время такой микроконфликт на этой почве. Мы просто договорились, что я буду периодически железно чекать и отвечать, если там что-то появилось.
Еще одна штука, которой я пользуюсь, это не приложение, а табличка в Excel, в которую я заношу всё, что сделано за эти два часа: пишу дату, временной интервал, что конкретно было сделано и какие-то пояснения к этой задаче. Если ты пилишь какую-то задачу, допустим, неделю, то обычно ты указываешь часть 1, часть 2, часть 3. Таких у тебя 30-40 частей и так далее. Там есть столбик для пояснения. Эта штука помогает, во-первых, сразу оценить насколько ты хорошо сегодня поработал. Ты видишь сколько реально часов ты работал. В моём случае это чисто работа с кодом: либо я его писал, либо читал, либо я его дебажил. Это не чтение статей, не листание Фейсбука. Плюс, она помогает оценить какую-то динамику: насколько ты больше стал успевать, позволяет находить задачи, которые похожи на то, что тебе предстоит и, соответственно, дать более точную оценку. Глядя в такой список, ты видишь: «Ага, примерно такая же задача у меня в прошлый раз заняла четыре часа, в позапрошлый раз — пять часов. Следовательно, за 3-4 часа я и в этот раз сделаю». Если от тебя требуют дать какую-то оценку, то это тоже помогает. Понятно, что эта табличка такая совершенно приватная, никому к ней доступа нет. Такое поминутное трекание может превратиться в не очень приятную штуку, если тебя начинают на работе трекать поминутно.
Роман: Интересно, что ты об этом упомянул, потому что я тоже отслеживаю то, что планирую и сделал за каждый помодоро. Это действительно позволяет оценить, на что уходит время и понять свою эффективность. Ты работаешь с тем, что ты зафиксировал? Например, ты видишь, что у тебя системно на какие-то задачи уходит много времени.
Алексей: Если честно, хотелось бы сказать, что я написал какой-нибудь скрипт, который бегает по табличке, строит мне красивый график, но нет, потому что на это нужно время. Когда-нибудь я его найду, но не сегодня. Хотелось бы даже сказать, что я ее систематически сижу и просматриваю, вспоминаю старые задачи, но тоже нет. Не знаю, связано это с этой табличкой или нет, где ты зафиксировал, всё записал, но ты просто уже примерно оцениваешь и разбиваешь задачу в голове. Тебе даже не нужно лезть куда-то и искать. Ты просто такие вещи уже знаешь.
Роман: Ещё пару моментов, которые я считаю важными.
Я считаю, что если в этот текущий день голова совершенно не работает, то лучше честно встать и пойти погулять, чем сидеть и пытаться заставить себя работать два часа подряд без особого результата.
Так ты потратишь полчаса-час своего времени, но ты его проведешь с удовольствием и пользой для себя. Потом ты, скорее всего, продолжишь работать. Это проверено на себе. Ещё один момент в том, что лучше иметь какие-то не технические хобби, которые позволяют мозгу переключаться и отдыхать от основной деятельности.
Алексей: Подкаст — отличное хобби, да? Я хотел бы дополнить твой комментарий. Допустим, есть у меня некоторое число X часов в день, которые я в норме пишу код. Это число X не твой полный максимум. Можно сделать еще два или четыре сверху. Но я за собой заметил такую штуку, что если такие, назовем их условно переработки (хотя тут никто ни за кем не следит, поэтому всё честно), накапливаются в течение 2-3 дней, потом на гораздо больший срок у тебя, как ты сказал «голова не работает». Это реально так. У тебя просто базовые вещи начинают медленнее происходить. Те задачи, которые решал за полчаса, начинаешь решать по часу и непонятно почему, ведь ты тот же сидишь. Но вот этот эффект имеет свойство быть. Поэтому это свое некоторое число X лучше знать. Лучше ты будешь работать каждый день Х часов эффективно, чем ты один раз сделаешь много и потом будешь сидеть тупить. Но надо помнить про дедлайны.
Инструменты для работы
Илья: Давайте поговорим про то, что вы используете для работы? Может быть, это какая-то IDE, если это вдруг не Xсode. Алексей наверное использует не Xсode, а что?
Алексей: Было бы странно писать Android приложение в Xсode. Я думаю, это было бы даже очень интересно попробовать.
Для Android разработки сейчас два стандарта: Android Studio, либо IntelliJ IDEA. Я использую Android Studio, и MacOS.
Илья: А какой Git клиент?
Алексей: Долгое время я очень недоумевал, когда видел людей, которые пользуются Git клиентами с UI. У меня была прекрасно отточенна терминальная версия, добавлен alias. Он мне там цветные графы вырисовывал со всеми ветками — сидишь, не нарадуешься. Всё это было прекрасно до того момента, пока я не открыл для себя GitUp. Есть такое бесплатное приложение для Mac. Его стоит попробовать, потому что становится быстрее. Да, там можно сделать то же самое. Там нельзя некоторые вещи сделать с помощью горячих клавиш или их долго и сложно учить, но очень многие вещи он в итоге упрощает и ускоряет. Особенно те, которые связаны с диффами, когда тебе нужно понять, что именно ты сейчас коммитишь и что поменялось. Эти вещи супер ускорены.
Роман: У меня похожий подход, но я до сих пор пользуюсь терминалом, для того чтобы сфетчить изменения, сделать rebase и вот это вот всё. UI у меня, скорее, для подставочного коммита или какого-то разделения и редактирования существующих commit messages. Я тоже пользуюсь GitUp — классная штука.
Илья: Я наоборот, никогда не пользовался терминалом для этого. Я умею, но мне никогда не нравилось. Я долгое время пользовался просто Xcode, потом меня научили пользоваться SourceTree. Сказали: «Смотри, это классный комбайн, он умеет всё». Я им пользовался, а теперь перешел на Fork. Это очень прикольная штука. Он пока бесплатный, но говорят, скоро станет платный. Он красивый, есть черная тема, и решает все мои задачи.
Алексей: Хочу еще одну штуку обязательно упомянуть. Я недавно не поскупился и разорился на лицензионную версию приложения Dash для Mac. Есть его аналоги и для Windows, и для Linux, причём бесплатные. Но для Mac она платная. Это штука, в которую можно офлайн загрузить документацию из кучи разных мест. Dash даёт:
Илья: Да, Dash — крутая штука. Я тоже использую, и мне нравится. Роман, скажи, что используешь ты?
Роман: Я начинал с Xcode. Пока он не превратился в такого неповоротливого слона, я был им очень доволен. Потом я увидел какие классные штуки можно делать в IntelliJ IDEA. В те времена Swift не было, а был Objective-C. Я пересилил себя и сел за AppCode и получал просто кучу удовольствия. Ты можешь столько всего делать с кодом: быстрые рефакторинги, переименования. В этом продукты JetBrains показывают свою мощь. Сейчас, к сожалению, пришлось вернуться на Xcode, потому что AppXode какое-то время чувствовал себя не очень хорошо со Swift, и всех тех плюшек, которые он мне давал в Objective-C, просто не было. Сейчас пользуюсь Xcode, потому что без него никуда.
Алексей: Такой вопрос: Vim или Emacs?
Роман: Vim.
Илья: Emacs. Я не умею выходить из Vim, поэтому у меня Emacs.
Роман: Меня ещё в универе научили, поэтому всё нормально.
Алексей: Рома, ты используешь Vim поверх Xcode в повседневной работе?
Роман: Нет, я разделяю личное и рабочее.
Алексей: Наверное, года два назад я как-то пересилил себя, потратил время и сначала научился пользоваться Vim на Pet Project в консольке в проектах на Python. Поскольку есть и для IntelliJ платформы и для Xcode плагины под Vim, перенес их туда. Это, конечно, супер штука. После них не представляю как можно редактировать код по-другому — всё это кажется очень медленным, неудобным и всё в этом роде.
Роман: Я пришел к теме шорткатов чуть-чуть с другой стороны. Я посмотрел, как люди играют в Starcraft. Я начинал с мышки, но потом увидел, как можно делать на клавиатуре.
Если возвращаться к тому, какими инструментами я пользуюсь, в целом, у меня подход разумного минимализма. То есть я, скорее, выберу какой-то простой небольшой инструмент, либо буду пользоваться тем, что идет в составе операционной системы. Благо, MacOS полна качественного встроенного софта, которым я очень доволен. Илья, я предлагаю перейти к тебе. Ты рассказал уже про SourceTree, про Fork. Чем ты пользуешься ещё? Почтовый клиент? Ты же менеджер.
Илья: Да, с почтой тут интересно. У нас есть корпоративный стандарт, поэтому это такой прекрасный клиент, как Lotus Notes. Я не хочу о нем говорить, если честно. Хорошо, если вы не знаете, что это.
Из интересного я активно пользуюсь Mind Map, в частности использую для этого MindNode. Он позволяет классно структурировать информацию. Я в него очень часто записываю какую-то информацию после встреч, для подготовки к докладам и подобные вещи.
Для разработки: Xcode и Fork сейчас. Еще, конечно, пользуюсь Keynote, достаточно обидно, но как без этого. Я умею делать анимации любой сложности в Keynote и могу научить всех кому интересно.
Рекомендации инструментов
Роман: Что вы можете порекомендовать нашим читателям? Что первое приходит в голову?
Илья: Для меня это MindNode. Когда я открыл эту всю историю с построениями mind map и структурированием информации, я понял, насколько это может быть удобно. Вместо того, чтобы записывать свои мысли или какую-то встречу в заметках, а потом разбираться что с этим делать: это может быть разбор любой задачи, проработка нового концепта какой-нибудь фичи и так далее. Когда я записываю это в mind map, я сразу могу разложить по слоям, и это потом намного проще использовать в работе. Всем советую.
Алексей: Dash я уже рекомендовал, поэтому предложу немножко параноидальную софтину Snitch. Правда она есть только для MacOS. Это, по сути, такой разухабистый Firewall, который на каждый входящий или исходящий из твоей машины запрос, покажет, что это за запрос, какое приложение его пустило, куда он пошел, и спросит тебя разрешить или запретить. Понятно, что можно запретить всегда, разрешить всё. Первые дни после его установки вы удивитесь, как много странной информации о вас отправляется непонятно куда. Помимо какой-нибудь проверки обновления, ещё куча всякой аналитики, причём от тех, от кого этого не ожидаешь. Больше всего этим грешит всё, что выпустила Adobe, они шлют просто огромные пачки запросов.
Плюс MicroSnitch — это такая же штуковина. Она, правда, следит за камерой и микрофоном. Она не умеет понимать, кто запустил процесс, но она может тебе показать, что у тебя камера сейчас заработала, микрофон или и то и то. В частности, я удивился, что Android Emulator нагло слушает. Скорее всего, это штука, которая слушает OK Google, ожидает OK Google, даже несмотря на то, что она выключена. А когда у тебя открыт рабочий стол, она активно слушает микрофон твоего хоста, твоей рабочей машинки, куда идет звук.
Лучше всего мой мыслительный процесс проходит, когда я пишу либо рисую то, что у меня сейчас в голове.
Алексей: Слушай, а ты не наблюдал в этой штуке такого эффекта от масштаба, если перейти от тетрадки или просто от листов А4 к белой доске или к флипчарту, то оно ещё лучше идёт, прямо вот таким потоком стремится и такой кайф рисовать на всём этом?
Роман: Есть такое, да. Я даже думаю сделать дома огромную доску в стену, как в офисах делают. Да, действительно есть такой эффект и прям даже приятно думать.
Алексей: Я слышал, что можно стены покрыть какой-то специальной краской, которая превращает стену в доску, то есть на стене можно писать и стирать. Илья ремонтом занимается, подскажешь, где раздобыть такую краску?
Илья: Да, у нас в офисе есть такое — это просто сделать.
Роман: Незаметно пролетело время, я предлагаю подвести итог и хочу поблагодарить моих собеседников и вас, за то, что слушали или читали.
В качестве заключения посмотрите приглашение Алексея Милеева на AppsConf. Над полной версией программы мы еще работаем, но уже приняты доклады:
О конкретных кейсах рабочих проблем будем говорить на конференции, а пока обсудим: рабочие инструменты, тайм-менеджмент, мотивацию продуктовой разработки, роль образования в работе программиста, и другие интересности.
В третий выпуск Run Loop — подкаста про тех, кто делает продукты своими собственными руками — ведущие решили никого не звать. А рассказать о себе, потому что они тоже делают полезные и крутые вещи.
Роман Бусыгин ведущий разработчик Яндекс музыки для iOS. |
Илья Царев Head of iOS в Альфа-банке. |
Алексей Милеев Android разработчик App in the Air. |
Опыт. Публичные активности
Роман: Первое, о чём хочется рассказать, это про опыт: где мы засветились и чем мы занимаемся, а не только те строчки текущей должности.
Я в iOS разработке практически с самого начала. Я помню, когда платформа ещё называлась iPhone SDK, это была вторая Beta iOS 2.0. Меня привлекло в платформу то, что я практически год пользовался первым iPhone, я любил на него фотографировать разные интересные вещи из своей жизни, но фотографии так и оставались на устройстве, а мне хотелось ими с кем-то поделиться. Мой первый проект был как раз клиент, который умел эти фотки загружать из моего iPhone в интернет. Дальше оно закрутилось, завертелось. Тогда я работал в Яндекс и там этот проект приняли с большим интересом. В моем послужном списке отметились Яндекс.Карты, Поиск, Браузер, КиноПоиск, smartpass — это приложение для iPad, которое пускает вас в кинотеатры, Яндекс.Афиша.
На заре становления iOS разработки информации было очень мало, и мне очень хотелось самому о чём-то рассказать и найти тех первопроходцев, которые также копали в своем уголке, потому что тогда это еще не было модно. Потихоньку-помаленьку я стал организовывать Яндекс субботники по мобильной разработке, которые постепенно переросли в отдельный формат мероприятия Yandex Mobile Camp, который дорос до отдельной мобильной секции на большой конференции ЯндексаYet another conference. Список публичных активностей можно дополнить и подкастами. В первый раз я стал гостем в Подлодке. Этот опыт мне понравился так, что я решил продолжить, и теперь я с вами в выпуске подкаста Run Loop. Вот такая моя краткая история.
Илья: У меня опыт, конечно, не такой внушительный, как у Романа. В iOS разработке я относительно недавно — всего 5 лет. Я начал с iOS 6. Всё моё знакомство с iOS разработкой пошло из института. На третьем курсе мы с ребятами начали делать проект. Мне понравилось, и я подумал, что программирование может быть интересным: это же не просто там писать какую-то ерунду, а можно делать приложения и трогать их руками, это классно. Так я начал заниматься iOS разработкой. После этого я успел поработать в нескольких стартапах. Одни закрывались за пару месяцев, а другие жили несколько лет. Всё было более-менее хорошо. Потом я попал в большую компанию. Это был Альфа-Банк, в котором я работаю уже три года. За это время я успел побыть в Альфа-Банке обычным продуктовым разработчиком, потом лидом, на текущий момент я руковожу всей iOS разработкой.
Из публичного мне всегда было интересно выступать на митапах — я всегда боялся этого. Поэтому мы решили сделать свои митапы, которые должны были быть более камерными с меньшим количеством людей (не так страшно), и рассказывать именно про то, как у нас происходит это в Альфа-Банке. Мы хотели рассказывать про свой опыт и показать всем, что банки могут быть не только страшными, огромными, бюрократическими организациями, но и классными с точки зрения инноваций и технологий. Так появился iOS-митап Mobile Talks. В подкастах я первый раз, и за это стоит сказать спасибо AppsConf.
Опыт. Дорога в программирование
Алексей: Я занимаюсь Android около 5 лет. Из них три года и один месяц работаю в App in the Air. Началось всё еще в школе. Я уже начал понимать, что программирование это что-то интересное. Когда у тебя просто был компьютер, вроде бы не было ничего, потом ты что-то такое написал, и появилось что-то новое. Такая магия программирования завлекала. Но входить я в это дело начал, мягко говоря, сбоку. Я не знаю, почему так получилось, но первое, что мне попалось, это учебник Perl. Это было довольно страшно. Ни для кого не секрет, что приличная часть российского общего и высшего образования — это шпаргалки, без них никуда. После того, как мы с друзьями сдали все экзамены в физмат лицее, мы решили, что всё, что у нас было по физике и всем разделам математики неплохо было бы загнать в какую-то электронную шпаргалку. Так появилось наше первое Android приложение. Потом мой товарищ адаптировал его под iOS. Приложение «Книга формул» — это справочник с формулами, который до сих пор живет в обоих Store: Google Play и AppStore. Был несколько темный период, когда мы с тем же другом занимались стартапом, рассказывать про который подробно я не буду. Единственное про него скажу, что хостился он на ныне покойном Parse, если помните, у Фейсбука был такой Parse.com. Это была соцсеточка, которая дала много разного интересного опыта, потому что пришлось позаниматься очень многими аспектам. Она успешно загнулось, когда я был студентом второго курса. Деньги нужны. Я понял, что программирование — это ж тема, оно всем интересна. Я подумал, что родители заинтересованы в том, чтобы учить детей программированию, и предложил репетиторство: «Научу делать Android приложения». Я рассчитывал на детскую младшую аудиторию, а в итоге как-то так получилось, что учил 30-40 летних дядек. Это было довольно странно, но интересно. Кстати, несколько из них за наши курсы, за то время, что мы занимались, практически от ничего успешно дошли до оффера и пошли джунами куда-то работать. На третьем курсе я думал, куда бы отправиться на летнюю практику. Сначала думал, что надо просто взять список топ студий по мобильной разработке, которые есть в Москве, написать им кто я такой и что умею, чтобы меня взяли практикантом. Но пока я рассказывал эту штуку одной хорошей подруге, через неё вышел на App in the Air. Я пришел к ним, сделал тестовое задание, прошел практику, стажировку и с тех пор я там.
Роман: Алексей поднял интересную тему о пути в программирование. Мой опыт тоже непрямой, так как я не учился на чисто программистском факультете. Я практически всегда решаю с помощью компьютера какие-то свои прикладные задачи. Мой первый компьютер — это была игровая станция, где я учился переставлять windows. Я до сих пор, наверное, помню, как это делается, даже с закрытыми глазами смогу сделать. Именно в программирование я пришёл, благодаря курсам ещё в школе. Я увидел, какие красивые рисунки, графики можно запрограммировать. Они меня настолько завлекли, что я решил записаться на курсы. Это был Pascal, и было очень увлекательно. Илья, ты учился на программиста или это тоже было сбоку?
Илья: Я со школы понимал, что кажется, мне нравится информатика и математика, и было бы интересно это всё попробовать. Соответственно, я пошёл учиться в МАИ на факультет прикладной математики и программирования. Первые два курса я очень жалел о своем выборе, потому что была какая-то жесть: куча матанализа, очень много разработки на С, где мы писали какие-то странные штуки типа суффиксных деревьев, всяких жутких алгоритмов. Мне это не нравилось, я не понимал, зачем это надо. Потом попробовал iOS разработку и вот тут понял, что уже точно программирование мне нравится. Теперь я, конечно же, понимаю зачем нужны были все эти алгоритмы. Это очень классная база, которая мне сейчас помогает. Но тогда я думал, что она абсолютно бесполезна.
Алексей: Про жуткую математику. Я закончил в итоге тоже прикладную математику в ВШЭ. Впечатления точно такие же: ужасная математика 4 года. Разница только в том, что последние два года она была не столь ужасной, потому что я не часто появлялся в универе. Это очень помогает. Такой совет как бороться с математикой.
Роман: Лайфхак замечательный. Пожалуйста, не слушайте его, дорогие студенты, это вредный совет.
Образование программистов
Илья: У вас работают ребята без диплома? У меня прямо в команде есть человек без диплома, и у нас есть несколько Android разработчиков, которые тоже ничего не закончили и при этом кодят очень круто.
Алексей: У нас довольно много людей, которые еще студенты. В App in the Air такая политика подбора кадров. Мы всегда приглашаем очень много студентов на летнюю практику. Они делают какие-то задания. Те, кто сделал круче всего, получают подарки и предложения уже прийти на стажировку. БОльшая часть тех, кто сейчас есть, набирались с таких практик и стажировок. До недавнего времени бОльшая часть была из Высшей Школы Экономики, но не с прикладной математики, а с программной инженерии.
Роман: Я никогда не обращал на это внимание. Вопрос поставил меня в тупик. Но, если мне не изменяет память, много ребят с дипломами. Мы всегда смотрим на результат. Скорее всего, все с высшим образованием.
Про продуктовую разработку
Илья: Давайте поговорим про что-то приближенное к тому, чем мы занимаемся — про продуктовую разработку. Лёша, что ты считаешь важным в продуктовой разработке?
Алексей: Довольно интересный вопрос, я бы даже сказал сложный. Самое важное — это просто не забывать о том, что в итоге ты делаешь штуку (я конкретно про мобильную разработку), которая будет рисоваться на небольшом экране, и с ней будет взаимодействовать живой человек. Это всё, чем ты занимаешься. В погоне за модными техническими решениями, за гибкими архитектурами надо помнить, что в реальности пользователю плевать, что у тебя внутри — главное, чтобы оно работало, желательно быстро и без багов. Почаще обращать внимание на фидбеки, которые тебе дают, как пользователь себя чувствует.
Илья: Да, тут я с тобой согласен. Это в первую очередь клиентское приложение. Но ты так говоришь, что можно услышать так: «Забейте на архитектуру, это вообще неважно, какая разница». На самом деле это же не совсем так. Если мы на начальном этапе не сделаем что-то, оно нам потом аукнется. Всё равно об этом нужно думать.
Роман: Я бы здесь дополнил. Архитектура становится важна в те моменты, когда у тебя команда большая, и продукт постоянно развивается. Когда проект не очень большой, то, на мой взгляд, это мешает, потому что у тебя появляются накладные расходы в плане большого количества файлов. В небольшой устоявшейся команде архитектура, скорее, мешает. Под небольшой командой я имею в виду три человека, максимум четыре. Если больше, а если это еще и разные города, то там уже нужны процессы и правила, о которых вы не просто договорились, а которые формально прописаны на бумаге. Если возвращаться к продуктовой разработке, для меня всегда были интересны те продукты и приложения, которыми я сам пользуюсь с удовольствием.
Главный критерий — это удовольствие от пользования тем, что ты делаешь каждый день. Ты не просто закрываешь задачи, а ты тоже активный пользователь собственного приложения.
Илья: Да, это самое крутое, что может быть, когда ты пользуешься и действительно получаешь удовольствие от того, чем занимаешься еще и на работе. Я считаю, что самое полезные приложения — это те, которые позволяют нам экономить свое время.
Это было одной из причин, почему я пошел работать именно в банк. Деньги занимают огромную часть нашей жизни. Мы их получаем на работе, мы их тратим везде, и если мы можем сэкономить те минуты, часы, которые мы тратим на работу с ними, по-моему, это круто.
Роман: Интересно. Я чуть-чуть хочу отойти в сторону и задать вопрос Лёше. Я почему-то думал, что App in the Air — это одно приложение. У вас их несколько?
App in the Air
Алексей: По факту это одно приложение на Android и на iOS. Если совсем просто, то App in the Air — это трекер полетов — помощник путешественникам. Наша целевая аудитория — это люди, которые очень часто летают. Мы стараемся сделать всё, для того чтобы облегчить их жизнь тем, о чём говорил Илья — сохранить им время. Есть ещё побочный продукт, который является маленькой копией App in the Air для встречающих. То есть если ты встречаешь родственника с самолета, то можешь использовать приложение с урезанным функционалом. Но это не основная ветка, и был, скорее, эксперимент.
Роман: Что меня удивило, ты сказал, что вы постоянно приглашаете людей на стажировку. У меня создалось ощущение, что у вас большая команда, и вы чем-то все занимаетесь, но App in the Air — это одно небольшое приложение. Это так или нет?
Алексей: Да, это так. До недавнего времени, даже меньше, чем год назад, нас было в сумме 10 человек: обе платформы, back-end, аналитика, поддержка. На текущий момент нас 25 человек в главном чатике. Это связано с тем, что, во-первых, некоторые места, как поддержка, расширяются, и появились некоторые дополнительные направления, на которые тоже нужны люди.
Роман: Все эти стажеры, которых вы приглашаете, в разработку идут или равномерно распределяются по всем направлениям в компании?
Алексей: Примерно равномерно. Как это происходит? Приходят студенты, которым нужна практика. Мы им говорим: «Смотрите, можно делать то-то, то-то и то-то». Там целая пачка самых разных реальных задач. Не выдуманные, а то, что мы можем, если сделано хорошо, взять встроить и использовать. Они выбирают, что им больше нравится: кому-то Android, кому-то iOS, кому-то backend, кому-то Веб. Много задач по Data Science и машинному обучению. Даже если пришло очень много студентов, далеко не все в итоге остаются, но какая-то часть всё равно оседает у нас в компании и становятся нашими сотрудниками.
Рабочий день
Роман: Интересно послушать, как у кого строится типичный рабочий день. Илья, как у тебя всё происходит?
Илья: У меня не совсем типичная история, потому что я сейчас больше менеджер, чем разработчик. Поэтому типичный рабочий день состоит у меня из нескольких встреч, нескольких параллельных встреч, нескольких срочных встреч и еще ряда дел, которые надо срочно решить. Бывает проблема, что нужно все успеть, а что-то не нужно. Нужно расставлять приоритеты. Это, наверное, самое сложное в моей работе, потому что нужно понимать, чем ты должен заниматься через 5 минут, и желательно понимать это заранее.
Роман: Когда я руководил группой разработки Яндекс.Браузера, очень сложно давалось несколько встреч в один день. Даже после двух часовых встреч в день, я чувствовал себя выжатым, как лимон. Как ты справляешься с таким потоком?
Илья: Наверное, я к этому привык. Мой обычный день — четыре встречи минимум. Некоторое время я себе сам бронирую в календаре, когда знаю, что мне нужно сделать какую-то техническую задачу или что-то по проекту. Я иногда всё же стараюсь контрибьютить куда-то. Поэтому планирую дела в календаре. У меня всегда есть план на неделю, что я обязательно должен сделать.
Кстати, крутой совет: записывать все свои дела в один трекер задач.
Например, все мои рабочие и нерабочие дела, я ещё параллельно ремонтом дома занимаюсь, находятся в одном Task Tracker. Это всё один список, в который я накидываю себе на день дела и этим занимаюсь. Это помогает решать проблемы. Например, есть полчаса между встречами, и кажется, не успеешь ничего закодить и ничего важного решить, но зато можешь сделать какую-то задачу, которую тебе не нужно будет выполнять вечером по дороге домой.
Роман: Получается, что у тебя и рабочие задачи, и твое личное где-то хостятся в одном месте.
Илья: Да. Я использую для этого Wunderlist. Если говорить про рабочие задачи, то там все же это календарь и чуть-чуть Jira. Например, для AppsConf мы используем Trello. Но мне лично Trello не очень хорошо заходит. Для своих вещей я использую Wunderlist.
Алексей: Илья, ты говоришь, что у тебя есть свой Wunderlist, в котором у тебя все задачи. Как ты его синхронизируешь с тем, что используется в работе? Вручную происходит синхронизация или что-то настроено для этого?
Илья: Да, вручную. Я обычно завожу задачку и туда, и туда. Это не занимает у меня много времени. Поэтому пока меня такой вариант устраивает. Но вроде там есть какие-то готовые вещи, которые можно прикрутить и всё сделать. Но пока не болит, я это не решаю.
Роман: Помимо работы в твой рабочий день что-то ещё вписывается? Например, хобби. Что ты делаешь утром, вечером?
Илья: Конечно, главное хобби — это ремонт, как же без него. Много вещей, связанных с каким-то дополнительными активностями: либо запись подкаста, чем мы сейчас занимаемся, либо подготовка AppsConf. Пока больше ни на что времени хватает. Иногда успеваю погулять вечером, но это максимум.
Алексей: Рома, ты уже много лет крутишься в iOS разработке. Наверняка у тебя выработаны какие-то железные, проверенные временем подходы, которые ты для себя используешь. Как ты выстраиваешь свой рабочий день?
Роман: Мой рабочий день относительно спокойный в плане встреч. Каждый день есть stand-up, мы синхронизируемся нашей распределенной командой. Несколько человек сидит в Москве, бОльшая часть в Новосибирске. Как обычно все стендапятся, так и мы стендапимся. За всё время, что я занимаюсь разработкой, у меня есть два режима работы.
- Режим потока, когда я понимаю что нужно сделать, и мысль льется рекой. Я себя никак не сдерживаю и не останавливаю. Этот поток я могу просидеть до двух часов и писать код.
- Режим, который используется для задач с большим количеством неопределённости, чтобы я четко понимал, есть ли у меня прогресс в этой неопределенной задаче. Это техника Pomodoro, таймер на 25 минут. Перед началом очередных 25 минут я выставляю микроцель — в конце смотрю, достиг ли цели. Если я не достигаю цели три томата подряд — это повод задуматься: либо пойти отдохнуть, либо переоценить и подойти к решению с другой стороны.
Мне это сильно помогает. Дальше супер полезно — это выключить все мессенджеры и поставить автообновление почты на раз в час, а еще лучше просто руками запускать почтовый клиент и проверять, что нападало за это время.
Илья: Тут я с тобой полностью согласен. Я решил провести эксперимент и включил в телефоне режим «не беспокоить». Единственное, что я оставил, это все входящие звонки. В таком режиме я живу уже третью неделю. Блин, как же спокойно стало. Я вообще не дергаюсь теперь по любой вибрации, потому что их просто нет.
Роман: Я долгое время жил с iPhone и Apple Watch. Что меня раздражало в Telegram, так это то, что по умолчанию все уведомления приходят в часы и жутко вибрируют. Сейчас я решил поставить эксперимент: полностью переехал на Android. Я не стал туда ставить ни Twitter, ни Instagram, Telegram по умолчанию в беззвучном режиме. Это тоже помогает. Я чувствую себя гораздо спокойнее.
Алексей: Я очень плюсую за это выключение всего. Я так живу уже не первый год. У меня полностью нет никаких звуков, уведомлений. Когда сажусь работать, я просто переворачиваю телефон. Некоторые модели мигают индикатором, когда что-то пришло, и это всё берёт на себя внимание.
Илья: Лёша, расскажи, пожалуйста, как проходит у тебя рабочий день.
Алексей: У меня всё пересекается с вами за исключением некоторых нюансов. Ты обычно просыпаешься, завтракаешь, делаешь какие-то дела и садишься работать, неважно дома или в офисе, смотря какой день. Я полностью выключаю всё: никакие чаты, почта, уведомления мне не приходят. Я тоже пробовал Pomodoro технику, но ничего не получилось: она больше мешала, чем помогала. Я на это дело забил. Прошло какое-то время, и я попробовал ее снова, но просто в другой инкарнации. Я начал с того, что час ты работаешь, не отвлекаясь, потом делаешь перерыв 10-15 минут. Такими часовыми интервалами работаешь. Интересная штука, которую я заметил, что со временем вот этого часового интервала тебе начинает не хватать. Ты привыкаешь фокусироваться, и со временем этот интервал увеличивается до полутора-двух часов. У всех всё персонально, каждому свое, но у меня работает такая штука.
Сейчас я обычно работаю двухчасовыми интервалами. Сажусь, два часа ни на что не отвлекаясь пишу код, либо какие-то около кодовые вещи решаю. Проходит два часа, я открываю мессенджер и могу ответить что-то. Надо, наверное, предупредить, что могут возникать определенные сложности с тем, что тебе кто-то пишет, а ты два часа молчишь. Особенно коллегам это может быть не очень приятно, потому что они хотят у тебя что-то узнать. Когда у тебя начинающий разработчик спрашивает, не отвечай ему час, он за этот час сам найдет ответы и напишет тебе: «Ой, я всё решил». Неважен уровень разработчика, многие решения люди сами спокойно находят. На другие вещи у нас даже возник в одно время такой микроконфликт на этой почве. Мы просто договорились, что я буду периодически железно чекать и отвечать, если там что-то появилось.
Еще одна штука, которой я пользуюсь, это не приложение, а табличка в Excel, в которую я заношу всё, что сделано за эти два часа: пишу дату, временной интервал, что конкретно было сделано и какие-то пояснения к этой задаче. Если ты пилишь какую-то задачу, допустим, неделю, то обычно ты указываешь часть 1, часть 2, часть 3. Таких у тебя 30-40 частей и так далее. Там есть столбик для пояснения. Эта штука помогает, во-первых, сразу оценить насколько ты хорошо сегодня поработал. Ты видишь сколько реально часов ты работал. В моём случае это чисто работа с кодом: либо я его писал, либо читал, либо я его дебажил. Это не чтение статей, не листание Фейсбука. Плюс, она помогает оценить какую-то динамику: насколько ты больше стал успевать, позволяет находить задачи, которые похожи на то, что тебе предстоит и, соответственно, дать более точную оценку. Глядя в такой список, ты видишь: «Ага, примерно такая же задача у меня в прошлый раз заняла четыре часа, в позапрошлый раз — пять часов. Следовательно, за 3-4 часа я и в этот раз сделаю». Если от тебя требуют дать какую-то оценку, то это тоже помогает. Понятно, что эта табличка такая совершенно приватная, никому к ней доступа нет. Такое поминутное трекание может превратиться в не очень приятную штуку, если тебя начинают на работе трекать поминутно.
Роман: Интересно, что ты об этом упомянул, потому что я тоже отслеживаю то, что планирую и сделал за каждый помодоро. Это действительно позволяет оценить, на что уходит время и понять свою эффективность. Ты работаешь с тем, что ты зафиксировал? Например, ты видишь, что у тебя системно на какие-то задачи уходит много времени.
Алексей: Если честно, хотелось бы сказать, что я написал какой-нибудь скрипт, который бегает по табличке, строит мне красивый график, но нет, потому что на это нужно время. Когда-нибудь я его найду, но не сегодня. Хотелось бы даже сказать, что я ее систематически сижу и просматриваю, вспоминаю старые задачи, но тоже нет. Не знаю, связано это с этой табличкой или нет, где ты зафиксировал, всё записал, но ты просто уже примерно оцениваешь и разбиваешь задачу в голове. Тебе даже не нужно лезть куда-то и искать. Ты просто такие вещи уже знаешь.
Роман: Ещё пару моментов, которые я считаю важными.
Я считаю, что если в этот текущий день голова совершенно не работает, то лучше честно встать и пойти погулять, чем сидеть и пытаться заставить себя работать два часа подряд без особого результата.
Так ты потратишь полчаса-час своего времени, но ты его проведешь с удовольствием и пользой для себя. Потом ты, скорее всего, продолжишь работать. Это проверено на себе. Ещё один момент в том, что лучше иметь какие-то не технические хобби, которые позволяют мозгу переключаться и отдыхать от основной деятельности.
Алексей: Подкаст — отличное хобби, да? Я хотел бы дополнить твой комментарий. Допустим, есть у меня некоторое число X часов в день, которые я в норме пишу код. Это число X не твой полный максимум. Можно сделать еще два или четыре сверху. Но я за собой заметил такую штуку, что если такие, назовем их условно переработки (хотя тут никто ни за кем не следит, поэтому всё честно), накапливаются в течение 2-3 дней, потом на гораздо больший срок у тебя, как ты сказал «голова не работает». Это реально так. У тебя просто базовые вещи начинают медленнее происходить. Те задачи, которые решал за полчаса, начинаешь решать по часу и непонятно почему, ведь ты тот же сидишь. Но вот этот эффект имеет свойство быть. Поэтому это свое некоторое число X лучше знать. Лучше ты будешь работать каждый день Х часов эффективно, чем ты один раз сделаешь много и потом будешь сидеть тупить. Но надо помнить про дедлайны.
Инструменты для работы
Илья: Давайте поговорим про то, что вы используете для работы? Может быть, это какая-то IDE, если это вдруг не Xсode. Алексей наверное использует не Xсode, а что?
Алексей: Было бы странно писать Android приложение в Xсode. Я думаю, это было бы даже очень интересно попробовать.
Для Android разработки сейчас два стандарта: Android Studio, либо IntelliJ IDEA. Я использую Android Studio, и MacOS.
Илья: А какой Git клиент?
Алексей: Долгое время я очень недоумевал, когда видел людей, которые пользуются Git клиентами с UI. У меня была прекрасно отточенна терминальная версия, добавлен alias. Он мне там цветные графы вырисовывал со всеми ветками — сидишь, не нарадуешься. Всё это было прекрасно до того момента, пока я не открыл для себя GitUp. Есть такое бесплатное приложение для Mac. Его стоит попробовать, потому что становится быстрее. Да, там можно сделать то же самое. Там нельзя некоторые вещи сделать с помощью горячих клавиш или их долго и сложно учить, но очень многие вещи он в итоге упрощает и ускоряет. Особенно те, которые связаны с диффами, когда тебе нужно понять, что именно ты сейчас коммитишь и что поменялось. Эти вещи супер ускорены.
Роман: У меня похожий подход, но я до сих пор пользуюсь терминалом, для того чтобы сфетчить изменения, сделать rebase и вот это вот всё. UI у меня, скорее, для подставочного коммита или какого-то разделения и редактирования существующих commit messages. Я тоже пользуюсь GitUp — классная штука.
Илья: Я наоборот, никогда не пользовался терминалом для этого. Я умею, но мне никогда не нравилось. Я долгое время пользовался просто Xcode, потом меня научили пользоваться SourceTree. Сказали: «Смотри, это классный комбайн, он умеет всё». Я им пользовался, а теперь перешел на Fork. Это очень прикольная штука. Он пока бесплатный, но говорят, скоро станет платный. Он красивый, есть черная тема, и решает все мои задачи.
Алексей: Хочу еще одну штуку обязательно упомянуть. Я недавно не поскупился и разорился на лицензионную версию приложения Dash для Mac. Есть его аналоги и для Windows, и для Linux, причём бесплатные. Но для Mac она платная. Это штука, в которую можно офлайн загрузить документацию из кучи разных мест. Dash даёт:
- Документацию офлайн, которую можно посмотреть всегда. В случае, например, с Android документацией это получается гораздо быстрее, чем открывать сайт, потому что сайт у них медленный.
- Ещё она дает snippets. Пишешь кусочек кода, присваиваешь ему alias. Пока у тебя запущен Dash, ты пишешь этот alias, нажимаешь Tab и он прямо делает «paste» твоего кода. Можно ворочать очень большими кусками кода, и это очень ускорит работу. Он не зависит от IDE, поскольку может скопировать хоть в блокнот, хоть в Xcode, хоть в Android Studio.
Илья: Да, Dash — крутая штука. Я тоже использую, и мне нравится. Роман, скажи, что используешь ты?
Роман: Я начинал с Xcode. Пока он не превратился в такого неповоротливого слона, я был им очень доволен. Потом я увидел какие классные штуки можно делать в IntelliJ IDEA. В те времена Swift не было, а был Objective-C. Я пересилил себя и сел за AppCode и получал просто кучу удовольствия. Ты можешь столько всего делать с кодом: быстрые рефакторинги, переименования. В этом продукты JetBrains показывают свою мощь. Сейчас, к сожалению, пришлось вернуться на Xcode, потому что AppXode какое-то время чувствовал себя не очень хорошо со Swift, и всех тех плюшек, которые он мне давал в Objective-C, просто не было. Сейчас пользуюсь Xcode, потому что без него никуда.
Алексей: Такой вопрос: Vim или Emacs?
Роман: Vim.
Илья: Emacs. Я не умею выходить из Vim, поэтому у меня Emacs.
Роман: Меня ещё в универе научили, поэтому всё нормально.
Алексей: Рома, ты используешь Vim поверх Xcode в повседневной работе?
Роман: Нет, я разделяю личное и рабочее.
Алексей: Наверное, года два назад я как-то пересилил себя, потратил время и сначала научился пользоваться Vim на Pet Project в консольке в проектах на Python. Поскольку есть и для IntelliJ платформы и для Xcode плагины под Vim, перенес их туда. Это, конечно, супер штука. После них не представляю как можно редактировать код по-другому — всё это кажется очень медленным, неудобным и всё в этом роде.
Роман: Я пришел к теме шорткатов чуть-чуть с другой стороны. Я посмотрел, как люди играют в Starcraft. Я начинал с мышки, но потом увидел, как можно делать на клавиатуре.
Если возвращаться к тому, какими инструментами я пользуюсь, в целом, у меня подход разумного минимализма. То есть я, скорее, выберу какой-то простой небольшой инструмент, либо буду пользоваться тем, что идет в составе операционной системы. Благо, MacOS полна качественного встроенного софта, которым я очень доволен. Илья, я предлагаю перейти к тебе. Ты рассказал уже про SourceTree, про Fork. Чем ты пользуешься ещё? Почтовый клиент? Ты же менеджер.
Илья: Да, с почтой тут интересно. У нас есть корпоративный стандарт, поэтому это такой прекрасный клиент, как Lotus Notes. Я не хочу о нем говорить, если честно. Хорошо, если вы не знаете, что это.
Из интересного я активно пользуюсь Mind Map, в частности использую для этого MindNode. Он позволяет классно структурировать информацию. Я в него очень часто записываю какую-то информацию после встреч, для подготовки к докладам и подобные вещи.
Для разработки: Xcode и Fork сейчас. Еще, конечно, пользуюсь Keynote, достаточно обидно, но как без этого. Я умею делать анимации любой сложности в Keynote и могу научить всех кому интересно.
Рекомендации инструментов
Роман: Что вы можете порекомендовать нашим читателям? Что первое приходит в голову?
Илья: Для меня это MindNode. Когда я открыл эту всю историю с построениями mind map и структурированием информации, я понял, насколько это может быть удобно. Вместо того, чтобы записывать свои мысли или какую-то встречу в заметках, а потом разбираться что с этим делать: это может быть разбор любой задачи, проработка нового концепта какой-нибудь фичи и так далее. Когда я записываю это в mind map, я сразу могу разложить по слоям, и это потом намного проще использовать в работе. Всем советую.
Алексей: Dash я уже рекомендовал, поэтому предложу немножко параноидальную софтину Snitch. Правда она есть только для MacOS. Это, по сути, такой разухабистый Firewall, который на каждый входящий или исходящий из твоей машины запрос, покажет, что это за запрос, какое приложение его пустило, куда он пошел, и спросит тебя разрешить или запретить. Понятно, что можно запретить всегда, разрешить всё. Первые дни после его установки вы удивитесь, как много странной информации о вас отправляется непонятно куда. Помимо какой-нибудь проверки обновления, ещё куча всякой аналитики, причём от тех, от кого этого не ожидаешь. Больше всего этим грешит всё, что выпустила Adobe, они шлют просто огромные пачки запросов.
Плюс MicroSnitch — это такая же штуковина. Она, правда, следит за камерой и микрофоном. Она не умеет понимать, кто запустил процесс, но она может тебе показать, что у тебя камера сейчас заработала, микрофон или и то и то. В частности, я удивился, что Android Emulator нагло слушает. Скорее всего, это штука, которая слушает OK Google, ожидает OK Google, даже несмотря на то, что она выключена. А когда у тебя открыт рабочий стол, она активно слушает микрофон твоего хоста, твоей рабочей машинки, куда идет звук.
Роман: Если говорить про мои инструменты, то я вам сейчас покажусь динозавром. У меня весьма эффективно себя показала тетрадь формата А4 и ручка.
Лучше всего мой мыслительный процесс проходит, когда я пишу либо рисую то, что у меня сейчас в голове.
Алексей: Слушай, а ты не наблюдал в этой штуке такого эффекта от масштаба, если перейти от тетрадки или просто от листов А4 к белой доске или к флипчарту, то оно ещё лучше идёт, прямо вот таким потоком стремится и такой кайф рисовать на всём этом?
Роман: Есть такое, да. Я даже думаю сделать дома огромную доску в стену, как в офисах делают. Да, действительно есть такой эффект и прям даже приятно думать.
Алексей: Я слышал, что можно стены покрыть какой-то специальной краской, которая превращает стену в доску, то есть на стене можно писать и стирать. Илья ремонтом занимается, подскажешь, где раздобыть такую краску?
Илья: Да, у нас в офисе есть такое — это просто сделать.
Роман: Незаметно пролетело время, я предлагаю подвести итог и хочу поблагодарить моих собеседников и вас, за то, что слушали или читали.
В качестве заключения посмотрите приглашение Алексея Милеева на AppsConf. Над полной версией программы мы еще работаем, но уже приняты доклады:
- Дмитрий Грязин про свой богатый опыт работы с Unit и UI тестами в разработке под Android.
- Филипп Уваров о разработке Gradle плагинов.
- Илья Царёв о страхах, ожиданиях и суровой реальности при переходе на управленческую должность.