Месяц назад получаю письмо: “Прочитал о вас статью” – и следуют вопросы в духе “сколько обходится разработка одного приложения?”. А я ни сном ни духом, что за статья. Оказалось, что кто-то почитал мои посты в жж по тэгу “apps” и выложил на своем сайте вольный пересказ. В этом нет ничего противозаконного, но там была масса неточностей в цифрах и сроках (например, написали, что мой брат тоже работал в Беркли, или что у нас “полторы сотни” приложений, когда их примерно в три раза меньше), а, главное, мне приписывалась мотивация, которой у меня никогда не было. Вроде того, что я перестал писать в жж о приложениях, потому что испугался конкурентов, когда на самом деле мне просто не о чем писать, так как с приложениями ничего не меняется.
Я написал едкий комментарий, после которого со мной связался автор статьи и исправил самые грубые ляпы. Он же предложил мне ответить на несколько вопросов о приложениях, чтобы представить свою точку зрения. Ресурс у них, конечно, посвящен разным быстрым и сомнительным способам заработка в интернете. Но я подумал, что, во-первых, лучше уж я сам напишу, чем меня будут перевирать и представлять мой отказ, как доказательство, что мне есть, что скрывать. Во-вторых, меня регулярно просят в жж делать апдейты о приложениях. Я все, что о них знал, рассказал, повторяться не хочу. Но если задают конкретные вопросы о том, что реально людей интересует, так и быть, пусть будет такой FAQ об эппах, на который я смогу в будущем ссылаться.
В-третьих, я сам пришел в эту область, читая рассказы других разработчиков, и покривлю душой, если не признаю, что сам первым делом лез смотреть финансовые показатели. У меня сложилось впечатление, что в этой области как раз самые балаболы – это те, кто мнутся раскрывать информацию о доходах, а честным разработчикам скрывать нечего. Я сам себе хозяин, не связан никакими NDA и веду бухгалтерию так, что в любой момент готов баллотироваться в президенты от демократов. А конкурентов я мог бояться в 2014 году, когда люди уже начинали копировать наши приложения. Сейчас не боюсь. Умным людям всегда рад помочь советом, а глупым мои советы не помогут.
Вот ссылка на интервью для тех, кто хочет читать с картинками. Я ниже скопировал текст. Для постоянных читателей моего блога новой информации там будет минимум. “Желтый” заголовок, разумеется, не я придумал. Как будто я пытаюсь продать очередной “секрет успеха”. Хорошо еще, что отговорил их мое фото размещать. Так можно написать “Как американский пенсионер зарабатывает 15 миллионов долларов на написании мемуаров”, но не упомянуть, что этот пенсионер – Джо Байден. С братом-программистом, я мог быть не только бывшим химиком, но и бывшим семинаристом, юристом, работником “Макдоналдса”. Первоначальные расходы были не $100, а стоимость жизни первые 1,5 года, когда эппы не приносили дохода, которые невозможно правильно посчитать. И $25000 – это был доход в один месяц, когда совпал чемпионат мира по футболу и смена алгоритмов Google Play. Я бы так никогда не написал. Честнее писать $15000 в месяц или $500 в день, который действительно стабильны уже почти два года.
И в каждом втором вопросе сквозит желание выведать у меня тайну, как любому “химику” взять и начать зарабатывать такие деньги. А тайна в брате-программисте, и деньги не такие уж большие для двух мобильных разработчиков в США. Уверен, что в нашем доме половина жильцов больше получает. Наше преимущество в том, что мы эти деньги продолжаем получать, ничего не делая, а если начнем работать, то будем получать еще больше, в то время, как у наемных работников потолок доходов гораздо ближе. Но об этой философии меня не спрашивают. Задают вопросы – как сделать эпп, чтобы он в топ попал. Да если бы я знал, я бы только такие эппы и делал. Нет у нас сейчас эппов в топе, если под ним подразумевать Top Chart в магазинах приложений.
***
Здравствуйте, Андрей, рады, что согласились дать интервью для наших читателей. Для начала, актуально ли в 2019 году самостоятельно, без большой команды, разрабатывать и продвигать мобильные приложения?
Я отвечу, что это возможно и мы с братом тому пример. Но попытался вспомнить другие примеры и не смог. Уверен, что есть много других успешных маленьких команд, которые по разным причинам не хотят рассказывать о своих результатах и методах работы. А насчет актуальности надо спрашивать тех, кто начинает с нуля в 2019 году, но не сейчас, а через год.
Вы упоминали, что самостоятельно учились разработке приложений — у вас получилось? Как сложно человеку, далекому от программирования, стать разработчиком приложений?
В прошлом году я начал изучать Java с целью научиться делать мобильные приложения полностью самостоятельно и не зависеть от брата-программиста. Пока не удалось продвинуться дальше простейших приложений «две кнопки — одно текстовое поле». Но я не так много времени и усилий положил в это обучение, потому что у меня нет такой мотивации, что если не научусь, то помру с голода. Если раньше я говорил, что научиться делать мобильные приложения легко, то сейчас, попробовав сам, изменил свое мнение. Нужны сильная мотивация, умение доводить проекты до конца и любовь к программированию. Если что-то из этой троицы отсутствует, то будет сложно. Особенно, если пытаться все сделать в одиночку.
Сколько времени уходит на разработку одного из ваших типичных приложений с нуля, если этим будет заниматься один программист средней руки?
Если этот программист уже имеет опыт создания мобильного приложения с нуля до успешного запуска в магазине, то за месяц должен справиться. Если надо изучать новую для себя платформу, то может и год занять.
Какие по факту умения (знания языков) должны быть у программиста, чтобы он мог разработать квиз?
Важно знание не столько языков, а сколько конкретных платформ и фреймворков. Надо определиться, делать нативные для каждой платформы приложения (для Android на Java или Kotlin; для iOS – Swift или Objective-C) или использовать кросс-платформенные движки. Часто встречаю упоминания Unity (C#), React Native (JavaScript) и Flutter (Dart). Наши нынешние приложения написаны на кросс-платформенном движке Cocos2d-x (C++).
Вы не тратили денег на продвижение своих приложений. Как удалось некоторым вашим приложениям выбиться в топ Google Play и App Store?
Смотря что считать топом. Бывало, что некоторые из наших приложений на короткий срок выходили в топ своих категорий в некоторых странах. Например, в прошлом году, во время чемпионата мира по футболу наше приложение о флагах вышло в топы Бельгии и Хорватии, и это не могло быть чистой случайностью. Первым нашим успешным приложением в Google Play, которое потянуло за собой остальных, были «Кантоны Швейцарии» — хороших приложений на эту тему не было, а оказалось, что она очень востребована. Это не такие случаи, которые можно предугадать заранее. Общий совет — надо делать хорошие приложения, понимать, чем они отличаются от плохих, и надеяться на удачу.
Что сильнее всего влияет на выход приложения в топ — количество загрузок, отзывы, время использования приложения или какие-то может другие факторы? Может ли, например, выйти в топ приложение, у которого много загрузок, но все отзывы отрицательные?
Точных алгоритмов никто не знает, и они постоянно меняются. По моим многолетним наблюдениям самый главный фактор — количество скачиваний в последние дни. С ним коррелируют и остальные показатели, такие как количество оценок и отзывов. Несколько лет назад журналисты писали о том, что топ iOS возглавил Facebook Messenger со средней оценкой 1,2 звезды. Тогда на iOS старые отзывы стирались при обновлении. Но у Facebook такой сильный бренд, что оценки не влияют на скачивания и попадание в топ.
Реально ли сейчас приложению попасть в топ без платного продвижения?
Можно пойти в топ и начать изучать все приложения одно за другим, как они туда попали. Уверен, что найдутся те, которые попали без платного продвижения. Но так как мы не рассматриваем попадание в топ как главную цель, скорее, как приятную неожиданность, я заниматься таким исследованием сейчас не готов.
Вы писали, что приложения по химии не смогли добиться того успеха, что и квизы по географии. Как вы думаете, почему?
В мире намного больше людей, которые интересуются и изучают географию; не только школьники, но и путешественники, спортивные болельщики. Химия — очень нишевая, сложная область, которая не так хорошо ложится в формат квиза для всей семьи. Те, кто ее учит, предпочитают более надежные источники, чем мобильное приложение.
Как вы отслеживаете, какими приложениями продолжают пользоваться? Ведь этот параметр также влияет на позиции приложения помимо загрузок и отзывов?
Я когда-то посмотрел в Firebase (аналитика от Google), какие у наших приложений retention, DAU / MAU. Я не смог сделать никаких выводов из этих данных по удержанию пользователей, кроме банальных — надо добавлять больше уровней и вопросов. Не уверен, что удержание напрямую влияет на положение в топах.
Какие стартовые вложения потребовались и какие текущие расходы вы несете сейчас?
Непосредственно денег потребовалось $100 за аккаунт Apple-разработчика. Еще купили iPad для тестирования, но я этим айпадом много и для личных целей потом пользовался. Главными расходами можно назвать обеспечение жизни в первые полтора года, пока приложения не вышли на нормальный уровень доходов. Но не представляю, как их правильно посчитать. Сейчас у нас никаких бизнес-расходов, кроме тех же лицензий для ведения бизнеса с Apple в городе Сиэтле нет. Сервера у нас нет, наемных рабочих тоже. Пусть будет $500 в год с учетом амортизации компьютерной техники.
Ваши приложения монетизируются только с помощью рекламы? Не пробовали партнерские программы?
Не понимаю, что вы называете партнерскими программами. Прямые контракты с крупными рекламодателями? Слишком много возни по поиску таких клиентов, переговорам, составлению контрактов. Мы пользуемся рекламной сеткой AdMob от Google, и от них я меньше всего ожидаю каких-либо подстав и неожиданностей.
За что идет оплата с рекламной сети — за клики или показы? Сколько примерно платят?
У AdMob оплата идет только за клики. Величина зависит в первую очередь от того, сколько за клик платит рекламодатель. Разработчик может получить от 1 цента до 5 долларов за клик в зависимости от множества факторов: страны пользователя (в Японии платят больше, чем в России), формата рекламы (за видео больше, чем за баннер), времени года (в декабре больше, чем в январе), платформы, приложения и так далее. Вчера у наших приложений было в среднем 6 центов за клик.
Вы не пробовали какие-либо внутренние платежи в своих приложениях?
У нас есть встроенные покупки на iOS — отключение рекламы и бесконечные подсказки. Но они приносят не более 5% от общих доходов. На Android собираемся со временем добавить такие же покупки.
Возможно ли использование серых схем продвижения приложений и как сейчас обстоит с этим дело в магазинах приложений?
Я иногда вижу приложения с откровенно купленными отзывами (1 000 однотипных пятизвездочных отзывов на 5 000 скачиваний). Иногда Google с Apple такие приложения удаляют, иногда нет. Мы ничем таким не пользовались. С самого начала решили делать все максимально легально.
Существует мнение, что органический трафик на новые приложения сложно добыть и приходится в любом случае основное внимание переносить на платное продвижение. Вы согласны с этим?
Намного реалистичнее думать, что так оно и есть. Мы пока не собираемся платить за рекламу. Сколько я ни считал, нам это не выгодно с нашими доходами с одного скачивания. Но все крупные игроки продвигают свои приложения через платные каналы, и я не думаю, что мы умнее их.
Есть люди, которые утверждают, что зарабатывают на клонах популярных приложений, раскрученных с помощью рекламы. Насколько это соответствует истине?
Смотря что считать клоном. Уверен, что про любое зарабатывающее приложение можно сказать, что это клон игры, которая вышла еще в 1990-е годы. Уж одних клонов «три-в-ряд» полно, и я читал сегодня, что они зарабатывают 20% всех денег в Apple App Store.
Взгляд с той стороны — стоит ли рекламодателю продвигать свой продукт через приложения? Насколько эффективна такая реклама по сравнению с рекламой на сайтах?
Чего не знаю, того не знаю. Надо спрашивать у рекламодателей.
Сколько приносят все ваши приложения после вычета налогов?
Это величина переменная. В 2018 году после налогов осталось $169 000.
Есть ли разница в том, где разрабатывать, продвигать приложения и зарабатывать на них? К примеру, стоит ли для этого переезжать из России в США?
Мне в США нравится минимальная бюрократия с ведением бизнеса и банковскими переводами. Но если кто-то может организовать работающую схему в России, то там и налоги, и стоимость жизни ниже. Если и стоит переезжать из России в США, то не ради мобильных приложений. Это весьма интернациональный бизнес.
По вашему мнению, какая ниша в приложениях недооценена и куда следует направить свое внимание?
Все игры недооценены. Слишком много ресурсов по разработке приложений фокусируются именно на приложениях, а вероятность разработать новую успешную социальную сеть или даже погодное приложение очень невелика. Другое дело игры — игрокам всегда нужны новые. Но я еще со времени занятия наукой усвоил, что заниматься надо в первую очередь тем, что интересно тебе самому.
Собираетесь ли выпускать новые приложения, может быть есть какие-то задумки?
Да, собираемся. Задумок целый длинный лист. Есть идеи новых квизов (давно хочу попробовать сделать по математике), идеи простых логических игр и даже химического «калькулятора». Но пока идея не превратилась в приложение в магазине, она ничего не стоит. Такой же список у нас был и пять лет назад, но пока реализовалось из него очень немногое.
Кроме поддержки приложений, какие еще у вас планы на ближайшее будущее?
Глобальные планы мы не строим, потому что слишком многое может поменяться. Собираемся в путешествия в Орегон осенью, в Чикаго весной. Если приложения будут успешны, может, купим дом в Юте в ближайшую пару лет.
Вы закончили аспирантуру в США и у вас была возможность построить карьеру в науке, но вы пошли по совсем другому пути. По прошествии стольких лет вы не жалеете о принятом решении?
Нет, не жалею. Для меня главный ориентир — мои однокурсники, люди, с которыми я работал в лаборатории, чего достигли они, оставшись в науке. Не могу никому позавидовать. Мой путь с приложениями по всем статьям оказался выгоднее.
Что вы можете посоветовать тем, кто мечтает зарабатывать на приложениях?
Я давно всем предлагаю схему, похожую на то, как начинали мы. За полгода выпустить 10 простых, но разных приложений. Не надо три года писать «приложение века». Потом подождать еще полгода (если есть желание получать только органический трафик), посмотреть, какое из приложений оказалось наиболее успешным, и продолжать работать в этой области.
***
Чтобы все ссылки были в одном посте собраны. Моя собственная статья на vc.ru в первую очередь о грин-картах, но о приложениях тоже есть. Обратите внимание на разницу в заголовках: я не пишу “химик”, я пишу “ученый”, что может и к моему брату относиться.
Статья на “Инвест-Форсайт”. Тоже этим летом связалась со мной журналистка, мы поговорили о приложениях по скайпу, она написала все ту же историю. Теперь уж мне точно нечего добавить; если будут снова просить об интервью, буду слать на этот пост. Я рад пообщаться и ответить на вопросы, но не на те, на которые я уже три раза ответил.
четверг, 5 сентября 2019 г.
воскресенье, 25 августа 2019 г.
Купонинг: бесплатные бритвы и стратегический запас хлопьев
Я упоминал, что магазинные купоны представляют для меня вид математической игры. Так было не всегда. Помню, как меня после переезда в Сиэтл удивляли купоны “free item” – бесплатный предмет. Прямо так можно пойти и взять вещь в магазине бесплатно? В чем выгода для магазина? Почему все тогда не разберут то, что раздается в эту неделю на халяву?
Этот август дал минимум два хороших примера, чтобы продемонстрировать некоторую безумность купонов в местном магазине QFC. Вот сколько могут стоить сфотографированные здесь предметы (бананы и крекеры на заднем плане не в счет)?

Это был специальный поход в “QFC на горé”. У нас есть более близкий QFC, в 10 минутах пешком. И два QFC “на горе”, то есть на Capitol Hill, до которых идти по 35 минут. Но так как мы на работу не ходим, то желательно гулять каждый день хотя бы час. И прогулка в холм до магазина – вполне обычная цель. Все мои советы плохо применимы для тех, у кого мало свободного времени на обход всех соседних магазинов в поисках самого дешевого набора продуктов. Мы обычно обходимся Safeway, QFC (это местный Kroger) и Trader Joe’s. Еще есть близко Whole Foods и еще более дорогой Metropolitan Market, куда мы не ходим весьма принципиально. А вот в более дешевый Winco надо ехать на машине, что мы не любим. Да и если учесть бензин, то он будет не дешевле тех магазинов, до которых мы можем дойти пешком.

Так вот, в нашем QFC не было бритв Schick, на которые я и нацелился, так как просматривая электронные купоны, я заметил, что производитель дает на них хорошую скидку в $4, а бриться мы иногда бреемся. И Schick мне больше нравится, чем Gillette. Заодно в “QFC на горе” есть шоколадные хлопья Cascadian Farms – единственный вид хлопьев этого бренда, который нам нравится.

Итого: $9.30. Скидка – $24.20 или 73%. Неплохо. Бритвы вообще получились почти бесплатные: изначально они стоят $7.99, $1.50 скидывает сам магазин “по желтой этикетке”. $4.00 скидывает купон производителя, который я заранее добавил в свой аккаунт онлайн. $1.50 – еще один купон (от магазина?), тоже оказался на моем счету и применился, несмотря на купон производителя. $1 – эти бритвы участвовали в “мега-ивенте” “Buy 5, Save 5”, который QFC проводит примерно две недели в месяц. 7.99 – 1.50 – 4.00 – 1.50 – 1.00 = -0.01: QFC нам должен 1 цент за то, что мы забрали у них бритвы. Мне такие комбо дарят такое же удовольствие, как у игроков в “три-в-ряд”, когда снялось сразу много конфеток или кристаллов.
Но чтобы сработала скидка “Купи 5, сэкономь $5” надо было набрать пять предметов. Часто это отдельный квест, но на этот раз мы легко собрали: 1) бритвы; 2) шампунь мужской, почти литр ($3.99 – $1.00 – $1.00 = $1.99, тоже купон производителя в дополнение к “5-на-5”); 3) пачка хлопьев Barbara’s (Morning Oat Crunch – вот их мы уважаем) за $4.99 – $2.00 (купон от магазина) – $1.00 = $1.99. Сложно заметить самому, но предметы, участвующие в buy-5-save-5 помечаются в чеке символом “< +”.
4) и 5) это шоколадные хлопья Cascadian Farms. Изначально две пачки должны стоить $9.98. Но по доллару скидывает магазин, $1.00 купон за покупку Natural Foods на сумму больше $5 (эти хлопья organic), $1.40 – купон от магазина за то, что мы купили именно две пачки, $1 – купон от производителя (внизу чека видно MFG CPN SAVINGS $6 – это $4 за бритвы, $1 за шампунь и $1 от Cascadian Farms; мне важно понимать всю бухгалтерию) и, наконец, $1 + $1 – Mega Event Savings, как называется “Buy 5, Save 5” в чеке. Итого $2.58 или $1.29 за пачку. Вот это я называю “справедливой ценой”, после этого за $4.99 у меня рука не поднимется их купить. Но можно возразить, что если мы платим $2.58, должен ли был примениться купон за Natural Foods, там же надо было купить на $5? Эксперимент показал, что этот купон в данном случае применился. (Порядок применения купонов важен, об этом я еще напишу).
Хлопьев у нас накопился “стратегический запас”. Сейчас пересчитал – 24 пачки.

