Объяснение программирования с помощью шуток для программистов: полный перевод сайта Eat the World

eattheworld

Мы сделали для вас перевод сайта Eat the World, который появился в Сети первого апреля. Его предназначение — объяснить людям, далеким от IT, что такое программирование, через разбор шуток для программистов. Ресурс не только проводит ликбез для «гуманитариев» — начинающим разработчикам он поможет глубже понять суть профессии, а опытным напомнит о всех её прелестях. В любом случае, кем бы вы ни были, вы скорее всего найдёте, над чем посмеяться.

Все шутки располагаются на отдельных страницах и разделены на три основные темы.

Часть I. «Ху из ху» в мире IT

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

— Илон Маск

Чем занимаются программисты

— Сколько программистов нужно, чтобы поменять лампочку?

— Ни одного, это проблемы на стороне аппаратного обеспечения.

Программисты занимаются разработкой программного обеспечения. Обслуживание и поддержка правильной работы оборудования — задача системного администратора.

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


Муза любит опаздывать

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

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


Думать вредно

Пользовательский интерфейс как шутка — если тебе приходится давать пояснения, он не так уж хорош.

Пользовательский интерфейс (UI) — это поле взаимодействия пользователя с ПО (например, форма регистрации на сайте). Хорошо спроектированный UI должен быть максимально интуитивным и понятным. Известный специалист Стив Круг говорит, что основной принцип при создании интерфейсов звучит как «не заставляй меня думать».

У нас есть статьи с советами по улучшению интерфейса: часть 1 и часть 2.


Всегда онлайн

Ubuntu — древнее африканское слово, которое означает «я не могу настроить Debian».

Ubuntu и Debian — дистрибутивы Linux, разрабатываемые сообществом Open Source. Ubuntu проще в настройке и использовании, поэтому больше подходит для новичков. Слово «ubuntu» действительно африканское и переводится как «человечность».

Linux-подобными системами часто пользуются системные администраторы при работе с серверами.


Организованная коллекция данных

SQL-запрос заходит в бар, подходит к двум столам и спрашивает: «можно присоединиться?»

Язык запросов SQL (Structured Query Language) используется для создания и модификации баз данных (БД), а также для размещения данных внутри баз и последующего к ним обращения. БД структурированы в виде таблиц, содержащих релевантные данные, которые можно, например, объединить с помощью SQL-запроса.

Предлагаем разобраться в основных моделях баз данных и сравнить популярные системы управления: SQLite, MySQL и PostgreSQL.


Если вы не захотите тестировать продукт, делать это не захотят и ваши пользователи

— Сколько тестировщиков нужно, чтобы поменять лампочку?

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

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

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


Научитесь выбирать слова

SEO-специалист заходит в бар, бары, кабак, вечеринка, отдых, ночной клуб, мини-бар, барный стул, таверна, паб, пиво.

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

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


И это пройдёт

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

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

Часть 2. Про будни программиста

Программное обеспечение пожирает мир.

 Марк Андрессен

Первые слова

Начинающий программист заходит в бар, оглядывается и говорит: «Hello, World!»

В книгах и руководствах по программированию распространённая практика — использовать вывод фразы «Hello, World!» для демонстрации базовых концепций языка.

На сайте Hello World Quiz размещена викторина — попробуйте угадать, на каком языке программирования написан скрипт, выводящий привет миру.


Выбор языка программирования

— Тук-тук.

— Кто там?

Очень длинная пауза…

— Java.

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

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

Популярные ЯП в зависимости от целей разработки:

  • веб: Python, PHP, Ruby, JavaScript;
  • мобильные приложения под iOS (iPhone, iPad): Objective-C, Swift;
  • мобильные приложения под Android: Java;
  • операционные системы: C, C++;
  • игры: C++.

Код читают не компьютеры, а люди

Когда я это писал, только я и бог знали, что я делаю. Сейчас только бог.

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

Microsoft делится примером: на Windows XP ещё можно было найти игру «Пинбол 3D», но в более поздние версии она включена не была именно потому, что код не отличался качеством и не сопровождался необходимой документацией. Программисты сами не могли понять, каким образом реализована игра, и в итоге отнять её у пользователей оказалось проще, чем портировать.

Полезные статьи про написание качественного кода: 16 лучших практик, 15 правил, оформление кода на C и на C++, как писать хороший код без обилия комментариев.


От сортировки чисел до искусственного интеллекта

Программист использует слово «алгоритм», когда не хочет объяснять, что он сделал.

Алгоритм — это чёткая инструкция с определённым порядком действий. Результат грамотно реализованного алгоритма всегда будет одним и тем же.

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


Используйте логику

Муж отправил жену-программиста в магазин и сказал: «возьми батон хлеба. Если там будут яйца, возьми десяток». Жена возвращается с десятью батонами и говорит: «там были яйца».

Ключевое слово в этой шутке — «если…». Оно намекает на оператор if, условную инструкцию, которая присутствует в большинстве языков программирования.

