@RailsPack

Правильно ли я понимаю суть программирования?

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

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

Формат интерпретации данных и их кодирование в памяти, а также список команд, которые способен исполнить процессор, предопределены производителем CPU и описаны в Instruction Set Architecture процессора?

Вот ещё волнует вопрос: именно ISA определяет то, как закодированы данные в памяти или она определяет только то, как эти данные интерпретируются процессором? Если не ISA определяет кодирование данных, то что?

Вот ещё один волнительный вопрос: если программирование начиналось с мучительного прямого введения последовательностей бинарных электрических сигналов в машину на интерпретацию, то как был создан первый первый интерпретатор именно текстовой программы?
  • Вопрос задан
  • 1844 просмотра
Пригласить эксперта
Ответы на вопрос 9
@di23
Нет вы все не верно понимаете. Задумайтесь вод над чем -> Программировать можно и без ПК и без процессора, и вообще не привлекая технику. От этого суть программирования не меняется. А у вас в определении сплошные "процессоры".
Если грубо, то Программирование - это процесс написания логических инструкций, в большей степени ориентированных для прозрачного и четкого понимания со стороны других людей.

А у вас... Такое ощущение что вы копирайтер и пишите статью на тему в которой совершенно не разбираетесь. От обилия красивых слов умнее высказывание не становится.
Ответ написан
Вам точно не в "web-dev"..
P.s уж слишком низко полезли. У нас же всё в абстракциях :D
Ответ написан
@jacob1237
Формат интерпретации данных и их кодирование в памяти, а также список команд, которые способен исполнить процессор, предопределены производителем CPU и описаны в Instruction Set Architecture процессора?


Да, все верно понимаете. Производители процессоров конечно пытаются стандартизировать свои архитектуры, но все равно остаются ньюансы как у AMD, так и у Intel (если рассматривать только ПК).

Пример документации от Интел: https://software.intel.com/en-us/articles/intel-sdm

В целом для ПК (именно для ПК) существуют некий стандарт x86, а также его расширение x86-64. Именно он описывает набор доступных программисту инструкций, флагов и ячеек данных (регистров).
В рамках этого стандарта каждая инструкция имеет свой опкод.

Т.е. после компиляции программы в машинный код (двоичную последовательность), опкоды команд будут одинаковы для всех x86-совместимых процессоров (т.е. компиляция идет не под отдельный процессор, а под архитектуру, а самих архитектур много, x86, ARM и т.д.).
Это дает возможность запускать программы с одинаковым результатом как на процессорах Intel, так и на AMD.

Программирование — умение кодировать алгоритмы, предназначенные для исполнения процессором, на языке, синтаксис которого, в конечном счёте - после стадий трансляции символьных масок в последовательность электрических сигналов, предназначен для понимания процессором


Если рассматривать только сам процесс кодирования, то примерно так и есть.
Но сейчас под термином "программирование" подразумевается нечто большее чем простой набор инструкций с клавиатуры.
Программирование - прикладная наука. Без предметной области программирование не существует в принципе.
И именно предметная область зачастую определяет каким будет язык и инфраструктура.

От программиста требуется не только забить алгоритм и откомпилировать исходник, но и зачастую этот алгоритм сначала придумать/скомбинировать. Без знания предметной области этого сделать опять же не получится, либо получится, но малоэффективно.

Вам точно не в "web-dev"..
P.s уж слишком низко полезли. У нас же всё в абстракциях :D

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

Это может быть потребность написать свой модуль для PHP, Python, JavaScript (Node.js), либо реализовать программный интерфейс к внешним приложениям/системам.

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

В 90% задач конечно это не нужно (особенно где надо "натягивать верстку на движок" =D), но если хотите расти как профессионал и покрывать весь спектр возможных задач в вебе, то это, как говорится, must have.
Ответ написан
CityCat4
@CityCat4
Если я чешу в затылке - не беда!
Ээээ...Вам точно в webdev? Вопросы-то совсем не вебовские, а больше свойственные автоматчикам - разработчикам устройств промышленной автоматики :) Между вебщиком и Instruction Set - лежит несколько уровней архитектуры, на которые ему спускаться смысла не имеет.

Первым интерпретатором текстовой программы было устройство чтения с перфокарт - я еще застал такое в 1992 году :) Одна строка программы - одна карта. Именно поэтому раньше строки программ назывались "картами".
Ответ написан
AlexZaharow
@AlexZaharow
O Keep Clear O
Программирование — умение кодировать алгоритмы, предназначенные для исполнения процессором, на языке

Не только! Ещё и умение автоматизировать деятельность заказчика. Это вам нужен разворот на 180. Заказчика не интересуют инструкции CPU.
Программа рождается в голове программиста не в виде машинных кодов или синтаксиса, а в виде последовательности действий, которые приводят к желаемому результату. Непосредственно само программирование с пониманием архитектуры процессора или сетевой работы является ремеслом , которое ничего общего не имеет с романтикой и называется кодированием (но в кодировании есть своя романтика).
Ответ написан
lxsmkv
@lxsmkv
Test automation engineer
программирование - перевод из человеческого языка на язык компьютера.
при этом человеческий язык неоднозначен по своей природе, а компьютерный - не допускает двусмысленности.
Ответ написан
@red-barbarian
основная задача в программировании (и не только) сделать из сложного простое.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Программирование
software engineer
1. "Программирование — умение кодировать алгоритмы, предназначенные для исполнения процессором"

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

> на языке, синтаксис которого, в конечном счёте - после стадий трансляции символьных масок в последовательность электрических сигналов, предназначен для понимания процессором.

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

3. В результате кодирования алгоритма/ов получается компьютерная программа.

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

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

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

5. Формат интерпретации данных и их кодирование в памяти, а также список команд, которые способен исполнить процессор, предопределены производителем CPU и описаны в Instruction Set Architecture процессора?

Да. Одна из причин, почему пишут на языках высокого уровня - это кроссплатформенность, когда для разных платформ (CPU) есть разные компиляторы, и один и тот же исходный код можно откомпилировать под каждый CPU/OS

6. Вот ещё волнует вопрос: именно ISA определяет то, как закодированы данные в памяти или она определяет только то, как эти данные интерпретируются процессором? Если не ISA определяет кодирование данных, то что?

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

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

Даже на википедии можно почитать историю языков программирования. Почитайте про Си, про Би.
Первые интерпретаторы были такие простые, что их мог один человек написать в машинных кодах за разумное время.
Собственно можно за день написать простой компилятор, в котором будет минимум проверок (и высокие требования к коду).
Ответ написан
tsklab
@tsklab
Здесь отвечаю на вопросы.
данные интерпретируются процессором
Процессор обрабатывает поступающие по шине байты (Машинный код). А интерпретация это:
Программы на интерпретируемых языках (таких как Бейсик или Python) не транслируются в машинный код; вместо этого они либо исполняются непосредственно интерпретатором языка, либо транслируются в псевдокод (байт-код). Однако интерпретаторы этих языков (которые сами можно рассматривать как процессоры), как правило, представлены в машинном коде.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы