Pull to refresh
8
0.1
Send message

В {n} раз быстрее Си

Level of difficultyHard
Reading time13 min
Views38K

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

Эта статья публиковалась на главной странице HackerNews, и к её обсуждению вы можете присоединиться здесь.
Читать дальше →
Total votes 117: ↑113 and ↓4+153
Comments300

В ответ на пост, который разозлил меня, как никакой другой

Level of difficultyEasy
Reading time3 min
Views3.9K
Несколько дней назад я наткнулся на пост в блоге Валентины Купач под названием «Баги и медленные релизы – нормально ли это?» Уже одного заголовка было достаточно, чтобы вызвать у меня раздражение. В смысле? Ответ на этот вопрос известен уже несколько десятилетий! Наверняка это кликбейт и больше ничего.

По мере того так я читал пост, мое раздражение переходило в истинное негодование. В посте (он небольшого объема и хорошо написан, стоит того, чтобы прочесть) Купач утверждает, что баги и долгие сроки – это, на самом деле, нормально. По ее опыту, большинство компаний могут себе позволить выдавать продукт с недочетами и в неспешном темпе. Влияние багов на бизнес не слишком велико, и скорость, с которой они исправляются, большого значения не имеет. Да и то, что разработчикам портит жизнь непрерывный поток срочных багфиксов – не беда.

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

Но больше всего в ее посте меня разозлило вот что: она была права.
Читать дальше →
Total votes 16: ↑12 and ↓4+12
Comments23

Как работает хэширование

Level of difficultyMedium
Reading time12 min
Views61K

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

Хэш-функции фундаментальны и используются повсюду.

Но что же такое хэш-функции и как они работают?

В этом посте я собираюсь развенчать мифы вокруг этих функций. Мы начнём с простой хэш-функции, узнаем, как проверить, хороша ли хэш-функция, а затем рассмотрим реальный пример применения хэш-функции: хэш-таблицу.
Читать дальше →
Total votes 62: ↑59 and ↓3+70
Comments49

Возвращаем 2007 год, или делаем Интернет без блокировок

Level of difficultyMedium
Reading time5 min
Views66K

Как известно, в 2007 году кроме того, что деревья были выше, а трава зеленей, еще и в Интернете не было особых ограничений - можно было открыть почти любой сайт и наслаждаться им. До ковровых блокировок Telegram оставалось ещё 10 лет... К сожалению, в наше время такой возможности уже нет. Причины тут всем известны, в частности, некоторые компании уже не предоставляют своих услуг в России.

Хорошо, что существует возможность в рамках домашней сети восстановить свободный Интернет таким, каким он был в 2007-м. Именно этим мы и займемся. Стоит отметить, что в 2007 году довольно часто можно было встретить подключения на скорости 64-128 Кб/с, а то и вовсе dial-up; Wi-Fi был редкостью, а мобильная связь - довольно дорогим удовольствием. Однако, эти особенности того времени мы постараемся не воспроизводить.

Представляю вашему вниманию Freeroute - простой маршрутизатор, который позволяет направлять трафик на разные шлюзы в зависимости от домена назначения. Free в названии, как водится, означает свободный, а не бесплатный.

Читать далее
Total votes 69: ↑65 and ↓4+76
Comments98

Внезапно сложная задача на литкоде: Варианты покупки двух товаров

Level of difficultyHard
Reading time6 min
Views12K

Есть вот такая, вроде бы, простая задача на литкоде: Дано три числа total - сколько у вас есть денег, cost1, cost2 - цены двух товаров. Надо подсчитать, сколько всего существует различных способов купить сколько-то этих двух товаров, не выходя из бюджета (значение имеет только общее количество покупок). Иными словами, сколько существет целых неотрицательных пар (x, y), таких что x*cost1+y*cost2 <= total . Например, имея товары ценами {5, 10} и 20 денег на руках, есть 9 способов потратить деньги: 0, 5, 5+5, 5+5+5, 5+5+5+5, 10, 10+5, 10+5+5, 10+10.

