Привет, Хабр!

Задача нашего образовательного проекта Хекслет — помочь тем, кто решил стать программистом. Но очень часто людям требуется лишь короткий ликбез, простое объяснение основных понятий «на пальцах». Например, современным журналистам, не имеющим прямого отношения к информационным технологиям. Сегодня мы публикуем перевод статьи британского журналиста Пола Брэдшоу, в которой даются простые объяснения десяти важным концепциям мира кодинга.


1. Переменные (Variables)



Переменные — это что-то вроде контейнеров, которые в разное время могут вмещать различные предметы. Фото Вольфганга Лоньена.

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

Примеры:
  • Вы можете создать переменную, чтобы хранить чей-то возраст, и назвать её «age»
  • Вы можете создать переменную, чтобы хранить имя пользователя, и назвать её «username»
  • Вы можете создать переменную, чтобы посчитать, как часто что-то происходит, и назвать её «counter»
  • Вы можете создать переменную, чтобы хранить расположение какого-либо элемента, и назвать её «index»

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

Так же переменные могут объединяться: возраст (одна переменная) может быть подсчитан на основе даты рождения (другая переменная).

2. Strings (строки), integers (целые числа) и другой жаргон для типов данных



String — это набор символов. Фото Кейт Тер Хаар.

Бывают разные типы переменных, и от этого зависит, что с ними можно делать. Привычные типы переменных:
  • Числа — integers (целые числа) и floats (те, которые со знаками после запятой)
  • Текст — обычно называется strings (строки) и выделяется кавычками, например «17 августа»
  • Lists и arrays (списки и массивы) — объяснено ниже — обычно можно распознать по скобкам и запятым, как тут: [“Manchester”, “Glasgow”, “Paris”]
  • Dictionaries или dicts (словари) — объяснено ниже — можно распознать по фигурным скобкам, двоеточиям и запятым, например: {“Age”: 23, “Name”: “Jane”}

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

В таких случаях написание кода включает в себя указание поступать с «7» как с числом, а не как со строкой, или даже преобразовать строку «seven» в её числовой эквивалент. Компьютеры хорошо справляются с повторяющимися задачами, но нуждаются в точной инструкции для каждой задачи.

3. .classes, #ids и selectors



Селекторы, такие как .nav, позволяют вам «захватывать» и контролировать элементы на веб-странице. Фото Питера Флетчера

HTML код использует class= и id= чтобы определить конкретные типы содержимого и сделать возможным их изменение с помощью другого кода. Например, на веб-странице у вас может быть подобный код:

<div class=”article”>
<ul class=”nav”>
<h2 class=”subhead”>
<div id=”footer”>


Есть как минимум три случая, когда эти классы и ID могут быть практичными:
  1. Они могут быть оформлены стилями с использованием CSS
  2. Они могут быть изменены при помощи Javascript и других языков
  3. Их можно распознать и обработать с помощью языков вроде Python, Ruby и PHP

В большинстве случаев всё это делается с помощью селекторов (selectors). Эти селекторы обозначают class с точкой и id с решёткой, вроде такого:

.article (for class=”article”)
#footer (for id=”footer”)


4. Функции, методы



Функции и методы подобны заголовкам рецептов. Вам нужно только добавить ингредиенты. Фото Мелиссы Уиз.

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

  • len в некоторых языках означает «измерь длину того элемента, который я указываю»
  • split в некоторых языках означает «раздели этот элемент на один или на несколько кусков, основываясь на критерии, который я указываю»

Для этого функции необходим ингредиент, называемый аргументом или параметром (объяснено ниже), и метод прикреплен к ингредиенту, называемому объектом (также объяснено ниже).

Различие между методами и функциями очень нечёткое и не стоит разъяснений в этой статье, особенно, если учесть, что их использование немного варьируется в разных языках. Но самое главное — вы можете создавать собственные функции в своём коде. Это может пригодиться, когда вам нужно выполнить какое-то действие несколько раз.

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

Третий тип функций доступен только при использовании соответствующей библиотеки — смотрите ниже.

