# Понедельник 57 твитов
Всем привет! На этой неделе с вами @alexkorotkikh из пасмурного Гамбурга. Я работаю в компании @Kreditech на позиции VP Engineering
15:57Я бы хотел поговорить про: работу зарубежом; о финтеке вообще и что это значит для разработчиков в частности;
15:58о том, как отличается работа в компании из 5 человек, 50 и 350, даже если это одна и та же комания :)
15:59Из технических тем интересно обсудить где место RDBMS в мире, захваченом NoSQL, и нужны ли ORM'ы
15:59Напишите, плиз, на какие ещё темы хочеться поговорить вам, а я пока на митинг убежал :)
16:00.@backendsecret > в мире, захваченом NoSQL
db-engines.com/en/ranking pic.twitter.com/dxsyyJMKh9
Ура, первый наброс прошёл! :) twitter.com/redmoonstudio/…
17:19@backendsecret Scala Junior у вас там есть? Нанимаете людей с другим бэкграундом в надежде что они станут скалистыми?
Джуны есть только как working student на данный момент. Нанимаем с Java опытом, а ещё лучше с Java + какой-то FP, х… twitter.com/i/web/status/8…
17:22@backendsecret про митинги и рассказывай. Как с ними боретесь, как минимизируете число людей на них, о чём топите, вот это всё. :)
Хорошо, добавил к списку тем, поговорим и про митинги twitter.com/strizhechenko/…
17:23Раз уж тема БД так всем понравилась, давайте начнём с неё. Кстати, а какую БД используете вы на текущем проекте, и сколько там данных?
18:03Конечно, такой опрос очень условный, и не содержит самый важный критерий - паттерн использования. Но какое-то впечатление можем получить
18:05На тему выбора БД в зависимости от проекта мне нравится статья medium.baqend.com/nosql-database… и короткий алгоритм из неё cdn-images-1.medium.com/max/2000/1*qP4…
18:07У нас в качестве основной БД используется PostgreSQL, и за 5 лет работы с ним я влюбляюсь всё больше и больше.
18:10Отдельно приятно, что разработка идёт очень активно, мажорные релизы примерно раз в год (имхо 9.5 > 9.6 в случае постгреса - мажорный релиз)
18:12@backendsecret абстрактный вопрос. рефакторинг чужого свежего кода. как это преподнести чтобы не обидеть человека?
Сразу возникает вопрос, почему это должно кого-то обидеть :) по сути, это же частный случай code review. Возможно,… twitter.com/i/web/status/8…
18:42практики code review, и весь код by default считается хорошим. Не уверен, что это хорошая практика, но возможно некоторым командам так проще
18:43В данном случае я бы сел вмечте с автором кода и тем, кто будет рефакторить, и постарался конструктивно обсудить спорные места.
18:44Кстати, в данном случае ревью - это частный случай performance feedback, который тоже желательно чтобы был регулярный, и тогда =>
18:45такой проблемы - обиды - быть не должно. Отличной практикой при подаче фидбека есть "правило бургера" - фидбек начинается И заканчивается =>
18:46в положительном ключе, а критика идёт по середине (конструктивная конечно). Мол, ты очень круто запилил фичу в последнем спринте, молодец =>
18:47только мне кажется что вот тут и тут можно зарефакторить, чтобы перформанс улучшить и читабельность. А вообще круто что ты такую фичу =>
18:48сдал в срок, заказчик очень доволен.
18:49@backendsecret команда вся удалённая в разных часовых поясах, код ревью нет. часто нет возможности поймать автора онлайн
Так чуть сложнее, но асинронную комуникацию никто не отменял :) У нас ревью идёт коментами к пул реквестам, мёрдж п… twitter.com/i/web/status/8…
18:50Возвращаясь к постгресу - например, в 9.6 запилили parallel seq scan postgresql.org/docs/9.6/stati… Мы конечно сек сканы не любим, и про индексы =>
18:54не забываем, правда? :) но в некоторых случаях может выручить, по крайней мере временная просадка будет не так болезненна
18:54Чуть не забыл - хорошая стать про культуру code review hypothes.is/blog/code-revi…
18:55@backendsecret тогда след.вопрос: как донести до команды ценность кодревью и внедрить его, учитывая что ранее (до меня) это не прижилось?
Я бы попробавл lead by example: "Ребята, я запилил фичу Х, вот пул реквест, вы не могли бы глянуть, мне кажется мож… twitter.com/i/web/status/8…
19:03При удаче, через пару таких просьб начинание подхватит ещё пару человек, и так оно может разойтись по команде "само".
19:04Плюс, можно самому ревьювить чужие коммиты и мягко предлагать улучшения. Тут как с любым фидбеком - позитивно и конструктивно
19:05@backendsecret вот здесь подробней и с важными уточнениями: infoq.com/presentations/…19:06
@backendsecret пробовал. никто не хочет смотреть :) может потому что большой pr, с мелкими изменениями возможно легче?
Ревью большого куска кода - сущее мучение, да. Чем атомарнее изменение, тем больше полезных комментариев, как прави… twitter.com/i/web/status/8…
19:10Если кода много, то большинство, в лучшем случае, просмотрит "по диагонале" и укажет на опечатки и ошибки стиля. А для этого есть линтер :)
19:11Но вернёмся к БД. Упоминание ORM вызвало какой-то нездоровый ажиотаж. Так они нужны или нет?
19:16Лично мне ОРМ кажется "дырявой абстракцией". Нам как бы говорят "с реляционными данными можно работакть так же как с объектами", и =>
19:18показывают какой-то простой пример, где действительно всё просто. ПО итогу складывается впечатление что знать SQL и как работают БД =>
19:18вроде и необязательно. А потом приходят первые сто пользователей, генерят первую 1000 записей, и те запросы, которые генерит ОРМ, кладут БД
19:20По итогу работая с ОРМ нужно понимать и как работает база, и как работает этот конкретный ОРМ. Так зачем тогда нам лишняя абстракция?
19:20Мы у себя по итогу остановились на ScalikeJDBC (scalikejdbc.org). Максимально простой DSL, который поверх SQL добавляет =>
19:21только минимальную проверку типов, чтобы в маппинге глупые ошибки не допускать.
19:22@backendsecret линтера тоже нет :) его, мне кажется, можно внедрять только после кодревью
В существующую кодовую базу вообще линтер внедрять не пртосто, скорее всего он в каждом файле найдёт 100500 ошибок,… twitter.com/i/web/status/8…
19:23на месяцы, чтобы их исправить. Проще всего, конечно, в новый проект.
19:24@backendsecret для простой разработки/поддержки
Мне кажется, лишний слой абстракции только усложняет и разработку, и поддержку twitter.com/drcreazy/statu…
19:24Особенно радуют аргументы ярых сторонников "но можно легко поменять БД, и не придётся ничего переписывать" twitter.com/backendsecret/…
Вот кстати да. На практике смена базы - неординарное явление, и если оно таки случается, врядли ОРМ вас спасёт, т.к… twitter.com/i/web/status/8…
20:15@redmoonstudio @backendsecret Тащемта, везде, где нужны сводные отчеты.
Кстати, про отчёты и прочий BI. Как у вас в компании это организовано? У нас сейчас отдельная тула для BI -… twitter.com/i/web/status/8…
20:22Данные тудакопируются из PostgreSQL и некоторых другиз источников, и уже BI-engineers составляют нужные вьюхи и репорты
20:23Поскольку репорты, как правило, не требуют реального времени, то такой подход не нагружает лишний раз базу и не отвлекает остальных разрабов
20:24@backendsecret clickhouse не пробовали?
Пока нет. Есть попробовавшие? Расскажите, как и зачем? twitter.com/salikhov/statu…
20:42@backendsecret а потом начинаются проблемы, что где-то поле переименовали, а в скриптах забыли, узнали только в рантацме, и время потеряно
Ну так ведь в любом случае в двух местах менять (минимум) - в БД (миграция) и в dao-слое. И тестирование изменений… twitter.com/i/web/status/8…
21:22Мне, не кстати, именно поэтому и нравится скалайк - маппинг описан один раз, его использование проверяется на этапе компиляции
21:24Там, конечно, мастер ия со скала-макросами, и IDE могут сходить с ума, но всё лучше, чем в рантайме
21:25Мастер ия = магия :) #долбанаяавтозамена
21:25@backendsecret а чем вы мониторите свою базу? У вас PG же?
У нас new relic. Дороговато, но довольно мощно. А вы? :) twitter.com/tru_pablo/stat…
21:29@backendsecret но есть же понятные случаи когда сексканы лучше, да и планировщик разберётся наверное?
По моему опыту, это в основном на очень небольших таблицах, и если они целиком в кеде лежат. twitter.com/tru_pablo/stat…
21:30@backendsecret все это было уже в Criteria API и в мильон других квери билдерах - я не думаю что в 2017 это какое откровение
Согласен в целом, но criteria API гораздо многословнее, на джаве DSL вроде скалайка сделать практически невозможно… twitter.com/i/web/status/8…
21:35@backendsecret @dcromster я больше про стартапы писал, но это хорошо, если наберется, только тогда наличие ORM как раз может выйти боком.
Стартап - понятие не однозначное. Мы уже 5 лет в бизнесе, с точки зрения нас же 4 года назад - интерпрайз, с тз люб… twitter.com/i/web/status/8…
21:50Кстати, не могу не воспользоваться положением - we’re hiring! #scala/#java, #nodejs, #devops. Релокейт в Германию :) kreditech.com/careers
21:55@backendsecret мы пробовали. Ну как пробовали. Мы его создали :)
Я ждал подобный комент :) расскажете подробнее? Какую задачу решали у себя и зачем оно может быть нужно другим? twitter.com/suicidecoding/…
22:05@backendsecret Яндекс.Метрика решает задачу аналитики по сайтам и приложениям. В твите не опишешь. Наша статья: m.habrahabr.ru/company/yandex…22:18
# Вторник 27 твитов
Всем доброе утро! Вопрос к аудитории - интересно ли поговорить про работу в Германии, или все и так уже подписаны на @abroadunderhood ?
14:11@backendsecret ок, а если в требованиях поддержка одновременно двух типов баз, ну например sqlite & postgresql?
Опять же вопрос, с чем связано такое требование. Поддерживать специфические для СУБД запросы будет геморойно что с… twitter.com/i/web/status/8…
14:14@backendsecret для DSL есть groovy
Вопрос предпочтений. При прочих равных, я выберу тот язык, где компилятор за меня найдёт больше ошибок. twitter.com/theaspect/stat…
14:16Пол года назад я про работу уже рассказывал в @abroadunderhood, вот тут архив abroadunderhood.ru/alexkorotkikh/…
14:21Итак, про работу. Сразу скажу, что я могу судить только про нашу компанию и подобные, т.е. стартапы разной степени зрелости
18:49В целом, не могу сказать, что рабочий процесс принципиально отличается. Конечно, если мы говорим про продуктовые компании, а не аутсорс
18:50С другой стороны, аутсорс от продукта отличается вне зависимости от страны, кмк :)
18:51Главное отличие - здесь очень многие ИТ компании сильно интернациональные. У нас на 200 человек в немецком офисе - около 40 национальностей
18:52Причём немцев дай бог чтоб четверть. Инжиниринг на 70% русскоязычный, но тут своя причина - первый офис разработки был в Украине
18:53И многие (я в том числе) переехали из того самого офиса. Он кстати до сих пор работает, разработчиков примерно пополам здесь и в Украине
18:54Ещё здесь очень ценится оценка на сайтах отзывов о работодателе, вроде kununu. И, как обычно, уронить её гораздо прое чем поднять.
18:56Это потом сказывается на скоросте/простоте найма.
18:56Учитывая немецкую программу для high-skilled migrants (blue card), компаниям не так дорого/геморно релокейтить откуда угодно, даже не из ЕС
18:58Поэтому почти все более-менее вставшие на ноги стартапы уже открыты к relocation support, про крупные я вообще молчу, для них это копейки
18:59@backendsecret потолок ЗП непробиваемый на уровне ~65К или это только для гастарбайтеров?
Не знаю, откуда взялось это предубеждение. Я знаю много "гастарбайтеров" с зарплатой выше и сильно выше. 65К - это… twitter.com/i/web/status/8…
19:47а на национальность, учитывая количество мигрантов, тут не смотрят. По крайней мере, ни я, ни мои знакомые не сталкивались
19:47@backendsecret это то, что предлагают рекрутеры. А какие тода выше средней возможные и высокие возможные существуют?
Буквально на прошлой неделе присиылали вакансию Scala Team Lead - up to 110k. Знакомый Senior Java в Берлине - 80k twitter.com/sfilatov/statu…
20:35Ещё несколько офферов в Берлине знаю на 80-100к. Это Senior Engineer позиции в достаточно успешных стартапах (либо profitable, =>
20:36либо хорошо проинвестированные, со стабильными показателями роста)
20:37Тут ещё надо понимать разницу в ценах на всё между бывш. ГДР и ФРГ. Берлин заметно дешевле, чем Гамбург, з/п соответственно
20:38@backendsecret а сколько налогов надо заплатить с 65К в Германии?
Нет простого ответа, от 18 до 40+ процентов. В эбродике описывал подробнее abroadunderhood.ru/alexkorotkikh/… twitter.com/alakhverdyants…
20:41Зачем НЕ надо ехать работать в Европу? За деньгами. Тут социализм, по сути, имхо за деньгами - это в штаты (хотя и не уверен)
21:24Зачем надо? Я ехал в первую очередь за новым жизненным опытом. В добавок получил хорошую медицину, чувство безопасности и ->
21:25Удивительное ощущение от понимания, на что идут твои налоги :)
21:26@backendsecret а встречается ли удаленка в компаниях серьезных? Из ЕС или не из ЕС.
Никогда не интересовался. Много компаний обещают гибкий home office, но это не то, конечно twitter.com/sfilatov/statu…
22:08@netcreeper @backendsecret по сути в России же тоже около 40% налоги и страховки. Только все это не так прозрачно
На западе про з/п обсуждают “в год до налогов”, в постсовке - “в месяц после налогов”. Привычка и формирует образ м… twitter.com/i/web/status/8…
22:19@backendsecret в Швейцарию: высокие ЗП и низкие налоги. Если детей нет, то денег много оставаться будет.23:35
# Среда 3 твита
@backendsecret @abroadunderhood интересно, расскажите про языки, обязательно ли знание немецкого?
В стартапах, как правило, нет, именно потому что много экспатов. В энтерпрайзах вроде банков и страховых, как прави… twitter.com/i/web/status/8…
15:10@backendsecret вот кстати интересно почему люди страдают а не заворачивают все специфичное в процедуры/вьюхи. Вжух и ОРМ опять в деле
В принципе, можно и так. Главное не забывать все пускать через миграции, чтобы версионирование было. Хотя я не любл… twitter.com/i/web/status/8…
15:13Не везёт мне с коллективными твиттерами. Вёл эброад - отправили в командировку, веду бэкенд - а у нас реорганизация отдела. Завал :(
21:03# Четверг 17 твитов
И снова здравствуйте. Вроде есть немного времени, давайте расскажу немного про работу в финтехе
14:21Основная проблема продуктовой разработки, когда дело касается финансов - каждый чих строго регулируется государством.
14:22Учитывая, что мы сейчас оперируем на 5 разных рынках - у нас 5 разных регуляторов + немецкое data privacy agency, т.к. компания-то немецкая
14:23В итоге один и тот же вроде бы продукт в разных странах выглядит порой очень по разному
14:24Ты, значит, пытаешься упростить регистрацию, задавать клиенту как можно меньше вопросов, борешься за каждый процент конверсии...
14:25А потом приходит госрегулятор и говорит "а почему вы не спрашиваете у своих клиентов есть ли у них или членов их семьи страховка имущества?"
14:26а ещё ипотека, кредитные карты, другие займы и пр. Банки это спрашивают, чтобы оценить риски. Мы риски оцениваем с помощью ML, и практика =>
14:27показывает, что подобная информация на качество модели влияет чуть менее чем никак. Только конверсию убивает
14:27Отдельный геморой с data privacy, В отличии от многих других бизнесов, нам недостаточно минимальной информации о клиенте вроде мейла и имени
14:28И для наших нужд, и для соблюдения законов приходится собирать много sensitive data - номер счёта, паспорта, ssn, сканы доков
14:30Соответственно, всякие DPA нас очень не любят и регулярно приходят посмотреть, не нарушаем ли мы чего. Кто-то в запаре забыл удалить =>
14:31логгирование номера счёта и это нашли - привет, вот штраф. Круче всего станет в EU с 2018го - новые правил (GDPR) по которым штраф может =>
14:32достигать 4% годового ревенью (даже не профита!). Для небольших фирм это может стать смертью.
14:33Отдельная тема - анонимизация. Если пользователь взял кредит - его данные обязаны храниться не менее 10 лет (опять же зависит от страны)
14:34А вот если мы ему отказали, или он передумал (напр. условия не устроили) то его данные надо физически удалить. насовсем.
14:35Что-что? у вас immutable data? CQRS? No update/delete policy? Расскажите об этом регуляторам, только сначала штраф заплатите.
14:35@backendsecret боюсь показаться странным, но я рад, что гос-во оставляет место человечности и социализму, иначе бы ML на scala поработил мир
С общечеловеческой позиции, я, пожалуй, соглашусь. Я говорил скорее к тому, что в этой области есть неочевидные сло… twitter.com/i/web/status/8…
15:57# Пятница 1 твит
@backendsecret расскажите еще про рынок труда на Scala. Стоит ли её сейчас изучать или рынок сжимается?
Имхо, строго наоборот. Вижу все больше вкусных вакансий в интересных компаниях. Хотя на Go рост, пожалуй, больше по… twitter.com/i/web/status/8…
14:37# Суббота 1 твит
@backendsecret представляю как ошеломит регулятора технология event sourcing.
Регулятору как раз пофиг. Dura led sed lex. Страдает разработчик twitter.com/max_vasin/stat…
0:09# Воскресенье 4 твита
Неделя вне твиттера выдалась насыщенная, писать практически не успевал, за что прл у прощения. У меня ещё есть несколько часов =>
18:54Рад буду ответить на вопросы, если есть. Финтех, Германия, scala, нужность orm’ов ;) спрашивайте!
18:56Ребята, мне пора прощаться. Надеюсь, кому-то понравилось и было полезно. Рад пообщаться на любые темы - @alexkorotkikh
23:03Не могу не напомнить - @Kreditech is hiring :) если вам интересен финтех + релокейт в Европу - буду рад помочь!
23:04# Ссылки
other
- https://medium.baqend.com/nosql-databases-a-survey-and-decision-guidance-ea7823a822d#.h5s18mxo5
- https://cdn-images-1.medium.com/max/2000/1*qP4HSIx95ZBVla7tjluhLg.png
- https://www.postgresql.org/docs/9.6/static/how-parallel-query-works.html
- https://hypothes.is/blog/code-review-in-remote-teams/
- https://www.infoq.com/presentations/feedback-models-techniques
- http://scalikejdbc.org/
- http://kreditech.com/careers
- http://www.exasol.com/en/product/details/
- http://abroadunderhood.ru/alexkorotkikh/#2016-07-13