Она там даже помечена как medium и вообще в одну строчку решается, но это если допускать безумно медленное решение за O(total / max(cost1, cost2)) , т.е линейное от входных чисел. А сможете ли вы решить ее сильно быстрее - за O(log(max(cost1, cost2))) ? В этом случае задачка становится вполне себе hard и требует много математики и аккуратности. Если интересно решение - добро пожаловать под кат. Буду рад любым альтернативным решениям. Может кто-то сможет додуматься до похожего решения проще.

Читать далее
Total votes 23: ↑18 and ↓5+18
Comments49

Искренность — как худшее качество в IT-карьере? Или как меня уволили в первый же день на первой работе

Level of difficultyEasy
Reading time4 min
Views38K

В различных учебных заведениях по программированию обучают специализированным профессиональным навыкам. Иногда там учат умению работать в команде. Это когда дают задачи бригадам из 2-x или 3-х студентов. Но я не слышал, чтобы где-то рассказывали про корпоративную субкультуру тех организаций, где предстоит работать молодому специалисту. А зря! Такое незнание на порядок опасней профессионального!

Читать далее
Total votes 72: ↑48 and ↓24+42
Comments344

Java Digest #2

Level of difficultyEasy
Reading time6 min
Views8K

Всем привет! 👋 👋 👋

Мы — Java-разработчики Тинькофф: Константин, Андрей и Арсений. Собираем новости, статьи, туториалы и другие интересные материалы из мира Java-разработки. Решили делиться этим не только с коллегами, но и со всем сообществом.

Джо Аберкромби писал: «Чем больше ты узнаешь — тем больше понимаешь, как мало знаешь. Однако усилие само по себе стоит того». Надеемся, наш дайджест поможет вам на этом пути. Stay tuned! 😉

Читать свежий выпуск
Total votes 39: ↑39 and ↓0+39
Comments6

Распознавание лиц для чайников

Level of difficultyEasy
Reading time8 min
Views8.5K

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

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments2

Такие разные CTO – как выбрать свой типаж

Level of difficultyEasy
Reading time7 min
Views3.3K

Роль CTO комплексна и многогранна. Здесь и менеджерские функции, и технологическая экспертиза, и стратегия. Функция CTO индивидуальна, едва ли не в каждой компании. Почему? Факторов много. Сфера бизнеса, технологичность компании, ее размер, даже этап развития.

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

Читать далее
Total votes 18: ↑10 and ↓8+7
Comments5

SOLID в Swift. Простое объяснение с примерами для начинающих

Level of difficultyMedium
Reading time3 min
Views10K

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

Давайте рассмотрим каждый из этих принципов с примерами нарушения и соблюдения на языке Swift.

Читать далее
Total votes 10: ↑9 and ↓1+14
Comments20

Типичная задача на собеседовании: URL Shortener

Level of difficultyMedium
Reading time6 min
Views35K

Один из моих знакомых недавно сходил на собеседование, на котором его попросили спроектировать укорачиватель ссылок. Он растерялся и задачу — как хотел интервьюер — не осилил, а потом нашел в интернете популярное решение и попросил меня прокомментировать. Полная формулировка поставленной проблемы: «Как бы вы разработали службу сокращения URL-адресов, подобную TinyURL

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

Читать далее
Total votes 39: ↑23 and ↓16+15
Comments98

Новый перспективный веб-фреймворк Cample.js. Реактивность без VDOM

Level of difficultyMedium
Reading time2 min
Views12K

Всем привет! В данной статье я бы хотел рассказать о таком фреймворке как Cample.js.

На сегодняшний момент (версия 3.0.1), фреймворк является активно поддерживаемым в разработке нового функционала. Есть поддержка работы с данными, которые благодаря реактивности без виртуального DOM отображаются крайне быстро. Пример тестов.

Читать далее
Total votes 4: ↑3 and ↓1+6
Comments56

Как я потратил 100к рублей, чтобы удобно вести списки

Level of difficultyEasy
Reading time3 min
Views31K

Короче, меня задолбало, что списки всё время теряются. 

