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

   ⁄ 

 Обновлено 24 Фев 2018  ⁄ 

 ⁄   30 

⁄   32594

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

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

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

Во-первых, каждая команда (инструкция) состоит только из двух цифр — 0 или 1 (это двоичный код). Эти числа называются битами (сокращенно от англ. «binary digi). Например, машинный код архитектуры MIPS имеет все инструкции длиной 32 бита. Другие архитектуры (например, x86, которую вы, вероятнее всего, используете) используют инструкции, длина которых может быть указана как переменная.

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

10110000 01100001.

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



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

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

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

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

mov al, 061h

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

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

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

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

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

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

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

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

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

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

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

а = 97;

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

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

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



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

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (408 оценок, среднее: 4,88 из 5)
Загрузка...
Подписаться на обновления:

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

  1. Сергей:

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

    1. Юрий:

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

  2. oleg:

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

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

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

  3. Blackson:

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

  4. Марина:

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

    1. Юрий:

      Спасибо 🙂

  5. Семён:

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

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

    1. Li4ik:

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

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

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

      1. Семён:

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

        1. Li4ik:

          Спасибо 🙂

  6. ali:

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

    1. Li4ik:

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

  7. ali:

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

  8. Борис:

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

    1. Li4ik:

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

      1. ali:

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

        1. Li4ik:

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

  9. Ильнур:

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

    1. Li4ik:

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

  10. Сергей:

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

    1. Li4ik:

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

  11. Irina:

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

    1. Li4ik:

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

  12. Ибрагим:

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

    1. Li4ik:

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

  13. Ivanshka:

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

    1. Li4ik:

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

  14. DEADLIGHT:

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

  15. Дмитрий:

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

    1. Li4ik:

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

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

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

ПОДПИСЫВАЙТЕСЬ

НА КАНАЛ RAVESLI В TELEGRAM

@ravesli

ПОДПИСАТЬСЯ БЕСПЛАТНО