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

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

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

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

Не стоит пугаться машинного кода

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

Моим первым языком программирования был ActionScript. Написание кода для Macromedia Flash максимально далеко от голого железа, и эта специфика работы глубоко засела в моём сознании. В результате меня интересовали преимущественно высокоуровневые языки для веб-программирования. Низкоуровневые же казались непостижимыми. Со временем я постепенно из разных источников узнавал о них всё больше, но это моё убеждение оставалось прежним. Низкоуровневые языки пугают, и машинный код подтверждал это наглядно. Когда я обращался к Google с запросом «понятный машинный код», то результат выдачи чаще представлял нечто пугающее и отталкивающее, нежели полезное для обучения.

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

Машинный код вовсе не страшен. Если вы можете обеспечить, чтобы документ JSON соответствовал схеме JSON, то без проблем сможете писать машинный код.

Читать далее

SOSAL: От теории к практике

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

Эта статья описывает использование улучшенного социального подхода к программированию SOSAL в реальных проектах и ситуациях, а также содержит рекомендации для более эффективного применения этих принципов. Скорее под кат!

Читать далее

Метапрограммирование 2.0: макросы и генерация кода в современном мире

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

Забудьте про скучные «Hello, World». Макросы и шаблоны давно стали полноценными инструментами архитектора кода: от хитрых C++-шаблонов до процедурных макросов Rust и Java-аннотаций, автоматически генерирующих целые фреймворки. 

В этой статье мы рассмотрим примеры, где metaprogramming избавляет от рутины и экономит часы работы над проектом. Детали как всегда под катом.
Читать дальше →

Гайд по совмещению 5 работ: инструкция по самоуничтожению

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

Недавно наткнулся на гайд по двум работам в IT. Я сразу же подумал, а почему только 2 работы? Это же какое-то раздолбайство. Где гайд по 3–4–5 работам? Совсем не хотят работать блогеры. Поэтому я решил написать свой гайд на Хабр.

Читать далее

Детальный обзор полей Галуа

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

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

Этими словами заканчивалось письмо Эвариста Галуа, написанное для своего друга Огюста Шевалье за два дня до его смерти от полученных на дуэли ран на 21 году жизни. Ни Якоби, ни Гаусс в его теоремах не разобрались, зато спустя 15 лет разобрался Жозеф Лиувилль и опубликовал работы Галуа, ставшие впоследствии фундаментом современной алгебры, известные сейчас как теория Галуа. В статье расскажу про одну из частей этой теории - поля Галуа, получившая настолько повсеместное применение в криптографии и избыточном кодировании, что Intel и AMD выпустили набор процессорных расширений для эффективной реализации операций над этими полями.

Заметка! Если вам довелось использовать/реализовывать поля Галуа, то большая часть статьи для вас скорее всего будет не интересна, но возможно в последних разделах будет что-то для вас новое.

Читать далее

Как ускорить сложение и вычитание при помощи 2^51

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

Помните, как долго выполняется сложение на бумаге?

¹¹ ¹
6876
+ 3406
------
10282

Начиная с единиц, мы складываем 6 + 6 = 12, записываем 2 и переносим 1. Затем пошагово двигаемся влево, пока складываемые разряды не закончатся.

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

Но сначала я задам вопрос: почему сложение столбиком мы начинаем с самого младшего разряда? Почему бы не начать слева?

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

Читать далее

Как инфоцыгане отравили IT

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

Как инфоцыгане захватили IT-курсы, обещали зарплаты по 300к за 3 месяца и сломали рынок. IT-образование начиналось с желания помочь, но закончилось спамом, разочарованием и враньём в резюме.

Читать далее

Прогрессивный JSON

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

Вы знаете, что такое прогрессивный JPEG? Можете почитать хорошее объяснение. Идея заключается в том, что вместо загрузки изображения сверху вниз оно сначала грузится размытым, а потом постепенно становится чётче.

Что, если мы применим тот же принцип к передаче JSON?

Читать далее

SOSAL: Современный социальный подход к программированию

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

В мире программирования существуют различные идеологии написания кода, которые отвечают за коммуникации (Unix-way), гибкость (Agile), чистоту и читаемость кода (DRY, KISS).

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

Читать далее

Mystical: визуальный язык программирования. Что это и как работает?

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

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

Читать далее

Великая иллюзия Copilot

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

Глава 1: мой коллега, программист

Пустая оболочка человека. Он больше похож на попугая, чем на личность. Мой начальник, искренне верящий в священнодействие Парного Программирования, сковал цепью меня и этого коллегу-«программиста», как сиамских близнецов с разных планет. Общей была наша клавиатура, но не мышление. Боже, как же он был далёк от этого.

«Постой-ка. У меня появилась идея. Дай мне клавиатуру.»

Идея. Ага. Как у младенца появляется «идея» засунуть вилку в розетку. Я почти доделал нечто прекрасное; стройную, изящную логику, пронзающую сложность подобно ножу, режущему масло. И тут появился он — бьёт по клавиатуре, как будто она ему деньги должна, копипастит код-франкенштейн из комментария на StackOverflow, написанный последователем Дяди Боба в 2014 году.

Знает ли он, что делает наша система? Нет.

Прочитал ли он тикет? Разумеется, нет.

Ощущает ли он уверенность, когда безрассудно корёжит глобальное состояние? Разумеется, да.

Читать далее

Нейрошиза: как мы потеряли голову из-за искусственного интеллекта

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

Пока вы это читаете, кто-то уже делает стартап за выходные с помощью AI, поднимает раунд и продаёт компанию самому себе. Всё это — в эпоху нейрошизы.

