Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
innov_review.doc
Скачиваний:
4
Добавлен:
28.08.2019
Размер:
1 Mб
Скачать

I.3.2. «Ненаучный» характер технологических знаний

Современная технология во многом опирается на научное знание, и во многих отношениях была бы невозможна без фундаментальной научной базы, но все-таки инженеры и технологи используют также и знания, не имеющие научного обоснования и не описанные наукой. Люди строили лодки и даже корабли до открытия закона Архимеда, ходили под парусом до создания аэродинамики, выплавляли железо из руды до изучения окислительно-восстановительных реакций, рисовали картины и красили стены масляными красками до открытия полимеров («засыхание» масляной краски, в действительности, представляет собой реакцию полимеризации), использовали полупроводниковые диоды до создания теории P-N проводимости (эта история подробнее рассказывается в разделе I.4.1).

Case: разработка программного обеспечения

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

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

В действительности, задача программиста еще сложнее. Используемые в теории вычислений модели, например знаменитая «машина Тьюринга», представляют собой устройства с неограниченой памятью для данных (бесконечной «лентой») и, в действительности, с неограниченной программной памятью. Реальные же вычислительные устройства имеют ограниченный объем памяти, поэтому, строго говоря, неверно даже говорить о том, что современный компьютер эквивалентен машине Тьюринга. В большинстве случаев нельзя даже определить, какому именно конечному подмножеству машины Тьюринга эквивалентен данный конкретный компьютер.

Программист должен написать для реального (то есть неэквивалентного машине Тьюринга) компьютера программу ограниченного объема, которая выдает результат, используя не только конечное, но и ограниченное время и ограниченный объем памяти для промежуточных данных. При этом ограничены не только ресурсы, которыми может пользоваться программа, но и те ресурсы (в первую очередь - время), которые программист может потратить на разработку. Во многих случаях – например, при разработке программных комплексов для поддержки бизнеса – недостаточно формализованы, а зачастую и просто неясны также и требования, которым должны удовлетворять исходные данные и результаты работы программы. Все это делает практическое программирование занятием не только неалгоритмизуемым, но даже и, если можно так сказать, нетехнологизируемым. Алгоритмизации и технологизации поддаются лишь отдельные аспекты процесса разработки ПО; совершенствование технологий и инструментальных алгоритмов (например, компиляторов или операционных систем) приводит к повышению производительности труда программистов, но не может привести – и, по видимому, никогда не приведет, если только не удастся построить искусственный интеллект – к полному устранению программиста из этого процесса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]