О вреде книг: напутствие начинающему программисту
Часто пишут новички с просьбой посоветовать стоящие книги — с чего вообще начинать свой путь в программировании? Как и многие другие, со временем, я стал относиться к обучению программированию через книги-литературу-курсы настороженно. В самом деле, научиться программированию, изучая лишь книги можно, но сделать это сложно. Но почему?
Бороздя бездонный Youtube случайно соприкоснулся с мнением человека, который другими словами говорит о том же, что я лично понимал уже давно. В процессе работы репетитором (была и такая веха в моей жизни) упор всегда делался на реальные задачи и приложения, то есть на отработку способности писать код и размышлять над алгоритмом решения конкретной задачи. Очень важно смещать акценты с талмудического запоминания-зазубривания множества не всегда нужных деталей (чем часто грешат в школе) на прокачку самостоятельного навыка постановки задачи, её анализа, целенаправленного поиска соответствующей информации и решений, и, наконец, реализации кода.
Под катом два небольших видео (каждое по 5 минуту) частного мнения программиста Николая Ясинского (Екатеринбург) о том, почему учиться программированию по книгам — не самая хорошая затея. И хотя аргументы у него иные, суть получается аналогичная. В заключение я подвожу итог примерной схемой погружения в программирование для новичка, которую я считаю предпочтительной.
Почему книги не должны подменять навык самостоятельного, заинтересованного в результате, практического навыка поиска?
Если у вас очень мало времени, советую смотреть сразу вторую часть видео как более конкретную и понятную большинству (встроено ниже), первая же часть доступна по этой ссылке.
Не учите программирование по книгам! часть 2 (7 мин.)
Выковырял из-под видео вот такой вот суммирующий комментарий-отзыв:
Абсолютно согласна, мой опыт тому подтверждение. Тоже маниакально читала книги, некоторые по несколько раз с начала (потому что отвлекалась и не заканчивала читать в первые разы). Изучала почти все популярные языки, никак не могла определиться.
Поэтому знакома со многими технологиями, но знания недостаточно глубоки из-за отсутствия должной практики. В итоге, действительно, очень много времени было потрачено на переписывание кода из этих книг, а толку от этого мало, потому что задачи из книг не имеют отношения к реалиям разработки, как правило (я про самоучители).
Прогресс пришел после чтения чужого кода в интернете, написании собственных программ разного рода, когда приходилось лезть в интернет за документацией, смотреть примеры на том же stackoverflow, когда подтянулся уровень английского языка… тогда и перестала читать книги, т.к. поняла, что в учебниках азбука, а в жизни художественные произведения. Это хорошее сравнение, потому что существует огромная пропасть между тем, чему учат книги, и тем, с чем потом приходится сталкиваться (отсюда и разочарование и множество ошибок). Так что я согласна с каждым словом в видео.
Подводя промежуточный итог
И хотя основная идея, думаю, уже понятна, закончить хочу тем, чтобы ткнуть новичка носом уже целенаправленно. Вот статья-перевод размышлений на актуальную тему поста: Один из простых способов улучшить свои навыки программирования — читать чужой код.
Полезное дополнение можно отыскать в комментариях:
Другой способ есть и он очень даже элегантный — «Пишите код!».
- Возьмите простой исходник
- Напишите дополнение для основной задачи, модернизируйте исходник.
- Обдумайте все ещё раз, отладьте, приведите сложившуюся архитектуру в порядок.
- Добавьте еще новый функционал, который ломает вашу стройную архитектуру.
- goto 3.
Очень важно, что при таком алгоритме вы ищите в книге или гуглите информацию целенаправленно, под конкретную задачу-проблему. У вас формируется правильное кодо-ориентированное мышление, а не линейно-абстрактное, которое навязывает книга со своими синтетическими знаниями. Вы погружаетесь ровно на такую глубину, чтобы выхватить суть проблемы и сделать необходимое улучшение. Следующий раз повторяя эту итерацию. Это практическое применение теории малых дел применительно к обучению программированию.
Книга при таком «продвижении боем» по реальному коду выполняет своего рода вспомогательного справочника, который лежит подле правой руки и используется только по мере надобности в узком интервале каждой конкретной обнаруженной проблемы. Ещё раз — мы учимся не чтению абстрактных книг и надуманных примеров, мы изначально учимся решению и пониманию реальных проблем/кода.
Байка о попаданце на Github
Прошу понять меня правильно, я не против книг! Я просто говорю, что в наш век избыточной информации на первое место выходят умения применять всю эту информацию на практике — и это не нужно терять из фокуса любому перфекционисту-ботанику, который спешит зарыться с головой в бесконечные глубины книжной продукции.
Вот вам релевантная аналогия: любой знает, что изучать иностранный язык лучше всего методом погружения, то есть сразу забросить новичка в языковую среду, желательно при этом хотя бы снабдив его хорошей книгой-разговорником. Всё, дальше выплывай сам. Теоретик может годами прилежно изучать иностранный язык за букварём, старательно заучивая бесконечный свод правил, в результате так и не научившись толком говорить в реальной жизни — знакомая картина? А такой попаданец станет говорить как миленький, сначала криво и с акцентом, но потом всё лучше и всё увереннее, просто подражая носителям языка, постоянно соприкасаясь с ними в бытовых ситуациях + сразу запертый в безальтернативном варианте — учиться практике или умереть.
В первом случае («теоретик») книга-справочник нужен чтобы учить язык, для того, чтобы «когда-нибудь выучить его»; во втором же варианте он нужен банально для того «чтобы выжить», т.е. решить здесь-и-сейчас вереницу конкретных задач и проблем.
Второй наглядный пример — не первый раз встречаю новичка-книжника, который проработал-прорешал какой-то учебник, уже пишет даже небольшие программы, но… не в состоянии скомпилировать их в .exe-файл (или запустить скрипт на сайте).
И какой смысл в таких предельно абстрактных знаниях? Почему сразу жестко не привязывать изучение теории, написания каждого отдельного примера к конечному результату — к нашей грешной земле компилированию? Чтобы изначально формировать на каждой итерации полный цикл познания.
Поэтому я не против книг, нет, я просто рассуждаю об их более эффективном применении. Начинайте сразу с практики, чтобы решать её проблемы, при этом по мере надобности подгружая необходимую для этого теорию из книг. Вместо того, чтобы с самого начала зубрить голую теорию, годами продираясь через нагромождения бесконечных абстрактных фактов и спецификаций.
Впрочем, в последнем случае чаще всего новичок будет отравлен такими объемами новой для него информации-сложности, которые даёт ему современная книга-талмуд, что приведет в итоге к тому, что изучение-постижение профессии будет отложено «до лучших времен».
Короче говоря, всё сводится к банальному —
Таким образом вообще все книги, исходя из этой схемы-подхода, можно разделить на три большие группы:
- Вводная теория, предельно короткий учебник для старта. Это книга, своего рода хворост для раздува костра, дающая начальный минимум для начала экспериментальной отладки и работы с чужим кодом.
- Всевозможные справочники — талмуды, которые используются для уточнения и консультирования в деталях и спецификациях, в процессе ковыряния внутренностей чужих программных механимзов.
- Бесполезные книги — это книги, не подпадающие ни в одну из двух предыдущих категорий.
Наши вузы — видео-бонус
Кроме изобилия пустых книг существует другой полюс проблемы современного синтетического образования, о котором также по хорошему бухтит наш сегодняшний герой. Николай Ясинский прошёлся ещё и по отечественной системе высшего образования (смотрите видео-бонус ниже), которая также превратилась в очередную постсоветскую имитацию, которая всего лишь насос для откачки денег из бюджета-карманов наивных студентов. Эта огромная Pascal«евидная поросль не умеющая после 5 лет обучения каких-то более-менее серьёзных практических умений и навыков, и которой в конечном итоге приходится переучиваться-доучиваться уже непосредственно в жестко-стрессовых рабочих условиях.
С другой стороны я бы не рассуждал на эту тему столь категорично и лихо, как это делает Николай — позитивные примеры, я бы даже сказал что легендарных вузов всё-таки у нас есть, до сих пор в России продолжают готовить штучных продвинутых специалистов в области ИТ. Тот же ИТМО известен своей сильной школой программирования; например, в 2015 году этот университет из Питера стал шестикратным чемпионом мира по спортивному программированию ACM ICPC-2015. А это тебе не формочки двигать на аутсорс-проектах, впрочем, что касается большинства региональных вузов — тут Николай, к сожалению, полностью прав.
Институты для программистов это п***ц. 18+
Таким образом, на книгу и вуз у новичка нынче почти никаких серьёзных надежд. Спасение — дело рук самого утопающего. Посему выбирай собственную инициативу и интерес + интересный тебе проект на Github, написанный заведомо качественно и толково, скачивай его тарбол себе на комп и начинай свою личную одиссею постижения настоящего мастер-класса программирования от маститых гуру, общую схему я схематично обрисовал выше.
По ходу погружения в код, параллельно читая книги и Интернет, ты постепенно узнаешь обо всём необходимом, научишься читать чужой код, но только не выбирай для начала сложные и большие проекты — пусть постепенность станет лучшим правилом любого начинающего кодера.
Альтернативное мнение
А вот ещё одно мнение на эту же тему по следам моей статьи:
Programming stuff: О «вреде» книг: напутствие любому программисту https://t.co/LD28S3Vb2z
— Sergey Teplyakov (@STeplyakov) February 3, 2017
Ключевые слова для более релевантного поиска: с чего начинать программировать новичку, как учиться программированию. Какие есть хорошие книги по программированию и видеокурсы, что нужно знать, чтобы стать программистом. Где скачать курсы и книги для программирования и обучения ИТ? Как обучаться и научиться программировать на языке? Схема и алгоритм постижения профессии кодера. Как начать читать код, научиться понимать написанное в листинге программы. Где учат и готовят на программиста или на айтишника в России? Как стать настоящим айтишником и настоящим хорошим программистом, как получить опыт и начать читать чужой код. В каком вузе учат настоящих программистов и какие книги нужно читать и видео смотреть при учебе на программеров? Скачать книги по программированию и видео курсы бесплатно онлайн для айтишников по Ит и программированию.