﻿# Отладка вашего "процессора" вместе с Андерсом Шау Кнаттеном, автором книги "C\+\+ Brain Teasers: Exercise Your Mind"

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

![1196_Anders_Schau_Knatten_ru/image1.png](https://import.viva64.com/docx/blog/1196_Anders_Schau_Knatten_ru/image1.png)

## Об авторе

**— Не могли бы вы представиться и рассказать о своей профессиональной деятельности?**

— У меня довольно разнообразный опыт\. Я начал программировать в конце девяностых во время учёбы в старшей школе, после того как открыл для себя демосцену\. Совершенно случайно я заполучил книгу по Pascal, к которой с тех пор не притрагивался\. После я имел дело со множеством разных языков как в качестве хобби, так и в профессиональной деятельности\. Для работы в основном использовал C\+\+, Python, Java, C\#, Uno и PHP\.

![1196_Anders_Schau_Knatten_ru/image2.png](https://import.viva64.com/docx/blog/1196_Anders_Schau_Knatten_ru/image2.png)

Рисунок N2 — Андерс \(внизу справа\) на своей первой работе около двадцати лет назад

Сейчас я работаю в Ascenium\. Это стартап в Осло, который создаёт новый, более производительный процессор\. В основном работаю над симулятором производительности и участвую в создании модели памяти\. Помимо этого, я пробовал себя в различных областях: компьютерное зрение, сейсмика, моделирование потоков, графические языки программирования/IDE, веб\-разработка, также участвовал во всевозможных сторонних проектах\.

## CppQuiz: проверьте свои знания стандарта C\+\+

<details>
   <summary>О квизе</summary>

[CppQuiz](https://cppquiz.org/quiz/question/32) — это онлайн\-квиз, где вы можете проверить свои знания C\+\+\. Он состоит из 160 вопросов, каждый из которых включает фрагмент C\+\+ кода\. Задача разработчика — изучить этот фрагмент и определить, что выведет программа\. Иногда код не компилируется, и это важно учитывать\. У квиза три уровня сложности\.


</details>
![1196_Anders_Schau_Knatten_ru/image3.png](https://import.viva64.com/docx/blog/1196_Anders_Schau_Knatten_ru/image3.png)

Рисунок N3 — Пример вопроса из CppQuiz

**— Прежде чем мы перейдём к основной теме статьи, не могли бы вы рассказать о своём проекте СppQuiz? Похоже, что книга каким\-то образом связана с ним\. Можете поделиться интересными фактами или наблюдениями, связанными с CppQuiz? Есть ли предыстория у этого квиза? Почему он нацелен именно на знание стандартов языка?**

— Мой интерес к квизам по C\+\+ возник благодаря моему соотечественнику, норвежцу Олве Маудалу \(который в итоге написал предисловие к книге\)\. Я участвовал в нескольких его конференциях с квизами и однажды поздно вечером на ACCU 2013 решил, что должен сделать веб\-версию такого квиза\. ~~Не~~много перебрав с пивом, я принялся писать первый вариант в своем гостиничном номере, а продолжил уже в самолете и поезде на следующий день по дороге домой\. В общем, исходный код сайта оставляет желать лучшего, но сам проект оказался успешным\!

![1196_Anders_Schau_Knatten_ru/image4.jpeg](https://import.viva64.com/docx/blog/1196_Anders_Schau_Knatten_ru/image4.jpeg)

Рисунок N4 — Андерс и Олве Маудал проводят квиз по C\+\+ на конференции NDC TechTown 2023

Причина, по которой я ориентируюсь на конкретный стандарт, заключается в том, что пояснения для вопросов должны отсылать к определённой версии языка, поэтому необходимо решить, на какую именно ссылаться\. Ответы на некоторые вопросы меняются с появлением новых стандартов, как, например, в случае с временным продлением срока жизни циклов _for_, основанных на диапазоне и удалении триграфов\. Сейчас мы как раз занимаемся обновлением всех вопросов и пояснений к ним до стандарта C\+\+23\. С этим мне очень помогает сообщество, и если вы тоже хотите помочь, [загляните сюда](https://blog.knatten.org/2024/06/02/help-get-cppquiz-to-c23-and-win-a-book/)\. Я ценю любой вклад, — как большой, так и маленький, — а в качестве бонуса разыгрываю экземпляр своей книги\.

Также у нас есть мобильное приложение CppQuiz\. Сергей Васильченко написал его в одиночку\! Мне нужно было лишь создать JSON\-экспорт вопросов с сайта\.

**На момент написания статьи квиз включал вопросы по стандарту C\+\+17, но с тех пор Андерс добавил C\+\+23\. Можете ознакомиться с обновленной версией [здесь](https://cppquiz.org/quiz/question/233)\!**

**А также [участвуйте](https://pvs-studio.ru/ru/blog/quest/) в квизах от команды PVS\-Studio\!**

## Книга "C\+\+ Brain Teasers: Exercise Your Mind"

<details>
   <summary>О книге</summary>

В книге вы найдете 25 коротких программ на C\+\+\. Ваша цель — угадать результат их выполнения и понять, почему язык ведёт себя именно так\. Задачи тщательно продуманы и подобраны так, чтобы соответствовать реальным сценариям\. В пояснениях к ним вы найдёте множество практических советов по написанию более качественного и безопасного кода\. Таким образом, книгу можно читать как просто для развлечения, так и в образовательных целях\.


</details>
![1196_Anders_Schau_Knatten_ru/image5.jpeg](https://import.viva64.com/docx/blog/1196_Anders_Schau_Knatten_ru/image5.jpeg)

Рисунок N5 — Андерс рад представить вам свою книгу

— Книга входит в серию [Brain Teasers от The Pragmatic Programmers](https://pragprog.com/categories/brain-teasers/)\. Требовался человек для работы над книгой по C\+\+ в этой серии, и Франсес Буонтемпо представила меня издательству, зная о моём интересе к квизам по C\+\+\.

![1196_Anders_Schau_Knatten_ru/image6.png](https://import.viva64.com/docx/blog/1196_Anders_Schau_Knatten_ru/image6.png)

Рисунок N6 — Серия Brain Teasers от The Pragmatic Programmers

**— На C\+\+ разработчиков какого уровня ориентирована ваша книга — начинающих или продвинутых?**

— Для прочтения книги необходимо иметь хотя бы небольшой опыт работы с C\+\+\. Это не введение в язык\. Но если вы хоть немного работали с C\+\+ или просто изучали его, пусть даже в школе, книга должна быть вам понятна\. Если вы опытный программист, то правильно ответите на все или большинство вопросов, но всё равно, возможно, узнаете что\-то новое из развёрнутых комментариев к каждому заданию\.

![1196_Anders_Schau_Knatten_ru/image7.png](https://import.viva64.com/docx/blog/1196_Anders_Schau_Knatten_ru/image7.png)

Рисунок N7 — "Сумма частей Аристотеля", отрывок из книги

**— Как следует знакомиться с книгой, чтобы она принесла максимум пользы?**

— Очень важно попытаться самостоятельно прийти к ответу прежде, чем вы прочтете объяснение\. Также я рекомендую подумать о том, _почему_ ответ получился именно _такой_\. Какие механизмы языка задействованы? Почему это работает именно так? Такой подход помогает подготовить необходимую "ямку" в мозгу для хранения информации, полученной в результате объяснения\. Я считаю, что так обучение проходит гораздо эффективнее\.

**— Какие основные проблемы и неоднозначные темы рассматриваются в книге?**

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

**— Мой любимый вопрос: есть ли в книге пасхалки? Мне кажется, я нашла одну из них во время чтения, но не буду её раскрывать\.**

— Да, раздел под названием "Взломай планету" — это отсылка к одному из моих любимых фильмов, "Хакеры" \(1995\)\.

![1196_Anders_Schau_Knatten_ru/image8.png](https://import.viva64.com/docx/blog/1196_Anders_Schau_Knatten_ru/image8.png)

Рисунок N8 — "Взломай планету", отрывок из книги

**— На ваш взгляд, какие распространённые ошибки часто допускают программисты на C\+\+?**

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

* старые добрые недопонимания, нечёткие требования и решение не тех задач;
* недостаточное внимание к тестированию, линтерам и инструментам разработки;
* непонимание последствий и компромиссов, связанных с "инвестициями в качество кода"\.

Много времени может быть потрачено впустую на неважные мелочи, ревью и полировку, которые на деле не имеют значения\. И наоборот, кажущиеся невинными "временные" решения/фиксы/хаки могут серьёзно повлиять на других людей, работающих с той же кодовой базой\. Различать такие ситуации помогают только опыт и внимательность\.

**Как разработчики инструмента для поиска ошибок и уязвимостей в коде, мы не можем не согласиться\! Мы [исследуем](https://pvs-studio.ru/ru/blog/examples/) ошибки в коде C\+\+ уже 16 лет, и проблемы, вызванные небрежностью и старым добрым Copy\-Paste, по\-прежнему остаются [одними из самых распространённых](https://pvs-studio.ru/ru/blog/posts/cpp/1064/), и порой разработчикам сложнее всего заметить именно их\.**

## Полезные материалы для C\+\+ программистов

**— Вы внесли большой вклад в развитие сообщества благодаря книгам и выступлениям на конференциях\. Даже [выступали на C\+\+ Russia в 2021 году](https://cppconf.ru/archive/2021/talks/38qbzx33yz5ky8sxoj2kuq/) с докладом " Just Enough Assembly for Compiler Explorer"\.** **Давайте поговорим об обучении для C\+\+ программистов\. Я полностью согласна с вами в том, что учиться, задавая вопросы "как это работает" и "почему" — лучший способ\. Помимо книг, откуда ещё вы черпаете знания?**

— Мне нравится посещать конференции по С\+\+\. Самые любимые: NDC TechTown, ACCU, C\+\+ on Sea и Meeting C\+\+\. Но просто заниматься интересным делом вместе с замечательными коллегами — это мой любимый способ учиться\. 

![1196_Anders_Schau_Knatten_ru/image9.png](https://import.viva64.com/docx/blog/1196_Anders_Schau_Knatten_ru/image9.png)

Рисунок N9 — NDC TechTown

![1196_Anders_Schau_Knatten_ru/image10.png](https://import.viva64.com/docx/blog/1196_Anders_Schau_Knatten_ru/image10.png)

Рисунок N10 — C\+\+ on Sea

Чаще всего я читаю специализированную литературу, чтобы узнать что\-то конкретное\. Но недавно я прочитал одну хорошую и не очень нишевую книгу — "Искусство эффективного программирования" Фёдора Пикуса\.

![1196_Anders_Schau_Knatten_ru/image11.png](https://import.viva64.com/docx/blog/1196_Anders_Schau_Knatten_ru/image11.png)

Рисунок N11 — "The Art of Writing Efficient Programs", Фёдор Пикус

**— Как опытный участник конференций и докладчик, не могли бы вы рассказать о самом интересном выступлении, на котором побывали? Чем оно вам запомнилось?**

— Сложно выделить одно, но прямо сейчас вспоминается [выступление](https://www.youtube.com/watch?v=GPHDbVPlmMk&ab_channel=%C3%93lafurWaage) Олафура Вааге на конференции NDC TechTown в этом году\. Вы наверняка слышали про эксперименты, когда люди пытаются запустить Doom на разных необычных устройствах? Так вот, Олафур запустил игру на настоящем спутнике в космосе\.

![1196_Anders_Schau_Knatten_ru/image12.png](https://import.viva64.com/docx/blog/1196_Anders_Schau_Knatten_ru/image12.png)

Рисунок N12 — DOOM в космосе, NDC TechTown

**Кстати, наша команда также недавно "экспериментировала" с DOOM\. Один из наших C\+\+ разработчиков написал статью, в которой разобрал ошибки, встречающиеся в GZDoom\. Прочесть об этом кишащем "жуками" приключении вы можете в [нашем блоге](https://pvs-studio.ru/ru/blog/posts/cpp/1087/)\.**

## Заключение

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

— Оглядываясь назад, я думаю, что больше всего горжусь своим первым выступлением с докладом на конференции ACCU\. До того момента я никогда не выступал на конференциях или митапах, но тогда я вышел и просто рассказал свой доклад перед большой аудиторией, включая многих моих кумиров\. Честно говоря, сам доклад был не очень хорошим, но и не таким уж плохим, как можно было ожидать, и я воспринимаю его как начало своей "карьеры" спикера на конференциях\. Если вы попали на конференцию, где проводятся блиц\-доклады, рекомендую попробовать выступить\!

**— Какой совет вы бы дали себе в начале пути изучения C\+\+ и компьютерных наук в целом?**

— Не бойтесь задавать вопросы\! Когда вы новичок \(в программировании или просто на новой работе\), спрашивать может быть страшновато, но помните: люди предполагают, что вы ещё многого не знаете\. И если вы переживаете о том, что покажетесь кому\-то "глупым", помните: вы выглядите гораздо умнее, если задаёте уточняющие вопросы, а не просто предполагаете что\-то и принимаете необоснованные решения\. На моей предыдущей работе у меня была коллега, которая пришла к нам сразу после университета, но она никогда не боялась спросить: "Как на самом деле работает эта штука?" или "Что вы имеете в виду?"\. Это только подчёркивало её уверенность в себе и интеллект, и сразу было понятно, что она быстро взойдёт по карьерной лестнице\.

**Отличный момент для завершения интервью\! Здорово\! Большое спасибо за содержательную беседу и за отличную книгу, которая пополнит библиотеку C\+\+ программиста\. Удачи вам в достижении ваших целей\. Желаю чистого кода\!**