Как стать автором
Обновить
3
0
Александр @Zer0S2m

Программист-велосипедист

Отправить сообщение

Удавка на собесе

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

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

Читать далее
Всего голосов 95: ↑81 и ↓14+87
Комментарии385

Интересные приёмы, взятые из исходников Android

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров10K
Интересные приёмы, взятые из исходников Android

В процессе чтения исходников Android SDK я замечал интересные механики и приёмы написания кода, какие-то из них до сих пор используются при создании новых библиотек, другие, напротив, заменены более логичными и понятными конструкциями. В этой статье я постараюсь перечислить всё, что смог заметить сам при изучении исходников Android'а. Сразу отмечу: эта статья не претендует на полноту материала и возможно вы нашли даже больше интересных моментов при чтении кода, ладно, погнали, короче!
Читать дальше
Всего голосов 27: ↑24 и ↓3+39
Комментарии3

Вызовы функций в Python по прежнему медленные? Анализ последних оптимизаций в CPython

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

Я наткнулся на пост в X/Twitter, где Pritam обнаружил, что его решение на Leetcode работало медленнее, когда он использовал встроенную функцию min, и производительность улучшилась, когда он реализовал min прямо в своем коде на Python.

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

Автор на этом скриншоте использовал Python 2, который на данный момент уже стал древностью. За последние 10 лет Python 3 получил множество релизов, и последние версии были нацелены на улучшение производительности языка. Так действительно ли вызовы функций по‑прежнему так сильно влияют на производительность в Python?

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

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

Очень быстро понимаем Android Build Flavors

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

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

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

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

Как сделать анализатор кода за два дня

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

Статический анализ — это очень мощный инструмент, позволяющий следить за качеством кода. Предлагаем вместе попробовать написать простой Lua анализатор на Java, чтобы понять, как устроены статические анализаторы кода внутри.

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

Jetpack Compose Layouts часть 2

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

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

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

Подпись коммитов в git при помощи gpg

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

В этой статье я расскажу о том, как и зачем подписывать и верифицировать коммиты в git при помощи gpg.

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

Нюансы разработки парсера для своего языка программирования

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

image


Недавно прочитал на Хабре статью Свой язык, или как я устал от ассемблера и С, и невольно взглядом зацепился за один абзац:


Я решил не сильно париться, поэтому использовал библиотеку parglare. Она очень легкая и удобная, всем рекомендую. Для описания синтаксиса парсер принимает строку в соответствующем формате, использует регулярные выражения (не надо осуждать регулярки, они всесильны!).

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


Ведь в жизни практически любого программиста может наступить момент, когда ему в голову приходит светлая идея — разработать свой собственный язык программирования. Может быть и не ради захвата мира, наравне с C/C++, Python или хотя бы PHP, а в качестве личного пет-проекта, с которым он, длинными зимними вечерами будет оттачивать собственное мастерство.


А так как у любого языка (не только программирования), все начинается с анализа его грамматики, то самой первой задачей создателя будет выбор инструментов для синтаксического анализа исходного текста.


Это история — заметки на память о муках выбора связки лексер-парсер для разбора грамматики NewLang. А так же попытка описать и систематизировать выводы об особенностях разных анализаторов с которыми пришлось поработать при выборе парсера для разбора грамматики у своего языка программирования.

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

Как создавать анимации в Jetpack Compose

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

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

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

Встречают по README — что нужно знать о документации

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

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

Проводя аналогию дальше, знакомство с новой разработкой может упросить файл README — базовый компонент документации. 

Должны ли разработчики писать документацию? Как это часто бывает, однозначного ответа на этот вопрос нет.

Сегодня поговорим об инструментах для сборки и работы с README, а также обсудим тему документации.
Читать дальше →
Всего голосов 20: ↑20 и ↓0+23
Комментарии4

Cohesion и Coupling: отличия

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

Эта статья является переводом материала «Cohesion and Coupling: the difference». 

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

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

Смерть от тысячи микросервисов

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

Как мы к этому пришли? Как мы стали вместо решения наших задач, тратить кучи денег на решение проблем, которых у нас нет?

Читать далее
Всего голосов 105: ↑99 и ↓6+121
Комментарии309

regexp — большие гонки

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

