Просмотров: 16126

О вреде книг: напутствие начинающему программисту


Часто пишут новички с просьбой посоветовать стоящие книги — с чего вообще начинать свой путь в программировании? Как и многие другие, со временем, я стал относиться к обучению программированию через книги-литературу-курсы настороженно. В самом деле, научиться программированию, изучая лишь книги можно, но сделать это сложно. Но почему?

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

Под катом два небольших видео (каждое по 5 минуту) частного мнения программиста Николая Ясинского (Екатеринбург) о том, почему учиться программированию по книгам — не самая хорошая затея. И хотя аргументы у него иные, суть получается аналогичная. В заключение я подвожу итог примерной схемой погружения в программирование для новичка, которую я считаю предпочтительной.

О вреде книг: советы начинающему программисту учеба образование ит скачать ebooks pdf

Почему книги не должны подменять навык самостоятельного, заинтересованного в результате, практического навыка поиска?

Если у вас очень мало времени, советую смотреть сразу вторую часть видео как более конкретную и понятную большинству (встроено ниже), первая же часть доступна по этой ссылке.

Не учите программирование по книгам! часть 2 (7 мин.)

Выковырял из-под видео вот такой вот суммирующий комментарий-отзыв:

Абсолютно согласна, мой опыт тому подтверждение. Тоже маниакально читала книги, некоторые по несколько раз с начала (потому что отвлекалась и не заканчивала читать в первые разы). Изучала почти все популярные языки, никак не могла определиться.

Поэтому знакома со многими технологиями, но знания недостаточно глубоки из-за отсутствия должной практики. В итоге, действительно, очень много времени было потрачено на переписывание кода из этих книг, а толку от этого мало, потому что задачи из книг не имеют отношения к реалиям разработки, как правило (я про самоучители).

Прогресс пришел после чтения чужого кода в интернете, написании собственных программ разного рода, когда приходилось лезть в интернет за документацией, смотреть примеры на том же stackoverflow, когда подтянулся уровень английского языка... тогда и перестала читать книги, т.к. поняла, что в учебниках азбука, а в жизни художественные произведения. Это хорошее сравнение, потому что существует огромная пропасть между тем, чему учат книги, и тем, с чем потом приходится сталкиваться (отсюда и разочарование и множество ошибок). Так что я согласна с каждым словом в видео.

Подводя промежуточный итог

И хотя основная идея, думаю, уже понятна, закончить хочу тем, чтобы ткнуть новичка носом уже целенаправленно. Вот статья-перевод размышлений на актуальную тему поста: Один из простых способов улучшить свои навыки программирования — читать чужой код.

Полезное дополнение можно отыскать в комментариях:

Другой способ есть и он очень даже элегантный — «Пишите код!».
  1. Возьмите простой исходник
  2. Напишите дополнение для основной задачи, модернизируйте исходник.
  3. Обдумайте все ещё раз, отладьте, приведите сложившуюся архитектуру в порядок.
  4. Добавьте еще новый функционал, который ломает вашу стройную архитектуру.
  5. goto 3.

Очень важно, что при таком алгоритме вы ищите в книге или гуглите информацию целенаправленно, под конкретную задачу-проблему. У вас формируется правильное кодо-ориентированное мышление, а не линейно-абстрактное, которое навязывает книга со своими синтетическими знаниями. Вы погружаетесь ровно на такую глубину, чтобы выхватить суть проблемы и сделать необходимое улучшение. Следующий раз повторяя эту итерацию. Это практическое применение теории малых дел применительно к обучению программированию.

Книга при таком «продвижении боем» по реальному коду выполняет своего рода вспомогательного справочника, который лежит подле правой руки и используется только по мере надобности в узком интервале каждой конкретной обнаруженной проблемы. Ещё раз — мы учимся не чтению абстрактных книг и надуманных примеров, мы изначально учимся решению и пониманию реальных проблем/кода.

Байка о попаданце на Github

Прошу понять меня правильно, я не против книг! Я просто говорю, что в наш век избыточной информации на первое место выходят умения применять всю эту информацию на практике — и это не нужно терять из фокуса любому перфекционисту-ботанику, который спешит зарыться с головой в бесконечные глубины книжной продукции.

