Подтвердить что ты не робот

Может ли кто-нибудь рассказать мне о том, как работает компьютерное программирование?

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

4b9b3361

Ответ 1

Все начинается с процессора или процессора. Каждый тип процессора имеет определенный набор инструкций, которые он может выполнять. Эти инструкции работают над единицами и нулями, которые, в свою очередь, представляют все, что вы хотите: цифры, буквы, даже сами инструкции.

На самом низком уровне нуль определяется наличием определенного напряжения (обычно около 0 В) на транзисторе, а 1 - наличием другого напряжения (зависит от процессора, скажем, 5 В)

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

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

Затем вы пишете программу, которая добавляет два числа, как правило:

4 + 5

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

001 00000100 00000101

с дополнительным кодом машинного шаблона, чтобы поместить команду 001 в следующий регистр команд (указатель инструкции) и двоичные кодированные числа в регистрах данных (или ОЗУ).

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

Команды CPU могут выполняться довольно просто и просто, добавление, деление, отрицание, чтение из ОЗУ, размещение в ОЗУ, чтение из регистра и т.д.

Следующий вопрос: как эти простые инструкции по числам генерируют все чудеса, которые мы видим в вычислениях (интернет, игры, кинопроигрыватели и т.д.)?

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

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

Критический момент произошел с переходом от языка ассемблера (язык, очень похожий на машинный код, это был первый язык программирования и его конкретный процессор). Каждая инструкция сборки напрямую преобразуется в машинный код) в C (который переносится между разными CPU и находится на более высоком уровне абстракции, чем сборка: каждая строка кода C представляет собой множество команд машинного кода). Это было огромным увеличением производительности для программистов, им больше не приходилось переносить программы между разными процессорами, и они могли бы думать гораздо легче о базовых моделях, что привело к увеличению продолжительности сложности программного обеспечения, которое мы видели (и даже требовали) с 1970-х годов до сегодняшнего дня.

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

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

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

Кажется, я увлекся, надеюсь, вы поняли что-то из этого: -)

Ответ 2

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

В принципе, компьютеры действительно понимают только машинный язык, который является базовым языком, реализованным в двоичном (1 и 0). Один уровень выше этого - это язык ассемблера, который является очень примитивным языком, который по крайней мере читается человеком.

На языке высокого уровня у нас может быть что-то вроде:

Person.WalkForward(10 steps)

В машинном коде это будет:

Lift Persons Left Foot Up
Lean Forward
Place Left Foot Down
Lift Right Foot up
Lean Forward 
Place Right Foot Down
etc

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

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

Ответ 3

Хорошая книга, рассказывающая о компьютерах для не-инженеров, "Code" Чарльза Петцольда. Я не помню точно, если он охватывает именно ваш вопрос, но я так думаю. Если вы заинтересованы, чтобы пойти дальше, это хороший выбор.

Код http://ecx.images-amazon.com/images/I/11MYtZPhJEL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA198_SH20_OU01_.jpg

Ответ 4

В простейшем случае программа, называемая компилятором, берет слова программирования, которые вы пишете, и преобразует их в машинный язык, который может понять компьютер. Компиляторы понимают определенный язык программирования (С#, Java и т.д.), Который имеет очень специфические правила о том, как вы объясните компилятору, что вы хотите.

Интерпретация и понимание этих правил - это большая часть того, что происходит с переполнением стека.:)

Ответ 5

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

Искусство заключается в том, что вы достаточно хорошо описываете шаги:)

Ответ 6

Вы можете сравнить, как работает программирование для перевода между языками. Скажите, что вы были на необитаемом острове с двумя другими людьми. Вы говорите только по-французски. Человек номер 1 (назовем его Фред) говорит только по-французски и по-японски. Человек 2 (Боб) говорит только по-японски. Скажите, вам нужно попросить Боба помочь вам собрать дрова. Представьте, что в этом случае вы являетесь программой, а Боб - это компьютер. Вы говорите Фреду по-французски: "Можете ли вы сказать Бобу, чтобы он мне помог". Фред переводится на японский язык и просит Боба помочь вам. В этом случае Фред был бы компилятором. Он переводит запрос на то, что Боб может понять. Вот как работает компьютерная программа.

Есть хорошая статья How Stuff Works, в которой объясняются вещи.

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

Ответ 7

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

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

Но, к сожалению, писать машинный код для настольного компьютера не очень весело.

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

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

Оба из них - отличные способы понять, как работают цифровые компьютеры.

Ответ 8

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

Ответ 9

У меня есть два сумасшедших предложения. Вернитесь во времени!

1. Получить программируемый калькулятор.

A программируемый калькулятор является обычным калькулятором, вы можете делать с ним обычные вещи: вводить цифры, вводить знаки деятельности и после нажатия клавиша equel, вы можете прочитать результат на крошечном дисплее. Кроме того, программируемый калькулятор может хранить короткие последовательности нажатий клавиш в виде программы, которые впоследствии можно "переиграть" одним нажатием. Скажем, вы устанавливаете эту последовательность как программу (по одной команде на строку):

(Start)
*
2
+
1
=
(Stop)

Теперь у вас есть пользовательская операция: нажатие клавиши "program" (или какой из них вы назначили), она будет запускать последовательность без дополнительной помощи и умножит содержимое дисплея на 2 и добавит 1 - это программа!

Позже вы можете попробовать более совершенные методы: сохранение временных результатов в памяти, ответ на результат.

Плюсы:

  • Калькулятор - знакомая среда. У вас уже есть основы.
  • Это просто. Вы не должны изучать множество инструкций и методов программирования.
  • Современные языки программирования далеки от земли, а программируемые калькуляторы "находятся на нем". Вы узнаете основы: память, ветвь, элементарные операции. Компьютеры работают очень одинаково (на уровне машинного языка).
  • Вы встретите проблемы низкого уровня: память, деление на ноль.
  • Это очень круто.

Минусы:

  • Это устарело. Вы должны изучить современный язык программирования, который будет другим.
  • Это неудобно (hm, это вместо этого: вы не можете использовать удобные игрушки с щелчком и воспроизведением). Возможно, вы даже не можете сохранить свой код.
  • Это не тривиальная задача получить его. Вы можете попробовать E-Bay. Кроме того, проблем с документацией не будет, большинство моделлеров имеют большие группы пользователей в Интернете.

Лучший выбор IMHO TI-59.

2. Изучите язык BASIC с помощью эмулятора.

Когда вы включаете машину, у которой есть встроенный BASIC language, он готов принять ваши команды и выполняет так же вы печатаете. Во-первых, вы можете попробовать несколько команд в командном режиме, например:

PRINT 5*4

Он напечатает "20" в следующей строке, ничего себе. Если вы играли достаточно в командном режиме, вы можете организовать инструкции в программах, затем вы можете запускать, редактировать и улучшать его.

Плюсы:

  • BASIC - это настоящий язык программирования, предназначенный для обучения.
  • Когда вы позже познакомитесь с современным языком программирования и обнаружите различия, вы увидите прогресс в методах программирования (например, процедурные, структурные и т.д.) за последние 30 лет.
  • Это круто, особенно если вы получаете реальный, а не просто эмулятор.

против

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

Моя любимая система BASIC - это Commodore 16 (Plus/4), которая очень похожа на знаменитый C64. но более комфортно. Я предпочитаю YAPE эмулятор, он может сохранять/загружать снимки памяти или программы BASIC в файл.

Ответ 10

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

Две книги, которые дадут вам достойный обзор этого процесса, SICP и TECS.

Ответ 11

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

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

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

Ответ 12

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

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

Если вы хотите узнать о программировании, не сосредотачиваясь на компиляторах, технологиях и т.д., вы получите хорошее представление о том, что такое программа, когда вы начинаете создавать 3D-сцены в Alice. Алиса свободна от Университета Карнеги-Меллона. Вы в конечном итоге научитесь программировать, не пытаясь узнать, как прораммировать.

Если вы хотите узнать больше о технических деталях, лучше всего посмотреть на некоторые учебники по учебному курсу интро-сборника. Следующие How C Programming Works также могут дать вам несколько ответов.

Ответ 13

В принципе, вы начинаете с чего-то простого, например:

print("Hello World");

Затем вы просто посыпаете синтаксический сахар и магические жетоны, пока он не сделает то, что вы хотите!