animated

GraphQL

Перечитываю тут все что написал за годы. Надо бы перечитать и стереть что-нибудь — чисто от греха.

Нашел от 2017-го про GraphQL: https://jakobz.livejournal.com/261135.html

"Запилили проектик на GraphQL. Ощущения смешанные. От GraphQL однозначно выигрывает бекенд на чтение.". 

Так вот. Ощущения поменялись на: «от GraphQL охуеть пиздец как выигрывает бекенд на написание кода на чтение данных». Это, определенно — самый ебический жир от GraphQL, остальное — приданное.


animated

Вопросы на собесах №4

Мои бойцы выросли, начали сами собесать, ткнули меня что я - скучный дед. Поделились опытом собесов фронтов. Теперь так:

1. Дописываем To Do list: https://codesandbox.io/s/todo-list-gnwzq?file=/src/App.js


  • ToDoItem есть. Давай просто циклом пройдем по const todoList, и нарисуем список

  • давай сделаем чтобы по клику чекбокс перещёлкивался (useState, прокинуть колбек в компонент, написать этот колбек - там надо таки найти что перещелкнуть, уже не тривиально)

  • (со звездочкой) а как стейт переделать чтобы не надо было O(N) искать что перещёлкнуть?

  • поделить пополам список — слева - несделанные, справа - сделанные. И чтобы не дёргалось. И палочку между сделанными и не сделанными. Ну, на верстку базовую.

2. Обязательная программа по теории


function x(o) {
  o.a = o.a + 5;
  o = {
    a: 20
  };
}
var obj = { a: 1 };
x(obj);
console.log(obj.a)


- что выведет?

3. Дан массив - var a = [1,2,3,2,1,4,2]. Просим пошарить экран, и

- найти все элементы, больше или равные 2 (умеет ли открыть консоль и печатать)
- найти сумму элементов (проверяем насколько человек запоминает рядовой вопрос для собесов)
- убрать повторы. Т.е. должен получиться массив [1,2,3,4]. Через Set() - норм, но просим сделать таки массив
animated

Eventual vs "true" consistency

Я столкнулся с тем, что смысл «Consistency» в разговорах про БД и системы, люди понимают неправильно. Сейчас расскажу как правильно.

Когда Боб переводит $100 Алисе за сексуальные утехи авансом, а Алиса наливает клофилина, и обносит хату — это все равно выходит за рамки той части системы, которой мы управляем. Система тут включает поведение Алисы и Боба, а не просто банковский перевод. И эта система — она eventually consistent, как ты ее не сделай.

Будет ли мандить перевод между тем, как Боб нажал кнопку «перевести», а Алиса подняла бокал — никого особо не парит. Особенно, если Алиса таки дала. А в большинстве случаев — оно так и будет. А нет — ну люди разберутся, так или иначе.

Consistency, для IT-систем, означает что у нас есть меньшее количество возможных состояний системы, о которых разработчики должны думать. Что означает «дешевле на масштабе», или «больше можно всего напихать».

К сожалению, мир так устроен, что Consistency не бесплатен. CAP-теорема, сорян.

Но, когда выбираешь между Mongo и Postgresql, или между «кешить в redis или просто потюнить постргрю» — ты не выбираешь между наличием, или отсутствием проблем у Боба и Алисы. Ты не заработаешь на приложении, в котором Алису или Боба будут ебать проблемы консистентности — им своих проблем хватает, а у тебя — конкуренты.

Consistency — обеспечивает экономию на разработке. Особенно в системах сложнее блога. А решение продать Consistency за сиюминутную выгоду  — херакнуть in-memory-кешей, стартовать проект на Mongo-DB, обмазаться Redis-ом— часто принимается впопыхах, а часто даже — как дань моде. И, часто, это решение целые проекты хоронит.

Не дайте себя обмануть

animated

Про Product Management в IT

Я тут удивился что не все Product Manager-ы понимают вот такое:

Ну — что фичи в софте становятся дороже с каждой следующей. А 80% юзеров надо 20% фичей.

Мне казалось это чем-то незыблимым и само-очевидным. Или не? Если не — напишу подробнее почему так, и что с этим делать.

animated

Про IT-мошенников

IT-шечка - индустрия очень богатая. И, как везде, где вертятся деньги, вертится ворьё и шарлатаны. Но, если в других, давно устоявшихся индустриях - например в науке, с этим научились жить, то в IT-шке шарлатаны - чуть ли не главные игроки.