Кажется, что это много, но мы потребляем их со скоростью пачка за два дня. Так что хватит в лучшем случае на два месяца с учетом, что мы не на каждый завтрак их едим (бывают еще bagels и блины). Срок годности у них больше 8 месяцев. Мистер-Мани-Мусташ (есть такой проповедник экономии) учил, что в таком случае стратегический запас хлопьев должен составлять у нас 100 пачек. Но так как скидки на них бывают постоянно, мы не закупаемся по полной. Вот завтра собираемся купить еще 6 пачек Honey Bunches of Oats, в Safeway они по $1.67 в этом цикле (цены и скидки меняются в ночь со вторника на среду).

Ну, а мороженное мы купили потому что оно было по хорошей скидке $5.79 – $1.30 – $2.50 = $1.99, хоть и не участвовало в “Buy 5, Save 5”. Я не ставил целью специально собрать самые большие скидки, как некоторые энтузиасты купонинга скидывают 97%. Например, мы могли бы взять бесплатную сосиску и печенье, но эти купоны истекают только в октябре:

Не беспокойтесь, и сосиска, и печенье будут к тому времени куплены и съедены. Но для меня важно, что мы покупаем по скидкам-купонам только то, что купили бы так и так. Ведь с точки зрения QFC все эти купоны должны заманить меня в их магазин, чтобы я заодно купил у них много ненужных, переоцененных вещей. Не на того напали. В общем, это большая скидка, но типичная для нас: недавно брали бесплатную зубную пасту по той же схеме, что и с бритвами. Хотя с несъедобными вещами есть нюанс.
Я написал о бритвах “почти бесплатные”, так как sales tax никто не отменял, даже если после всех скидок они достались нам за минус 1 цент. Из чека видно, что налог составил $0.71, но в Сиэтле он 10.1% (еда, купленная в магазине, если она “нересторанная”, освобождена от налога). Значит, налогом обложили товаров на $7.03. 5 центов – это бумажный пакет: в Сиэтле не выдают бесплатные пакеты в магазинах. Мы обычно ходим со своими сумками, но иногда берем бумажные пакеты в QFC, чтобы потом собирать в них перерабатываемый мусор.
Понять, откуда взялись остальные $6.98, я бы не смог, если бы не подсказка в чеке в виде буквы T напротив некоторых товаров и цен. Как видим, $2.99 – это налогооблагаемая цена шампуня, а $3.99 – бритв. Купоны производителя вычитаются до налога, купоны магазина – после. Итоговая цена шести бритв – $0.39 с учетом налога с точностью до цента. Я одним станком могу полгода бриться, пока он окончательно не затупится, но брат раньше выкидывает. Можно тоже назвать стратегическим запасом. Да и литра шампуня с нашей привычкой стричься машинкой “4 спереди, 2 по бокам” хватит надолго.
Работник магазина, проходя мимо кассы, не удержался от ремарки, как много мы сэкономили. А то: два PhD закупаются. Надо отметить, что мы сейчас всегда идем на кассу самообслуживания, если она есть. Там и очереди обычно меньше, и мы можем быть уверены, что нас не обсчитают на лишнее яблоко или йогурт, как это случалось, пока в Safeway надо было идти к человеческому кассиру, что все скидки и купоны применятся так, как должны. В Safeway даже лучше система, чем в QFC: там все скидки вычитаются сразу после сканирования предмета, а не в самом конце. Это в чеке все разложено по полочкам, а в терминале вначале видна только полная сумма. Этот факт важен для второй моей истории.
В этот четверг отправились мы “проинспектировать” свежеоткрывшийся Whole Foods “на горе”. Проходили с одними бананами в корзине, посмотрели на цены и ассортимент, сказали “Однако”, выложили бананы назад (зачем нам органик за $0.69/фунт? спонсировать Безоса? кто там в Гватемале следит, что органик, а что нет) и демонстративно вышли из Whole Foods, ничего не купив. И в 4 минутах ходьбы от того Whole Foods находится QFC, в котором мы купили и бананы ($0.49/фунт), и персики ($1.49/фунт), и вот эти пять предметов:

Да, это снова акция “Купите 5, сэкономьте $5”. Мы взяли две пачки Kind Bars, пачку сыра “Филадельфия”, пачку наанов (индийских лепешек) и бейглы от Dave’s Killer Bread (если верить их истории, там чел реально отсидел 15 лет, вышел и стал печь хлеб и устраивать на работу других бывших зэков; это вам не история про девочку Барбару, которая придумала новые хлопья). Я знал, что на Kind Bars должен быть купон в $2, плюс $5 за Mega Event, с финального счета должно быть скинуто $7, но скинулось только $6:

$2 с баров скинули, а вот вместо “купи-5-сэкономь-5” получилось “купи-5-сэкономь-4”. Акция сработала, но только четыре раза. Такого раньше с нами не случалось. И не то, что нам так важен этот последний $1 (был бы важен, мы бы не жили в центре Сиэтла и не ходили по ресторанам), но это вызов моей способности просчитать комбинации. Вот это я не мог простить, поэтому мы подозвали работника магазина и сказали, что у них в программе баг и они должны нам вычесть еще $1.
Китайского вида дедушка полез в рекламную газетку, долго искал, к чему придраться. Не нашел в ней наанов и сказал, что поэтому нам доллар не положен. Мы предложили прогуляться в хлебный отдел и убедиться, что на ценнике наанов эта акция объявлена. Плюс напротив них в терминале стоит символ “< +” – кто кого должен учить, что это значит? Сходили, убедились, что правы мы (мне так приходилось иногда фоткать ценники, чтобы спорить с кассирами, которые смели усомниться в моей памяти и интеллекте). Работник воскликнул, что оно могло или сработать, и тогда должно быть минус $5, или не сработать, и тогда не должно быть скидки вообще. “Exactly”, – согласились мы. Дедушка не стал с нами дальше спорить, ввел какой-то код и вычел нам доллар – LYALTY RFUND в чеке.
Мы оплатили покупки и отправились домой, но загадка, почему вычли $4, а не $5, осталась. Работник магазина был уверен, что это из-за наанов. Мой брат предположил, что из-за Kind Bars, и, конечно, PhD в математике оказался прав. Но у меня ушло минут 10, чтобы догадаться, в чем дело.

А дело в том, что купон на бары был типа “Save $2.00 on 2”: купите 2, получите $2 скидки. И когда скидки начали вычитаться, они вычли все $2 из первой пачки, а не по $1 из каждой, что было бы логичнее. Полная цена пачки $2.99, но магазинная скидка без всяких купонов и акций была $1. То есть из $1.99 их софт вначале вычел $2, получил –$0.01. И только потом он учел, что мы собрали пять предметов по акции, и начал вычитать из каждого по $1 (вот тут они делают так, а не $5 отдельно). Из тех баров, которые стоили $1.99, доллар отнялся нормально, а из тех, что стали стоить -$0.01, нет. Произошел глюк в системе, которая не захотела уводить магазин в дальнейший минус. Поэтому мега-ивент сработал (пять предметов, 5 “плюсиков”), но вычел только $4.
– И кто кого в итоге обманул? – спросил меня брат. – Мы их, или они нас?
– Никто никого не обманул. Если бы их купон применился к барам 1+1, а не 2+0, то мы бы получили свой законный доллар без привлечения персонала магазина. Вот только я не знаю, дали нам этот “минус 1 цент”, или они округлили его до нуля: if (price < 0) price = 0;
Стал прикидывать на ходу по последним цифрам в чеке. Выходило, что недодали нам этот цент. Но тут я заметил, что магазин нам его дал, но его тут же забрали назад в виде налога. Мы же собирались в Whole Foods, не думали столько вещей покупать, и пришлось взять еще один бумажный пакет за 5 центов. Но 1 цент налога на 5 центов – это не 10.1%, а 20% налога. Я понимаю, что это Math.round() такой, но все же обманули нас – штат Вашингтон на полцента.
Это я не учитываю cash back от Bank of America в 2% от grocery purchases, но кешбеки по кредиткам – отдельная длинная история с расчетами, а пост и так получился длинный.
Этот август дал минимум два хороших примера, чтобы продемонстрировать некоторую безумность купонов в местном магазине QFC. Вот сколько могут стоить сфотографированные здесь предметы (бананы и крекеры на заднем плане не в счет)?
Это был специальный поход в “QFC на горé”. У нас есть более близкий QFC, в 10 минутах пешком. И два QFC “на горе”, то есть на Capitol Hill, до которых идти по 35 минут. Но так как мы на работу не ходим, то желательно гулять каждый день хотя бы час. И прогулка в холм до магазина – вполне обычная цель. Все мои советы плохо применимы для тех, у кого мало свободного времени на обход всех соседних магазинов в поисках самого дешевого набора продуктов. Мы обычно обходимся Safeway, QFC (это местный Kroger) и Trader Joe’s. Еще есть близко Whole Foods и еще более дорогой Metropolitan Market, куда мы не ходим весьма принципиально. А вот в более дешевый Winco надо ехать на машине, что мы не любим. Да и если учесть бензин, то он будет не дешевле тех магазинов, до которых мы можем дойти пешком.
Так вот, в нашем QFC не было бритв Schick, на которые я и нацелился, так как просматривая электронные купоны, я заметил, что производитель дает на них хорошую скидку в $4, а бриться мы иногда бреемся. И Schick мне больше нравится, чем Gillette. Заодно в “QFC на горе” есть шоколадные хлопья Cascadian Farms – единственный вид хлопьев этого бренда, который нам нравится.
Итого: $9.30. Скидка – $24.20 или 73%. Неплохо. Бритвы вообще получились почти бесплатные: изначально они стоят $7.99, $1.50 скидывает сам магазин “по желтой этикетке”. $4.00 скидывает купон производителя, который я заранее добавил в свой аккаунт онлайн. $1.50 – еще один купон (от магазина?), тоже оказался на моем счету и применился, несмотря на купон производителя. $1 – эти бритвы участвовали в “мега-ивенте” “Buy 5, Save 5”, который QFC проводит примерно две недели в месяц. 7.99 – 1.50 – 4.00 – 1.50 – 1.00 = -0.01: QFC нам должен 1 цент за то, что мы забрали у них бритвы. Мне такие комбо дарят такое же удовольствие, как у игроков в “три-в-ряд”, когда снялось сразу много конфеток или кристаллов.
Но чтобы сработала скидка “Купи 5, сэкономь $5” надо было набрать пять предметов. Часто это отдельный квест, но на этот раз мы легко собрали: 1) бритвы; 2) шампунь мужской, почти литр ($3.99 – $1.00 – $1.00 = $1.99, тоже купон производителя в дополнение к “5-на-5”); 3) пачка хлопьев Barbara’s (Morning Oat Crunch – вот их мы уважаем) за $4.99 – $2.00 (купон от магазина) – $1.00 = $1.99. Сложно заметить самому, но предметы, участвующие в buy-5-save-5 помечаются в чеке символом “< +”.
4) и 5) это шоколадные хлопья Cascadian Farms. Изначально две пачки должны стоить $9.98. Но по доллару скидывает магазин, $1.00 купон за покупку Natural Foods на сумму больше $5 (эти хлопья organic), $1.40 – купон от магазина за то, что мы купили именно две пачки, $1 – купон от производителя (внизу чека видно MFG CPN SAVINGS $6 – это $4 за бритвы, $1 за шампунь и $1 от Cascadian Farms; мне важно понимать всю бухгалтерию) и, наконец, $1 + $1 – Mega Event Savings, как называется “Buy 5, Save 5” в чеке. Итого $2.58 или $1.29 за пачку. Вот это я называю “справедливой ценой”, после этого за $4.99 у меня рука не поднимется их купить. Но можно возразить, что если мы платим $2.58, должен ли был примениться купон за Natural Foods, там же надо было купить на $5? Эксперимент показал, что этот купон в данном случае применился. (Порядок применения купонов важен, об этом я еще напишу).
Хлопьев у нас накопился “стратегический запас”. Сейчас пересчитал – 24 пачки.
Кажется, что это много, но мы потребляем их со скоростью пачка за два дня. Так что хватит в лучшем случае на два месяца с учетом, что мы не на каждый завтрак их едим (бывают еще bagels и блины). Срок годности у них больше 8 месяцев. Мистер-Мани-Мусташ (есть такой проповедник экономии) учил, что в таком случае стратегический запас хлопьев должен составлять у нас 100 пачек. Но так как скидки на них бывают постоянно, мы не закупаемся по полной. Вот завтра собираемся купить еще 6 пачек Honey Bunches of Oats, в Safeway они по $1.67 в этом цикле (цены и скидки меняются в ночь со вторника на среду).
Ну, а мороженное мы купили потому что оно было по хорошей скидке $5.79 – $1.30 – $2.50 = $1.99, хоть и не участвовало в “Buy 5, Save 5”. Я не ставил целью специально собрать самые большие скидки, как некоторые энтузиасты купонинга скидывают 97%. Например, мы могли бы взять бесплатную сосиску и печенье, но эти купоны истекают только в октябре:

