![image][1] Книга «Хакеры и Художники», глава 10.   Эта глава есть только в книге, на сайте [Пола Грэма][2] она отсутствует.  Кстати, осталось совсем чуть-чуть и будет готова последняя глава книги, тем самым будет полный русский хабраперевод «Хакеров и художников». (Предыдущий перевод — [Пол Грэм: «The Other Road Ahead»][3].)  _За помощь с переводом спасибо Щекотовой Яне._  
#### Языки программирования «в разрезе»
 **У любой машины есть набор действий, которые на ней можно выполнить.**  Иногда этот набор сильно ограничен. Со своим электрическим чайником я могу совершать только два действия: включать и выключать его. Мой CD проигрыватель будет уже посложнее. Помимо включения и выключения, я могу повышать и убавлять на нем громкость звука, воспроизводить и приостанавливать песни, перейти к следующей или предыдущей композиции, а также воспроизводить все это в случайном порядке.   Как и любое другое устройство, у компьютера есть список действий, которые он может выполнить. Например, на каждом компьютере можно сложить два числа. Полный перечень допустимых операций компьютера заключен в его машинном языке.  
#### Машинный язык
  Когда были изобретены компьютеры, все программы приходилось писать как последовательность машинных инструкций. Вскоре, их начали писать в несколько более удобной форме под названием язык ассемблера. В языке ассемблера список команд тот же самый, только используются более удобные для программистов имена. Вместо обращения к инструкции сложения как 11001101, хотя именно так машина ее и вызывает, вам нужно написать add.   Проблема с машинным языком/языком ассемблера состоит в том, что большинство компьютеров могут выполнять только очень простые вещи. Например, предположим, что вам нужно, чтобы компьютер воспроизвел короткий звуковой сигнал 10 раз. Сомневаюсь, что у компьютера есть инструкция для осуществления какого-либо действия n раз. Поэтому, если бы вам понадобилось, чтобы компьютер что-то сделал 10 раз, используя настоящие машинные инструкции, вам бы пришлось написать нечто похожее на:   put the number 10 in memory location 0  a if location 0 is negative, go to line b  beep  subtract 1 from the number in location 0  go to line a  b ...rest of program…   Если вам приходится выполнять столько работы только для того, чтобы заставить машину пропикать 10 раз, то только представьте, сколько труда уходит на написание чего-то наподобие текстового процессора или программы для работы с электронными таблицами.   И, кстати, взгляните еще раз на программу. Она и вправду воспроизведет короткий звуковой сигнал 10 раз? Неа, 11. В первой строке мне надо было указать 9 а не 10. Я намеренно поместил в наш пример ошибку, чтобы продемонстрировать важный аспект по поводу языков. Чем больше вам приходится писать для выполнения тех или иных действий, тем сложнее разглядеть ошибки. [Читать дальше →][4]
  [1]: 
https://habrastorage.org/getpro/habr/post_images/e77/914/884/e77914884579df2fb00518209c0082b9.jpg
  [2]: 
http://paulgraham.com/articles.html
  [3]: 
https://habrahabr.ru/company/edison/blog/282574/
  [4]: 
https://habrahabr.ru/post/281561/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut