Lex Kravetski (lex_kravetski) wrote,
Lex Kravetski
lex_kravetski

Categories:

Чего бы почитать начинающему программисту?

Лучший способ научиться что-то делать — делать это

Это как бы ответ на вопрос «что почитать?». Многие почему-то думают, что есть спец-книги, про которые прознали гуру и которые они скрывают от всех остальных, и что именно эти книги превратили гуру в гуру. Что в книгах о программировании сокрыты тайные знания, превращающие непонятно кого сразу в корифея, и что без этих книг ну никак. Что без этих книг человек будет вынужден заниматься «изобретением велосипедов», которые и в подмётки не годятся уже изобретённым.

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

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

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

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

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

Шутка ли сказать. У меня был компьютер БК-0010. В большинстве книг имели в виду совсем другие компьютеры. И совсем другие версии Бейсика. Иногда имели в виду Паскаль. Иногда изобретали свой псевдо-язык. Но это всё я самостоятельно, без инструкций, без консультантов и без интернета адаптировал к тому что было. И оно работало. И опыт рос. И за компом сидел целыми днями, не отрываясь.

В общем так, друзья: читайте те книги, которые бодро, интересно написаны. По которым сразу видно, что автор прётся и с того, о чём пишет, и от самого процесса написания. Это легко отследить прямо в книжмагазине: открыть книгу в случайных местах и начать читать. Если хочется продолжить чтение, то книга — годная. Её и надо читать. Если хочется отложить на потом, если возникает вопрос «а не слишком ли сложно автор загнул?» — книга вам ничего не даст. Если книга полна формальных описаний языковых конструкций, если каждая страница кричит «я написана только потому, что и про это тоже принято писать», книга — трата времени и денег. Формальное описание бесполезно и для начинающих и для профессионалов. Оно полезно только тем, кто собирается компилятор данного языка писать.

С тех детских пор я весьма мало читаю о программировании. В смысле — книг. Я читаю много мануалов и документации, но только в тех случаях, когда сам осознал вопрос, на который ищу ответ.

А книги… Ну, есть бодро пишущие, увлечённые авторы. Обычно они же, по совместительству, и разработчики языка.

 

Бьерн Страуструп, «Язык С++» — отлично написанная книга. Без понтов, с чувством юмора. Приятно и полезно читать.

Брюс Эккель, «Философия Java» — обратно же, читается легко, весело, всё понятно.

Мартин Одерски, «Programming in Scala» — зашибатая книга. Автору бы романы писать, так завлекать читателя умеет. И умеет же рассказать, зачем и для чего описываемое им нужно. Жаль, на русский книга вроде бы переведена только фрагментами. И перевод к тому же не ахти.

 

Да, собственно, и всё. Остальное на меня как-то не произвело впечатление. Читать не интересно. Не затягивает. А раз так, то и польза строго как от справочников: найти ответ.  

Почему мне, например, не нравятся книжки про паттерны. Потому что написано в них не про то. Чуваки, по подозрениям, придумали концепцию — эти самые надпрограммные абстракции. Паттерны. Подходы. И ломанулись что-то про это дело писать. Однако при ближайшем рассмотрении оказалось, что в реальности таких масштабных паттернов штуки эдак три-четыре: фабричное создание, подписка на события и, быть может, синглтон с ленивой инициализацией. Но про синглотон чего писать? Две страницы о том, как их правильно организовать в разных языках, чтобы всё не рухнулу неожиданно? Мало. Ленивая инициализация страниц на десять потянет. Соответственно, остальную книгу надо про фабрики и подписку фигарить. И если бы так поступили — цены бы такой книге не было. Фабрика, подписка, контейнеры — тут не книгу, тут многотомник можно написать. Со страстями, как у Вильяма, нашего, Шекспира. Но несолидно показалось. Чтой-то за концепция, у которой всего пять пунктов в описании? Не пойдёт.

После этого, само собой, из пальца высосали каких-то там «медиаторов» с «визиторами», которые настолько же «паттерны», насколько паттерны — обход массива в цикле или же язык Бейсик целиком, и про это дело написали кучу книг. Где про фабрику три страницы и про какой-то там медиатор тоже три. Кроме того, про фабрику писать весело и приятно, а медиатор, он — для заполнения пространства. Поэтому написано про него уныло и безрадостно. И, самое главное, применить его на практике нереально. В смысле, реально, но никто при этом не осознаёт, что сейчас он говорит прозой использует паттерн «медиатор».

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

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

Даже на ранних этапах обучения программированию, как показала практика, наилучший для понимания вариант — когда будущий программист «изобретает велосипед». Когда он, промаявшись с сотней переменных «a1, a2, a3...» восклицает в сердцах «а вот бы написать как-то вроде а[i]» и тем самым «изобретает» массив. Когда «заранее» объясняешь про массивы, мало кто понимает. Задают вопросы: «а зачем это»? Забывают через полдня. Собственноручно же «изобретённый» массив запоминается навсегда. Без вопросов. Ровно так же с функциями: зачем они? Объявления какие-то, код по разным файлам разбросан. Куда ж проще просто по очереди все команды написать, без функций. И вот пишет так человек, пишет, а потом вдруг замечает, что часто пишет одно и то же. Он тогда догадывается: надо скопировать и вставить. Поменяв «x» на «y». Некоторое время делает так, а потом начинает мечтать, чтобы кто-то внутри компьютера сам это дело копировал и менял икс на игрек. А ещё лучше, чтобы это было в отдельном месте написано и оттуда копировалось. И понятно ему становится, зачем функции. Причём, способ сей на любом этапе развития полезен: сам додумался — в сто раз лучше понял.

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

В общем, подытожу: чтение книг полезно, когда оно интересно и/или когда у вас уже есть вопросы, на которые вы собираетесь получить ответ. Чтение через силу и «для кучи» вредно. Оно интерес и к самому чтению снижает и к программированию заодно.

Но полезнее всего для овладения программированием — программировать.

Tags: программирование, философия
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 79 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →