понедельник, 6 июля 2015 г.

Программирование - это что ?

Наверно самый главный вопрос, на который надо сначала ответить, такой:

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

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

Отсюда можно выделить две важные области:
  1. Описание задачи (это может быть автоматическое получение курсов валют, получение прогноза погоды, учет товаров на складе, расчет траектории космического аппарата, список покупок в магазине, учет рабочего времени) - в общем, нам что-то важное надо сделать и хорошо понимать, что именно.
  2. Ну и сама программа, которая это делает (хорошо или плохо или так себе).
По сути программу можно рассматривать как грузовик, если задачей является перевозка грузов. Или пылесос, если задача - убрать пыль в доме. Или холодильник для решения задачи длительного хранения продуктов в холоде. И не надо выдумывать глупости вроде "программирование - это искусство", "элитная специальность" и прочая. Это ремесло. Обычное инженерное ремесло. Просто когда задача уникальна и решение сделано на высочайшем уровне - это становится искусством. Но это относится к любой деятельности.

Сама программа является опять же соединением двух частей:
  1. Алгоритм решения задачи - если мы хотим моделировать космический аппарат, то нам надо написать алгоритм расчета уравнений для определения координат аппарата. Если нам надо учесть движение товаров от поставщика до конечного потребителя, то нам надо честно описать правила для реализации шагов: заказ от покупателя, учет денег, поставка от производителя, гарантийный срок, поддержка (тут можно напридумывать много). Алгоритмов решения одной задачи может быть несколько.
  2. Инструментарий. По сути это набор уже готовых компонентов (программ, библиотек, пакетов), которые позволяют решать стандартные задачи - хранение информации, обмен информацией, создание пользовательского интерфейса и прочие.
Если опять прибегать к аналогиям, то можно рассмотреть бытовую задачу: повесить ковер. Во-первых, надо выполнить некоторую последовательность действий - очистить стену, просверлить дырки, вставить туда дюбели, закрутить шурупы, пришить кольца к ковру и повесить. Можно предложить несколько иной алгоритм - например вешать ковер на рейку или вообще приклеить :) - тогда алгоритм несколько меняется.
Во-вторых - надо воспользоваться инструментами. Например для сверления бетонной стены потребуется перфоратор, для деревянной можно просто вбить гвозди. Нам потребуются дюбели, кольца, шурупы, отвертка (или шуруповерт), молоток.

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

Удачи.

Комментариев нет:

Отправить комментарий