На самом деле я забочусь о других людях, потому что не всем придёт в голову спрашивать «а используете ли вы комментарии для версионирования кода?», а такая практика — это трэш и угар. Особенно с мотивацией «не умею/не привык» — это тоже интересный сигнал о вашей команде, который будет полезен потенциальным нанимающимся.
Ну вообще-то можно депремировать и вообще увольнять.
У нанимателей-непрограммистов нет никаких методов понять, что команда пишет ремонтопригодный код, это да, но это другой вопрос (и стыдом и мотивациями он тоже не чинится).
Зачем мне удовлетворять ваши желания, заботиться о приходящих и не приходящих вам мыслях?
Чтобы сэкономить время и силы и себе в том числе. А то так наймёте человека, который слишком отстал для таких практик, не сработаетесь с ним, он уйдёт, и вы потеряли время на найм и онбоардинг. Надо ли оно вам?
А вообще показательный вопрос, конечно.
Зачем мне называть мой подход, ведущими практиками?
То есть за 10 лет по факту притензия у вас к 2000 строчному коду только в скорости, правильно?
Нет. Его ещё хотели расширить на другие виды входных данных, и проверить, что его предположения всё ещё выполняются спустя 10 лет, но это невозможно, потому что непонятно, что он делает.
В остальном его плюсы перевешивали минусы настолько, что просто из первоначального ТЗ никто эти 2000 строк не переписал с нуля?
Первоначальное ТЗ звучало как «сделать систему определения аномалий во временных рядах». Переписать это с нуля — это с нуля провести исследования о том, что и как работает в данном контексте.
Но в итоге ровно это я и сделал, да. Этот код в итоге был выкинут и даже не переписан.
Только после универа, запилил ядро в виде расчёта матрицы и векторов итогов. Там были рекурсии последовательные по н-мерному пространству. Перебор? Абсолютно! Я сам с трудом понимал как это в итоге работает. За гранью. Но тесты не заваливало. Пять лет без правок на проде.
Хм.
Я сам с трудом понимал как это в итоге работает.
Пять лет без правок на проде.
Возможно, тут есть какая-то связь…
У меня на одной прошлой работе был такой проект: разобраться, что именно делает одно расчётное ядро (по поиску аномалий во временных рядах), которое было написано как раз товарищем только после универа. Рекурсий по пространствам там не было, но там был .cpp-файл на пару тыщ строк, где все функции обменивались данными друг с другом через одну глобальную std::map<std::string, std::string> (да, вы угадали, вычисленные в одной функции float-коэффициенты передавались в другую функцию через конвертацию в строку и обратно), и средняя функция выглядела как пара десятков строк вида
void updateStep14() {
double k = utils::toDouble(coeffs["k4"]);
ensureActual14();
int m = utils::toDouble(coeffs["mPrev"]);
fixupKs();
double mm = m * 62.4 + k * k;
coeffs["mNew"] = utils::toString(mm);
}
(хотя наличие названия updateStep14 — это ещё хороший случай).
Перебор? Абсолютно!
Понимал ли я с трудом, как это работает? С трудом. Календарный год пытался понять.
Тесты не заваливало, да. Их просто не было.
На проде без правок было не пять лет, а все десять, просто потому, что это никто не хотел трогать. Даже несмотря на то, что оно тормозило как не в себя.
Здорово! Одна просьба — делитесь, пожалуйста, информацией об этих ведущих практиках с потенциальными нанимающимися. Лично мне такое спрашивать в голову обычно не приходит, не дорос ещё до таких техник, поэтому на месте интервьюируемого я бы хотел о таком слышать без всяких наводящих вопросов с моей стороны.
Но техдолг в 30 тысяч тикетов (включая рефакторинги, абстракции и даже тесты) это нормально для фирмы, занимающейся коммерческой разработкой. Она делает то за что платит заказчик. Он не платит за абстракции, он платит за продукт. Нет денег нет фирмы нет красивого кода.
Тут какое-то бинарное мышление с неявной дихотомией между «наяриваем красивый код, напрочь игнорируя нужды заказчика и теряя деньги» и «делаем только то, что просит заказчик, заказчик рефакторинг не просит — не делаем».
Кстати, за какие конкретно тикеты платит заказчик фотошопа, автокада или clion'а?
Заказчик готов обменять свои деньги на определённый продукт, да. Но это не значит, что он платит только за то, чем он будет пользоваться прямо сразу после получения продукта. Те деньги, которые он даёт вашей фирме, фирма вольна распределять по своему усмотрению на техдолг, на текущие тикеты, на самообразование сотрудников и на директору фирмы на яхты (или сгущёнку, смотря что за фирма и что за директор).
Более того, даже если у продавана в вашей фирме происходит такой диалог с заказчиком: — (З) Хочу такую-то финтифлюшку. — (П) 1500 баксов. — Не, 1200 максимум. — Ну ок. то это не значит, что вы все 1200 баксов обязаны потратить на ровно эту финтифлюшку, покуда она будет всё равно доставлена на устраивающем заказчика уровне.
И, собственно, решение вопроса распределения доходов на разные задачи — это ровно то, что отличает успешные фирмы от шараг.
Ну и ещё тут вопрос о том, что такое «нормально» в вашей фразе про нормальность тысяч тикетов. Воровство — это тоже в определённом смысле нормально — оно в каком-то объёме есть во всех социумах и известно любому человеку, но это не значит, что с вашим обоснованием «я украл потому, что воровство нормально и присутствует во всех культурах» согласится обворованный или прокуратура.
Видимость бывает нормальной, ограниченной или недостаточной.
Очень здорово. Как это помогает водить машину?
Это как учиться говорить на английском, зазубривая все прошедшие времена, и какая форма first/second/third conditional соответствует какой семантике (я второе десятилетие живу в англоязычных странах, и при этом сам это не вспомню, даже если когда-то знал, что нисколько не мешает), и потом их мучительно вспоминая, что надо использовать в данный момент беседы (а когда вы вспомнили, беседа уже ускакала вперёд — успехов вам так поддерживать разговор). И ещё обязательно ставить язычок на бугорки, когда произносишь th.
Нет, серьёзно, ожидается, что у водителя есть лазерный дальномер в глазах, и он может отличить видимость в 299 метров от видимости в 301 метр? Что это вообще значит — я не могу различить контуры за 300 метров? Или не могу распознать объект быстрее, чем за n секунд? Через 300 метров не видно дальний свет встречной машины? Или что? Хотите бюрократии и формализма — получайте до конца, а то уже тут какие-то фрактальные потёмкинские деревни, когда некоторый вид наукообразия мы сделали, но он не даёт ничего, кроме чувства важности составляющему экзамен.
Так для этого не надо прогуливать занятия по теории и практике ПДД.
Вы на какой вопрос здесь отвечали, и как он связан с тем, что спросил я?
Вы страшный человек. Вам ни в коем случае нельзя работать капитаном корабля или самолета!
А жаль, на каком-нибудь F/A-18 я бы полетал вживую (и на цэшке раньше много летал в DCS).
Но, впрочем, вы на вопрос можете ответить без гибрида апелляции к авторитету и гало-эффекту?
Нет, вам надо работать учителем в школе - 90% учеников будут просто в восторге (привет финский подход!). Вот только ВПР/ОГЭ/ЕГЭ они провалят.
Слышали полубайку про Фейнмана и то ли французский, то ли бразильский подход к обучению физике? Формулы оттараторить могут, а применить их к реальным задачам — нихрена. Зато их версии ЕГЭ сдают на отлично, я уверен.
Кроме знания ПДД,,на их выполнение большое влияние оказывает степень наказания за их нарушение.
То есть, вы хотите сказать, что, выходит, есть какие-то другие факторы, кроме наличия теоретической части экзамена? Или это выходит, только когда другие страны сравнимы с (или хуже) США по смертности на дорогах, а когда другие страны не хуже, то тогда и только тогда всё дело в теории?
Я не пойму, вы хотите продвигать в обществе подход "чем больше выдадим премий Дарвина, тем лучше"?
Я продвигаю подход «не надо делать абы что просто ради создания иллюзии действия» (с тем же успехом можно помолиться, в конце концов), но ваш вариант тоже интересный.
Так, что там вам нравится, Штаты, Техас? Ни ногой туда!
Например здесь около 60 вопросов. Было бы хорошо, чтобы устный экзамен проверял их все. На практике же это просто нереально.
И сразу же первым вопросом
Что означает термин «Ограниченная видимость»?
с вариантами, среди прочего,
Видимость водителем дороги менее 300 м в условиях тумана, дождя, снегопада, а также в сумерки.
Видимость водителем дороги менее 150 м в ночное время.
Как измеримо отличается водитель, который знает, что там бюрократ имел в виду в данном конкретном случае? На что знание ответа на этот вопрос влияет на практике?
Ваше утверждение практически эквивалентно тому, что ПДД не нужны.
Моё утверждение — мастурбация на формализм не нужна.
Ниже был комментарий по строгость экзаменов в Швеции. Следствие - в ней в 4 разаниже смертность при авариях, чем в США.
А если делить не на население (что не учитывает паттерны движения и уровень использования авто), а на проезжаемое расстояние (per 1 billion km, что, впрочем, тоже идиотизм, хоть и меньший, потому что в эту метрику с одинаковым весом попадают как шведские пассажиры автобусов, которые подавляющую часть своих биллионов проезжают на этом автобусе, так и полулегальные американские дальнобои, которые нарушают все возможные нормы труда и овертаймят как не в себя), то разница окажется уже в два раза, а не в четыре. При этом в какой-нибудь Франции смертность лишь немного ниже, а в Бельгии — даже выше, хотя гугловский AI overview говорит
In Belgium, obtaining a driving license involves passing both a theory and a practical exam. The theory test is a computer-based multiple-choice exam with 50 questions, requiring a minimum score of 41 to pass.
Это дальние последствия отсутствия подхода "разбитых окон". Жизню не обманеш.
Ну да, если начать требовать теорию на экзамене, который сдают лет в 16-18, то люди в 20-30 сразу перестанут пытаться ехать из даунтауна к себе в субурбию после чекушки-другой.
Пакеты маркируются согласно их свойствам, или согласно внешнему относительно них состоянию системы? Иными словами, маркер пакета — это функция от пакета («обнаружили пакет со словом "счастье" в потоке — модифицировали отправку, и анализ показал, что таких пакетов примерно четверть»), или на пакеты можно не смотреть («каждый четвертый пакет заодно имеет флаг heartbeat»)?
Особенно в первом случае (и в некоторых интерпретациях второго) — как конкретно распределены эти пакеты? Бывает ли, что сначала вам на вход идёт N особых пакетов, а потом все неособые, и вам их надо перемешать?
Остаток вашего комментария говорит, что, похоже, от содержимого пакетов это не зависит. Правда, тогда я не понимаю, чем плохо что-то вроде (извините за долгий комментарий, отвлёкся на тестирование):
class Marker {
std::vector<bool> marks_;
size_t counter_ = 0;
public:
void setShare(rational α) {
// заполнить marks_ и обновить counter_ согласно коду, который мне лень переводить на C++
}
auto handlePacket(packet& packet) {
if (marks_[counter++]) {
packet.mark();
}
if (counter_ == marks_.size()) {
counter_ = 0;
}
}
};
где код, который мне лень переводить на C++ —
data Mark = I | O deriving (Eq, Show)
marks :: Ratio Int -> [Mark]
marks ratio
| k == n = replicate n I
| otherwise = go 0 0 []
where
(k, n) = (numerator ratio, denominator ratio)
target = fromIntegral k / fromIntegral n
go marked total acc
| total == n = acc
| otherwise = let shouldMark = total > 0 && fromIntegral marked / fromIntegral total < target
in go (marked + fromEnum shouldMark) (total + 1) ((if shouldMark then I else O) : acc)
вроде норм работает и выглядит равномерно:
λ> marks (2 % 3)
[I,I,O]
λ> marks (1 % 3)
[O,I,O]
λ> marks (2 % 5)
[O,I,O,I,O]
λ> marks (1 % 5)
[O,O,O,I,O]
λ> marks (3 % 5)
[I,O,I,I,O]
λ> marks (11 % 12)
[I,I,I,I,I,I,I,I,I,I,I,O]
λ> marks (5 % 12)
[O,I,O,I,O,O,I,O,I,O,I,O]
λ> marks (79 % 100)
[I,I,I,O,I,I,I,I,O,I,I,I,I,O,I,I,I,I,O,I,I,I,O,I,I,I,I,O,I,I,I,I,O,I,I,I,I,O,I,I,I,O,I,I,I,I,O,I,I,I,I,O,I,I,I,I,O,I,I,I,O,I,I,I,I,O,I,I,I,I,O,I,I,I,I,O,I,I,I,O,I,I,I,I,O,I,I,I,I,O,I,I,I,I,O,I,I,I,I,O]
И тесты проходит
newtype ProperFraction = ProperFraction (Ratio Int) deriving Show
instance Arbitrary ProperFraction where
arbitrary = ProperFraction <$> do
Positive denom <- arbitrary
num <- choose (0, denom - 1)
pure $ num % denom
prop_marksLengthAndCount :: ProperFraction -> Property
prop_marksLengthAndCount (ProperFraction α) =
let result = marks α
in length result === denominator α .&&. length (filter (== I) result) === numerator α
Можно ещё, наверное, как-то равномерность сформулировать и протестировать (типа, наидлиннейшая серия отличается от наикоротчайшей не более, чем на такое-то число), но мне неохота выводить соответствующие утверждения, потому что я ненавижу числа.
И ещё тут моя профдеформация, когда проще максимально тупо и читаемо предрассчитать всё, что нужно, и на горячий цикл оставить минимальное количество работы. И если вам нужна полупроцентная точность, то это максимум съест где-то 20 кэшлайнов, если достаточно процентной (и вы готовы не отличать 98 и 99%), то в худшем случае она съест 5 кэшлайнов, а если сделать чуть умнее, то уложитесь в три в самом худшем случае. Кстати, разница между std::vector<bool> и std::vector<uint8_t> обсуждаема и тоже вопрос трейдоффов.
Ещё круче было бы, конечно, ограничить спектр возможных параметров в компилтайме и передавать туда std::ratio и вычислять всё в constexpr, чтобы и в рантайме аллокаций не было, и компилятор мог всё по максимуму соптимизировать, но это вопрос со звёздочкой.
Отсутствие теоретической части меня вот вообще не смущает (зачем она нужна? хороший экзамен её проверяет на практике). Меня смущает «подготовка» за эти условные 100 баксов.
А так какой-то существенной зависимости отсутствия теории и количества смертей на дорогах на миллион километров нет. Куда больше зависимость от алкоголя, использования ремней безопасности и урбанизации региона.
Это вообще задача на уточнение требований. Как распределена эта доля пакетов? Какие ограничения по памяти, по процу и по латентности? Всякое такое вот.
Раз тут одни автомобильные аналогии, я зачем-то расскажу, как экзамены выглядят здесь.
Во-первых, теоретической части нет. Вообще. Вместо неё есть где-то шесть часов онлайн-курсов, где этак половину времени рассказывают, почему нельзя бухать и текститься за рулём, сопровождая это парой-тройкой подробных историй людей, получивших инвалидность в результате автоаварий, или людей, убивших других в результате наезда, и ещё час — как менять спущенное колесо и как делать jump start.
Теста знаков нет (и на онлайн-курсах их нет, там лейтмотив «разберётесь по ходу дела»). Теста «к перекрёстку подошли автомобиль, коляска, мотоцикл, стрекоза и муравей» нет. Вообще ничего нет. Просто шесть часов у вас на экране крутится видео с проверочными вопросами уровня «с какой стороны у машины руль» и «какой был спидлимит на улице, по которой ехала Дафна, которая текстилась, из-за чего был сбит шестилетний Малькольм».
После прохождения этих курсов вы сдаёте практику, где надо проехать по маршруту, ровно сдать задом метров 10, и параллельно припарковаться. Есть места, где практика сдаётся так: вы платите, скажем, 100 баксов за «подготовку», и в процессе этой подготовки тот же чувак, что будет принимать у вас экзамен, ездит с вами по экзаменационному маршруту (тихий райончик субурбии, где ничего интересного нет) дважды, и рассказывает, куда смотреть, куда когда поворачивать на данном конкретном перекрёстке, и так далее. Параллельная парковка тоже в специальном месте, с достаточно широкими допусками по тому, как далеко вы можете оказаться от бордюра и конусов, символизирующих машины спереди и сзади (и практиковаться на этом месте вы можете хоть весь день перед сдачей).
Ночного вождения нет вообще. Проверки езды по извилистой холмистой дороге в дождь со спидлимитом в 60 миль в час без разделительной полосы нет вообще (и когда я впервые ехал по такой дороге, у меня стресса было чутка побольше, чем под взглядом экзаменатора). Езды по шоссе, собственно, тоже нет.
А мне нравится играть на собеседовании. Особенно когда там собеседуешься в какое-нибудь hft, опять же, а тебя там человек просит написать свой std::any или std::function (классика задач в hft) — можно заодно обсудить, как это писать, оценить уровень собеседующего, что у них принято в команде, и вообще весело провести время.
Мне кажется, тут (в заголовке статьи, по крайней мере) в очередной раз недоопределённое утверждение, и разные люди отстаивают разные его уточнения.
Алгоритмы программисту нужны на уровне «ну эээ сортировать вот std::sort, а если нужно сохранять порядок эквивалентных элементов — std::stable_sort», или «могу строго доказать оценку средней сложности квиксорта»? «Нуу эээ тут надо рандомно переставить элементы, пойду возьму std::random_shuffle», или «знаю и могу доказать корректность алгоритма Фишера-Йейтса, и заодно знаю, как его ускорить папирами Дэниела Лемира от 2019-го года об избегании деления в генерации случайных чисел и его же папира от 2024-го года о batch-генерации случайных чисел»? «Могу, если попыхтеть, написать с третьей попытки редакторское расстояние через динпрог» или «могу выписать уравнение Беллмана и доказать его свойства»?
Первое, конечно, нужно, но первое осваивается за месяц работы средней интенсивности. Второе не нужно почти никому даже в гугле.
Стрессовая обстановка на экзамене по вождению куда ближе к средневзвешенной стрессовости вождения, чем стрессовая обстановка на кодинг-интервью — к таковой в типичной работе (если вы только не устраиваетесь тушить пожары). И штраф за ошибку вождения выше во всех смыслах, чем штраф за косяк в программировании.
Более того, на том же экзамене на вождение у вас не спрашивают, например, как работает blind spot monitor, и как его свойства зависят от погоды и наличия дождя, и что такое коэффициент диэлектрической проницаемости — а зря, потому что люди начинают на BSM полагаться и не учитывают его ограничения (особенно если они без физического образования). А штраф за последующие ошибки, опять же, выше, чем штраф оттого, что вы там граф как-то неоптимально обходите.
Там скорее роляет соотношение размера шрифта, длины строки и междустрочного интервала.
Я замерял скорость чтения на относительно однородных текстах (не сильно хардовый и не сильно философский сайфай без кучи диалогов) — подобное в районе оптимума. Если сделать междустрочный интервал меньше, чем на фотке, я читаю измеримо медленнее, а от его увеличения скорость чтения существенно не увеличивается. На мобильнике (с более узким экраном), соответственно, интервал ещё меньше.
Ещё можно так со шрифтами и цветами играться. Здесь тоже я более-менее оптимумы выбрал.
На самом деле я забочусь о других людях, потому что не всем придёт в голову спрашивать «а используете ли вы комментарии для версионирования кода?», а такая практика — это трэш и угар. Особенно с мотивацией «не умею/не привык» — это тоже интересный сигнал о вашей команде, который будет полезен потенциальным нанимающимся.
Ну вообще-то можно депремировать и вообще увольнять.
У нанимателей-непрограммистов нет никаких методов понять, что команда пишет ремонтопригодный код, это да, но это другой вопрос (и стыдом и мотивациями он тоже не чинится).
Чтобы сэкономить время и силы и себе в том числе. А то так наймёте человека, который слишком отстал для таких практик, не сработаетесь с ним, он уйдёт, и вы потеряли время на найм и онбоардинг. Надо ли оно вам?
А вообще показательный вопрос, конечно.
Ну а какие они? Не ведомые же.
Нет. Его ещё хотели расширить на другие виды входных данных, и проверить, что его предположения всё ещё выполняются спустя 10 лет, но это невозможно, потому что непонятно, что он делает.
Первоначальное ТЗ звучало как «сделать систему определения аномалий во временных рядах». Переписать это с нуля — это с нуля провести исследования о том, что и как работает в данном контексте.
Но в итоге ровно это я и сделал, да. Этот код в итоге был выкинут и даже не переписан.
Хм.
Возможно, тут есть какая-то связь…
У меня на одной прошлой работе был такой проект: разобраться, что именно делает одно расчётное ядро (по поиску аномалий во временных рядах), которое было написано как раз товарищем только после универа. Рекурсий по пространствам там не было, но там был
.cpp-файл на пару тыщ строк, где все функции обменивались данными друг с другом через одну глобальнуюstd::map<std::string, std::string>(да, вы угадали, вычисленные в одной функции float-коэффициенты передавались в другую функцию через конвертацию в строку и обратно), и средняя функция выглядела как пара десятков строк вида(хотя наличие названия
updateStep14— это ещё хороший случай).Перебор? Абсолютно!
Понимал ли я с трудом, как это работает? С трудом. Календарный год пытался понять.
Тесты не заваливало, да. Их просто не было.
На проде без правок было не пять лет, а все десять, просто потому, что это никто не хотел трогать. Даже несмотря на то, что оно тормозило как не в себя.
Здорово! Одна просьба — делитесь, пожалуйста, информацией об этих ведущих практиках с потенциальными нанимающимися. Лично мне такое спрашивать в голову обычно не приходит, не дорос ещё до таких техник, поэтому на месте интервьюируемого я бы хотел о таком слышать без всяких наводящих вопросов с моей стороны.
Тут какое-то бинарное мышление с неявной дихотомией между «наяриваем красивый код, напрочь игнорируя нужды заказчика и теряя деньги» и «делаем только то, что просит заказчик, заказчик рефакторинг не просит — не делаем».
Кстати, за какие конкретно тикеты платит заказчик фотошопа, автокада или clion'а?
Заказчик готов обменять свои деньги на определённый продукт, да. Но это не значит, что он платит только за то, чем он будет пользоваться прямо сразу после получения продукта. Те деньги, которые он даёт вашей фирме, фирма вольна распределять по своему усмотрению на техдолг, на текущие тикеты, на самообразование сотрудников и на директору фирмы на яхты (или сгущёнку, смотря что за фирма и что за директор).
Более того, даже если у продавана в вашей фирме происходит такой диалог с заказчиком:
— (З) Хочу такую-то финтифлюшку.
— (П) 1500 баксов.
— Не, 1200 максимум.
— Ну ок.
то это не значит, что вы все 1200 баксов обязаны потратить на ровно эту финтифлюшку, покуда она будет всё равно доставлена на устраивающем заказчика уровне.
И, собственно, решение вопроса распределения доходов на разные задачи — это ровно то, что отличает успешные фирмы от шараг.
Ну и ещё тут вопрос о том, что такое «нормально» в вашей фразе про нормальность тысяч тикетов. Воровство — это тоже в определённом смысле нормально — оно в каком-то объёме есть во всех социумах и известно любому человеку, но это не значит, что с вашим обоснованием «я украл потому, что воровство нормально и присутствует во всех культурах» согласится обворованный или прокуратура.
Очень здорово. Как это помогает водить машину?
Это как учиться говорить на английском, зазубривая все прошедшие времена, и какая форма first/second/third conditional соответствует какой семантике (я второе десятилетие живу в англоязычных странах, и при этом сам это не вспомню, даже если когда-то знал, что нисколько не мешает), и потом их мучительно вспоминая, что надо использовать в данный момент беседы (а когда вы вспомнили, беседа уже ускакала вперёд — успехов вам так поддерживать разговор). И ещё обязательно ставить язычок на бугорки, когда произносишь th.
Нет, серьёзно, ожидается, что у водителя есть лазерный дальномер в глазах, и он может отличить видимость в 299 метров от видимости в 301 метр? Что это вообще значит — я не могу различить контуры за 300 метров? Или не могу распознать объект быстрее, чем за n секунд? Через 300 метров не видно дальний свет встречной машины? Или что? Хотите бюрократии и формализма — получайте до конца, а то уже тут какие-то фрактальные потёмкинские деревни, когда некоторый вид наукообразия мы сделали, но он не даёт ничего, кроме чувства важности составляющему экзамен.
Вы на какой вопрос здесь отвечали, и как он связан с тем, что спросил я?
А жаль, на каком-нибудь F/A-18 я бы полетал вживую (и на цэшке раньше много летал в DCS).
Но, впрочем, вы на вопрос можете ответить без гибрида апелляции к авторитету и гало-эффекту?
Слышали полубайку про Фейнмана и то ли французский, то ли бразильский подход к обучению физике? Формулы оттараторить могут, а применить их к реальным задачам — нихрена. Зато их версии ЕГЭ сдают на отлично, я уверен.
То есть, вы хотите сказать, что, выходит, есть какие-то другие факторы, кроме наличия теоретической части экзамена? Или это выходит, только когда другие страны сравнимы с (или хуже) США по смертности на дорогах, а когда другие страны не хуже, то тогда и только тогда всё дело в теории?
Я продвигаю подход «не надо делать абы что просто ради создания иллюзии действия» (с тем же успехом можно помолиться, в конце концов), но ваш вариант тоже интересный.
Здесь согласен, ЕВПОЧЯ.
Ну это норм навыки. Я уже джва года лениво пытаюсь найти какую-нибудь автошколу, где всему этому бы учили.
Скрытый текст
и ещё стрелять в движении, конечно же
Кстати, курс стрельбы с вертолёта оказалось найти легче, чем курс экстремального вождения.
И сразу же первым вопросом
с вариантами, среди прочего,
Видимость водителем дороги менее 300 м в условиях тумана, дождя, снегопада, а также в сумерки.
Видимость водителем дороги менее 150 м в ночное время.
Как измеримо отличается водитель, который знает, что там бюрократ имел в виду в данном конкретном случае? На что знание ответа на этот вопрос влияет на практике?
Моё утверждение — мастурбация на формализм не нужна.
А если делить не на население (что не учитывает паттерны движения и уровень использования авто), а на проезжаемое расстояние (per 1 billion km, что, впрочем, тоже идиотизм, хоть и меньший, потому что в эту метрику с одинаковым весом попадают как шведские пассажиры автобусов, которые подавляющую часть своих биллионов проезжают на этом автобусе, так и полулегальные американские дальнобои, которые нарушают все возможные нормы труда и овертаймят как не в себя), то разница окажется уже в два раза, а не в четыре. При этом в какой-нибудь Франции смертность лишь немного ниже, а в Бельгии — даже выше, хотя гугловский AI overview говорит
Ну да, если начать требовать теорию на экзамене, который сдают лет в 16-18, то люди в 20-30 сразу перестанут пытаться ехать из даунтауна к себе в субурбию после чекушки-другой.
Мне было непонятно следующее, например:
Пакеты маркируются согласно их свойствам, или согласно внешнему относительно них состоянию системы? Иными словами, маркер пакета — это функция от пакета («обнаружили пакет со словом "счастье" в потоке — модифицировали отправку, и анализ показал, что таких пакетов примерно четверть»), или на пакеты можно не смотреть («каждый четвертый пакет заодно имеет флаг heartbeat»)?
Особенно в первом случае (и в некоторых интерпретациях второго) — как конкретно распределены эти пакеты? Бывает ли, что сначала вам на вход идёт N особых пакетов, а потом все неособые, и вам их надо перемешать?
Остаток вашего комментария говорит, что, похоже, от содержимого пакетов это не зависит. Правда, тогда я не понимаю, чем плохо что-то вроде (извините за долгий комментарий, отвлёкся на тестирование):
где код, который мне лень переводить на C++ —
вроде норм работает и выглядит равномерно:
И тесты проходит
Можно ещё, наверное, как-то равномерность сформулировать и протестировать (типа, наидлиннейшая серия отличается от наикоротчайшей не более, чем на такое-то число), но мне неохота выводить соответствующие утверждения, потому что я ненавижу числа.
И ещё тут моя профдеформация, когда проще максимально тупо и читаемо предрассчитать всё, что нужно, и на горячий цикл оставить минимальное количество работы. И если вам нужна полупроцентная точность, то это максимум съест где-то 20 кэшлайнов, если достаточно процентной (и вы готовы не отличать 98 и 99%), то в худшем случае она съест 5 кэшлайнов, а если сделать чуть умнее, то уложитесь в три в самом худшем случае. Кстати, разница между
std::vector<bool>иstd::vector<uint8_t>обсуждаема и тоже вопрос трейдоффов.Ещё круче было бы, конечно, ограничить спектр возможных параметров в компилтайме и передавать туда
std::ratioи вычислять всё вconstexpr, чтобы и в рантайме аллокаций не было, и компилятор мог всё по максимуму соптимизировать, но это вопрос со звёздочкой.Отсутствие теоретической части меня вот вообще не смущает (зачем она нужна? хороший экзамен её проверяет на практике). Меня смущает «подготовка» за эти условные 100 баксов.
А так какой-то существенной зависимости отсутствия теории и количества смертей на дорогах на миллион километров нет. Куда больше зависимость от алкоголя, использования ремней безопасности и урбанизации региона.
Оно самое.
Это вообще задача на уточнение требований. Как распределена эта доля пакетов? Какие ограничения по памяти, по процу и по латентности? Всякое такое вот.
Раз тут одни автомобильные аналогии, я зачем-то расскажу, как экзамены выглядят здесь.
Во-первых, теоретической части нет. Вообще. Вместо неё есть где-то шесть часов онлайн-курсов, где этак половину времени рассказывают, почему нельзя бухать и текститься за рулём, сопровождая это парой-тройкой подробных историй людей, получивших инвалидность в результате автоаварий, или людей, убивших других в результате наезда, и ещё час — как менять спущенное колесо и как делать jump start.
Теста знаков нет (и на онлайн-курсах их нет, там лейтмотив «разберётесь по ходу дела»). Теста «к перекрёстку подошли автомобиль, коляска, мотоцикл, стрекоза и муравей» нет. Вообще ничего нет. Просто шесть часов у вас на экране крутится видео с проверочными вопросами уровня «с какой стороны у машины руль» и «какой был спидлимит на улице, по которой ехала Дафна, которая текстилась, из-за чего был сбит шестилетний Малькольм».
После прохождения этих курсов вы сдаёте практику, где надо проехать по маршруту, ровно сдать задом метров 10, и параллельно припарковаться. Есть места, где практика сдаётся так: вы платите, скажем, 100 баксов за «подготовку», и в процессе этой подготовки тот же чувак, что будет принимать у вас экзамен, ездит с вами по экзаменационному маршруту (тихий райончик субурбии, где ничего интересного нет) дважды, и рассказывает, куда смотреть, куда когда поворачивать на данном конкретном перекрёстке, и так далее. Параллельная парковка тоже в специальном месте, с достаточно широкими допусками по тому, как далеко вы можете оказаться от бордюра и конусов, символизирующих машины спереди и сзади (и практиковаться на этом месте вы можете хоть весь день перед сдачей).
Ночного вождения нет вообще. Проверки езды по извилистой холмистой дороге в дождь со спидлимитом в 60 миль в час без разделительной полосы нет вообще (и когда я впервые ехал по такой дороге, у меня стресса было чутка побольше, чем под взглядом экзаменатора). Езды по шоссе, собственно, тоже нет.
А мне нравится играть на собеседовании. Особенно когда там собеседуешься в какое-нибудь hft, опять же, а тебя там человек просит написать свой
std::anyилиstd::function(классика задач в hft) — можно заодно обсудить, как это писать, оценить уровень собеседующего, что у них принято в команде, и вообще весело провести время.Мне кажется, тут (в заголовке статьи, по крайней мере) в очередной раз недоопределённое утверждение, и разные люди отстаивают разные его уточнения.
Алгоритмы программисту нужны на уровне «ну эээ сортировать вот
std::sort, а если нужно сохранять порядок эквивалентных элементов —std::stable_sort», или «могу строго доказать оценку средней сложности квиксорта»?«Нуу эээ тут надо рандомно переставить элементы, пойду возьму
std::random_shuffle», или «знаю и могу доказать корректность алгоритма Фишера-Йейтса, и заодно знаю, как его ускорить папирами Дэниела Лемира от 2019-го года об избегании деления в генерации случайных чисел и его же папира от 2024-го года о batch-генерации случайных чисел»?«Могу, если попыхтеть, написать с третьей попытки редакторское расстояние через динпрог» или «могу выписать уравнение Беллмана и доказать его свойства»?
Первое, конечно, нужно, но первое осваивается за месяц работы средней интенсивности. Второе не нужно почти никому даже в гугле.
Стрессовая обстановка на экзамене по вождению куда ближе к средневзвешенной стрессовости вождения, чем стрессовая обстановка на кодинг-интервью — к таковой в типичной работе (если вы только не устраиваетесь тушить пожары). И штраф за ошибку вождения выше во всех смыслах, чем штраф за косяк в программировании.
Более того, на том же экзамене на вождение у вас не спрашивают, например, как работает blind spot monitor, и как его свойства зависят от погоды и наличия дождя, и что такое коэффициент диэлектрической проницаемости — а зря, потому что люди начинают на BSM полагаться и не учитывают его ограничения (особенно если они без физического образования). А штраф за последующие ошибки, опять же, выше, чем штраф оттого, что вы там граф как-то неоптимально обходите.
Там скорее роляет соотношение размера шрифта, длины строки и междустрочного интервала.
Я замерял скорость чтения на относительно однородных текстах (не сильно хардовый и не сильно философский сайфай без кучи диалогов) — подобное в районе оптимума. Если сделать междустрочный интервал меньше, чем на фотке, я читаю измеримо медленнее, а от его увеличения скорость чтения существенно не увеличивается. На мобильнике (с более узким экраном), соответственно, интервал ещё меньше.
Ещё можно так со шрифтами и цветами играться. Здесь тоже я более-менее оптимумы выбрал.
Что за внутреннее качество? Чем выделяетесь?