• Code review: вы делаете это неправильно
    0
    код может быть непонятен читающему в силу нескольких факторов, и квалификация написавшего всего лишь один из них. Абстрактный джун может быть недостаточно знаком с используемыми ЯП/фреймворками/библиотеками/паттернами, терминологией и матчастью предметной области и т.д.
  • Заблуждения программистов о трудоустройстве
    0
    не путайте с B2, он же upper intermediate, он же vantage/fluent — «свободный» разговорный. Обычный intermediate это «читать умею, но мою речь поймет разве что мой учитель английского»
  • Заблуждения программистов о трудоустройстве
    0
    попробуйте проверить свои силы на тестовых задачках. Возможно, вы недооцениваете себя. Если же нет, то хоть поймете куда стремиться
  • Правообладатели считают, что «Яндекс» способствует росту пиратства в стране
    +2
    стим часто раздает игры с огромными скидками. Здесь тоже своего рода Крест Маршалла — чем дешевле, тем чаще покупают.
  • Правообладатели считают, что «Яндекс» способствует росту пиратства в стране
    +6
    погодите секунду. Если сайт нелегальный, то он запрещен, так? Значит формально доступ к нему пользователь не получит даже по ссылке из яндекса. А ежели сайт легальный, то какие претензии к поисковику, направляющему на легальный сайт? Есть механизм борьбы — внесение в реестр запрещенных сайтов. После этого любой поисковик в течение максимум недели автоматически перестает обходить сайт. Не могут бороться с VPN, а виноват яндекс. Это было бы смешно если не было бы грустно.
  • Психология читабельности кода
    0
    the noisest rules in decreasing value of D statistic in MISRA C 1998

    «зашумленно ухудшающие код» правила из MISRA C “1998”. Но разумеется это я читаю и ничего не понимаю, ага.

    Общепринятая трактовка в данном случае не является оригинальной. И вы бы об этом знали, следуй вы собственным советам
  • Психология читабельности кода
    0
    Не знаю, почему Вам показалось, что эти языки были приведены для доказательства рекомендаций, появившихся до C(особенно MISRA C, конечно), ...

    в том абзаце мы говорили про «структурный код» (1968). Си появился в 1969. Теперь по части эффективности single return:
    Table 2: The noisiest rules in decreasing value of D statistic in MISRA C 1998

    10.1 Implicit conversion of integer types
    13.1 No assignment in Boolean valued expressions
    14.8/14.9 if, while and for must be compound statements
    11.1-4 Conversions between pointers
    12.7 No bitwise operations on signed types
    12.5 Operands of logical operators must be primary expressions
    16.8 All exits in non-void function must have a return
    14.7 A function shall have a single point of exit

    эти правила ухудшают среднее качество кода

    Вы привели в качестве аргумента в споре “early return vs single return” новые языки, дизайн которых опирается на early return. Поздравляю, you played yourself.
    Это они чушь какую-то написали, не посоветовавшись с Вами?

    да.
  • Психология читабельности кода
    0
    Понятия «структурный поток выполнения» не существует так же, как и не существует понятия «неструктурный код» в контексте кода, использующего early return. Хватит придумывать новый термин каждый раз когда заканчивается аргументация.

    Новые языки go/rust по дизайну реализуют обработку ошибок через early return, и эмулируют исключения через возврат вариантов код ошибки/значение. Для доказательства актуальности гайдлайнов, появившихся до си, пример крайне неудачный
  • Психология читабельности кода
    0
    Я пользуюсь общепринятой терминологией, которую, возможно, Вам тоже следует изучить прежде, чем что-то брать в кавычки.

    превосходный совет, рекомендую. Принцип “Single entry, single exit” (на «нарушение» которого вы ссылаетесь называя код неструктурным) значит, что у функции одна точка входа и одна точка выхода. То есть, она возвращается в одно место в коде, а не из одного места. Т.к. все return ведут в одну точку кода программы, этот принцип выполняется независимо от числа return внутри функции. Опять же, механизм исключений, появившийся позже, противоречит принципу sese. Значит ли, что стоит убирать исключения из всех яп их использующих? Нет.
  • Психология читабельности кода
    0
    исследование по поводу эффективности MISRA C:
    спойлер
    A study at the TU Delft, by Cathal Boogerd and Leon Moonen, empirically assesses the value of MISRA C:2004. It comes to similar results:[22]
    From the data obtained, we can make the following key observations. First, there are 9 out of 72 rules for which violations were observed that perform significantly better (α = 0.05) than a random predictor at locating fault-related lines. The true positive rates for these rules range from 24-100%. Second, we observed a negative correlation between MISRA rule violations and observed faults. In addition, 29 out of 72 rules had a zero true positive rate. Taken together with Adams' observation that all modifications have a non-zero probability of introducing a fault, this makes it possible that adherence to the MISRA standard as a whole would have made the software less reliable.


    Итог: софт, следующий заветам MISRA C, менее надежен.
    И вообще, вы называете «неструктурным» код, в котором структура прослеживается проще.
  • GitHub теперь официально принадлежит Microsoft
    +4
    скайп до мс был однозначно лучшим мессенджером. После покупки какое-то время пользователи даже залогиниться не могли
  • GitHub теперь официально принадлежит Microsoft
    +2
    будем надеяться гит не постигнет участь скайпа…
  • Психология читабельности кода
    0
    Если в коде встречается виртуальная лесенка из 10 return (а не switch), то скорее всего, там проблема на архитектурном уровне, и надо не потакать ей неструктурными подходами, а решать.

    «лесенка» растет из-за вложенных if, циклов и switch. Например, здесь «хороший» пример кода с 14-м уровнем вложенности. Я адаптировал этот код через early return, получилось втрое меньше строк и четыре уровня вложенности. Как думаете, стало проще?

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

    Давайте на примере. Дейкстра предлагает отказаться от goto. В си нет автоматического управления ресурсами, поэтому перед возвратом их надо освобождать. Очищать ресурсы перед каждым early return неудобно, в си можно делать через goto, например
    так
    void foo(...) {
        resource1 = ...
        if (плохо1)
            goto cleanup1;
        //...
        resource2 = ...
        if (плохо2)
            goto cleanup2;
        //...
    cleanup2:
        (очистка ресурса 2);
    cleanup1:
        (очистка ресурса 1);
    }


    Это достаточно удобно, но здесь присутствует goto. Следовательно, следуя заветам Дейкстры, следует отказаться от раннего возврата. Однако, с тех пор: 1. появилось много языков с автоматическим освобождением ресурсов. 2. люди отвыкли использовать goto там, где его можно заменить циклами, он начал встречаться крайне редко и для упрощения кода (мой пример).

    Но моё мнение основано на анализе ошибок, в том числе и приведшим к уязвимостям, я не делаю упор на «я так вижу».

    вы делаете упор именно на это.

    Ну и напоследок, как Вы думаете, всё-таки есть люди, для которых структурный поток более читаемый, или это непременно фанатики из 70-х?

    что важнее — факт существования или относительное количество?
  • Бьёрн Страуструп: Проблема с программированием
    +1
    вот вы привели пример из книги Майерса на тему «зачем нужен make_unique», но в угоду аргументу забыли про make_unique. Вас совесть после этого не мучает?
  • Бьёрн Страуструп: Проблема с программированием
    +1
    а где знаки *, & && и пр. предполагаются по умолчанию?
  • Почему "=" означает присваивание?
    0
    Либо у вас ошибки типа переполнения счётчика…
    … что предлагает C#/Java ...

    я говорил скорее про исключения в с++, которые (по идее) являются не следствием ошибки программиста, а сигналом о некорректном состоянии программы/окружения для выполнения операции. А ошибки типа выхода за границы — просто UB.
    То же самое можно сказать про GoTo

    исключения могут быть вложенными. Типа «Измерение не удалось» потому что «Нет соединения с датчиком» потому что «не установлен драйвер ...».
  • Почему "=" означает присваивание?
    0
    не очень хорошие примеры вы привели. Обработку ошибок в Go не пинает только ленивый. А в rust best practice — функция возвращает Option/Result и использует макро try! для быстрого возврата ошибки. Грубо говоря, это более явная и менее удобная эмуляция тех самых исключений.

    Сами по себе исключения — максимально лаконичный и гибкий инструмент. Не всегда уместный и неявный, и от того сильно недооцененный, на мой взгляд. Именно посредством исключений можно «прокидывать» максимум любой отладочной информации. Разве что в языках с поддержкой исключений я бы предпочел вариант «функция может кидать исключения только если это указано» вместо «функция может кидать исключения если не указано обратное».
  • Почему "=" означает присваивание?
    +4
    обычно в таких случаях cleanup блок делают внизу функции:
    void foo(...) {
        resource1 = ...
        if (плохо1)
            goto cleanup1;
        //...
        resource2 = ...
        if (плохо2)
            goto cleanup2;
        //...
    cleanup2:
        (очистка ресурса 2);
    cleanup1:
        (очистка ресурса 1);
    }
    

    такой early return не противоречит позитивному сценарию и в принципе используется достаточно часто.
  • Психология читабельности кода
    –1
    С точки зрения читаемости такой код лучше:

    не согласен, категорически. Early return/throw — такой же шаблон восприятия, что и обычный for, его назначение интуитивно понятно, а позитивный и негативный сценарии выполнения легко отличимы при беглом осмотре. И уже бонусом к этому идет уменьшение уровней вложенности.
  • «Ростелеком» призывает давать в российских сетях приоритет трафику тех телеком-компаний, которые за него заплатили
    0
    в этом случае санкции против русского населения хотят ввести русские же бизнесмены чтобы получить больше прибыли.
  • «Ростелеком» призывает давать в российских сетях приоритет трафику тех телеком-компаний, которые за него заплатили
    0
    Позиция бизнесмена то понятна — ему выгоднее предоставлять как можно меньше услуг за те же деньги, и плевал бизнесмен на основополагающие свободы населения типа интернет-нейтралитета. В итоге то закон Яровой оплачивает не он, а то самое население.
  • Использование std::optional в С++17
    0
    а чем вариант value_or_get(func) лучше, чем вариант value_or(func())?
  • Использование std::optional в С++17
    +1
    Этот тип является типом-значением (value-type) (таким образом, вы можете копировать его).

    только если параметризующий тип поддерживает копирование.

    Поэтому, если он вам и правда нужен, возможно лучше использовать настоящий троичный тип — std::tribool.

    boost::tribool*
  • Грязные трюки разработчиков видеоигр
    +2
    const не особо влияет на оптимизации даже сейчас, а тогда и подавно был не более чем диагностикой компилятора. Да и появился const в языке си тоже не сразу, и в какое-то время практика его использования еще не выработалась
    Upd: Ну и не знаю как они при таком трюке не схватили ошибку компиляции для перегрузок вида:

    перегрузки доступны в с++, а не в чистом си, о котором идет речь (возможно, тогда плюсов еще и не было)
  • Как обновление Rust 1.26 ускорило мой код в три с лишним раза
    0
    я подумал в новом расте появилась какая-то могучая оптимизация, ан нет, просто поддержка старого доброго нового типа…
  • «Жизнь после Java 10»: какие изменения принесет Java 11
    +2
    Что касается нового JIT-компилятора, то он направлен на улучшение производительности JVM. Прежняя версия JVM была написана на C++, однако в рамках проекта Metropolis большую часть JVM перепишут на Java.

    но зачем?
  • Собираем Qt 5.6 (MSVC) с OpenSSL и поддержкой Windows XP
    0
    наверно если программа работает недостаточно быстро, надо искать проблему не в одной лишней аллокации при создании одной кнопки? Прагматичный подход — написать чтоб работало и потом оптимизировать, и тенденция к нему прослеживается во всех современных технологиях. А уже оптимизировать на плюсах проще, попросту потому что не надо вручную писать базовые алгоритмы и контейнеры.
  • Собираем Qt 5.6 (MSVC) с OpenSSL и поддержкой Windows XP
    0
    по идее, и более поздние должны работать если собирать без некоторых модулей (типа WebGL)
  • Собираем Qt 5.6 (MSVC) с OpenSSL и поддержкой Windows XP
    +2
    это хорошо, если требования «должно работать на говне мамонта без видеокарты, драйверов и сервис паков» не приходят на 70+% выполнения. Если речь о внутреннем проекте, может быть дешевле купить 1-2 копии винды и их накатить, чем пилить поддержку win xp
  • Этот день мы приближали, как могли — блокнот в Windows 10 стал понимать юниксовый перевод строки
    0
    там в соседней вкладке есть еще вкладочка «wanted»: 10.9% linux и 2.7% win desktop/server. Или здесь линуксоиды тоже «запинали» windows? Разработчиков под win больше тупо потому, что на разработку под win больше заказов. Многие вообще под linux не программировали, вероятно потому у них windows desktop/server и loved.
  • Этот день мы приближали, как могли — блокнот в Windows 10 стал понимать юниксовый перевод строки
    0
    а еще опрос на стеке говорит что винда — стабильно одна из most dreaded, в то время как linux desktop — most loved платформы
  • Этот день мы приближали, как могли — блокнот в Windows 10 стал понимать юниксовый перевод строки
    0
    надо будет запомнить, а то в последний раз edge не хотел скачивать установочник chrome (со всеми остальными файлами всё было в порядке)
  • Этот день мы приближали, как могли — блокнот в Windows 10 стал понимать юниксовый перевод строки
    +1
    зачем тогда в базовой комплектации вин10 две программы для произведения видео, две для воспроизведения аудио, две рисовалки и «средство для просмотра смешанной реальности»?
  • Этот день мы приближали, как могли — блокнот в Windows 10 стал понимать юниксовый перевод строки
    0
    а почему бы и нет? Почему бы не поставлять в винде vscode вместо блокнота?
  • Этот день мы приближали, как могли — блокнот в Windows 10 стал понимать юниксовый перевод строки
    +1
    там же не только важное. Есть несколько предустановленных игр, OneDrive, Skype и офис (их я конечно с большой вероятностью буду использовать, но факт же), Sketchbook, «проигрыватель Windows Media» дублирует функционал «Кино и ТВ»/Groove телеметрия и несколько других бестолковых служб (в частности, предзагрузка многих приложений windows), и это только беглый обзор. В итоге блокнот — единственное приложение, которое не эволюционировало со времен зарождения windows, а там не хватает только подсветки и выбора кодировок
  • Комментирование кода: хороший, плохой, злой
    +2
    бывают куски кода/логики, которые всегда лучше с комментариями:
    1. Оптимизации — краткое пояснение аля «это более быстрая версия вот этого», чтобы у забредших душ других программистов не было желания переписать на более простую, но медленную версию. Заодно и понять код будет проще
    2. Нетривиальная математика — краткое описание «этот алгоритм делает то-то» или указание (хотя бы) названия алгоритма могут сэкономить много времени читающего. Особенно это актуально когда в алгоритме есть специфичные модификации.
    3. Костыли — бывает так, что нет времени/возможности/сиюминутной необходимости сделать хорошо. С комментарием хоть будет понятно на что обратить внимание и что в первую очередь переделывать при работе с этим куском кода
  • Кросс-языковая разработка ПО
    +1
    основные реализации python — не полноценные вм, как у java/c#, а обычные не оптимизирующие интерпретаторы. python хорош для использования библиотек (особенно написанных на c/c++), но не для их написания. И уж тем более не для арифметических задач.
  • Кросс-языковая разработка ПО
    +11
    а не логичнее ли наладить interoperability компонентов, написанных на разных языках?
    Но оказался неправ — C# всего на 15-20% быстрее Java (запускал из Eclipse под Windows), а не в несколько раз, как ожидалось

    вы всерьез сравниваете производительность оригинального C# кода и автогенерированного, использующего оболочки и эмулирующего C#-концепции Java-кода?
  • Не пишите лишнего
    0
    вы выбираете какой из двух примеров плохо структурированного кода лучше не имея представления о том, как должен выглядеть хорошо структурированный код. Недавно выкладывали статью про исследование кода LLVM, в числе прочего указали процент больших (> 70 строк) функций. Их процент ничтожен

    Сложность теста пропорциональна сложности метода. Проще метод — проще тест.

    Проект редко (никогда не) заканчивается сразу после реализации первично обговоренного функционала. Лучше сделать код расширяемым чем рефакторить на каждую хотелку.
  • Статический анализ в видеоигровой индустрии: топ-10 программных ошибок
    –4
    и уж наверняка бы её не возникло, называйся метод get_container_size_is_equal_to_zero(); (сарказм)