Могло это случиться с postgresql или mssql?
Могло. Но постоянно случается с mongodb и elasticsearch.
Можно сделать плохую архитектуру на go?
Можно. Но постоянно делают на ruby :)
https://vc.ru/finance/106366-dannye-44-tysyach-klientov-kreditnogo-brokera-alfa-kredit-okazalis-v-otkrytom-dostupe
Могло. Но постоянно случается с 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
У подборки про собеседования https://news.1rj.ru/str/nosingularity/197
620 просмотров на данный момент.
У меня в загашнике огромная подборка по postgresql, по которой я пилю правила для своего анализатора. Я ее когда-нибудь причешу и выложу, но пока есть вот такое:
https://github.com/pingcap/awesome-database-learning
Telegram
Сингулярности не будет (18+)
В @ctodailychat подняли вопрос повышения квалификации и подготовкам к интервью при смене работы.
И если для молодых разработчиков смена работы довольно привычный паттерн, то для людей постарше это может быть проблемой. Особенно, когда работаешь 10 лет…
И если для молодых разработчиков смена работы довольно привычный паттерн, то для людей постарше это может быть проблемой. Особенно, когда работаешь 10 лет…
Обещал пост про то, какой я контрол-фрик, но не было повода.
Олег запостил про скорость написания кода ведущего разработчика redis:
https://news.1rj.ru/str/oleg_log/2785
Мне тоже было интересно про скорость :)
Я для статы стал использовать
wakatime.com
А вы с какой скоростью фигачите?
Олег запостил про скорость написания кода ведущего разработчика redis:
https://news.1rj.ru/str/oleg_log/2785
Мне тоже было интересно про скорость :)
Я для статы стал использовать
wakatime.com
А вы с какой скоростью фигачите?
Telegram
oleg_log
Капитанский журнал.
День 3650й
Спустя 10 лет создатель Редиса пересчитал сколько кода он пишет в день. Получилось ~29 строк в день на основном проекте и где-то 50 вместе с сайд проектами. И это довольно интересный, но ожидаемый, показатель особенно учитывая…
День 3650й
Спустя 10 лет создатель Редиса пересчитал сколько кода он пишет в день. Получилось ~29 строк в день на основном проекте и где-то 50 вместе с сайд проектами. И это довольно интересный, но ожидаемый, показатель особенно учитывая…
В твиттере разрабы стали светить свои инкамы и один добрый человек подбил все в табличку:
https://news.ycombinator.com/item?id=22334702
Самое большое удивление вызвал инкам Дэна Абрамова с $130к в год в Лондоне в FB до налогов или $78к в год после.
Для тех кто не знает Дэна - это чувак, которого не взяли в яндекс :) после этого он покурил elm и на его идеях запилил Redux.
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://stackoverflow.com/a/60165985/521799
Если вы не знаете что такое jooq, то я расскажу. Это такая страшная ORM для джавистов, где есть отдельный DSL (свой язык), который билдится в sql.
Я вот прям даже не знаю, можно ли придумать пример лучше, который бы иллюстрировал, что так делать не надо. (Miro, привет!)
Фанаты jooq называют это simple hack, кстати :)
я посмотрел ^.
Разговор шел с героем этого твита:
https://news.1rj.ru/str/nosingularity/252
Никаких особенных откровений не было. Выгнали пхпэшников, которые не знают sql, взяли тех, которые знают. 10 лет страдали, теперь не страдают. Что мешало не страдать - не рассказали :)
Я каждый раз удивляюсь таким историям: мы долго страдали, потом немного подумали, перестали страдать.
Но rocket science при этом не происходит.
Почему не подумали до этого - хз. Зачем рассказывать какие вы балбесы - хз.
Разговор шел с героем этого твита:
https://news.1rj.ru/str/nosingularity/252
Никаких особенных откровений не было. Выгнали пхпэшников, которые не знают sql, взяли тех, которые знают. 10 лет страдали, теперь не страдают. Что мешало не страдать - не рассказали :)
Я каждый раз удивляюсь таким историям: мы долго страдали, потом немного подумали, перестали страдать.
Но rocket science при этом не происходит.
Почему не подумали до этого - хз. Зачем рассказывать какие вы балбесы - хз.
И еще в догонку про новость про обман систем распознавания образов (https://news.1rj.ru/str/nosingularity/236)
Тут опять дурят теслу:
https://news.1rj.ru/str/brodetsky/2074
Стоит отметить, что подобны системы стоят на многих автомобилях. Здорово бы было сравнить :)
Тут опять дурят теслу:
https://news.1rj.ru/str/brodetsky/2074
Стоит отметить, что подобны системы стоят на многих автомобилях. Здорово бы было сравнить :)
Telegram
Сингулярности не будет
В процессорах intel нашли очередную дыру, при помощи ведра с андройдамии можно эмулировать пробки в google maps, а в хром палит каждого из нас по индивидуальному айдишнику.
Как говорится, ален нови, ностра алис! Что означает — ежели один человек построил…
Как говорится, ален нови, ностра алис! Что означает — ежели один человек построил…
открытое письмо, блин :)
@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, поэтому готовьте ваши запросы :)
@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
Если что, это Robert Martin, автор Clean Code
Апдейт из обсуждения поста
https://news.1rj.ru/str/nosingularity/261
в чате канала:
1) дефолтные значения параметров не спасут вас от попадания туда undefined. Пример:
2) возможно, отдельного разговора заслуживает позиция, которая говорит о том, что у функции не должно быть больше 1 параметра. Если это требуется - все параметры необходимо засунуть в объект.
3) parseString(str = '') это не тоже самое, что parseString(val || '')
4) «ide подсвечивает параметры функции». Не любая, не все и не всегда. Кроме того, ide это делает только в процессе написания кода. Когда код написан, уже никто ничего не подсвечивает.
Если уровень понимания кода во время его написания отличается от уровня понимания во время его чтения, такой код называется write only.
Это плохо, тк дебажить и рефакторить такой код становится очень тяжело.
5) типы нужны. причем в наших правилах линтера даже было такое, которе заставляет всегда прописывать тип руками, что фактически запрещает автоматический вывод типов. Это правило вызвало по-началу много ругани, но после пары раз , когда это спасло, дебаты прекратились.
6) типы не спасут от нарушения сервером (фронтом) контракта. Типы для этого не предназначены. От нарушения контракта спасают схемы контрактов и обязательная валидация объектов по этим контрактам. Для json это json-schema. Но так же есть другие форматы, где схема присутвует by design
7) покажи конфиг. Показываю:
https://github.com/acmecryptocorp
Замечу, что создавал и поддерживал этот конфиг отдельный умный разработчик :)
8) js плохой язык. Большенство плохие. Часть при этом еще и скучные. Но с хорошими языками сложная ситуация - вы либо не сможете на них писать, либо не будет желания писать ни на чем, кроме них, а таких вакансий довольно мало.
Бэкам рекомендую посмотреть haskell, фронтам elm.
В далеких планах у меня переезд с flow на go, и хочу замерять скорость перехода.
Буду держать вас в курсе :)
https://news.1rj.ru/str/nosingularity/261
в чате канала:
1) дефолтные значения параметров не спасут вас от попадания туда undefined. Пример:
const parseString = (str = '') => {console.log(str)};
parseString(undefined);2) возможно, отдельного разговора заслуживает позиция, которая говорит о том, что у функции не должно быть больше 1 параметра. Если это требуется - все параметры необходимо засунуть в объект.
3) parseString(str = '') это не тоже самое, что parseString(val || '')
4) «ide подсвечивает параметры функции». Не любая, не все и не всегда. Кроме того, ide это делает только в процессе написания кода. Когда код написан, уже никто ничего не подсвечивает.
Если уровень понимания кода во время его написания отличается от уровня понимания во время его чтения, такой код называется write only.
Это плохо, тк дебажить и рефакторить такой код становится очень тяжело.
5) типы нужны. причем в наших правилах линтера даже было такое, которе заставляет всегда прописывать тип руками, что фактически запрещает автоматический вывод типов. Это правило вызвало по-началу много ругани, но после пары раз , когда это спасло, дебаты прекратились.
6) типы не спасут от нарушения сервером (фронтом) контракта. Типы для этого не предназначены. От нарушения контракта спасают схемы контрактов и обязательная валидация объектов по этим контрактам. Для json это json-schema. Но так же есть другие форматы, где схема присутвует by design
7) покажи конфиг. Показываю:
https://github.com/acmecryptocorp
Замечу, что создавал и поддерживал этот конфиг отдельный умный разработчик :)
8) js плохой язык. Большенство плохие. Часть при этом еще и скучные. Но с хорошими языками сложная ситуация - вы либо не сможете на них писать, либо не будет желания писать ни на чем, кроме них, а таких вакансий довольно мало.
Бэкам рекомендую посмотреть haskell, фронтам elm.
В далеких планах у меня переезд с flow на go, и хочу замерять скорость перехода.
Буду держать вас в курсе :)