В книжных полно пособий «Teach Yourself Java in 24 Hours» и вариаций про C, SQL, Ruby. Поиск на Amazon по «teach yourself» и «hours» с 2000 года выдаёт 512 книг, девять из десяти — по программированию. Либо все жутко торопятся, либо программирование подозрительно легко даётся. Фелляйзен и соавторы в «How to Design Programs» проходятся по тренду: плохое программирование просто, идиоты выучат за 21 день, даже будучи «чайниками». Комикс Abtruse Goose тоже отметился.
Разберите заголовок «Teach Yourself C++ in 24 Hours». «Teach Yourself» — за 24 часа вы не напишете серьёзных программ, не поучитесь у опытного коллеги и не поймёте среду C++. Поверхностное знакомство, не глубокое понимание. Александр Поуп предупреждал: малые знания опасны. «C++» — можно выучить синтаксис, если знаете другой язык, но не способы применения. Basic-программист напишет на C++ в стиле Basic, не поняв, для чего язык хорош. Алан Перлис говорил: язык, не меняющий ваше мышление о программировании, не стоит изучения. «in 24 Hours» — этого мало.
Исследования Блума, Брайана и Хартера, Хейза, Симмона и Чейза показывают: экспертиза в музыке, шахматах, теннисе и нейропсихологии требует около десяти лет осознанной практики. Не просто повторять, а решать задачи чуть выше текущего уровня, анализировать ошибки и исправлять. Даже Моцарт-вундеркинд дал музыку мирового класса только через 13 лет. The Beatles с 1957 года играли по клубам Ливерпуля и Гамбурга, а критический успех «Sgt. Peppers» пришёл в 1967. Малкольм Гладуэлл популяризировал 10 000 часов. Анри Картье-Брессон отсчитывал первые 10 000 снимков как худшие. Чосер сетовал: жизнь коротка, ремесло длинно. Гиппократ: искусство вечно, жизнь коротка, случай мимолётен, опыт опасен, суждение трудно. Точной цифры нет, но и самым талантливым, по словам профессора Эрикссона, нужны годы по 10–20 часов в неделю.
Рецепт: заинтересуйтесь программированием так, чтобы хватило на 10 лет. Программируйте — обучение происходит через практику с понятной задачей подходящей сложности, обратной связью и исправлением ошибок. Общайтесь с программистами, читайте чужой код. При желании потратьте четыре года на колледж, но книги одни не сделают экспертом. Эрик Рэймонд сравнивает: изучение кистей и пигментов не сделает художником. Лучший нанятый автором программист имел только школьный диплом. Участвуйте в проектах с другими: будьте то лучшим, то худшим. Разбирайте программы без авторов, думайте, как облегчить поддержку после вас. Выучите полдюжины языков: с классовыми абстракциями (Java, C++), функциональными (Lisp, ML, Haskell), синтаксическими (Lisp), декларативными (Prolog, C++ templates) и параллельными (Clojure, Go). Помните про «computer» в computer science: знайте, сколько длится инструкция CPU, промах кэша, чтение памяти и диска, отправка пакета в Европу и обратно. Поучаствуйте в стандартизации, например в ANSI C++ committee, и вовремя оттуда свалите.
Фред Брукс предлагал рано выявлять талантливых дизайнеров, приставлять ментора и давать им взаимодействовать. Алан Перлис заметил: скульптуре можно научить каждого, но Микеланджело пришлось бы учить, как не стать великим. Внутреннее качество либо врождённое, либо развитое усердием. Как сказал вымышленный шеф Гюсто из «Ratatouille»: готовить может каждый, но великими становятся только бесстрашные. Покупайте книжку по Java, Ruby, JavaScript или PHP — толк будет, но жизнь или реальную экспертность за 24 часа не измените. А за 24 месяца постоянных улучшений — уже разговор.