Программирование

В действительности компьютеры понимают только один язык - машинный код - бинарный поток единиц и нулей.

Система команд (машинный язык) - совокупность машинных команд процессора.

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

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

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

Linux, стандарты и нормативная база

В первую очередь разработчики Linux (то есть ядра, библиотеки glibc и инструментария) стремятся соответствовать различным стандартам UNIX, особенно POSIX и Single UNIX Specification.

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

Кроме знания языков программирования необходимо иметь под рукой необходимый инструментарий для изучения, написания и отладки самих программ. В минимальный набор для написания программы входит ЛЮБОЙ текстовый редактор, компилятор и компонвщик (он же линковщик). Таким набором может быть например редактор VIM, компилятор GCC и компоновщик LD. Если у вас ничего этого нет, то можно установить всё из репозитария (# apt-get install vim gcc binutils) или скачать с сайтов разработчиков.

Архитектура x64 процессоров Интел

Описание архитектуры
Создание программ для архитектуры Intel (PDF (english))

Системная шина

How do computers work? CPU, ROM, RAM, address bus, data bus, control bus, address decoding.

Процесс

Описание

Устройство памяти

устройство памяти

IDE и редакторы

Редактор VIM (сайт)
- книга Vim (Рус)
- книга Hacking Vim 7.2 (Eng)
- Best Vim Tips (шпаргалка по настройкам)

IntelliJ IDEA
Android Studio

Ассемблеры

nasm - Netwide Assembler (сайт)
gas

Языки

C
Java

Платформы

Android

Компиляторы

GCC - GNU Compiler Collection
LLVM - Low Level Virtual Machine

Создание своего компилятора

Компоновщики

ld (входит в пакет binutils)
Руководство новичка по эксплуатации компоновщика (Хабр)

Отладчик

gdb (сайт, PDF (english))

Дополнительно

Определения
Терминология

Памятка

Передаём АРГУМЕНТЫ,

foo(arg1, arg2);

а принимаем ПАРАМЕТРЫ

int foo(int par1, int par2) {
    return par1 + par2;
}

Вызывающий код передаёт аргументы. Метод использует параметры.