Раз за разом повторяется одна и та же ситуация. Знакомый советует фильм, я открываю заметки, где-то записываю. И эта запись навсегда растворяется в мировом пространства. 

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

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

Душа просила простого решения
Total votes 29: ↑26 and ↓3+28
Comments78

Нетоксичное общение в команде

Level of difficultyEasy
Reading time7 min
Views8.1K

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

Автор понимает, что сам неидеален в том, о чём пишет, но старается двигаться в правильном направлении.

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

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

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

Читать далее
Total votes 12: ↑7 and ↓5+5
Comments18

В командах с хорошей продуктивностью выкладываются не более чем на 85%

Reading time7 min
Views9.3K
Хотя некоторые компании и предпринимают подобные попытки, современную культуру выгорания не исправишь приложением для здорового образа жизни. Для этого потребуется изменение культуры в организациях и отношения к проблеме у руководства.

Традиционный подход


Устаревшее представление о высокой производительности можно сформулировать так: «максимум усилий = максимальный результат». На деле всё работает иначе, но многие управленцы до сих пор убеждены в верности этой формулы. Порассуждать о том, что «нужно заботиться о себе», они любят, но в своих базовых установках близки плохим ораторам-мотиваторам прямиком из 80-х («Без боли нет результата», «Без риска нет славы,» «Выложись на 110%» и всё в таком духе).

Когда руководители ожидают, что сотрудники будут отрабатывать по восемьдесят часов в неделю, и в то же время предлагают антистрессовые занятия йогой по пятницам, они создают вредоносное противоречие. Это классический пример того, что в психологии называют двойным посланием. Сотрудникам нельзя озвучивать это противоречие и озвучивать запрет тоже нельзя.
Читать дальше →
Total votes 18: ↑17 and ↓1+21
Comments8

Концепция «эстафеты» как альтернатива спринта

Level of difficultyEasy
Reading time5 min
Views3.5K

Эта статья мотивирована желанием выжать разработчика дать возможность разработчикам реализовать свой потенциал максимально и во многом опирается на книгу "Team Topologies" (Matthew Skelton and Manuel Pais).

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

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

Читать далее
Total votes 5: ↑2 and ↓30
Comments28

Заражённый разум

Reading time15 min
Views30K

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

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

Читать далее
Total votes 174: ↑164 and ↓10+189
Comments146

Пособие по программированию модулей ядра Linux. Ч.1

Reading time19 min
Views37K

Перед вами последняя версия пособия по программированию модулей ядра Linux, вышедшего 2 июля 2022 года. Пособие большое, поэтому материал будет разбит на серию статей. В первой части мы разберём, что такое модули ядра, рассмотрим необходимые подготовительные этапы для их создания и в завершении по традиции напишем первый простейший модуль «Hello world», попутно разобрав вопросы лицензирования, передачу аргументов командной строки и прочие нюансы. Это пособие вы можете смело воспроизводить и изменять в соответствии с условиями Open Software License v 3.0.
Читать дальше →
Total votes 43: ↑43 and ↓0+43
Comments4

Что под капотом у нейронной сети. Нейросеть c точки зрения математики и программирования

Level of difficultyEasy
Reading time3 min
Views27K

Цель данной публикации – комплексное рассмотрение строения искусственных нейронных сетей c точки зрения и математики и программного кода. В данной работе нейронная сеть реализуется на языке Python с использованием библиотеки tensorflow.keras. Статья сосредоточена в основном на строении и функционировании искусственной нейронной сети, поэтому такие этапы как обучение и т.д. в ней не затрагиваются.

Читать далее
Total votes 28: ↑15 and ↓13+9
Comments28

Как заставить программистов пахать? 5 неочевидных советов

Level of difficultyEasy
Reading time4 min
Views78K

Для начало придется забыть слово заставить. Задача помочь сотрудникам полюбить зарабатывать вам деньги.

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

Там, где я работал, были разные системы управления, но всегда работал один и тот же принцип.

Читать далее
Total votes 156: ↑135 and ↓21+136
Comments283

Information

Rating
2,934-th
Registered
Activity