Сколько книг вам удастся прочитать за свою жизнь? 100? 500? 1000? Сколько из них повлияют на вас, изменят вас в лучшую сторону, помогут видеть мир другими глазами? Каждый человек просто обязан научиться выбирать книги правильно. Бывает, что одна правильная книга заменяет десяток других. В этой статье я поделюсь своим опытом.
Конечно, есть люди, которые вообще книг не читают. Есть разные способы обучения. Эта статья не для них.
Оставим беллетристику в сторонке. Кто-то читает Маринину, кто-то Гомера, а некоторые перечитывают Булгакова по нескольку раз. Морально-этические вопросы наc не интересуют. Мы будем говорить о профессиональных книгах.
Знания можно наращивать горизонтально (новые для вас дисциплины и темы), и вертикально (углубление в определенную тему). У человека может быть несколько целей или фаз:
Первоначальное знакомство с темой: А что такое вообще визуализация информации? Может что-то интересное? Поверхностное углубление: Так, это я уже знаю, какие тут еще интересные штуки есть? Как это все применять на практике? Глубокое бурение: О, вышла новая научная работа по визуализации медицинских данных.
Если брать первоначальное знакомство с темой, то у меня приличный список тем. Но вот глубоко я знаю… ничего. Нет, хотя наверное то, что называют “гибкой разработкой ПО” я знаю глубоко. Но эта тема на данном этапе развития довольно мелкая. Так что даже глубокие знания не дают счастья.
Моя теория такая.
В любой довольно узкой теме есть всего несколько (2-5) книг, на которых строится весь фундамент. Прочитав эти книги (и хорошо разобравшись в идеях!), вы будете щелкать остальные книжки как орехи, находя в них лишь избранные интересные главы.
К сожалению, многие люди этого не понимают. Поэтому они читают несколько популярных книг, которые зачастую повторяют одно и то же, так и не проникнув в тему. В программировании это книги типа “Язык Java/C#/PHP/etc”. Если взять визуализацию информации, то их очень много, все они содержать большое количество картинок и малое количество текста.
Возникает вопрос, а как определить фундаментальные книги? Я очень надеюсь, что в скором времени появится сервис, который будет использовать алгоритм типа PageRank для определения фундаментальных книг в каждой теме. Эти книги цитируются почти в любой последующей и, чтобы дойти до них, нужно сначала углубиться в тему, прочитать пару случайных книг и потом уже задаться вопросом о фундаменте.
Возьмем что-нибудь конкретное, например, визуализацию информации. Несколько лет назад я активно начал изучать эту область, так что примеры будут реальные.
Я считаю, что по визуализации фундаментальными являются такие книги:
Все остальные книги содержит довольно мало оригинальных и глубоких концепций. Да, там встречаются интересные компилляции. Да, там есть много красивых примеров. Но там мало новых идей и очень мало универсальных принципов, которые помогут вам понять вещи более глубоко.
Прочитав и поняв эти три книги, вы сможете смело приступать к более приземленным и практическим вещам. Вы уже можете придумывать всякие визуализации, но не можете их реализовывать. Вот тут можно уже углубляться в более технические темы, читать более узкие книги типа Interactive Data Visualization for the Web. An Introduction to Designing with D3 By Scott Murray, изучать R или D3, поковырять внимательно и глубоко Excel (как это ни странно, он умеет делать довольно клевые штуки). На этом этапе необходимо делать вещи своими руками. Только это даст вам реальное ощущение глубокого понимания, и некоторые концепции наконец обретут ясный смысл.
На следующем этапе книги уже перестают интересовать. Если вы хотите развиваться и дальше, то стоит уделять внимание тематическим конференциям, научным статьям и следить за блогами авторитетных людей.
Я сейчас нахожусь на втором этапе: изучаю D3 (медленнее, чем хотелось бы) и пробую сделать некоторые вещи сам. Я придумал уже довольно много всяких конкретных решений, но до реализации дело еще не дошло.
Давайте кратко пройдемся по такой узкой теме — программированию. Какие книги можно считать фундаментальными? Что должен прочитать каждый хороший программист? Мне довольно сложно дать верный ответ, потому что я никогда не был хорошим программистом. Зато я видел хороших программистов в действии. Мой список такой:
На мой взгляд, практически все другие книги уже более специализированны. Скажем, если вы углубляетесь в AI, то там свой фундамент. В энтерпрайз приложениях — свой. Но если брать программирование целиком, то эти книги, я считаю, должен прочитать и понять каждый программист. Наверное, сюда еще можно книгу по алгоритмам и структурам данных добавить, но я не знаю, какую. Подскажете, может?
К сожалению, большинство людей не умеют выделять фундаментальные книги. Они читают книги по технологиям и думают, что этого достаточно. NoSQL, MSSQL, C#, PHP, Erlang, Git, ASP.NET MVC, С++, TDD — никакой книги по этим и любым другим технологиям не нужно читать на первой фазе вступления в профессию. Прочитав даже сотню таких книг, вы никогда не станете хорошим программистом. Прочитав фундаментальные книги, у вас есть шанс.