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

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


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

Бороздя бездонный 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 в рубрике ПрограммированиеМнения.

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

Следите за комментариями по 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 лет в универе, достаточно одного распиздяйского проекта, к которому ты вынужден возвратиться через некоторое время (пол года - год).

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

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

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

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

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

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


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