Вторник, 26.11.2024
1c всегда!
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » 2015 » Октябрь » 30 » Что такое Код? Часть -1.
16:11
Что такое Код? Часть -1.

 

 

Давайте превратимся в компьютер:

Буква

Значение

P

Хмммм…?

R

Кто-то что-то сказал?

I

Я жду…

N

[барабанит пальцами]

T

В любое время…

Space

А, “ПЕЧАТАТЬ”

{

А вот и строка!

H

Эти

E

Буквы

L

Не

L

Имеют значения

O

Ля

Space

Ля

N

Просто

E

Сохранить

R

Их

D

На

S

Будущее

}

Время строки закончилось!

Конец

Время начать работать.

Если поставить горизонтально буквы в первой колонке, то получится фраза PRINT {HELLO NERDS} (НАПЕЧАТАТЬ ПРИВЕТ ЗАУЧКИ – Примечание переводчика).

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

sec1_tree

Древовидная структура является приятным методом думать об окружающем мире. Ваша действующая память разделена на разделы, которые в свою очередь состоят из абзацев. Похоже на дерево, не так ли? Ваша программа электронной почты включает в себя послания, в которых предусмотрены предметные строки и адреса. Дерево? Конечно. Ваше любимое программное обеспечение состоит из линейки меню с отдельными пунктами, которые разбиты на подпункты. Дерево? Естественно. Сплошной праздник древонасаждения!

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

sec1_tree2

(Root – корень, Branch – ветвь, Leaf – листок)

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

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

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

Неужели именно эту процедуру мы выполняем с отдельными буквами, компилируя программу в сборку ненастоящего языка для того, чтобы несуществующий компьютер смог вывести на монитор поочередно каждую букву в отдельности? Аналогичный принцип применяется к каждому пикселю на вашем дисплее, каждой частоте, закодированной на ваших файлах в формате МР3 и каждому виртуальному кубику в компьютерной игре Minecraft. Вычислительная обработка данных трактует человеческий язык, как произвольный набор символов в определенной последовательности. Таким же образом она «воспринимает» музыку, изображение и кинофильмы.

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

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

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

«Алгоритм» – это слово, которое придумали журналисты, чтобы казаться умными во время обсуждения вопросов, связанных с разными технологиями. В их среде популярны такие словосочетания, как «алгоритм Facebook» или «алгоритм Google», что по сути своей неправильно. Ибо речь идет о «программном обеспечении».

Алгоритмам не нужны компьютеры, поскольку они решают возникшую проблему. Самому известному алгоритму даже присваивается имя. Например, алгоритм Дейкстра, названный в честь ученого-компьютерщика Эдсгера Дейкстры (Edsger Dijkstra), определяет кратчайший путь в диаграмме. Кстати, диаграмма означает не:sec1_graph1А скорее:

sec1_graph2

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

Многие алгоритмы имеют свои страницы в Википедии. Вы можете потратить несколько дней, копаясь в них с восхищением. Например, алгоритм Евклида, это алгоритм нахождения наибольшего общего делителя пары целых чисел. Давайте возьмем, скажем, 16 и 12. Разделим первое число на второе. Если есть остаток (в нашем случае это 4), нужно разделить 16 на остаток 4 и в результате получим 4 без остатка. Таким образом, мы закончили, и наибольшим общим делителем будет 4. Теперь переведите все это в машинный код, и можно закрывать лавочку.

В Сети есть сайт под названием Rosetta Code, который демонстрирует различные алгоритмы на разных языках. Страница «Алгоритм Евклида» – просто великолепна. Некоторые примеры подозрительно длинные и сложные для понимания, а некоторые – сплошная поэзия нонсенса в миниатюре. Как, например, следующий на языке Forth:

Знімок екрана 2015-10-27 о 23.54.13

Прочитайте его громко, желательно для друзей. Язык Forth основан на концепции стека (участка компьютерной памяти для временного хранения информации, устроенного по принципу «последний вошёл – первый вышел»), который представляет собой специальную структуру данных. Вы создаете «слова», которые формируют язык по вашему усмотрению. PostScript, язык лазерных принтеров появился после Forth, но очень похож на него. Обратите внимание, насколько похожим является код, для этого вставьте или уберите фигурные скобки:

Знімок екрана 2015-10-27 о 23.55.28

А это алгоритм Евклида на языке PostScript. Допускаю, что он выглядит забавно только для меня. А это он же, но на языке Python. (см. Rosetta Code):

Знімок екрана 2015-10-27 о 23.56.36

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

Дейкстра распространил среди глобального компьютерного сообщества превосходный и побуждающий набор 1318 памяток, которые известны, как EWD, что является аббревиатурой полного имени знаменитого ученого Edsger Wybe Dijkstra. Большинство из этих работ были написаны вручную.

Дейкстра распространил среди глобального компьютерного сообщества превосходный и побуждающий набор 1318 памяток, которые известны, как EWD, что является аббревиатурой полного имени знаменитого ученого Edsger Wybe Dijkstra. Большинство из этих работ были написаны вручную.

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

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

Большая часть этой науки изучает эффективность алгоритмов и как долго ими можно управлять. Компьютеры являются быстрыми машинами, однако они способны «увязнуть», например, когда пытаются найти кратчайший путь между двумя точками на большой карте. Такие компании, как Google, Facebook, и Twitter, созданные на вершине фундаментальной компьютерной науки и уделяют огромное внимание эффективности, поскольку их пользователи выполняют поставленные задачи (поиск, обновление статуса, твит) огромное количество раз. Таким образом, овчинка стоит выделки, чтобы найти превосходных ученых компьютерщиков, многие из которых имеют звания докторов и знают, где «спрятана» эффективность.

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

Самый сложный момент программирования – это обойти вещи, которые не поддаются вычислению в поиске возможности разбивки невозможных задач на маленькие решаемые составляющие, а затем сформировать впечатление, что компьютер создает нечто, чего он фактически не делает. Например, симуляцию человеческого разговора. Эта функция известна, как «изучение искусственного интеллекта», однако, в настоящий момент более распространенным является название «компьютерное обучение» или «глубинный анализ данных». Когда вы говорите с Siri или Cortana, и они вам отвечают, это не означает, что подобные голосовые помощники понимают вас. Они конвертируют ваши слова в текст, разбивают его на символы, затем сравнивают их на соответствие с символами в своей базе данных терминов и выдают ответ. Во время процесса задействованы тонны алгоритмов, поэтому вполне возможно, что компьютер может фальсифицировать процедуру общения.

Язык программирования выполняет две работы. Он упаковывает огромное число алгоритмов, поэтому они могут быть использованы повторно. Поэтому вам не нужно искать алгоритм квадратного корня (или гениального программиста) каждый раз, когда возникает необходимость извлечь квадратный корень. А это, в свою очередь, облегчает работу программистов на завершающем этапе с новыми алгоритмами и превращает в рутину функции повторного использования. Принцип DRY или Don’t Repeat Yourself (Не повторяйся) является одним из неофициальных догматов программирования. Это означает, что вам необходимо назвать вещи один раз, сделать их один раз, создать функцию один раз и позволить компьютеру повториться. Такой подход не всегда срабатывает. Программисты постоянно повторяются. Я сотни раз писал некоторые виды кодов. Вот почему DRY служит только основой.

Достаточно разговоров. Давайте займемся кодированием!

Просмотров: 441 | Добавил: pasjunja | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск
Календарь
«  Октябрь 2015  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031
Архив записей
Друзья сайта
  • Создать сайт
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Все проекты компании
  • Copyright MyCorp © 2024
    Создать бесплатный сайт с uCoz