Ссылки:
Проект «Инженерная база знаний программиста»: Робот-программист «Ванюша»
Введение
Основной целью данного проекта является создание эффективной оболочки базы знаний для инженеров-программистов. Это позволит систематизировать знания и обеспечить доступ к ним в удобной форме.
Глава 1. Обучение
1.1. Поиск знаний
Этапы процесса поиска включают сбор необходимой информации из разных источников, её фильтрацию и предварительную обработку.
1.2. Хранение знаний
Организация хранения позволяет эффективно сохранять полученные знания и обеспечивать быстрый доступ к ним.
Тезисы:
- Конечная цель инструментов — формирование полноценной базы знаний.
- Метод исследования: последовательное обучение.
- Хранение промежуточных результатов для дальнейшего анализа.
Основные этапы разработки системы:
-
Выбор задачи: перевести фрагменты исходного кода программы с диалектов языков программирования на общий язык (например, Megi).
-
Цель решаемой задачи: получение описания программного кода, связей исходного кода программы и среды исполнения в виде структурированной базы знаний.
-
Погружение в сущность задачи путём постепенного заполнения базы знаний различными диалектами языков программирования, используя фонды программ с открытым исходным кодом.
-
Установить подцели и разделить задачу на подзадачи.
-
Выявить специфику предметной области.
-
Найти эксперта в соответствующей области.
-
Совместная работа с экспертом над решением конкретных прикладных задач: перевод фрагментов текста на разные языки программирования на единый язык Megi.
-
Выбор необходимых программных средств для решения поставленной задачи.
-
Построение лабораторного прототипа экспертной системы, способной решать определенный класс примеров.
-
Формирование базы знаний: выявление объектов предметной области, установление взаимосвязей между объектами, классификация типов иерархии, деление на классы. Структурирование базы знаний согласно представлению эксперта о структуре предметной области.
-
Реализация необходимого количества итераций по расширению базы знаний, каждая из которых включает добавление новых знаний, проверку их непротиворечивости и модификацию для устранения выявленных противоречий.
-
Определение инструментария для создания системы и приобретение необходимых ресурсов.
-
Разработка документации на систему.
-
Уже на ранних этапах стремиться создать ограниченную, но правильную рабочую модель, позволяющую заручиться доверием эксперта. Использование модульного подхода.
Таким образом, проект направлен на создание комплексной инженерной базы знаний, способствующей повышению эффективности труда программистов и решению сложных технических задач.
Поставим несколько простых вопросов с целью начать собирать крупицы знаний, очерчивая круг проблем для построения инженерной базы знаний программиста.
-
Какие этапы деятельности программиста могут быть автоматизированы роботом-программистом?
-
Что именно должен помнить и, конечно, использовать в своей работе робот-программист?
-
Почему сложно переносить проекты и фрагменты программного кода с одного языка программирования на другой?
Дополнительные размышления
Выделение семантики при разработке языков программирования, создание общей (или хотя бы общепринятой) семантической базы современных языков позволит изменить подход к созданию компилирующих систем в целом. Перевод программ с одного языка на другой станет тривиальной задачей.
Андреев А.Ю., «Современные языки программирования — результаты эволюции», Мир ПК №3, 2001 г.
Инженерная база знаний программиста «Робот-программист Ванюша»
Зачем нужна инженерная база знаний программиста?
Создание и разработка программы для компьютера — увлекательное занятие, которым занимаются миллионы людей по всему миру. Писатель на русском языке звучит значимо и весомо. Вспоминаются имена великих русских литераторов: Александр Пушкин, Фёдор Достоевский и многие другие писатели прошлого и современности.
Однако процесс творчества, написания, отладки и эксплуатации программ — это сложная и многоступенчатая деятельность. Жизненный цикл программного продукта охватывает разнообразные специальности: руководителей компаний, финансистов, менеджеров, дизайнеров и, безусловно, программистов.
Каждый этап жизненного цикла сопровождается определёнными действиями, такими как анализ предметной области, сбор требований, проектирование, кодирование, тестирование, сопровождение и многое другое. Эти процессы создают и обрабатывают большое количество фактов и сущностей предметной области.
Получаемые знания позволяют формировать модели предметной области, описания требований, техническую документацию, архитектурные схемы информационных систем и прочую документацию. На основании этих моделей разрабатывается исходный код программы, пользовательские инструкции, руководства администратора и прочие сопутствующие документы.
В жизненном цикле участвуют специалисты различных ролей: бизнес-аналитики, руководители проектов, инженеры по требованиям, архитекторы, разработчики пользовательских интерфейсов, программисты-кодовщики, технические писатели, тестировщики, сотрудники отделов продаж, администраторы систем, инженеры поддержки и конечные пользователи.
Формализация и автоматизация всех этих ролей — перспектива далекого будущего. Основная цель проектирования инженерной базы знаний программиста заключается в создании методики постоянного накопления, сохранения и использования формальных знаний программиста-кодировщика, а также создания программы-оболочки экспертной базы знаний «Робот-программист «Ванюша». Необходимо сформулировать требования к многопользовательской сетевой экспертной базе знаний, работающей в компьютерной сети Интернет и способной аккумулировать в реальном времени знания и опыт удалённых программистов-кодировщиков.
«Мечтатель!» — скажете вы? Мой ответ: «Это мы можем! Интуиция и опыт…».
Предположение здесь следующее: используемые программы, созданные на разнообразных языках программирования, обладают общими характеристиками и параметрами, порожденными теорией формальной грамматики с целью выполнения программ на объектном языке центрального микропроцессора компьютера. Обучить робота «понимать» код программы на языке программирования гораздо проще, чем научить компьютер понимать родную человеческую речь.
Чего мы ожидаем от инженерной базы знаний программиста?
Возможности робот-программиста:
-
Накопление статистики: робот-программист будет накапливать статистическую информацию, работая с исходными кодами программ на разнообразных языках программирования.
-
Трансляция программ: робот-программист осуществит перевод текстов программ с одного языка программирования на другой.
-
Генерация нового кода: робот-программист создаст новый программный код для целевого языка программирования, основываясь на грамматике, семантике, синтаксисе и знании специфики целевого языка программирования, а также учитывая область приложения.
-
Генерация тестов: робот-программист автоматически сформирует тесты для проверки работоспособности создаваемых программ.
-
Наращивание опыта: робот-программист будет накапливать позитивный опыт экспертов-программистов в базе знаний, фиксируя нюансы предметной области, для которой создаётся программное обеспечение.
-
Использование накопленного опыта: помощь программистам в извлечении и применении формализованных знаний из инженерной базы знаний, учитывающих специфику целевых языков программирования и сред исполнения программ.
Девиз: «Мы отдыхаем — компьютер работает!»
Заключение
Может ли робот-программист заменить человека?
Нет, робот-программист предназначен лишь для помощи и оптимизации труда программиста-человека. Его роль — сотрудник, главный помощник, участник человеко-машинной системы. Я верю, что такая система обретёт новые свойства и возможности, способные существенно повысить скорость и качество разработки программного обеспечения.
Компьютеру невозможно самостоятельно обособиться от человека и стать самостоятельным субъектом цивилизации, даже объединённым в глобальную сеть. Наша цель — совершенствование технологий, повышение производительности и сокращение рутинных операций.
Какой инструмент или язык программирования выбрать для обучения робота-программиста?
Идеально подходящий инструмент должен быть свободен от языковых ограничений и поддерживать генерацию кода для любых целевых аппаратных платформ. Для этого необходимо выявить общую основу среди различных подходов и языков программирования, создать механизм непрерывного обучения и накопления опыта в инженерной базе знаний.
Финальная стратегия обучения робота-программиста должна имитировать процесс приобретения опыта и навыков реального программиста, включая способы описания универсального языка программирования, сохранение и применение фактических и правилых знаний, помогающих многократно повысить производительность труда программиста.
Цели и задачи:
- Аккумулирование знаний: создание универсальной инженерной базы знаний программиста, содержащей факты и правила, отражающие опыт сообщества программистов в конкретных предметных областях.
- Разработка единой инфраструктуры: поддержка трансляции программ с одного языка программирования на другой, быстрая генерация кода и тестов.
- Постоянное развитие и обновление: регулярное пополнение базы знаний актуальной информацией и результатами успешных практик программирования.
Итоговая цель: превращение робота-программиста в надежного помощника, увеличивающего производительность и качество труда программиста-профессионала.
