Шпаргалка для программистов или «мы погуглим за вас»

Введение, которое можно не читать


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


Собственно, сама суть


Итак, представляю вам сервис «cheat.sh». Написан он на Python, так что питонисты могут заинтересоваться. Существует несколько его реализаций:


  • Через «curl» в командной строке;
  • Через браузер.
  • Через редакторы кода: Emacs, Vim, Sublime Text, VSCode.

Как использовать


Используя «curl»


Здесь нужно иметь утилиту «curl». В дистрибутивах Linux она уже есть, для Windows её нужно устанавливать отдельно. Проблем на Windows у меня не возникло.


Заходим в консоль и отправляем запрос такого типа:
curl cht.sh/[язык]/[запрос-с-дефисом-вместо-пробела]
Получаем ответ:


$ curl cht.sh/python/how-to-read-text-file
#  How to read a text file into a list or an array with Python ...
#
#  You will have to split your string into a list of values using split()
#
#  So,

lines = text_file.read().split(',')

#  [Achrome] [so/q/14676265] [cc by-sa 3.0]

Изначально утилита задумывалась как шпаргалка по командам для терминала Linux, поэтому можно искать справку по ним:


$  curl cheat.sh/tar
$  curl cht.sh/curl
$  curl https://cheat.sh/rsync
$  curl https://cht.sh/tr

Ещё можно установить консольную утилиту:


$   curl https://cht.sh/:cht.sh > ~/bin/cht.sh
$   chmod +x ~/bin/cht.sh

Пример использования здесь.
Для Windows таких команд нет, поэтому есть вариант использовать Cygwin, Git bash и так далее.
На ваш страх и риск.


Используя браузер


Просто переходим по нужной ссылке в браузере.
На примере www.cht.sh/python/how-to-read-text-file


image


Ссылку можно отправить в качестве ответа на Stackoverflow, к примеру.


Используя редакторы кода


Зачем? Чтобы не выходя из редактора получить копипастом код решения.


Плагин для Emacs,
Плагин для Sublime Text,
Плагин для Vim,
Плагин для VSCode.


Интересности


Авто-дополнение на Tab


Установка для Bash:


    $ curl https://cheat.sh/:bash_completion > ~/.bash.d/cht.sh
    $ . ~/.bash.d/cht.sh
    $ # and add . ~/.bash.d/cht.sh to ~/.bashrc

Установка для ZSH:


    $ curl https://cheat.sh/:zsh > ~/.zsh.d/_cht
    $ echo 'fpath=(~/.zsh.d/ $fpath)' >> ~/.zshrc
    $ # Open a new shell to load the plugin

Параметры ответа


Если вам не нужна подсветка синтаксиса в ответе:
curl cht.sh/python/open-file?T


Если вам нужен только код без комментариев:
curl cht.sh/python/open-file?Q


Вы можете это комбинировать:
curl cht.sh/python/open-file?QT


Стелс-режим


Открываем клиентскую версию с параметром «--shell» и используем:
$ cht.sh --shell [язык программирования]
$ stealth [параметры]
Зачем? Чтобы быстро получить ответ. Автор предлагает использовать такое на дистанционных собеседованиях. Тут лишь вопрос вашей собственной совести.


One-line решения


curl cht.sh/[язык]/1line


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


Странности языков программирования


curl cht.sh/[язык]/weirdness


Посмотреть другой ответ


Если вас не устроил текущий ответ на ваш запрос, можете посмотреть другой:
curl cht.sh/[язык]/[запрос]/[номер ответа]


И что, с помощью одной утилиты можно выучить основы языка?


$ curl cht.sh/[язык]/:learn


Заключение


В общем-то, всё. Возможно, кто-то уже знает о «cht.sh» и использует, но на русском я не нашёл нормальных материалов о нём. На GitHub есть таблица полноты «cht.sh» по языкам, ссылки на плагины для редакторов и полное руководство, если кого-то не устроило моё. Спасибо, что прочли.