Вот пример алгоритма по завариванию чая с использованием этой инструкции (на естественном языке):

  1. Если чайник не содержит воды, наполнить чайник.
  2. Подключить чайник к питанию и включить.
  3. Если чайник для заварки не пуст, опустошить чайник для заварки.
  4. Поместить чайные листья в чайник для заварки.
  5. Если вода в чайнике не кипит, перейти к шагу 5.
  6. Выключить чайник.
  7. Налить воду из чайника в чайник для заварки.

Меньше велосипедов

У Чака Норриса есть любимый шаблон проектирования — это «Удар Чака Норриса Ногой с Разворота».

Шаблоны проектирования, или паттерны — проверенные способы решения часто встречающихся проблем. Это не фрагменты кода, которые можно скопипастить в свой проект, а подробное объяснение методов.

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


Зачем тебе два билета в кино, если ты идешь туда один

Оптимист скажет, что стакан наполовину полон, пессимист — что он наполовину пуст. Инженер скажет, что размер стакана в два раза больше, чем нужно.

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

Сейчас запоминающие устройства стоят достаточно дёшево, а центральные процессоры отличаются более высокой производительностью в сравнении с теми, которые создавались буквально несколько лет назад. Было посчитано, что сборка iPhone в 1991 году стоила бы порядка $ 3,5 миллионов при стоимости RAM около $ 1,44 миллионов.


Умей работать в команде

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

Git — популярная система контроля версий (VCS). Одна из возможностей, которые она предоставляет, — хранение локальной копии и создание своей версии репозитория.

Использование VCS обеспечивает удобное взаимодействие между членами команды, а также помогает упорядочить код и другие необходимые материалы. Если вы хотите научиться работать с VCS, прочитайте наше руководство для начинающих и посмотрите подборку из 10 ресурсов для изучения и использования Git.


Среда разработки

Прим. перев. Оригинал с пояснениями

Why programmers like UNIX? unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep.

UNIX — операционная система, разработанная в Bell Labs в 1969 году. Слова выше — это часть команд, с которыми можно обращаться к ОС. Например, unzip используется для распаковки файлов. Шутка построена на не очень приличной непереводимой игре слов.

Эффективность ОС зависит от технологий, которые используются в конкретном проекте — например, для создания iOS-приложений больше подойдёт macOS. При работе над общим проектом также большое значение имеет выбор интегрированной среды разработки (IDE), системы контроля версий и инструментов для менеджмента (например, Jira).


Как решать проблемы

;

Чемпион по игре в прятки.

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

Среду разработки стоит выбирать исходя из используемой технологии — например, для создания iOS-приложений органичным выбором будет XCode. Кроме того, в Сети есть много полезных ресурсов, которые помогут решить возникающие проблемы. Один из самых популярных — Stack Overflow.


Что поставлено на кон

Свинья идёт по дороге. Курица смотрит на неё и говорит: «А давай откроем ресторан!» Свинья смотрит на курицу и отвечает: «Хорошая идея, и как ты хочешь его назвать?» Курица думает и говорит: «Почему бы не назвать „Яичница с беконом“?». «Так не пойдёт, — отвечает свинья, — ведь тогда мне придётся полностью посвятить себя проекту, а ты будешь вовлечена только частично».

Как объясняет Википедия, по методике Scrum в производственном процессе есть определённые роли, разбитые на 2 группы «свиней» и «кур». Свиньи от начала до конца создают продукт, тогда как куры в нём заинтересованы, но им в целом всё равно, будет проект удачным или нет — на них это мало отразится. Требования, пожелания, идеи и влияние кур принимаются во внимание, но им не разрешают непосредственно включаться в ход скрам-проекта.

К «свиньям» относятся владелец продукта (Product Owner), скрам-мастер (Scrum Master) и команда разработки (Development Team). Дополнительные роли «кур» занимают пользователи (Users), клиенты и продавцы (Stakeholders), управляющие (Managers) и эксперты-консультанты (Consulting Experts).


Мудрость толпы

Блондинка, алкоголик и инопланетянин заходят в бар, но это бар Microsoft, поэтому он закрыт.

В 90-х и начале 2000-х Microsoft была закрытой компанией и, как многие крупные корпорации, строго охраняла секреты разработки. В противовес такому подходу появилось движение Open Source, адепты которого создают проекты с открытым исходным кодом.

Сейчас ситуация меняется и Microsoft создаёт некоторые проекты под флагом открытой разработки. Другие крупные компании тоже поддерживают движение — одним из самых активных участников является Google, которая недавно собрала все свои open source проекты под одной http-крышей.

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

У нас есть серия подборок с лучшими проектами, в которых стоит поучаствовать, чтобы примкнуть к движению Open Source: на JavaScript, Java и C#, C и C++, Python.


Главное — не терять голову

Люди делятся на два типа: «я делаю бэкапы» и «я сделаю бэкапы».