Не беспокойтесь, и сосиска, и печенье будут к тому времени куплены и съедены. Но для меня важно, что мы покупаем по скидкам-купонам только то, что купили бы так и так. Ведь с точки зрения QFC все эти купоны должны заманить меня в их магазин, чтобы я заодно купил у них много ненужных, переоцененных вещей. Не на того напали. В общем, это большая скидка, но типичная для нас: недавно брали бесплатную зубную пасту по той же схеме, что и с бритвами. Хотя с несъедобными вещами есть нюанс.
Я написал о бритвах “почти бесплатные”, так как sales tax никто не отменял, даже если после всех скидок они достались нам за минус 1 цент. Из чека видно, что налог составил $0.71, но в Сиэтле он 10.1% (еда, купленная в магазине, если она “нересторанная”, освобождена от налога). Значит, налогом обложили товаров на $7.03. 5 центов – это бумажный пакет: в Сиэтле не выдают бесплатные пакеты в магазинах. Мы обычно ходим со своими сумками, но иногда берем бумажные пакеты в QFC, чтобы потом собирать в них перерабатываемый мусор.
Понять, откуда взялись остальные $6.98, я бы не смог, если бы не подсказка в чеке в виде буквы T напротив некоторых товаров и цен. Как видим, $2.99 – это налогооблагаемая цена шампуня, а $3.99 – бритв. Купоны производителя вычитаются до налога, купоны магазина – после. Итоговая цена шести бритв – $0.39 с учетом налога с точностью до цента. Я одним станком могу полгода бриться, пока он окончательно не затупится, но брат раньше выкидывает. Можно тоже назвать стратегическим запасом. Да и литра шампуня с нашей привычкой стричься машинкой “4 спереди, 2 по бокам” хватит надолго.
Работник магазина, проходя мимо кассы, не удержался от ремарки, как много мы сэкономили. А то: два PhD закупаются. Надо отметить, что мы сейчас всегда идем на кассу самообслуживания, если она есть. Там и очереди обычно меньше, и мы можем быть уверены, что нас не обсчитают на лишнее яблоко или йогурт, как это случалось, пока в Safeway надо было идти к человеческому кассиру, что все скидки и купоны применятся так, как должны. В Safeway даже лучше система, чем в QFC: там все скидки вычитаются сразу после сканирования предмета, а не в самом конце. Это в чеке все разложено по полочкам, а в терминале вначале видна только полная сумма. Этот факт важен для второй моей истории.
В этот четверг отправились мы “проинспектировать” свежеоткрывшийся Whole Foods “на горе”. Проходили с одними бананами в корзине, посмотрели на цены и ассортимент, сказали “Однако”, выложили бананы назад (зачем нам органик за $0.69/фунт? спонсировать Безоса? кто там в Гватемале следит, что органик, а что нет) и демонстративно вышли из Whole Foods, ничего не купив. И в 4 минутах ходьбы от того Whole Foods находится QFC, в котором мы купили и бананы ($0.49/фунт), и персики ($1.49/фунт), и вот эти пять предметов:
Да, это снова акция “Купите 5, сэкономьте $5”. Мы взяли две пачки Kind Bars, пачку сыра “Филадельфия”, пачку наанов (индийских лепешек) и бейглы от Dave’s Killer Bread (если верить их истории, там чел реально отсидел 15 лет, вышел и стал печь хлеб и устраивать на работу других бывших зэков; это вам не история про девочку Барбару, которая придумала новые хлопья). Я знал, что на Kind Bars должен быть купон в $2, плюс $5 за Mega Event, с финального счета должно быть скинуто $7, но скинулось только $6:
$2 с баров скинули, а вот вместо “купи-5-сэкономь-5” получилось “купи-5-сэкономь-4”. Акция сработала, но только четыре раза. Такого раньше с нами не случалось. И не то, что нам так важен этот последний $1 (был бы важен, мы бы не жили в центре Сиэтла и не ходили по ресторанам), но это вызов моей способности просчитать комбинации. Вот это я не мог простить, поэтому мы подозвали работника магазина и сказали, что у них в программе баг и они должны нам вычесть еще $1.
Китайского вида дедушка полез в рекламную газетку, долго искал, к чему придраться. Не нашел в ней наанов и сказал, что поэтому нам доллар не положен. Мы предложили прогуляться в хлебный отдел и убедиться, что на ценнике наанов эта акция объявлена. Плюс напротив них в терминале стоит символ “< +” – кто кого должен учить, что это значит? Сходили, убедились, что правы мы (мне так приходилось иногда фоткать ценники, чтобы спорить с кассирами, которые смели усомниться в моей памяти и интеллекте). Работник воскликнул, что оно могло или сработать, и тогда должно быть минус $5, или не сработать, и тогда не должно быть скидки вообще. “Exactly”, – согласились мы. Дедушка не стал с нами дальше спорить, ввел какой-то код и вычел нам доллар – LYALTY RFUND в чеке.
Мы оплатили покупки и отправились домой, но загадка, почему вычли $4, а не $5, осталась. Работник магазина был уверен, что это из-за наанов. Мой брат предположил, что из-за Kind Bars, и, конечно, PhD в математике оказался прав. Но у меня ушло минут 10, чтобы догадаться, в чем дело.
А дело в том, что купон на бары был типа “Save $2.00 on 2”: купите 2, получите $2 скидки. И когда скидки начали вычитаться, они вычли все $2 из первой пачки, а не по $1 из каждой, что было бы логичнее. Полная цена пачки $2.99, но магазинная скидка без всяких купонов и акций была $1. То есть из $1.99 их софт вначале вычел $2, получил –$0.01. И только потом он учел, что мы собрали пять предметов по акции, и начал вычитать из каждого по $1 (вот тут они делают так, а не $5 отдельно). Из тех баров, которые стоили $1.99, доллар отнялся нормально, а из тех, что стали стоить -$0.01, нет. Произошел глюк в системе, которая не захотела уводить магазин в дальнейший минус. Поэтому мега-ивент сработал (пять предметов, 5 “плюсиков”), но вычел только $4.
– И кто кого в итоге обманул? – спросил меня брат. – Мы их, или они нас?
– Никто никого не обманул. Если бы их купон применился к барам 1+1, а не 2+0, то мы бы получили свой законный доллар без привлечения персонала магазина. Вот только я не знаю, дали нам этот “минус 1 цент”, или они округлили его до нуля: if (price < 0) price = 0;
Стал прикидывать на ходу по последним цифрам в чеке. Выходило, что недодали нам этот цент. Но тут я заметил, что магазин нам его дал, но его тут же забрали назад в виде налога. Мы же собирались в Whole Foods, не думали столько вещей покупать, и пришлось взять еще один бумажный пакет за 5 центов. Но 1 цент налога на 5 центов – это не 10.1%, а 20% налога. Я понимаю, что это Math.round() такой, но все же обманули нас – штат Вашингтон на полцента.
Это я не учитываю cash back от Bank of America в 2% от grocery purchases, но кешбеки по кредиткам – отдельная длинная история с расчетами, а пост и так получился длинный.
пятница, 16 августа 2019 г.
Я учусь решать задачи по программированию
В прошлом году я решил начать по-серьезному учить программирование, чтобы самому делать мобильные приложения. До этой цели я пока так и не дошел, поэтому пока расскажу о двух сайтах с программистскими задачками, которые мне сильно помогли прокачать навыки в этой сфере: Codewars и LeetCode. Таких сайтов сейчас развелось множество, но я решал задачи только на этих двух, поэтому буду делиться личным опытом и успехами.

Исторически первым я пришел на Codewars (мой аккаунт там). И он мне чем-то напомнил изучение иностранных языков на Duolingo: можно точно так же с полного нуля начать с самых простых задач, где требуется определить четное ли число или написать простейший for loop, минимум теории – максимум практики:
Конечно, тем, кто вообще никогда не программировал (вот у нас в школе, которую я закончил в 2002 году, программирования не было; на химфаке тоже; брат все учил по книжкам, но комп у нас был, поэтому что такое for loop, я смутно представлял), придется даже с простыми задачами лезть в гугл, на StackOverflow, но это будет не чтение теории, которую непонятно, куда применить, а поиски ответа на конкретный вопрос. Зато потом, после своего кривого алгоритма, можно будет посмотреть решение других людей и выучить из них еще больше. Я вот прямо скажу, что решив на Codewars 50 простейших задач по питону, я узнал о нем больше, чем от чтения 350-страничного учебника по Python для начинающих.
Задачи на codewars придумывают другие юзеры, и за несколько лет их накопилось несколько тысяч, самого разного уровня сложности (они обозначаются цифрами от 8 до 1: “восьмерки” – самые простые). На каких-то языках больше, на каких-то меньше. Некоторые задачи универсальны и могут быть переведены почти на любой язык. Другие – полностью зависят от фич определенного языка или группы языков. Этим Codewars очень понравился моему брату, который провел на этом сайте даже больше времени, чем я, и вышел на 21-е место в общей таблице пользователей (я где-то в районе 900-го места обитаю):

Мой брат глубоко изучил JavaScript, подтянул ассемблер, а когда в этом году на Codewars добавили языки формальных доказательств – тема, тесно связанная с его научной работой – такие как Coq, он зауважал этот сайт еще больше.
Я же начал прошлой весной с C#, потому что мы планировали переходить на кросс-платформенный движок Unity для создания приложений. Прорешал на нем несколько сотен задач, но год назад брат решил, что Unity нам не подходит и посоветовал мне учить нативную для андроида Java (на популярном нынче Kotlin там мало задач еще). Вот я так с тех пор на Java и решаю (а C# забыл). Недавно стал еще Python и JS решать – самые простые задачи 8-го и 7-го уровней. Для общего развития: на Python брат пишет скрипты по обработке файлов, на JS есть свой мобильный движок ReactNative. На Duolingo я так когда-то учил пять языков параллельно. Без практики почти все забыл, но основы в мозгу остались.
Но проблема с Codewars была и остается в том, что я не могу заставить себя решать сложные задачи (4 и сложнее). С простыми задачами я почти сразу вижу, как их решать и бросаюсь писать код. Через десять, максимум двадцать минут, моя программа проходит тесты, и я получаю моральное вознаграждение. Размышлять часами над сложными задачами, которые я, вполне возможно, и не могу решить в силу ограниченности моих познаний, мне скучно.
И вот недавно я завел аккаунт на LeetCode – еще одном сайте по решению задач, даже более известном, чем Codewars, потому что задачи оттуда часто используются компаниями для интервьюирования программистов. Там тоже есть (приблизительное) деление задач по сложности на простые, средние и трудные, но даже самая простая задача потребует уже определенных познаний. Правда, задачи при этом не привязаны к конкретному языку программирования, а тестируют абстрактные алгоритмы, которые фундаментально одинаковы и на Java, и на Python, и на C++.

Я снова рисковал завязнуть только на самых простых задачках (их там не тысячи, как на Codewars, но сотни – хватит на несколько месяцев), если бы не такая вещь как contests (соревнования). Раз в неделю, субботним вечером (по тихоокеанскому времени; в Китае утром) всем желающим предлагается решить за полтора часа 4 задачи (обычно 1 простая, 2 средние, 1 сложная).
Я никогда не участвовал в олимпиадах по программированию, но мне стало любопытно, решу ли я хотя бы одну задачу, и я записался на свой первый контест. После тренировок на Codewars я справился с простой задачей за 12 минут, у меня оставалось еще больше часа, но вот “средние” задачи для меня оказались не по зубам. Возможно, я допустил стратегическую ошибку, потратив все оставшееся время на задачу, которая объективно была сложнее другой. Но та другая была о “деревьях” – популярной структуре данных – а я решал о них всего одну задачу до этого и испугался деревьев. В итоге я больше так ничего и не решил и финишировал в районе 2000-го места.
Подобная же ситуация повторилась через неделю: я решил простую задачу за 12 минут, а потом все оставшееся время бился со средними задачами. Мне стало обидно: контест на полтора часа, а я отваливаюсь через 10 минут. И я засел за чтение теории (книги по алгоритмам, которые я считал, что мне не нужны в мобильной разработке), за разбор нерешенных мной задач и за решение задач сложнее “моей зоны комфорта”.
Уже на третьем контесте моя подготовка дала плоды: я смог решить три задачи и занять 550-е место. Возможно, они были чуть проще на этот раз, но если бы сильно проще, то другие участники обогнали бы меня как и раньше (при равенстве очков за решение задач места распределяются по времени, затраченном на решение). У меня даже оставалось 30 минут, чтобы подумать над “сложной” задачей. Но тут я уже был бессилен. Я дорешал ее через неделю с подсказкой брата (“делать двойную рекурсию”). Он сам явно мог бы решить там все задачи, все же это не “научные” проблемы, а вопросы для интервью, но он вообще не любит соревноваться на время. А меня порой захватывает азарт.
Неделю назад я поучаствовал в своем 4-м контесте, за полтора часа решил две задачи, а третью дорешал только через 25 минут после окончания (но я был на правильном пути; мой брат сказал, что она простая, и я должен был решать ее на контесте, но вот не решил). Ожидаемо оказался на 940-м месте, но все равно был доволен собой. После первых двух неудачных контестов мне было принципиально научиться решать эти задачи, а время – фактор второстепенный.

