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

Совершенный код *

Как Макконнелл завещал

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

Запатентованная мечта программиста — часть II

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

Краткая предыстория: моя прошлая заметка описывала подход к хранению и выборке данных, на котором можно построить конструктор приложений — альтернативу современным платформам разработки, но без необходимости программирования. Изобретение это потенциально может перевернуть весь мир IT, каким мы его знаем.


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


Разумеется, статья вызвала большое количество вопросов, которые необходимо осветить отдельно: отличие от существующих решений и сравнительный анализ производительности и планов построения запросов к базе данных. А также ответить на вопрос: что это вообще такое и зачем?



Читать дальше →
Всего голосов 18: ↑10 и ↓8+2
Комментарии158

О декомпозии кода замолвим слово: контекстное программирование

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

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

Читать дальше →
Всего голосов 16: ↑14 и ↓2+12
Комментарии28

Очень простое объяснение принципов SOLID

Время на прочтение5 мин
Количество просмотров67K
Disclaimer: Всем можно, ну а я чем хуже?!

SOLID — это набор принципов по организации кода. Фактически они декларируют некие правила, которые помогут вам сохранить свои и чужие нервы и время. А могут и не помочь.

Попробуем разобраться в этих принципах на пальцах, без примеров кода и СМС.
Читать дальше →
Всего голосов 60: ↑53 и ↓7+46
Комментарии60

Истории

Ревью кода: успешный опыт

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


В Интернете найдется масса информации по ревью кода:

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

Да, конечно же, есть и книги на эту тему. Словом, в этой статье изложено, как ревью кода организован в компании Palantir. В тех организациях, чья культура не приемлет подобной коллегиальной оценки, возможно, полезно будет сначала ознакомиться с блестящим эссе Карла Уиджерса  (Karl E. Wiegers) «Ревью кода с человеческим лицом», а затем попытаться следовать этому руководству.

Этот текст взят из рекомендаций по повышению качества,  составленным на основе работы с Baseline, нашим инструментом для контроля качества кода на Java. В нем рассмотрены следующие темы:

  •         Зачем, что и когда мы пытаемся достичь при ревью кода
  •         Подготовка кода к ревью
  •         Выполнение ревью кода
  •         Примеры ревью кода

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

Статический анализ в Go: как мы экономим время при проверке кода

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


Привет, Хабр. Меня зовут Сергей Рудаченко, я техлид в компании Roistat. Последние два года наша команда переводит различные части проекта в микросервисы на Go. Они разрабатываются несколькими командами, поэтому нам понадобилось задать жесткую планку качества кода. Для этого мы используем несколько инструментов, в этой статье речь пойдет об одном из них — о статическом анализе.


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


В статьях по этой теме часто встречается термин «линтер». Для нас это удобное название простых инструментов для статического анализа. Задача линтера — поиск простых ошибок и некорректного оформления.

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

Запатентованная мечта программистов 80-90-х

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

Этой весной мне удалось, наконец, реализовать давнюю мечту строителей конструкторов: встроить среди американских патентов четвертьвековой давности очень простое решение всех их проблем. По сути — это эмуляция базы данных приложения, при построении которого вся черновая, рутинная работа программиста вынесена «за скобки».


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


Оно не меняет принципиально структуру физического хранения данных, в нем всё происходит точно так же, как в обычном приложении с базой данных: информация хранится на носителе, она фрагментирована, со временем фрагментация увеличивается. При запросах данных так же происходит множество чтений разрозненных фрагментов информации с диска.
Больше того — это может работать в обычной реляционной БД.
Но есть нюансы.



Ещё на 3 минуты текста
Всего голосов 27: ↑12 и ↓15-3
Комментарии193

Целочисленная арифметика. Делим с округлением результата. Часть 1

