Урок №1. Введение в программирование

  Юрий Ворон  | 

    | 

  Обновл. 5 Янв 2019  | 

 69899

 ǀ   45 

Компьютеры понимают только очень ограниченный набор инструкций и чтобы заставить их что-то делать, нужно четко сформулировать задание, используя эти же инструкции. Программа (также «приложение» или «программное обеспечение», «софт») — это набор инструкций, которые указывают компьютеру, что ему нужно делать. Физическая часть компьютера, которая выполняет эти инструкции, называется «железом» или аппаратной частью (например: процессор, материнская плата и т.д.).

Машинный язык

Процессор компьютера не способен понимать напрямую языки программирования, такие как C++, Java, Python и т.д. Очень ограниченный набор инструкций, которые изначально понимает процессор, называется машинным кодом (или ещё «машинным языком»). То, как эти инструкции организованы, выходит за рамки этого введения, но стоит отметить две вещи.

Во-первых, каждая команда (инструкция) состоит только из двух цифр: 0 или 1. Эти числа называются битами (сокращенно от англ. «binary digit») или двоичным кодом.

Например, одна команда машинного кода архитектуры x86 выглядит следующим образом:

10110000 01100001

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

Язык ассемблера


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

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

Например, вот та же команда, что выше, но на языке ассемблера:

mov al, 061h

Высокоуровневые языки программирования

Для решения проблем читабельности кода и чрезмерной сложности были разработаны высокоуровневые языки программирования. C, C++, Pascal, Java, JavaScript и Perl — это всё языки высокого уровня. Они позволяют писать и выполнять программы, не переживая о совместимости кода с разными архитектурами процессоров. Программы, написанные на языках высокого уровня, также должны быть переведены в машинный код перед выполнением. Есть два варианта:

  компиляция, которая выполняется компилятором;

  интерпретация, которая выполняется интерпретатором.

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

Если по-простому, то процесс компиляции выглядит следующим образом:

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

Процесс интерпретации: 

Любой язык может быть компилируемым или интерпретируемым, однако, такие языки, как C, C++ и Pascal — компилируются, в то время как «скриптовые» языки, такие, как Perl и JavaScript — интерпретируются. Некоторые языки программирования (например, Java) могут как компилироваться, так и интерпретироваться.

Преимущества высокоуровневых языков программирования


1. Легче писать/читать код. Вот та же команда, что выше, но на языке C++:

а = 97;

2. Требуется меньше инструкций для выполнения определенного задания. В C++ вы можете сделать что-то вроде этого: а = Ь * 2 + 5; в одной строке. В языке ассемблера вам пришлось бы использовать 5 или 6 инструкций.

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

4. Высокоуровневые языки программирования портативнее под различные архитектуры (но есть один нюанс).sxemagotovo33Нюанс заключается в том, что многие платформы, такие как Microsoft Windows, имеют свои собственные специфические функции, с помощью которых писать код намного легче. Но тогда придется пожертвовать портативностью, так как функции, специфические для одной платформы, вполне вероятно, что могут не работать на другой платформе. Обо всём этом мы детальнее поговорим в следующих уроках.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (735 оценок, среднее: 4,87 из 5)
Загрузка...