И вот я оказался с этими задачами на некоем распутье. Я не собираюсь проходить интервью в компании, я не собираюсь заниматься computer science в научном плане, для мобильных приложений умение решать алгоритмические задачи на время не пригодится. Нужно ли мне продолжать тратить время на эти сайты, или это чистая прокрастинация, которая только отвлекает меня от основной цели – научиться делать приложения?
Я уверен, что потрать я на контесты еще год-два, я буду гарантировано решать там четыре задачи и, если повезет, попадать в первую сотню. Денег или славы мне это не принесет. Я никогда не смогу обогнать лидеров, которые занимаются решением подобных задач всю жизнь (я посмотрел, что один из победителей контестов neal_wu еще в 2008-2010 годах брал золотые медали на международных олимпиадах по информатике, закончил Гарвард и работает в научном отделе Google; у него, наверно, такой отдых перед сном – зайти и решить все 4 задачи за 20 минут, напугав малышей).
Как я написал в Case Study #1, есть у меня талант решать задачи на время. В школе, универе или на интервью его очень ценят. Но в реальной работе над реальными проектами требуются другие навыки. В первую очередь не бросать работу, когда стало скучно, а доводить ее до конца. И я не знаю, какой контест смог бы меня научить такому, если даже финансовая мотивация от написания мобильных приложений не помогает мне довести хотя бы один из моих проектов до публикуемого состояния.
Все эти задачи в итоге сведутся не к изучению программирования, а к “занимательной математике”. К задачам, которые тоже раньше задавали на интервью: “Дано 12 шаров, один из них чуть тяжелее или легче остальных (неизвестно, легче или тяжелее), определите какой за три взвешивания”. Эту задачу я тоже решил, она хорошая, но никак не помогает разобраться с анимациями в андроиде.
Во многом я пишу этот пост, чтобы подвести некий итог решению задач. У меня так бывает: написал пост о фильмах и перестал их смотреть. Каждый учится по-своему, но если вы начинаете учить языки программирования я готов порекомендовать Codewars, если хотите посоревноваться в придумывании алгоритмов на время, LeetCode – неплохая платформа для этого. Мне она дала мотивацию разобраться с рекурсией. Я определенно продолжу решать там задачи время от времени, чтобы не забыть Java. Но надеюсь, что когда-нибудь напишу здесь пост и о своем собственном приложении, а не только о том, как я решаю чужие задачи.

Исторически первым я пришел на Codewars (мой аккаунт там). И он мне чем-то напомнил изучение иностранных языков на Duolingo: можно точно так же с полного нуля начать с самых простых задач, где требуется определить четное ли число или написать простейший for loop, минимум теории – максимум практики:
Конечно, тем, кто вообще никогда не программировал (вот у нас в школе, которую я закончил в 2002 году, программирования не было; на химфаке тоже; брат все учил по книжкам, но комп у нас был, поэтому что такое for loop, я смутно представлял), придется даже с простыми задачами лезть в гугл, на StackOverflow, но это будет не чтение теории, которую непонятно, куда применить, а поиски ответа на конкретный вопрос. Зато потом, после своего кривого алгоритма, можно будет посмотреть решение других людей и выучить из них еще больше. Я вот прямо скажу, что решив на Codewars 50 простейших задач по питону, я узнал о нем больше, чем от чтения 350-страничного учебника по Python для начинающих.
Задачи на codewars придумывают другие юзеры, и за несколько лет их накопилось несколько тысяч, самого разного уровня сложности (они обозначаются цифрами от 8 до 1: “восьмерки” – самые простые). На каких-то языках больше, на каких-то меньше. Некоторые задачи универсальны и могут быть переведены почти на любой язык. Другие – полностью зависят от фич определенного языка или группы языков. Этим Codewars очень понравился моему брату, который провел на этом сайте даже больше времени, чем я, и вышел на 21-е место в общей таблице пользователей (я где-то в районе 900-го места обитаю):

Мой брат глубоко изучил JavaScript, подтянул ассемблер, а когда в этом году на Codewars добавили языки формальных доказательств – тема, тесно связанная с его научной работой – такие как Coq, он зауважал этот сайт еще больше.
Я же начал прошлой весной с C#, потому что мы планировали переходить на кросс-платформенный движок Unity для создания приложений. Прорешал на нем несколько сотен задач, но год назад брат решил, что Unity нам не подходит и посоветовал мне учить нативную для андроида Java (на популярном нынче Kotlin там мало задач еще). Вот я так с тех пор на Java и решаю (а C# забыл). Недавно стал еще Python и JS решать – самые простые задачи 8-го и 7-го уровней. Для общего развития: на Python брат пишет скрипты по обработке файлов, на JS есть свой мобильный движок ReactNative. На Duolingo я так когда-то учил пять языков параллельно. Без практики почти все забыл, но основы в мозгу остались.
Но проблема с Codewars была и остается в том, что я не могу заставить себя решать сложные задачи (4 и сложнее). С простыми задачами я почти сразу вижу, как их решать и бросаюсь писать код. Через десять, максимум двадцать минут, моя программа проходит тесты, и я получаю моральное вознаграждение. Размышлять часами над сложными задачами, которые я, вполне возможно, и не могу решить в силу ограниченности моих познаний, мне скучно.
И вот недавно я завел аккаунт на LeetCode – еще одном сайте по решению задач, даже более известном, чем Codewars, потому что задачи оттуда часто используются компаниями для интервьюирования программистов. Там тоже есть (приблизительное) деление задач по сложности на простые, средние и трудные, но даже самая простая задача потребует уже определенных познаний. Правда, задачи при этом не привязаны к конкретному языку программирования, а тестируют абстрактные алгоритмы, которые фундаментально одинаковы и на Java, и на Python, и на C++.

Я снова рисковал завязнуть только на самых простых задачках (их там не тысячи, как на Codewars, но сотни – хватит на несколько месяцев), если бы не такая вещь как contests (соревнования). Раз в неделю, субботним вечером (по тихоокеанскому времени; в Китае утром) всем желающим предлагается решить за полтора часа 4 задачи (обычно 1 простая, 2 средние, 1 сложная).
Я никогда не участвовал в олимпиадах по программированию, но мне стало любопытно, решу ли я хотя бы одну задачу, и я записался на свой первый контест. После тренировок на Codewars я справился с простой задачей за 12 минут, у меня оставалось еще больше часа, но вот “средние” задачи для меня оказались не по зубам. Возможно, я допустил стратегическую ошибку, потратив все оставшееся время на задачу, которая объективно была сложнее другой. Но та другая была о “деревьях” – популярной структуре данных – а я решал о них всего одну задачу до этого и испугался деревьев. В итоге я больше так ничего и не решил и финишировал в районе 2000-го места.
Подобная же ситуация повторилась через неделю: я решил простую задачу за 12 минут, а потом все оставшееся время бился со средними задачами. Мне стало обидно: контест на полтора часа, а я отваливаюсь через 10 минут. И я засел за чтение теории (книги по алгоритмам, которые я считал, что мне не нужны в мобильной разработке), за разбор нерешенных мной задач и за решение задач сложнее “моей зоны комфорта”.
Уже на третьем контесте моя подготовка дала плоды: я смог решить три задачи и занять 550-е место. Возможно, они были чуть проще на этот раз, но если бы сильно проще, то другие участники обогнали бы меня как и раньше (при равенстве очков за решение задач места распределяются по времени, затраченном на решение). У меня даже оставалось 30 минут, чтобы подумать над “сложной” задачей. Но тут я уже был бессилен. Я дорешал ее через неделю с подсказкой брата (“делать двойную рекурсию”). Он сам явно мог бы решить там все задачи, все же это не “научные” проблемы, а вопросы для интервью, но он вообще не любит соревноваться на время. А меня порой захватывает азарт.
Неделю назад я поучаствовал в своем 4-м контесте, за полтора часа решил две задачи, а третью дорешал только через 25 минут после окончания (но я был на правильном пути; мой брат сказал, что она простая, и я должен был решать ее на контесте, но вот не решил). Ожидаемо оказался на 940-м месте, но все равно был доволен собой. После первых двух неудачных контестов мне было принципиально научиться решать эти задачи, а время – фактор второстепенный.

И вот я оказался с этими задачами на некоем распутье. Я не собираюсь проходить интервью в компании, я не собираюсь заниматься computer science в научном плане, для мобильных приложений умение решать алгоритмические задачи на время не пригодится. Нужно ли мне продолжать тратить время на эти сайты, или это чистая прокрастинация, которая только отвлекает меня от основной цели – научиться делать приложения?
Я уверен, что потрать я на контесты еще год-два, я буду гарантировано решать там четыре задачи и, если повезет, попадать в первую сотню. Денег или славы мне это не принесет. Я никогда не смогу обогнать лидеров, которые занимаются решением подобных задач всю жизнь (я посмотрел, что один из победителей контестов neal_wu еще в 2008-2010 годах брал золотые медали на международных олимпиадах по информатике, закончил Гарвард и работает в научном отделе Google; у него, наверно, такой отдых перед сном – зайти и решить все 4 задачи за 20 минут, напугав малышей).
Как я написал в Case Study #1, есть у меня талант решать задачи на время. В школе, универе или на интервью его очень ценят. Но в реальной работе над реальными проектами требуются другие навыки. В первую очередь не бросать работу, когда стало скучно, а доводить ее до конца. И я не знаю, какой контест смог бы меня научить такому, если даже финансовая мотивация от написания мобильных приложений не помогает мне довести хотя бы один из моих проектов до публикуемого состояния.
Все эти задачи в итоге сведутся не к изучению программирования, а к “занимательной математике”. К задачам, которые тоже раньше задавали на интервью: “Дано 12 шаров, один из них чуть тяжелее или легче остальных (неизвестно, легче или тяжелее), определите какой за три взвешивания”. Эту задачу я тоже решил, она хорошая, но никак не помогает разобраться с анимациями в андроиде.
Во многом я пишу этот пост, чтобы подвести некий итог решению задач. У меня так бывает: написал пост о фильмах и перестал их смотреть. Каждый учится по-своему, но если вы начинаете учить языки программирования я готов порекомендовать Codewars, если хотите посоревноваться в придумывании алгоритмов на время, LeetCode – неплохая платформа для этого. Мне она дала мотивацию разобраться с рекурсией. Я определенно продолжу решать там задачи время от времени, чтобы не забыть Java. Но надеюсь, что когда-нибудь напишу здесь пост и о своем собственном приложении, а не только о том, как я решаю чужие задачи.
воскресенье, 11 августа 2019 г.
Один год веду инстаграм: впечатления
Прошел год, как я создал аккаунт в инстаграме. За это время я разместил там 208 постов, но это не 208 фотографий, а больше, около 1000, потому что я почти всегда выкладываю сразу несколько, чтобы показать объект с разных сторон или в разное время года. Основной темой постепенно стал Сиэтл: его достопримечательности, современные скульптуры и природа.