Бэкап — это резервное копирование данных, которое в аварийном случае может помочь восстановить ПО. Делать бэкапы — очень хорошая практика.

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

Чтобы не терять ценные данные, создавайте бэкапы как можно чаще и проверяйте, что система сохранения работает корректно.

Часть 3. Про эти ваши компуктеры

Компьютеры бесполезны. Они могут только давать ответы.

— Пабло Пикассо

Как мы общаемся с компьютерами

На свете существует 10 типов людей: те, кто понимает двоичную систему счисления, и те, кто не понимает.

Классическая бородатая шутка. В двоичной системе есть всего две цифры: 0 и 1. Число 10 — это двоичное представление десятичного числа 2, поэтому в шутке выше упомянуты два типа людей.

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


Представление информации

Прим. перев. Оригинал с пояснениями

A guy walks into a bar and asks for 1.4 root beers. The bartender says «I’ll have to charge you extra, that’s a root beer float».

The guy says «In that case, better make it a double».

Компьютеры используют бинарный код для хранения в памяти потока нулей и единиц. Задача программиста — объяснить машине, как этот поток интерпретировать. К примеру, код 1000001 может хранить букву А или целое число 65.

Попробуем разобраться в шутке. И float, и double — формы представления данных «с плавающей точкой», они используются в компьютере для хранения дробных чисел. Парень заходит в бар и просит налить 1,4 корневого пива (root beer). Бармен ему говорит, что возьмёт с него больше денег, так как он просит шипучку (root beer float). «Тогда лучше налейте двойную порцию (double)» — отвечает парень.

Тип double часто является лучшим выбором в сравнении с float, так как он обеспечивает большую точность (но и занимает больше памяти). Чтобы больше узнать о типах данных, прочитайте нашу статью про статическую и динамическую типизацию.


Ты для меня всегда будешь на первом месте

В компьютерных науках есть две сложности: инвалидация кэша, именование и ошибка на единицу.

Ошибка на единицу, или ошибка неучтённой единицы (off-by-one error) часто встречается, когда программист ошибается, отсчитывая начало последовательности с единицы, как это обычно делают люди. Проблема в том, что индексация массивов во многих языках программирования начинается с нуля, как в шутке выше: 0, 1, 2.

Здесь обыграна известная цитата Фила Карлтона: «В компьютерных науках есть две сложности: инвалидация кэша и именование» («There are only two hard things in Computer Science: cache invalidation and naming things»).


Знай концепции, которые используешь

— Существует ли объектно-ориентированный способ стать богатым?

— Да, наследование.

В 1994 году Стив Джобс давал интервью журналу The Rolling Stone.

Джефф Гуделл: Объясните, пожалуйста, что такое объектно-ориентированный подход, используя простые термины.

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

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

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

Подробнее о принципах ООП можно прочитать в нашей вводной статье.


Рекурсия

Возможно, вы имели в виду: рекурсия.

Если ввести в поиске Google запрос «рекурсия», он взамен предложит вам вывести результаты по тому же самому запросу. Это не ошибка, а шутка, обыгрывающая понятие: рекурсия определяет функцию, которая способна вызывать сама себя.


В поисках соответствий

Вопрос: что одно регулярное выражение говорит другому?

Ответ: .+

Регулярные выражения (Regular Expressions, RegExp) — это формальный язык, который используется для работы с подстроками: с помощью него можно осуществлять, например, поиск и проверку на соответствие шаблону.

Шаблон .+ означает «что угодно», а точнее «любой символ (.) один или более раз (+)».

Новичкам предлагаем прочитать вводную статью по регулярным выражениям.


Кто стоит на защите данных

Заходит хеш-сумма в бар и говорит: «Будьте добры соль».

Одно из базовых правил безопасности — не хранить пароли в незашифрованном виде.

Хеш-сумма (хеш, хеш-код) — это строка фиксированной длины (чаще всего в шестнадцатеричном представлении), в которую преобразовывается текстовый пароль. Например, 7DD987F846400079F4B03C058365A4869047B4A0. Хеши хранятся в базе данных. Имея в распоряжении только хеш, злоумышленник практически никогда не может воспроизвести пароль, установленный пользователем. Хеши используются для идентификации, поиска данных и проверки их на целостность.

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


Преодолевая языковой барьер

Прим. перев. Оригинал с пояснениями

Q: According to Sigmund Freud, what comes between fear and sex?

A: Fünf.

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

В наши дни при создании ПО в подавляющем большинстве случаев нужно ориентироваться на клиентов по всему миру, следовательно, делать его доступным на нескольких языках. Кодировки обычно создаются под конкретный язык или группу языков. Например, Windows-1250 используется для представления текстов, написанных на языках Центральной Европы. Хорошей практикой является использование кодировок, покрывающих большее количество символов, алфавитов и иконок — например, UTF-8.


Предлагаем пройти тест, чтобы узнать, какой язык программирования вам подходит, и начать его изучать 🙂

Источник: Eat the World