Программирование без интернета


Кафедра гугления
оригинал на xkcd


Топ-3 повседневных вопросов программиста:


  • как сделать Х,
  • почему работает так, а не эдак,
  • как назвать переменную.

С третьим вопросом всё понятно — он неразрешим в принципе. С первыми двумя интереснее.


Чтобы получить ответы, программисты девяностых читали исходники и руководства. Программисты двухтысячных начали активно гуглить. А затем в 2008 появился Stack Overflow, и стал «внешней памятью» для разработчиков. Теперь на 95% вопросов есть готовый ответ: первая ссылка из гугла на Стек.


В чём проблема со Stack Overflow


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


Чужое решение не запоминается. Нет стимула разбираться, как оно устроено. Нет чувства удовлетворения, когда «заработало!». Не образуются в мозгу новые нейронные связи. А без этого нет и запоминания.


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


Да и разработка с постоянной беготнёй из кода в гугл — это не программирование, а ерунда какая-то.


Что с этим делать


Скачать документацию, чтобы была под рукой. Я рекомендую devdocs.io — на выбор 130 языков и фреймворков, бесплатно.


Скачать исходники бинарных библиотек, которые используются в проекте. Актуально для языков вроде Java и C#. Толковые IDE умеют делать это самостоятельно.


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


Для одноразовых задач правило пяти минут не действует. Если вы веб-разработчик, и вдруг вынуждены разбираться с багой компиляции lxml на OracleLinux — не начинайте с 800-страничного руководства, просто загуглите текст ошибки.


Пять минут без интернета можно превратить в десять или пятнадцать. Григорий Бакунов из Яндекса вообще рекомендует блокировать доступ к Stack Overflow на 45 минут каждого часа. Как по мне, это уже перебор.


А вы не ловили себя на стековерфлоу-зависимости?


Ещё по теме:


  • Лекция Григория Бакунова «Можно ли программировать без интернета», 20 минут.
  • Выпуск подкаста Developer Tea Intentional Problem Solving, 15 минут.