ЖЖ был и остается для меня главной площадкой. Я не понимаю, как люди публикуют в инстаграме длинные тексты – мне их там даже читать не удобно, не то, что набирать одним пальцем на телефоне. А я все же больше писатель, чем фотограф. Инстаграм я не забросил исключительно потому, что он не конкурирует, не дублирует, а добавляет мой жж: например, о путешествии в СФ я написал в жж, поэтому в иг его не будет; а поездка в Олимпию, столицу штата Вашингтон, будет в инстаграме в виде десятка фотографий (больше в один пост не лезет), и в жж я могу о ней уже не упоминать.

Мне еще помогает, что инстаграм я посматриваю с десктопного компьютера, и в таком случае там совсем нет рекламы, и все посты в ленте располагаются в удобном хронологическом порядке. Я могу смотреть и слушать Stories в отдельном окне параллельно другой работе, как я делаю с ютубом. Иначе у меня не было бы на них времени. В поездках я заходил в инстаграм с телефона – это ж ужас, сколько там рекламы, после каждого третьего поста или истории. Вот от такого я бы точно сбежал через месяц, не то, что через год.
Я сбежал бы и в том случае, если бы мне было совершенно некого там читать и смотреть. Но помимо моих старых знакомых, которые там обосновались вместо жж, я сумел за год найти и несколько новых интересных мне аккаунтов. Вначале я вообще много всего добавил: и химиков, и про космос, и оперных певцов, и сиэтлских фотографов. Но очень быстро понял, что слишком много времени на инстаграм я тоже не хочу тратить. 10 минут утром, 10 минут вечером – ок, но сидеть там часами, разглядывая в сотый раз гору Рейнир на закате, надоедает. Поэтому ротация людей, на кого я там подписан, была весьма активная. Сейчас я своей лентой более-менее доволен и специально не ищу, кого бы еще добавить.
Как я уже упомянул, темой моих собственных постов стал Сиэтл. У меня за 3,5 года жизни здесь накопились тысячи фотографий, которые я делал во время прогулок или вообще из окна квартиры. Что-то я показывал в жж. Например, у меня была целая серия из 4 постов о “знаках”. Но инстаграм подходит идеально для выкладывания таких фотографий “ни о чем”, с минимумом сопроводительного текста. Я не только разобрал свой сиэтлский фотоархив, но и заставил себя почитать, как называется та или иная скульптура, что она значит и кто ее автор. Таким образом ведение инстаграма вдохновило меня на несколько необычных прогулок по городу, например, чтобы сфоткать всех ”блох” вдоль Eastlake Ave.

Тем удивительнее, что самым залайканным постом (91 лайк) стало не изображение из Olympic Sculpture Park, а подборка фото строительных кранов (чего-чего, а этого добра в Сиэтле хватает; один даже упал недавно, с человеческими жертвами). Похоже, что в иг есть фанатские сообщества башенных кранов или крышек люков, и если пост попадает по нужному хештегу в какой-то топ, то они все приходят отметиться. Но я за лайками и фоллоуверами особо не гонюсь. Последних у меня как стало около 150 человек после первых двух месяцев ведения иг, так и остается. Из них примерно половина – люди, кто меня знал и без иг, еще четверть – боты.

Индексацией текстов я в иг недоволен. Это все же закрытая платформа. Если гуглить мои описания фотографий, то находятся ссылки на сторонние сайты, которые копируют инстаграмовский контент, а внутри самого иг поиск возможен только по хештегам. Еще одна причина, почему можно не напрягаться и не писать длинные описания на тему “что хотел сказать скульптор”. Я порой даже думаю, что зря я все это выкладываю на иг: если я хочу принести максимальную пользу, то надо выкладывать фотографии в Wikipedia. Я со своей мыльницей неважный фотограф, но очень многие скульптуры там вообще никак не представлены. Не то, чтобы человечеству так важно было знать, какая железяка стоит перед сиэтлской библиотекой, но от того, что я выложу в иг миллионную фотку Space Needle, никому точно пользы не будет.

Сиэтл – город большой, но не бесконечный, не исключаю, что скоро у меня закончатся идеи, что еще можно на эту тему в иг выкладывать. У меня, конечно, есть много фоток из поездок. Обычные люди именно их стали бы выкладывать в иг, да еще и в реальном времени. Но вот такой я неправильный инстаграмер. Не люблю спонтанность. Сейчас я выкладываю туда три поста в неделю. У меня в папках разложен запас сиэтлских объектов на месяц, а дальше посмотрю. Может, перейду в режим, когда ничего регулярно не выкладывается, только если мы куда-то съездили или рядом с нами установили новую необычную скульптуру.

ЖЖ был и остается для меня главной площадкой. Я не понимаю, как люди публикуют в инстаграме длинные тексты – мне их там даже читать не удобно, не то, что набирать одним пальцем на телефоне. А я все же больше писатель, чем фотограф. Инстаграм я не забросил исключительно потому, что он не конкурирует, не дублирует, а добавляет мой жж: например, о путешествии в СФ я написал в жж, поэтому в иг его не будет; а поездка в Олимпию, столицу штата Вашингтон, будет в инстаграме в виде десятка фотографий (больше в один пост не лезет), и в жж я могу о ней уже не упоминать.

Мне еще помогает, что инстаграм я посматриваю с десктопного компьютера, и в таком случае там совсем нет рекламы, и все посты в ленте располагаются в удобном хронологическом порядке. Я могу смотреть и слушать Stories в отдельном окне параллельно другой работе, как я делаю с ютубом. Иначе у меня не было бы на них времени. В поездках я заходил в инстаграм с телефона – это ж ужас, сколько там рекламы, после каждого третьего поста или истории. Вот от такого я бы точно сбежал через месяц, не то, что через год.
Я сбежал бы и в том случае, если бы мне было совершенно некого там читать и смотреть. Но помимо моих старых знакомых, которые там обосновались вместо жж, я сумел за год найти и несколько новых интересных мне аккаунтов. Вначале я вообще много всего добавил: и химиков, и про космос, и оперных певцов, и сиэтлских фотографов. Но очень быстро понял, что слишком много времени на инстаграм я тоже не хочу тратить. 10 минут утром, 10 минут вечером – ок, но сидеть там часами, разглядывая в сотый раз гору Рейнир на закате, надоедает. Поэтому ротация людей, на кого я там подписан, была весьма активная. Сейчас я своей лентой более-менее доволен и специально не ищу, кого бы еще добавить.
Как я уже упомянул, темой моих собственных постов стал Сиэтл. У меня за 3,5 года жизни здесь накопились тысячи фотографий, которые я делал во время прогулок или вообще из окна квартиры. Что-то я показывал в жж. Например, у меня была целая серия из 4 постов о “знаках”. Но инстаграм подходит идеально для выкладывания таких фотографий “ни о чем”, с минимумом сопроводительного текста. Я не только разобрал свой сиэтлский фотоархив, но и заставил себя почитать, как называется та или иная скульптура, что она значит и кто ее автор. Таким образом ведение инстаграма вдохновило меня на несколько необычных прогулок по городу, например, чтобы сфоткать всех ”блох” вдоль Eastlake Ave.

Тем удивительнее, что самым залайканным постом (91 лайк) стало не изображение из Olympic Sculpture Park, а подборка фото строительных кранов (чего-чего, а этого добра в Сиэтле хватает; один даже упал недавно, с человеческими жертвами). Похоже, что в иг есть фанатские сообщества башенных кранов или крышек люков, и если пост попадает по нужному хештегу в какой-то топ, то они все приходят отметиться. Но я за лайками и фоллоуверами особо не гонюсь. Последних у меня как стало около 150 человек после первых двух месяцев ведения иг, так и остается. Из них примерно половина – люди, кто меня знал и без иг, еще четверть – боты.

Индексацией текстов я в иг недоволен. Это все же закрытая платформа. Если гуглить мои описания фотографий, то находятся ссылки на сторонние сайты, которые копируют инстаграмовский контент, а внутри самого иг поиск возможен только по хештегам. Еще одна причина, почему можно не напрягаться и не писать длинные описания на тему “что хотел сказать скульптор”. Я порой даже думаю, что зря я все это выкладываю на иг: если я хочу принести максимальную пользу, то надо выкладывать фотографии в Wikipedia. Я со своей мыльницей неважный фотограф, но очень многие скульптуры там вообще никак не представлены. Не то, чтобы человечеству так важно было знать, какая железяка стоит перед сиэтлской библиотекой, но от того, что я выложу в иг миллионную фотку Space Needle, никому точно пользы не будет.

Сиэтл – город большой, но не бесконечный, не исключаю, что скоро у меня закончатся идеи, что еще можно на эту тему в иг выкладывать. У меня, конечно, есть много фоток из поездок. Обычные люди именно их стали бы выкладывать в иг, да еще и в реальном времени. Но вот такой я неправильный инстаграмер. Не люблю спонтанность. Сейчас я выкладываю туда три поста в неделю. У меня в папках разложен запас сиэтлских объектов на месяц, а дальше посмотрю. Может, перейду в режим, когда ничего регулярно не выкладывается, только если мы куда-то съездили или рядом с нами установили новую необычную скульптуру.
пятница, 2 августа 2019 г.
Контрольные по ФОХ
Nature/Nurture, курица или яйцо – задумался я на днях о похожей проблеме: это потому, что я много решал задач и хорошо выступал на олимпиадах, я продолжал и в будущем успешно участвовать в подобных интеллектуальных соревнованиях на время; или у меня от природы повернуты мозги в эту сторону, и благодаря этим повернутым мозгам я мог и в олимпиадах побеждать (в отличие от своего брата, у которого мозги повернуты в другую сторону), и потом легко готовиться и сдавать экзамены? Рассмотрим Case Study #1: контрольные по ФОХ.

Осень 2005 года. Я начинаю четвертый курс на химфаке СПбГУ. В конце третьего курса мы распределились по кафедрам, и у нас наконец-то есть более специализированные предметы. “Физическую органическую химию” я беру (да, беру, хотя в СПбГУ у нас не было выбора: что в расписание поставили, то и брали) вместе с другими четверокурсниками “органического куста”, куда входят кафедры органики, собственно ФОХа, моя ХПС (химия природных соединений) и ВМС (высокомолекулярные соединения). Курс ведет доцент кафедры ФОХ Никифоров Владимир Александрович, который потом будет рецензентом моей дипломной работы.
Ему около 40 лет, и он строит курс с “западными” элементами – читает лекции со слайдами PowerPoint (на которых я неизменно засыпаю – вот это тоже что: лень или потребность в бóльшем потоке информации на генетическом уровне?), упоминает современные исследования (из его лекций я узнаю о Soai reaction, уникальность которой до сих будоражит мой ум) и проводит письменные контрольные, которые очень сильно напоминают американские midterm exams. После органики на третьем курсе, которую престарелый лектор читал нам по учебнику 1971 года (советский перевод с американского учебника 60-х), без упоминания палладиевых сочетаний, ФОХ кажется нереально крутым и актуальным предметом (все эти выученные механизмы и уравнения Гаммета позволят мне легко получить ‘A’ по Physical Organic Chemistry классу в Питтсбурге).