Комментариев: 45

  1. Creator Engines:

    Здравствуйте Юра! Я хотел бы научиться написать 3D игровой движок какие уроки прочитать по этой теме? Спасибо за ответ заранее.

  2. Alexey:

    Подскажите как вставлять код в комментарии, чтобы он сохранял структуру как в IDE(как примеры на сайте)? Использую Visual Studio.

    1. Юрий Ворон Юрий Ворон:

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

  3. Лиза:

    Здраствуйте. Спасибо за такой понятный урок, но не совсем поняла, что значит таблица в конце. Спасибо.

    1. Юрий Ворон Юрий Ворон:

      Привет. Это всего лишь начало — продолжайте обучение 🙂

  4. SGR:

    Много избыточной информации, как для начального изучения С++. У того же Страуструпа попроще изложение материала.

    1. Юрий Ворон Юрий Ворон:

      Возможно так оно и есть.

  5. Александр:

    Что понимается под словом портативный к коне урока?

    1. Юрий Ворон Юрий Ворон:

      Кроссплатформенные. Те, которые хорошо работают сразу на нескольких платформах.

      1. Александр:

        теперь ясно

  6. KanuTaH_KaKaxa:

    Спасибо автору!!!
    Все предельно ясно разжовано.

    1. Юрий Ворон Юрий Ворон:

      Спасибо, что читаешь 🙂

  7. Константин:

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

    1. Владимир:

      Микрокоманды для АЛУ, которое собсно и выполняет действия над битами данных.

  8. Сергей:

    Подскажите пожалуйста стоит мне начинать учить с c++ или лучше начать попроще изучить язык для понимания, до этого не занимался программированием. Спасибо!

    1. Юрий Юрий:

      Попробуйте и то, и другое. Затем и определите, что вам лучше подходит.

  9. oleg:

    Помогите — не понял.
    Машинный код 10110000 01100001 получается в результате инструкции a = 97;

    10110000 == 176
    01100001 == 97
    'a' == 97
    '=' == 61
    'пробел' == 32
    ';' == 59

    Как формируется машинный код ?
    Спасибо.

    1. Константин:

      Олег, а ты выдели свой вопрос и спроси у Гугла — прозреешь!

  10. Blackson:

    Отличный урок !

  11. Марина:

    Кажется, на просторах интернета я откопала сокровище) Такое понятное изложение информации на вес золота.

    1. Юрий Юрий:

      Спасибо 🙂

  12. Семён:

    Просто великолепно ! Я скажу очень бонально : я тоже искал , что-то подобное , находил , но обучение там шло очень не поэтапно . Например , тоже же самый St***k ( не буду рекламировать ) , который на одном уроке давал действительные числа и в тоже время множество функций , таже самая break …..
    Но вот я нашел вас …. Сам тоже изучаю английский язык и совмещать полезно . У вас очень хорошая манера излагаться и главное : поэтапная подача . Пусть даже первая часть ( глава ) , которой даже опытные IT -специалисты крайне мало уделяют внимание . Ещё бы слепому набор научится
    Сам люблю технологии , новинки и т.д , но вот только в 16-17 лет дошли руки до обучения программ.Но в тоже самое время считаю , что возраст 16-20 лет как раз для этого подходит , но учится не когда не поздно .
    Огромное спасибо , добавился б в друзья , но вы не горите какой у вас name user в ВК .

    Ещё раз огромное спасибо … Путь начался ⚡⚡⚡⭐⭐

    1. Li4ik Li4ik:

      Я в свои 17-18 лет тоже, когда нужно было уже что-то учить по C++ (в колледже этот язык программирования был основным) — пытался искать на просторах Рунета годные уроки. Нашел несколько сайтов, и как вы тоже говорите, сегодня учим "Hello, World!", завтра ООП, послезавтра паттерны проектирования и всё в этом роде. Так и задумался, что нет одного сайта в Рунете по изучению C++, где всё было бы поэтапно, с самых мелочей и уже до базовых вещей.

      Насчет учиться — учиться никогда не поздно, но чем раньше, тем лучше 🙂

      Спасибо, что читаете.

      1. Семён:

        Успехов и удачи во всём !

        1. Li4ik Li4ik:

          Спасибо 🙂

  13. ali:

    Привет, а практика будет? Тесты, задания и всё такое.

    1. Li4ik Li4ik:

      Всё есть в следующих уроках.

  14. ali:

    Хорошо, спасибо

  15. Борис:

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

    1. Li4ik Li4ik:

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

      1. ali:

        Здравствуйте. Мне 16 и дело в том что я вообще не много знаю о компьютерах, о языках и обо всем этом можно сказать даже ничего не знаю. Я начал учить английский и хочу научиться языкам программирования подскажите что делать я с правильного сайта начал?

        1. Li4ik Li4ik:

          Привет, попробуй. Увидишь, есть ли польза или нет.

  16. Ильнур:

    Учитель!!!! А задачки будут?
    Спасибо тебе за труд!!!

    1. Li4ik Li4ik:

      Да, всё есть в следующих уроках 🙂

  17. Сергей:

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

    1. Li4ik Li4ik:

      Привет. Вам её нужно скомпилировать и запустить. Смотрите ‘Урок 5. Компиляция вашей первой программы‘.

  18. Irina:

    Наконец-то снова появилось желание учится по программиста. Третий год учусь уже на эту специальности и руки совсем начали опускаться. Потому что всё я слышу эти 3 года — мышка с шариком, монитор монохромный, таблицы в эксель.
    И тут этот сайт просто как глоток свежего воздуха!

    1. Li4ik Li4ik:

      Что ж это за университет у тебя такой? 🙂

  19. Ибрагим:

    Спасибо большое брат, 2 месяца искал что-то похожее на это, век не забуду!

    1. Li4ik Li4ik:

      От души, брат.

  20. Ivanshka:

    Мне всего 16, неплохо знаю PascalABC.NET (пробовал написать небольшую игру, кое-что вышло, но до ума не довел из-за тормозов то ли языка, то ли железа, то ли кривости моих рук), HTML 5 и CSS 3 (пробовал сайт писать из интереса). В общем, кодить — моё хобби. Есть мечта (написать игру с какой-нибудь командой) и желание учиться, чтобы писать годные вещи, а не кучу говнокода, а ты пишешь такие уроки! Большое спасибо тебе, Юра!)

    1. Li4ik Li4ik:

      И тебе спасибо 🙂 16 лет — как раз золотое время для изучения программирования. Больше практики, своих проектов и всё обязательно получиться!)

  21. DEADLIGHT:

    спасибо за ресурс. начну свое самообучение…

  22. Дмитрий:

    Спасибо!
    Благодаря тебе у меня вернулось желание обучаться на программиста.
    Поступаю на второй курс, надеюсь, не слишком поздно начал)

    1. Li4ik Li4ik:

      Поверь, никогда не поздно, лишь бы нравилось 🙂

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *