пятница, 21 октября 2011 г.

мысли о программировании

mercedes_0Я уже довольно давно работаю программистом, и многие говорят, что у меня неплохо это получается. В последние годы меня не покидает ощущение, что развитие искусства программирования происходит в не очень правильном направлении. Практически любая программа статична, она лишь описывает последовательность действий, которую компьютер с пугающей точностью выполняет. Наверное корни этого явления стоит искать в том, что компьютеры создавались как вычислительные машины. Когда-то давно они такими и были. Но в наше время компьютер – это уже гораздо больше чем большой калькулятор.


аксоны и дендритыМне кажется, что и программы, и компьютеры должны быть устроены иначе.
Программа должна быть “живой”, состоять из самостоятельных, но активно взаимодействующих  друг с другом компонентов, каждый из которых самостоятельно живет, развивается, умирает, и все это происходит непрерывно во времени. Говоря языком программистов – каждый объект, каждая операция, каждое взаимодействие выполняется в своем потоке, параллельно с миллионами других операций. Взаимодействие между компонентами программы должно происходить не потому, что кто-то вызвал метод объекта по ссылке, а потому, что таковы законы пространства, в котором они существуют. Яблоко падает на голову задумавшемуся философу не потому, что он потянул за ветку, а потому что оно созрело. И философ получает по затылку, даже если не был изначально спроектирован для этого :-).
Я не знаю, и пока даже не могу предположить, как будут устроены такие программы, как будут решаться вопросы синхронизации и защиты данных, и прочие сугубо программистские проблемы. Но я знаю, что в окружающем меня мире великое множество событий происходит одновременно, и вопросы синхронизации как-то решаются (если вообще возникают). И я уверен, что это происходит без использования критических секций и mutex-ов.
Иногда мне кажется, что функциональная парадигма может как-то приблизить нас к “живым” программам. Декларативный подход похож на писание законов пространства, в котором “живут” программные компоненты. Но для меня все равно остается непонятным, как заставить это пространство существовать непрерывно во времени. Возможно, все дело в том, что существующее аппаратное обеспечение не приспособлено для решения таких задач – ведь это всего лишь вычислительные машины, хоть и довольно шустрые.
Необходимость выполнения математических расчетов когда-то привела к появлению компьютеров – устройств, способных на выполнение произвольных вычислительных операций по заданной программе. IT индустрия в целом, и программирование в частности, находится в самом начале большого эволюционного пути. На этом пути нас ждут еще самые неожиданные открытия. По мере развития индустрии появляются новые задачи, которые несколько десятилетий назад никто не мог себе даже представить. Должен произойти качественный скачок, которые приведет к возможности создавать настоящие информационные пространства, существующие по своим законам.

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

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