Читать далее

Не пытайтесь угадать мой язык

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

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

IP сообщает, откуда пришёл запрос, и на этом всё. Он не сообщает, какой язык нужен пользователю, на каком языке он говорит и какой язык понимает. Подобная система постоянно ломается — VPN, путешествия, эмиграция, страны с несколькими официальными языками. Это не умное, а раздражающее решение.

Читать далее

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

Две недели кодинга без ноутбука: AR очки и Linux-on-Android

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

Всем привет! Представляю вашему вниманию перевод статьи «Coding without a laptop — Two weeks with AR glasses and Linux‑On‑Android». Перевод сделал человек с помощью мозга, а не LLM.

Под катом будет личный опыт программиста, который отправился в поездку но не хотел брать с собой ноутбук, а вместо этого взял Android и AR‑очки. Из него вы узнаете с какими трудностями он столкнулся выбрав такое решение, и какие плюсы он почерпнул. И самое главное, повторит ли он свой опыт, если выпадет случай?

Приятного чтения

l9ec: волшебный патч ядра Linux

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

Если вам неудержимо хочется использовать оборудование из музея для современной разработки — статья специально для вас.

Читать далее

Stack Overflow умирает? Как ИИ вытесняет живые сообщества разработчиков

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

Stack Overflow, некогда главная платформа для программистов, переживает кризис: за два года трафик упал почти на 90%. Что стало причиной — изменившиеся привычки пользователей или ошибки самой платформы? Давайте попробуем разобраться в происходящем. А еще посмотрим, что администрация делает для спасения и что ждет сообщества разработчиков в новой реальности, где ответы на вопросы находятся быстрее, чем успеваешь их задать.

Читать далее

Почему я исправляю баги бесплатно и как это изменило мою карьеру

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

8 лет назад я исправил опечатку в чужом репозитории, а сейчас регулярно делаю коммиты в проекты, которые использую, и даже вошел в core team библиотеки с 27000 звёзд на GitHub

В этой статье покажу, что участие в Open Source проще, чем кажется. Расскажу, как регулярная работа с чужим кодом помогает быстрее разбираться в незнакомых кодовых базах, писать тесты и лучше документировать решения. А также объясню, почему публичная активность на GitHub выгодно отличает вас от других разработчиков, особенно в эпоху повсеместного использования ИИ.

Читать далее

Поднимайте If вверх, опускайте For вниз

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

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

Поднимайте If вверх

Если внутри функции есть условие if, то подумайте, нельзя ли его переместить в вызывающую сторону:

// ХОРОШО

fn frobnicate(walrus: Walrus) {

... }

// ПЛОХО

fn frobnicate(walrus: Option<Walrus>) {

let walrus = match walrus {

Some(it) => it,

None => return,

};

...

}

В подобных примерах часто существуют предварительные условия: функция может проверять предусловие внутри и «ничего не делать», если оно не выполняется, или же может передать задачу проверки предварительного условия вызывающей её стороне, а при помощи типов (или assert) принудительно удовлетворить этому условию. Подъём проверок вверх, особенно в случае предварительных условий, может иметь лавинообразный эффект и привести к уменьшению общего количества проверок. Именно поэтому и возникло это правило.

Читать далее

Дрался за бутылку пива с бомжами, а теперь работаю разработчиком

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

На написание этой статьи меня вдохновила история Из бариста в программиста. Как я освоила SQL за неделю и стала тимлидом в IT-компании меньше, чем за год

Ещё пару лет назад моим основным стеком были: бутылка "Балтики девятки", пакет из «Пятёрочки» и лежание на скамейке под обновления погоды.

Читать далее

Как делать видеоигры в 2025 году (без движка)

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

На дворе 2025 год, а я всё ещё продолжаю делать видеоигры. Если верить archive.org, я начал заниматься этим двадцать лет назад! Достаточно долгий срок для одного увлечения...

Когда я рассказываю о том, над чем работаю, люди часто спрашивают меня, как я делаю игры, и их часто удивляет (а иногда и тревожит?), когда я говорю, что не пользуюсь коммерческими игровыми движками. Существует какой-то стереотип, что если ты делаешь игры не в популярном инструменте наподобие Unity или Unreal, это значит, что ты чуть ли не вручную пишешь ассемблерный код.

Я искренне считаю, что создание игр без огромного «многофункционального» движка может быть проще и интереснее, а часто и позволяет оптимальнее тратить вычислительные ресурсы. Я не делаю игру, в которой «есть всё», поэтому мне не нужны 90% фич, предоставляемых движками. Все мои игры обладают конкретным стилем и у меня есть конкретные способы работы с моими инструментами. Часто оказывается так, что используемым по умолчанию реализациям фич в крупных движках наподобие Unity не хватает столь многого, что мне всё равно приходится писать их самостоятельно. В конечном итоге, мои проекты по большей мере оказываются моими собственными инструментами и системами, а движок становится необходим лишь для создания удобного UI и части рендеринга...

Тут можно задаться вопросом, а зачем вообще использовать движок? Что он даёт? Зачем я позволяю инструменту потенциально препятствовать моей работе, когда его владельцы внезапно принимают неэтичные и ужасные бизнес-решения? Или выпускают обновление, которое требуется для запуска моей игры на консолях, но ломает всю систему в игре, заставляя переписывать её? Зачем я ежедневно борюсь с этим для работы с движком, пока я постепенно заменяю все его стандартные системы и он постепенно становится только загрузчиком ресурсов и фреймворком UI редактора?

Читать далее

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