Контрольных по ФОХ было четыре (или все же три?), каждая на целую пару. Даже удивительно, как мы успели их написать за один семестр. Надо же еще материал выучить, прежде чем задачки решать. Состояла каждая из 10 задачек на уровне “расставить вещества по степени кислотности и объяснить почему”. Я был уверен, что по каждой контрольной максимум можно было получить 100 баллов, но фотографии показывают, что в третьей явно максимум был 150. Если набирал определенное число баллов по результатам четырех, то получал “отлично” автоматом, без экзамена. Ограничений на число “автоматов” не было: хоть все 30 человек бы получили, и экзамен можно было бы не проводить. Но традиционно “автомат” получали только 4-5 лучших.

Вверху я разместил список результатов после двух контрольных. Вот это уже не по-американски: в США знаешь только свои оценки. Если что-то в Pitt онлайн и выкладывали, то шифровали кодами, имена открыто не писали. Мне казалось, что я сфотографировал все четыре списка, но вот оказывается, что только два – после второй и после третьей:

Вверху – 4 олимпиадника. Про Женю Ларионова я уже упоминал в посте об олимпиадах, с Андреем Борзенко я последний раз виделся в прошлом мае в Ванкувере. На Всероссийскую олимпиаду в Новгороде в 11 классе с нами еще ездил Сергей Мясников, который тут не на самом верху, но он всегда был пофигист и прагматик, после СПбГУ он не поехал в Германии-Канады делать PhD, а пошел сразу работать тестировщиком софта.
Костя Королев – тоже олимпиадник, но на год нас старше. Я как-то никогда не обсуждал с ним его олимпиадное прошлое, но слышал слухи, что выступал он всегда очень непредсказуемо: то решит все и обгонит всех на городе, а потом на России не может решить ни одной задачки. Якобы поэтому он и остался после первого курса универа “на второй год”, зато потом с нами учился на отлично. Но, кстати, даже по его результатам на этих контрольных видно, что он первую написал сильно лучше всех, вторую – весьма средне, третью – снова в лидерах. Ничего, работает сейчас в Питере заместителем генерального директора и вполне по специальности.
Вот существование таких людей для меня – аргумент в пользу того, что успехи в олимпиадах/контрольных все же это частично nature. Саша Манойлов – тоже хороший тому пример. Если он собирался, то решал все не хуже меня, а диплом у него был лучше, чем у нас всех. А если не собирался, то решал или сдавал экзамены сильно хуже своего реального уровня. Но вот тоже успешно устроился в индустрии в Швеции. О том, что олимпиадные результаты или студенческие оценки плохо коррелируют с дальнейшей карьерой, я уже писал. Вот Петя Ледин – мой коллега по ХПС и поездке в Боулинг Грин. По контрольным он далеко не вверху, но это не помешает ему опубликовать статьи в JACS и работать по специальности (в отличие от меня) в соседнем Орегона – с ним и его семьей мы совсем недавно виделись в Сиэтле.
Интересно, кстати, кто из этих 30 человек уехал. Я не про всех знаю и гуглить, как я делал с питтсбургскими одноклассниками не хочу. Знаю, что Костя Трошин и Ксения Бойко в Германии, Аня Алексеева в Италии, Кирилл Хистяев работает в Вay Аrea программистом в Гугле, Ваня Крылов где-то там же географически, но все же ближе к химии. Да и сам Никифоров с 2014 года работает не в СПбГУ, а в Норвегии, изучает методами ФОХ, насколько загадили океан химикатами.

Помню, как собрал он нас “автоматчиков” в конце семестра и спрашивал совета: как преподавать химию, чтобы было интересно и нам, отличникам, и тем, кто плетется в конце списка и с трудом получает “трояк” с пересдачи. На кого он, как лектор, должен ориентироваться? Не было у нас ответа. Но это уже другой вопрос. Пора вернуться к моему подходу к решению задач.
Я с олимпиадных времен научился очень быстро прочитывать условия, схватывать суть и начинать решать, но при этом быть готовым переходить к следующим задачам, если что-то не решается сразу. Помню, как после первой контрольной наша магистрантка с ХПС Оля Антимонова, которая брала этот курс с нами, жаловалась мне, что застряла на третьей задаче, а потом оказалось, что надо было не тормозить, а идти дальше, там под конец были простые задачи, которые она не успела решить. Вот тут кажется, что все же опыт олимпиад, решение сотен задач на время чему-то учит.
Мне, конечно, было бы приятнее рассказывать, что это я так много учился, поэтому так много знаю. А если у меня просто мозги особенные, которые умеют запоминать кучу нужной и ненужной информации, то нет ничего особенно удивительного, что я готовился к экзаменам меньше других, а сдавал лучше. Я мог читать и запоминать, а другие не могли. Где им со мной тягаться в таких искусственных соревнованиях? А система образования благоволит и раздает плюшки и стипендии как раз тем, кто умеет за час решить больше задачек с известными ответами, а не тем, кто умеет месяцами-годами решать научные задачи.

Если у меня будет вдохновение, то я напишу потом пост и о Case Study #2 о решении на время уже задач по программированию, который и вызвал у меня воспоминания об этом Case Study #1. По жизни я могу тормозить над простыми вещами, но в условиях соревнований подключаются какие-то внутренние ресурсы, которые позволяют решать то, что в обычной жизни я бы не решил. Или лучше написать о дебатах кандидатов от демократической партии?
Осень 2005 года. Я начинаю четвертый курс на химфаке СПбГУ. В конце третьего курса мы распределились по кафедрам, и у нас наконец-то есть более специализированные предметы. “Физическую органическую химию” я беру (да, беру, хотя в СПбГУ у нас не было выбора: что в расписание поставили, то и брали) вместе с другими четверокурсниками “органического куста”, куда входят кафедры органики, собственно ФОХа, моя ХПС (химия природных соединений) и ВМС (высокомолекулярные соединения). Курс ведет доцент кафедры ФОХ Никифоров Владимир Александрович, который потом будет рецензентом моей дипломной работы.
Ему около 40 лет, и он строит курс с “западными” элементами – читает лекции со слайдами PowerPoint (на которых я неизменно засыпаю – вот это тоже что: лень или потребность в бóльшем потоке информации на генетическом уровне?), упоминает современные исследования (из его лекций я узнаю о Soai reaction, уникальность которой до сих будоражит мой ум) и проводит письменные контрольные, которые очень сильно напоминают американские midterm exams. После органики на третьем курсе, которую престарелый лектор читал нам по учебнику 1971 года (советский перевод с американского учебника 60-х), без упоминания палладиевых сочетаний, ФОХ кажется нереально крутым и актуальным предметом (все эти выученные механизмы и уравнения Гаммета позволят мне легко получить ‘A’ по Physical Organic Chemistry классу в Питтсбурге).
Контрольных по ФОХ было четыре (или все же три?), каждая на целую пару. Даже удивительно, как мы успели их написать за один семестр. Надо же еще материал выучить, прежде чем задачки решать. Состояла каждая из 10 задачек на уровне “расставить вещества по степени кислотности и объяснить почему”. Я был уверен, что по каждой контрольной максимум можно было получить 100 баллов, но фотографии показывают, что в третьей явно максимум был 150. Если набирал определенное число баллов по результатам четырех, то получал “отлично” автоматом, без экзамена. Ограничений на число “автоматов” не было: хоть все 30 человек бы получили, и экзамен можно было бы не проводить. Но традиционно “автомат” получали только 4-5 лучших.
Вверху я разместил список результатов после двух контрольных. Вот это уже не по-американски: в США знаешь только свои оценки. Если что-то в Pitt онлайн и выкладывали, то шифровали кодами, имена открыто не писали. Мне казалось, что я сфотографировал все четыре списка, но вот оказывается, что только два – после второй и после третьей:
Вверху – 4 олимпиадника. Про Женю Ларионова я уже упоминал в посте об олимпиадах, с Андреем Борзенко я последний раз виделся в прошлом мае в Ванкувере. На Всероссийскую олимпиаду в Новгороде в 11 классе с нами еще ездил Сергей Мясников, который тут не на самом верху, но он всегда был пофигист и прагматик, после СПбГУ он не поехал в Германии-Канады делать PhD, а пошел сразу работать тестировщиком софта.
Костя Королев – тоже олимпиадник, но на год нас старше. Я как-то никогда не обсуждал с ним его олимпиадное прошлое, но слышал слухи, что выступал он всегда очень непредсказуемо: то решит все и обгонит всех на городе, а потом на России не может решить ни одной задачки. Якобы поэтому он и остался после первого курса универа “на второй год”, зато потом с нами учился на отлично. Но, кстати, даже по его результатам на этих контрольных видно, что он первую написал сильно лучше всех, вторую – весьма средне, третью – снова в лидерах. Ничего, работает сейчас в Питере заместителем генерального директора и вполне по специальности.
Вот существование таких людей для меня – аргумент в пользу того, что успехи в олимпиадах/контрольных все же это частично nature. Саша Манойлов – тоже хороший тому пример. Если он собирался, то решал все не хуже меня, а диплом у него был лучше, чем у нас всех. А если не собирался, то решал или сдавал экзамены сильно хуже своего реального уровня. Но вот тоже успешно устроился в индустрии в Швеции. О том, что олимпиадные результаты или студенческие оценки плохо коррелируют с дальнейшей карьерой, я уже писал. Вот Петя Ледин – мой коллега по ХПС и поездке в Боулинг Грин. По контрольным он далеко не вверху, но это не помешает ему опубликовать статьи в JACS и работать по специальности (в отличие от меня) в соседнем Орегона – с ним и его семьей мы совсем недавно виделись в Сиэтле.
Интересно, кстати, кто из этих 30 человек уехал. Я не про всех знаю и гуглить, как я делал с питтсбургскими одноклассниками не хочу. Знаю, что Костя Трошин и Ксения Бойко в Германии, Аня Алексеева в Италии, Кирилл Хистяев работает в Вay Аrea программистом в Гугле, Ваня Крылов где-то там же географически, но все же ближе к химии. Да и сам Никифоров с 2014 года работает не в СПбГУ, а в Норвегии, изучает методами ФОХ, насколько загадили океан химикатами.
Помню, как собрал он нас “автоматчиков” в конце семестра и спрашивал совета: как преподавать химию, чтобы было интересно и нам, отличникам, и тем, кто плетется в конце списка и с трудом получает “трояк” с пересдачи. На кого он, как лектор, должен ориентироваться? Не было у нас ответа. Но это уже другой вопрос. Пора вернуться к моему подходу к решению задач.
Я с олимпиадных времен научился очень быстро прочитывать условия, схватывать суть и начинать решать, но при этом быть готовым переходить к следующим задачам, если что-то не решается сразу. Помню, как после первой контрольной наша магистрантка с ХПС Оля Антимонова, которая брала этот курс с нами, жаловалась мне, что застряла на третьей задаче, а потом оказалось, что надо было не тормозить, а идти дальше, там под конец были простые задачи, которые она не успела решить. Вот тут кажется, что все же опыт олимпиад, решение сотен задач на время чему-то учит.
Мне, конечно, было бы приятнее рассказывать, что это я так много учился, поэтому так много знаю. А если у меня просто мозги особенные, которые умеют запоминать кучу нужной и ненужной информации, то нет ничего особенно удивительного, что я готовился к экзаменам меньше других, а сдавал лучше. Я мог читать и запоминать, а другие не могли. Где им со мной тягаться в таких искусственных соревнованиях? А система образования благоволит и раздает плюшки и стипендии как раз тем, кто умеет за час решить больше задачек с известными ответами, а не тем, кто умеет месяцами-годами решать научные задачи.
Если у меня будет вдохновение, то я напишу потом пост и о Case Study #2 о решении на время уже задач по программированию, который и вызвал у меня воспоминания об этом Case Study #1. По жизни я могу тормозить над простыми вещами, но в условиях соревнований подключаются какие-то внутренние ресурсы, которые позволяют решать то, что в обычной жизни я бы не решил. Или лучше написать о дебатах кандидатов от демократической партии?
четверг, 25 июля 2019 г.
Пирожки, Пирожки…
Пока собирался написать этот пост, пироги подорожали. Есть в Сиэтле такое заведение под названием Piroshky, Piroshky… Мы сегодня ходили по даунтауну и решили туда зайти, купить по пирожку на полдник:

