LINUX.ORG.RU

Какой должен быть тест на базовые знания C++?

 ,


0

3

Недавно видел тест, «Базовый C++», который предлагают нашим инженерам-программистам. Видимо, хотят понять, вдупляем ли мы вообще C++ или требуется обучение.

Но тест не про это, что вообще характерно для плюсов. Вернее, только первую треть вопросов можно отнести к категории «базовый C++», потому что там действительно вопросы на базовое понимание синтаксиса и семантики фич.

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

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

Последняя часть меня просто убила. Там были задания, как будто вот с этих ваших писькомерных сайтов с задачками на C++ или олимпиады, вообще никакого отношения к теме «базовый C++».

И вот я подумал, от чего так? Почему люди концентрируют внимание на какой-то укуренной белиберде - которую у джунов надо наоборот вытравливать на ранних стадиях, чтобы писали надежный, читаемый и поддерживаемый код - а не на том, что кодеру нужно будет в реальной работе? Ведь дофига есть актуальных тем, например, современные фичи C++, как писать безопасный код, параллельные вычисления, стандартная библиотека. Складывается такое ощущение, что такие тесты пишут какие-то сычи, которые специализируются на олимпиадах и говнокоде, на каких-то нахрен никому не нужных редких правилах C++.

★★★★★
Ответ на: комментарий от rumgot

Это менее читаемо, чем вызовы в столбик. А если имена будут длинее и список параметров больше - то будет еще хуже.

Не говоря уже о том, что все это накрывается медным тазом как только:

  • между вызовами f1 и f2 нужно сделать еще какие-то действия (отладочная печать хотя бы или, примитивно, инкремент-декремент какого-нибудь счетчика);
  • выясняется, что функция f_i стала возвращать не bool, а int, и этот int нужно проанализировать и сохранить для последующего использования.
eao197 ★★★★★
()
Ответ на: комментарий от alysnix

прямо в месте вызова видно, что она может завершиться с ошибкой

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

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

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

rumgot ★★★★★
()
Ответ на: комментарий от alysnix

Да, запись:

!f1() ||
!f2() ||
!f3()

объективно содержит больше символов чем:

f1();
f2();
f3();

и читается второй вариант проще.

Плюс там еще нет чтения информации об ошибке.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от rumgot

Если ошибка обработается центролизованно в конце вызова группы функций - то это по твоему хуже, да? А по мне нет.

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

https://en.cppreference.com/w/cpp/utility/expected

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от alysnix

так еще бы про мьютекс сказал бы что это ОДИН из фундаментальных примитивов.

Так и запишем. И заодно сольём в унитаз все заявления про realtime, потому как даже близко не пахнет.

bugfixer ★★★★★
()
Ответ на: комментарий от alysnix

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

Ну вводит и что с того? Это просто поддержка нового способа обработки / получения информации об ошибках.

Исключения объявили как deprecated и выкинули в новом стандарте? Да? Нет.

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

Это просто поддержка нового способа обработки / получения информации об ошибках.

это тот самый способ, о котором я говорю. введенный в стандартную библиотеку. и голанг я тоже упоминал.

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

alysnix ★★★
()
Ответ на: комментарий от alysnix

и голанг я тоже упоминал.

В golang-е возвращается пара значений (в С++ такое можно было бы делать через std::pair). В C++ же возвращается только одно значение. Так что никак на golang не похоже. Очередные обосратушки.

std::expected – это специализированный аналог std::variant. В других языках – это Result из Rust или Either из Scala.

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

Один из этих некоторых про std::excpected написал прямым текстом.

когда есть такие прекрасные эксепшены.

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

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Один из этих некоторых про std::excpected написал прямым текстом.

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

В golang-е возвращается пара значений (в С++ такое можно было бы делать через std::pair). В C++ же возвращается только одно значение. Так что никак на golang не похоже. Очередные обосратушки.

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

std::expected – это специализированный аналог std::variant.

какое неожиданное открытие.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от alysnix

когда вы с одной стороны пропагандируете эксепшены, а с другой упоминаете возврат в виде expected.

Т.е. после 20+ лет в программизме вы еще не допетрили, что исключения и возвращаемые значения не противоречат друг другу?

Ну ахиреть!

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

вы там спрашивали - как возвращать ошибку, вот вам и способ это сделать

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

Что и сделали в очередной раз, поздравляю!

eao197 ★★★★★
()
Ответ на: комментарий от eao197