Поделиться публикацией
Комментарии 36
    +3
    Зачем? Чтобы не выходя из редактора получить копипастом код решения.

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

      0
      Вообще да, копипастить плохо, если ты ещё не до конца всё понимаешь. Но что плохого, когда новичок копирует только тот код, в котором он разобрался? Да и если речь не идёт об обучении, то можно использовать сею шпаргалку как auto-complete: говоришь программе «объединить два списка» и она вставляет кусок кода, который объединяет два списка.

      Плагин «анти-копипаста» это конечно жесть, если честно :)
        +2
        Мне не нравится что пользуясь копипастой кодеры не задумываются:
        0) о соглашении о наименовании и форматировании кода текущего проекта.
        1) о повторном использовании кода
        2) что иногда можно модифицировать текущий код, для удовлетворения новой задачи.
        3) что код из примера, всё равно нужно дописывать.
        4) если кода много, он выполняет какую-то уникальную работу, при этом отлично изолирован и описан, его просто стоит подключить как отдельный юнит/библиотеку не изменяя, а не тащить в свой код копипастой.

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

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

              0
              Я могу не знать, как изящнее/идиоматичнее/производительнее сделать какую-то конкретную вещь, например, из-за того, что не очень хорошо знаком с языком — положим, новый продукт пишется на новом стеке технологий. Как итог, гугление и копипаста (естественно, с сопутствующим анализом) этой самой вещи мне поможет.
            0
            меня давно посещала мысль, что подобно соглашениям о том, как помечать файлы автоматически сгенерированного кода, необходимо иметь соглашения о том, как помечать файлы копипастного кода (в тех редких случаях, когда есть достаточное доверие к качеству кода и его способности решить задачу, и нет понимания, как код работает — к примеру, это реализация хардкорного, крайне неочевидно оптимизированного математического алгоритма, которая работает непосредственно с полями доменного объекта).
            +1
            >Вообще да, копипастить плохо

            смотря в какой среде и при каких условиях и при каком контексте. часто копипаста позволяет быстро разобраться в коде и проще его поддерживать. при этом правда модфицируемая часть уже может не быть похожей на когда то скопированную.
            так что все зависит от условий — крайне глупо гнаться за уникальностью кода, в ущерб дальнейшей поддержке, или модификации.
            +1
            Когда вы просто переписываете код со stackoverflow вместо комбинации кнопок для копирования — это тоже не особо полезно, понимание не придет. Когда человек захочет разобраться в том, как работает код, он откроет книгу или ресурс и прочитает, а когда решение надо здесь и сейчас — stackoverflow в помощь. И еще пару вещей. Иногда, те, кто только учат программирование застревают на какой-то задачке и, пытаясь решить её в течении долгого времени, теряют интерес. Поэтому как крайний случай сниппеты кода очень полезны и по ним тоже можно учится.
            +1
            У новичков проблема, как правило, с английским, на котором написаны самые качественные и лёгкие в освоении материалы на любой вкус и для любого уровня (от stackoverflow до man-pages и официальной документации ЯП, баз данных и т.п.).
            А вы свой сервис для новичков на английском сделали… Если они его выучат так, чтобы понимать вашу шпаргалку, она им будет уже не нужна.
              0
              Возможно так и есть. Сам этот сервис в обучении не использовал, он у меня как авто-завершение стоит в Sublime. Но если он такой относительно популярный (12 тысяч звёзд на GitHub), значит он кому-нибудь да пригодился.
                0
                Звёздочки на GitHub не следует оценивать как признак востребованности. Лично я звёздочки использую как лайки и как закладки — я большую часть своих звёздочек даже не установил ни разу, не то, что использовал.
                  +1
                  какое эгоистичное поведение… а люди ведь доверяют таким, как Вы. Выходит, чтобы звездочки были полезными, гитхаб должен всякие лаплассианы считать, веса проставлять, доверие, и прочие неочевидные вещи, чтобы можно было просто смотреть на звездочки
                +1

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

                0

                Есть похожая утилита только для StackOverflow: https://github.com/santinic/how2

                  0
                  «cheat.sh» тоже со StackOverflow работает. Надо будет сделать сравнение, наверное.
                    +6
                    image
                      0
                      На заметку возьму. Это самый лучший дебаггинг :)
                        +2
                        зачем картинкой то…
                          0
                          Для наглядности, наверное
                      0
                        0
                        TLDR не умеет ЯП совсем. Это очень удобная вещь для подсказки в один экран, но не ЯП.
                        +1

                        Вы знакомы с сервисом https://duckduckgo.com/?
                        Спецом для it-шников сделан)

                          +1
                          Угу, есть такое :) Когда впервые ввёл туда запрос, был удивлен режимом Q\A, когда поисковик сразу выдёргивает для тебя ответ с какого-нибудь сайта. В гугле такого нет.
                            0

                            Есть же, причем давно:


                            Заголовок спойлера

                            image

                              0
                              У меня такого нет. Не знаю, почему.
                                0
                                Не для всех запросов работает
                                  0
                                  На самом деле я протестил, и у меня такая фича есть. Но в duckduckgo она получше работает, я думаю.
                            0

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

                              +1

                              Я на него вполне успешно перешёл, очень очень редко на первой странице нет подходящего результата. По чётко сформулированным запросам, типа "nginx limit_req" "ansible module template", результат как правило будет в первой же ссылке.


                              Ну и да, основная фишка в соблюдении приватности пользователя. Кто-то говорит паранойя, кто-то — сильно развитая предусмотрительность :)

                                0

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

                            +1
                            Установил расширение для Emacs, набрал в Lookup «python 1line» и…
                            image

                            И да, у вас заявлена поддержка ivy, я использую для автодополнения helm, и там не очень удобно переходить по пунктам, которые включают в себя / (тот же python/1line) — нажав enter на пункте python/, попадаешь на страничку для просто python.

                            В общем, этот проект — хорошее дальнейшее развитие старого доброго howdoi, но ещё есть, куда расти.
                              +2
                              Современному программисту, а тем более новичку уровнем ниже junior, адово необходимо умение пользоваться поисковиком.

                              Основная суть умения пользоваться поисковиком заключается в подходящей формулировке запроса. И тут ваш сервис, к сожалению, ничем новичку не поможет.

                                0
                                Пора придумывать сервис, который будет делать переформулировку запроса. Что-нибудь с нейронной сетью, например…
                                  0
                                  Не надо, пожалуйста. И так, в зависимости от предыдущих поисков или целевой аудитории поисковика, запрос «ягуар» может вернуть автомобиль, животное и напиток. И текущей трактовкой будет загажена вся первая страница.
                                0
                                Реквестирую плагин к Eclipse! Идея понравилась весьма.

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

                                Самое читаемое