Чудо какое: новый веб-стек tRPC
Типа, больше не будет разделения на бэк и фронт, и главное, что вы получаете полную поддержку типов с "автозаполнением" на сервере и клиенте + автоматическая проверка в рантайме, что ваши входные и выходные данные соответствуют спецификации вашего API.
Когда сложная логика на сервере, или highload, где много клиентов хочут данные в разных форматах, tRPC вряд ли подойдёт, но когда вы делаете проект с акцентом на фронтенде, где бэк скорее вторичен, tRPC очень хорош.
Ну и ещё прикрутить zod (TypeScript-first schema validation with static type inference)
Типа, больше не будет разделения на бэк и фронт, и главное, что вы получаете полную поддержку типов с "автозаполнением" на сервере и клиенте + автоматическая проверка в рантайме, что ваши входные и выходные данные соответствуют спецификации вашего API.
Когда сложная логика на сервере, или highload, где много клиентов хочут данные в разных форматах, tRPC вряд ли подойдёт, но когда вы делаете проект с акцентом на фронтенде, где бэк скорее вторичен, tRPC очень хорош.
Ну и ещё прикрутить zod (TypeScript-first schema validation with static type inference)
❤🔥14✍4👍1
Подъехали очередные позитивные AI-новости.
CEO Anthropic (вторая компания по продвинутости в AI) заявил, что, как он полагает, сверхчеловеческий AI будет готов совсем скоро, и шанс примерно 1 к 6, что он убьёт всех.
"люди, безусловно, будут удивлены тем, на что окажется способен AI в 2024-м году"
Ожидается, что фаза "изменения реальности" (новые научные открытия, лечение тяжёлых болезней, создание биооружия нового поколения) начнётся в 2025--2026 гг.
Он также подтвердил свой недавний прогноз: через 2-3 года AI достигнет уровня "хорошо образованного человека", и более того,
"модели в среднем будут соответствовать человеческим экспертам в широком спектре навыков".
Особенно порадовал свежачок, научная статья "a powerful new capability of LLMs: recursive self-improvement"
recursive self improvement in 2025, superalignment team deadline 2027.
CEO Anthropic (вторая компания по продвинутости в AI) заявил, что, как он полагает, сверхчеловеческий AI будет готов совсем скоро, и шанс примерно 1 к 6, что он убьёт всех.
"люди, безусловно, будут удивлены тем, на что окажется способен AI в 2024-м году"
Ожидается, что фаза "изменения реальности" (новые научные открытия, лечение тяжёлых болезней, создание биооружия нового поколения) начнётся в 2025--2026 гг.
Он также подтвердил свой недавний прогноз: через 2-3 года AI достигнет уровня "хорошо образованного человека", и более того,
"модели в среднем будут соответствовать человеческим экспертам в широком спектре навыков".
Особенно порадовал свежачок, научная статья "a powerful new capability of LLMs: recursive self-improvement"
recursive self improvement in 2025, superalignment team deadline 2027.
🫡10😁2💯2😇2⚡1
"Бабашка" -- метациклический интерпретатор на кложе для кросс-платформного скриптинга (вместо баша например).
✍2🤯2👍1🔥1
"Без требований и без проектирования программирование -- это искусство добавления ошибок в пустой текстовый файл".
-- Louis Srygley, ИТ-архитектор сервиса доставки UPS
-- Louis Srygley, ИТ-архитектор сервиса доставки UPS
✍14🔥6⚡5💯2❤1
Я учу видеть такие недостатки в коде, которые большинство сочтёт безобидными, и программировать на более высоком уровне, чем многие вообще могут себе представить. Трудно поднять людей на такой уровень, но я оттачиваю этот скилл на протяжении многих лет, и ещё больше сделаю в будущем.
Но, как ни странно, ещё труднее поднимать на такой уровень код. Например, линтер может подсказать, что написанный вами цикл можно заменить стандартной библиотечной функцией, а LLM предложит отрефакторить десяток строк, а сторонний наблюдатель отметит, что некоторые из ваших крайних случаев могут быть объединены в один.
Но суть качества кода заключается в чистом выражении заложенных в него идей. Чтобы создать код, который достигнет такого уровня и такого качества, я должен понимать суть проекта до весьма небольших деталей так же глубоко, как и его автор.
Поможет ли тут самый продвинутый AI?
Периодически мне действительно хочется, чтобы кто-то написал более качественный код, но у меня не хватает понимания, чтобы быстро рассказать ему самыми простыми словами, как именно это сделать, ведь я не могу тратить, условно, час на такую бесплатную консультацию.
Но для этого у меня есть полуформальный приём от ИТ-святого, который скоро расскажу курсантам в СильныхИдеях.
Но, как ни странно, ещё труднее поднимать на такой уровень код. Например, линтер может подсказать, что написанный вами цикл можно заменить стандартной библиотечной функцией, а LLM предложит отрефакторить десяток строк, а сторонний наблюдатель отметит, что некоторые из ваших крайних случаев могут быть объединены в один.
Но суть качества кода заключается в чистом выражении заложенных в него идей. Чтобы создать код, который достигнет такого уровня и такого качества, я должен понимать суть проекта до весьма небольших деталей так же глубоко, как и его автор.
Поможет ли тут самый продвинутый AI?
Периодически мне действительно хочется, чтобы кто-то написал более качественный код, но у меня не хватает понимания, чтобы быстро рассказать ему самыми простыми словами, как именно это сделать, ведь я не могу тратить, условно, час на такую бесплатную консультацию.
Но для этого у меня есть полуформальный приём от ИТ-святого, который скоро расскажу курсантам в СильныхИдеях.
👍10🔥6⚡1🫡1
Принципы SOLID следует не только любить, но и опасаться, потому что важно понимать их цели и мотивацию. SOLID учит мыслить так, чтобы максимизировать модульность. На самом деле, если посмотреть на оригинальное кембриджское определение модульности, то оно практически полностью соответствует тому, чего добивается SOLID:
"Системе не хватает модульности, если изменение одного из её компонентов влияет на функционирование других"
Модульность -- безусловно, очень важный аспект в программировании, но её достижение требует дополнительных усилий. Стандартный подход, когда вы стараетесь отделить каждый тип от другого с помощью абстракций. Именно это и подразумевается под словами " low coupling, high cohesion".
Как уже раньше не раз говорил, если довести эти принципы до логического конца, то в итоге получатся сотни (а то и тысячи) небольших типов, которые можно вырвать из вашего приложения и бросить в любом другом месте, поскольку они отвязаны от вашего кода (этот момент рассматриваем на курсе ООАП), но в этом есть и свои минусы (много лишнего кода, объёмное и излишне детализированное юнит-тестирование...).
Поэтому для курсантов в СильныхИдеях я отдельно написал 5 заметок по принципам SOLID, как их лучше воспринимать с точки зрения функционального программирования.
"Системе не хватает модульности, если изменение одного из её компонентов влияет на функционирование других"
Модульность -- безусловно, очень важный аспект в программировании, но её достижение требует дополнительных усилий. Стандартный подход, когда вы стараетесь отделить каждый тип от другого с помощью абстракций. Именно это и подразумевается под словами " low coupling, high cohesion".
Как уже раньше не раз говорил, если довести эти принципы до логического конца, то в итоге получатся сотни (а то и тысячи) небольших типов, которые можно вырвать из вашего приложения и бросить в любом другом месте, поскольку они отвязаны от вашего кода (этот момент рассматриваем на курсе ООАП), но в этом есть и свои минусы (много лишнего кода, объёмное и излишне детализированное юнит-тестирование...).
Поэтому для курсантов в СильныхИдеях я отдельно написал 5 заметок по принципам SOLID, как их лучше воспринимать с точки зрения функционального программирования.
👍11🤔3
Признавайтесь :)
Anonymous Poll
30%
itemId
14%
itemID
7%
ItemId
4%
ItemID
35%
item_id
10%
как придётся
Нужна ли математика программисту?
На всех онлайн-курсах вам будут рассказывать, что это совершенно необязательно (главное несите деньги :), но в моей Школе математические знания хотя бы на уровне первого университетского курса крайне желательны.
Не исключаю, что дальше неначинающих программистов я буду брать только с математической подготовкой, и как минимум скоро буду делать математикам скидки. А кто у меня уже занимается, и имеет математическое образование или сейчас учится, напишите (с какими-то минимальными пруфами), скидка будет прямо сейчас.
На всех онлайн-курсах вам будут рассказывать, что это совершенно необязательно (главное несите деньги :), но в моей Школе математические знания хотя бы на уровне первого университетского курса крайне желательны.
Не исключаю, что дальше неначинающих программистов я буду брать только с математической подготовкой, и как минимум скоро буду делать математикам скидки. А кто у меня уже занимается, и имеет математическое образование или сейчас учится, напишите (с какими-то минимальными пруфами), скидка будет прямо сейчас.
✍18👍5👌2❤1🤔1
Умножение n-разрядных целых чисел занимает ...
Anonymous Quiz
26%
O(1)
17%
O(log n)
33%
O(n)
19%
O(n^m)
5%
O(m^n)
🤔6✍3👍2
Умножение log(n)-разрядных целых чисел занимает ...
Anonymous Quiz
12%
O(1)
59%
O(log n)
22%
O(n)
5%
O(n^m)
1%
O(m^n)
🤔17✍5
Поясняю за последний опрос.
Умножение n-разрядных целых чисел занимает время O(n), поскольку алгоритм умножения предполагает многократное сложение. При умножении двух чисел их необходимо многократно складывать друг с другом до получения результата. Количество необходимых сложений зависит от размера перемножаемых чисел, который квадратично увеличивается с ростом n. Поэтому время выполнения этой операции линейно растёт с ростом n.
Умножение log(n)-разрядных целых чисел занимает время O(1), если мы вспомним энтропийную формулу Шеннона. В теории информации количество информации, передаваемой сообщением, измеряется с помощью его энтропии. Энтропия двух независимых сообщений A и B определяется как H(A|B) = H(A) + H(B), поэтому умножение log(n)-разрядных целых чисел можно рассматривать как объединение нескольких независимых сообщений с одинаковым количеством битов, что уменьшает общую энтропию объединённого сообщения. В результате получается более быстрый алгоритм умножения, который с точки зрения теории информации занимает время O(1).
(если вы не изучали теорию информации, то скорее всего не знаете, что значит дробное число бит -- красивое объяснение на хабре)
Умножение n-разрядных целых чисел занимает время O(n), поскольку алгоритм умножения предполагает многократное сложение. При умножении двух чисел их необходимо многократно складывать друг с другом до получения результата. Количество необходимых сложений зависит от размера перемножаемых чисел, который квадратично увеличивается с ростом n. Поэтому время выполнения этой операции линейно растёт с ростом n.
Умножение log(n)-разрядных целых чисел занимает время O(1), если мы вспомним энтропийную формулу Шеннона. В теории информации количество информации, передаваемой сообщением, измеряется с помощью его энтропии. Энтропия двух независимых сообщений A и B определяется как H(A|B) = H(A) + H(B), поэтому умножение log(n)-разрядных целых чисел можно рассматривать как объединение нескольких независимых сообщений с одинаковым количеством битов, что уменьшает общую энтропию объединённого сообщения. В результате получается более быстрый алгоритм умножения, который с точки зрения теории информации занимает время O(1).
(если вы не изучали теорию информации, то скорее всего не знаете, что значит дробное число бит -- красивое объяснение на хабре)
Хабр
Визуальная теория информации (часть 2)
Вторая часть перевода лонгрида посвященного визуализации концепций из теории информации. Во второй части рассматриваются энтропия, перекрестная энтропия, дивергенция Кульбака-Лейблера, взаимная...
🤯13🤔4🫡1
Ну ладно, ладно, а то ещё скажете так на собеседовании 😂
Умножение n-разрядных целых чисел занимает O(n^2)
(по Карацубе, O(n^1.5849))
Умножение log(n)-разрядных целых чисел занимает O(n log n)
P.S. Но на самом деле, в некоторых экзотических теориях возможно и O(n) и O(1), как-нибудь расскажу.
Умножение n-разрядных целых чисел занимает O(n^2)
(по Карацубе, O(n^1.5849))
Умножение log(n)-разрядных целых чисел занимает O(n log n)
P.S. Но на самом деле, в некоторых экзотических теориях возможно и O(n) и O(1), как-нибудь расскажу.
👍15😁8🤝2🫡1