alexkorotkikh

6 февраля 2017, Hamburg, Germany

# Понедельник 57 твитов

Всем привет! На этой неделе с вами @alexkorotkikh из пасмурного Гамбурга. Я работаю в компании @Kreditech на позиции VP Engineering

12:57

Я бы хотел поговорить про: работу зарубежом; о финтеке вообще и что это значит для разработчиков в частности;

12:58

о том, как отличается работа в компании из 5 человек, 50 и 350, даже если это одна и та же комания :)

12:59

Из технических тем интересно обсудить где место RDBMS в мире, захваченом NoSQL, и нужны ли ORM'ы

12:59

Напишите, плиз, на какие ещё темы хочеться поговорить вам, а я пока на митинг убежал :)

13:00
.@backendsecret > в мире, захваченом NoSQL
db-engines.com/en/ranking pic.twitter.com/dxsyyJMKh9

Ура, первый наброс прошёл! :) twitter.com/redmoonstudio/…

14:19
@backendsecret Scala Junior у вас там есть? Нанимаете людей с другим бэкграундом в надежде что они станут скалистыми?

Джуны есть только как working student на данный момент. Нанимаем с Java опытом, а ещё лучше с Java + какой-то FP, х… twitter.com/i/web/status/8…

14:22
@backendsecret про митинги и рассказывай. Как с ними боретесь, как минимизируете число людей на них, о чём топите, вот это всё. :)

Хорошо, добавил к списку тем, поговорим и про митинги twitter.com/strizhechenko/…

14:23

Раз уж тема БД так всем понравилась, давайте начнём с неё. Кстати, а какую БД используете вы на текущем проекте, и сколько там данных?

15:03

Конечно, такой опрос очень условный, и не содержит самый важный критерий - паттерн использования. Но какое-то впечатление можем получить

15:05

На тему выбора БД в зависимости от проекта мне нравится статья medium.baqend.com/nosql-database… и короткий алгоритм из неё cdn-images-1.medium.com/max/2000/1*qP4…

15:07

У нас в качестве основной БД используется PostgreSQL, и за 5 лет работы с ним я влюбляюсь всё больше и больше.

15:10

Отдельно приятно, что разработка идёт очень активно, мажорные релизы примерно раз в год (имхо 9.5 > 9.6 в случае постгреса - мажорный релиз)

15:12
@backendsecret абстрактный вопрос. рефакторинг чужого свежего кода. как это преподнести чтобы не обидеть человека?

Сразу возникает вопрос, почему это должно кого-то обидеть :) по сути, это же частный случай code review. Возможно,… twitter.com/i/web/status/8…

15:42

практики code review, и весь код by default считается хорошим. Не уверен, что это хорошая практика, но возможно некоторым командам так проще

15:43

В данном случае я бы сел вмечте с автором кода и тем, кто будет рефакторить, и постарался конструктивно обсудить спорные места.

15:44

Кстати, в данном случае ревью - это частный случай performance feedback, который тоже желательно чтобы был регулярный, и тогда =>

15:45

такой проблемы - обиды - быть не должно. Отличной практикой при подаче фидбека есть "правило бургера" - фидбек начинается И заканчивается =>

15:46

в положительном ключе, а критика идёт по середине (конструктивная конечно). Мол, ты очень круто запилил фичу в последнем спринте, молодец =>

15:47

только мне кажется что вот тут и тут можно зарефакторить, чтобы перформанс улучшить и читабельность. А вообще круто что ты такую фичу =>

15:48

сдал в срок, заказчик очень доволен.

15:49
@backendsecret команда вся удалённая в разных часовых поясах, код ревью нет. часто нет возможности поймать автора онлайн

Так чуть сложнее, но асинронную комуникацию никто не отменял :) У нас ревью идёт коментами к пул реквестам, мёрдж п… twitter.com/i/web/status/8…

15:50

Возвращаясь к постгресу - например, в 9.6 запилили parallel seq scan postgresql.org/docs/9.6/stati… Мы конечно сек сканы не любим, и про индексы =>

15:54

не забываем, правда? :) но в некоторых случаях может выручить, по крайней мере временная просадка будет не так болезненна

15:54

Чуть не забыл - хорошая стать про культуру code review hypothes.is/blog/code-revi…

15:55
@backendsecret тогда след.вопрос: как донести до команды ценность кодревью и внедрить его, учитывая что ранее (до меня) это не прижилось?

Я бы попробавл lead by example: "Ребята, я запилил фичу Х, вот пул реквест, вы не могли бы глянуть, мне кажется мож… twitter.com/i/web/status/8…

16:03

При удаче, через пару таких просьб начинание подхватит ещё пару человек, и так оно может разойтись по команде "само".

16:04

