Форум

«Нажмите на кнопку несколько раз» - мой путь в программинге (статья на конкурс)

В университете я учился на информатика-аналитика.

Из нас растили проектировщиков информационных систем. Мы делали все работы, начиная от сбора бизнес требований и заканчивая разработкой схем БД.

Одна из моих курсовых работ была связана с научной разработкой нашей кафедры ИТ. В общем наш заведующий кафедрой придумал, как оценивать знания не с помощью тестов, а с помощью понятийных структур.

Суть метода была в том, что студент должен был оценить свои знания каждого термина из набора. Оценка от 1 до 10. Система ставила оценку студенту на основе распределения его оценок. Предполагалось, что сложные понятия должны оцениваться студентом ниже, а простые - выше. Система использовала базу тестов и сравнивала распределение оценок, которые поставил студент, с идеальными распределениями человека, который очень хорошо разбирался в теме.

Я писал программу, которая позволяла упростить подготовку таких понятийных структур.

Дело в том, что система имела защиту от списывания, и каждому студенту выдавался свой набор понятий. Списки понятий могли пересекаться, но незначительно.

И вот моя программа должна была определять степень похожести двух понятийных структур (списков понятий).

Тогда ещё не было NLU, Python, Elastic search и прочих современных штук.

Я использовал среду разработки Borland Delphi (про лицензию не спрашивайте). Программа имела простой интерфейс в виде 2 окон. В каждый из окон можно было загрузить Excel файл со списком понятий.

Казалось, что задача будет простой. Нужно просто пробежаться по одному списку и каждое понятие сравнить со всеми понятиями второго списка, и таким образом найти одинаковые понятия. Далее просто посчитать долю пересечений.

Однако в процессе написания программы выяснилась одна сложность, которая поменяла всё.

Дело в том, что понятия могли иметь одинаковую семантику, но отличаться окончаниями.

Например:
ER-схема базы данных
ER-схемы баз данных

Существовали ли тогда морферы? Не знаю. Это был примерно 2008 и что-то мне подсказывает...

Я купил очередную карточку интернета, соскарябал защитный слой, прослушал всю композицию «Писк-треск» моего модема и начал искать решение в интернете.

И нашёл!

Это был MS SQL Server с компонентом FullText Search. К тому же бесплатная версия!

Мне пришлось разобраться с клиент-серверной архитектурой, развёртыванием MS SQL Server в локальной сети, драйверами ODBC и OLE DB и самим FullText Search.

Интересно, что тогда были популярны оффлайн базы знаний в виде наборов связанных CHM-файлов. Оттуда я почерпнул много информации.

В конце-концов прога была готова.

Для меня это было прямо «Ваааау». Моя прога - тонкий клиент (!), коннектится к настоящему MS SQL Server (!) через локальную сеть универа (!), использует нечёткое сравнение строк (!) и реально работает!

Но не обошлось без кастылей!

Итак, самое интересное.

Чтобы воспользоваться FullText Search, нужно было сначала загрузить понятийные структуры во временные таблицы БД, затем создать индекс и только после этого отправлять запросы на  сравнение строк.

И вот именно с индексом у нас и не заладились отношения. Я отправлял запрос на создание индекса, запрос запускался, но индекс создавался каждый раз за разное время. В моей программе была кнопка «Сравнить», и если она нажималась до окончания создания индекса, то сравнение списков не происходило.

В идеале, пока индекс ещё не был создан, нужно было дизейблить кнопку «Сравнить».

Но я никак не мог понять, как мне отловить событие успешного создания индекса. В справке не было информации, на кафедре тоже никто не горел желанием помочь.

Поэтому я сделал поистине элегантное решение. Я написал в интерфейсе своей программы, что кнопку «Сравнить» нужно нажимать несколько раз :)

Да-да, о хранимых процедурах я тогда ещё не знал.

Этот опыт позволил мне узнать одну важную вещь о себе: я могу разобраться с нуля даже в самых сложных темах. И даже при наличии серьёзных преград я могу найти обходной путь. Пусть и не совершенный.

Далее в моей жизни было ещё много интересных проектов. Например, я написал программу по расчёту числа операторов для колл-центра. Программа базировалась на математике Марковских цепей.
И она до сих пор жива!
Вот как она выглядит:
https://disk.yandex.ru/i/RibqTz7iN2uS8w

Мне удалось сохранить интерес к программингу по сегодняшний день. Сейчас мне интересна nocode-разработка Android-приложений, но это совсем другая история!..
morozov.e.r
morozov.e.r
26 августа 2023 в 01:26
3
173
Открытая тема
1 балл

Для того, чтобы оставлять комментарии, необходимо пройти авторизацию

Авторизоваться
Здравствуйте! Ваша история успешно прошла модерацию и опубликована.  
moderator
moderator
0 баллов
26 августа 2023 в 11:02
Система массивного Сервиса? Коротко СМС получается.
katerinka_blik
katerinka_blik
0 баллов
28 августа 2023 в 08:53