Теоретический минимум

Есть у айтишников серьёзная проблема — они слишком часто верят на слово. И готовы всерьёз обсуждать безумные домыслы.

Легендарный Теоретический минимум для программиста — одно из таких безумств.

Начнём с первой строчки — то есть с названия.

Теорминимум Ландау (кто сдавал, тот знает) — это не список книг и даже не список задач. И сдавать его никто не обязан. В госэкзамен по физике он не входит, на диплом не влияет. Некоторые из 11 экзаменов входят в учебную программу МФТИ. Он влияет только на возможность научной карьеры — скорее всего, хороший научрук не захочет брать к себе настолько нерадивого студента.

И, с другой стороны, сдать его может любой желающий. Так и написано: Сдавать экзамены может любой желающий в произвольном порядке. Для сдачи каждого экзамена нужно в индивидуальном порядке договориться с соответствующим экзаменатором.

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

Проходит он так — ты получаешь направление и едешь в МФТИ/Черноголовку/Дубну. Там находишь нужного преподавателя, он даёт тебе задачу. Идёшь решать. Возвращаешь с ответом. Тебе говорят “правильно” или “неправильно”. Пользоваться можно чем угодно — это не поможет. И так, пока не решишь или не заедешь в дурку.

Очень похоже проходило решение задач у Капицы. За аспирантами, которые получали хотя бы “уд”, гонялись все лучшие институты страны.

В этом же “Теоретическом минимуме” задач нет — есть просто список названий. Как установить, что ты понял всё, что там перечислено? Задач-то нет.

У тому же, составители подобных списков не учитывают очевидного факта — человек очень быстро забывает. Когда-то я помнил наизусть несколько самых знаменитых шахматных партий (целиком, вместе с вариантами). Сейчас помню в самых общих чертах — “Бессмертная” сыграна гамбитом слона, Вечнозелёная — гамбитом Эванса, а Оперная — защитой Филидора и т.п.

Теперь по самому списку.

До 70% — взято из оглавления книг Таненбаума. Таненбаум, конечно, хорош, но он очень старый. Например, последний рассмотренный процессор — Pen­tium II (его ещё по телевизору рекламировали). Остальные 30%…

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

Ежели же мы посмотрим в комментарии, то вдруг выяснится, что аргументы автора и его адептов сводятся к “Попробуйте сделать поиск по этой ссылке хотя бы в русскоязычных блогах и поискать отзывы” и “Практика показывает, что разработчики новых фундаментальных технологий либо делают их на C++, либо переписывают, либо уходят в забвенье.”.

Одним словом, перед нами — то самое жуткое существо, которой завётся хеллоуворлдщик. Поциент, думающий, что он круче Д‘Артаньяна и пишет программы лучше, чем все другие. При этом, в отличие от быдлокодера, образец и не претендует на написание хоть чего-либо осмысленного. Другим подобным деятелем был легендарный Луговский — мастер изощрённых оскобрлений с одним никому не нужным проектом в публичном доступе.

Между тем, как раз в нелюбимом им С++ QFA есть превосходный совет по оценке компетентности:

[6.14] What are some “inter­view ques­tions” I could ask that would let me know if can­di­dates real­ly know their stuff? FAQ: If you are a non-tech­ni­cal per­son (manager/HR), ask a tech­ni­cal per­son to help you judge the tech­ni­cal com­pe­tence of a can­di­date. If you are a tech­ni­cal per­son, the FAQ is one source of good ques­tions, sep­a­rat­ing the tru­ly com­pe­tent peo­ple from the posers.

FQA: The good inter­view ques­tions prob­a­bly don’t men­tion any­thing unique to C++.

Ulti­mate­ly, you are look­ing for peo­ple with good will (some call them “coop­er­a­tive”), who will do things, not just talk about them (some call them “prac­ti­cal”), and who will think, not just do (some call them “intel­li­gent”). So the best ques­tions, rel­e­vant for all can­di­dates, are about their largest last projects. The answers give you lots of infor­ma­tion and good answers are almost impos­si­ble to fake.

You may also need peo­ple to have some pri­or knowl­edge rel­e­vant to their work since you don’t have time to have them trained and gain expe­ri­ence. If you are sure that’s the case (despite the fact that the peo­ple you are look­ing for are good learn­ers), ask spe­cif­ic ques­tions. Ques­tions about high-lev­el soft­ware orga­ni­za­tion issues (like OO) may be use­ful. Ques­tions about low-lev­el soft­ware con­struc­tion issues (like point­ers) may be use­ful. These issues are not spe­cif­ic to C++.

Ask­ing about things spe­cif­ic to C++ is not very use­ful.

First, many of these things are use­less for any prac­ti­cal pur­pose and are best avoid­ed. Whether some­one knows these things is cor­re­lat­ed quite loose­ly with pro­fi­cien­cy, and there are many excel­lent devel­op­ers out there who weren’t con­front­ed with a par­tic­u­lar obscure C++ fea­ture yet, or suc­cess­ful­ly for­got it. So chances are that you are going to reject a good can­di­date.

Sec­ond, a good can­di­date actu­al­ly know­ing the answer may pre­fer an employ­er ask­ing more rel­e­vant and prac­ti­cal ques­tions. So chances are that a good can­di­date is going to reject you.

And third, there are peo­ple who look for the most com­pli­cat­ed way to solve a prob­lem to show off their intel­li­gence. These tend to stum­ble into the dark areas of the tools they use all the time, so they will know answers to many C++-specific ques­tions (they won’t know answers to many more, because almost nobody does). Your ques­tions will rank these peo­ple as the best pos­si­ble can­di­dates. Lat­er you will find out that these peo­ple are poor prac­ti­tion­ers.