Си: жёсткий разбор

Язык Си отличается богатым набором средств, которые способны сломать программу в самых разных местах и самым неочевидным способом. Это всевозможные побитовые операции и неочевидные реализации некоторых типов (например, процессор не умеет работать с 32-разрядными целыми,[…]

Читать дальше …

Python: жёсткий разбор

В качестве, пожалуй, абсолютной противоположности Haskell-у возьмём Python. Критика в его адрес довольно поверхностна, потому что и порог вхождения в язык небольшой. Когда разработчик с одним годом практики начинает выискивать в нём блох, с точки[…]

Читать дальше …

Haskell: жёсткий разбор

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

Читать дальше …

Безупречное программирование

«В каждой программе есть хотя бы одна ошибка», «невозможно создавать программы без ошибок», бла-бла-бла… Это истинно лишь настолько, насколько вы сами в это верите. Хорошая новость в том, что существует формальное доказательство отрицания тезиса «невозможно[…]

Читать дальше …

Живите, динамические языки!

По большинству статей этого сайта можно решить, что я абсолютный фанат тренда статической типизации ™. Но это не совсем так. Не поймите меня неправильно. Действительно, существует выраженная тенденция использовать по максимуму функциональность, предоставляемую статическими/компилируемыми языкам,[…]

Читать дальше …

Моделируем id Software

Давайте помоделируем хороший пример успешных организационно-разработческих практик легендарной id Software (Wolfenstein, Doom, Quake, …). Их продукты всегда отличались отличным качеством в сочетании с прорывными технологиями. John Romero в этом году подробно рассказал, как его совсем[…]

Читать дальше …

Модель сверхэффективного программиста (4)

предыдущая часть Третья ключевая микра — отладка. Универсальный принцип здесь такой: если вам понадобилось что-то отладить, вы уже на ошибочном пути. Конечно, мы не создаём программы в полной изоляции. Мы взаимодействуем с кодом, написанным другими[…]

Читать дальше …

Модель сверхэффективного программиста (3)

предыдущая часть Вторая обязательная прокаченная микро-стратегия — это мастерство обеспечения быстрого фидбека. На этом построена вся культура agile-движения, а также немало методологий разработки наподобие Test Driven Development или Continuous Integration. Однако все эти мэйнстримовские понятия[…]

Читать дальше …

Модель сверхэффективного программиста (2)

начало Итак, первая «микра» — обучение. Программирование — это процесс непрерывного обучения. Технологии, платформы, языки, проекты, кодовая база, все они постоянно меняются, и соответственно надо всё время быть в курсе новинок (учиться, учиться и учиться[…]

Читать дальше …

Модель сверхэффективного программиста

Когда эйчары хантят программистов, то акцент делают, во-вторых, на некоем минималистичном наборе позитивных личностных качеств, а во-первых, на технологиях. Нужны «знания» конкретных технологий, языков, фреймворков. При этом опыт упоминается совсем кратко (типа, от трёх лет)[…]

Читать дальше …

Рендеринг логики в No Man’s Sky

Игра No Man’s Sky позиционируется как бесконечный процедурно генерируемый универсум, в котором на ленивую генерацию завязана даже каждая, условно говоря, травинка. Реализуется это достаточно очевидным способом: каждая планета представлена 64-битным ключом, который используется для генерации[…]

Читать дальше …

Комбинаторы рефакторинга

первая часть Но можно ли считать перечисленные проблемы действительно «проблемами»? Скорее, это забавные маленькие задачки-вызовы, напрашивающиеся на элегантное решение. И при этом семантический редактор получается, при небольшой практике, куда приятнее для пользователя, а главное, гораздо[…]

Читать дальше …

Семантический редактор

Почему мы в 21-м веке программируем как в эпоху перфокарт? Следующий сценарий знаком наверное большинству программистов: после внесения незначительных правок кода в вашем текстовом редакторе или любимом фреймворке компилятор внезапно выдаёт десятки или даже сотни[…]

Читать дальше …

Главная фишка универсального паттерна

предыдущая серия Завершаем наш сериал по мотивам серии постов Steve Yegge про паттерн прототипов. Он, возможно, выглядит несколько унылым — обычно Стив пишет хардкорные вещи, а тут классический инженерный набор. Однако самая мощная фишка этого[…]

Читать дальше …

Дополнительная механика паттерна свойств

предыдущая серия Сохранение списков свойств Стив предсказуемо рекомендует сохранять наборы свойств в XML или JSON, благо сериализация в эти форматы поддерживается уже давно практически повсеместно, а нативный текстовый формат дополнительно удобен, так как прозрачен для[…]

Читать дальше …

Как разморозить сломанное заклинание

предыдущая серия Наследование В прототипном наследовании при обращении к свойству сперва смотрится наличие этого свойства в «локальном» объекте, и если оно в нем отсутствует, тогда проверяется родительский объект, и так далее выше по цепочке. Если[…]

Читать дальше …

Имплементация паттерна прототипа

предыдущая серия На высшем уровне абстракции имплементация паттерна свойств задается минималистичным API. Это базовый API для любой структуры, которая раскладывает имена/ключи на значения. get(name) put(name, value) has(name) remove(name) В идеале, объекты, поддерживающие такой API (Стив[…]

Читать дальше …

Что общего у Lisp и BigTable

Продолжаем рассмотрение паттерна свойств на примерах. Lisp Лисп — это довольно компактный пример паттерна свойств (списки свойств для символов). Символы — это сущности первого порядка. Интересно, что даже если бы в Java была возможность создавать[…]

Читать дальше …

Супергибкий суперустойчивый движок

предыдущая серия Конечно, JavaScript плохо подходит для построения API или серверных скриптов. В нем нету поддержки пространств имен, системы пакетов и тому подобных фич, и конечно его никак нельзя назвать универсальным. Отмечу, что ужос современного[…]

Читать дальше …

Секретная киллер-фича JavaScript

предыдущая серия У шаблона Property Pattern много других имен. Например, он известен как Do-It-Yourself Reflection или Adaptive Object Modeling. Но самое интересное, во-первых — как только мы с ним познакомимся, мы сразу же начнем его[…]

Читать дальше …