Так или иначе сталкиваться с регулярными выражениями приходилось большинству разработчиков. Мое первое знакомство произошло с реализацией regex в STL std::regexp. Чаще всего регулярки используются в проверке входных данных, что-то вроде проверки корректности введенного пользователем URL, адреса IPv4, адреса IPv6, телефонного номера и при этом скорость выполнения операции regex не сильно влияет на время отклика от приложения. Но, что если вам приходится проверять сотни, тысячи или даже десятки тысяч правил и все это на постоянно меняющихся наборах входных данных в реальном времени? В этой ситуации вам не просто нужен быстрый алгоритм, вам понадобится лучший из них, вам понадобиться чемпион!

Участвовать в заезде!
Всего голосов 18: ↑17 и ↓1+23
Комментарии27

Худшие практики разработки и архитектуры

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

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

Понятно, что плохие практики не отвечают на вопрос: «А как делать-то?» — но они помогают быстро разобраться в том, как не делать.

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

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

Это если команда одна. А если разработчики на пятом проекте новые, то начинается самое весёлое — этот сталактит надо ещё прочитать.

Очень часто я вижу лава-код в проектах аутсорсинговых компаний, потому что они используют свою кодовую базу по разным заказчикам как такой своеобразный иннерсорс. А «междисциплинарный» код как раз хорошо обрастает отключаемыми участками и переопределяемыми функциями.
Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии28

Как создать шаблон документации к микросервису

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

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

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

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

4 стихии программной документации: The Grand Unified Theory of Documentation

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

В статье я хочу рассказать об одной очень интересной теории разработки документации на системы и программы. Её авторы утверждают, что создали ни много ни мало «Великую Единую Теорию Документации» (The Grand Unified Theory of Documentation). Мы привыкли с опаской относиться к заявлениям о том, что кто-то обнаружил сокровенную истину и раскрыл её профессиональному сообществу. В теории изложены идеи и правила, которые мы встречаем в разных методиках разработки документации и сами применяем на практике.

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

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

Что нужно знать, чтобы успешно пройти System Design Interview

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

Для любого разработчика глубокое понимание основных принципов системного проектирования является необходимым условием для создания стабильных и масштабируемых программных систем, способных обеспечивать высокую производительность. Системное проектирование (System Design) включает разработку архитектуры и структуры программной системы, направленную на удовлетворение специфических требований и обеспечение требуемых показателей производительности.

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

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

Читать далее
Всего голосов 49: ↑47 и ↓2+56
Комментарии26

Принципы SOLID, только понятно

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

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

Изучить принципы
Всего голосов 80: ↑66 и ↓14+59
Комментарии94

Я программист, и я тупой

Время на прочтение2 мин
Количество просмотров76K
Я пишу код за деньги уже пятнадцать лет. Пробовал себя и в других ролях – управление продуктом, аналитика, тестирование, – но как-то не пошло. И с течением лет пришел к осознанию, что я не очень умный. К сожалению.

Никаких особых медицинских диагнозов мне не ставили, но мои умственные способности крайне ограниченны. Даже те задачи на Leetcode, которые попроще, вызывают у меня затруднения. Когда я читаю о самом обычном алгоритме консенсуса, у меня кипит мозг. У меня плохо получается отслеживать сложные зависимости в кодовой базе. Я не способен освоить модные языки вроде Rust (пытался, но по правде сказать, для меня это чересчур). Я терпеть не могу микросервисы и современный фронтенд: там слишком много движущихся частей, и уследить за всеми я не в состоянии.

Как же я выхожу из положения?
Читать дальше →
Всего голосов 297: ↑283 и ↓14+324
Комментарии333

Поиск по коду — это сложно

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

Функциональность поиска на Val Town не очень впечатляет. Сейчас в её основе лежит механизм ILIKE Postgres, работающий на основе алгоритма поиска подстроки: если искомое выражение в коде есть, оно выводится в результатах. Этот процесс не включает никакого ранжирования и очень слабо поддерживает запросы из нескольких слов. Более эффективный поиск является одной из самых желанных для нас возможностей.
Читать дальше →
Всего голосов 29: ↑27 и ↓2+43
Комментарии3
1

Информация

В рейтинге
5 581-й
Дата рождения
Зарегистрирован
Активность

Специализация

Fullstack Developer
Middle
Git
Web development
Vue.js
PHP
Python
TypeScript
JavaScript