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


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


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

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


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


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


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


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


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


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


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


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


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


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


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


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


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


Ещё по теме:


Поделиться с друзьями
-->

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


  1. VioletGiraffe
    11.01.2017 12:20
    +12

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


    1. nalgeon
      11.01.2017 12:29
      +4

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

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


      1. VioletGiraffe
        11.01.2017 12:33
        +1

        По основным тоже бывает, что какие-то библиотечные функции не могу запомнить, как правильно вызывать, например. Тоже не вижу проблемы, когда на поиск ответа нужно 20-30 секунд. Да, согласен, что я делаю Ctrl+C — Ctrl+V, особо уже и не смотрю, так что вряд ли когда-то это запомню.


  1. AllexIn
    11.01.2017 12:22
    +51

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

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

    Нет стимула разбираться, как оно устроено.

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

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


    1. nalgeon
      11.01.2017 13:06
      -23

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

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


      1. AllexIn
        11.01.2017 13:18
        +19

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

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

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


      1. alexkunin
        11.01.2017 13:24
        +12

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


    1. Leoon
      11.01.2017 14:27
      +4

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


    1. zhigalin
      16.01.2017 21:17
      -1

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

      Вот только остальные 95% копипастят не глядя…


  1. anatoly314
    11.01.2017 12:30
    +12

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


    1. nalgeon
      11.01.2017 13:08
      -15

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

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


      1. anatoly314
        11.01.2017 13:27
        +2

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


        1. Demogor
          12.01.2017 01:24
          +1

          Там шутка в несоблюдении принципf KISS и критике попыток вколачивания микроскопом гвоздей(достаточно посмотреть ответ Definitely use jQuery, пример вкусного тонкого троллинга).


  1. Durimar123
    11.01.2017 12:35
    +14

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

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


    1. nalgeon
      11.01.2017 13:10
      -12

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


      1. Durimar123
        11.01.2017 13:15
        +17

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

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


        1. mammuthus
          12.01.2017 10:38
          +1

          И этим Резерфордом был Воннегут.


      1. lair
        11.01.2017 13:40
        +5

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


        1. nyov
          12.01.2017 07:31
          -2

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


          1. lair
            12.01.2017 11:17
            +3

            Это, знаете ли, от документации зависит. Если у вас документация типа reference, то читать ее подряд — приблизительно так же полезно, как читать подряд энциклопедический словарь.


            Ну и да, вот уж понимание от этого точно не зависит.


            1. alexeykuzmin0
              13.01.2017 11:52

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


              1. lair
                13.01.2017 11:54
                +1

                Это и правда вопрос формата "полезно ли читать подряд энциклопедический словарь". Для людей с обычной памятью, мне казалось, принято считать, что нет.


      1. nicholas_k
        11.01.2017 14:28
        +4

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

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

        Не вижу причин противопоставлять эти два метода получения знаний.


      1. vlivyur
        11.01.2017 16:01
        +5

        Документация сейчас вся какая-то из систем автодокументирования. А программисты не любят писать документацию. Вот такая вот фигня.


        1. AdvanTiSS
          11.01.2017 23:16
          +1

          del


      1. AdvanTiSS
        11.01.2017 23:16
        +5

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


  1. Loki3000
    11.01.2017 12:42
    +12

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


    1. nalgeon
      11.01.2017 13:11
      -5

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


      1. Loki3000
        11.01.2017 13:19
        +12

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

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


        1. f0rk
          11.01.2017 14:18
          +1

          Производительность «копипастера» часто падает до нуля при столкновении с нестандартной задачей/багом и и тогда оценить левел-апы становится очень просто. Один может решить задачу, а другой нет. Вопрос о квалификации и ЗП в такие моменты становится весьма очевидным.


          1. TerraV
            11.01.2017 15:18
            +3

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


            1. f0rk
              12.01.2017 12:30
              +1

              Поверьте, еще ни на одном месте работы я не встречался с тем, что качество ценится больше количества

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


          1. Merzavets
            11.01.2017 15:43
            +2

            Практика показывает, что это ваше "часто" случается крайне редко! Потому что мир в основном состоит из рутинных и одинаковых задач, решение которых уже найдено и легко "гуглится".


            У меня есть знакомый, который шлёпает телеграм-боты как блины, да еще и денежки за это получает, и при этом он практически не знает программирования! Это не фигура речи — это на самом деле так, и он этого не скрывает. Копипаст (в т.ч. и с Хабрахабра), Гугл, Стаковерфлоу, на вопросы "как это делается в Питоне" чаще всего я отвечаю — и всего этого оказывается более, чем достаточно. Как-то (не так плохо!) работает, заказчик доволен, приятель не голодает — всё отлично.


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


            1. balexa
              11.01.2017 16:39
              +9

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

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

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

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


            1. bano-notit
              11.01.2017 22:29

              Неа. В глазах людей, которые в этом не разбираются он выглядит профессионалом, а вот нормальные люди, чьё мнение действительно кого-то колеблет в профессиональной сфере, смотрят в код, ну или нанимают людей, которые будут понимать в людях и которые могут попросить другого человека посмотреть в код и сказать своё мнение о человеке.
              Как ни странно код достаточно явно показывает отношение человека к проекту. Самое тупое — если где-то табы, а где-то пробелы в качестве отступов. Где-то snake_case, а где-то camelCase или вообще что-то гибридное. Связность названий переменных многое может сказать. Например снаружи использовались машины-иномарки, а в функции загрузки аргумент называется как грузовики.
              Копипасту отличить вообще не трудно.
              И вот лично я всегда прошу сначала показать код человека, с которым мне предстоит работать. Можно многое сказать о нём сразу же. И о профессионализме можно судить именно по качеству продукта.
              Вот только единственная проблема, работодатели к таким тонкостям не прислушиваются. Им главное — скорость. Это всегда проблема. И не важно что ты делаешь всё красиво и читабельно. Если им резко нужно на 3 дня раньше, то ты должен сделать на 3 дня раньше, и не важно, что у тебя эти 3 дня на тестирование в плане были отведены. Короче всё как всегда, там где есть быстрые деньги нету качества.


  1. yokotoka
    11.01.2017 12:55
    +11

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


  1. exadmin
    11.01.2017 13:35
    +5

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

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

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


    1. nalgeon
      11.01.2017 13:36

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


  1. tehSLy
    11.01.2017 13:35
    +6

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


    1. nalgeon
      11.01.2017 13:35
      -2

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

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


      1. tehSLy
        11.01.2017 14:03
        +1

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


  1. n-name
    11.01.2017 13:43
    +3

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


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

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


  1. vadim_ig
    11.01.2017 14:10
    +2

    Во-первых, никто не заставляет тупо копировать — практически всегда рабочий пример на Stack Overflow идет с кратким разъяснением. Еще очень полезны комментарии к ответу. Прочесть их — дело нескольких минут, при этом получаешь очень четкую картину конкретной проблемы без растекания по дереву. Короче, все нормально с новыми нейронными связями.

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

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


  1. j_wayne
    11.01.2017 14:19
    +1

    При таком количестве разношерстных языков, библиотек, ОСей, тулов, без SO, как мне кажется, уже не обойдешься.
    Это раньше бы сработало, во времена FoxPro, Clipper, скажем…
    Да и задачи усложнились, в ответ на усложнение среды…
    Но когда есть толковая документация, это хорошо и может быть полезнее заглянуть в нее и посмотреть какие-то хитрые моменты, прежде чем рыться в SO или загрязнять его вопросами. Другое дело, что сейчас это редкость, особенно во фронтенде…


  1. sidny_vicious
    11.01.2017 14:25
    +1

    Как по мне, так без интернета не обойтись. Просто нужно грамотно пользоваться. Не просто копировать, а разбираться в алгоритме и так далее, возможно даже после работы. Иначе скорость работы страдает и это бьет сил но по конкурентоспособности. Тем более в фреймворка сейчас много методов и классов, в которых не так просто разобраться. Тут Интернет нужен.
    А вот если программист за каждой ерундой лезет, то это уже не круто. Основы нужно знать наизусть и применять свободно.


  1. candyBoober
    11.01.2017 14:28
    +2

    Ок. А в свои старые исходники смотреть можно? Я не буду копировать, просто посмотрю.


    1. nalgeon
      11.01.2017 14:33
      -2

      Такой вопрос задавали Бобуку, он отлично ответил.


      1. Leopotam
        11.01.2017 16:58
        +4

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


        1. ZakharS
          12.01.2017 15:07

          Использовать не равно копировать.


          1. Leopotam
            12.01.2017 15:09

            А как я смогу использовать свой старый код без его копирования в виде файлов в текущий проект? Никто ведь не говорил, что речь шла про создание нового пустого файла, открытие старого, скопировать-вставить. Это все-равно использование своего кода, написанного ранее. Демагогия уже какая-то пошла.


            1. ZakharS
              12.01.2017 15:24

              Как я понял, девушка в той беседе имела в виду именно копирование кусков кода. Ясное дело, что копирование файлов в новый не возбраняется, хотя и в этом случае правильнее хранить reusable код в общей папке и включать оттуда файлы, куда нужно.


              1. Leopotam
                12.01.2017 15:27
                +2

                Там как раз не было ни слова сказано, как это делается, разговор был про использование своего кода, написанного ранее. Бобук, не разобравшись, что это может быть годами проверенный и оформленный в виде библиотеки код, сразу сказал — вы, девушка, остановились в развитии, фу такой быть. Я бы в этом случае скорее сказал — фу быть Бобуком.


  1. AlgenGold
    11.01.2017 14:29
    +4

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


  1. intsurfer
    11.01.2017 14:29

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


  1. m0sk1t
    11.01.2017 14:30

    Кcтати, если мне не изменяет память, у SO даже есть раздел с «документацией», основанной на лучших вопросах.


    1. mayorovp
      11.01.2017 14:45

      Нет, там отдельная система, слабо связанная с основным сайтом.


  1. Quanzi
    11.01.2017 14:42
    +6

    Если ваша работа полностью покрывается ответами на SO — у вас плохая работа, уж простите.


  1. fogone
    11.01.2017 14:51

    Из тысячи найденных на со решений я всего пару раз скопировал оттуда код без изменений. И то, только потому что решение было ровно такое как если бы я и сам его написал. Так что не стоит винить в копипасте stackoverflow, думаю, тут есть человек более за это ответственный.


    1. springimport
      11.01.2017 17:59
      +5

      Часто нужен не сам код, а идея по решению проблемы.


  1. Cyrus
    11.01.2017 15:00
    +1

    На протяжении десяти лет даже от опытных программистов про вот эту копипасту со SO, но никогда не доводилось делать самому. SO хорош как сборник релевантных терминов, когда не знаешь как подступится к документации или даже гуглу, а за тебя сформулировали вопрос. Узнаешь имя класса/паттерна/сущности и вперед искать дальше, но вот прямо кусками код брать, это где так можно?


    1. Source
      12.01.2017 01:51
      +2

      Недавно сделали прикол на эту тему: stackoverflow-autocomplete


  1. RafaelRS
    11.01.2017 15:16

    Фиговое предложение.


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


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


    1. RafaelRS
      11.01.2017 16:22

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


  1. EaE
    11.01.2017 15:31
    +5

    Эх, пора бы уже написать статью «Программирование со StackOverflow и почему оно хорошо».
    Тезисы были бы следующие:

    1) скорость разработки нынче выше на порядок, чем раньше, и никто не даст разработчику месяц копаться в документации;
    2) StackOverflow это просто та же самая документация, просто более интуитивно/естественно структурированная;
    3) ВСЕ проблемы в жизни разработчика случаются ровно 1 раз, переиспользование опыта с конкретной библиотекой это такой же миф, как переиспользование самостоятельно написанного кода.

    Ну и там, все мы помним что методики разработки пляшут от бизнеса и решения его задач, а не от интеллекта разработчика и удовлетворения его эго.


  1. Spiritschaser
    11.01.2017 16:04
    +1

    Я не программист, я аналитик данных.
    Программировать приходится на VBA, питоне, C#. Для пет-проекта — на JavaScript.
    На любую поблему на SO первые несколько ответов — как минимум не оптимальные, но иногда и ошибочные (хотя проблему в частности решают).

    Последнее впечатлило: в драйвере puodbc вставка данных в ms sql возможна только построчно.
    Большинство ответов сводились к решению сделать огромный sql запрос с кучей insert, и переправить его серверу.
    Я-то знаю про загрузку из csv, и понимал, что нужно искать (решение — модуль миграции данных odo). Но в целом уровень решений ужасен, на уровне «побить в бубен».

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


    1. mayorovp
      11.01.2017 16:26
      -1

      Самый быстрый способ — вызов хранимой процедуры с табличным параметром. Правда, не уверен что его PyODBC поддерживает.


  1. worldmind
    11.01.2017 16:23
    +3

    1. К сожалению не видел ни разу толковой документации, обычно это сухие справочники, часто неполные или плохо связанные.
    2. На SO часто ищу не «как сделать», а «как лучше сделать», например изучаю питон, после неплохого опыта в перле — я знаю как правильно решить задачу, но не знаю как это сделать в питоне и часто гугление приводит именно на SO, правда и там не всегда есть правильные ответы, но часто есть.
    3. Внешняя память это однозначно хорошо, в ИТ слишком быстро всё меняется, нет смысла учить наизусть то, что завтра устареет.


    1. sens_boston
      12.01.2017 00:38
      +1

      К сожалению не видел ни разу толковой документации

      Не столько про толковую документацию вообще, но в частности могу порекомендовать ЛибГен (если, конечно, на хабре это не запрещено). Редко-редко, но в некоторых книгах иногда все-таки можно найти то, что на SO не найдешь.


    1. vlivyur
      13.01.2017 10:41

      1. Лет 20 назад только толковая и была. Либо отсутствовала вовсе.


  1. EminH
    11.01.2017 16:44
    +2

    без интернета

    я сначала подумал что предлагается кодить реально без интернета/ потом увидел совет «я рекомендую devdocs.io », — так что получается что не без интернета

    статья конкретно про стековерфлоу а не использование онлайн ресурсов вообще?


    1. nalgeon
      11.01.2017 16:47
      -2

      devdocs.io работает без интернета.



  1. zip_zero
    11.01.2017 17:29

    Господа! Я не понимаю, почему у всех внутри начало так яростно бомбить от этой статьи. Обращаясь к большинству: признайтесь сами себе, что если бы на работе отключили интернет, вы полезли бы за интернетом в телефон. Потому что вы не знаете досконально того языка (технологии, фреймворка и т.п.), с которыми сейчас работаете. Да-да, это дань сегодняшнему времени: характер задач меняется чаще, чем блудницы у Есенина. Памяти не хватает все это удержать в голове. И это нормально.

    Как добыта информация — из головы или из Stack Overflow — вы не поверите, абсолютно неважно, если итоговый результат технологически верен. А фундаментальные знания — да, расширять и углублять надо, никто не спорит. Они помогают быстрее и правильнее гуглить :)


    1. Simplevolk
      11.01.2017 22:10
      +4

      «Отключение интернета» очень хорошо проявляется на предприятиях, где выход в инет запрещен.
      Тут-то ты и понимаешь, как тяжело искать по документации то, не знаю что.
      Иногда проблема именно в том, что не знаешь откуда начать копать.
      SO помогает в том, что помогает сформулировать вопрос, продумать его. Поискать похожие.

      Обычно, сначала пытаюсь решить проблему самостоятельно, потом лезу в гугл. Если не помогает- то пишу вопрос на SO с примерами кода (то есть показываю сообществу, что я пытался решить проблему, но не смог) и прошу показать в какую сторону копать дальше.


      1. zip_zero
        12.01.2017 10:59
        +1

        Мне доводилось работать, когда выход в интернет запрещен. Как правило, на таких предприятиях стек технологий стабилен, не меняется годами, есть собственные разработки, которые не гуглятся, и там проблемы вообще другого порядка:
        — ужасная документация (канцелярский язык по пять-десять существительных подряд, нет структуры, нет хороших примеров, давно не обновлялась, и т.п.);
        — разработчики, которые проработали там десяток лет и помнят все возможные случаи и их решения наизусть, не хотят делиться знаниями (со стороны кажется, что это job security у них такая, но я бы не стал утверждать наверняка и за всех сразу).

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


      1. Source
        12.01.2017 12:03
        +1

        Да, я думаю, у большинства действующих программистов есть опыт программирования без интернета…
        У меня, когда начинал учиться программировать, была только офф.документация по Delphi и пара книг из университетской библиотеки. Правда с тех пор осталась привычка во всём самому разбираться, не задавая вопросов на форумах.


  1. prs123
    11.01.2017 17:54
    +1

    Ну знаете ли, SO и Google разные вещи. Я вот довольно часто что-то ищу в документации с помощью Гугла, например по PHP или по тому же андроиду. Зачем лезть в какие-то книги, если их содержимое оцифровано, проиндексировано и бесплатное


  1. vlanko
    11.01.2017 17:55
    -1

    Чужое решение не запоминается.

    Что-то в этом есть…
    К тому-же, найденный на Стеке решения часто далеко не оптимальны.


  1. Catrinblaidd
    11.01.2017 18:31
    +1

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


  1. alexBondar
    11.01.2017 19:25
    +1

    За идею и мнение конечно плюс — соглашусь, что нужно котелок включать всегда, даже в случаях copy/paste. Но вот с хорошим источником — промах.
    Попробовал ради интереса на этом сайте поискать исходники или документацию — по многим «page not found» или просто сигнатура метода без каких либо обьяснений. Например, было интересно почитать как работать вот это https://devdocs.io/haxe~java/util/concurrent/executorservice#awaitTermination.
    Даже предложеный пример обучения джуниоров тому как работает HashMap — и тут промах :)


    1. nalgeon
      11.01.2017 19:38
      -1

      devdocs — это агрегатор и поиск, они не пишут документацию. Показывают то, что есть в оригинале. А там пусто: http://api.haxe.org/java/util/concurrent/ExecutorService.html


  1. MacIn
    11.01.2017 19:48
    +5

    Для меня SO — всего лишь один из сайтов выдачи в гугле, при поиске каких-либо данных. Получается, что я из «поколения 2000х». С другой стороны, есть разница — если мы разрабатываем что-то с нуля, то да — я полезу читать RFC и так далее. А если мне надо найти, почему Chrome при выдаче совершенно валидного пакета через WebSockets сходит с ума — путь только в гугл, потому что это уже найденная кем-то проблема.

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


  1. Crazy_as
    11.01.2017 21:56
    +1

    Сразу вспоминается шутка про full-stackowerflow разработчика


  1. mictiax
    11.01.2017 21:57
    +2

    Порылся у себя и не нашел ни одного проекта где моего кода было бы больше 10%.
    вот например текущий проект на STM32. всего кода 18 мегабайт, моего 400 Кбайт.
    многие статьи на хабре используют RTOS, fatfs от елм-чана, езернет, кучу датчиков и тд
    да даже усб стык это десятки тышь недокументированного говно-кода пьяной макаки с кучей багов и обычно не работающий без допила вообще.Гугл частенько выручает когда нужно допилить что либо после предшественников, которые как будто назло бывает выискивают то кривые плагины и библиотеки то не удосуживаются даже закомментировать всю эту Вакханалию после себя, но большей частю пытаюсь дойти до всего сам, ибо " Кто живет чужим трудом, тот неизбежно кончит тем, что начнет жить чужим умом, ибо свой ум вырабатывается только с помощью собственного труда" © Василий Осипович Ключевский


  1. nalgeon
    11.01.2017 21:59
    -3

    Любопытно, что предложение воспользоваться на 5 минут мозгом и документацией, прежде чем бросаться гуглить, вызвало у многих программистов такую яростную реакцию, как будто я хочу запретить stackoverflow. Думаю, это лучше всего показывает, что проблема злоупотребления Стеком реально существует.


    1. lair
      11.01.2017 22:25
      +3

      Вот скажите мне, какая разница между "погуглить, чтобы найти статью из документации" и "воспользоваться документацией"?


    1. Chaos_Optima
      12.01.2017 19:11
      +1

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

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


    1. mictiax
      12.01.2017 21:09

      Есть такие системы в которых можно увязнуть с головой.
      Цель — «внедрить Х» к примеру. К этой цели можно идти 2 дня, а можно и неделю, в зависимости от масштабов задачи.И вот когда наконец пишешь код, оптимизируешь сервис и каждые полчаса тебя отвлекают вопросами, срочными задачами и вызовами — вернуться в работу порой очень тяжело и на это тратится время.Находишь силы, пошурупишь немного над задачей(без «Ok Google» и SO) решаешь половину задачи «И тут появляется нечто новое, восхитительное. В новой версии софта появилась интереснейшая фича. Вышла новая классная железяка, которую надо купить и внедрить.»И так далее…

      Отсюда вытекает вопрос насколько документация «полезней» гугла в данном контексте?!?!


  1. zooks
    11.01.2017 22:06
    +1

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


  1. ElectroGuard
    11.01.2017 23:46
    +1

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


  1. stardust_kid
    12.01.2017 00:06
    +5

    Бомбит у меня от того, что автор пытается индуцировать чувство вины. Я пользовался SO, пользуюсь и буду пользоваться. Stack Overflow и весь массив информации в интернете в общем помогли мне повысить мои умения программиста. Читая и нередко копируя ответы оттуда, я постепенно учился разбираться и понимать их. Так я вырос от полного ламера-джуна до сениора. Естественно, не только с помощью SO. А тут, фигурально выражаясь, некий Антон Жиянов залазит на кочку и говорит, что надо делать все наоборот, дескать у меня зависимость.


  1. SergeySergeich
    12.01.2017 00:09
    +8

    Чужое решение не запоминается


    Своё решение тоже не запоминается :) Довольно давно отвечаю на вопросы на stackoverflow. Так вот, уже несколько раз в поисках решения своих проблем с удивлением натыкался на свои же ответы. И я совершенно не помню этих ответов, не всегда даже помню, что была такая проблема.

    Возможно, дело в том, что подавляющее большинство проблем – одноразовые. Естественно, я не пойду искать реализацию цикла for или детали вызова библиотечной функции, которая используется каждую неделю.


  1. 3aicheg
    12.01.2017 05:10
    +1

    Смешались в кучу конелюди…

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

    Не знаю, как там у автора, а у меня «чужое решение», как правило, не решение — решаешь-то свою, совсем другую задачу. Задача стоит, допустим, собрать мопед, а на stackoverflow идёшь за недостающим винтиком — вместо этого надо найти месторождение руды, выплавить сталь, выточить винт, нарезать резьбу, только тогда образуются связи и будет удовлетворение, что мопед поехал?

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

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


  1. Hacksli
    12.01.2017 07:31
    +3

    Г. У автора проблемы с интернетом походу)))


    У меня когда такое было то тоже хотелось все мануале себе на комп выкачать.


    А вообще я хоть и люблю писать свои велики, но блин иногда капец какая проблема появляется геморойная… Вот тут то Гугл выручает.


    И ни в одном мануале такого не найдешь, ибо это опыт. И да делитесь своим опытом с другими!


  1. Fited
    12.01.2017 09:45

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


  1. WebMonet
    12.01.2017 15:27

    Часто трудно определить в чем проблема. Буквально вчера вязал debian, postfix и virtualmin вместе. Полный лог ошибок «postfix/smtp[26780]: fatal: specify a password table via the `smtp_sasl_password_maps' configuration parameter»

    Гулил, стековерфловил, и т.д. Оказалась бага виртуалмина smtp_sasl_password_maps smtpd_sasl_password_maps

    Другой вопрос, что нужно делать выводы из нагугленного, а не просто ctrl+c ctrl+v. Поэтому завел себе личный бложик с полезными заметками. + иногда неплохо оставлять и комменты на стеке.


  1. tinoajato
    12.01.2017 19:14

    Мозг не резиновый. Мне вполне хватает запомнить источник, разобрать код в голове, а возможно и просто скопипастить. Смысла 45 минут изобретать велосипед, а потом узнать что он давно существует и даже уже без квадратных колёс, нет.


    1. bano-notit
      12.01.2017 19:45
      -1

      Знаете проблему современного поколения? Она уже всеми стариками озвучена. Это проблема мнимой информированности.
      Запомнить источник !== Запомнить решение
      Как бы проблема немного другого рода, её автор и хочет донести. Это проблема мнимости знаний.
      Я уверен, что хороший программист в свой код не будет вставлять то, что он не понимает. Ибо это реально дебелизм и вообще-то потенциальная дыра в коде.
      Я тоже пользуюсь so, хабром и форумами. Но лично для меня ctrl+c ctrl+v — не доставляет удовольствия от решения задачи. Вот когда я понимаю почему так, а не иначе, тогда да, я крут и могу спокойно использовать этот кусок кода. Откоментив его для себя, чтобы в случае чего не забыть мысль, которую я в нём нашёл.
      Никогда не понимал этой погони за скоростью работы. Если работаешь хорошо, то никто тебя гнать не будет. Если работаешь хорошо и с головушкой, то эти 45 минут на изобретение своей версии велика не пойдут в трубу.
      Лично для меня любая мозговая активность является благом, будь то уравнение, алгоритм или составление запроса в поисковике.


      1. tinoajato
        12.01.2017 23:52

        К сожалению неспешно и вдумчиво начал работать только с НГ. До этого было что-то типа:

        1 задание, java. Вот тебе программа. За день разберись что к чему и быстро на следующий сделай то, то и то.
        При условии что её писали 2 года 1,5 человека. На языке который изучал 3 недели. Крутись как хочешь, устроился на работу — работай, нет — вали (что не выйдет — это распределение после универа, но скажется на зп).

        2 задание, php. Ну скоро там? 2-х недель тебе мало? Это всего лишь сайт для архива!
        Это попытка делать спокойно и вдумчиво. Ибо прошлые версии сайта оказались настолько кривые прошлых программистов/кодеров, не знаю как это назвать, что исправлять что-то там «что бы работало» намного дольше, чем написать своё.

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


        1. bano-notit
          12.01.2017 23:59
          -2

          Потому что у вас работодатели продают используют человеко-часы… Об этом написано в коментариях выше, мне кажется в первых 7-9 штуках.