Ilya Strukov's site

Что такое программирование?

2012-09-05

В качестве разминки для мозгов задумался над вопросом: как можно было бы наиболее просто и доступно объяснить ребёнку (или просто несведующему человеку) , на что похоже программирование? На ум пришла следующая аналогия.

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

  1. Подойди к шкафу с инструментом.
  2. Возьми в правую руку инструмент, лежаший справа на верхней полке. Это молоток (мы заранее знаем, что молоток лежит именно там).
  3. Возьми в левую руку из такой-то коробки одну металлическую деталь. Это гвоздь.
  4. Подойди к стене.
  5. Левой рукой приставь гвоздь острым концом к такому-то месту стены.
  6. Убедись, что правой рукой ты держишь молоток за конец ручки.
  7. Ударь молотком по гвоздю.
  8. Повроряй действие 7 до тех пор, пока гвоздь не войдёт на нужную глубину в стену.
  9. Снова подойди к шкафу с инструментом и положи молоток на верхнюю полку справа.

Причём, если мы в инструкции перепутаем, скажем, полку шкафа, то работник возьмёт не тот инструмент и будет старательно забивать гвоздь отвёрткой или рубанком. Так вот, а теперь представьте себе, что нужно написать инструкцию, по которой этот работник смог бы построить дом. Вот это и есть программирование. А если у нас есть не один работник, а целая бригада, то это уже параллельное программирование. При параллельном программировании надо писать инструкции так, чтобы работники не только делали нужные действия, но ещё и не сталкивались друг с другом (dead lock) и не пытались отнять друг у друга инструменты (race condition).

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