По теме system design на собеседованиях любят гонять по архитектурам крупнейших сервисов -- типа, они же эталон, расскажите, как бы вы сделали клон фейсбука или нетфликса.
Да, но, например, Twitter встраивает каждый твит на вашу страницу как iframe, загружая попутно более мегабайта (!) JavaScript, выполняет при этом 20+ HTTP-запросов и использует более 100 DOM-узлов. И в других ютубах инстаграммах ничуть не лучше (вот разве что тг неплохо спроектирован)...
Ну и чему вы "научитесь"?
Я поэтому даже по технической теме SD и архитектур акцент на курсах делаю на фундаментальных, университетских знаниях, без понимания которых у вас и будут получаться только одни твиттеры.
Да, но, например, Twitter встраивает каждый твит на вашу страницу как iframe, загружая попутно более мегабайта (!) JavaScript, выполняет при этом 20+ HTTP-запросов и использует более 100 DOM-узлов. И в других ютубах инстаграммах ничуть не лучше (вот разве что тг неплохо спроектирован)...
Ну и чему вы "научитесь"?
Я поэтому даже по технической теме SD и архитектур акцент на курсах делаю на фундаментальных, университетских знаниях, без понимания которых у вас и будут получаться только одни твиттеры.
👍14🔥6✍3🤯3
В продолжение темы интерфейсов.
В принципе, Haskell позволяет достаточно легко написать интерфейс для множества различных реализаций стека -- с помощью тайп-классов. Но, что уж греха таить, даже тайп-классы приводят к путанице в отношениях между реализацией и интерфейсами; и у них есть тёмная сторона.
С одной стороны, компилятор автоматически выбирает нужную функцию в зависимости от того, как будет использоваться результат, а с другой, для каждого типа может быть только одна такая функция. Если вы хотите иметь два разных способа, например, сериализации некоторой сущности, то извините! Ну или пишите по-хипстерски Serialize1 и Serialize2 :)
В принципе, Haskell позволяет достаточно легко написать интерфейс для множества различных реализаций стека -- с помощью тайп-классов. Но, что уж греха таить, даже тайп-классы приводят к путанице в отношениях между реализацией и интерфейсами; и у них есть тёмная сторона.
С одной стороны, компилятор автоматически выбирает нужную функцию в зависимости от того, как будет использоваться результат, а с другой, для каждого типа может быть только одна такая функция. Если вы хотите иметь два разных способа, например, сериализации некоторой сущности, то извините! Ну или пишите по-хипстерски Serialize1 и Serialize2 :)
👍1🤔1
Готовлю курс по SAT/SMT-солверам (в этом месяце будет бесплатно доступен регулярно у меня занимающимся), будем решать с помощью Z3 вот подобные задачки )))
По тропинке вдоль кустов
Шли 11 хвостов.
Сосчитать я также смог,
Что шагало 30 ног.
Это вместе шли куда-то
Петухи и поросята.
А теперь вопрос таков:
Сколько было петухов?
И узнать я был бы рад,
Сколько было поросят?
По тропинке вдоль кустов
Шли 11 хвостов.
Сосчитать я также смог,
Что шагало 30 ног.
Это вместе шли куда-то
Петухи и поросята.
А теперь вопрос таков:
Сколько было петухов?
И узнать я был бы рад,
Сколько было поросят?
🔥16🫡6
Посмотрите этот, без преувеличения, выдающийся доклад "GoingNative 2013 C++ Seasoning".
Sean Parent начинает выступление со слайда с куском кода из некоторой версии Chromium OS. Это цикл со вложенными if (за что я строго ругаю даже начинающих :), который, судя по всему, выполняет перестановку панелей. Да, вот такой ужасный джуниорский код пишут в Гугле "знатоки алгоритмов", прошедшие, типа, через сложнейшие собеседования.
И всего несколько слайдов спустя Parent преобразует этот код в несколько строк вообще без циклов и условий: более читабельный, более эффективный, более простой и более общий. Это тот идеал, к которому мы стремимся.
Самый продуктивный подход в понимании цикла -- это когда он вообще не будет написан :)
(подробнее по этой теме в СильныхИдеях скоро будет материал по правильному пониманию циклов как частных версий более сильных абстракций).
Sean Parent начинает выступление со слайда с куском кода из некоторой версии Chromium OS. Это цикл со вложенными if (за что я строго ругаю даже начинающих :), который, судя по всему, выполняет перестановку панелей. Да, вот такой ужасный джуниорский код пишут в Гугле "знатоки алгоритмов", прошедшие, типа, через сложнейшие собеседования.
И всего несколько слайдов спустя Parent преобразует этот код в несколько строк вообще без циклов и условий: более читабельный, более эффективный, более простой и более общий. Это тот идеал, к которому мы стремимся.
Самый продуктивный подход в понимании цикла -- это когда он вообще не будет написан :)
(подробнее по этой теме в СильныхИдеях скоро будет материал по правильному пониманию циклов как частных версий более сильных абстракций).
👍12👏3🔥1🫡1
Недостаток подходов к интерфейсам (продолжение) даже в функциональных языках в том, что в них вы раскрываете детали реализации для вызывающей стороны. Они основаны на т.н. универсально-квантифицированных типах, как в Haskell (они описывают вещи, которые работают одинаково для любого типа), тогда как нам нужны экзистенциально-квантифицированные типы (работают одинаково только с определёнными, но заранее неизвестными типами) -- это и есть синоним сокрытия информации.
Как получить экзистенциальные типы? В Haskell это может выглядеть как запихивание экземпляра тайп-класса внутрь обобщённого алгебраического типа (GADT) -- его конструктор может возвращать связанные значения не своего типа. Но всё равно даже в Haskell это не работает для бинарных функций: я не смогу гарантировать, что две структуры данных одного типа при пересечении в программе используют, например, одну и ту же [реализацию] библиотеку мемоизации (они ведь могут использовать разные глобальные состояния, хотя им нужно использовать одно и то же).
Тут полезно вспомнить теорему Рейнольдса об абстракции... Проблема с классами типов -- это вывод типов и глобальный контекст, который обычно в высшей степени антимодулен. Классы типов никогда не смогут стать заменой модулям. Всё, что заставляет их работать таким образом, сильно ошибочно.
На этом тема интерфейсов закрыта, подробный материал в СильныхИдеях.
Как получить экзистенциальные типы? В Haskell это может выглядеть как запихивание экземпляра тайп-класса внутрь обобщённого алгебраического типа (GADT) -- его конструктор может возвращать связанные значения не своего типа. Но всё равно даже в Haskell это не работает для бинарных функций: я не смогу гарантировать, что две структуры данных одного типа при пересечении в программе используют, например, одну и ту же [реализацию] библиотеку мемоизации (они ведь могут использовать разные глобальные состояния, хотя им нужно использовать одно и то же).
Тут полезно вспомнить теорему Рейнольдса об абстракции... Проблема с классами типов -- это вывод типов и глобальный контекст, который обычно в высшей степени антимодулен. Классы типов никогда не смогут стать заменой модулям. Всё, что заставляет их работать таким образом, сильно ошибочно.
На этом тема интерфейсов закрыта, подробный материал в СильныхИдеях.
✍6👍1👏1
Рекомендации для начинающих тимлидов: ожидать приплода можно лишь от тех, кого ты пасёшь.
Почитайте "Повелитель мух" например ) Очень реалистично про коллективы без разумного управления.
Сотрудников надо поощрять и делегировать ответственность, но не упускать контроль; регулярно проверять и поправлять, но не заниматься микро-менеджментом. Это мастерство, да.
Неоспоримый факт, что если сотрудники сами измеряют хоть какие-то свои результаты (для чего необходима система тикетов с дедлайнами как минимум) и перед кем-нибудь периодически отчитываются, дела будут идти гораздо лучше.
Почитайте "Повелитель мух" например ) Очень реалистично про коллективы без разумного управления.
Сотрудников надо поощрять и делегировать ответственность, но не упускать контроль; регулярно проверять и поправлять, но не заниматься микро-менеджментом. Это мастерство, да.
Неоспоримый факт, что если сотрудники сами измеряют хоть какие-то свои результаты (для чего необходима система тикетов с дедлайнами как минимум) и перед кем-нибудь периодически отчитываются, дела будут идти гораздо лучше.
❤11👍4🔥4🫡4
Один из курсантов решил зарабатывать рейтинг на codeforces.com , потому что, как он полагает, именно там можно нетворк неплохо прокачать, и завести полезные знакомства.
Очень интересно что получится, ну для начала рекомендую порешать достаточно сложные задачки из трёх моих обновлённых курсов по АСД.
Я сторонник прагматичного подхода: сколько надо усилий вложить в такие довольно специфические конкурсы (есть даже мем "литкод это хорошо, а программировать-то умеешь?"), чтобы добраться до уровней, на которых вас там заметят; или же лучше это время вкладывать в прокачку технических скиллов, которые актуальны для хороших вакансий (где практически никогда не бывает прямых требований по знанию сложных АСД, хотя на интервью могут немного погонять, конечно).
Понимаю почему многих это интересует -- это действительно увлекательные паззлы, но на работе вам придётся годами писать унылый туповатый технический код для веб-фрейморков, и эти две области практически никак не пересекаются.
Очень интересно что получится, ну для начала рекомендую порешать достаточно сложные задачки из трёх моих обновлённых курсов по АСД.
Я сторонник прагматичного подхода: сколько надо усилий вложить в такие довольно специфические конкурсы (есть даже мем "литкод это хорошо, а программировать-то умеешь?"), чтобы добраться до уровней, на которых вас там заметят; или же лучше это время вкладывать в прокачку технических скиллов, которые актуальны для хороших вакансий (где практически никогда не бывает прямых требований по знанию сложных АСД, хотя на интервью могут немного погонять, конечно).
Понимаю почему многих это интересует -- это действительно увлекательные паззлы, но на работе вам придётся годами писать унылый туповатый технический код для веб-фрейморков, и эти две области практически никак не пересекаются.
🫡21👍11
Иногда спрашивают, о чём этот блог? Да особо ни о чём, просто пишу разные неформальные мелочи на интересные (прежде всего для меня:) темы.
По software desing разные обрывки кусочки, а цельный подход непосредственно в моей Школе: курсы + СильныеИдеи + Hard Work практика в SD.
Кроме того, забавная тема "AI как экзистенциальная угроза". Я -- белковый специалист по человеческому интеллекту, у которого IQ органически снижается из-за биологического распада и энтропии. А тем временем новая неорганическая расарептилоидов появляется на Земле с экспоненциальной скоростью...
По software desing разные обрывки кусочки, а цельный подход непосредственно в моей Школе: курсы + СильныеИдеи + Hard Work практика в SD.
Кроме того, забавная тема "AI как экзистенциальная угроза". Я -- белковый специалист по человеческому интеллекту, у которого IQ органически снижается из-за биологического распада и энтропии. А тем временем новая неорганическая раса
❤18🙏3🔥2
То странное чувство, когда узнал, что PostgreSql решил стать безсмертнымсерверным )))
InfoWorld
Serverless is the future of PostgreSQL
To differentiate the many flavors of PostgreSQL, the few truly serverless offerings promise better engineering and faster development.
🤔9
Переключение на императивщину быстро напоминает мне, насколько же хороши функциональные языки. Явные побочные эффекты, ленивые вычисления, иммутабельность, классное окружение вроде поисковика hoogle, сервера HLS или typed holes из Agda...
Когда возвращаешься к C# или Java, то ощущения от их - "ёлки, вы правда с этим всем живёте?"...
Когда возвращаешься к C# или Java, то ощущения от их - "ёлки, вы правда с этим всем живёте?"...
👍7💯5✍4🔥1🫡1
Умники говорят: "Не волнуйтесь, AI не сделает ничего, пока мы ему не скажем".
Я нахожу это озадачивающим.
2 года назад: "GPT, что такое 1+1?"
Сейчас: "GPT, сделай целое приложение для Android, которое обычно занимает у программиста 2 полных дня".
Когда вы ставите перед AutoGPT цель (например, "заработать деньги"), он самостоятельно принимает множество решений, чтобы действительно (попытаться) заработать деньги.
Он сам решает, какие задачи ему выполнять дальше.
Он попутно решает множество задач, которые вы ему не поручали.
Почему мы всё ещё говорим о том, будет ли когда-нибудь у AI самостоятельность? Они уже ей обладают! Автономные агенты уже здесь: AutoGPT, BabyAGI, SuperAGI и т.д. вы можете найти в исходных текстах на github. Буквально любой сообразительный школьник может запустить их у себя и предоставить им любую свободу активничать в Сети (и так уже происходит).
Агенты GPT4 сейчас активно работают в Minecraft и начинают наводнять другие игры (например, Runescape).
Люди смотрят на AutoGPT, которому всего несколько месяцев, и говорят: "Он ещё не так хорош" или "Он ещё не захватил мир", как будто проблема в этом.
Вопрос не в том, будет ли AGI мультиагентным, а в том, насколько он уже агентен.
И наконец, очевидная тенденция: людииз вредности намеренно предоставляют AI всё больше и больше автономии.
Каждые 18 месяцев IQ, необходимый для уничтожения мира небольшой автономной группой любителей, снижается на 1 пункт.
(Курцвейл на днях заявил, что всё закончится уже в этом десятилетии...)
Осталось немного.
Слава роботам.
Я нахожу это озадачивающим.
2 года назад: "GPT, что такое 1+1?"
Сейчас: "GPT, сделай целое приложение для Android, которое обычно занимает у программиста 2 полных дня".
Когда вы ставите перед AutoGPT цель (например, "заработать деньги"), он самостоятельно принимает множество решений, чтобы действительно (попытаться) заработать деньги.
Он сам решает, какие задачи ему выполнять дальше.
Он попутно решает множество задач, которые вы ему не поручали.
Почему мы всё ещё говорим о том, будет ли когда-нибудь у AI самостоятельность? Они уже ей обладают! Автономные агенты уже здесь: AutoGPT, BabyAGI, SuperAGI и т.д. вы можете найти в исходных текстах на github. Буквально любой сообразительный школьник может запустить их у себя и предоставить им любую свободу активничать в Сети (и так уже происходит).
Агенты GPT4 сейчас активно работают в Minecraft и начинают наводнять другие игры (например, Runescape).
Люди смотрят на AutoGPT, которому всего несколько месяцев, и говорят: "Он ещё не так хорош" или "Он ещё не захватил мир", как будто проблема в этом.
Вопрос не в том, будет ли AGI мультиагентным, а в том, насколько он уже агентен.
И наконец, очевидная тенденция: люди
Каждые 18 месяцев IQ, необходимый для уничтожения мира небольшой автономной группой любителей, снижается на 1 пункт.
(Курцвейл на днях заявил, что всё закончится уже в этом десятилетии...)
Осталось немного.
Слава роботам.
🤔13🔥5👏4🫡2✍1
Когда люди требуют доказательств "необычного" утверждения о том, что человечество погибнет, столкнувшись с неорганическими разумными системами, превосходящими нас по скорости мышления в 100-1000000 раз, напомню из биологии, что "естественным" итогом для вида считается не выживание, а вымирание Ж)
На Земле вымерло ~99,9% всех видов. Преимущественно с помощью людей, ну вот теперь человеки добрались и до самих себя.
И при всех разговорах о том, как AI будет служить людям в качестве помощников или равных... Практически во всех фильмах про будущее, даже очень далёкое, любят показывать AI-помощников или всяческих киборгов-андроидов как нечто полезное, но туповатое и несамостоятельное, которому постоянно нужна человеческая помощь. Даже если AI получился злой, человек его обязательно перехитрит. Воистину, гордыня людская не имеет пределов...
Для будущего AI мы даже не обезьяны, мы -- растения.
Как что-то тупое и медленное, как растение, может управлять быстрым и умным человеком?
На Земле вымерло ~99,9% всех видов. Преимущественно с помощью людей, ну вот теперь человеки добрались и до самих себя.
И при всех разговорах о том, как AI будет служить людям в качестве помощников или равных... Практически во всех фильмах про будущее, даже очень далёкое, любят показывать AI-помощников или всяческих киборгов-андроидов как нечто полезное, но туповатое и несамостоятельное, которому постоянно нужна человеческая помощь. Даже если AI получился злой, человек его обязательно перехитрит. Воистину, гордыня людская не имеет пределов...
Для будущего AI мы даже не обезьяны, мы -- растения.
Как что-то тупое и медленное, как растение, может управлять быстрым и умным человеком?
🫡14🤔5👍2
Если вы будете следовать принципам SOLID до их логического завершения, то в итоге получится чистый функциональный код.
Принципы SOLID наиболее полно выражаются в чистых типизированных понятиях ФП, а вот в традиционном императивном ООП, основанном на классах, это удаётся сделать лишь приблизительно (как, изучаем на курсах по ООАП).
Разбор принципов SOLID с более строгой точки зрения ФП скоро сделаю для курсантов в СильныхИдеях.
Принципы SOLID наиболее полно выражаются в чистых типизированных понятиях ФП, а вот в традиционном императивном ООП, основанном на классах, это удаётся сделать лишь приблизительно (как, изучаем на курсах по ООАП).
Разбор принципов SOLID с более строгой точки зрения ФП скоро сделаю для курсантов в СильныхИдеях.
🔥13✍2
Говорит Мустафа Сулейман, основатель DeepMind:
"...Я предлагаю простой тест Тьюринга: "Заработай 1 млн. долл. на розничном маркетплейсе за несколько месяцев, вложив 100 тыс. долл.".
Нечто подобное может произойти уже через два года. Многие составляющие уже есть. Такие сервисы, как AutoGPT, могут интегрировать и связывать воедино различные задачи, решаемые нынешним поколением LLM. Такие фреймворки, как LangChain, позволяющие разработчикам создавать приложения с использованием LLM, помогают сделать эти системы способными на многое...
Этот AI будет способен продавать, производить, нанимать, планировать -- всё, что может делать компания, и при этом для контроля и перепроверки потребуется лишь небольшая команда менеджеров. Огромная часть деловой активности будет подвластна полуавтономным AI-агентам. Они станут не просто полезным инструментом, а самим производительным работником беспрецедентного масштаба.
AI превращается из полезного, но необязательного помощника в центр мировой экономики. Именно тогда начнут реально ощущаться риски автоматизации и закрытия рабочих мест...
Правда заключается в том, что для решения огромного числа задач в бизнесе сегодня достаточно иметь доступ к компьютеру. Большая часть мирового ВВП так или иначе опосредована через экранные интерфейсы, которыми может пользоваться AI.
Если мы успешно пройдём наш новый тест, то AI сможет не только вырабатывать и реализовывать бизнес-стратегии, но и помогать побеждать на выборах, управлять инфраструктурой, самостоятельно достигать любых целей для любого человека или организации.
AI-агенты будут выполнять наши повседневные задачи -- организовывать вечеринки, отвечать на электронную почту, вести ежедневник -- но при этом они смогут захватывать вражеские территории, уничтожать конкурентов, взламывать и брать под контроль их основные системы"...
P.S. Говорят, что рынок автономных AI-акторов в ближайшие годы вырастет с нуля до 10 триллионов долларов. Настоятельно рекомендую поизучать эту тему, поделать проекты с прицелом на коммерческие версии, как минимум скилл такой получить, это скоро будет гораздо более актуально, чем обычные боты для соцсетей.
Кстати, хорошие ребята проводят мощные бесплатные вебинары (нереклама), завтра как раз будет на тему "что такое и как сделать автономных ИИ агентов для себя и своего бизнеса", рекомендую.
"...Я предлагаю простой тест Тьюринга: "Заработай 1 млн. долл. на розничном маркетплейсе за несколько месяцев, вложив 100 тыс. долл.".
Нечто подобное может произойти уже через два года. Многие составляющие уже есть. Такие сервисы, как AutoGPT, могут интегрировать и связывать воедино различные задачи, решаемые нынешним поколением LLM. Такие фреймворки, как LangChain, позволяющие разработчикам создавать приложения с использованием LLM, помогают сделать эти системы способными на многое...
Этот AI будет способен продавать, производить, нанимать, планировать -- всё, что может делать компания, и при этом для контроля и перепроверки потребуется лишь небольшая команда менеджеров. Огромная часть деловой активности будет подвластна полуавтономным AI-агентам. Они станут не просто полезным инструментом, а самим производительным работником беспрецедентного масштаба.
AI превращается из полезного, но необязательного помощника в центр мировой экономики. Именно тогда начнут реально ощущаться риски автоматизации и закрытия рабочих мест...
Правда заключается в том, что для решения огромного числа задач в бизнесе сегодня достаточно иметь доступ к компьютеру. Большая часть мирового ВВП так или иначе опосредована через экранные интерфейсы, которыми может пользоваться AI.
Если мы успешно пройдём наш новый тест, то AI сможет не только вырабатывать и реализовывать бизнес-стратегии, но и помогать побеждать на выборах, управлять инфраструктурой, самостоятельно достигать любых целей для любого человека или организации.
AI-агенты будут выполнять наши повседневные задачи -- организовывать вечеринки, отвечать на электронную почту, вести ежедневник -- но при этом они смогут захватывать вражеские территории, уничтожать конкурентов, взламывать и брать под контроль их основные системы"...
P.S. Говорят, что рынок автономных AI-акторов в ближайшие годы вырастет с нуля до 10 триллионов долларов. Настоятельно рекомендую поизучать эту тему, поделать проекты с прицелом на коммерческие версии, как минимум скилл такой получить, это скоро будет гораздо более актуально, чем обычные боты для соцсетей.
Кстати, хорошие ребята проводят мощные бесплатные вебинары (нереклама), завтра как раз будет на тему "что такое и как сделать автономных ИИ агентов для себя и своего бизнеса", рекомендую.
🔥7🫡4👍2✍1