Вот вам релевантная аналогия: любой знает, что изучать иностранный язык лучше всего методом погружения, то есть сразу забросить новичка в языковую среду, желательно при этом хотя бы снабдив его хорошей книгой-разговорником. Всё, дальше выплывай сам. Теоретик может годами прилежно изучать иностранный язык за букварём, старательно заучивая бесконечный свод правил, в результате так и не научившись толком говорить в реальной жизни — знакомая картина? А такой попаданец станет говорить как миленький, сначала криво и с акцентом, но потом всё лучше и всё увереннее, просто подражая носителям языка, постоянно соприкасаясь с ними в бытовых ситуациях + сразу запертый в безальтернативном варианте — учиться практике или умереть.

В первом случае («теоретик») книга-справочник нужен чтобы учить язык, для того, чтобы «когда-нибудь выучить его»; во втором же варианте он нужен банально для того «чтобы выжить», т.е. решить здесь-и-сейчас вереницу конкретных задач и проблем.

Второй наглядный пример — не первый раз встречаю новичка-книжника, который проработал-прорешал какой-то учебник, уже пишет даже небольшие программы, но... не в состоянии скомпилировать их в .exe-файл (или запустить скрипт на сайте).

И какой смысл в таких предельно абстрактных знаниях? Почему сразу жестко не привязывать изучение теории, написания каждого отдельного примера к конечному результату — к нашей грешной земле компилированию? Чтобы изначально формировать на каждой итерации полный цикл познания.

Поэтому я не против книг, нет, я просто рассуждаю об их более эффективном применении. Начинайте сразу с практики, чтобы решать её проблемы, при этом по мере надобности подгружая необходимую для этого теорию из книг. Вместо того, чтобы с самого начала зубрить голую теорию, годами продираясь через нагромождения бесконечных абстрактных фактов и спецификаций.

Впрочем, в последнем случае чаще всего новичок будет отравлен такими объемами новой для него информации-сложности, которые даёт ему современная книга-талмуд, что приведет в итоге к тому, что изучение-постижение профессии будет отложено «до лучших времен».

Короче говоря, всё сводится к банальному —

О вреде книг: советы начинающему программисту учеба образование ит скачать ebooks pdf

Таким образом вообще все книги, исходя из этой схемы-подхода, можно разделить на три большие группы:

  • Вводная теория, предельно короткий учебник для старта. Это книга, своего рода хворост для раздува костра, дающая начальный минимум для начала экспериментальной отладки и работы с чужим кодом.
  • Всевозможные справочники — талмуды, которые используются для уточнения и консультирования в деталях и спецификациях, в процессе ковыряния внутренностей чужих программных механимзов.
  • Бесполезные книги — это книги, не подпадающие ни в одну из двух предыдущих категорий.

Наши вузы — видео-бонус

Кроме изобилия пустых книг существует другой полюс проблемы современного синтетического образования, о котором также по хорошему бухтит наш сегодняшний герой. Николай Ясинский прошёлся ещё и по отечественной системе высшего образования (смотрите видео-бонус ниже), которая также превратилась в очередную постсоветскую имитацию, которая всего лишь насос для откачки денег из бюджета-карманов наивных студентов. Эта огромная Pascal’евидная поросль не умеющая после 5 лет обучения каких-то более-менее серьёзных практических умений и навыков, и которой в конечном итоге приходится переучиваться-доучиваться уже непосредственно в жестко-стрессовых рабочих условиях.

С другой стороны я бы не рассуждал на эту тему столь категорично и лихо, как это делает Николай — позитивные примеры, я бы даже сказал что легендарных вузов всё-таки у нас есть, до сих пор в России продолжают готовить штучных продвинутых специалистов в области ИТ. Тот же ИТМО известен своей сильной школой программирования; например, в 2015 году этот университет из Питера стал шестикратным чемпионом мира по спортивному программированию ACM ICPC-2015. А это тебе не формочки двигать на аутсорс-проектах, впрочем, что касается большинства региональных вузов — тут Николай, к сожалению, полностью прав.