5. Аргументы или параметры



Аргументы это ингредиенты для ваших рецептов. Фото Энн.

Функциям и методам (объяснено ниже) нужны ингредиенты для работы, каждый называется аргументом или параметром.
Они появляются в круглых скобках, следуя за именем функции, как в случае с:

len ("Paul")
len (myname)

Функция len, например, даёт вам длину любого аргумента, заключённого в скобки. В первом примере — это строка (определяется кавычками) «Paul». Результат в данном случае будет 4 (4 символа). Во втором примере аргумент это переменная myname, поэтому результат будет зависеть от того, что содержится в переменной на тот момент. Если myname в данный момент — «Bradshaw», результатом будет 8 (8 символов).

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

Документация для функции или метода должна содержать больше информации о том, что каждый из них конкретно делает и какие аргументы принимает. Аргументы обычно называются параметрами, но и аргумент, и параметр означают одно и то же — просто один термин используется в общем смысле («У этой функции один параметр — объект для измерения»), а другой для конкретного случая (Принятие аргумента «Paul»).

Некоторые функции и методы используют более одного параметра, они отделяются запятыми. А некоторые параметры опциональны. Иногда круглые скобки ставятся слева пустыми, как тут: ready(). Ещё раз повторю, это должно быть описано в документации.

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

6. Библиотеки



Библиотеки подобны книгам с рецептами. Разные библиотеки решают разные задачи — так же, как существуют книги для праздничных рецептов, пудингов и прочего. Фото Vintage Sailor

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

Если у вас возникла проблема, вероятно, кто-то уже создал библиотеку для её решения: рисование карты, конвертация документа, построение графиков данных или генерация интерактивных таблиц, анимация или создание эффектов.

Поэтому, вот ещё один полезный совет: погуглить свою задачу, язык, который вы используете или изучаете, и термин «библиотека», например «javascript mapping library».

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

7. Lists/arrays (списки/массивы) и dictionaries/dicts (словари)



Списки подобны очереди из людей: вы можете получать доступ к объектам, в соответствии с их расположением. Фото Шона Дреллингера

Списки и словари — это особые типы информации, которые могут быть как неизмеримо полезны в программировании, так и вводить в заблуждение тех, кто к ним не привык.

Терминология различная: в некоторых языках программирования списки называются arrays (массивы), а словари называются dicts. Я предпочитаю «lists» и «dictionaries», потому что их легко понять.

Список или массив — это просто список объектов, который выглядит вот так:

["Asia", "Africa", "Europe"]

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

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


Словарь содержит и слова и значения. Фото Танакаху.

Dictionaries (словари) в этом похожи, они также выглядят как список, но с ключевым отличием: это списки пар.
Каждая пара имеет ярлык (он называется key) и value (значение), объединённые двоеточием, например:

"Age": 24

Термин словарь — практичен: представляйте его как набор слов с соответствующим определением. Но вы можете его представить и как заголовки столбцов (age, name, location) и значений (18, Sarah, Chicago).

Каждая пара затем разделена запятыми и целиком помещена в список, заключённый в фигурные скобки:

{"Age" : 23, "Name": "Jane"}

Это делает их особенно практичными для хранения данных, у которых более одного ярлыка. Например, вы можете хранить список возрастов, как простой список. Но если вам захочется соединить каждый из возрастов с именем или местонахождением, вам потребуется словарь.
Именно такая логика у формата данных JSON, формата используемого в ряде API (смотрите ниже).


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

8. Loops? (циклы)?—?for, each, while




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

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

Примеры:
  • Взять каждую комбинацию координат из списка и разместить ее на карте
  • Взять каждое число из списка и нарисовать колонку соответствующего размера в гистограмме
  • Взять каждый элемент списка (например, код ID) и добавить его к частичному URL, чтобы сформировать полный URL
  • Взять каждый URL из списка и запустить код, чтобы собрать оттуда информацию
  • Проигрывать анимацию пока чьё-то количество очков не станет ниже или выше конкретного значения

