Вот уже 30 лет занимаюсь программированием. Количество языков, на которых я написал хотя бы одну программу, перевалило за 45 штук. За это время я сильно разочаровался в программировании, эвээмах и задумался - а почему мои ожидания не оправдались? Почему не сбылись надежны на безудержный рост личной производительности труда, усиление интеллекта и снижение порога трудности при штурме проблем тысячелетия?
Точноно ответа пока нет, но надежда не угасает. Захотелось взглянуть на программирование с птичьего полета. На сайте
tiobe есть картинка трендов популярности языков:
Java(20% рынка), C(15%), C++(10%)...
Видно, что почти у всех лидирующих языков с 2001го года тренд идет вниз. Perl(5.5%) также на спаде с 2004. Visual Basic(10%) года.держится на одном уровне и это понятно - его держит привязка к продуктам Microsoft, а не его собственные достоинства. На подъеме языки, связанные с интернет- и сетевыми технологиями: PHP(10%), Python(5%), C#(4%), Ruby(2.6%), JavaSctipt(3%).
В десятку наиболее популярных языков не вошел ни один язык AI, т.е. искусственного интеллекта. Оценка динамики по категориям языков:
Category / Ratings June 2008 / Delta June 2007
Object-Oriented Languages 56.0% +3.9%
Procedural Languages 41.5% -2.4%
Functional Languages 1.8% -0.3%
Logical Languages 0.8% -1.2%
Category / Ratings June 2008 / Delta June 2007
Statically Typed Languages 58.4% +0.4%
Dynamically Typed Languages 41.6% -0.4%
Можно также заглянуть в
http://langpop.com/ Из таблиц видно, что лидируют объектные языки со статическими типами, и отрыв продолжает расти. Некоторые важные тенденции на сайте не отражены: продвинутые графические средства (Qt, Delphi, Visual Basic...) позволяют объектное конструирование. Т.е. человечество стремится вспять - от использования языка и алфавита к пиктограммам и жестам. Следующий шаг - выращивание программных систем и ценозов, но как скоро он будет сделан?
Вероятно, для промышленного применения эволюционно-генетических методов в программировании нужны более развитые вычислительные параллельные среды. Но к таким средам прогресс сейчас идет стремительно.
Можно сделать вывод: для желающих сегодня иметь большую зарплату нужно изучать Java, C, C++. Для тех, кто мечтает быть программистом завтрашнего дня пригодятся PHP, Python и т.д. К услугам программистов-футуристов средства Artificial Intelligence.
Где та волшебная информационная глина, о которой мечталось в юности? Почему
закон Мура не работает в области информации? Некоторые достижения есть - тот же датамайнинг, но хочется неизмеримо большего. С задачами исследования и анализа данных и систем я сталкиваюсь постоянно. И зело надоело чувствовать себя полуслепым котенком с клубком ниток, когда не знаешь - за что нужно ухватиться, чтобы размотать клубок. Общий подход обычно такой: а давайте-ка мы попробуем применить Х, где Х - это вейвлет-анализ, генетические алгоритмы или простая комбинаторика.
Интуитивно чувствуется, что существует предел извлекаемости информации из материала при заданных условиях и возможностях за заданное время любыми средствами и методами. Но где взять столько
теорем Котельникова, чтобы покрыть все множество задач? Определить этот предел решабельности в реальной жизни крайне сложно.
Паразительно, как мало люди думали над общим каталогом задач и методов, которыми эти задачи решаются. По пальцам одной руки можно пересчитать такие работы, как монады Лейбница, градиентный метод Ньютона, шкала сложности задач Генриха Альтшуллера или энтропийный подход Шеннона.
А ведь это все кажется не таким уже и сложным: для некоторых типов проблем такие каталоги существуют.
Взять, например, классическую задачу коммивояжера, по поиску кратчайшего пути через все города, причем каждый город можно посетить только один раз.
Известно, как и какие методы ”берут” задачу коммивояджера. А если мы начнем ее преобразовывать? Введем неполноту данных в условия задачи - не про все города мы знаем изначально? Или, скажем, часть дорог меняет свое состояние в процессе решения? Или города имеют не одинаковую ценность и более ценные лучше посетить вначале? Возможно, есть корреляции между решениями? Или есть противник, который целенаправлено мешает решать задачу?...
Напрашивается следующий шаг - поставить идею Альтшуллера на количественно - программную основу, что не так уж и сложно:
· - создать реестр тестовых задач (например, на основе задачи коммивояджера)
· - создать реестр методов (градиентный, генетический, мат-программный…)
· - испытать все это и выяснить, какие задачи какими методами как берутся.
Общий объем работы на пару лет, при условии наличия хорошего инструментария. Планируемые результаты:
1. Некоторая процедура диагностики проблемы, пересчет в шкалу Альтшуллера
2. оценка верхнего барьера решаемости разными методами
3. технология выбора и проектирования решающей системы
4. получение и тестирование решения проблемы
5. Инструкция по применению метода
Отсчет пошел 2008/06/17