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

  Юрий  | 

  |

  Обновл. 24 Дек 2020  | 

 365806

 ǀ   68 

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

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

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

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

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

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 (2 797 оценок, среднее: 4,86 из 5)
Загрузка...

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

  1. Влад:

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

    1. Лучок:

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

  2. vaserman:

    теперь я знаю на что регулярно буду тратить время
    200+ уроков + практические задания
    …эх хочется сразу взять и как хакер шпарить в слепую код НО ничего не даётся просто так и начну с основ для объективно понимания
    -а что есть программирование?
    учится практиковать и ещё раз учится и практиковать ааа!
    повторение мать учения!
    ну что матросы, в путь! Pogнали
    p.s. надеюсь переживу выгорание..

    1. Кирилл:

      Как твои успехи, воин?

  3. TMSC9000:

    Это действительно неплохая статья по обучению по программированию, вот только есть один из самых главных нюансов,который тут не упоминается — МОТИВАЦИЯ и ВЫГОРАНИЕ.

    Без или при очень слабой мотивации мало кто будет в состоянии учиться дальше.
    А выгорание это очень страшный враг для программистов,который и говорит за тебя по типу:
    "Меня это задолбало,лучше что нибудь ещё сделаю."

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

    Просто добавьте страницу о МОТИВАЦИИ(какие именно и какие влияют сильнее) и ВЫГОРАНИИ(и как с этим бороться) чтобы полностью дополнить обучение по программированию.

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

      Чувак, на эту тему можно столько всего расписать.
      Какая-то html страничка с мотивационной речью не поможет.
      На эту тему можно прочитать много различной литературы, например "Как научиться учиться" (Бозер У.) и ещё кучу психологической литературы. Из "лёгкой" и научно-популярной рекомендую посмотреть в сторону Курпатова и Даниела Ка́немана, например "Думай медленно решай быстро".

      P.S. Осталось придумать, как заставить себя читать что-то. Верно?)) Хотя на эту проблему отвечает книга того же Курпатова "Красная таблетка".

      1. Иван:

        Совершенно верно

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

      мотивационный анекдот for over9000: один из одноклассников (добившийся успеха) устроил к себе водилой другого (лузера) за просто фантастическую зп (тот расчитался с долгами и т.д. и т.п.) … как-то раз сидят они в ресторане, а у лузера лицо чего-то жутко не довольное, ну друг его и спрашивает, мол, я ж тебе всё в жизни порешал, а тот ему и говорит, мол, таки, да, но, если б ещё кто-то за меня работал:-( 🙂

  4. Артём:

    Я не совсем понял один момент.

    Как я понял, 10110000 и mov al это вообще одно и тоже, просто по разному написано. Это значит, что мы записываем значение (пусть это будет 97d, 61h или 01100001) в регистр al. А вот в случае "а =" это значение тоже записывается в этот регистр, или в этом случае мы не знаем точно, куда оно записывается?

    1. Николай:

      Как я понимаю, запись в зависимости от компилятора.
      В fasm :
      A dw 65535 — объявление 2-байтной переменной(именованного участка памяти ) и присвоение 65535
      mov A, 32767 — присвоение A 32767
      mov ax, [A] — перемещение в регистр значения A (32767), если просто A или ptr A — то её адреса

    2. Maxim:

      1. Байт «10110000» (или 0xb0 в шестнадцатеричной) — это код, который будучи выполненным на процессоре x86 приведет к записи в регистр al константы хранящейся в следующих байтах.

      2. «mov al» — это целая строка из 6 байт, будучи скормленной ассемблеру он превратит её в тот самый «10110000» внутри исполняемой программы

      3. С-шная строка «a = ..» — компилятором С превратится в итоге в целый набор команд процессора.
      Например

      Или даже

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

  5. Tajik:

    Спасибо за уроки

  6. Andrew:

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

    1. Фото аватара Юрий:

      Здравствуйте! Как вы уже подметили, это очень условно и индивидуально, зависит от учащегося, его опыта и скорости прогрессирования, поэтому могу сказать только в общих чертах — без опыта за полгода-год можно пройти не спеша (1-2 урока в день). А то, как человек усваивает материал, сколько раз ему нужно перечитать то, что он не понял, делает ли он самостоятельно задания после уроков и проходит ли итоговые тесты — это всё также нужно учитывать.

  7. Ян:

    Скажите пожалуйста, а будет-ли статья по написанию компилятора для своего языка программирования? Какие инструменты при этом нужно использовать? Какую литературу почитать? И т.д. А то до меня все никак не доходит как создаются языки программирования. Читал на других сайтах, но так ничего и не понял, ибо пишут поверхностно. Собственно хотелось-бы лучше узнать как это все взаимодействует между собой на практике…

    1. Даниил:

      Эта тема довольно сложная. Наилучший вариант — найти "Книгу дракона" (она так и называется). Там подробно описано, как создаются языки, и как под них делаются компиляторы или интерпретаторы.

  8. Макс:

    Да, всё супер! Ни разу не программист, но читается легко и интересно!
    🙂

  9. Глеб:

    Как я рад что существует такой великолепный сайт, как Ravesli.com, где можно черпать глубокие знания по изучению С++. Это лучший сайт из всех которые я когда-либо находил. Единственное, есть только один небольшой минус, — это отсутствие других языков программирования. Хотелось-бы увидеть другие языки, к примеру — Java. Прошу курсы по Java добавить, т.к. нигде такой детально-изложенной информации по изучению не нашел…

    1. Фото аватара Юрий:

      Пока что по Java ничего не планируется)

  10. cybersatori:

    Поделюсь. На усвоение базового курса ушло 3 месяца и 330 часов (по 3 часа в день). Информация подана отлично и в базовых концепциях я теперь разбираюсь. Спасибо Юрию за перевод. Ничего более путного и сжатого в рунете нет по сабжу.

  11. Сергей:

    наконец-то, я увидел свет. спасибо!

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

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

    1. Фото аватара Юрий:

      Спасибо, мне очень приятно 😉

      1. xzxz:

        да статья правда хорошая мне нравится все понятно

  13. Евгений:

    Сайт отличный. Помогает расширять свои знания в IT

    1. Фото аватара Юрий:

      Очень надеюсь, что так и есть.

  14. Вадим:

    Привет! Очень интересная статья, благодарю за потраченое время и подробное разъяснение профанам.
    Особенно понравилось, упоминания Assembler. Было бы неплохо объяснить начинающим, что компьютер понимает только цифры, то что мы видим — является GUI, тоесть графической оболочкой. Самым лучшим примером, того как на самом деле должен выглядеть рабочий стол — является дистрибутив Arch.

  15. Не до 4еловек:

    Спасибо огромное! Теперь буду учится)))))

  16. Creator Engines:

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

  17. Alexey:

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

    1. Фото аватара Юрий:

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

  18. Лиза:

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

    1. Фото аватара Юрий:

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

  19. KanuTaH_KaKaxa:

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

    1. Фото аватара Юрий:

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

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

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

    1. Владимир:

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

  21. Сергей:

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

    1. Фото аватара Юрий:

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

  22. oleg:

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

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

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

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

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

  23. Blackson:

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

  24. Марина:

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

    1. Фото аватара Юрий:

      Спасибо 🙂

  25. Семён:

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

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

    1. Фото аватара Юрий:

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

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

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

      1. Семён:

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

        1. Фото аватара Юрий:

          Спасибо 🙂

      2. Waldemar:

        Спасибо тебе, человечище! Хочу попробовать себя фрилансером после этого курса.

  26. ali:

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

    1. Фото аватара Юрий:

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

  27. ali:

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

  28. Борис:

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

    1. Фото аватара Юрий:

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

      1. ali:

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

        1. Фото аватара Юрий:

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

  29. Ильнур:

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

  30. Сергей:

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

    1. Фото аватара Юрий:

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

  31. Irina:

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

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

      Поверьте, руки у вас ещё не раз опустятся. Но это нормально 😉

  32. Ибрагим:

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

  33. Ivanshka:

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

    1. Фото аватара Юрий:

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

  34. DEADLIGHT:

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

  35. Дмитрий:

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

    1. Фото аватара Юрий:

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

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

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