Что может смутить в цикле, так это то, как он создаёт переменные, и как часто значение такой переменной меняется при каждом запуске цикла. Например:

numberlist = [1,2,3,4]
for num in numberlist:
    print num

В этом коде «num» записана как новая переменная, чтобы хранить значение, пока список выполняется. Eе значения меняются: 1, 2, 3 и 4 до того, как цикл закончится (все значения в списке использованы).

9. Objects (объекты)



Детали Lego можно использовать только с другими деталями Lego. Они не сочетаются с деталями Duplo. Логично? Фото Cross-stitch Ninja

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

Когда термину «объект» предшествует другой термин, это может особенно раздражать. Вам, возможно, встречались «jQuery object» или «lxml object».

Когда объекты описываются таким способом, в основном это значит, что рассматриваемый объект может управляться или использоваться кодом из этой библиотеки:

jQuery-методы могут использоваться для «jQuery object»; lxml-методы могут использоваться для «lxml object». Как они стали такими объектами? Обычно в коде есть момент, когда переменная превращается в «jQuery object», «lxml object» и так далее — почитайте об этом самостоятельно, найдите материалы или комментарии к коду, чтобы разобраться в этом.

10. API



Использовать API означает задавать много вопросов и получать в ответ данные. Фото Марселло Мария Перонгини

API это Интерфейс Прикладного Программирования, что значит «способ задавать вопросы и получать ответы».

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

Программирование часто фокусируется на интерпретации полученной информации, например, в виде карты, графика или диаграммы. Многие приложения основываются на API. Приложения Twitter, например, получают ответы на вопрос «каких людей я фолловлю?» из Twitter API. Разные приложения показывают полученные данные различными способами, основываясь на собственном коде, но исходные данные (твиты) — одинаковы.

Типичные API для журналистского использования включают:
  • API социальных сетей (что люди говорят/чем делятся в определённом месте/с определённым запросом?)
  • Новостные API (какой контент опубликован конкретным журналистом/в конкретной категории?)
  • Политические API (как голосовал конкретный политик? Какой из избирательных округов представляет конкретный человек?)
  • Территориальные API (какая широта и долгота у этого почтового индекса? Какая власть в данной местности?)
  • Криминальные API (какие преступления были совершены вблизи этой местности в этот день? Какие последствия?)

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

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

Вопрос к API часто принимает вид URL. Например, URL, запрашивающий информацию у API британской полиции о преступлениях, совершённых за конкретный месяц на конкретных широте и долготе, будет выглядеть так: http://data.police.uk/api/crimes-at-location?date=2012-02&lat=52.629729&lng=-1.131592

Заметьте, широта и долгота указаны в URL, который сформирован на основании руководства в документации.

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