Комментарии (24)

  • 11 января 2017 в 12:20 (комментарий был изменён)

    +4

    Спорно. Есть инструмент, который позволяет быстро решать проблему, и я буду его использовать по максимуму, чтобы освободившееся время потратить на создание уникальной функциональности, а не борьбу с «особенностями» ОС, например. Но вообще, я стараюсь хоть как-то разобраться в сути проблемы и проанализировать предложенное/сработавшее решение.
    • 11 января 2017 в 12:29

      +1

      борьбу с «особенностями» ОС

      Это как раз «одноразовые» задачи, для них Стек отлично подходит. Речь в заметке о ваших основных задачах.

      • 11 января 2017 в 12:33

        –2

        По основным тоже бывает, что какие-то библиотечные функции не могу запомнить, как правильно вызывать, например. Тоже не вижу проблемы, когда на поиск ответа нужно 20–30 секунд. Да, согласен, что я делаю Ctrl+C — Ctrl+V, особо уже и не смотрю, так что вряд ли когда-то это запомню.
  • 11 января 2017 в 12:22 (комментарий был изменён)

    +17

    Когда человек в следующий раз столкнется с той же проблемой, он снова полезет на Стек. И снова. И снова.
    Чужое решение не запоминается.

    Ерунда.
    Я программист 3д графики. До выхода UE в Open Source — моя основная работа была завязана на программирование 3Д движков с нуля.
    Я не смогу в тетрадке без внешних источников написать работающий код инициализации OpenGL. Я на нём работаю с 2004 года. Проектов написано под сотню, разного уровня сложности. Я много раз по документации писал инициализацию. Но не смогу её точно вспомнить. Зачем мне её в деталях учить?
    Нет стимула разбираться, как оно устроено.

    Ерунда.
    Если вы пихаете код из внешнего источника не разобравшись в нём — это не проблема внешнего источника.
    Это проблема вашего лида, который до сих пор вас не уволил.

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

    • 11 января 2017 в 13:06

      –2

      Смотрят что в этом решении происходит и тогда уже копируют в своё код,

      «Смотрение» в чужих решениях обычно очень поверхностное. Нет глубокого понимания, нет обучения.

      • 11 января 2017 в 13:18

        0

        Пару лет назад столкнулся с задачей по блокировке скролла у списка в Android.
        https://habrahabr.ru/post/218307/

        Нашел решение, разобрался почему оно хреновое, написал в итоге своё (вроде тоже на основе обсуждения в SO, уже точно не помню).
        Прошло два года:
        1) Я ничего не помню о диспетчеризации событий в Android. Не работаю с этим, соответственно не помню. Несмотря на то, что в тот момент достаточно детально разобрал ситуацию.
        2) Мне за два года больше ни разу знания о диспетчеризации событий в Android не пригодились.

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

      • 11 января 2017 в 13:24

        +1

        Это вы за кого говорите? Если за себя, тогда ладно, дело ваше. Если за меня — нет, я обычно смотрю не поверхностно, а подробно, разбираюсь в увиденном и мотаю на ус. Если же человек поступает не так, то может стоит называть его не разработчиком/программистом, а (мягко говоря) кодером/интегратором?
  • 11 января 2017 в 12:30

    +3

    А я вот с вами не согласен. Во первых очень и очень часто на Stackoverflow объясняется трудная часть которая не понятна в документации, ведь в документации нужно закончить все и к сроку, а в SO пишется для рейтинга и хороший ответ может взвинтить ваш рейтинг. В общем, Stackoverflow это в большинстве случаев та же документация только написана (разжевана) более понятным языком. Кроме того не всегда знаешь что решение проблемы X лежит в статье Y в документации к продукту Z, и чтобы это найти самому нужно потратить иногда не один час. И да, понимание тоже приходит. Учил JSF по ответам BalusC на SO, легендарная личность.
    • 11 января 2017 в 13:08

      –2

      Stackoverflow это в большинстве случаев та же документация

      Stackoverflow в большинстве случаев — это Add two variables using jquery. Есть и исключения, конечно, но они не опровергают общую картину.

      • 11 января 2017 в 13:27

        0

        А в чем проблема этого вопроса? Если его не заминусовали то он вполне легитимен для сообщества, а то что его заплюсовали значит, что он очень даже актуален. Да, вопрос простой, но не стыдно «не знать», стыдно не спросить. Кроме того в моем случае SO очень часто сыграл роль желтого утенка, например вот здесь.
  • 11 января 2017 в 12:35

    +5

    >Скачать документацию, чтобы была под рукой. Я рекомендую devdocs.io — на выбор 130 языков и фреймворков, бесплатно.

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

    • 11 января 2017 в 13:10

      0

      Я начал писать ответ, но понял, что если для вас нет разницы между гуглением и чтением документации — вряд ли смогу что-то объяснить.

      • 11 января 2017 в 13:15

        +3

        >Я начал писать ответ, но понял, — вряд ли смогу что-то объяснить.

        «Если учёный не может объяснить уборщице, которая убирается у него в лаборатории, смысл своей работы, то он сам не понимает, что он делает.» © Эрнест Резерфорд

      • 11 января 2017 в 13:40

        0

        А вы предлагаете читать документацию последовательно, сверху вниз?

  • 11 января 2017 в 12:42

    +3

    По моему, ерунда какая-то. Решение может в себя включать несколько разделов мануала сразу. Так что лучше посмотреть решение, а уже затем лезть в мануал и посмотреть что там еще написано.
    Я как раз отношусь к «правильным» программистам, которые сами до опупения разбираются с проблемой, вместо того чтобы загуглить. И вот что я могу по этому поводу сказать: уже неоднократно ловил себя на том, что обнаружив багу в чужой библиотеке, докапываюсь до ее сути, исправляю ее, после чего выясняю что это никому не нужно — проект давно не обновляется, а в первой же строчке выдачи гугла решение в две строчки, как можно работать с библиотекой, чтобы не натыкаться на эту ошибку. То есть, я молодец, вроде как… только вот кому и какая польза от моих действий?
    • 11 января 2017 в 13:11

      0

      Польза вам. Вы получили левел-ап. А те, кто взяли «решение в две строчки» — нет. С годами эти левел-апы ощутимо проявляются в размере заработной платы.

      • 11 января 2017 в 13:19

        +1

        С годами эти левел-апы ощутимо проявляются в размере заработной платы.

        Или не проявляются. Ибо мои левел-апы оценить нельзя, а производительность «копипастера» как раз можно. Так что так себе аргумент — только для самоуспокоения годится.
  • 11 января 2017 в 12:55

    +5

    Простите, но похоже на старческое брюзжание. Пока есть инструменты и доступ в «коллективный разум» вроде SO, позволяющие в 10 раз быстрее решить задачу не отвлекаясь на лишние детали, разумные и ценящие свое время разработчики будут это использовать. Лично я этим пользуюсь, даже если приходится ходить часто за одним и тем же решением, потому что не хочу забивать голову знаниями, которые устареют в течение года или с выходом новой версии библиотеки (а в мире js устареть может в течение месяца, а то и недели). Просто потому что в течение этого месяца я схожу 10 раз на SO за решением одной и той же проблемы, не запоминая, а после мне это знание не понадобится уже никогда. Вроде нюансов инициализации windows-приложения на C++ STL в 95 году или программирования резидентов под MS-DOS 5. Наверное, обидно тем, кто потратил человекомесяцы на вникание в эти темы, а сейчас это никому нафиг не нужно. Мне такие упущенные годы не нужны, я лучше за это время что-нибудь фундаментальное изучу вроде алгоритмов и структур данных, паттернов и т.п. А для параметров инициализации фреймворка или нюансов имплементации языка регулярных выражений в конкретном языке — пусть служит «внешняя память». Все равно завтра это всё будет уже не нужно. Бобука уважаю, но насчет блокировки SO — имхо, он ересь несёт.
  • 11 января 2017 в 13:35

    +2

    Мне кажется я понимаю что хотел сказать автор. Он не против SO (или остальных интернетов), он хочет сказать что в некоторых случаях готовый ответ не несет пользы для самого девелопера. Это как в притче: или дать рыбы (накормить 1 раз), или научить ловить рыбу (накормить на каждый день).

    Разбираясь в проблеме самостоятельно — ты между делом узнаешь подробно как оно устроено, запомнишь ньюансы которые тебе могут пригодиться позже, проникнешься архитектурой. Ведь не зря джуниоров заставляют заглянуть, например, во внутрь java.util.HashMap — там ведь очень много полезного.

    SO отличный инструмент, и когда нет времени на ресер — он прекрасно спасает, но как говорит автор — нужно уметь и головой думать, и в исходниках ковыряться.

    • 11 января 2017 в 13:36

      0

      Мне кажется, у вас с автором одинаковое понимание ツ

  • 11 января 2017 в 13:35

    0

    Чет какой-то совсем бред. По моему, тут все складывается из человека. Я более менее активно пользуюсь SO, но не каждый раз бегу туда. Бегу на первый линк в гугле (условно говоря), будь то мануал, или стек, неважно. Если это мануал, пробую, не получается — иду на стек. Если это стек, процедура та же, только потом иду в мануалы. Я конечно понимаю, да мозги потренировать и прочие бредни, но мы ведь не сидим, теоремы не выводим, в течение 5ти минут самостоятельно, ибо глупость же, нет?
    • 11 января 2017 в 13:35

      0

      да мозги потренировать и прочие бредни

      Да, мозги потренировать и прочие бредни. Точно подметили.

      • 11 января 2017 в 14:03

        0

        В контексте срочно решаемой задачи — это бредни. Когда мне нужно обеспечить единожды воспроизводимый функционал — тоже. Как правило, если ты не задаешь вопрос на СО, а нагугливаешь его, то код ответов зачастую не полностью совпадает с решением текущей задачи — возникает необходимость допилить, доработать, исправить — вникнуть в суть. Проблема выедена из яйца, так можно до чего угодно докопаться: «разраб вот полез в интернет вместо книжки, а как же листание страничек, просмотр оглавления, там же тоже информация, которая сразу отложится в мозгу! А еще лучше по рукописям, пущай на каждой странице рыщет в поисках нужной функции! А еще лучше пусть наугад названия и аргументы угадывает!».
        Понятное дело, что пользоваться коллективным разумом нужно в РАЗУМНЫХ (какая ирония, да?) пределах, я думаю, каждый тут это осознает. Отсюда — нет смысла говорить людям, что «не нужно подчистую копипастить код ай-я-яй».
  • 11 января 2017 в 13:43

    0

    Скачать документацию, чтобы была под рукой. Я рекомендую devdocs.io — на выбор 130 языков и фреймворков, бесплатно.

    Дополнительно рекомендую Zeal — zealdocs.org. Заявлено 195 docsets

    В некоторых моментах лучше чем devdocs. Например есть MySQL документация, которая в devdocs отсутствует по лицензионным соображения. Zeal имеется в репо Ubuntu и Fedora.

© Habrahabr.ru