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

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

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

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

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))

Процесс

Описание

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

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

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;
}

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