Время на прочтение2 мин
Количество просмотров20K
Чем проще, на первый взгляд, задача, тем меньше разработчик вдумывается в то, как грамотно её реализовать, и допущенную ошибку, в лучшем случае, обнаруживает поздно, в худшем — не замечает вовсе. Речь пойдет об одной из таких задач, а именно, о дробном делении и о масштабировании в контроллерах, поддерживающих исключительно целочисленную арифметику.

Почему тонкостям вычислений в условиях такой арифметики разработчики прикладных программ не уделяют внимание, вопрос. Рискну только предположить, что, по всей вероятности, сказывается привычка производить вычисления на калькуляторе… Во всяком случае, с завидной регулярностью «имею счастье» лицезреть, как коллеги по цеху наступают на одни и те же грабли. Этот материал нацелен на то, чтобы те самые «грабли» нейтрализовать.
Читать дальше →
Всего голосов 17: ↑9 и ↓8+1
Комментарии139

Психология читабельности кода

Время на прочтение12 мин
Количество просмотров26K
Всё, что написано ниже, ни разу не претендует на абсолютную истину, но всё же представляет собой некоторую модель, помогающую лично мне находить способы писать немного лучший код.

Каждый программист старается писать хороший код. Читабельность — один из главных признаков такого кода. О ней написано достаточно много книг, но всё же в теме есть пробелы. Например, те самые книги сфокусированы больше на советах КАК написать читабельный код, а не на причинах того, почему один код является хорошо читабельным, а другой — нет. Книга говорит нам «используйте подходящие названия переменных» — но что делает одно название более подходящим, чем другое? Работает ли это для всех примеров подобного кода? Работает ли это для всех программистов, которым попадётся на глаза этот код? Как раз о последнем я и хотел бы поговорить чуть детальнее. Давайте погрузимся немного в человеческую психику. Наш мозг — главный наш инструмент, хорошо бы изучить специфику его работы.
Читать дальше →
Всего голосов 35: ↑32 и ↓3+29
Комментарии64

Делаем Маркетплейс, интегрированный в облако онлайн-касс

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

В декабре прошлого года мы участвовали в хакатоне со своей платформой прототипирования. За отведенные два дня мы замахнулись с нуля разобраться с онлайн-кассой и её облачной экосистемой, а также сделать прототип сервиса — Маркетплейс. Как и ожидалось, мы потратили 80% времени на интеграцию с незнакомым устройством, а за оставшиеся 20% хорошо развлеклись и сделали всё остальное.


Честно, нас удивила простота входа в этот облачный мир, его масштабы (160 тысяч пользователей практически на старте), возможности и… дыры. В итоге у нас всё получилось, а компания-организатор, по их заявлениям, вот-вот стартует проект маркетплейса.


В этой статье я покажу как за 2-3 часа был сделан веб-сервис, интегрированный с облачными кассами и пригодный для обкатки на фокусной группе клиентов. Сам проект доступен для ознакомления и клонирования в виде исходников в github и онлайн версии.



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

Codable: Советы и Примеры

Время на прочтение6 мин
Количество просмотров14K
Хотел бы поделиться с вами некоторыми советами и трюками, которые я использовал на этом примере.

Скачайте Swift Playground со всем кодом из этой статьи:

image

Codable представлен в Swift 4 с целью заменить старый NSCoding API. В отличие от NSCoding у Codable есть поддержка JSON первого класса, что делает его перспективным вариантом для использования API JSON.

Codable отлично подходит в качестве NSCoding. Если имеется необходимость кодировать или декодировать некоторые локальные данные, которые вы должны контролировать в полной мере, вы можете использовать преимущество автоматического кодирования и декодирования.
Читать дальше →
Всего голосов 5: ↑5 и ↓0+5
Комментарии2

Комментирование кода: хороший, плохой, злой

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


Вы наверняка это слышали: «Хороший код является самодокументированным».

Я больше 20 лет зарабатываю написанием кода, и слышал эту фразу чаще всего. Это клише.

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

Она истинна? Да.

Означает ли она, что вы никогда не должны комментировать код? Нет.

