Программист ли я, или просто хорошо гуглю?

    Письмо Скотту Хансельману


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

    От переводчика


    Всем привет, с вами Максим Иванов, и сегодня мы поговорим об одном из постов Скотта Хансельмана (Scott Hanselman), который он написал по причине довольно серьезного и хорошо сформулированного письма к нему. В общем-то, меня вдохновила одна из статей на нашем ресурсе под названием Google-oriented programming. Больше всего мне понравилось то, что в программистах порой может появиться синдром самозванца. Конечно, труды Хансельмана не единственны в этом мире с точки зрения психологии, но он дает четко нам понять, что это нормально. Как он пишет: «Но вот в чем дело. Мы все иногда чувствуем себя обманщиками. Мы все обманщики. Это часть роста. Мы попадаем в ситуации, которые немного сложнее того, с чем мы можем справиться. Но мы справляемся с ними, мы не обманщики, и мы двигаемся к следующему испытанию.» Так давайте же разберемся, какие решения и выводы Скотт предлагает нам в своем посте. Приступим.

    Простые правила


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

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

    Такое ощущение, что ты немного не в себе, когда слишком много думаешь. Кажется, что вода попала тебе в нос, однако ты вовсе не тонешь.

    Во-первых, помните, что вы не одиноки. Я уверен в том, что мы растем, когда выходим за пределы своей зоны комфорта. Если это не ломает нас напрочь.

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

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

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

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

    А что вы думаете?

    Популярные комментарии на habrahabr


    koceg:
    Я стараюсь много читать, причём книги из самых разных областей программирования. У меня нет цели запомнить всё или начать использовать эти знания на следующий день. Моя цель — расширять кругозор, чтобы когда появится необходимость, я знал в какую сторону копать. А сам этот процесс всегда начинается с поисковика.
    


    splatt:
    Я программирую вот уже почти 10 лет, и я признаюсь вам честно — за все это время я не дочитал ни одной книги по программированию. Я просто начинаю засыпать, когда читаю их, и усвоение материала начинает стремиться к нулю. В результате начинаешь просто пролистывать и искать то, что тебе более интересно и понятно. Мне кажется, это личное предпочтение. Лично мне вот не нравится сам формат книги, но я с удовольствием посмотрю видеоуроки и полистаю официальную документацию, что бы «включиться» в новый фреймворк или технологию. Для меня это тоже самое, что и книга, но гораздо быстрее. Ну и да — никакая книга не заменит вам практику, технику «просто возьми и начинай что-то делать (тестовый проект, todo list, и тд), решая задачи по мере поступления».
    


    Scf:
    С позиции опытного разработчика:
    Гуглить что?
    Чаще всего я гуглю тексты ошибок и куски стектрейсов
    Затем — тёмные или подзабытые места фреймворков типа "hibernate declare composite key". Если мне нужно начать использовать новый фреймворк, я предпочту потратить день и прочитать официальную документацию.
    И никогда — чужой код. Чужой код при решении проблем нужен только для того, чтобы изучить те API, которыми он пользуется для решения проблемы.
    Исключение — это реализация достаточно сложных алгоритмов типа BCrypt, но и там не стоит брать первый попавшийся кусок.
    
    Вкратце: гуглить надо прежде всего чужой опыт и чужие впечатления. Знания лучше по-возможности получать из документации, а код — писать самому или брать известные библиотеки.
    


    vlreshet:
    Старый анекдот:
    
    Физику, математику и инженеру дали задание найти объём красного мячика.
    Физик погрузил мяч в стакан с водой и измерил объём вытесненной жидкости.
    Математик измерил диаметр мяча и рассчитал тройной интеграл.
    Инженер достал из стола свою «Таблицу объёмов красных резиновых мячиков» и нашёл нужное значение.
    
    Вот так и у программистов. Хороший программист всегда сначала попытается нагуглить объём красного резинового мячика, вместо долгого и тернистого пути по поиску объёма самостоятельно. Зачастую нет смысла рыться в документации если тебе нужен чёткий ответ всего на один вопрос — проще нагуглить этот ответ, и работать дальше.
    


    Комментарии к оригинальному посту


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

    К прочтению:

    1. Является ли гугление плохой практикой?
    2. 10 лучших сайтов с головоломками для программистов
    3. Коаны о программировании
    4. Питер Молинье о своей карьере
    5. Is Googling a bad practice for doctors?
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 51

      +3
      Гуглить не проблема. Проблема в том, что часто люди сразу не думая бегут гуглить и находят бяку какую-нибудь и вставляют в код кое-как.

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

      То есть решать по одной схеме «гуглить — не гуглить неправильно». Иногда придется прогуглить 3 разные вещи, и из них слепить решение.
        0
        Мне кажется, должно быть чувство «выполненной задачи на хорошо», то есть бежать гуглить проблему со всех сторон — это даже не плохо, просто необходимо брать не первое попавшееся, а изучить вопрос, сформулировать оптимальное решение для конкретно нашего случая, вставить и порефакторить выбросив ненужные части.
          +3
          Страшно становится тогда, когда ты нашел на stackoverflow схожий вопрос, но на него никто так и не смог ответить…
            +6
            Или когда, проанализировав простыни логов, замучив до смерти дебаггер и таки найдя решение через 3 дня, возвращаешься на SO победителем, а на этот вопрос уже ответили.
              +2
              Да, у меня такое же было полгода назад… Первоначальные ощущение — «обидненько».
              Но потом понимаешь, что пока 3 дня ковырял — ты реально вырос.
              И тогда осознаешь, что эти 3 дня не были пустой тратой времени.
                0
                понимаешь, что пока 3 дня ковырял — ты реально вырос.

                Обычно, что я понимаю, что я невнимательный идиот.

              +1

              Зато как приятно, продравшись через дебри, написать ответ на этот вопрос =)

              0
              из крайности в крайность сэр!
              0
              Мне Гугл даёт очень многое, особенно с того момента, как я сел за swift. Учитывая довольно активное развитие этого языка всегда стоит отслеживать так называемые «best practices».
                +2
                А, ну и ещё Гугл отлично сбивает спесь: только ты начинаешь думать, что так круто и хитрО решил какую-то задачу, как Гугл подкидывает вариант не хуже, а то и лучше.)))
                  0
                  а зачем вы решаете такие задачи, какие уже решены в гугле? Вроде как решать своими силами нужно то, что в гугле не нашлось.
                    +3
                    Многие задачи проще и/или надёжнее решить самому, чем воспользоваться чужим решением.
                      –1
                      велосипед?

                      p.s. я не против них, но общество почему то против.
                      0
                      К сказанному оратором выше мог лишь добавить: а) реально уникальных проектов под мобильные платформы практически нет б) когда я начинал писать диссертацию и, соответственно, программу симуляции для кхм… демонстрации алгоритма, то вносил некую инновационность, через пару лет схожие алгоритмы(местами немного лучше или хуже, не суть) увидел у своих «коллег» из других институтов. Так что даже то, чего не нашлось в гугле сегодня, через пару дней/месяцев вполне может там появиться и в улучшенном виде.
                    0
                    Помню время до широкополостного интернета, когда просто сидишь и пишешь программу. (((
                      0
                      Библиотеки и документация тогда были оффлайновые по умолчанию.
                        +1
                        Пока не появится какой-то хитрый баг, и сидишь, ковыряешься в доках и дебаггере. А это для начинающего программиста было 95+% времени. Дальше лучше, конечно, но все равно…
                        Плохое быстро забывается.
                          +1

                          <offtop>
                          "широкополостной" — это с широкими полостями)
                          </offtop>

                          +4
                          Не совсем в тему программирования, но близко. Преподавал студентам основы сисадминства. На лабах принципиально не существовало методичек. Было задание выданное за неделю, был комп с виртуалкой, был гугл. Все как в жизни) А дальше все делились на думающих и тех, у кого не работали тупые копи-пасты из интернета… Потому, что как гласит старая мудрость «Чтобы правильно задать вопрос, надо знать больше половины ответа». В программировании очень похоже, stackoverflow это великолепно, но больше половины ссылок надо отсеять сразу же, т.к они не совсем о том, что тебе нужно или это решение похожей, но не твоей ситуации. А в твоей оно иногда еще и наоборот вредное. Вот для этого нужно разбираться в предмете! Так и на экзаменах, честно говоря, тоже давал пользоваться всем) Но это мало кому помогало без понимания предмета…
                            0
                            Вот это, кстати, очень правильный подход. У нас так живо отсеялись зубрилки, у которых теория прям, что называется, от зубов отскакивала, но на практике как-то не сложилось. Они могли чуть ли не дословно пересказать конспект по курсу «Теория ОС», но задача правильно разбить винт и установить Винду вводила их в ступор.
                              0
                              Я думал что в оригинале «правильный вопрос уже содержит половину ответа», но ваш вариант тоже хорош
                                +1
                                Мы оба оказались неправы)
                                Это цитата из Роберта Шекли «Вечный вопрос»

                                «Ничего более конкретного они не добились. Долгие часы они мучили Ответчик, мучили себя, но правда ускользала все дальше и дальше.
                                — Я скоро сойду с ума, — не выдержал Морран. — Перед нами разгадки всей Вселенной, но они откроются лишь при верном вопросе. А откуда нам взять эти верные вопросы?!

                                Один на планете — не большой и не малой, а как раз подходящего размера — ждал ответчик. Он не может помочь тем, кто приходит к нему, ибо даже Ответчик не всесилен.
                                Вселенная? Жизнь? Смерть? Багрянец? Восемнадцать?
                                Частные Истины, полуистины, крохи великого вопроса.
                                И бормочет Ответчик вопросы сам себе, верные вопросы, которые никто не может понять.
                                И как их понять?
                                Чтобы правильно задать вопрос, нужно знать большую часть ответа.»

                                Кстати рекомендую прочитать, он очень хорошо дополняет статью и комментарии! Ответчик в рассказе Шекли очень напоминает современный Гугл :)

                                  0
                                  Потрясающе, спасибо!
                                    0
                                    Да, в оригинале этот рассказ называется несколько иначе. «Robert Sheckley, „Ask A Foolish Question“ и точная фразу звучит как „In order to ask a question you must already know most of the answer“, так что переводы могут отличаться, но смысл остается. Рекомендую прочитать оригинал, он всегда богаче перевода.
                              0
                              Гугл не всегда помогает. Как пример конкретно сейчас я работаю над закрытым продуктом, который не используется нигде за пределами компании, так что довольно часто гуглиь бесполезно — все равно никто ничего не знает про наш стек технологий ;)
                              • UFO just landed and posted this here
                                  +9
                                  Главное — потом в этих постах отметиться.
                                    0
                                    Такое больше было характерно для CodeProject.
                                    На SO качество ответов и кода значительно выше.
                                    Хотя чужой код никогда не вставлял — побаиваюсь :)
                                      0
                                      Бояться вставлять чужой код имеет смысл только если не понимаешь что в нём происходит)
                                    +1
                                    Я junior, для меня Google — хлеб насущный. Он помогает мне решить мои задачи, уложится в срок. Я не считаю это плохой практикой, так как когда я сталкиваюсь с подобной проблемой, я знаю как её решить. Единственное, я чувствую себя кодером, который ничего кроме кода не делает. Просто набирает код, чтобы начальник был доволен и я уложился в срок. Мне хочется стать программистом. Тем человеком, который сначала тщательно обдумывает архитектуру, а потом пишет прекрасный код. Как будто его руки были омыты слезами тайландских девственниц. Наверное, мне просто нужно больше практиковаться и набираться опыта, так что, Google, я рассчитываю на тебя :)
                                      +1
                                      Я вот стараюсь найти готовую реализацию моей задумки в гугле/гитхабе/гитлабе/etc. Если найду, посмотрю как мыслил автор и перенесу идею в свой проект. Это, конечно, грубо и не интересно, но чего поделать.
                                        +2
                                        10 лет в IT, 3-5 в программировании — я только вчера узнал про оператор % (остаток от деления) проходя собеседование которое само собой с треском провалил… я Google-oriented программист, и у этого подхода есть огромный минус — отсутствие фундаментальной базы, получаемые навыки/опыт ограничены проблемами с которыми пришлось столкнуться.
                                          +3

                                          Это смотря как гуглить. Лучше разок какой-нибудь специально составленый курс пройти с задачками на то на сё, чем чисто с практическими задачами бороться. Все эти курсы же составляют специально, чтобы охватить базу.
                                          http://exercism.io/

                                        • UFO just landed and posted this here
                                            +2
                                            Т.н. «Fermat's last post» :)
                                            0
                                            Чаще всего я гуглю тексты ошибок и куски стектрейсов… И никогда — чужой код

                                            А так же сравнительные тесты технологий, фреймворков и т.п. И никогда — чужой код
                                              0
                                              Уровни профессионализма программиста.

                                              Уровень 1. Ты понимаешь о чем проблема.
                                              Уровень 2. Ты умеешь хоть как-то решить проблему.
                                              Уровень 3. Гугл/Яндекс тебе помогают только как справочники.
                                              Уровень 4. Тебя перестают материть другие программисты в команде.
                                              Уровень 5. Не ты ищешь работу, а работа ищет тебя.

                                                0
                                                Уровень 6. Ты уже не пишешь на языке программирования — ты пишешь сам язык программирования.
                                                  –2
                                                  Уровень 7. Твоя программа пишет тебя, потому что боготворит тебя и хочет быть похожей на тебя. Она заменяет тебя ботом.
                                                0
                                                Лично мне тяжело с пустыми глазами копипастить куски кода. Пока не разберусь в его работе, всегда в голове будет висеть мысль, что «у тебя висит костыль, нужно с ним разобраться», даже если он без проблем решает поставленную задачу; а работать над проектом с такой мыслью не очень комфортно.
                                                  0
                                                  Идешь на stackoverflow, а единственный верный ответ, давал ты сам…
                                                    0
                                                    Объем информации поглощаемый программистами настолько высок, что без использования гугла можно просто остаться не у дел с устаревшими знаниями. Мало какая книга даст оперативное решение проблемы, да и для другого они предназначены. Но и бездумно копипастить код для решения своей задачи редко получается. Почти все требует доработки и адаптации под задачу.
                                                      +4
                                                      Несколько лет назад неожиданно для себя обнаружил, что перешел в состояние «у меня по работе возникают в основном такие вопросы к гуглу, ответов на которые нет не только на stackoverflow, а вообще нигде в интернетах». В лучшем случае обнаруживаются посты с неотвеченными аналогичными вопросами. И не могу сказать, что это делает меня более счастливым.

                                                        –1
                                                        Иногда документация написана столь плохо, что только гуглинг примеров и спасает. А если к этой платформе ещё и только привыкаешь — то тупое копирование неизбежно, ибо не знаешь как вообще можно писать по другому.
                                                        А если не очень хорошо знаешь английский, то всё программирование вообще в принципе сводится к гуглингу.
                                                        Да и вообще в 21 веке живём вроде. Все виды велосипедов уже давно написали за нас. Плодить новые просто бессмысленно (хотя иногда хочется, чем и занимаюсь на досуге).
                                                        Вообще считаю что проблемы гуглинга именно в отсутствии (адекватной) документации. Потому что если дать человеку топор и лес — он сможет построить дом. Но если дать аборигену не заправленную бензопилу — он никогда не распилит ей дерево. Откуда ему вообще знать что нужен бензин? А в инструкции будет: «для того чтобы завести бензопилу — резким движением потяните за кольцо». Тут только гуглинг поможет…
                                                        Вот и я в программировании чувствовал себя также. Особенно когда только начинал. Берёшь книгу а там: «откройте простым текстовым редактором, бла-бла-бла int main() бла-бла-бла, а теперь скомпилируйте.» А на деле это сработает только с первым примером из книги (если вообще сработает). Окажется компилятор надо сначало найти, скачать, установить, при компиляции указать нужные ключи. Сам редактор может сохранять фаил не в той кодировке. И вот начинает безумно гуглить по каждому пунктику…
                                                        Или например начинаешь по книге изучать объекты. Изучаешь массивы. А как создать массив обьектов? Меня например это ввело очень в большой ступор когда я изучал java. (славу богу сейчас я на python-е сижу)
                                                        И что самое страшное как раз именно гуглинг и не помогает. А всё потому что каждая следующая подсказка — создаёт с 10-ток новых вопросов.
                                                        Во общем негодую я.
                                                          0
                                                          А если к этой платформе ещё и только привыкаешь — то тупое копирование неизбежно, ибо не знаешь как вообще можно писать по другому.

                                                          Вот я не понимаю как это — тупо копировать, не пытаясь понять код, который копируешь. Да, приходилось иногда заглядывать и в код коллег, и в SO за помощью, но разве чисто самому не становится интересно, как оно работает? А если оно работает неправильно?
                                                            –1
                                                            А как оно работает? а где посмотреть? А что делать если не знаешь даже где посмотреть?
                                                            Вы вот фреймворками пользуетесь? А лезете по коду глубже чтобы узнать как оно там работает? А если там просто тупые биндинги к готовым библиотекам? А в учебниках об этом пишут? Как узнать в принципе что код работает не правильно? Как узнаёте вы? Вы не пробуете для начало просто запустить чужой код — чтобы проверить а запускается ли он вообще?

                                                            > «не пытаясь понять код»
                                                            Вот скажите вы когда видите
                                                            cout << «Hello world!!!\n»;
                                                            Вам интересно как работает этот код? А если он работает не правильно? А откуда вам знать что именно это правильно?
                                                            А может быть надо:
                                                            cout << «Hello, world!» << endl;
                                                            или ещё хуже:
                                                            puts («Hello, World!»);
                                                            или так:
                                                            printf («Hello, World!\n»);
                                                            Попробуйте поймите. Как дойдёте до уровня ассемблерного кода — решите правильно ли оно работает. Я конечно утрирую. Но когда дело касается вывода строки на экран — все соглашаются, о том что, проще использовать готовый встроенный годами отлаженный функционал, чем писать свой. Я с такой же точки зрения смотрю на чужой код. Если написано «так» — значит кто-то продумал почему именно так а не иначе.

                                                            Когда дело касается незнакомой платформы — один фиг начинаешь с того что берёшь какой нибудь кусок чужого кода и пробуешь посмотреть как он себя ведёт. И никогда заранее не знаешь правильно это или нет. А теперь перечитайте моё сообщение выше: я писал о недостатках документации. Не о решении глобальных экономических проблем страны, а о том что программирование в принципе начинается с того что ты берёшь какой нибудь код и пробуешь его. Естественно при данном действии так называемое «понимание кода» отсутствует.

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

                                                              А после таких вот копипастов приходится потом разбираться в написанных в разном стиле (а то и парадигме — и такое бывало) кусках кода с излишним или недостаточным функционалом.
                                                                0
                                                                > так не бывает.
                                                                Зато бывает как на рисунке с совой. И очень часто. Особенно новичкам. Которые эти ваши парадигмы только изучают…
                                                                не мы такие — жизнь такая… А потом удивляются почему на том же SO тысячи однотипных вопросов.
                                                                Когда на самом деле всем начинающим нужна просто маленькая шпаргалочка в виде таблиц с различными комбинациями.
                                                                  0
                                                                  «нужна просто маленькая шпаргалочка»
                                                                  Это называется документацией.
                                                                    +1
                                                                    А теперь вернёмся к моему первому комменту: Иногда документация написана столь плохо, что только гуглинг примеров и спасает.
                                                                0

                                                                Вызывать чужой код и копировать чужой код — это разные вещи.

                                                          Only users with full accounts can post comments. Log in, please.