Программирование. Основы основ. Как все это работает

Компьютеры
Программирование. Как это все работаетКомпьютер – это устройство, которое работает с числами. Но число «умеет» очень многое! Числовым кодом может заменить любую букву в любом языке. Цифровым сигналом можно описать видеопоток, графику, музыку и многое другое. Любая команда, выполняемая процессором – это некое число, которое прячет в себе код операции, номер регистра, указание на то, откуда будут извлекаться данные для команды и так далее… Но не это главное, кому интересно, могут почитать про машинный язык, про Ассемблер и узнают все про низкоуровневое программирование.



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

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

И что же это такое – высокоуровневое и низкоуровневое программирование?

Все очень просто – высокоуровневое программирование можно сравнить с видом, например, на город сверху и увидеть всю красоту и оценить многообразие архитектуры. Сверху можно увидеть целостную картину.

Низкоуровневое программирование – это как если рассматривать тот же самый город, находясь перед зданиями на расстоянии в несколько сантиметров и внимательно изучать каждый кирпичик, из которого состоит стена рассматриваемого здания…

Есть низкоуровневый и высокоуровневые языки программирования. Программу, написанную на высокоуровневом языке программирования несложно понять даже людям, далеким от программирования, так как такой язык и подразумевает некое подобие человеческого языка, например:
If a <> b then
a := a + b
else
a:= a – b;
Все наглядно и понятно, особенно для тех, кто хоть немного владеет английским языком. А теперь аналогичные действия на низкоуровневом языке – Ассемблере:
Mov Eax, a
Cmp Eax, b
Jne @@1
Sub Eax,b
Ret
@@1:
Add Eax, b
Ret
Наглядности уже поменьше будет. Но профессиональный программист легко и этот код поймет.

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

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

И в наше время тем более в машинных кодах нет смысла копаться даже самым мега крутым разработчикам – никто этого не оценит. Транслятор с языка Ассемблер все сам правильно переведет в машинный код, например, Mov – это одна из инструкций языка Ассемблер, которая загрузит в регистр Eax значение, которое расположено по адресу a, а транслятор инструкцию,
Mov Eax, a
переведет в машинный код, который будет состоять из кода инструкции Mov, за которым последует адрес, по которому лежат данные для регистра Eax. В памяти компьютера появятся в нашем случае 5 байт «каких-то чисел», которые будут понятны микропроцессору, но людям они ничего не скажут. Хотя любой профессиональный программист также легко поймет, что эти числа означают, ничего там нет сложного, но зачем время на это тратить…

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

К слову, кому будет интересно, в СССР придумали компьютер с троичной логикой, в котором использовали три уровня сигнала. И этот троичный советский компьютер обладал колоссальными возможностями за счет троичной логики, но не выжил, так как в то время, когда в Западном мире элементная база и электроника стремительно становилась компактной, в СССР все еще электроника была громоздкой. Если бы не это обстоятельство, сейчас бы на столах стояли бы троичные компьютеры.

СССР вполне мог бы сделать революционный прорыв в электронике, но не сделал. Это все в стиле СССР – уделать весь западный мир в гениальном изобретении и вскорости изобретение похоронить.

Непонятно только, почему троичные компьютеры не «просочились» на Запад. Случись это – все было бы как обычно – изобретено в СССР, а производится на Западе и деньги там же зарабатываются, а СССР и дальше строит коммунизм в сторонке…

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

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

Любая программа, написанная на языке Ассемблера, транслируется в машинные коды.
Любая программа, написанная на языке высокого уровня, компилируется в машинные коды.
В чем же разница между транслятором и компилятором?

Трансляция – процесс не сложный. Одна инструкция языка ассемблера – это и есть одна машинная команда, которая может занимать несколько байт.

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

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

Вот, пожалуй, и все, основы и понимание работы компьютера какое-то имеются, теперь можно приступать к изучению непосредственно самого программирования. Попробую простыми словами рассказать про основы программирования на языках Object Pascal и С/С++.

Как правило, любой программист знает что-то очень глубоко и хорошо, а что-то в общих чертах, но всегда в процессе решения задачи, все, что знает в общих чертах, в результате изучает более глубоко и досконально. Такова специфика работы, от этого не уйти. Поэтому выбранные языки – это не «от балды», а целенаправленно. Может кого-то они подтолкнут к более детальному изучению C++-подобных языков, может кто-то захочет делать прикладной софт, для которого идеально подходит Object Pascal, а С++ можно и на потом оставить.

В любом случае – так сложилось исторически – Object Pascal пришел из языка программирования Pascal, который в 1970 был создан Никлаусом Виртом и на котором было ну очень удобно обучаться структурному программированию. А в настоящее время Object Pascal как язык программирования используется в среде разработки Delphi и Embarcadero RAD Studio. И в этих средах разработки можно делать достойный софт, не смотря на вечные споры C++ и Delphi программистов…

У C++ другая история. Язык Ассемблера позволяет разрабатывать самые быстрые и компактные программы, но сама разработка очень трудоемка на Ассемблере. Тогда и стали думать, как же придумать язык, который будет так же крут, как и Ассемблер, но и в то же время избавит от трудоемкости и рутины. Так и появился язык B («Би», если читать по-русски). Но он оказался не очень удачным и желание у программистов упростить себе жизнь еще больше усилилось, что привело к совершенствованию языка B, который перерос в язык C («Си», если читать по-русски).

Язык Си оказался очень удачным и используется и в наше время. Но и на его основе решено было создать еще один язык и назвали его C++. Не смотря на схожесть в названии – это все же два разных языка. У них синтаксис похож, но С++ не является более совершенной версией С. С++ разработан на основе С! И синтаксис C++ настолько удачен, что этот синтаксис сейчас используют во многих других языках, например: Java, C#, PHP и так далее. И эти языки так и называют – Си-подобные языки или на английском – C-like languages.

2 комментариев

Было время... 1987-88 годы. Тогда я даже и не думал, что увлекусь программированием на целые десятилетия. В то время еще компьютеры в квартирах были бооольшой редкостью. У нас был крутейший по тем временам легендарный Commodore 64. Тогда я на нем просто игрался. Все игрушки хранились на обычных кассетах и загружались в компьютер целиком и полностью и легко вмещались в 64 килобайта памяти. Все бы так и продолжалось, но случайно узнал, что мои друзья, у которых не было дома компьютера пошли на кружок программирования, тогда еще бесплатный... А потом за ними и я увязался. Вот тогда я и узнал, что программировать - это безумно интересно. Тогда еще не было крутых компьютеров и в те времена академики наивысших рангов решали задачи для компьютеров наподобие распознавания речи, текста, синтеза голоса и тратили на это годы своей жизни. Возможно, это они и внесли свою лепту в то, чтобы сейчас на современном компьютере сделать пустяковую программу, которая будет произносить четкую речь, надо всего минут 15!
Хотя программирование, это не для меня, прочитать было интересно,хотя наверное не все полностью понятно. Но кое что прояснило. Спасибо.
  • Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.