В этой статье мы рассмотрим разные аспекты комментирования кода.
Читать дальше →
Всего голосов 75: ↑67 и ↓8+59
Комментарии25

Не пишите лишнего

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

Все думают, что программист большую часть своего рабочего времени пишет код. Кроме самих программистов. Они знают, что большую часть времени они этот код читают. Читают, силясь понять, как же он работает, зачем он здесь написан и что с ним теперь делать.


Дольше всего приходится вычитывать не хитрые алгоритмы, и не решения с алгебраическими типами данных и монадами, а огромные куски простого кода: методы на 500 строк, скрипты на 1000 строк, классы на 1500 строк. Все они доставляют индустрии проблем не меньше, чем печально известное NullPointerException.

Читать дальше →
Всего голосов 95: ↑89 и ↓6+83
Комментарии182

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

HoleyBeep: объяснение и эксплоит

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


В былые времена люди использовали \a для генерирования неприятных «гудков» из спикеров системных блоков. Это было особенно неудобно, если хотелось генерировать более сложные звуковые последовательности вроде 8-битной музыки. Поэтому Джонатан Найтингейл написал программу beep. Это была коротенькая и очень простая программа, позволявшая тонко настраивать звучание из спикера.

С появлением X-сервера всё стало куда сложнее.

Чтобы beep могла работать, пользователь должен был либо быть суперпользователем, либо являться владельцем текущего tty. То есть beep всегда будет работать у root-пользователя или у любого локального, но не будет работать у не-root удалённого пользователя. При этом любой терминал (например, xterm), подключённый к X-серверу, считается «удалённым», и поэтому beep работать не будет.
Читать дальше →
Всего голосов 27: ↑24 и ↓3+21
Комментарии8

Вредные советы для программистов 1С

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

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

Но есть исключение, и вы уже догадались, о ком речь. Несчастные, презираемые, ненавидимые или игнорируемые большинством 1Сники.

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

Но большинство 1Сников, увы, не такие. Скромные, тихие, считающие свою «одинэсность» — постыдным недостатком, психическим или физическим заболеванием. Читая Хабр, они вынуждены скрывать свои «желтые трусы», чтобы не быть с позором изгнанными, оплеванными и поруганными.

Они читают о разработке игр, веб-приложений, машинном обучении, работе за рубежом, Google и Apple, и плачут. А потом отторгают, злятся, бросают читать, возвращаются в бухгалтерию… Но возвращаются снова и читают.

Публикация — для них.

Читать дальше →
Всего голосов 25: ↑13 и ↓12+1
Комментарии8

Проверяй входящие данные. Исходная причина уязвимости и атаки на Cisco IOS

Время на прочтение2 мин
Количество просмотров13K
Cisco IOS function weak

В пятницу 6 апреля 2018 началась мощная атака на оборудование Cisco.

Много пишут о том, что главная причина, по которой эта атака успешна, это открытые во внешние сети сервисные порты Cisco Smart Install.

Эти порты открыты по умолчанию. А люди в массе своей оставляют то, что сконфигурировано/выбрано/настроено таким, каким оно было по умолчанию. Как видим, на примере этого случая, это касается не только домашних роутеров, но и серьёзного оборудования в крупных компаниях, где цена ошибки значительно выше.

При создании системы вы не имеете права расчитывать на то, что значения по умолчанию, которые следует изменить будут изменены, причём в нужную сторону.

Вы лишь можете заставить изменить эти значения с помощью каких либо ограничивающих использование приёмов. Чему многие будут не рады. «Защита от дурака» это один из примеров этих обязывающих ограничений.

Про выбор по умолчанию
Есть исследование 2003 года «Спасает ли жизни выбор по умолчанию?», в котором есть диаграмма

image

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

Я хочу обратить внимание на корень самой уязвимости. В отчёте есть такая часть:
Читать дальше →
Всего голосов 28: ↑27 и ↓1+26
Комментарии45

Code Conventions: как мы сохраняем быстрый темп разработки PHP-проекта

