Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Использование статических анализаторов кода при разработке безопасного ПО - 19.12

>
>
>
Отладка вашего "процессора" в…

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

05 Дек 2024

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

1196_Anders_Schau_Knatten_ru/image1.png

Об авторе

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

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

1196_Anders_Schau_Knatten_ru/image2.png

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

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

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

CppQuiz — это онлайн-квиз, где вы можете проверить свои знания C++. Он состоит из 160 вопросов, каждый из которых включает фрагмент C++ кода. Задача разработчика — изучить этот фрагмент и определить, что выведет программа. Иногда код не компилируется, и это важно учитывать. У квиза три уровня сложности.

1196_Anders_Schau_Knatten_ru/image3.png

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

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

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

1196_Anders_Schau_Knatten_ru/image4.png

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

Причина, по которой я ориентируюсь на конкретный стандарт, заключается в том, что пояснения для вопросов должны отсылать к определённой версии языка, поэтому необходимо решить, на какую именно ссылаться. Ответы на некоторые вопросы меняются с появлением новых стандартов, как, например, в случае с временным продлением срока жизни циклов for, основанных на диапазоне и удалении триграфов. Сейчас мы как раз занимаемся обновлением всех вопросов и пояснений к ним до стандарта C++23. С этим мне очень помогает сообщество, и если вы тоже хотите помочь, загляните сюда. Я ценю любой вклад, — как большой, так и маленький, — а в качестве бонуса разыгрываю экземпляр своей книги.

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

На момент написания статьи квиз включал вопросы по стандарту C++17, но с тех пор Андерс добавил C++23. Можете ознакомиться с обновленной версией здесь!

А также участвуйте в квизах от команды PVS-Studio!

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

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

1196_Anders_Schau_Knatten_ru/image5.png

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

— Книга входит в серию Brain Teasers от The Pragmatic Programmers. Требовался человек для работы над книгой по C++ в этой серии, и Франсес Буонтемпо представила меня издательству, зная о моём интересе к квизам по C++.

1196_Anders_Schau_Knatten_ru/image6.png

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

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

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

1196_Anders_Schau_Knatten_ru/image7.png

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

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

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

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

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

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

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

1196_Anders_Schau_Knatten_ru/image8.png

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

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

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

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

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

Как разработчики инструмента для поиска ошибок и уязвимостей в коде, мы не можем не согласиться! Мы исследуем ошибки в коде C++ уже 16 лет, и проблемы, вызванные небрежностью и старым добрым Copy-Paste, по-прежнему остаются одними из самых распространённых, и порой разработчикам сложнее всего заметить именно их.

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

— Вы внесли большой вклад в развитие сообщества благодаря книгам и выступлениям на конференциях. Даже выступали на C++ Russia в 2021 году с докладом " Just Enough Assembly for Compiler Explorer". Давайте поговорим об обучении для C++ программистов. Я полностью согласна с вами в том, что учиться, задавая вопросы "как это работает" и "почему" — лучший способ. Помимо книг, откуда ещё вы черпаете знания?

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

1196_Anders_Schau_Knatten_ru/image9.png

Рисунок N9 — NDC TechTown

1196_Anders_Schau_Knatten_ru/image10.png

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

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

1196_Anders_Schau_Knatten_ru/image11.png

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

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

— Сложно выделить одно, но прямо сейчас вспоминается выступление Олафура Вааге на конференции NDC TechTown в этом году. Вы наверняка слышали про эксперименты, когда люди пытаются запустить Doom на разных необычных устройствах? Так вот, Олафур запустил игру на настоящем спутнике в космосе.

1196_Anders_Schau_Knatten_ru/image12.png

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

Кстати, наша команда также недавно "экспериментировала" с DOOM. Один из наших C++ разработчиков написал статью, в которой разобрал ошибки, встречающиеся в GZDoom. Прочесть об этом кишащем "жуками" приключении вы можете в нашем блоге.

Заключение

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

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

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

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

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

Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


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

  • Промоакции
  • Оповещения
  • Спам