Институты для программистов это п***ц. 18+

Таким образом, на книгу и вуз у новичка нынче почти никаких серьёзных надежд. Спасение — дело рук самого утопающего. Посему выбирай собственную инициативу и интерес + интересный тебе проект на Github, написанный заведомо качественно и толково, скачивай его тарбол себе на комп и начинай свою личную одиссею постижения настоящего мастер-класса программирования от маститых гуру, общую схему я схематично обрисовал выше.

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

Альтернативное мнение

А вот ещё одно мнение на эту же тему по следам моей статьи:

Ключевые слова для более релевантного поиска: с чего начинать программировать новичку, как учиться программированию. Какие есть хорошие книги по программированию и видеокурсы, что нужно знать, чтобы стать программистом. Где скачать курсы и книги для программирования и обучения ИТ? Как обучаться и научиться программировать на языке? Схема и алгоритм постижения профессии кодера. Как начать читать код, научиться понимать написанное в листинге программы. Где учат и готовят на программиста или на айтишника в России? Как стать настоящим айтишником и настоящим хорошим программистом, как получить опыт и начать читать чужой код. В каком вузе учат настоящих программистов и какие книги нужно читать и видео смотреть при учебе на программеров? Скачать книги по программированию и видео курсы бесплатно онлайн для айтишников по Ит и программированию.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru pikabu.ru blogger.com liveinternet.ru livejournal.ru google.com bobrdobr.ru yandex.ru del.icio.us

Подписка на обновления блога → через RSS, на e-mail, через Twitter
Теги: , , ,
Эта запись опубликована: Четверг, 26 января 2017 в рубрике ПрограммированиеМнения.

7 комментариев

