13-я КОМНАТА: Право на ошибку
13-я КОМНАТА: Право на ошибку
Описывая недавно 8-ю версию FineReader’а, Евгений Козловский совершенно верно отметил недостаток у программы «ума». Это не проблема конкретной разработки, - если посмотреть на остальной софт, этого самого «ума» мы увидим не больше. С помощью сегодняшних технологий можно научить программу выполнять корректные действия во всех ситуациях, которые предварительно описаны (точно или по граничным условиям - не столь важно). Адекватно же вести себя в ситуации незнакомой - увы.
А сделать все возможные ситуации знакомыми для программы - нереально. Для того чтобы электронный переводчик понимал все слова языка, надо забить в программу полный словарь. Если словарь слишком велик, можно придумать правила формирования слов с использованием приставок, суффиксов и окончаний (и добавить неизбежные исключения). Теоретически - реально, но это будет еще далеко не переводчик. Кроме слов, нужны их сочетания - снова придется их все описать. И снова вводить исключения, которых на этом этапе значительно больше. Труднее, но тоже возможно. А еще - целые фразы и предложения… Зато сам Евгений, к примеру, без труда поймет слово, вообще отсутствующее в словаре, образованное из пары нецензурных корней, приставки да суффикса, не подходящих ни к одному корню по правилам языка. Причем он также поймет, что смысла в этом слове нет вовсе, а есть только эмоции. Надеяться на то, что в ближайшие лет десять аналогичное заключение сделает электронный переводчик, не приходится. Ведь зачастую смысл фразы, написанной пусть и на родном языке, становится понятным даже не после прочтения, а в результате осмысления текста целиком (хороший заголовок к статье - из этой категории).
Но ведь и образцовый исполнитель подобных задач - человек, если не считать инстинктов, не рождается умным сам по себе, он приобретает способность мыслить вместе с постепенным накоплением информации, запоминая ее и соотнося с другой информацией. Отличие в том, что процесс человеческого развития с момента рождения опутан обратными связями и есть некоторая свобода в выборе действий. Действие приводит к некоторым последствиям, приятным либо неприятным, но в любом случае добавляющим информацию о правильности сделанного. У нынешних электронных переводчиков, программ распознавания и прочих, претендующих на вторжение в область искусственного интеллекта, таких обратных связей нет уже потому, что решаемая ими задача заканчивается раньше того момента, когда подобная связь могла бы образоваться. Не будет же пользователь после получения машинного перевода объяснять программе, в чем она не права, - он-то свой результат уже получил, а поправить ошибки проще самому…
Ситуация весьма напоминает процесс управления коллективом. Зачастую сделать дело своими руками проще, чем учить этому других. Но давно известно, что первый путь не приводит к прогрессу. Если перенести сей опыт на программирование, получается, что от обучения никуда не уйти. Кроме того, машинной системе надо в некоторых пределах позволить совершать пробные шаги, позволяющие ей периодически наступать на грабли. А стопроцентного результата все равно никогда не достичь по одной простой причине: в упомянутых областях мы даже для самих себя не можем сформулировать четких правил игры… Придется признать, что ошибаться свойственно не только людям.
Кстати, давно хотел наладить обратную связь с читателями, которым по разным причинам неудобна или недоступна электронная почта. Благо уже есть опыт Сергея Вильянова, опубликовавшего как-то номер мобильного телефона для SMS-отзывов. Тогда никого особо не смутила даже указанная стоимость сообщения в израильских шекелях (на самом деле, конечно же, это была шутка). Итак, номер: 8-916-523-00-43. SMS принимаются без ограничений, но в переписку и переговоры голосом редакция не вступает. Кроме общих высказываний и пожеланий можно оценивать отдельные статьи в виде «номер-страница-оценка» (последняя по пятибалльной шкале). И на сей раз без всяких шуток: стоимость отправки SMS на этот номер не отличается от стоимости обычных SMS.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Где искать ошибку
Где искать ошибку Вот на что нужно обращать внимание в первую очередь:? любые входные данные, будь то из сети, из файла или из командной строки;? передача данных из вышеупомянутых источников входных данных во внутренние структуры;? использование небезопасных функций
Где искать ошибку
Где искать ошибку Любое приложение, которое принимает данные от пользователя и передает их функции форматирования, потенциально уязвимо. Очень часто этому греху подвержены приложения, записывающие полученные от пользователя данные в протокол. Кроме того, некоторые
Где искать ошибку
Где искать ошибку Любое приложение, в котором производятся арифметические операции, подвержено этому греху, особенно когда некоторые входные данные поступают от пользователя и их правильность не проверяется. Особое внимание обращайте на вычисление индексов массивов и
Где искать ошибку
Где искать ошибку Любое приложение, обладающее перечисленными ниже характеристиками, подвержено риску внедрения SQL:? принимает данные от пользователя;? не проверяет корректность входных данных;? использует введенные пользователем данные для запроса к базе;? применяет
Где искать ошибку
Где искать ошибку Так просто и не скажешь, нет характерных признаков. Самый эффективный способ – провести анализ
Где искать ошибку
Где искать ошибку Любое приложение, обладающее перечисленными ниже признаками, уязвимо для атаки с кросс–сайтовым сценарием:? Web–приложение принимает данные из строки запроса, заголовка или формы;? приложение не проверяет корректность данных;? приложение отправляет
Где искать ошибку
Где искать ошибку Этот грех обычно проявляется, когда:? приложение пользуется сетью;? проектировщик не обращает внимания на риски, связанные с работой в сети, или недооценивает их.Например, типичный аргумент звучит так: «мы ожидаем, что этот порт будет доступен только из
Где искать ошибку
Где искать ошибку Есть несколько мест, на которые следует обратить внимание, и прежде всего это недостаточно тщательная проверка подлинности сертификата. Ищите места, где:? используется SSL или TLS;? не используется HTTPS;? ни библиотека, ни приложение не проверяют, что
Где искать ошибку
Где искать ошибку Места проявления этого греха найти несложно. Используются ли в программе традиционные методы или «самописная» система проверки пароля без дополнительных механизмов аутентификации? В последнем случае программа «живет во грехе». Обычно с таким грехом
Где искать ошибку
Где искать ошибку Чтобы обнаружить ошибки управления доступом, ищите в коде места, где:? устанавливаются элементы управления доступом;? разрешение на запись дается низко привилегированным пользователям; или? создается объект, без явного задания прав доступа к нему;? этот
Где искать ошибку
Где искать ошибку Вашу программу можно заподозрить в грехе, если:? она обращается к файлам, имена которых задаются извне;? она обращается к файлам исключительно по именам, а не по описателям или дескрипторам;? она открывает временные файлы в общедоступных каталогах, причем
Где искать ошибку
Где искать ошибку Этому греху подвержено любое приложение, выступающее в роли клиента или сервера в сети, где соединения аутентифицируются, а также в тех случаях, когда по какой–то причине нужно знать, кто находится на другом конце соединения. Если вы просто решили
Где искать ошибку
Где искать ошибку Гонки чаще всего возникают при следующих условиях:? Несколько потоков или процессов должны осуществлять запись в один и тот же ресурс. Ресурсом может быть разделяемая память, файловая система (например, когда несколько Web–приложений манипулируют
Где искать ошибку
Где искать ошибку Согрешить можно в любом приложении, которое выполняет аутентификацию по сети в ситуации, когда для этого требуется установить соединение, защищенное криптографическими методами. Фундаментальная проблема в том, что автор не осознает, что соединение
Где искать ошибку
Где искать ошибку Этот грех может проявиться в любой ситуации, когда нужно хранить некоторые данные в секрете, не допуская даже случайного угадывания. Вне зависимости от того, используется шифрование или нет, наличие хорошего источника случайных чисел – одно из ключевых
Где искать ошибку
Где искать ошибку С общей точки зрения, ошибка состоит в невнимании к тому, как типичный пользователь будет работать с частями программы, относящимися к безопасности. Эту ошибку совершают многие, но явно указать на нее сложно. Мы обычно смотрим, предприняты ли в проекте