Перевод: Наталия Басс

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


  1. saboteur_kiev
    21.07.2015 15:20
    +4

    Идея хорошая, реализация (или может быть перевод не очень). Я несколько раз сталкивался с журналистами в своей жизни. Если журналист с головой, он и так все это знает, ибо наполовину айтишник.
    Если без головы, то уже на третьем пункте (хорошо, если не на втором), на фразе «Селекторы, такие как .nav, позволяют вам «захватывать» и контролировать элементы на веб-странице.» ему уже станет скучно.

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


  1. psylosss
    21.07.2015 16:11
    +3

    Моя попытка:

    Программирование — это способ заставить делать компьютер то что нужно программисту. Для этого программист использует некоторые специальные понятия:
    1. Переменные. Это такая штука, которая хранит в себе что-то (это «что-то» называется значением переменной). Действительно, можно представить её в виде коробки или корзинки, куда можно класть разные вещи (значения).
    2. Типы данных. Коробки и корзинки бывают разные. Есть корзинки, которые вмещают только числа, есть коробки, которые вмещают только текст, есть универсальные ящики, которым всё равно что хранить. Тип данных — это описание того, что может храниться в переменной. Например, integer — это описание того, что в этой корзинке могут быть только целые числа.
    3. Селекторы. Это понятие относится к области программирования сайтов. Когда вы открываете какой-нибудь сайт и хотите сказать компьютеру, что собираетесь иметь дело вооон с той кнопочкой, то вам потребуется селектор. Селектор — это указание компьютеру какой (или какие) штучки на странице сайта вы имеете в виду.
    4. Функции и методы. Это просто кусочек программы, у которого есть название. Этот кусочек программы можно выполнять несколько раз используя разные аргументы (см. п. 5). Больше не забивайте себе голову.
    5. Аргументы и параметры. Если вы — компьютер, и вы идёте в магазин, то вы выполняете функцию goToShop. А список того, что нужно купить (products) — это аргумент этой функции. Вы можете ходить в магазин несколько раз (сегодня, завтра, на следующей неделе) и каждый раз, исполняя эту функцию, вы будете получать новые аргументы.
    6. Библиотеки. Это лучший способ работать меньше и получать больше. Используйте чужой труд, чтобы достичь результатов. Библиотека — это программа, которая была написана ранее, и которую можно использовать для того чтобы быстрее написать вашу собственную программу.
    7. Списки и словари. Список — это такая большая корзинка, в которую можно накидать несколько вещей. Некоторые корзинки принципиально требуют чтобы все вещи были однородные (только гвозди), а некоторым корзинкам пофиг. Это хай-тек корзинка с экранчиком, на которым отображается, сколько гвоздей в ней лежит. А ещё есть кнопка «Дай гвоздь». Если нажать, из корзинки вывалится какой-нибудь гвоздь. Словарь — это корзинка, которая похожа на список, но все гвозди лежат в индивидуальных подписанных ячейках («Первый гвоздь», «Любимый гвоздь», «Кривая хрень»). И чтобы что-то достать из словаря, надо сказать из какой именно ячейки достать эту штуку.
    8. Циклы. Это способ повторить одно и то же действие несколько раз. Например, «7 раз отмерь». Ещё под циклом понимают способ перебрать весь список или словарь («Давайте мне из этой корзинки по одному гвоздю и говорите в какой ячейке был этот гвоздь»).
    9. Объекты. Не забивайте себе голову. Я не смогу объяснить это вам. Объектом может быть всё что угодно, в зависимости от должности того кто произносит это слово.
    10. API. Это когда ты не знаешь как устроена программа, но она разрешает тебе задавать определённые вопросы и получать на них ответы. Формат вопросов и ответов строго определён заранее. Например, на вопрос «Сколько времени?» необходимо уточнить в каком городе. В ответ API выдаст «17:20:41» (именно так, а не «почти пол шестого вечера»).


    1. alkresin
      21.07.2015 16:37

      Отлично. Гораздо лучше, чем у автора.


    1. javax
      21.07.2015 17:29

      Дочке я именно как «коробочки» объяснял.
      Какой журналист поймет «Вкратце, это способ сослаться на что-то так, чтобы можно было использовать эту ссылку в строке кода.» ???


  1. slookin
    21.07.2015 16:19
    +4

    >>Детали Lego можно использовать только с другими деталями Lego. Они не сочетаются с деталями Duplo. Логично?
    Ложь. en.wikipedia.org/wiki/Lego_Duplo


  1. Alexeyslav
    21.07.2015 16:38

    Очень всё исковеркано…
    Нет такой концепции как record(запись) она по-моему используется в мире чаще всего.
    Так же неправильно раскрыта концепция API.
    Она не просто позволяет задать вопрос и получить ответ, ведь этим занимается функция!
    Концепция API пошла несколько дальше функции, да собственно это обертка над функцией которая гарантирует что способ задания вопросов и вид ответов будут всегда одинаковые независимо от внутренней реализации функции выполняющей работу по заданному вопросу.
    Т.е. API это как внешний интерфейс телефонного аппарата — сколько моделей их существует и работающих на разных принципах(проводные, беспроводные, и т.д.) но у них один общий интерфейс — цифровая клавиатура набрав на которой номер вы соединитесь с нужным абонентом. Вот эта клавиатура, слуховое и разговорное отверстия и есть API — какой бы конструкции телефон не взяли у всех есть эти атрибуты.

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