Плюс, можно самому ревьювить чужие коммиты и мягко предлагать улучшения. Тут как с любым фидбеком - позитивно и конструктивно

16:05
@backendsecret вот здесь подробней и с важными уточнениями: infoq.com/presentations/…
16:06
@backendsecret пробовал. никто не хочет смотреть :) может потому что большой pr, с мелкими изменениями возможно легче?

Ревью большого куска кода - сущее мучение, да. Чем атомарнее изменение, тем больше полезных комментариев, как прави… twitter.com/i/web/status/8…

16:10

Если кода много, то большинство, в лучшем случае, просмотрит "по диагонале" и укажет на опечатки и ошибки стиля. А для этого есть линтер :)

16:11

Но вернёмся к БД. Упоминание ORM вызвало какой-то нездоровый ажиотаж. Так они нужны или нет?

16:16

Лично мне ОРМ кажется "дырявой абстракцией". Нам как бы говорят "с реляционными данными можно работакть так же как с объектами", и =>

16:18

показывают какой-то простой пример, где действительно всё просто. ПО итогу складывается впечатление что знать SQL и как работают БД =>

16:18

вроде и необязательно. А потом приходят первые сто пользователей, генерят первую 1000 записей, и те запросы, которые генерит ОРМ, кладут БД

16:20

По итогу работая с ОРМ нужно понимать и как работает база, и как работает этот конкретный ОРМ. Так зачем тогда нам лишняя абстракция?

16:20

Мы у себя по итогу остановились на ScalikeJDBC (scalikejdbc.org). Максимально простой DSL, который поверх SQL добавляет =>

16:21

только минимальную проверку типов, чтобы в маппинге глупые ошибки не допускать.

16:22
@backendsecret линтера тоже нет :) его, мне кажется, можно внедрять только после кодревью

В существующую кодовую базу вообще линтер внедрять не пртосто, скорее всего он в каждом файле найдёт 100500 ошибок,… twitter.com/i/web/status/8…

16:23

на месяцы, чтобы их исправить. Проще всего, конечно, в новый проект.

16:24
@backendsecret для простой разработки/поддержки

Мне кажется, лишний слой абстракции только усложняет и разработку, и поддержку twitter.com/drcreazy/statu…

16:24
Особенно радуют аргументы ярых сторонников "но можно легко поменять БД, и не придётся ничего переписывать" twitter.com/backendsecret/…

Вот кстати да. На практике смена базы - неординарное явление, и если оно таки случается, врядли ОРМ вас спасёт, т.к… twitter.com/i/web/status/8…

17:15
@redmoonstudio @backendsecret Тащемта, везде, где нужны сводные отчеты.

Кстати, про отчёты и прочий BI. Как у вас в компании это организовано? У нас сейчас отдельная тула для BI -… twitter.com/i/web/status/8…

17:22

Данные тудакопируются из PostgreSQL и некоторых другиз источников, и уже BI-engineers составляют нужные вьюхи и репорты

17:23

Поскольку репорты, как правило, не требуют реального времени, то такой подход не нагружает лишний раз базу и не отвлекает остальных разрабов

17:24
@backendsecret clickhouse не пробовали?

Пока нет. Есть попробовавшие? Расскажите, как и зачем? twitter.com/salikhov/statu…

17:42
@backendsecret а потом начинаются проблемы, что где-то поле переименовали, а в скриптах забыли, узнали только в рантацме, и время потеряно

Ну так ведь в любом случае в двух местах менять (минимум) - в БД (миграция) и в dao-слое. И тестирование изменений… twitter.com/i/web/status/8…

18:22

Мне, не кстати, именно поэтому и нравится скалайк - маппинг описан один раз, его использование проверяется на этапе компиляции

18:24

Там, конечно, мастер ия со скала-макросами, и IDE могут сходить с ума, но всё лучше, чем в рантайме

18:25

Мастер ия = магия :) #долбанаяавтозамена

18:25
@backendsecret а чем вы мониторите свою базу? У вас PG же?

У нас new relic. Дороговато, но довольно мощно. А вы? :) twitter.com/tru_pablo/stat…

18:29
@backendsecret но есть же понятные случаи когда сексканы лучше, да и планировщик разберётся наверное?

По моему опыту, это в основном на очень небольших таблицах, и если они целиком в кеде лежат. twitter.com/tru_pablo/stat…

18:30
@backendsecret все это было уже в Criteria API и в мильон других квери билдерах - я не думаю что в 2017 это какое откровение

Согласен в целом, но criteria API гораздо многословнее, на джаве DSL вроде скалайка сделать практически невозможно… twitter.com/i/web/status/8…

18:35
@backendsecret @dcromster я больше про стартапы писал, но это хорошо, если наберется, только тогда наличие ORM как раз может выйти боком.