Вообще-то главное их кафе расположено на Public Market, но мне этот рынок всегда казался многолюдным, обшарпанным и переоцененным во всех смыслах. В тамошние пирожки все время стоит длинная очередь туристов:

Поэтому мы быстро прознали, что у них есть другие локации, в частности внутри самого высокого небоскреба Сиэтла Columbia Center. Они там явно рассчитывают в первую очередь на офисных работников, поэтому закрываются уже в 3. А с 2 до 3 у них распродажа – happy hour – любой пирожок стоит $3 (+ налог):

То есть два пирожка мы всегда брали за $6.61. В прошлый раз счет получился больше, но потому что мы взяли их новый вид пирожков (они у них каждый своей формы), который стоил дороже, а оказался просто сосиской в тесте:

А сегодня уже пробили нам пирожки по $4, то есть на $8.81. Они у них стали стоить столько же, сколько во время happy hour в других местах. А я хотел поделиться life hack’ом, где их можно дешевле купить. Но все равно в happy hour брать дешевле, чем за полную цену.

Я вообще человек экономный. Макароны по $13/фунт (1800 руб/кг) меня пугают:

Дешевле было бы, конечно, вообще никакие пирожки не покупать, а печь их самим. Но тут признаю, что у Piroshky, Piroshky… получается вкуснее, чем у нас. Но мы у них только несладкие (savory) покупаем, потому что сладкие – очень похожи на выпечку, которую можно в любом Safeway купить.

На фуд-траке написано, что основано в 1992 году. Не знаю, кто первым стал продавать пирожки в Сиэтле, но это русское слово стало местным брендом, и тут полно подобных заведений: Piroshki on Madison, Piroshki on 3rd:


В эти выходные шли по Seattle Center, а там был какой-то фестиваль еды, и мы видели Kaleenka Piroshky:

Потом прочитал, что они не имеют стационарного магазина, а вот так ездят по разным ярмаркам вокруг Сиэтла.

Вот “калинку” мы пробовать не стали, а так нам классические Piroshky, Piroshky… больше всех понравились. Правда, повышение цен в happy hour и факт, что мы там все интересные пирожки перепробовали, может привезти к тому, что мы переключимся на что-то другое. Вот давно собираемся зайти в “датскую пекарню”. Там явно не будет дешевле, но что-то новенькое. Обычно шесть дней в неделю мы обедаем дома, но иногда надо выбираться и изучать, какая еще еда бывает. Сегодня мы обедали в пакистанском Cafe Zum Zum, и на удивление мне понравился ягненок с карри всего за $11. Дома я такое готовить не рискну.
Вообще-то главное их кафе расположено на Public Market, но мне этот рынок всегда казался многолюдным, обшарпанным и переоцененным во всех смыслах. В тамошние пирожки все время стоит длинная очередь туристов:
Поэтому мы быстро прознали, что у них есть другие локации, в частности внутри самого высокого небоскреба Сиэтла Columbia Center. Они там явно рассчитывают в первую очередь на офисных работников, поэтому закрываются уже в 3. А с 2 до 3 у них распродажа – happy hour – любой пирожок стоит $3 (+ налог):
То есть два пирожка мы всегда брали за $6.61. В прошлый раз счет получился больше, но потому что мы взяли их новый вид пирожков (они у них каждый своей формы), который стоил дороже, а оказался просто сосиской в тесте:
А сегодня уже пробили нам пирожки по $4, то есть на $8.81. Они у них стали стоить столько же, сколько во время happy hour в других местах. А я хотел поделиться life hack’ом, где их можно дешевле купить. Но все равно в happy hour брать дешевле, чем за полную цену.
Я вообще человек экономный. Макароны по $13/фунт (1800 руб/кг) меня пугают:
Дешевле было бы, конечно, вообще никакие пирожки не покупать, а печь их самим. Но тут признаю, что у Piroshky, Piroshky… получается вкуснее, чем у нас. Но мы у них только несладкие (savory) покупаем, потому что сладкие – очень похожи на выпечку, которую можно в любом Safeway купить.
На фуд-траке написано, что основано в 1992 году. Не знаю, кто первым стал продавать пирожки в Сиэтле, но это русское слово стало местным брендом, и тут полно подобных заведений: Piroshki on Madison, Piroshki on 3rd:
В эти выходные шли по Seattle Center, а там был какой-то фестиваль еды, и мы видели Kaleenka Piroshky:
Потом прочитал, что они не имеют стационарного магазина, а вот так ездят по разным ярмаркам вокруг Сиэтла.
Вот “калинку” мы пробовать не стали, а так нам классические Piroshky, Piroshky… больше всех понравились. Правда, повышение цен в happy hour и факт, что мы там все интересные пирожки перепробовали, может привезти к тому, что мы переключимся на что-то другое. Вот давно собираемся зайти в “датскую пекарню”. Там явно не будет дешевле, но что-то новенькое. Обычно шесть дней в неделю мы обедаем дома, но иногда надо выбираться и изучать, какая еще еда бывает. Сегодня мы обедали в пакистанском Cafe Zum Zum, и на удивление мне понравился ягненок с карри всего за $11. Дома я такое готовить не рискну.
четверг, 11 июля 2019 г.
Можно ли заранее выявить плохие фильмы по рейтингу
Две вещи – бесплатный просмотр фильмов на IMDb TV (только в США, с амазоновской рекламой) и лекции на ютубе о космосе – сподвигли меня активнее, чем обычно, смотреть кино в последнее время. И встала передо мной задача – заранее отсеивать скучные (для меня) фильмы, чтобы не терять на них время. В частности мне понравился фильм “Гравитация”, но не понравился фильм “Интерстеллар”. А оценка “Интерстеллара” на IMDb 8.6 – прямо шедевр из шедевров. Поэтому вчера я составил вот такую таблицу:

Это фильмы на английском, которые я посмотрел с прошлого лета. Фильмы на русском я включать не стал, таблица и без того запутанная, и на англоязычных сайтах у них обычно мало критических отзывов. Красным я отметил фильмы, которые мне не понравились, лучше бы я их не смотрел. Синим – фильмы, которые мне понравились. Остальные – такие середняки, посмотрел и ладно, если бы не посмотрел, много не потерял.
То есть для меня важнее отловить красные фильмы, чем синие. Оценки в колонках: 1) пользователи сайта IMDb, 2) оценка критиков / аудитории на Rotten Tomatoes; 3) еще один сайт критиков; 4) мнение русских зрителей.
И я поразился, насколько мои впечатления расходятся с простыми зрителями, но совпадают с критиками. Если взять Rotten Tomatoes и смотреть фильмы с оценкой ≥90%, то аудитория даст мне 1 false positive (“Se7en” – мог бы вспомнить, что не люблю полицейские фильмы, но купился на высокий рейтинг от IMDb, когда они выложили его бесплатно на своем сайте) и 4 false negatives (понравившиеся мне фильмы, которые набирают меньше 90%). А вот у критиков не будет false positives и будет всего 1 false negative (“Скрипач на крыше” – тут я на стороне аудитории).
Metacritic очень похож на оценку критиков на Rotten Tomatoes (подозреваю, что они одних и тех же людей считают), но дает второй false negative на “Apollo 13”. Корреляции между моими впечатлениями и народными оценками на IMDb и Kinopoisk я не увидел, и для меня это самый важный вывод, не буду больше на них обращать внимание. Ужасно далек я от народа.
Выборка, конечно, маленькая, но какая есть. Гипотеза будет проверена экспериментально в будущем. IMDb TV каждый месяц обновляют подборку фильмов. Когда в следующий раз захочу что-нибудь посмотреть, буду искать фильм с оценкой критиков выше 90%. Хотя “Интерстеллар” я бы так и так посмотрел: слишком часто его в лекциях о черных дырах поминают. И потому смотрел я его просто на Amazon, за деньги ($2.99 + налог).

Это фильмы на английском, которые я посмотрел с прошлого лета. Фильмы на русском я включать не стал, таблица и без того запутанная, и на англоязычных сайтах у них обычно мало критических отзывов. Красным я отметил фильмы, которые мне не понравились, лучше бы я их не смотрел. Синим – фильмы, которые мне понравились. Остальные – такие середняки, посмотрел и ладно, если бы не посмотрел, много не потерял.
То есть для меня важнее отловить красные фильмы, чем синие. Оценки в колонках: 1) пользователи сайта IMDb, 2) оценка критиков / аудитории на Rotten Tomatoes; 3) еще один сайт критиков; 4) мнение русских зрителей.
И я поразился, насколько мои впечатления расходятся с простыми зрителями, но совпадают с критиками. Если взять Rotten Tomatoes и смотреть фильмы с оценкой ≥90%, то аудитория даст мне 1 false positive (“Se7en” – мог бы вспомнить, что не люблю полицейские фильмы, но купился на высокий рейтинг от IMDb, когда они выложили его бесплатно на своем сайте) и 4 false negatives (понравившиеся мне фильмы, которые набирают меньше 90%). А вот у критиков не будет false positives и будет всего 1 false negative (“Скрипач на крыше” – тут я на стороне аудитории).
Metacritic очень похож на оценку критиков на Rotten Tomatoes (подозреваю, что они одних и тех же людей считают), но дает второй false negative на “Apollo 13”. Корреляции между моими впечатлениями и народными оценками на IMDb и Kinopoisk я не увидел, и для меня это самый важный вывод, не буду больше на них обращать внимание. Ужасно далек я от народа.
Выборка, конечно, маленькая, но какая есть. Гипотеза будет проверена экспериментально в будущем. IMDb TV каждый месяц обновляют подборку фильмов. Когда в следующий раз захочу что-нибудь посмотреть, буду искать фильм с оценкой критиков выше 90%. Хотя “Интерстеллар” я бы так и так посмотрел: слишком часто его в лекциях о черных дырах поминают. И потому смотрел я его просто на Amazon, за деньги ($2.99 + налог).
Подписаться на:
Сообщения (Atom)