Как стать автором
Обновить
915.9

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Cargo Cult Driven Development: нам стоило понять это раньше

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 14K

Карго-культ в разработке становится нормой, сменяются лишь ритуалы.

На дворе 2023 год. У нас есть доступ к количеству информации, которому позавидовала бы любая, даже самая пухлая энциклопедия. Тем не менее, технические специалисты до сих пор склонны искать серебряную пулю, которая одним махом решит все их проблемы. Их одинаково много: и тех, кто ищет, и тех, кто думает, что нашел.

Agile, микросервисы, DevOps, блокчейн или искусственный интеллект — мы все время пытаемся изобрести философский камень, кнопку «Сделать все хорошо». Как будто мы собираем паззл, и в нем недостает одного кусочка. И стоит нам его найти, как разгадка жизни, смерти и всего вообще вдруг станет настолько простой и очевидной, что мы лишь оглянемся назад и посмеемся: «Ха-ха, невероятно, нам потребовалось столько времени, чтобы понять эту простую штуку! И все это время она была у нас перед носом!»

А теперь по существу: я считаю, что многие из разрекламированных методик и технологий могут принести реальную пользу. И в ряде случаев их внедрение оправдано и необходимо. Но вот в чем проблема: как только вокруг чего-то возникает хайп и ажиотаж, люди буквально бросаются в омут с головой, потому что, мол, «за этим будущее». И даже не задумываются о том, какие проблемы в этом светлом будущем их ждут.

Читать далее
Всего голосов 36: ↑34 и ↓2 +32
Комментарии 6

Числа с плавающей точкой для гуманитариев. Что это такое и как они работают

Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 29K

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

В этой статье я простым языком попытаюсь изложить данную тему и помочь решить ряд вопросов: как на самом деле процессор хранит числа с плавающей точкой? Как точка хранится в памяти? Почему при сложении 0.1 + 0.2 получается ответ ~0.30000000000000004? Если по какому-то из этих вопросов вы чувствуете, что не можете дать точный ответ, то эта статья для вас.

Читать далее
Всего голосов 41: ↑40 и ↓1 +39
Комментарии 37

Как стать магистром по ML за 2 года

Время на прочтение 10 мин
Количество просмотров 3.1K

Год назад в ИТМО открылась новая магистратура по искусственному интеллекту. Мы отказались от академического подхода, посмотрели на примеры лучших инженерных школ и стажировок, да и в целом от мира образования, и пригласили ИТ-компании для участия в подготовке высококвалифицированных кадров.

В этой статье рассказываем о том, как построено обучение и над какими проектами здесь можно работать. В конце вы найдете ссылку на конкурс проектов для поступления на следующий учебный год.

Читать далее
Всего голосов 10: ↑7 и ↓3 +4
Комментарии 5

Scala Digest. Выпуск 6

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 1.6K

Привет, Хабр! Мы — Рома, Настя и Карина — бэкенд-разработчики Тинькофф, пишем код на Scala и горим желанием его популяризировать.

Мы собираем и агрегируем новости из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем другие интересные новости и собственные комментарии. Свою мотивацию мы черпаем из желания развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! (づ ◕‿◕ )づ

Читать шестой выпуск
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 1

Истории

Развлечения с хеш-коллизиями

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 3.6K

Мой друг и коллега по цеху, блоггер Сэм, недавно опубликовал своё третье иллюстрированное руководство, темой которого стало хеширование. Нет острой необходимости читать его руководство перед прочтением моей статьи, но я очень рекомендую вам это сделать. Хотя бы ради того, чтобы посмотреть на восхитительные анимации, от которых невозможно оторваться. Честно — они просто потрясающие. Тут, к сожалению, анимаций вы не найдёте, поэтому насмотритесь на них в той статье, а потом возвращайтесь сюда. Здесь вы сможете немного позабавиться поиском коллизий алгоритма хеширования MurmurHash3.

Сразу хочу отметить, что этот материал я писал исключительно ради развлечения. Ничто из того, что я тут покажу, не предназначено для продакшн-кода. И вот, как всегда, ссылка на GitHub-репозиторий, в котором можно найти код к этой статье.

Идея этого поста возникла после того, как меня попросили помочь с поиском коллизий. Тогда меня охватило непреодолимое желание узнать о том, сколько хешей в секунду я смогу выжать из доступного мне железа. Собственно, тут я расскажу о поиске хеш-коллизий MurmurHash3 на скорости 200 гигахешей в секунду.

Читать далее
Всего голосов 22: ↑19 и ↓3 +16
Комментарии 4

Пишем логи Python при помощи библиотеки Structlog

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 4.5K

В этом посте мы расскажем о том, как structlog может помочь вам писать логи, которые не только помогают в повседневной работе, но и реализуют лучшие практики для согласованного логирования во всём проекте.

