Сандо Сандо
ноябрь 2016.
6335

Что такое программирование: как символы превращаются в сайты и программы, чем различаются языки?

Ответить
Ответить
Комментировать
0
Подписаться
18
11 ответов
Поделиться
Ответ партнёра TheQuestion

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

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

Почему существуют разные языки? Потому что, во-первых, они прошли разный путь развития, а во-вторых — используются для разных вещей. Какой-то язык позволит упростить код, какой-то сделали специально для написания интернет-страниц, на каком-то проще писать игры.

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

Нам кажется, чтобы программировать, нужно долго и сложно учиться, быть очень внимательным к деталям во время написания кода. Но сейчас каждый может попробовать себя в роли разработчика — даже 6-летний ребенок на простом языке программирования Scratch может сделать свою собственную игру.

Попробовать можно как дома, так и на разных специализированных курсах. В Кодабре, например, есть курсы для детей и подростков от 6 до 17 лет. На них ребята могут как сделать первые шаги в программировании, так и начать осваивать профессиональные инструменты разработки. В итоге курса каждый ребенок гарантировано создаст свой проект.

Начать знакомство с миром программирования можно на фестивале Кодабры Digital Fest for kids and teens, который в этом году пройдет в московской Хорошколе 10-11 ноября. На фестивале будет представлено более 240 мастер-классов, на которых ребята смогут сделать свои первые IT-проекты. Для гостей фестиваля выступят спикеры из ведущих компаний индустрии: Рамблер, Mail.ru, Лаборатории Касперского и многих других. Таким образом и дети и родители смогут познакомиться с последними трендами в IT-отрасли и узнать, как стать настоящим digital-героем будущего. 

9
-6

HTML - язык разметки страниц

+4
Ответить
Прокомментировать

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

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

На практике всё немного усложняется тем, что программы чаще (не всегда) пишутся не на том языке, который понятен исполнителю. Но есть автоматизированный переводчик (компилятор), который осуществляет перевод программ из красивого текста, где слова выстроены ровными лесенками, в набор цифр. Ну представьте себе, если бы сочинялись рецепты на русском, а повара были бы, например, французами. Т.е. программисту чаще всего не нужно знать условного "французского" (инструкций микропроцессора), чтобы тем не менее программировать его работу. Чаще всего программист использует «языки высокого уровня», где формулировки команд приближены к решаемым прикладным задачам.

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

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

23
-1
Прокомментировать

Чтобы понять, как исходный код превращается в программу, нужно начать с того, как компьютер исполняет программы. Два основных компонента компьютера – это процессор и оперативная память. Процессор содержит набор инструкций и набор регистров. Для запуска программы операционная система загружает ее текст (машинный код) в оперативную память, устанавливает счетчик команд на адрес точки входа (например, в языке C это функция main), инициалзирует стек, выполняет другие подготовительные работы. После этого процессор начинает выполнение. Он считывает инструкцию, на которую указывает счетчик команд, выполняет ее, возможно записывает результат в один или несколько регистров (зависит от конкретной инструкции) и увеличивает счетчик команд. Затем повторяет эту процедуру до тех пор, пока программа не завершится. Это в двух словах.

Инструкции процессора представляют собой простейшие действия: загрузить ячейку памяти из ОЗУ в регистр (mov), сложить значения из двух регистров (add), установить счетчик команд (jmp) и т.п. Писать программы на уровне инстукций процессора (машинного кода) не то, чтобы невозможно, но в большинстве случаев экономически нецелесообразно. Такой код получается непереносимым (запустить его на процессоре с другой архитектурой будет невозможно) и совершенно нечитаемым (от слова "совсем").

Здесь на сцену выходят языки программирования высокого уровня (такие как C) и компиляторы. Компилятор – это программа, которая умеет преобразовывать текст программы, написанный на языке высокого уровня, в машинный код для определенной архитектуры и операционной системы. При компиляции, программа проходит несколько стадий:

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

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

Третий вариант, когда программа не компилируется в какой-то выходной файл, а сразу исполняется интерпретатором. К этой категории относятся, например, perl, php и многие скриптовые языки.

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

Надеюсь, смог чем-то помочь : )

6
0
Прокомментировать

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

Грубо говоря, код:
if ( a > 10 )
  do_something();

сперва превратится во что-то типа:
load r1,0x100500;
cmp $r1, 10;
call do_something
где код имеет все еще понятную форму (сможете посмотреть в блокноте:))

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

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

Что касается кода для сайтов, то тут браузер принимает html/css/js/др. файлы и начинает исполнять тот код, который там написан. Прочел <b>text</b> - нарисовал "text" жирным, ну и так далее.

Различие языков - также целая тема. Их классифицируют по специализации (общего назначения, web, для баз данных и т.д.), по уровню - низкоуровневые (как например тот самый, "промежуточный" язык), высокоуровневые (первый кусок кода из моего примера); по типу трансляции: компилируемый/интерпретируемый (не буду пояснять, сами почитаете :)); по парадигме: декларативные, императивные, логические и т.д. - это определяет своего рода стиль логических рассуждений при написании программ; Существует еще много всяких классификаций.


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

2
0
Прокомментировать
Читать ещё 6 ответов
Ответить