Следите за комментариями по RSS
  1. Почему-то современные инфантильные юноши, желающие стать программистами не вызывают никакой жалости, а только недоумение. Не знают, бедненькие, как бы им вот получше, чтобы с минимальными затратами сил и средств - сразу стать крутыми прогерами, чтобы сразу на работу крутую взяли, да в офис хороший и зарплата 4-значная в евровалюте, ага.

    Помнится, 30 лет назад, желающий стать программистом имел на своём пути гораздо больше преград и преграды эти были куда круче.

    1) Программировать хочется, но родители тебе не могут купить даже ZX-Spectrum, потому что Анатолий Борисович и Егор Тимурович взяли и уронили рубль вместе с вкладами в Сбербанке. Кто не вписался в рынок - сам дурак, ага.

    2) В школе только класс "Корветов", на УПК - ДВК-2М, в колледже - очередь на ЕС-1840/1841, а пожилые преподаватели дальше фортрана и бейсика ушли весьма недалеко.

    3) Зато в библиотеке доступны журналы "Наука и жизнь", "Информатика и образование" и есть зачитанная до дыр книжка "128 советов начинающему программисту". Ещё есть учебники по Фортрану и Паскалю. На стипендию покупаются книжки Фаронова по Turbo Pascal- (да продлит Господь его век, какие же прекрасные книжки были!)

    4) Флоппинетом передаются паскалевские либы и книжки в электронном виде. Своего компьютера нет, но есть тетрадки и книжки - пиши код на бумажке, заглядывай в книжки. Есть "Окно" чтобы "наколотить" код и проверить - прекрасно! Пробился в терминалку - программируй, пока не прогнали.

    Сейчас же - у тебя есть быстрый компьютер, у тебя есть интернет. В интернете есть ютуб с лекциями по компьютерным наукам. Есть 100500 учебников в PDF. Есть форумы, где чуть более взрослые и опытные подскажут тебе, как и чего. Есть "курсера", "интуит", "кодварс" и прочие "проджект эйлеры".

    Успешные программисты - все как один самоучки. Все они заплатили эту цену, все потратили сотни жопочасов за теорией и кодингом.

  2. Я думаю, общий посыл статьи применим не только к программированию, но и, например, к системному администрированию.

    Проблема книг - в больших затратах на актуализацию информации по сравнению с электронной документацией. Такие расходы может позволить лишь популярные издания. Электронная документация, если это перевод, отстает от оригинала. Оригинал документации - от кода.

    Так что, актуальным может быть только код проекта и если цель научится современным технологиям, то нет других вариантов, кроме как ковырять код на GitHub.

    С другой стороны, без фундаментальных знаний очень сложно разобраться в работе современного кода. Получить эти знания, как раз, можно из классических трудов (Таненбаум, Намет, Лимончелли, Спольски - я, как сисадмин, ориентируюсь на этих авторов) и подкастов.

  3. Есть у меня подозрение, что приведенный в статье метод будет порождать нахватавшихся по верхам говнокодеров. Вот откуда новичку знать, какая книга даст ему необходимый минимум знаний, а какая будет бесполезна? Как ему узнать, какой проект написан хорошо, а какой нет? Возьмёт он какой-нибудь RabbintMQ, известный проект, отлично работает, а внутри лапша с кетчупом. Короче, это я к чему: по-моему, в рецепте не хватает одного очень важного ингредиента. А именно обратной связи, фидбека тобишь. Который, кстати и дается в оплеванных тут вузах. Мне, например, в вузе вправили мозги капитально, после школьного подхода "а давайте че-нить накодим". Так что скачать сорцы линукса и уйти в пустыню на 10 лет, на мой взгляд, гораздо менее полезно чем контрибутить в опенсорс или вписаться на онлайн-курсы (если уж вуз так претит), где тебе расскажут, как правильно переменные называть. Такое вот имхо.

  4. Еще один момент хочу добавить о котором не было сказано: "Читать книгу - убить идею". Была такая статья о StarCraft - но она применима ко всему. Смысл в том что если есть энтузиазм - лучше реализовать идею (плохо), чем прочитать книгу о том как его нужно реализовать (хорошо). Этот опыт будет просто несравним с информацией в книге. Потом как-нибудь все равно программист узнает как нужно было бы это реализовать правильно. А если идей нет - читать книги подогревающие энтузиазм, а не учебники (например "Хакеры - герои компьютерной революции" ну или что-то менее абстрактное) и идей будет полно всегда.

    Конечно такой подход применять поздновато когда пишешь production код.

  5. Всегда учил новые языки и технологии в программировании и системном администрировании для реализации каких-то конкретных задач. Не берусь утверждать, что такой подход правильный. Зато он очень практичен. С самого начала ты занимаешься осмысленной деятельностью с конкретными целями - это раз. Ты тренируешь свою способность самообучаться, а это ключевой навык в нашей специальности - это два. Ты реально сталкиваешься с необходимостью писать код правильно, придерживаться версионности и вести документацию к написанному и это уже не теоретические выкладки на будущее, а суровая необходимость. И для этого не нужно сидеть 5 лет в универе, достаточно одного распиздяйского проекта, к которому ты вынужден возвратиться через некоторое время (пол года - год).

  6. Для полноты картинки, или для объективности, Стаклфло и реальный кодинг и разбор документации конечное главное, но свое время пока 2 раза от корки до корки не прочел "Изучаем Python" Лутца для Полного Понимания Синтаксиса Языка, нормально реально кодить не мог так как была не понятна логика многих выражений преобразования объектов, особенно в плане ООП: наследования, статических и динамических методов и пр.

  7. Gordon Freeman

    По книгам выучить технологию нереально.

    99 % прочитанной информации вылетает из головы если многократно не закрепить на практике.

    Чтение книг по программированию имеет низкий КПД в смысле временнЫх и трудозатрат по сравнению с результатом.

    Google и StackOverflow рулят.

    Книги нужны в качестве справочников.

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Зарегистрировать/комментатор

Для регистрации укажите свой действующий email и пароль. Связка email-пароль позволяет вам комментировать и редактировать данные в вашем персональном аккаунте, такие как адрес сайта, ник и т.п. (Письмо с активацией придет в ящик, указанный при регистрации)

(обязательно)


⇑ Наверх
⇓ Вниз