Также мы рассмотрим распространённые сложности логирования и узнаем, как их позволяет решать structlog.

Читать далее
Всего голосов 32: ↑31 и ↓1 +30
Комментарии 2

Будущее программирования с помощью ИИ — первые примеры

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 12K


Научно-техническая революция стимулирует спрос на вычисления. Последние полвека прогресс шёл в основном за счёт совершенствования железа. Но чипы приближаются к физическому пределу. Чтобы не снижать темпы развития, нужно улучшать программный код, повышая производительность вычислений. Требуют оптимизации в том числе базовые алгоритмы, такие как сортировка или хэширование, которые выполняются каждый день триллионы раз [1].

В то же время машинное обучение (нейросети) всё чаще используются для улучшения кода, созданного человека, а также для генерации собственного кода и для улучшения кода, сгенерированного им самим. Вот несколько примеров.
Читать дальше →
Всего голосов 28: ↑22 и ↓6 +16
Комментарии 30

Оптимизация памяти и управление сборщиком мусора в Go: GOGC и GOMEMLIMIT

Уровень сложности Средний
Время на прочтение 11 мин
Количество просмотров 9.3K

Всем привет, меня зовут Нина Пакшина, я работаю Golang разработчиком в Лента Онлайн в команде операций.

В данной статье я расскажу о том, как управлять сборщиком мусора в Go, как оптимизировать потребление памяти приложением и защититься от ошибки out-of-memory.

Читать далее
Всего голосов 34: ↑33 и ↓1 +32
Комментарии 6

Колесо сансары в поиске решения бага «белый экран» в SPA приложении на React

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 2.3K

Всем привет! Меня зовут Иван Вахаев, я Frontend‑разработчик digital‑интегратора 5 УГЛОВ.

В этой статье я расскажу, как мы решили проблему так называемого «белого экрана», вызванного «не определенным» методом в старых версиях webView (размонтирование всего дерева React) в SPA приложении на React, внутри мобильного приложения написанного на Flutter. В момент, когда пользователь переходил с экрана авторизации на экран регистрации или после успешной авторизации переходил на главную страницу, то юзера встречал «белый» экран. Данный баг поймали, к сожалению, не на стадии разработки и не на стадии тестирования, а когда приложение уже вышло в свет и попало на прилавки всеми известных магазинов приложений:( , но, как всегда, сроки были сжатыми, поэтому решение пришлось искать очень быстро.

Расскажу, какие способы мы рассматривали и по какой причине выбрали итоговый (спойлер: пришлось написать собственный полифил).

Читать далее
Всего голосов 6: ↑4 и ↓2 +2
Комментарии 9

Java-дайджест: начало июля

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 6.4K

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

В этом выпуске будет новый бесплатный (на самом деле нет) GraalVM Enterprise, отмена Java 8 в бигдате, совершенно новая система модулей (которую никто не просил, но мы её заслужили тем не менее), утилита для поиска и истребления легаси в проекте, библиотеки для работы с Large Language Models (иначе говоря, ChatGPT), всратый офис с графическим интерфейсом на Java, и многое другое. И конечно, обзор этой недели Java на Хабре.

Если есть время, оставьте комментарий, про какую часть Java-экосистемы вам хотелось бы читать дальше. Помогите Даше-путешественнице найти смысл существования. Новостей куча, поэтому пока я пишу про то, что интересно лично мне: GraalVM, Spring, Clouds, OpenJDK dev. Например, в Hibernate на каждый релиз чинят десятки каких-то багов, но я про них ничего не пишу, потому что не знаю ни одного живого человека, которому бы это было интересно.

Как всегда, статья подготовлена при поддержке "российской джавы" AxiomJDK и моего IT-бара Failover Bar, потому что я пишу её в рабочее время :)

Прекрасно. Читать далее.
Всего голосов 30: ↑28 и ↓2 +26
Комментарии 11

Parallel Stream — не панацея или используй с умом (tutorial для начинающих)

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 9.6K

Данная статья может быть интересна тем, кто только изучает Stream API, либо набирает практический опыт их использования. В ней раскрывается функционал, плюсы и минусы использования Parallel Stream, но не касаемся использования последовательных Stream API в целом.

Параллельные потоки стали мощной функцией в Java 8 и более поздних версиях, предлагая разработчикам возможность без особых усилий выполнять операции сбора данных параллельно. Используя возможности многопоточности современных компьютеров, параллельные потоки могут значительно повысить производительность вашего кода. В этой статье мы рассмотрим несколько примеров использования параллельных потоков, подчеркнув их преимущества в различных сценариях.

Читать далее
Всего голосов 6: ↑2 и ↓4 -2
Комментарии 4

Простая проверка на предрасположенность студента к поиску нестандартных решений в программировании

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 13K

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

Мне кажется, у меня получилось придумать интересную задачу для проверки такой способности у программистов. Мне кажется, ничего подобного я никогда не видел, или, по крайней мере прямо сейчас не помню, может кто-то напомнит.