Стартап - понятие не однозначное. Мы уже 5 лет в бизнесе, с точки зрения нас же 4 года назад - интерпрайз, с тз люб… twitter.com/i/web/status/8…

18:50

Кстати, не могу не воспользоваться положением - we’re hiring! #scala/#java, #nodejs, #devops. Релокейт в Германию :) kreditech.com/careers

18:55
@backendsecret мы пробовали. Ну как пробовали. Мы его создали :)

Я ждал подобный комент :) расскажете подробнее? Какую задачу решали у себя и зачем оно может быть нужно другим? twitter.com/suicidecoding/…

19:05
@backendsecret Яндекс.Метрика решает задачу аналитики по сайтам и приложениям. В твите не опишешь. Наша статья: m.habrahabr.ru/company/yandex…
19:18

# Вторник 27 твитов

Всем доброе утро! Вопрос к аудитории - интересно ли поговорить про работу в Германии, или все и так уже подписаны на @abroadunderhood ?

11:11
@backendsecret ок, а если в требованиях поддержка одновременно двух типов баз, ну например sqlite & postgresql?

Опять же вопрос, с чем связано такое требование. Поддерживать специфические для СУБД запросы будет геморойно что с… twitter.com/i/web/status/8…

11:14
@backendsecret для DSL есть groovy

Вопрос предпочтений. При прочих равных, я выберу тот язык, где компилятор за меня найдёт больше ошибок. twitter.com/theaspect/stat…

11:16

Пол года назад я про работу уже рассказывал в @abroadunderhood, вот тут архив abroadunderhood.ru/alexkorotkikh/…

11:21

Итак, про работу. Сразу скажу, что я могу судить только про нашу компанию и подобные, т.е. стартапы разной степени зрелости

15:49

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

15:50

С другой стороны, аутсорс от продукта отличается вне зависимости от страны, кмк :)

15:51

Главное отличие - здесь очень многие ИТ компании сильно интернациональные. У нас на 200 человек в немецком офисе - около 40 национальностей

15:52

Причём немцев дай бог чтоб четверть. Инжиниринг на 70% русскоязычный, но тут своя причина - первый офис разработки был в Украине

15:53

И многие (я в том числе) переехали из того самого офиса. Он кстати до сих пор работает, разработчиков примерно пополам здесь и в Украине

15:54

Ещё здесь очень ценится оценка на сайтах отзывов о работодателе, вроде kununu. И, как обычно, уронить её гораздо прое чем поднять.

15:56

Это потом сказывается на скоросте/простоте найма.

15:56

Учитывая немецкую программу для high-skilled migrants (blue card), компаниям не так дорого/геморно релокейтить откуда угодно, даже не из ЕС

15:58

Поэтому почти все более-менее вставшие на ноги стартапы уже открыты к relocation support, про крупные я вообще молчу, для них это копейки

15:59
@backendsecret потолок ЗП непробиваемый на уровне ~65К или это только для гастарбайтеров?

Не знаю, откуда взялось это предубеждение. Я знаю много "гастарбайтеров" с зарплатой выше и сильно выше. 65К - это… twitter.com/i/web/status/8…

16:47

а на национальность, учитывая количество мигрантов, тут не смотрят. По крайней мере, ни я, ни мои знакомые не сталкивались

16:47
@backendsecret это то, что предлагают рекрутеры. А какие тода выше средней возможные и высокие возможные существуют?

Буквально на прошлой неделе присиылали вакансию Scala Team Lead - up to 110k. Знакомый Senior Java в Берлине - 80k twitter.com/sfilatov/statu…

17:35

Ещё несколько офферов в Берлине знаю на 80-100к. Это Senior Engineer позиции в достаточно успешных стартапах (либо profitable, =>

17:36

либо хорошо проинвестированные, со стабильными показателями роста)

17:37

Тут ещё надо понимать разницу в ценах на всё между бывш. ГДР и ФРГ. Берлин заметно дешевле, чем Гамбург, з/п соответственно

17:38
@backendsecret а сколько налогов надо заплатить с 65К в Германии?

Нет простого ответа, от 18 до 40+ процентов. В эбродике описывал подробнее abroadunderhood.ru/alexkorotkikh/… twitter.com/alakhverdyants…

17:41

Зачем НЕ надо ехать работать в Европу? За деньгами. Тут социализм, по сути, имхо за деньгами - это в штаты (хотя и не уверен)

18:24

Зачем надо? Я ехал в первую очередь за новым жизненным опытом. В добавок получил хорошую медицину, чувство безопасности и ->

18:25

Удивительное ощущение от понимания, на что идут твои налоги :)

18:26
@backendsecret а встречается ли удаленка в компаниях серьезных? Из ЕС или не из ЕС.