Время на прочтение7 мин
Количество просмотров23K
Привет, Хабр. Меня зовут Евгений Удодов, я сооснователь и технический директор компании Roistat. Хочу поделиться нашим опытом разработки большого и сложного продукта — системы аналитики.

TL;DR: Мы выложили на github наш Code Conventions и рассказали в статье о том, как его применять на практике.

При разработке больших продуктов существует распространенная проблема — с течением времени накапливается много legacy-кода, задачи делаются все медленнее и медленнее. Также при росте команды разработчики начинают писать код по-разному и отсутствие единых правил может приводить к конфликтам и спорам.

За 4 года существования нашего проекта мы сделали больше 20 000 Pull Request’ов (далее PR) и под катом я расскажу, как же мы решили эти проблемы.


Читать дальше →
Всего голосов 21: ↑18 и ↓3+15
Комментарии61

Requiem for a Dream

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

Пролог


— Ты, главное, не ссы! Держись меня, делай как я, и все будет чики-пуки.

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

— Коль, давай посерьезнее. — Жанна строго посмотрела на круглую самодовольную рожу. Потом перевела взгляд на новенького. — Сергей, не слушай этого старого коня. Борозды он, конечно, не испортит, но и целины не поднимет.

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

— Мы на тебя возлагаем большие надежды, Сережа. Николай у нас под завязку загружен текучкой — ее очень много. Мы понимаем, что действуем неэффективно, где-то что-то упускаем, используем устаревшие технологии и подходы… Но у нас реально нет времени остановиться, подумать, посмотреть, поучиться. Как писал Кови — наточить пилу.

Сергей понимающе покивал головой. Он не знал, кто такой Кови, но метафору понял.

— Ты — молодой, целеустремленный, не обремененный обязательствами и связями, амбициозный, и очень умный программист. У тебя за плечами очная Бауманка. Мы ждем от тебя новой струи свежего вохдуха, скачка в развитии наших систем, прорыва облачных технологий. Так, и только так!

— Спасибо, Жанна Ивановна. Я буду стараться.

— Никакого отчества, просто Жанна! Велкам в нашу команду, Сережа!
Читать дальше →
Всего голосов 103: ↑97 и ↓6+91
Комментарии76

Анатомическая метафора кода. Где у кода мускулы

Время на прочтение3 мин
Количество просмотров4.6K
У кода есть мускулы. Правда-правда. Не веришь? Смотри:



Весь код, который выполняет реальную работу: производит вычисления, преобразует данные, проверяет условия и т. д. — это «мясо». «Мышцы» программы. Код, который отвечает за структуризацию — «сухожилия». То, с помощью чего мышцы крепятся к костям. То, благодаря чему каждый отдельный мускул остаётся самостоятельным, а не слипается в бесформенный фарш. А что тогда «кости»? Кости — это пусть будет архитектура программы.

Читать дальше →
Всего голосов 13: ↑11 и ↓2+9
Комментарии5

Вам действительно нужен Redux?

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

Не так давно React позиционировал себя как "V in MVC". После этого коммита маркетинговый текст изменился, но суть осталась той же: React отвечает за отображение, разработчик — за все остальное, то есть, говоря в терминах MVC, за Model и Controller.


Одним из решений для управления Model (состоянием) вашего приложения стал Redux. Его появление мотивировано возросшей сложностью frontend-приложений, с которой не способен справиться MVC.


Главный Технический Императив Разработки ПО — управление сложностью

Совершенный код

Redux предлагает управлять сложностью с помощью предсказуемых изменений состояния. Предсказуемость достигается за счет трех фундаментальных принципов:


  • состояние всего приложения хранится в одном месте
  • единственный способ изменить состояние — отправка Action'ов
  • все изменения происходят с помощью чистых функций

Смог ли Redux побороть возросшую сложность и было ли с чем бороться?

Читать дальше →
Всего голосов 42: ↑40 и ↓2+38
Комментарии632

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