Кто-то в коментариях нашел очень интересные аналогии для изложенного в статье решения задачи: https://triztrainer.ru/theory/principles/principle13/

По результатам критики, мне очень интересно было узнать что существует:

"Метод инверсии или методика проектирования «от противного», абсурдной перестановки. Такой подход к проектированию основан на развитии гибкости мышления, поэтому он позволяет получить совершенно новые, порой парадоксальные решения."

Читать далее
Всего голосов 72: ↑2 и ↓70 -68
Комментарии 127

Волновой алгоритм

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 11K

Волновой алгоритм — алгоритм поиска пути, алгоритм поиска кратчайшего пути. Принадлежит к алгоритмам, основанным на методах поиска в ширину.

Читать далее
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 27

Ближайшие события

Ближайшие бесплатные мероприятия по разработке (5 июля — 6 июля 2023)

Уровень сложности Простой
Время на прочтение 1 мин
Количество просмотров 857
Читать описание
Рейтинг 0
Комментарии 0

Анонимная сеть в 200 строк кода на Go

Уровень сложности Средний
Время на прочтение 15 мин
Количество просмотров 16K

Реализации анонимных сетей всегда стремятся быть как можно проще, доступнее для понимания, как на теоретическом, так и на программном уровнях. Такие условия становятся необходимыми вследствие одного из основных принципов построения безопасных программ — чем проще объяснить, тем легче доказать. Но к сожалению теория часто может расходиться с практикой, и то, что легко объяснить в теории, может быть проблематично объяснять на коде.

Вследствие этого, можно сказать just-for-fun, у меня появился вопрос: можно ли реализовать анонимную сеть настолько малую, чтобы её программный код смог понять даже начинающий программист за короткое время?

Читать далее
Всего голосов 21: ↑20 и ↓1 +19
Комментарии 11

Как погубить децентрализованную сеть (на примере Федиверса)

Время на прочтение 8 мин
Количество просмотров 23K

На дворе 2023 год. Весь Интернет — под контролем Империи GAFAM. Весь? Нет, несколько мелких анклавов пока не поддались их гнёту. А некоторые из этих непримкнувших стали объединять усилия, консолидируясь в «Федиверс».

В ходе дебатов на просторах Twitter и Reddit, Федиверс стал привлекать всё больше внимания и снискал славу. Люди стали всерьёз им пользоваться. Это не могло укрыться от внимания Империи.  

Читать далее
Всего голосов 98: ↑95 и ↓3 +92
Комментарии 159

Эффективная работа с битами при помощи Go

Уровень сложности Сложный
Время на прочтение 12 мин
Количество просмотров 8.5K

Это статья познакомит вас с использованием возможностей Go для выполнения манипуляций с битами. Здесь мы разберём установку, очистку, инвертирование, сдвиг битов, использование техники SWAR, эффективную обработку Юникода и прочие приёмы, позволяющие повысить продуктивность программирования.
Читать дальше →
Всего голосов 47: ↑43 и ↓4 +39
Комментарии 7

Чек-лист фронтендера при разработке рекламного спецпроекта

Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 3.7K

В отделе рекламных спецпроектов мы делаем множество сервисов в мини-приложениях VK, Одноклассниках, Телеграме, создаём лендинги.

Мы делаем как краткосрочные проекты, которые могут длиться 2 недели, так и долгосрочные — сроком работы от года. Изначально я написала этот материал для внутреннего использования, чтобы разработчик на каждом этапе разработки приложения знал, на что обратить внимание. 

Эта статья — подсказка, которая помогает не пропустить важные моменты, если ваша команда разрабатывает, тестирует и выпускает проекты на потоке — то есть много и часто. Возможно, эти советы пригодятся и вам.

Читать далее
Всего голосов 24: ↑24 и ↓0 +24
Комментарии 0

Обзор Top-3 Open Source игр на C# и ошибок в их коде

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 5.9K

В мире много хороших игр, но совсем немногие открывают исходный код. В этой статье мы познакомимся, на мой взгляд, с тремя лучшими Open Source играми на C# и разберём наиболее интересные ошибки, найденные в их исходном коде.

Читать далее
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 0

Приручаем Liquibase. Как скормить базе данных список из 10К офисов, чтобы потом не писать костыли?

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 4.3K

Привет! Меня зовут Михаил, я Java Backend Developer в Simbirsoft. В этой статье хочу поделиться своим опытом создания миграций файлов с большим списком данных при помощи Liquibase. Cтолкнувшись с такой задачей на проекте, я был сильно удивлен тому, как мало материалов написано по этой теме, даже на английском. Поэтому описал то, что удалось собрать и проверить на собственном опыте.

Читать далее
Всего голосов 6: ↑5 и ↓1 +4
Комментарии 9

Вклад авторов