Есть у айтишников серьёзная проблема — они слишком часто верят на слово. И готовы всерьёз обсуждать безумные домыслы.
Легендарный Теоретический минимум для программиста — одно из таких безумств.
Начнём с первой строчки — то есть с названия.
Теорминимум Ландау (кто сдавал, тот знает) — это не список книг и даже не список задач. И сдавать его никто не обязан. В госэкзамен по физике он не входит, на диплом не влияет. Некоторые из 11 экзаменов входят в учебную программу МФТИ. Он влияет только на возможность научной карьеры — скорее всего, хороший научрук не захочет брать к себе настолько нерадивого студента.
И, с другой стороны, сдать его может любой желающий. Так и написано: Сдавать экзамены может любой желающий в произвольном порядке. Для сдачи каждого экзамена нужно в индивидуальном порядке договориться с соответствующим экзаменатором.
Ландау ввёл его для отбора аспирантов в свою лабораторию. Стояли 1930-е годы и надо было как-то защищать теоретическую физику от комсомольцев от станка, которые пошли учиться, потому что сказала партия.
Проходит он так — ты получаешь направление и едешь в МФТИ/Черноголовку/Дубну. Там находишь нужного преподавателя, он даёт тебе задачу. Идёшь решать. Возвращаешь с ответом. Тебе говорят “правильно” или “неправильно”. Пользоваться можно чем угодно — это не поможет. И так, пока не решишь или не заедешь в дурку.
Очень похоже проходило решение задач у Капицы. За аспирантами, которые получали хотя бы “уд”, гонялись все лучшие институты страны.
В этом же “Теоретическом минимуме” задач нет — есть просто список названий. Как установить, что ты понял всё, что там перечислено? Задач-то нет.
У тому же, составители подобных списков не учитывают очевидного факта — человек очень быстро забывает. Когда-то я помнил наизусть несколько самых знаменитых шахматных партий (целиком, вместе с вариантами). Сейчас помню в самых общих чертах — “Бессмертная” сыграна гамбитом слона, Вечнозелёная — гамбитом Эванса, а Оперная — защитой Филидора и т.п.
Теперь по самому списку.
До 70% — взято из оглавления книг Таненбаума. Таненбаум, конечно, хорош, но он очень старый. Например, последний рассмотренный процессор — Pentium II (его ещё по телевизору рекламировали). Остальные 30%…
А остальные вы успеете забыть прежде, чем представится повод их применить.
Ежели же мы посмотрим в комментарии, то вдруг выяснится, что аргументы автора и его адептов сводятся к “Попробуйте сделать поиск по этой ссылке хотя бы в русскоязычных блогах и поискать отзывы” и “Практика показывает, что разработчики новых фундаментальных технологий либо делают их на C++, либо переписывают, либо уходят в забвенье.”.
Одним словом, перед нами — то самое жуткое существо, которой завётся хеллоуворлдщик. Поциент, думающий, что он круче Д‘Артаньяна и пишет программы лучше, чем все другие. При этом, в отличие от быдлокодера, образец и не претендует на написание хоть чего-либо осмысленного. Другим подобным деятелем был легендарный Луговский — мастер изощрённых оскобрлений с одним никому не нужным проектом в публичном доступе.
Между тем, как раз в нелюбимом им С++ QFA есть превосходный совет по оценке компетентности:
[6.14] What are some “interview questions” I could ask that would let me know if candidates really know their stuff? FAQ: If you are a non-technical person (manager/HR), ask a technical person to help you judge the technical competence of a candidate. If you are a technical person, the FAQ is one source of good questions, separating the truly competent people from the posers.
FQA: The good interview questions probably don’t mention anything unique to C++.
Ultimately, you are looking for people with good will (some call them “cooperative”), who will do things, not just talk about them (some call them “practical”), and who will think, not just do (some call them “intelligent”). So the best questions, relevant for all candidates, are about their largest last projects. The answers give you lots of information and good answers are almost impossible to fake.
You may also need people to have some prior knowledge relevant to their work since you don’t have time to have them trained and gain experience. If you are sure that’s the case (despite the fact that the people you are looking for are good learners), ask specific questions. Questions about high-level software organization issues (like OO) may be useful. Questions about low-level software construction issues (like pointers) may be useful. These issues are not specific to C++.
Asking about things specific to C++ is not very useful.
First, many of these things are useless for any practical purpose and are best avoided. Whether someone knows these things is correlated quite loosely with proficiency, and there are many excellent developers out there who weren’t confronted with a particular obscure C++ feature yet, or successfully forgot it. So chances are that you are going to reject a good candidate.
Second, a good candidate actually knowing the answer may prefer an employer asking more relevant and practical questions. So chances are that a good candidate is going to reject you.
And third, there are people who look for the most complicated way to solve a problem to show off their intelligence. These tend to stumble into the dark areas of the tools they use all the time, so they will know answers to many C++-specific questions (they won’t know answers to many more, because almost nobody does). Your questions will rank these people as the best possible candidates. Later you will find out that these people are poor practitioners.