- PVSM.RU - https://www.pvsm.ru -
Дорогие читатели, команда PVS-Studio представляет вашему вниманию интервью с Андерсом Шау Кнаттеном, автором книги "C++ Brain Teasers: Exercise Your Mind". В этой статье вы познакомитесь с его новой книгой по C++, откроете для себя увлекательные способы изучения стандартов языка и рассмотрите некоторые распространённые ошибки, которые допускают C++ разработчики, а также узнаете немного о биографии Андерса. Надеемся, вам понравится!

— Не могли бы вы представиться и рассказать о своей профессиональной деятельности?
— У меня довольно разнообразный опыт. Я начал программировать в конце девяностых во время учёбы в старшей школе, после того как открыл для себя демосцену. Совершенно случайно я заполучил книгу по Pascal, к которой с тех пор не притрагивался. После я имел дело со множеством разных языков как в качестве хобби, так и в профессиональной деятельности. Для работы в основном использовал C++, Python, Java, C#, Uno и PHP.
Сейчас я работаю в Ascenium. Это стартап в Осло, который создаёт новый, более производительный процессор. В основном работаю над симулятором производительности и участвую в создании модели памяти. Помимо этого, я пробовал себя в различных областях: компьютерное зрение, сейсмика, моделирование потоков, графические языки программирования/IDE, веб-разработка, также участвовал во всевозможных сторонних проектах.
CppQuiz [1] — это онлайн-квиз, где вы можете проверить свои знания C++. Он состоит из 160 вопросов, каждый из которых включает фрагмент C++ кода. Задача разработчика — изучить этот фрагмент и определить, что выведет программа. Иногда код не компилируется, и это важно учитывать. У квиза три уровня сложности.
— Прежде чем мы перейдём к основной теме статьи, не могли бы вы рассказать о своём проекте СppQuiz? Похоже, что книга каким-то образом связана с ним. Можете поделиться интересными фактами или наблюдениями, связанными с CppQuiz? Есть ли предыстория у этого квиза? Почему он нацелен именно на знание стандартов языка?
— Мой интерес к квизам по C++ возник благодаря моему соотечественнику, норвежцу Олве Маудалу (который в итоге написал предисловие к книге). Я участвовал в нескольких его конференциях с квизами и однажды поздно вечером на ACCU 2013 решил, что должен сделать веб-версию такого квиза. Немного перебрав с пивом, я принялся писать первый вариант в своем гостиничном номере, а продолжил уже в самолете и поезде на следующий день по дороге домой. В общем, исходный код сайта оставляет желать лучшего, но сам проект оказался успешным!
Причина, по которой я ориентируюсь на конкретный стандарт, заключается в том, что пояснения для вопросов должны отсылать к определённой версии языка, поэтому необходимо решить, на какую именно ссылаться. Ответы на некоторые вопросы меняются с появлением новых стандартов, как, например, в случае с временным продлением срока жизни циклов for, основанных на диапазоне и удалении триграфов. Сейчас мы как раз занимаемся обновлением всех вопросов и пояснений к ним до стандарта C++23. С этим мне очень помогает сообщество, и если вы тоже хотите помочь, загляните сюда [2]. Я ценю любой вклад, — как большой, так и маленький, — а в качестве бонуса разыгрываю экземпляр своей книги.
Также у нас есть мобильное приложение CppQuiz. Сергей Васильченко написал его в одиночку! Мне нужно было лишь создать JSON-экспорт вопросов с сайта.
На момент написания статьи квиз включал вопросы по стандарту C++17, но с тех пор Андерс добавил C++23. Можете ознакомиться с обновленной версией здесь [3]!
А также участвуйте [4] в квизах от команды PVS-Studio!
В книге вы найдете 25 коротких программ на C++. Ваша цель — угадать результат их выполнения и понять, почему язык ведёт себя именно так. Задачи тщательно продуманы и подобраны так, чтобы соответствовать реальным сценариям. В пояснениях к ним вы найдёте множество практических советов по написанию более качественного и безопасного кода. Таким образом, книгу можно читать как просто для развлечения, так и в образовательных целях.
— Книга входит в серию Brain Teasers от The Pragmatic Programmers [5]. Требовался человек для работы над книгой по C++ в этой серии, и Франсес Буонтемпо представила меня издательству, зная о моём интересе к квизам по C++.
— На C++ разработчиков какого уровня ориентирована ваша книга — начинающих или продвинутых?
— Для прочтения книги необходимо иметь хотя бы небольшой опыт работы с C++. Это не введение в язык. Но если вы хоть немного работали с C++ или просто изучали его, пусть даже в школе, книга должна быть вам понятна. Если вы опытный программист, то правильно ответите на все или большинство вопросов, но всё равно, возможно, узнаете что-то новое из развёрнутых комментариев к каждому заданию.
— Как следует знакомиться с книгой, чтобы она принесла максимум пользы?
— Очень важно попытаться самостоятельно прийти к ответу прежде, чем вы прочтете объяснение. Также я рекомендую подумать о том, почему ответ получился именно такой. Какие механизмы языка задействованы? Почему это работает именно так? Такой подход помогает подготовить необходимую "ямку" в для хранения информации, полученной в результате объяснения. Я считаю, что так обучение проходит гораздо эффективнее.
— Какие основные проблемы и неоднозначные темы рассматриваются в книге?
— В книге я уделяю внимание основным механизмам языка, а не его экзотическим особенностям и корнер-кейсам, которые, к сожалению, довольно часто встречаются в квизе на сайте. Так что ждите обсуждения таких вещей, как разрешение перегрузок, вывод типов параметров шаблонного класса, целочисленные повышения, время жизни, порядок инициализации, неявные преобразования и т.д. Я также стараюсь дать представления о том, как эти вещи реализуются и как они появились. И, наконец, я всегда даю советы по предупреждениям, линтерам, санитайзерам, библиотекам, техникам и т. д., которые помогут вам избежать неоднозначностей и проблем, поднятых в вопросах.
— Мой любимый вопрос: есть ли в книге пасхалки? Мне кажется, я нашла одну из них во время чтения, но не буду её раскрывать.
— Да, раздел под названием "Взломай планету" — это отсылка к одному из моих любимых фильмов, "Хакеры" (1995).
— На ваш взгляд, какие распространённые ошибки часто допускают программисты на C++?
— Большую часть своей карьеры я работал в стартапах и небольших командах, поэтому мой опыт может отличаться от опыта людей, работавших в более крупных организациях. Но вот кое-что из того, что сразу приходит на ум:
старые добрые недопонимания, нечёткие требования и решение не тех задач;
недостаточное внимание к тестированию, линтерам и инструментам разработки;
непонимание последствий и компромиссов, связанных с "инвестициями в качество кода".
Много времени может быть потрачено впустую на неважные мелочи, ревью и полировку, которые на деле не имеют значения. И наоборот, кажущиеся невинными "временные" решения/фиксы/хаки могут серьёзно повлиять на других людей, работающих с той же кодовой базой. Различать такие ситуации помогают только опыт и внимательность.
Как разработчики инструмента для поиска ошибок и уязвимостей в коде, мы не можем не согласиться! Мы исследуем [7] ошибки в коде C++ уже 16 лет, и проблемы, вызванные небрежностью и старым добрым Copy-Paste, по-прежнему остаются одними из самых распространённых [8], и порой разработчикам сложнее всего заметить именно их.
— Вы внесли большой вклад в развитие сообщества благодаря книгам и выступлениям на конференциях. Даже выступали на C++ Russia в 2021 году [9] с докладом " Just Enough Assembly for Compiler Explorer". Давайте поговорим об обучении для C++ программистов. Я полностью согласна с вами в том, что учиться, задавая вопросы "как это работает" и "почему" — лучший способ. Помимо книг, откуда ещё вы черпаете знания?
— Мне нравится посещать конференции по С++. Самые любимые: NDC TechTown, ACCU, C++ on Sea и Meeting C++. Но просто заниматься интересным делом вместе с замечательными коллегами — это мой любимый способ учиться.
Чаще всего я читаю специализированную литературу, чтобы узнать что-то конкретное. Но недавно я прочитал одну хорошую и не очень нишевую книгу — "Искусство эффективного программирования" Фёдора Пикуса.
— Как опытный участник конференций и докладчик, не могли бы вы рассказать о самом интересном выступлении, на котором побывали? Чем оно вам запомнилось?
— Сложно выделить одно, но прямо сейчас вспоминается выступление [10] Олафура Вааге на конференции NDC TechTown в этом году. Вы наверняка слышали про эксперименты, когда люди пытаются запустить Doom на разных необычных устройствах? Так вот, Олафур запустил игру на настоящем спутнике в космосе.
Кстати, наша команда также недавно "экспериментировала" с DOOM. Один из наших C++ разработчиков написал статью, в которой разобрал ошибки, встречающиеся в GZDoom. Прочесть об этом кишащем "жуками" приключении вы можете в нашем блоге [11].
— Вы внесли свой вклад в область компьютерных наук как инженер-программист, а в сообщество C++ — как докладчик на конференциях, автор книг и разработчик множества пет-проектов, таких как CppQuiz. Чем вы особенно гордитесь и почему?
— Оглядываясь назад, я думаю, что больше всего горжусь своим первым выступлением с докладом на конференции ACCU. До того момента я никогда не выступал на конференциях или митапах, но тогда я вышел и просто рассказал свой доклад перед большой аудиторией, включая многих моих кумиров. Честно говоря, сам доклад был не очень хорошим, но и не таким уж плохим, как можно было ожидать, и я воспринимаю его как начало своей "карьеры" спикера на конференциях. Если вы попали на конференцию, где проводятся блиц-доклады, рекомендую попробовать выступить!
— Какой совет вы бы дали себе в начале пути изучения C++ и компьютерных наук в целом?
— Не бойтесь задавать вопросы! Когда вы новичок (в программировании или просто на новой работе), спрашивать может быть страшновато, но помните: люди предполагают, что вы ещё многого не знаете. И если вы переживаете о том, что покажетесь кому-то "глупым", помните: вы выглядите гораздо умнее, если задаёте уточняющие вопросы, а не просто предполагаете что-то и принимаете необоснованные решения. На моей предыдущей работе у меня была коллега, которая пришла к нам сразу после университета, но она никогда не боялась спросить: "Как на самом деле работает эта штука?" или "Что вы имеете в виду?". Это только подчёркивало её уверенность в себе и интеллект, и сразу было понятно, что она быстро взойдёт по карьерной лестнице.
Отличный момент для завершения интервью! Здорово! Большое спасибо за содержательную беседу и за отличную книгу, которая пополнит библиотеку C++ программиста. Удачи вам в достижении ваших целей. Желаю чистого кода!
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Uliana Khromchenko. Brain debugging. Interview with Anders Schau Knatten, author of "C++ Brain Teasers: Exercise Your Mind" [12].
Автор: PumpIT
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/interview/404239
Ссылки в тексте:
[1] CppQuiz: https://cppquiz.org/quiz/question/32
[2] загляните сюда: https://blog.knatten.org/2024/06/02/help-get-cppquiz-to-c23-and-win-a-book/
[3] здесь: https://cppquiz.org/quiz/question/233
[4] участвуйте: https://pvs-studio.ru/ru/blog/quest/
[5] Brain Teasers от The Pragmatic Programmers: https://pragprog.com/categories/brain-teasers/
[6] мозгу: http://www.braintools.ru
[7] исследуем: https://pvs-studio.ru/ru/blog/examples/
[8] одними из самых распространённых: https://pvs-studio.ru/ru/blog/posts/cpp/1064/
[9] выступали на C++ Russia в 2021 году: https://cppconf.ru/archive/2021/talks/38qbzx33yz5ky8sxoj2kuq/
[10] выступление: https://www.youtube.com/watch?v=GPHDbVPlmMk&ab_channel=%C3%93lafurWaage
[11] нашем блоге: https://pvs-studio.ru/ru/blog/posts/cpp/1087/
[12] Brain debugging. Interview with Anders Schau Knatten, author of "C++ Brain Teasers: Exercise Your Mind": https://pvs-studio.com/en/blog/posts/cpp/1196/
[13] Источник: https://habr.com/ru/companies/pvs-studio/articles/864058/?utm_campaign=864058&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.