Прежде чем браться за работу над ПО, призванным решать практическую задачу, нужно серьёзно подумать о том, какой будет внутренняя организация вашей программы. Особенно это касается вычислительных задач - например, задач оптимизации. Для многих программирование ассоциируется в первую очередь с кодингом - реализацией того или иного алгоритма, интерфейса. Но при планировании вам понадобятся навыки уже не кодера, а... математика. К счастью, теория решения подобных задач настолько хорошо разработана, что для составления алгоритма изобретать велосипед вам не придётся. Достаточно немного вникнуть в суть, а после этого можно составить успешную программу для применения на реальном производстве, даже на самых простых языках.
Что же такое оптимизация? Это нахождение оптимального (самого большого или самого маленького) значения некоей функции, которая передаёт смысл нашей задачи. То есть, для решения задачи нам требуется построить модель, в которой реальные понятия будут записаны в виде функции и набора ограничений. Процесс построения такой модели, а также планирование её решения называется математическим программированием. Множество задач решают его подвиды – линейное динамическое программирование.
Нахождение оптимального соотношения цены и качества, организация транспортных развязок и складских помещений, выявление коротких маршрутов – вот далеко не полный перечень хозяйственных, производственных и экономических вопросов, которые решаются методами линейного программирования (ЛП). Главное – чтобы целевая функция и зависимость между переменными соответствовали условию линейности (у линейной функции график выглядит как прямая линия). В некоторых случаях для этого следует вводить дополнительные ограничения. Решение с помощью ЛП является наиболее удобным, поскольку его методы детально разработаны для каждого класса задач. Реализация их возможна даже на Дельфи или Паскале, никаких специальных навыков программирования не понадобится. Даже если вам не придётся выполнять подобные заказы в будущем, задачи ЛП часто решают в университетах, и получить ответ за считанные секунды от программы гораздо приятнее, чем вычислять значения вручную на листочке.
Если же задача сложная, составная, то вместо того, чтобы мучиться над её решением за один приём, стоит воспользоваться методами динамического программирования. Тогда она окажется разбита на множество более простых подзадач, каждая из которых, возможно, будет решена легко и быстро с помощью того же ЛП. Эти методы используются и в задачах вроде поиска на графе, а значит, и в искусственном интеллекте.
Это далеко не единственный пример того, что для решения реальных задач программисту приходится обращаться к математическим наработкам. А потому специалист, ориентирующийся в них, будет цениться гораздо выше и за квалифицированность, и просто за кругозор.