Нигде, ни в какой другой индустрии, нельзя представить себе того же Мартина Фаулера или Роберта Мартина. В той же науке - им бы на второй день провели бы коллективным хуем по губам. Но в IT-шке книга "Patterns of enterprise software" - набор заклинаний, типа "используйте ООП, но я вам не расскажу как", от которых даже сам Фаулер сто лет как переобулся - стабильно в топе книг.

Но самые лютые пидарасы-лохотронщики - это, конечно, агенство Gartner. Если кто не знает - эти чуваки делают отчеты про тренды в IT, которые читают топы IT, вкладывают в названные штуки бабло, и, соответственно - Gartner оказывается прав. 2018-й все проебали бабла в чат-ботов, 2021-й - будем проебывать в low/no-code platforms.

Два вывода:
- нехера молчать. Разводилово и кидалово - надо называть разводиловом и кидаловом. Совершенно ненормально, когда у людей Кашпировский в авторитете, а на заряженную воду тратятся деньги бизнеса
- когда тебе будут втирать дичь типа "надо БД нашего банка на блокчейн переписывать, потому что это будующее" - как минимум убедись, что в этом раскладе лох - это не ты
animated

39

Мы опенсорснули EPAM Unified UI (UUI): https://uui.epam.com/, https://github.com/epam/UUI/ . Мы тока вылезли за пределы энтерпрайза, поэтому все выглядит молодо и наивно.

Но, я очень горжусь этой штукой. По фичам, мы на уровне ant.design, но по гибкости и логичности API - легко обскочим. Если надо UI Kit, где можно сделать дропдаун с выбором из 30к людей - то мы одни это умеем.

UUI - это большой кусок моей жизни. Началось все с калькулятора ОСАГО, лет 10 назад. Я писал бекенд вообще-то. Но сроки горели, я пописал фронт, и полюбил JS. Потом много возился вокруг фронта - замена IE на Chromium в Eikon, написание грида на фарше под IE6, было даже изобретение node.js в миниатюре. Короче, 3 года R&D на Reuters вокруг фронта.

Потом досталось веб-приложение, дали кард-бланш, и совпало так что вышел самый первый реакт, и самый первый typescript. И это была любовь. Получилось супер, я поймал волну, успех захотели тиражировать.

Мы написали десяток прилаг. Что-то типа пяти лет, я собирал мудрость. Переписывая по кругу инпуты, таблички, дропдауны. Потом вытащили компоненты, еще раз переписали, и еще раз переписали.
Потом выбили деньги на внутренний проект, 3 человека. Еще раз переписали всё. Из трех приложений на UUI выросли до двадцати. Потом - до сорока. Потом - пробили и обосновали open-source.

На этот год в планах - стать заметными с UUI, опен-сорснуть еще один проект, и еще один здоровенный SaaS-проект вытащить на рынок.

Если долго биться башкой в стену - в башке будет синяк, а в стене - дыра.
animated

Soft & Hard soft

Есть два полюса в разработке софта:

1. Всегда есть необходимость быстро ебануть, а там - как получится. Просто в styles.css добавить хак. Быстро сделать react-приложение, которое прям красивое и как любят, и похер как. Многие считают это не true-engineering-ом. Я считаю что это - что это вообще главное в софте, от этого слово "soft" пошло. Умеющие ебануть быстро и как понравится всем - это самые прям крутые ребята, делающие ровно то, что software engineers должны делать.

2. Бывает необходимость написать бронебойно, чтобы работало веками. Чтобы тестами закрыто. Чтобы API светило мудростью веков. Скажем - из 10-ти проектов вынуть половину кода, про скопированные между ними кнопочки, чтоб 10 аппов выглядели одинаково.

Можно мешать эти две штуки в одном проекте. Или даже искать человека, который умеет обе две вещи. Уничтожать и заставлять страдать первых через юнит-тесты и код-ревью. Растаптывать вторых через алогичные требования.

Но надо просто поделить всё на разные команды. Одна - про продукт, другая - про инкапсуляцию occasional complexity. С разными KPI, и разными менеджерами.
animated

Про право на риск

Вообще, все эти карантины, дают понимание - насколько хреново работает руководство, и насколько на тонкого там все устроено.

