There will be no singularity – Telegram
There will be no singularity
1.99K subscribers
248 photos
15 videos
5 files
995 links
Smartface, technologies and decay
@antonrevyako
Download Telegram
​​В последнее время в уважаемых ютуб-шоу, появляются передачи, целиком посвящённые шмоту. Разговор ведут про оригинальные и не оригинальные вещи, про людей, которые коллекционируют и перепродают кроссовки и вот это вот всё.

kuji - https://youtu.be/xicjPK6f7bI

редакция - https://youtu.be/CPDMFeMdEHI

лентару (извините) - https://youtu.be/Gk_N2mhUnJo

Честно скажу, я всем этим не болею, но один раз даже я загорелся найти себе одни кроссы :) Такие как technical boy из сериала american gods (https://tvline.com/2017/05/07/american-gods-technical-boy-season-1-spoilers-bruce-langley/).
Найти не вышло, и я благополучно о них забыл.

Но сегодня - второй такой раз. Найти такие шузы невозможно, но, может, вы знаете кого-то кто делает кастомы? Желательно не из папье-маше :)
Сколько раз себе говорил: «хочешь что-то сделать, делай сейчас. «потом» не существует».

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

https://news.1rj.ru/str/devfounder/14
​​Могло это случиться с postgresql или mssql?
Могло. Но постоянно случается с mongodb и elasticsearch.

Можно сделать плохую архитектуру на go?
Можно. Но постоянно делают на ruby :)

https://vc.ru/finance/106366-dannye-44-tysyach-klientov-kreditnogo-brokera-alfa-kredit-okazalis-v-otkrytom-dostupe
Как оказалось, все любят подборки ссылок.
У подборки про собеседования https://news.1rj.ru/str/nosingularity/197
620 просмотров на данный момент.

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

https://github.com/pingcap/awesome-database-learning
Forwarded from N C
Обещал пост про то, какой я контрол-фрик, но не было повода.

Олег запостил про скорость написания кода ведущего разработчика redis:

https://news.1rj.ru/str/oleg_log/2785

Мне тоже было интересно про скорость :)
Я для статы стал использовать
wakatime.com

А вы с какой скоростью фигачите?
​​В твиттере разрабы стали светить свои инкамы и один добрый человек подбил все в табличку:

https://news.ycombinator.com/item?id=22334702

Самое большое удивление вызвал инкам Дэна Абрамова с $130к в год в Лондоне в FB до налогов или $78к в год после.

Для тех кто не знает Дэна - это чувак, которого не взяли в яндекс :) после этого он покурил elm и на его идеях запилил Redux.
По ссылке ниже показано как хороша жизнь без наркотиков (зачеркнуто) у джавистов, которые используют mysql и jooq.

https://stackoverflow.com/a/60165985/521799

Если вы не знаете что такое jooq, то я расскажу. Это такая страшная ORM для джавистов, где есть отдельный DSL (свой язык), который билдится в sql.

Я вот прям даже не знаю, можно ли придумать пример лучше, который бы иллюстрировал, что так делать не надо. (Miro, привет!)

Фанаты jooq называют это simple hack, кстати :)
​​я посмотрел ^.
Разговор шел с героем этого твита:

https://news.1rj.ru/str/nosingularity/252

Никаких особенных откровений не было. Выгнали пхпэшников, которые не знают sql, взяли тех, которые знают. 10 лет страдали, теперь не страдают. Что мешало не страдать - не рассказали :)

Я каждый раз удивляюсь таким историям: мы долго страдали, потом немного подумали, перестали страдать.

Но rocket science при этом не происходит.

Почему не подумали до этого - хз. Зачем рассказывать какие вы балбесы - хз.
​​открытое письмо, блин :)

@jitbit написал как он решал боль с тринарным оператором:

https://news.1rj.ru/str/devfounder/18

У меня есть пара комментариев, которые явно не тянули на отдельную статью, но теперь можно :)

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

Это плохо по многим причинам, но основная причина в том, что разные люди могут подразумевать разное, а компилятор совсем другое :)

Я стараюсь придерживаться принципа more verbose и искренне вам советую.

Например, в нашем конфиге линтера включено правило, которое запрещает в тринарных операторах писать так:
a ? 1 : 2

нужно обязательно написать конкретно:
a != null ? 1 : 2

Больше букв? Больше. Но, как говорится, есть нюанс :)
"" ? 1 : 2

Результат равен 2.
оО скажете вы. «Сюрприз!», - скажет js.

Или еще одна вещь, которая пила мне кровь, и мы, кажется, тоже запретили ее в линтере.
Это дефолтные значения параметров в функциях.

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

Что тут такого?
Описана, например, функция getData(query, limit=100), которая, допустим, выбирает что-то из базы с заданным лимитом. В коде она будет выглядеть как
getData(‘...’)
Сколько времени придется потратить, прежде чем новый программист в этом проекте поймет почему у него иногда возвращаются не все данные?
Зависит от опыта, но это явно не 5 минут.
Как сэкономить себе и другим нервы и время? заведите рядом константу или передавайте это значение из конфига.

Еще одно правило, экономящее нервы, запрещало писать функции без лямбды в качестве параметров функций. Например:

1,2.map(console.log)

Что ожидается? Две строки со значениями элементов в консоли. А что будет?
1,0
2,1

wtf? В колбек map передается две переменных - значение и номер в массиве. А console.log выведет все, что ей передали.
Конкретно в этом случае это безвредно, но так будет не всегда :)

И последний пример, показывающий важность статического анализа.
Есть в js вещь, которую без типов и стат анализа не сделать, и она портит жизнь всем js/flow/ts разработчикам в мире. Это конструкция вида

array.includes(value)

Не знаю по какой причине во flow этого нет (хз как в ts, но думаю, что тоже), но сигнатура функции позволяет проверять на вхождение в массив элементов типов, отличных от типа массива. В итоге получается, что ты пишешь

1,2.includes(object)

и у компилятора это не вызывает вопросов, хотя ты явно хотел не этого, а чего-то вида

1,2.includes(object.field)

Один раз я потратил 5 часов, когда искал эту багу.
После чего я попросил запилить ворнинг для линтера, который будет орать на все .includes
Лучше я проверю это место руками и задизейблю это правило для конкретной строки, чем пропущу это место.

Какие выводы, кроме того, что js и питон плохие языки и даже статические типизаторы вас не спасут?

1) изучайте разные языки для расширения кругозора. В функциональных языках невозможно делать if без else и рекурсивную функцию без описанного условия выхода. И тринарному оператору нельзя существовать без правой части.
Если вы будете делать так же в своем коде, завтрашний вы скажет вам спасибо :)

2) не экономьте на символах. Чем более точно вы опишете компилятору, что вы от него хотите, тем спокойнее будет ваш сон :) Даже если компилятор поймет укороченную версию, завтрашний вы можете об этом забыть. Не говоря уже о новых сотрудниках на проекте.

3) используйте статические анализаторы и статическую типизацию в языках, где нет нормальной типизации. Велика вероятность, что это сэкономит вашей компании много денег, а вас не лишит места в этой компании :)

Кстати, скоро я выкачу первую версию статического анализатора для sql, поэтому готовьте ваши запросы :)
​​И, конечно же, этот пост был бы не полным без этой картинки
а еще кривой бот сожрал квадратные скобки у всех массивов. ЪУЪ!
Forwarded from I hate overtime
This media is not supported in your browser
VIEW IN TELEGRAM
И вместо пятничного мема вот вам гифка на случай важных переговоров.
Если что, это Robert Martin, автор Clean Code