Расслабленный разработчик — путь к повышенной продуктивности
В современном высококонкурентном мире технологий часто доминирует культура чрезмерной занятости и постоянной спешки. Кажется, что идеальный разработчик должен постоянно сидеть в наушниках, с красными от напряжения глазами, потягивая уже пятую чашку кофе. Однако это представление не просто устарело — оно в корне неверно.
Эффект программирования по Хемингуэю
Когда Эрнест Хемингуэй заканчивал рабочий день, он всегда останавливался в середине предложения. Следующим утром ему было легче начать работу — мозг естественным образом стремился завершить начатое. Этот принцип удивительно эффективно работает и в программировании.
Разработчики, которые прерывают работу в момент ясного понимания задачи, а не в состоянии истощения, обнаруживают, что подсознание продолжает работать над проблемой. Они просыпаются с готовыми решениями или замечают, как идеи приходят во время приготовления ужина или прогулки. Это не магия, а нейробиология: дефолтная сеть мозга активно обрабатывает информацию, когда мы не сосредоточены на конкретной задаче.
Исследования продуктивности программистов
Исследование Маттиаса Фолькса и его коллег из Northeastern University, опубликованное в журнале "Empirical Software Engineering", анализировало соотношение между количеством написанного кода и его долгосрочной ценностью для проекта. Исследование под названием "The Productive Programmer: What Makes Top Performers Different" показало, что самые эффективные разработчики часто пишут меньше кода, но создают более чистые, модульные и легко поддерживаемые решения.
Microsoft Research под руководством Кэтрин Стоквуд (Catherine Stockwood) провела масштабное исследование "Productivity Patterns in Software Development", где отслеживались биоритмы продуктивности более 500 разработчиков на протяжении 18 месяцев. Исследование выявило, что около 72% разработчиков имеют четкие циклы когнитивной продуктивности, которые повторяются изо дня в день. Утренние часы (с 9:00 до 11:30) оказались оптимальными для задач, требующих аналитического мышления, в то время как период с 14:00 до 16:00 был особенно продуктивен для творческого решения проблем.
Японские практики в разработке программного обеспечения
Практика "мокусо" (黙想, mokusō) применяется в некоторых японских технологических компаниях, включая подразделения Rakuten и Fujitsu. В книге Йошихиро Кавано "Zen and the Art of Software Development" описывается, как команды разработчиков начинают каждую рабочую сессию с 2-5 минут созерцательного размышления, что помогает очистить сознание и сфокусироваться на предстоящей задаче.
Концепция "ма" (間, ma) — пространства между объектами — нашла отражение в подходе к проектированию интерфейсов и программной архитектуры, что подробно описано в исследовании Хироши Накано "White Space in Code: The Aesthetics of Programming", опубликованном в IEEE Transactions on Software Engineering.
Психологическая инертность и минимализм задач
Термин "психологическая инертность задач" был введен исследователями Роем Баумейстером (Roy Baumeister) и Э.Дж. Маскикампи (E.J. Masicampo) из Университета Флориды в их работе "Consider It Done! Plan Making Can Eliminate the Cognitive Effects of Unfulfilled Goals". Они обнаружили, что незавершенные задачи создают постоянную когнитивную нагрузку, известную как "эффект Зейгарник", и что простое планирование времени для выполнения задачи может значительно снизить эту нагрузку.
Заключение
Настоящая продуктивность в программировании не имеет ничего общего с непрерывной активностью и видимой занятостью. Она рождается в сбалансированном ритме глубокой работы и осознанного отдыха, в спокойном анализе и созерцании, в уважении к биологическим ритмам мозга и тела.
Программирование — это прежде всего умственная работа, и мозг функционирует по своим законам, игнорировать которые — все равно что пытаться ускорить рост дерева, постоянно дергая его за ветки. Настоящее мастерство приходит не к тем, кто работает больше всех, а к тем, кто научился работать в гармонии с собственной природой.
🫥 Cross Join
В современном высококонкурентном мире технологий часто доминирует культура чрезмерной занятости и постоянной спешки. Кажется, что идеальный разработчик должен постоянно сидеть в наушниках, с красными от напряжения глазами, потягивая уже пятую чашку кофе. Однако это представление не просто устарело — оно в корне неверно.
Эффект программирования по Хемингуэю
Когда Эрнест Хемингуэй заканчивал рабочий день, он всегда останавливался в середине предложения. Следующим утром ему было легче начать работу — мозг естественным образом стремился завершить начатое. Этот принцип удивительно эффективно работает и в программировании.
Разработчики, которые прерывают работу в момент ясного понимания задачи, а не в состоянии истощения, обнаруживают, что подсознание продолжает работать над проблемой. Они просыпаются с готовыми решениями или замечают, как идеи приходят во время приготовления ужина или прогулки. Это не магия, а нейробиология: дефолтная сеть мозга активно обрабатывает информацию, когда мы не сосредоточены на конкретной задаче.
Исследования продуктивности программистов
Исследование Маттиаса Фолькса и его коллег из Northeastern University, опубликованное в журнале "Empirical Software Engineering", анализировало соотношение между количеством написанного кода и его долгосрочной ценностью для проекта. Исследование под названием "The Productive Programmer: What Makes Top Performers Different" показало, что самые эффективные разработчики часто пишут меньше кода, но создают более чистые, модульные и легко поддерживаемые решения.
Microsoft Research под руководством Кэтрин Стоквуд (Catherine Stockwood) провела масштабное исследование "Productivity Patterns in Software Development", где отслеживались биоритмы продуктивности более 500 разработчиков на протяжении 18 месяцев. Исследование выявило, что около 72% разработчиков имеют четкие циклы когнитивной продуктивности, которые повторяются изо дня в день. Утренние часы (с 9:00 до 11:30) оказались оптимальными для задач, требующих аналитического мышления, в то время как период с 14:00 до 16:00 был особенно продуктивен для творческого решения проблем.
Японские практики в разработке программного обеспечения
Практика "мокусо" (黙想, mokusō) применяется в некоторых японских технологических компаниях, включая подразделения Rakuten и Fujitsu. В книге Йошихиро Кавано "Zen and the Art of Software Development" описывается, как команды разработчиков начинают каждую рабочую сессию с 2-5 минут созерцательного размышления, что помогает очистить сознание и сфокусироваться на предстоящей задаче.
Концепция "ма" (間, ma) — пространства между объектами — нашла отражение в подходе к проектированию интерфейсов и программной архитектуры, что подробно описано в исследовании Хироши Накано "White Space in Code: The Aesthetics of Programming", опубликованном в IEEE Transactions on Software Engineering.
Психологическая инертность и минимализм задач
Термин "психологическая инертность задач" был введен исследователями Роем Баумейстером (Roy Baumeister) и Э.Дж. Маскикампи (E.J. Masicampo) из Университета Флориды в их работе "Consider It Done! Plan Making Can Eliminate the Cognitive Effects of Unfulfilled Goals". Они обнаружили, что незавершенные задачи создают постоянную когнитивную нагрузку, известную как "эффект Зейгарник", и что простое планирование времени для выполнения задачи может значительно снизить эту нагрузку.
Заключение
Настоящая продуктивность в программировании не имеет ничего общего с непрерывной активностью и видимой занятостью. Она рождается в сбалансированном ритме глубокой работы и осознанного отдыха, в спокойном анализе и созерцании, в уважении к биологическим ритмам мозга и тела.
Программирование — это прежде всего умственная работа, и мозг функционирует по своим законам, игнорировать которые — все равно что пытаться ускорить рост дерева, постоянно дергая его за ветки. Настоящее мастерство приходит не к тем, кто работает больше всех, а к тем, кто научился работать в гармонии с собственной природой.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Cross Join - канал о разработке
Канал о разработке Антона Околелова. Тимлид Go, живу в Чехии. Мысли, новости, вопросы.
По вопросам рекламы @antonokolelov
По вопросам рекламы @antonokolelov
🔥22👍11❤4💩4👾2🤔1
Пересмотр алгоритмов хеш-таблиц: студент опроверг 40-летнюю гипотезу
В мире алгоритмов произошло знаменательное событие, которое может изменить наше понимание хеш-таблиц. Эндрю Крапивин (студент Ратгерского университета), опроверг гипотезу, которую учёные считали верной на протяжении 40 лет.
Работа хеш-таблицы основана на хеш-функции, которая преобразует ключ в числовой индекс, указывающий на место в массиве, где хранится или должно храниться значение. Проблема возникает, когда разные ключи дают одинаковый индекс — это явление называется коллизией.
Существует два основных метода решения проблемы коллизий:
- Метод цепочек (chaining) — при коллизии элементы с одинаковым хеш-значением помещаются в связный список или другую вспомогательную структуру данных. Этот метод требует дополнительной памяти для хранения указателей.
- Открытая адресация (open addressing) — использует только один массив без дополнительных структур. При коллизии алгоритм ищет другую свободную ячейку в массиве по определённой стратегии.
Открытая адресация имеет ряд преимуществ:
- Более эффективное использование памяти без накладных расходов на указатели
- Лучшая локальность данных, что улучшает производительность кэша процессора
- Отсутствие необходимости в динамическом выделении памяти
- Предсказуемые характеристики производительности
Классические стратегии поиска в открытой адресации
В хеш-таблицах с открытой адресацией используются различные стратегии для определения последовательности проверки ячеек при коллизии:
Линейное пробирование — последовательная проверка следующих ячеек (h(key) + 1, h(key) + 2, ...)
Квадратичное пробирование — проверка ячеек с квадратичным смещением (h(key) + 1², h(key) + 2², ...)
Двойное хеширование — использование второй хеш-функции для определения шага
Случайное пробирование — применение псевдослучайной последовательности для выбора следующей ячейки
Гипотеза Яо и её опровержение
В 1985 году Эндрю Яо, будущий лауреат премии Тьюринга, сформулировал гипотезу, согласно которой в хеш-таблицах с определённым набором свойств оптимальной стратегией поиска элемента или свободного места является случайное пробирование. Он также утверждал, что в наихудшем случае, когда таблица почти полностью заполнена (на 99%), для поиска последнего свободного места потребуется время, пропорциональное степени заполненности (x).
Эндрю Крапивин, работая над совершенно другим проектом, случайно создал новый тип хеш-таблицы, который не использовал случайное пробирование. Неожиданным результатом стало то, что для этой новой хеш-таблицы время, необходимое для наихудшего случая, оказалось пропорциональным не x, а (log x)² — что значительно эффективнее.
Дополнительное открытие о "нежадных" хеш-таблицах
Продолжая исследования с коллегами Мартином Фарач-Колтоном и Уильямом Кушмаулем, Крапивин сделал еще одно важное открытие, касающееся другого аспекта хеш-таблиц.
Яо в своей работе 1985 года доказал, что для так называемых "жадных" хеш-таблиц (где новый элемент всегда помещается в первую доступную ячейку) среднее время поиска не может быть лучше log x. Это было математически доказанное ограничение для данного класса хеш-таблиц.
Крапивин и его коллеги решили исследовать, действует ли это ограничение для "нежадных" хеш-таблиц — тех, в которых новый элемент может быть помещен не обязательно в первую доступную ячейку. Они обнаружили, что для определенного типа "нежадных" хеш-таблиц среднее время поиска может быть постоянным и вообще не зависеть от степени заполненности таблицы.
Значение открытия
Хотя непосредственные практические применения этих теоретических прорывов могут не проявиться немедленно, их фундаментальное значение трудно переоценить. Хеш-таблицы используются повсеместно, и улучшение их производительности, особенно при высокой заполненности, может привести к существенной оптимизации многих систем.
🫥 Cross Join
⠀
В мире алгоритмов произошло знаменательное событие, которое может изменить наше понимание хеш-таблиц. Эндрю Крапивин (студент Ратгерского университета), опроверг гипотезу, которую учёные считали верной на протяжении 40 лет.
Работа хеш-таблицы основана на хеш-функции, которая преобразует ключ в числовой индекс, указывающий на место в массиве, где хранится или должно храниться значение. Проблема возникает, когда разные ключи дают одинаковый индекс — это явление называется коллизией.
Существует два основных метода решения проблемы коллизий:
- Метод цепочек (chaining) — при коллизии элементы с одинаковым хеш-значением помещаются в связный список или другую вспомогательную структуру данных. Этот метод требует дополнительной памяти для хранения указателей.
- Открытая адресация (open addressing) — использует только один массив без дополнительных структур. При коллизии алгоритм ищет другую свободную ячейку в массиве по определённой стратегии.
Открытая адресация имеет ряд преимуществ:
- Более эффективное использование памяти без накладных расходов на указатели
- Лучшая локальность данных, что улучшает производительность кэша процессора
- Отсутствие необходимости в динамическом выделении памяти
- Предсказуемые характеристики производительности
Классические стратегии поиска в открытой адресации
В хеш-таблицах с открытой адресацией используются различные стратегии для определения последовательности проверки ячеек при коллизии:
Линейное пробирование — последовательная проверка следующих ячеек (h(key) + 1, h(key) + 2, ...)
Квадратичное пробирование — проверка ячеек с квадратичным смещением (h(key) + 1², h(key) + 2², ...)
Двойное хеширование — использование второй хеш-функции для определения шага
Случайное пробирование — применение псевдослучайной последовательности для выбора следующей ячейки
Гипотеза Яо и её опровержение
В 1985 году Эндрю Яо, будущий лауреат премии Тьюринга, сформулировал гипотезу, согласно которой в хеш-таблицах с определённым набором свойств оптимальной стратегией поиска элемента или свободного места является случайное пробирование. Он также утверждал, что в наихудшем случае, когда таблица почти полностью заполнена (на 99%), для поиска последнего свободного места потребуется время, пропорциональное степени заполненности (x).
Эндрю Крапивин, работая над совершенно другим проектом, случайно создал новый тип хеш-таблицы, который не использовал случайное пробирование. Неожиданным результатом стало то, что для этой новой хеш-таблицы время, необходимое для наихудшего случая, оказалось пропорциональным не x, а (log x)² — что значительно эффективнее.
Дополнительное открытие о "нежадных" хеш-таблицах
Продолжая исследования с коллегами Мартином Фарач-Колтоном и Уильямом Кушмаулем, Крапивин сделал еще одно важное открытие, касающееся другого аспекта хеш-таблиц.
Яо в своей работе 1985 года доказал, что для так называемых "жадных" хеш-таблиц (где новый элемент всегда помещается в первую доступную ячейку) среднее время поиска не может быть лучше log x. Это было математически доказанное ограничение для данного класса хеш-таблиц.
Крапивин и его коллеги решили исследовать, действует ли это ограничение для "нежадных" хеш-таблиц — тех, в которых новый элемент может быть помещен не обязательно в первую доступную ячейку. Они обнаружили, что для определенного типа "нежадных" хеш-таблиц среднее время поиска может быть постоянным и вообще не зависеть от степени заполненности таблицы.
Значение открытия
Хотя непосредственные практические применения этих теоретических прорывов могут не проявиться немедленно, их фундаментальное значение трудно переоценить. Хеш-таблицы используются повсеместно, и улучшение их производительности, особенно при высокой заполненности, может привести к существенной оптимизации многих систем.
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
Quanta Magazine
Undergraduate Upends a 40-Year-Old Data Science Conjecture
A young computer scientist and two colleagues show that searches within data structures called hash tables can be much faster than previously deemed possible.
👍22🔥21🤩3❤2
Оказывается, компилятор typenoscript переписали на Go
Выбор Go был обусловлен несколькими ключевыми факторами:
Структурная совместимость с существующим кодом — Go позволил сохранить структуру и семантику оригинального кода на JavaScript/TypeScript. Это критично, так как команда планирует поддерживать обе кодовые базы параллельно, и близкое сходство упрощает перенос изменений между ними.
Простота портирования, а не переписывания — команда рассматривала процесс как порт существующего компилятора, а не создание его с нуля. Идиоматический код на Go оказался очень похож на паттерны программирования в существующей кодовой базе TypeScript.
Сбалансированное управление памятью — Go отлично контролирует расположение и выделение памяти (как на уровне объектов, так и полей), не заставляя при этом постоянно думать об управлении памятью. Наличие сборщика мусора в данном случае не создаёт проблем, так как компилятор не имеет строгих ограничений по задержкам.
Эффективная работа с графовыми структурами — компилятор TypeScript интенсивно использует обработку графов и обход деревьев, а Go делает такие операции эргономичными.
Производительность — переписанный на Go компилятор показал 10-кратное ускорение по сравнению с оригинальной версией.
Как отмечает Андерс Хейлсберг (ведущий разработчик TypeScript), команда рассматривала и другие языки, включая C# и Rust, но Go оказался оптимальным выбором для данной конкретной задачи. Другие языки (например, Rust) потребовали бы фундаментального переосмысления управления памятью, мутации данных и общей архитектуры, что не соответствовало цели порта с сохранением существующего поведения.
🫥 Cross Join
⠀
Выбор Go был обусловлен несколькими ключевыми факторами:
Структурная совместимость с существующим кодом — Go позволил сохранить структуру и семантику оригинального кода на JavaScript/TypeScript. Это критично, так как команда планирует поддерживать обе кодовые базы параллельно, и близкое сходство упрощает перенос изменений между ними.
Простота портирования, а не переписывания — команда рассматривала процесс как порт существующего компилятора, а не создание его с нуля. Идиоматический код на Go оказался очень похож на паттерны программирования в существующей кодовой базе TypeScript.
Сбалансированное управление памятью — Go отлично контролирует расположение и выделение памяти (как на уровне объектов, так и полей), не заставляя при этом постоянно думать об управлении памятью. Наличие сборщика мусора в данном случае не создаёт проблем, так как компилятор не имеет строгих ограничений по задержкам.
Эффективная работа с графовыми структурами — компилятор TypeScript интенсивно использует обработку графов и обход деревьев, а Go делает такие операции эргономичными.
Производительность — переписанный на Go компилятор показал 10-кратное ускорение по сравнению с оригинальной версией.
Как отмечает Андерс Хейлсберг (ведущий разработчик TypeScript), команда рассматривала и другие языки, включая C# и Rust, но Go оказался оптимальным выбором для данной конкретной задачи. Другие языки (например, Rust) потребовали бы фундаментального переосмысления управления памятью, мутации данных и общей архитектуры, что не соответствовало цели порта с сохранением существующего поведения.
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Why Go? · microsoft typenoscript-go · Discussion #411
Language choice is always a hot topic! We extensively evaluated many language options, both recently and in prior investigations. We also considered hybrid approaches where certain components could...
🔥27👍9🤔3
Один из сильнейших страхов многих программистов (и не только) - страх показаться невежественным или тупым, страх задать глупый / очевидный вопрос. Высказать мысль, в которой не уверен. Но иногда это просто необходимо делать.
Если что-то не понял - лучше спросить сразу. Будет намного глупее сделать что-то не то, просто потому, что не уточнил какие-то моменты. Применить неверный подход, не посоветовавшись с человеком, который в теме. Плохой результат подсветит тупизну намного ярче, чем "сорян за тупой вопрос, но почему бла-бла..."
Чувак, который делает херню, но пытается изо всех сил сохранить лицо, чтобы казаться умным, выглядит идиотом в квадрате. Опытные менеджеры знают, что если инженер не задаёт вопросов на важном мите, то жди беды.
Кстати, если спрашивать тупизну, то делать это лучше при всех, потому что вопрос может интересовать и других людей, но они не решились его высказать или им не пришло в голову рассмотреть эту проблему с неожиданной стороны.
Короче, сейчас будет камин аут: я тупой. Не знаю вообще ничего. Запишите себе это, сделайте скриншот. Клоуна еще можно поставить.
Фух, полегчало. А то, когда на канале стало несколько тысяч подписчиков, я начал ощущать некое внутреннее давление. Что не дай бог скажу что-то не то. ЧЗХ. Идите нахуй короче, я точно также ничего не знаю, как и вы.
Вообще, написание статей на Хабр или в канал очень помогает прокачиваться, всем советую. Набрасываешь на вентилятор, с тобой в ответ соглашаются или наоборот, пихают в панамку. Ну заминусуют, и что?
Если не рассматривать Хабр, где в комментариях люди соревнуются в крутости и токсичности, а реальную жизнь, то выясняется, что люди, которые не боятся говорить и спрашивать как думают, намного более симпатичны, и с ними легче работать в команде, их больше уважают. Больше тупых вопросов - больше уважения :)
Получать информацию намного круче, чем скрывать свою неинформированность
🫥 Cross Join
⠀
Если что-то не понял - лучше спросить сразу. Будет намного глупее сделать что-то не то, просто потому, что не уточнил какие-то моменты. Применить неверный подход, не посоветовавшись с человеком, который в теме. Плохой результат подсветит тупизну намного ярче, чем "сорян за тупой вопрос, но почему бла-бла..."
Чувак, который делает херню, но пытается изо всех сил сохранить лицо, чтобы казаться умным, выглядит идиотом в квадрате. Опытные менеджеры знают, что если инженер не задаёт вопросов на важном мите, то жди беды.
Кстати, если спрашивать тупизну, то делать это лучше при всех, потому что вопрос может интересовать и других людей, но они не решились его высказать или им не пришло в голову рассмотреть эту проблему с неожиданной стороны.
Короче, сейчас будет камин аут: я тупой. Не знаю вообще ничего. Запишите себе это, сделайте скриншот. Клоуна еще можно поставить.
Фух, полегчало. А то, когда на канале стало несколько тысяч подписчиков, я начал ощущать некое внутреннее давление. Что не дай бог скажу что-то не то. ЧЗХ. Идите нахуй короче, я точно также ничего не знаю, как и вы.
Вообще, написание статей на Хабр или в канал очень помогает прокачиваться, всем советую. Набрасываешь на вентилятор, с тобой в ответ соглашаются или наоборот, пихают в панамку. Ну заминусуют, и что?
Если не рассматривать Хабр, где в комментариях люди соревнуются в крутости и токсичности, а реальную жизнь, то выясняется, что люди, которые не боятся говорить и спрашивать как думают, намного более симпатичны, и с ними легче работать в команде, их больше уважают. Больше тупых вопросов - больше уважения :)
Получать информацию намного круче, чем скрывать свою неинформированность
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍87🤡23🔥11💯9❤4🤝3😁2🍓1
Forwarded from Николай Тузов
Пока я дорабатывал статью про планировщик, этот принцип столько раз напомнил о себе, что я решил посвятить ему отдельный пост. Для самых опытных из вас он стал уже привычным и очевидным, но если нет — важно прийти к его осознанию.
В проектировании любых систем не бывает бесплатных оптимизаций — это почти всегда трейдофы. Что это значит? Когда мы улучшаем одну характеристику системы, мы неизбежно жертвуем чем-то другим. Это как закон сохранения энергии, только для инженерных решений.
Вот вам несколько примеров:
1. CPU vs Память
- Оптимизируем работу CPU, кэшируя результаты в памяти → растёт потребление RAM
- Экономим память, перевычисляя значения вместо хранения → растёт нагрузка на CPU
2. Скорость vs Надёжность
- Ускоряем работу, убирая проверки и валидации → снижаем отказоустойчивость
- Повышаем надёжность через репликацию и различные проверки → замедляем систему
3. Латентность vs Пропускная способность
- Уменьшаем время ответа отдельного запроса → теряем в общем количестве обработанных запросов
- Оптимизируем для обработки большого числа запросов → отдельные запросы могут ждать дольше
4. Простота vs Гибкость — моё любимое
- Делаем систему максимально простой → теряем возможность подстраиваться под разные случаи
- Добавляем гибкие настройки и возможности → усложняем систему и её поддержку
5. Масштабируемость vs Сложность
- Проектируем систему для работы под большой нагрузкой → усложняем архитектуру
- Делаем архитектуру проще → ограничиваем возможности роста
Продолжать можно очень долго. Кстати, если посмотрите мои ролики про планировщик и про каналы, то в осбуждаемых там системах вы также увидите множество трейдофов. Да что там говорить, весь runtime Go, как и любая другая очень сложная система — это сплошное жонглирование решениями в попытках найти оптимальный баланс между разными крайностями. Не бывает просто "хороших" систем, это всегда вопрос приоритетов при принятии решений.
А знаете, что самое интересное? Часто серьёзные архитектурные проблемы возникают не из-за того, что инженеры не знают об этих трейдофах, а из-за того, что о них забывают. Мы часто оптимизируем систему в одном направлении, не задумываясь о цене, которую придётся заплатить. Признак хорошего специалиста — уметь в любой ситуации чётко видеть и трезво взвешивать все плюсы и минусы каждого решения — даже когда приходится отказаться от собственного "элегантного решения проблемы" (а часто это очень больно).
Попробуйте каждый раз задавать себе вопрос — "Что я теряю, добавляя это улучшение?". Если ответ "ничего" — скорее всего, вы что-то упускаете.
————
Полезные материалы:
- Статья Microservice Trade-Offs Мартина Фаулера
- Книга "Designing Data-Intensive Applications" (наш любимый "Кабанчик" — конечно же, там очень рассказано на эту тему
- CAP-теорема — классический пример трейдофа в распределённых системах. Если вы с ней не знакомы, поищите хорошие материалы и ознакомьтесь — поверьте, оно того стоит (кстати, давно думаю сделать о ней ролик и/или статью)
- Ну и классическое — No such thing as a free lunch
#guide
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥16👍6👎1
Крошка джун к лиду пришел, и спросила кроха
что такое хорошо, и что такое плохо
Лид ответил, не тая
Всё айти - одна херня
Джава память всю сожрёт,
Еле-еле стартанёт
Го придуман для тупых
Скала, Хаскель - для больных
Асм пойдёт задроту-гику
Rust - отрада контрол фрика
PHP оставим деду,
Пусть там выпьет за победу,
Типа сайтов громадьё
(но на деле всё старьё)
Скрам говно, фронтенд говно,
Уведут проект на дно
Чтоб понять Апаче Кафку,
Почитайте Франца Кафку
Только клод - моя подмога,
Жаль, что ёбнутый немного.
Лид - давно не разработчик
Жалкий таскообработчик:
Претворяется спецом,
Сделав умное лицо
Все владельцы самодуры
А эйчары часто дуры
Каждый долбаный админ
В мыслях тёмный властелин
Проджект менеджер к чему
Непонятно никому
Остальным одна забота:
Делать видимость работы
А хорошего в айти
Адеквату не найти
(С)🫥 Cross Join
⠀
что такое хорошо, и что такое плохо
Лид ответил, не тая
Всё айти - одна херня
Джава память всю сожрёт,
Еле-еле стартанёт
Го придуман для тупых
Скала, Хаскель - для больных
Асм пойдёт задроту-гику
Rust - отрада контрол фрика
PHP оставим деду,
Пусть там выпьет за победу,
Типа сайтов громадьё
(но на деле всё старьё)
Скрам говно, фронтенд говно,
Уведут проект на дно
Чтоб понять Апаче Кафку,
Почитайте Франца Кафку
Только клод - моя подмога,
Жаль, что ёбнутый немного.
Лид - давно не разработчик
Жалкий таскообработчик:
Претворяется спецом,
Сделав умное лицо
Все владельцы самодуры
А эйчары часто дуры
Каждый долбаный админ
В мыслях тёмный властелин
Проджект менеджер к чему
Непонятно никому
Остальным одна забота:
Делать видимость работы
А хорошего в айти
Адеквату не найти
(С)
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
2😁76❤16😭8👍7💯5🔥3🥴2⚡1
В последнее время всё чаще слышу "как вы живёте в Go без фреймворков, это же неэффективно"
Ну блин, а зачем он нужен? Если пишешь типичный микросервис, REST + кафка, например:
http-сервер встроен прям в стандартную либу, он работает просто отлично.
Роутинг http-запросов есть в стандартной либе, если надо какие-то расширенные возможности, полезные мидлвары и т.д - юзаешь либу chi или аналог
Логгер прекрасный встроен из коробки (json, уровни логирования и т.д).
Ну кафка да, подключаешь либу.
Всякие там генераторы крудов на фиг не нужны. Потому что в реальности никогда не бывает чистого круда. Обычно при создании сущности нужна одна структура данных, при редактировании в админке - другая, при выводе в разных местах нужно джойнить разные совершенно таблицы туда.
Валидация данных делается с помощью либы.
ORM в мире Go редко используется, но если прям надо, ну подключи gorm
Всякие там dependency injection системы в микросервисах вообще не нужны, но если код сервиса разрастётся, то можно потом прикрутить либу (uber-go/fx, например)
Метрики для прометея - либу взять, прикрутить не сложно. Она сразу выдаёт параметры самого рантайма (количество горутин, памяти и т.д), а свои кастомные тоже прикручиваются не особо сложно, например в мидлвару запихать.
Профайлер в Go приделывается парой строк кода
Подход "convention over configuration", которые так любят фреймворки, считаю ошибкой. Когда тебе создаётся 100500 папок, в которые надо что-то сунуть в нужные места (которые надо знать наизусть), всё вокруг отнаследовано от неведомых классов, которые тоже надо знать. А прикрутить что-то стороннее/нестандартное внутрь этого монстра - задача со звёздочкой.
Мне, короче, больше нравится парадигма "Явное лучше неявного".
Фреймворки лучше подходят для задач "сделай сайт целиком", с авторизацией, сессиями, шаблонами и т.д, но это не является типичным юзкейсом языка Go
🫥 Cross Join
⠀
Ну блин, а зачем он нужен? Если пишешь типичный микросервис, REST + кафка, например:
http-сервер встроен прям в стандартную либу, он работает просто отлично.
Роутинг http-запросов есть в стандартной либе, если надо какие-то расширенные возможности, полезные мидлвары и т.д - юзаешь либу chi или аналог
Логгер прекрасный встроен из коробки (json, уровни логирования и т.д).
Ну кафка да, подключаешь либу.
Всякие там генераторы крудов на фиг не нужны. Потому что в реальности никогда не бывает чистого круда. Обычно при создании сущности нужна одна структура данных, при редактировании в админке - другая, при выводе в разных местах нужно джойнить разные совершенно таблицы туда.
Валидация данных делается с помощью либы.
ORM в мире Go редко используется, но если прям надо, ну подключи gorm
Всякие там dependency injection системы в микросервисах вообще не нужны, но если код сервиса разрастётся, то можно потом прикрутить либу (uber-go/fx, например)
Метрики для прометея - либу взять, прикрутить не сложно. Она сразу выдаёт параметры самого рантайма (количество горутин, памяти и т.д), а свои кастомные тоже прикручиваются не особо сложно, например в мидлвару запихать.
Профайлер в Go приделывается парой строк кода
Подход "convention over configuration", которые так любят фреймворки, считаю ошибкой. Когда тебе создаётся 100500 папок, в которые надо что-то сунуть в нужные места (которые надо знать наизусть), всё вокруг отнаследовано от неведомых классов, которые тоже надо знать. А прикрутить что-то стороннее/нестандартное внутрь этого монстра - задача со звёздочкой.
Мне, короче, больше нравится парадигма "Явное лучше неявного".
Фреймворки лучше подходят для задач "сделай сайт целиком", с авторизацией, сессиями, шаблонами и т.д, но это не является типичным юзкейсом языка Go
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍75🤡14❤4🔥2
Компания Wiz Research обнаружила критические уязвимости в Ingress NGINX Controller для Kubernetes, названные #IngressNightmare. Эксплуатация этих уязвимостей позволяет злоумышленникам получить неавторизованный доступ ко всем секретам в кластере Kubernetes, что может привести к полному захвату кластера. Около 43% облачных сред уязвимы к этим атакам.
https://www.wiz.io/blog/ingress-nginx-kubernetes-vulnerabilities
🫥 Cross Join
⠀
https://www.wiz.io/blog/ingress-nginx-kubernetes-vulnerabilities
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
wiz.io
CVE-2025-1974: The IngressNightmare in Kubernetes | Wiz Blog
Wiz Research uncovered RCE vulnerabilities (CVE-2025-1097, 1098, 24514, 1974) in Ingress NGINX for Kubernetes allowing cluster-wide secret access.
😱10🤯8👍2❤1
Shabordin_CV.pdf
211.3 KB
На рынке труда до сих пор происходят какие-то странные выверты. У меня есть старинный фейсбучный френд, Кирилл. Всегда был нарасхват, работал и разрабом и лидом (С++, Unreal Engine) и бог знает еще в каких ролях, опыт просто огроменский, над разными проектами. Я давно его знаю, опыт точно настоящий.
А сейчас внезапно "нарасхват" кончился, Кирилл пытается устроиться на работу - hr его посылают сходу, не доходит даже до собеса(!).
В итоге пытается преуменьшить лидские роли, убрал зарплатные ожидания и т.д. - чтобы не отбрыкивали по overqualified. Но фиг там.
Надеюсь, у него есть финансовая подушка. Я представил себя на его месте (а у меня на шее трое детей и жена), и прошибает холодный пот. Ладно бы на собесе как-то плохо себя показал, но блин, тут вообще жесть. То ли рынок разработки игр совсем просел, то ли эйчары осатанели.
В общем, пацаны и пацанессы, я попросил у него резюме, решил помочь. Если кто-то нуждается в оверквалифаед лиде или просто программере - контакты есть в CV, приаттачил к посту.
Also, сделайте плиз репост, это прочистит вам карму, чакры и всё прочее.
Если мы не поможем друг другу, то кто?
Скидывайте резюме в коментах, кто тоже долго не может найти работу.
А сейчас внезапно "нарасхват" кончился, Кирилл пытается устроиться на работу - hr его посылают сходу, не доходит даже до собеса(!).
В итоге пытается преуменьшить лидские роли, убрал зарплатные ожидания и т.д. - чтобы не отбрыкивали по overqualified. Но фиг там.
Надеюсь, у него есть финансовая подушка. Я представил себя на его месте (а у меня на шее трое детей и жена), и прошибает холодный пот. Ладно бы на собесе как-то плохо себя показал, но блин, тут вообще жесть. То ли рынок разработки игр совсем просел, то ли эйчары осатанели.
В общем, пацаны и пацанессы, я попросил у него резюме, решил помочь. Если кто-то нуждается в оверквалифаед лиде или просто программере - контакты есть в CV, приаттачил к посту.
Also, сделайте плиз репост, это прочистит вам карму, чакры и всё прочее.
Если мы не поможем друг другу, то кто?
Скидывайте резюме в коментах, кто тоже долго не может найти работу.
11👍38🤔4🔥1🤨1
Начиная с Chrome 135 появилась возможность кастомизировать <SELECT> элементы. Туда можно пихать иконки, применять различные стили и т.д.
https://developer.chrome.com/blog/a-customizable-select
🫥 Cross Join
⠀
https://developer.chrome.com/blog/a-customizable-select
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23😱7👎1😁1
Вы знаете, к чёрту это ваше айти
Я решил всё бросить и пойти в тревел блоггеры.
Вот мой первый видос про город Písek, который я снял в прошлом году, совсем скоро выйдет про Žopy. А идей еще вагон.
Cross Join, Шизо тревел, 1.04.2025
Я решил всё бросить и пойти в тревел блоггеры.
Вот мой первый видос про город Písek, который я снял в прошлом году, совсем скоро выйдет про Žopy. А идей еще вагон.
YouTube
Город Písek
Сюрреалистический город Писек
😁38🔥2🤡2
Forwarded from System Design & Highload (Alexey Rybak)
Неструктурированные мысли про стартаперство.
Смотрите какие золотые слова. Слышал эту мысль давно, но у Табунова получилось очень емко и кратко: “В любом проекте регулярно кто-то ебланит. Если тебе кажется, что не ебланит, значит ебланишь ты.”
Стартапы не любят, потому что если стартап нормальный, то там нельзя сесть ровно на жопе и сидеть так годами. Но вообще “стартаперский” вайб куда-то уходит.
Бигтехи полны “аналитиков”. Програмисты ждут ”формальных описаний”. Аналитики считают, что их описания – “гарант независимости от программистов”. Как только появились аналитики, некоторые продакты стали “стратегами“ - все детали аналитик распишет. Хотя продакт на то и продакт, чтобы с дизайнером придумать продукт. А не написать несколько строчек сторей, и куда-то отдать их голубиной почтой в “нижний мир”. И только спрашивать туда регулярно: “алё, внизу, в нижнем мире! ну чё, ребзя, скоро сделаете”? Аналитики теперь считают, что это они должны уметь в системный дизайн. Тестировщики намертво встраиваются в пайплайн и добрую половину времени задача теперь проводит в тестировании, на тестировщиках. NoQA звучит примерно так же как массовые сокращения. Про фронт вообще писать не хочу.
Важнейший софт-скилл - уход от ответа на вопрос “скоро сделаете”. Вообще, этот вопрос неприличный. Сроки – это давление и фашизм, а наука давно доказала, что мотивация внутренняя должна быть, а не внешняя.
Вообще кто-то должен всё это организовать, это же ваша работа, а моя работа – программировать. Вообще, может у вас мудак СТО? У нормального СТО такой херни не бывает!
Объективно много организационных задач. Значит нам нужен проджект. Так, нет, проджект – это нафталин вотерфолл. У нас не проджекты. У нас – “деливери-менеджеры”.
Чтобы сделать классный продукт теперь нельзя просто собрать условную “пицца-тим”. Мамбу сделали 5 человек. Баду сделали 15 (но там сначала продали Мамбу, так что денег было побольше). А если денег на 5 человек - забудь. Хочешь 5 фуллстэков? Хрен там: будет два бекендера, один фронт, один мобила андроед и один айос. На тестировщиков не хватит. Если любой из этих 5 заболел, запил, уволился - ты отстал на недели.
Мир разработки поломан специализацией, а продукты как были глючным говном, так и остались. Каждый лопух меряется размером своей организации, но хоть бы один сказал: а я вот охуенный, потому что из 100 человек половину уволил, оставшимся поднял денег, и мы стали делать в 4 раза больше.
Смотрите какие золотые слова. Слышал эту мысль давно, но у Табунова получилось очень емко и кратко: “В любом проекте регулярно кто-то ебланит. Если тебе кажется, что не ебланит, значит ебланишь ты.”
Стартапы не любят, потому что если стартап нормальный, то там нельзя сесть ровно на жопе и сидеть так годами. Но вообще “стартаперский” вайб куда-то уходит.
Бигтехи полны “аналитиков”. Програмисты ждут ”формальных описаний”. Аналитики считают, что их описания – “гарант независимости от программистов”. Как только появились аналитики, некоторые продакты стали “стратегами“ - все детали аналитик распишет. Хотя продакт на то и продакт, чтобы с дизайнером придумать продукт. А не написать несколько строчек сторей, и куда-то отдать их голубиной почтой в “нижний мир”. И только спрашивать туда регулярно: “алё, внизу, в нижнем мире! ну чё, ребзя, скоро сделаете”? Аналитики теперь считают, что это они должны уметь в системный дизайн. Тестировщики намертво встраиваются в пайплайн и добрую половину времени задача теперь проводит в тестировании, на тестировщиках. NoQA звучит примерно так же как массовые сокращения. Про фронт вообще писать не хочу.
Важнейший софт-скилл - уход от ответа на вопрос “скоро сделаете”. Вообще, этот вопрос неприличный. Сроки – это давление и фашизм, а наука давно доказала, что мотивация внутренняя должна быть, а не внешняя.
Вообще кто-то должен всё это организовать, это же ваша работа, а моя работа – программировать. Вообще, может у вас мудак СТО? У нормального СТО такой херни не бывает!
Объективно много организационных задач. Значит нам нужен проджект. Так, нет, проджект – это нафталин вотерфолл. У нас не проджекты. У нас – “деливери-менеджеры”.
Чтобы сделать классный продукт теперь нельзя просто собрать условную “пицца-тим”. Мамбу сделали 5 человек. Баду сделали 15 (но там сначала продали Мамбу, так что денег было побольше). А если денег на 5 человек - забудь. Хочешь 5 фуллстэков? Хрен там: будет два бекендера, один фронт, один мобила андроед и один айос. На тестировщиков не хватит. Если любой из этих 5 заболел, запил, уволился - ты отстал на недели.
Мир разработки поломан специализацией, а продукты как были глючным говном, так и остались. Каждый лопух меряется размером своей организации, но хоть бы один сказал: а я вот охуенный, потому что из 100 человек половину уволил, оставшимся поднял денег, и мы стали делать в 4 раза больше.
👍27🔥9😁4😢2💯2❤1🌚1
Интересная приблуда для тестирования отправки писем в дев/тест окружениях. https://github.com/sj26/mailcatcher
Это smtp-сервер, который ничего в реальности не отправляет, а просто показывает письма в своём UI.
Т.е. можно тестировать отправку писем на адреса, доступа к которым у вас нет, например, массовую рассылку по клиентам и т.д
Это smtp-сервер, который ничего в реальности не отправляет, а просто показывает письма в своём UI.
Т.е. можно тестировать отправку писем на адреса, доступа к которым у вас нет, например, массовую рассылку по клиентам и т.д
GitHub
GitHub - sj26/mailcatcher: Catches mail and serves it through a dream.
Catches mail and serves it through a dream. Contribute to sj26/mailcatcher development by creating an account on GitHub.
🔥14👍9❤2
Go планирует улучшить производительность в контейнерах (proposal)
GOMAXPROCS - это настройка в Go, которая определяет максимальное количество CPU-ядер, используемых для выполнения горутин параллельно.
В Go 1.25 разработчики предлагают встроить умный GOMAXPROCS, который будет учитывать ограничения контейнера (cgroup).
Сейчас Go автоматически устанавливает GOMAXPROCS равным всем логическим ядрам на машине, что создаёт проблемы в контейнерах, где доступно меньше ресурсов. Это приводит к неэффективной работе, проблемам с производительностью и троттлингу приложения.
Проблема актуальна для всех, кто запускает Go-приложения в контейнерах (Docker, Kubernetes), и остро стоит в окружениях, где на одной машине запускается много контейнеров с ограниченными ресурсами.
Сейчас разработчики решают эту проблему ручной настройкой через переменные окружения или используя библиотеку от убера. Новое предложение добавляет в сам Go автоматическое определение ограничений CPU из cgroups и динамическое обновление GOMAXPROCS при изменении этих ограничений.
🫥 Cross Join
⠀
#golang #performance #kubernetes #docker
GOMAXPROCS - это настройка в Go, которая определяет максимальное количество CPU-ядер, используемых для выполнения горутин параллельно.
В Go 1.25 разработчики предлагают встроить умный GOMAXPROCS, который будет учитывать ограничения контейнера (cgroup).
Сейчас Go автоматически устанавливает GOMAXPROCS равным всем логическим ядрам на машине, что создаёт проблемы в контейнерах, где доступно меньше ресурсов. Это приводит к неэффективной работе, проблемам с производительностью и троттлингу приложения.
Проблема актуальна для всех, кто запускает Go-приложения в контейнерах (Docker, Kubernetes), и остро стоит в окружениях, где на одной машине запускается много контейнеров с ограниченными ресурсами.
Сейчас разработчики решают эту проблему ручной настройкой через переменные окружения или используя библиотеку от убера. Новое предложение добавляет в сам Go автоматическое определение ограничений CPU из cgroups и динамическое обновление GOMAXPROCS при изменении этих ограничений.
⠀
#golang #performance #kubernetes #docker
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
runtime: CPU limit-aware GOMAXPROCS default · Issue #73193 · golang/go
Overview Change the Go runtime on Linux to use CPU cgroup quota limits to set the default value of GOMAXPROCS. This is a concrete proposal for the ideas discussed in #33803. I've included a lot...
👍35🤡5❤3🙏1
Самое большое зло на свете - это неявное приведение типов.
Вот мои любимые приколы:
md5 хэши равны, потому что php думает, что 0e... - это экспоненциальная нотация числа.
Дальше необъяснимое, прибавлять единицу можно по-разному, получая совершенно разный результат:
Не только в php проблемы, конечно.
На картинке выше, если кто не понял, Excel приводит 1/2 к 1 февраля.
Ну и классика js
потому что window.name хоть и получило число, но это заголовок окна, т.е. костылём прибито, что это строка.
Или такое
Because fuck you, that's why.
Короче, не говорите мне, что неявная типизация - это удобно. Это говно
🫥 Cross Join
⠀
P.S. В коментах пишут про ===, strict types. Но ребят, это как раз попытка языков уйти от неявного приведения типов, потому что это говно.
Вот мои любимые приколы:
$str1 = "240610708";
$str2 = "QNKCDZO";
echo md5($str1) . "\n"; // 0e462097431906509019562988736854
echo md5($str2) . "\n"; // 0e830400451993494058024219903391
if (md5($str1) == md5($str2)) {
echo "MD5 хеши равны!\n";
}
md5 хэши равны, потому что php думает, что 0e... - это экспоненциальная нотация числа.
Дальше необъяснимое, прибавлять единицу можно по-разному, получая совершенно разный результат:
`
$x = "0abc";
$x = $x+1;
echo $x; // получится 1
$x = "0abc";
$x++;
echo $x; // получится строка 0abd
Не только в php проблемы, конечно.
На картинке выше, если кто не понял, Excel приводит 1/2 к 1 февраля.
Ну и классика js
name = 2;
console.log(name+2); // 22
потому что window.name хоть и получило число, но это заголовок окна, т.е. костылём прибито, что это строка.
Или такое
[1, 2, 3] + [4, 5, 6] // -> '1,2,34,5,6'
Because fuck you, that's why.
Короче, не говорите мне, что неявная типизация - это удобно. Это говно
⠀
P.S. В коментах пишут про ===, strict types. Но ребят, это как раз попытка языков уйти от неявного приведения типов, потому что это говно.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁35👍25🔥4❤3👎1🌚1
Попросил чатгпт нарисовать типичного бэкендера и типичного фронтендера (в разных чатах). Результат очень похож. Но есть нюанс :)
🫥 Cross Join
⠀
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁34🌚6👍4❤1😢1
encoding/json/v2 будет внедрен в go1.25 под экспериментальным флагом: https://github.com/golang/go/issues/71845
Анмаршалинг будет работать намного быстрее, кроме того, в новый json добавили 100500 фичей. nil-слайсы будут маршалиться как [], можно задать формат для времени, указать case-sensitive или нет и много других штук.
Соответственно, v1 и v2 несовместимы, очевидно не получится просто добавить везде v2 и катить в прод. Старый json обещают поддерживать вечно
🫥 Cross Join
⠀
Анмаршалинг будет работать намного быстрее, кроме того, в новый json добавили 100500 фичей. nil-слайсы будут маршалиться как [], можно задать формат для времени, указать case-sensitive или нет и много других штук.
Соответственно, v1 и v2 несовместимы, очевидно не получится просто добавить везде v2 и катить в прод. Старый json обещают поддерживать вечно
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥5❤1🙏1
Кирилл написал пост, что ИИ не заменит программистов.
Да, блин, точно заменит. Не нынешними технологиями, а чуть позже.
Сначала Каспаров говорил, что никакая машина не может победить человека, потому что человек уникален, а не тупо перебирает ходы.
Машина не сразу, но победила, перебором ходов и заучиванием дебютов.
Потом говорили, что даже не то, что человек, а какая-нибудь жалкая мышь мгновенно и запросто распознаёт объекты, а компьютерное зрение это делает долго и с низкой точностью
Не сразу, но машина победила, и стала намного быстрее и точнее, чем живые существа.
Потом говорили, что в игру Го машина не может победить, потому что там подсчет ходов вообще не имеет смысла, только на интуиции. А человек - гений интуиции.
Результат немного предсказуем, в Го машина тоже побеждает. И алгоритм приспособили под любую вообще подобную игру.
Говорили, что все эти системы узко натренированы на что-то, но... вот щас оказывается, что машина, натренированная на тексты, может прям очень много дохуя.
Говорили, что не может программировать, рисовать и т.д, это невозможно, человеческий гений бла бла бла
Машина начала программировать, рисовать, писать тексты и стихи. Да, местами фигово, но, как говорится, "мы находимся здесь"
Самое интересное, что GPT задумывался как T9 на максималках, и никто не ожидал, что она сможет программировать и переводить с французского на китайский, учитывая контекст.
Кстати, раньше смеялись над автоматическими переводами ("охлади траханье, углепластик"). Сейчас запускаются международные стартапы вообще без присутствия человеческого переводчика, всё переводится чатом гпт. Ну, максимум, кто-то вычитывает в особо важных ситуациях. Переводчиков заменили на 99%.
Еще там что-то говорили про то, что мозг человека содержит 100 млрд нейронов. Но современный комп, например, Macbook M4 содержит 30 млрд транзисторов. Конечно, сложно сравнивать нейроны и транзисторы, но блин.
И рост продолжается, становится больше ядер, компьютеры объединяются в облака и т.д.
Тупо оценивать будущее, опираясь на сегодняшние возможности. Copilot 1.5-2 года назад был скорее анекдотом, сейчас для большинства разработчиков - это незаменимый инструмент. Да, надо перепроверять, да он не может поговорить с коллегами и уточнить задачу, но блин.
И каждый раз одно и то же, "компьютер никогда не сможет...".
Единственная надежда на то, что тупо не хватит энергии на все задачи. Уже сейчас это заметная доля потребления человечества, при том, что многие даже не начали толком пользоваться.
🫥 Cross Join
⠀
Да, блин, точно заменит. Не нынешними технологиями, а чуть позже.
Сначала Каспаров говорил, что никакая машина не может победить человека, потому что человек уникален, а не тупо перебирает ходы.
Машина не сразу, но победила, перебором ходов и заучиванием дебютов.
Потом говорили, что даже не то, что человек, а какая-нибудь жалкая мышь мгновенно и запросто распознаёт объекты, а компьютерное зрение это делает долго и с низкой точностью
Не сразу, но машина победила, и стала намного быстрее и точнее, чем живые существа.
Потом говорили, что в игру Го машина не может победить, потому что там подсчет ходов вообще не имеет смысла, только на интуиции. А человек - гений интуиции.
Результат немного предсказуем, в Го машина тоже побеждает. И алгоритм приспособили под любую вообще подобную игру.
Говорили, что все эти системы узко натренированы на что-то, но... вот щас оказывается, что машина, натренированная на тексты, может прям очень много дохуя.
Говорили, что не может программировать, рисовать и т.д, это невозможно, человеческий гений бла бла бла
Машина начала программировать, рисовать, писать тексты и стихи. Да, местами фигово, но, как говорится, "мы находимся здесь"
Самое интересное, что GPT задумывался как T9 на максималках, и никто не ожидал, что она сможет программировать и переводить с французского на китайский, учитывая контекст.
Кстати, раньше смеялись над автоматическими переводами ("охлади траханье, углепластик"). Сейчас запускаются международные стартапы вообще без присутствия человеческого переводчика, всё переводится чатом гпт. Ну, максимум, кто-то вычитывает в особо важных ситуациях. Переводчиков заменили на 99%.
Еще там что-то говорили про то, что мозг человека содержит 100 млрд нейронов. Но современный комп, например, Macbook M4 содержит 30 млрд транзисторов. Конечно, сложно сравнивать нейроны и транзисторы, но блин.
И рост продолжается, становится больше ядер, компьютеры объединяются в облака и т.д.
Тупо оценивать будущее, опираясь на сегодняшние возможности. Copilot 1.5-2 года назад был скорее анекдотом, сейчас для большинства разработчиков - это незаменимый инструмент. Да, надо перепроверять, да он не может поговорить с коллегами и уточнить задачу, но блин.
И каждый раз одно и то же, "компьютер никогда не сможет...".
Единственная надежда на то, что тупо не хватит энергии на все задачи. Уже сейчас это заметная доля потребления человечества, при том, что многие даже не начали толком пользоваться.
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🤣18💩5💊5💯3❤2😢2💔1