Ну вот взять те же перчатки в метро. Если кто не в теме - в Москве везде заставляют надевать маски и перчатки. Все увешано плакатами и предупреждениями про маски и перчатки. Все в масках, на перчатки похуй вообще всем без исключения. А это как-бы власть издает указ. Как-бы Собянин говорит нам, через подчиненных ниже: "хочу чтобы все горожане в перчатках были". Но результат, прошедший через слоя 3-4 управления, такой: нам, уважаемый Собянин, на ваши перчатки искренне похуй, а маски мы наденем потому что, говорят, помогают. Мы бы и без вас, может, одели бы. И так думают единогласно все - от таджика до ментов. Всем похуй на мнение и волю высшего руководства. А дальше-то что? "Мы может быть и без вас плитку бы в нужное место бы положили"? Предельно хуево отработали 3-4 слоя управления, факт.

Ну или много других примеров в новостях, не суть. Но к делу, я же не хотел холивар за маски.

Я хотел сказать, что можно прям как через призму смотреть, как менеджмент страны устроен. Сидят ли рядом с политиками специалисты? Слушают ли их (или как в кино - что-то пиздят там, но всем срать)? Имеют ли руководящие чины право на ошибку (а следовательно - вообще свободу действий)? Может ли кто-то снизу сказать: "Собянин, я конечно понимаю ваше величество, но перчатки никто не наденет, и у вас жопа будет обосратая. Давайте не будем?".

А через эту призму, сложив и сопоставив новости с разных стран, мне открылось то, что страны и их управление - устроено куда более разнообразно, чем я думал. Примерно с той же вариативностью, и, порой, теми же крайностями, что и банальные IT-проекты вокруг меня. И, что интересно, не сильно сложнее - за вычетом масштабов и уровней вложенности, никакого гениального менеджмента, выстроенных механизмов - я не увидел.

Ну и, рассудив так, сравнив IT-проекты с государствами, мне приятно было отметить, что я адепт управления в стиле Швеции: вижу что ты взрослый чел, вот твоя ответственность, вон спецы - чуть что - спрашивай совета. Пробуй. А если наебешься - люди поймут. Люди взрослые, все понимают что надо давать право на риск.
animated

Проебали лето?

Арсений Тарковский

Вот и лето прошло,
Словно и не бывало.
На пригреве тепло.
Только этого мало.

Всё, что сбыться могло,
Мне, как лист пятипалый,
Прямо в руки легло.
Только этого мало.

Понапрасну ни зло,
Ни добро не пропало,
Всё горело светло.
Только этого мало.

Жизнь брала под крыло,
Берегла и спасала.
Мне и вправду везло.
Только этого мало.

Листьев не обожгло,
Веток не обломало...
День промыт, как стекло.
Только этого мало.

1967 г.
animated

Про разработку программ и продуктов

Я тут может очевидное кому-то скажу, а кому-то может неочевидное.

Часто бывают программеры, которые типа "на проекте был бардак - ни четких ТЗ, ни куда гребем непонятно". Это от непонимания, что никто никогда не знает зачем ПО вообще делают, и куда дорога вывезет. За редкими исключениями.

Давайте от противного. Вот есть, условно, MS Word. Туда никаких фичей, кроме текущих - и не надо. Да и тех что есть - можно выкосить половину. Можно ли сделать точно также? Да, думаю где-то за 100M баксов - вполне. Что копейки по сравнению с продажами. Можно ли достать 100 лямов, переписать Word - и зарабатывать как MS? Неа. Потому что срать будет всем на ваш новый Word. Чтобы стать продуктом, Office-у пришлось прожить с людьми десятилетия, делать фичи типа "радужный 3D-текст Comic Sans-ом с тенью" - потому что тогда это было модно. А потом - поддерживать эти фичи. Учить поколения людей форматировать пробелами. И так, не мытьем, но катаньем, они захватили рынок.

Сложность и сила ПО - не в текущем его наборе фич, а в возможности его постоянно менять. А талант программиста - не в том чтобы по спеке сделать с тестами. Он про то, чтобы предсказать куда дует ветер, и про вычленить те кусочки, которые скорее всего пригодятся - когда надо будет разобрать и собрать всё заново. Или понять что хер угадаешь куда вывезет, и просто писать код быстро, просто и без ошибок. А как поменялось - стирать и переписывать.

Сам код - вообще имеет отрицательную ценность - чем его больше, тем хуже, если ценность продукта постоянна.