Никогда не интересовался. Много компаний обещают гибкий home office, но это не то, конечно twitter.com/sfilatov/statu…

19:08
@netcreeper @backendsecret по сути в России же тоже около 40% налоги и страховки. Только все это не так прозрачно

На западе про з/п обсуждают “в год до налогов”, в постсовке - “в месяц после налогов”. Привычка и формирует образ м… twitter.com/i/web/status/8…

19:19
@backendsecret в Швейцарию: высокие ЗП и низкие налоги. Если детей нет, то денег много оставаться будет.
20:35

# Среда 3 твита

@backendsecret @abroadunderhood интересно, расскажите про языки, обязательно ли знание немецкого?

В стартапах, как правило, нет, именно потому что много экспатов. В энтерпрайзах вроде банков и страховых, как прави… twitter.com/i/web/status/8…

12:10
@backendsecret вот кстати интересно почему люди страдают а не заворачивают все специфичное в процедуры/вьюхи. Вжух и ОРМ опять в деле

В принципе, можно и так. Главное не забывать все пускать через миграции, чтобы версионирование было. Хотя я не любл… twitter.com/i/web/status/8…

12:13

Не везёт мне с коллективными твиттерами. Вёл эброад - отправили в командировку, веду бэкенд - а у нас реорганизация отдела. Завал :(

18:03

# Четверг 17 твитов

И снова здравствуйте. Вроде есть немного времени, давайте расскажу немного про работу в финтехе

11:21

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

11:22

Учитывая, что мы сейчас оперируем на 5 разных рынках - у нас 5 разных регуляторов + немецкое data privacy agency, т.к. компания-то немецкая

11:23

В итоге один и тот же вроде бы продукт в разных странах выглядит порой очень по разному

11:24

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

11:25

А потом приходит госрегулятор и говорит "а почему вы не спрашиваете у своих клиентов есть ли у них или членов их семьи страховка имущества?"

11:26

а ещё ипотека, кредитные карты, другие займы и пр. Банки это спрашивают, чтобы оценить риски. Мы риски оцениваем с помощью ML, и практика =>

11:27

показывает, что подобная информация на качество модели влияет чуть менее чем никак. Только конверсию убивает

11:27

Отдельный геморой с data privacy, В отличии от многих других бизнесов, нам недостаточно минимальной информации о клиенте вроде мейла и имени

11:28

И для наших нужд, и для соблюдения законов приходится собирать много sensitive data - номер счёта, паспорта, ssn, сканы доков

11:30

Соответственно, всякие DPA нас очень не любят и регулярно приходят посмотреть, не нарушаем ли мы чего. Кто-то в запаре забыл удалить =>

11:31

логгирование номера счёта и это нашли - привет, вот штраф. Круче всего станет в EU с 2018го - новые правил (GDPR) по которым штраф может =>

11:32

достигать 4% годового ревенью (даже не профита!). Для небольших фирм это может стать смертью.

11:33

Отдельная тема - анонимизация. Если пользователь взял кредит - его данные обязаны храниться не менее 10 лет (опять же зависит от страны)

11:34

А вот если мы ему отказали, или он передумал (напр. условия не устроили) то его данные надо физически удалить. насовсем.

11:35

Что-что? у вас immutable data? CQRS? No update/delete policy? Расскажите об этом регуляторам, только сначала штраф заплатите.

11:35
@backendsecret боюсь показаться странным, но я рад, что гос-во оставляет место человечности и социализму, иначе бы ML на scala поработил мир

С общечеловеческой позиции, я, пожалуй, соглашусь. Я говорил скорее к тому, что в этой области есть неочевидные сло… twitter.com/i/web/status/8…

12:57

# Пятница 2 твита

@backendsecret расскажите еще про рынок труда на Scala. Стоит ли её сейчас изучать или рынок сжимается?

Имхо, строго наоборот. Вижу все больше вкусных вакансий в интересных компаниях. Хотя на Go рост, пожалуй, больше по… twitter.com/i/web/status/8…

11:37
@backendsecret представляю как ошеломит регулятора технология event sourcing.

Регулятору как раз пофиг. Dura led sed lex. Страдает разработчик twitter.com/max_vasin/stat…

21:09

# Воскресенье 4 твита

Неделя вне твиттера выдалась насыщенная, писать практически не успевал, за что прл у прощения. У меня ещё есть несколько часов =>

15:54

Рад буду ответить на вопросы, если есть. Финтех, Германия, scala, нужность orm’ов ;) спрашивайте!

15:56

Ребята, мне пора прощаться. Надеюсь, кому-то понравилось и было полезно. Рад пообщаться на любые темы - @alexkorotkikh

20:03

Не могу не напомнить - @Kreditech is hiring :) если вам интересен финтех + релокейт в Европу - буду рад помочь!

20:04

other