и таки в своих либах вы какую стратегию используете?

все на эксепшенах, как учит вас партия, все на кодах ошибок, как несчастный гугл, или микс, как std::filesystem.

вы уже определились?

alysnix ★★★
()
Ответ на: комментарий от eao197

исключения должны применяться для исключительных ситуаций.

я именно с этого и начинал, советуя присмотреться к логике Хоара. там экспешены определены строго и формально. и не надо мне заворачивать назад то, что пытались вам показать.

что такое у вас «исключительная ситуация», дайте определение.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от alysnix

и не надо мне заворачивать назад то, что пытались вам показать.

Показали вы только публичные обосратушки.

И когда вас просили привести примеры.

И когда вы апеллировали к Google, который исключения не использует. Ведь тогда же логика Хоара вас не волновала же, правда ведь?

eao197 ★★★★★
()
Ответ на: комментарий от eao197

повторяю вопрос - он принципиальный.

что такое у вас «исключительная ситуация», дайте определение.

это мы по второму кругу пошли

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от alysnix

это тот самый способ, о котором я говорю. введенный в стандартную библиотеку. и голанг я тоже упоминал.

Его вес не стал больше, оттого, что его гугл использует.

rumgot ★★★★★
()
Ответ на: комментарий от alysnix

меня эта логика волновала всегда.

Не-а.

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

цынк

Вы тупо не используете исключения и вам, следовательно, насрать на Хоара.

повторяю вопрос

Вы проигнорировали столько вопросов, что можете повторять хоть до посинения. Ваше поведение к вам бумерангом и вернется.

что такое у вас «исключительная ситуация», дайте определение.

Вы еще попросите двумя словами понятие «монада» объяснить.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Вы тупо не используете исключения и вам, следовательно, насрать на Хоара.

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

alysnix ★★★
()
Ответ на: комментарий от alysnix

вы просто его не поняли

Не понял кого? Вас, гугл, Хоара?

Кстати говоря, если ссылаетесь на Хора, то делайте это с полной цитатой (еще лучше с ссылкой на публично доступный документ). А то ведь есть далеко не нулевая вероятность, что вы его переврали.

итак

«итак» будет когда вы начнете отвечать на вопросы. Может быть.

что такое «исключительная ситуация»?

Вы уже перестали пить коньяк по утрам?

как решить - кто прав и почему?

Просто.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Вы уже перестали пить коньяк по утрам?

а чтобы понять точный смысл вашей фразы… надо пить даже по утрам?

исключения должны применяться для исключительных ситуаций.

это речение уровня - «свобода есть отсутствие несвободы», и прочих словоблудий. если не давать определений конечно.

alysnix ★★★
()
Ответ на: комментарий от snizovtsev

Для индустрии нормально просто сравнивать 2 кода А и Б железе X и Y, подсчитывая попугаи.

Кому и ойтишка индустрия.

Уверен

Это дешевая проекция. Эффект Даннинга-Крюгера.

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 2)
Ответ на: комментарий от bugfixer

А я бы вот смотрел на знание алгоритмов и data structures гораздо более внимательней чем на C++ специфичные вещи.

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

Вопрос ТС был про знания С++.

Kroz ★★★★★
()
Ответ на: комментарий от alysnix

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

Какой должен быть тест на базовые знания C++? (комментарий)

Kroz ★★★★★
()
Ответ на: комментарий от AntonI

STL по дефолту работает с памятью очень неэффективно. Где то это прокатывает, где то нет.

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

Kroz ★★★★★
()
Ответ на: комментарий от seiken

А если scanf с printf оставить, а во всем остальном STL, RAII и далее по списку, то тоже на дверь укажете?

Я задам вопрос, почему в данном конкретном случае случае использовался именно scanf с printf учитывая постановку задачи, затем на всякий случай уточню понимает ли человек достоинства и недостатки scanf/printf/std::cin/std::cout, и если человек не даст вменяемых ответов - да, укажу на дверь. И, да, задача специально будет составлена так, чтобы std::cin/std::cout был самым оптимальным выбором…

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от snizovtsev

Во-первых использовать соответствующий инструмент под каждую задачу. А для этого инструментами нужно владеть. В данном случае мы говорим про С++.

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

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от Kroz

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

Только если это происходит не в ущерб читаемости и поддерживаемости финальной версии кода. Иначе важно вовремя дать по пальцамостановить.

annulen ★★★★★
()