Всякая профессия начинается не с инструмента, но со взявших его рук. Так и программирование начинается не с Hello, world и даже не с того, как вы сели на стул. И даже не с того, как вы приобрели машину. Но с того, как вы сформулировали проблему, которую хотите решить. Если вы не хотите решать проблемы людей при помощи автоматизации, то программирования — не ваша работа.
Всякая профессия призвана по своей сути решать чужие проблемы, компенсируя чужую лень делать что-то. И особняком в ряду стоит программирование, потому что оно — суть автоматизация труда или чего-то другого, будь то общение или развлечения.
Врач оперирует. Программист — пишет алгоритм для робота, делающего операции. Архитектор чертит чертёж — программист пишет программу, которая по чертежу создаст модель здания и просчитает его поведение, включая поправки на ветер, коммуникации, распределение нагрузок на опоры и так далее.
Геолог ищет нефть. А что делает программист? Пишет программу, которая по геологическим данным будет прогнозировать расположение месторождений. Наконец, бухгалтер вводит финансовую операцию — и хорошая база данных 1С вместе с конфигурацией посчитают налоги по актуальному законодательству и сведут дебет с кредитом, а плохая конфигурация — сами понимаете. И так далее — практически во всём.
Откуда вывод: программирование — сложнейшая инженерная область. Потому, что задача программиста — автоматизация любого труда. Причём задача эта — сделать программу не только быстрой и эффективной, но и удобной. Неудобная программа требует больше времени на освоение и привыкание, чем удобная, но медленная — на работу.
К примеру, браузер А грузит страницу медленнее, чем браузер Б, на полсекунды. Но у браузера А неудобная навигация и пользователь каждый раз, каждый раз тратит своё время и нервы (а это самое драгоценное для нас) на эти чёртовы неудобные кнопки! А психологический комфорт использования переоценить сложно. Это всё я говорю к тому, чтобы особенно подчеркнуть важность человека и его проблем в принципе. Я говорю совершенно очевидные вещи, чтобы вывести их на сознательный уровень.
И вот свежайший, буквально сегодняшний смешной пример «Из жизни эникея». Мой племянник играет в игру с использованием OpenAL. Он нечаянно вырвал наушники из гнезда, совсем на чуть-чуть, и, конечно, OpenAL на чистом английском пожаловалась, что не может создать устройство. «Какая жаль!» Всем бы жилось легче, если бы сообщения об ошибках были локализованы и человекопонятны, то есть — с учётом хотя бы простейшей наиболее распространённой проблемы пользователя, пользователя, чёрт возьми! Благо OpenAL — OpenSource и я могу вместо того, чтобы просто жаловаться, взять и предложить фикс. Например, так: «OpenAL не может создать устройство. Проверьте соединение с динамиками или наушниками, неполадки с аудиоустройствами». А ныне мне пришлось идти и смотреть на иконку отключенного устройства в Windows. А если бы это было учтено, то сказывалось бы на доверии к продукту наилучшим образом.
И именно это — ориентир на человека — то, чему нужно учить абсолютно любого джуниора в первую очередь, а вовсе не Hello, world. Программы пишутся для людей, а не для того, чтобы показать, какие мы умные и что мы «могём», а точнее — могем.
Кстати, принимаю рекомендации по удобочитаемоссти статьи, сокращения, обобщения и так далее. Пишу для людей.
Ещё пример, следующего дня. Windows-программа diskpart. Как известно, в виндоус принято вызывать хелп вот так: /?
DISKPART> create partition /?
Microsoft DiskPart, версия 10.0.14393.0
EFI - Создание системного раздела EFI.
EXTENDED - Создание расширенного раздела.
LOGICAL - Создать логический диск.
MSR - Создание резервного раздела Майкрософт.
PRIMARY - Создание основного раздела.
DISKPART> create partition logical /?
Для этой команды указаны недопустимые аргументы.
Чтобы получить дополнительные сведения о данной команде, введите HELP CREATE PARTITION LOGICAL
Вам это не кажется странным? Мне тоже. Напоминает статью про PHP — фрактал плохого дизайна, где нет строгой конвенции именования функций.
Ещё веселее, когда запускаешь cmd и делаешь что-то вроде
cd c:\ && dir /b/s | findstr "\.docx$" > list.txt && list.txt
И, конечно, имена файлов на русском из-за дефолтной кодовой страницы 866 превращаются в чушь. И, конечно, я могу исхитриться и сделать удобно (и снова, конечно же, я знаю об Everything и она у меня стоит), но — так или иначе — это не отменяет проблему, а такие вещи снижают уровень доверия к системе, уровень её разумной предсказуемости. И это — моё время, моя жизнь и я как клиент заплатил деньги за то, чтобы мне было удобно и хорошо. Соответственно, совершенно другое отношение к OpenSource: нашёл ошибки или неудобство, сообщи как минимум, как максимум сделай исправление сам. И скажи спасибо, что тебе чужой труд достался вообще даром…
Кроме того, когда человек чувствует, что продукт сделан для него, это порождает синергию, новые идеи. Например, прекрасный в своей парадоксальности сервис будист, так лии иначе решает проблему пробуждения и да, проблему одиночества для одиноких. И фактически из-за человеческого отношения становится ещё и сетью знакомств, наверняка гораздо более эффективной в сравнении с типичными решениями, хотя, конечно, выверенных данных у меня нет, но это понятно интуитивно.
Так фейсбук, решающий в начале проблему общения сокурсников, стал одним из решений для взаимодействия в принципе, синергией порождено, например, такое понятие, как маркетинговый аккаунт. А почему? Потому, что людям удобно и хорошо! И захотелось ещё удобнее… И вообще, абсолютно любой успешный стартап решает проблему. Делая это быстро, приятно, с комфортом. И в этом смысле, когда я запускаю diskpart, я ожидаю от программы запрос: «Для режима мастера нажмите M, для режима строки нажмите ВВОД». При выборе режима мастера программа опрашивает меня и делает конкретную операцию. Быстро и удобно. Профит! И доверие к системе повышается, и зная, что она удобная, начинаешь рекомендовать её, и так далее…
Да, да, конечно же, существуют вещи сложнее, чем создать пару разделов на диске и при работе с зеркалами томов и массивами дисков целесообразно использовать сценарии diskpart. Но так или иначе всё сведётся к человеку, использующему программу. И если это простой пользователь, узнавший о преимуществе разбиения дисков, то разумно ему предложить мастер, а если это администратор парка машин с космическим количеством дисков, то для него разумно предложить IDE разработки сценария и их шаблоны.
И, кстати, во всём этом — одна из главных проблем освоения компьютера как такового. Люди старшего поколения «автоматически» доверяют всё знающим людям, понимая, что давно отстали от прогресса. Знаюшие люди — программисты. И вот человек садится за ту же Windows… и понимает, что перед ним — экран с какими-то картинками. Никаких пояснений. Хотя, чёрт возьми, «интуитивно понятный интерфейс»! А человек понятия не имеет, что со всем этим делать и чувствует себя «динозавром». Совсем другое дело, когда ОС загружается и при соответствующих настройках (предполагающих, например, что за компьютер сел пенсионер) показывает вводный ролик: мол, вот вам мышь, вот вам экран, вот так мышь управляется… Но ничего этого (по моему опыту, поправьте меня, если я не прав) зачастую нет, было в Vista и в школьных редакциях ALT Linux — тоже есть. И это очень радует.
Люди старшего поколения считают программистов компетентными. Да. А теперь представьте, что вот такой человек столкнулся с банально неудобной программой. Что тогда делает человек? Пугается! И это нормальная реакция… И тут надо сказать, что лет через 40 мы с вами будем «динозаврами» куда большими: прогресс ускоряется… Помните об этом. Особенно хорошо помните об этом, когда делаете интерфейс. Давайте будем заботиться о людях.
Во второй части я напишу о том, как программист может позаботиться о себе. Об организации рабочего места и да, напомню лишний раз о здоровье и подходу к его сбережению. Безопасная работа с инструментом — естественная часть культуры в профессии, уважения к ней. И как, например, шахтёры работают в касках, мы — по крайней мере в идеале — должны работать в очках, защищающих глаза от утомительной сине-фиолетовой части спектра и со специально подобранным фокусным расстоянием.
Организация работы в условиях автоматизации — вопрос, на мой взгляд, очень интересный, важный и заслуживает отдельного внимания. Очень важно здесь не быть сапожником без сапог, используя все возможные блага, предоставленные программистам программистам. И только после этого, если вы чувствуете кайф от предоставленных возможностей, имеет смысл писать Hello, world и всё прочее. Если же вам скучно в автоматическом мире, если вы не получаете удовольствия от того, что «Оно работает!», то скорее всего программирование не для вас.
И, наконец, когда мы приступим к алгоритмам, структурам данных, к математике и всему остальному — упор будет сделан на людей. На мышление людей, сущность идеи, на то, как человек приходил к тому или иному решению проблемы. И это объективно даст гораздо больше понимания, (а значит — владения), чем просто рассказ, что есть вот такая структура данных (такие-то способы добавления и удаления элементов в ней) и такой-то алгоритм, а есть ещё кучка остальных… Примерно как в анекдоте: «Третий раз объясняю… сам уже понял, а они всё никак». Да, когда человек задумывается, как научить других, то учиться сам.
Очень надеюсь, что такой, ориентированный на человека подход окажется интересным и найдёт сторонников. Наверняка очень и очень многие люди так или иначе понимают изложенное. Это вполне очевидные вещи. И задача таких постов — просто закрепить их в сознании, напомнить о них.
У меня всё.
Комментарии (57)
Gitkan
18.06.2017 00:53Во второй части я напишу о том, как программист может позаботиться о себе. Об организации рабочего места
Видел я программистов у которых 90% рабочего времени уходило на тюнинг рабочего места и 10% времени они работали чрезвычайно эффективно =)
oleg_gf
18.06.2017 09:44+6В заголовке статьи в слове «гумано» где ошибка — не хватает «н» или лишняя «м»?
stranger777
21.06.2017 15:49Оценил))) даже из гуано делают духи. А духи исторически по одной из версий появились в Европе, когда надо было решать проблему дурного запаха, а культуры регулярного мытья ещё не было. Оттого-то и был мывшийся единожды в жизни европейский король… а королевы гордились, что моются раз в месяц. Исторические факты. Странные люди эти европейцы, короче говоря. Насчёт н даже не сразу понял, что ошибся.
Sirion
18.06.2017 13:46+1«Я считаю, что неудобные программы — это плохо, давайте писать удобные программы'.
Какой-то чудовищный наивняк и резонерство. Улучшение UX — процесс, требующий времени и денег, потенциально бесконечный и, что ещё более важно, с убывающей предельной полезностью. Неизбежно наступает момент „и так сойдёт“, когда дальнейшие работы в этом направлении перестают окупаться. И часто этот момент наступает довольно рано. Соответственно, „гумано-ориентированое программирование“ — это идея, что нужно пойти против рыночка и потратить сотни нефти на радость юзерам и себе в убыток.stranger777
18.06.2017 21:31Если прогрмму не купит пользовател(и) или (он же) не пожертвует свои деньги на опенсорс, то никакого, ка вы сказали, «рыночка» не будет.
И конечно, сами программисты — тоже люди Отсюда имеем кучу методологий в разработке проекта. И маркетологи — тоже люди. И отсюда тоже имеем кучу подходов. И, соответственно, проект нужно делать так, чтобы его было потом удобно продавать. Почему Windows популярна? Потому, что в ней есть баланс ориентации на пользователя с одной стороны и на рынок — с другой. И есть заработанные деньги, а на них продолжается развитие и поиск баланса в ориентации.
Когда стали навязывать Win10 — баланс потеряли. Потом извинялись. А почему? потому, что продукт в конечном счёте для людей.Sirion
19.06.2017 08:35Возможно, я немного идеалист, но как-то у меня по жизни сложилось мнение, что основную ценность программы представляет функционал, а не интерфейс. Никому не нужны красивые кнопочки, которые делают ничего. UX'ом занимаются по остаточному принципу. В случае опен сорца или узких ниш без конкуренции — занимаются тяп-ляп. Там, где работает рыночек — ровно столько, чтобы получить конкурентное преимущество. Вылизывать интерфейс до идеального состояния мало кто захочет, мало кто может себе позволить и (немаловажно) мало кто сумеет. причём все эти три «мало кто» не тождественны, а образуют некую диаграмму Венна, с маленьким-маленьким пересечением.
Короче, нельзя просто сказать «делайте удобные интерфейсы», это утопия. У того, что они такие, как сейчас, есть причина, точнее, комплекс причин. Чтобы что-то изменить, нужно влиять на этот комплекс, а не писать хабрапосты с неуклюжими заголовками. Иначе получается как-то так:
Иногда, глядя с крыльца на двор и на пруд, говорил он о том, как бы хорошо было, если бы вдруг от дома провести подземный ход или чрез пруд выстроить каменный мост, на котором бы были по обеим сторонам лавки, и чтобы в них сидели купцы и продавали разные мелкие товары, нужные для крестьян. — При этом глаза его делались чрезвычайно сладкими и лицо принимало самое довольное выражение, впрочем, все эти прожекты так и оканчивались только одними словами.
stranger777
19.06.2017 16:38Вы правы. Абсолютно. Я тоже «немного идеалист» и считаю, что удобство использования — это часть функционала. К примеру, мы можем, конечно, сколько угодно плеваться на «электронное правительство», но при всех его недостатках там есть, как правило, одна кнопочка, увеличивающая шрифт для слабовидящих. А помните сколько шума было вокруг приспособления вк для слепых? И теперь, так или иначе, вк делают удобным для слепых, повышая элементарное человеческое доверие к системе. И почти наверняка они теперь безо всякой рекламы получили приток слепых пользователей. И да, это можно рассматривать как конкурентное преимущество. Потому, что другие сети этого не сделали.
И о красивых кнопочках как раз не говорю. Если их неудобно жать, эти кнопочку, то я скорее выберу чуть-чуть помедленнее программу, но с удобством:
К примеру, браузер А грузит страницу медленнее, чем браузер Б, на полсекунды. Но у браузера А неудобная навигация и пользователь каждый раз, каждый раз тратит своё время и нервы (а это самое драгоценное для нас) на эти чёртовы неудобные кнопки! А психологический комфорт использования переоценить сложно.
Точно так здание без пандусов — это плохо спроектированное/построенное здание. А между тем мой местный отдел милиции именно такой. Благо, люди там нормальные.
Или вот пришёл я в клинику Фёдорова за новыми очками, а там номера кабинетов контрастные, их видно хорошо… И сразу чувствуешь, что о людях заботятся и можно спокойно довериться персоналу.
И я каждый день сталкиваюсь с неудобствами, будучи инвалидом-опорником. То есть мне как раз очень хорошо известно, насколько важно удобство использования на самом деле.
Или вот бионический ключ, который подстраивается под размер болта, становясь универсальным в своём удобстве — прекрасная вещь! Она, конечно, не заменит традиционные ключи полностью (есть места, куда удобно залезть только ключом), тем не менее.
exchg
18.06.2017 20:33Сборник притянутых за уши обобщений. Кто такие все к которым апеллирует автор? Откуда уверенность, что все люди думают и воспринимают одинаково?
Потому, что задача программиста — автоматизация любого труда.
А люди которые пишут программы которые не автоматизируют труд, это не программисты?
stranger777
18.06.2017 20:43А люди которые пишут программы которые не автоматизируют труд, это не программисты?
потому что оно — суть автоматизация труда или чего-то другого, будь то общение или развлечения.
Как видно, очень много проблем и недопониманий исходит из простого невнимательного чтения. В конечном итоге компьютер — автомат. Как его ни поверни. И если бы вы читали внимательно, то увидели бы, что я в начале задаю вопросы и принимаю поправки к тексту.exchg
18.06.2017 21:52+2Ну ок, уточню вопрос, люди которые пишут программы, которые не автоматизирует ни труд, ни чего-то другое не программисты? Потому, что факт того, что компьютер есть автомат никак не связан с тем, что его функция и назначение всех его программ автоматизировать. Несмотря на то, что изначальная его функция считать.
Но это все не так важно, как вопросы о том откуда уверенность, что ВСЕ люди думают и воспринимают одинаково? Откуда уверенность, что все ожидает одного и того же от diskpart и считают, что у него что-то неправильно с интерфейсом? Зачем притянуто про пожилых людей? У меня отцу 65, сидит и пользуется компьютером себе, кстати под линуксом. При столкновении с неизвестной программой или непонятным поведением он делает все что угодно, но только не ПУГАЕТСЯ. Зачем был притянут этот образ из конца 90х? Обучающие ролики, типс оф зе дэй и подобное закончили вставлять в ПО ближе к середине 2000, вы предлагаете все это вернуть назад? А зачем? Какую актуальную задачу вы решаете, сделать так чтобы все программы работали как вам удобно?
На основании чего было определено кому программирование подходит, а кому нет? Удовольствие от того, что оно работает? А может правильней чувствовать священный трепет? А если не удовольствие, а удовлетворение или чувство выполненного долга, то все, иди гуляй?
Зачем эти штампы были собранны в одну кучу? Чтобы сказать, что программы должны быть удобны и для этого нужен "гумано-ориентированный" подход?
stranger777
19.06.2017 19:34Ну ок, уточню вопрос, люди которые пишут программы, которые не автоматизирует ни труд, ни чего-то другое не программисты? Потому, что факт того, что компьютер есть автомат никак не связан с тем, что его функция и назначение всех его программ автоматизировать. Несмотря на то, что изначальная его функция считать.
Функции программ сводятся к тому, чтобы создать, сохранить, получить информацию, либо переработать её, удалив ненужное, добавив нужное или изменив необходимые участки.
А также к тому, чтобы по получаемой информации заставить работать какую-то машину, будь-то самолёт с интеллектуальным наведением и джойстиком или робот пылесос, который откатывается, наткнувшись на стену.
Давайте пройдёмся по всем видам программ.
ОС — автоматизация доступа к ресурсам компьютера, абстракция над ресурсами компьютера для удобства пользователя. Драйвер — прослойка между операционной системой и электрическими схемами устройства, интерфейс между осью и устройством, пользователем, то есть автомат по переводу сигнала от устройства к компьютеру и пользователю.
Утилиты в составе ОС — та же diskpart, defrag, chkdsk и т.п. — автоматизация работы в ОС и ухода за её состоянием, для удобства работы с ОС.
Пользовательские программы — редакторы, звукозапись — автоматизация создания и хранения информации на компьютере в том или ином виде, то есть формате.
Браузер — автомат для переработки html-текста в понятные, удобные для человека образы от таблиц до плееров. Сами веб-приложения — автоматизация общения, творческой работы, бухгалтерской работы (учитывая сервисы типа «Моё дело» или простейший гугл-диск) и теперь уже любой другой. CAD-системы — автоматизация черчения и моделирования.
Компилятор — автомат для перевода текста программы в бинарный понятный загрузчику формат, то есть так или иначе — автомат переработки информации из одного вида в другой.
Игры — автоматизация развлечений.
Программы для суперкомпьютеров — автоматизация научных расчётов и научного же моделирования процессов.
Сервер — автомат переработки запросов, предоставляющий сервис, то есть — ответ на запрос.
Банкоматы, операционные системы и ПО в них — автоматизация финансовых расчётов. Майнеры и криптовалюты — туда же.
Антивирусы — автоматизация защиты ПО. Криптопровайдеры — автоматизация шифрования. Вирус автоматизирует проникновение в систему, используя неучтённое, не предусмотренное поведение программ.
Если я вдруг что-то упустил — покажите мне это и я скажу, как это можно соотнести с автоматизацией. Потому, что компьютер — это автомат.exchg
19.06.2017 20:37+1Не хватает упоминания блокчейна и диплерлинга.
Потому, что компьютер — это автомат.
А кто с этим спорит? Я же русским языком говорю, из того что компьютер автомат не следует, что функция его программ автоматизировать. Т.к. автоматизация это комплекс мер освобождающий человека от участия в процессе либо существенно уменьшающий это участие.
Т.е. вот этот ваш текстовый редактор каким образом освобождает человека или СУЩЕСТВЕННО уменьшает его участие в процессе создания текста? Процесс рисования картинки в паинте есть автоматизация? Я читаю текст/книгу через браузер это автоматизация чего?
Ну и второй раз повторяю, на том же русском языке, это наименее существенный недочет из общего сборника слабосвязанных штампов, которые собраны в одном месте с непонятной целью.
Игры — автоматизация развлечений.
Автоматизация развлечений — это комплекс мероприятий по внедрению в индустрию развлечений высокотехнологичного оборудования и программного обеспечения с целью повысить эффективность использования ресурсов и качество обслуживания.
Т.е. процесс создания игры (написание исходных кодов) в том числе, не есть никакая автоматизация развлечений. И даже применение игр не есть никакая автоматизация. Просмотр фильмов и прослушивания музыки тоже никакая не автоматизация развлечений.
stranger777
19.06.2017 21:28«АВТОМАТИЗАЦИЯ
применение машин, машинной техники и технологии с целью облегчения человеческого труда, вытеснения его ручных форм, повышения его производительности. Автоматизация производства призвана устранить физически тяжелый, монотонный труд, переложив его на плечи машин. Автоматизация управления направлена на использование компьютеров и других технических средств обработки и передачи информации в управлении производством, хозяйственными процессами.
Райзберг Б.А., Лозовский Л.Ш., Стародубцева Е.Б… Современный экономический словарь. — 2-е изд., испр. М.: ИНФРА-М. 479 с… 1999»
Что облегчает текстовый редактор? Во-первых набор с клавиатуры быстрее, чем рукописное письмо. В своё время писатели завидовали тем, у кого есть печатная машинка, так или иначе облегчающая труд.
Во-вторых при встроенных системах проверки грамотности типа «ОРФО» — корректуру текстов. В-третьих — типографика.
В четвёртых — на одном жёстком диске уместится, например, все собрания сочинений всех русских и не только поэтов последних нескольких сотен лет с возможностью просмотра и изминения за счёт текстового редактора и нам не придётся строить библиотеку для хранения такого объёма информации, а значит текстовый редактор делает хранение и редактирование текстов экономически выгоднее, чем его отсутствие и использование архаичных методов.
И в этом состоит автоматизация.exchg
19.06.2017 22:01Пишу в третий раз, это наименьший из недочетов.
Я спросил об обычном текстовом редакторе и задаче создания текста, зачем мне корректура, хранение библиотек, знания о том сколько всего уместится на жестком диске, сведения о поэтах, эльфах, цвете листьев зимой на южном склоне Фудзиямы под ногами девственницы? Зачем мне сказки о завидующих писателях? Я пишу в редакторе текст, компьютерная программа типа текстовый редактор понятия не имеет каким образом вводится текст, толи печатью на клавиатуре, написанием от руки на планшете или диктовкой его в микрофон. Этим занимается аппаратная часть. Поэтому ради интереса повторю вопрос — что именно автоматизирует в данном случае текстовый редактор?
Но я также спросил о просмотре фильмов, прослушивании музыки, игре в компьютерные игры. Или тут будет рассказ, что автоматизация компьютерных игр состоит в том, что экономически не выгодно покупать машину если можно погонять на виртуальной?
stranger777
19.06.2017 23:10По другим пунктам ответы очевидны.
Мне 27. Через 40 лет будет 67. И, видимо, вам повезло с отцом (и видимо расположенность к технике генетическая), потому что я вижу пугающихся людей 65+ регулярно, живя в деревне, а точнее — в посёлке городского типа. У некоторых таких проблема с тем, чтобы сунуть карточку в терминал и/или обналичить деньги. Даже у тех, кто живёт в городе. И это не сказки, не то, что я придумал или высосал откуда-то, а факты, личный опыт. Или набрать номер… Тоже трудность.
Не однократно видел, как помогают или помогал. Деревенские люди — тоже люди. Лет 10 назад (не в девяностых то есть) оказывал помощь в освоении людям 50-60 лет и сталкивался именно с испугом, растерянностью. Да, «моя выборка не репрезентативна», но и ваша с вашим отцом — тоже.
По остальному отвечу позже.exchg
20.06.2017 00:35-1Мне 27. Через 40 лет будет 67.
Ну а через 60 будет 87, угадал?
Да, «моя выборка не репрезентативна», но и ваша с вашим отцом — тоже.
Опять чудеса эквилибристики. Я и не говорил что он выборка. Я его привел как пример того, что ваше утверждение, притянуто за уши. И да, он не уникален, у меня хватает знакомых в возрасте. И те из них кто испытывал необходимость в освоении современных бытовых приборов их освоили на уровне позволяющем уверенно решать актуальные для них задачи. Хотя и жаловаться — "я не понимаю как на телефоне переставить время" и просить это сделать других не перестали, но это со страхом и рядом не стоит. И тут нет никакой корреляции город это или деревня. Хотя опять же напомню изначальный посыл был о испуге при встрече с НЕУДОБНОЙ программой.
Деревенские люди — тоже люди.
А кто-то сомневается?
оказывал помощь в освоении людям 50-60 лет и сталкивался именно с испугом, растерянностью.
Испуг — это рефлекторная реакция на возможную опасность. В состав реакции обычно входит вздрагивание, расширение зрачков, застывание тела, реже бывает мочеиспускание, дефекация, ощущение холода.
Именно испуг? И все из-за НЕУДОБНЫХ программ? Или уже растерянность?
С таким же успехом неизвестных ранее вещей опасаются люди всех возрастов. В свое время, когда компьютеры только входили в быт и становились рабочим инструментом, секретарши всех возрастов, да и люди других специальностей, испытывали определенные трудности в освоении компьютерной техники, многие опасались, но не компьютера как магического предмета, а как дорогой вещи, за которую "есличо" возможно придется нести материальную ответственность.
Все остальное лечится банальном увеличением частоты использования и привыканием. Но в общем вновь затронутые вопросы уже не имеют никакого отношения к программированию, а только расширяют круг введенных сущностей.
И уже бессчетный раз повторяю вопрос — зачем это все собранно вместе? Показать актуальность? Очевидно да. Но актуальность чего? "гумано" подхода? Извините, но даже такова слова не существует.
stranger777
20.06.2017 01:53-1что ваше утверждение, притянуто за уши.
А где в тексте написано, что я утверждаю его как истину в последней инстанции? Такого нет. По тексту есть вопрос: «Вам это не кажется странным?» и ответ на него потексту рассчитан на группу согласных. А такие есть. Хотя бы потому, что за два предыдущих поста моя карма выше, чем до них.
И была фраза — надежда на то, что я найду сторонников в таком подходе. Не было ни одной фразы, утверждающей, что мои выкладки бесспорны. Каждый человек неизбежно субъективен.
Извините, но даже такова слова не существует
Да. И слова компьютер раньше тоже не было. Извините, но языку свойственно развиваться. И если какого-то слова нет, то ничего, кроме общих правил языка, не мешает ему появиться. Букву н я поправил.
Ну а через 60 будет 87, угадал?
Да, вы молодец, угадали.
С такими вопросами вы будете полезнее в хосписе для людей с болезнью Альцгеймера, а не здесь.
Минус в карму и рейтинг за неумение вести беседу корректно. Ну и из-за этого вашего неумения аргументировать что-либо для вас, отвечать на ваши вопросы и продолжать беседу считаю бессмысленным. Лучше пойду спать — полезнее будет. Учитесь разговаривать по-человечески — пригодится.
Как только научитесь — я открыт для диалога. Всего доброго.exchg
20.06.2017 02:03С такими вопросами вы будете полезнее в хосписе для людей с болезнью Альцгеймера, а не здесь.
Браво!
Как только научитесь — я открыт для диалога. Всего доброго.
Нет спасибо. Продолжайте жить в своей уютной реальности.
michael_vostrikov
18.06.2017 20:36+1И в этом смысле, когда я запускаю diskpart, я ожидаю от программы запрос: «Для режима мастера нажмите M, для режима строки нажмите ВВОД»
А я не ожидаю. Я ожидаю, что все программы для командной строки работают в режиме строки. И не задают вопросов, которые в режиме автоматического запуска из другого скрипта останутся без ответа.
Хотите удобства — платите деньги за отдельную программу с GUI.
Вот у нас с вами как пользователей программы два противоположных мнения. И что программист делать должен?
stranger777
18.06.2017 22:00Одним словом — switch.
К примеру, при первом запуске программы предложить дефолтный режим на выбор. Мы оба потратим на него всего одно нажатие, но она будет удобна нам обоим. А чтобы определить, какой вариант делать первым, нужно определить целевую аудиторию. И тут да, конечно, ваша правда.
Что касается мастера, то ничего не мешает генерировать скрипт по ответам.michael_vostrikov
19.06.2017 05:54К примеру, при первом запуске программы предложить дефолтный режим на выбор.
То есть админ на каждой только что установленной ОС для каждой из сотни программ должен сначала их все запустить и ввести вручную нужный режим, чтобы у него все скрипты автоматизации начали работать?
Что касается мастера, то ничего не мешает генерировать скрипт по ответам.
Ага, в новой версии вы попросите добавить еще один экран для новых файловых систем, и порядок ответов поедет во всех существующих скриптах.
stranger777
19.06.2017 17:11То есть админ на каждой только что установленной ОС для каждой из сотни программ должен сначала их все запустить и ввести вручную нужный режим, чтобы у него все скрипты автоматизации начали работать?
Здесь идеален подход Линукса. Если админ — Arch, Debian, если привык собирать всё под себя — Gentoo, специалист ИБ — Kali, музыкант или художник — Ubuntu Studio, KXStudio. И так далее.
Ага, в новой версии вы попросите добавить еще один экран для новых файловых систем, и порядок ответов поедет во всех существующих скриптах.
Это уже излишество. Я не отрицаю важность баланса.michael_vostrikov
19.06.2017 18:30Не понял, причем здесь Линукс? Вот есть администратор, у него парк 30 машин на Windows, ему нужно использовать diskpart, netstat, и много других консольных программ. Вы предлагаете, чтобы он вручную запустил каждую программу и выбрал режим. Это неправильно, потому что их нельзя будет использовать в автоматическом режиме. Потому так и не делают. А вовсе не потому что о пользователях не подумали. Как раз подумали, потому что основные пользователи консольных программ это люди, обслуживающие компьютеры, и скрипты, ими написанные.
Это уже излишество. Я не отрицаю важность баланса.
Причем здесь излишество? В операционной системе появились новые возможности управления файловыми системами. Естественно, их нужно добавить в утилиту для работы с ними. В консольном режиме это будет несколько новых ключей. На существующие скрипты это не повлияет. А в мастере будет новый экран, и порядок и количество ответов изменится. Именно это и "мешает генерировать скрипт по ответам".
stranger777
19.06.2017 20:58Не понял, причем здесь Линукс? Вот есть администратор, у него парк 30 машин на Windows, ему нужно использовать diskpart, netstat, и много других консольных программ. Вы предлагаете, чтобы он вручную запустил каждую программу и выбрал режим.
Подход Линукса. То есть аккаунт админа с настройкой «не спрашивать» и аккаунты пользователей.
Из этого можно сделать продукт: утилиту/билиотеку, абстрагирующую от файловых систем вообще. Так и ключей не надо, и скрипты не полетят, и люди с зоопарком файловых систем скажут спасибо. И люди — разработчики утилит больше не будут добавлять в программы новые ключи, вместо этого прикрутив либу, в которой всё есть из коробки.
То есть всегда есть вариант, когда программа может быть повёрнута лицом конкретно к использующему её человеку.
Работает основная теорема программной инженерии: «Мы можем решить любую проблему, просто добавив слой абстракции», как типом size_t решается проблема зоопарка размеров типов данных, а Java решается проблема зоопарка архитектур. И т.п.michael_vostrikov
19.06.2017 21:17Извините, с технической точки зрения вы написали какую-то ерунду, ничего непонятно.
И люди — разработчики утилит больше не будут добавлять в программы новые ключи
Как админ сможет указать новый параметр для новой FS, обработки которого не было в предыдущих версиях утилиты?
То есть аккаунт админа с настройкой «не спрашивать» и аккаунты пользователей.
Зачем надо добавлять это в консольную программу, да еще и усложнять систему учетных записей, если пользователь пользуется другой программой с графическим интерфейсом, либо зовет администратора? Консоль для технических специалистов. Решили туда полезть, прочитайте инструкцию. Разве это сложно?
exchg
19.06.2017 22:21Подход Линукса.…
И люди — разработчики утилит больше не будут добавлять в программы новые ключи, вместо этого прикрутив либу, в которой всё есть из коробки.Линус занервничал в этот момент.
lexnekr
19.06.2017 10:19Коллега, извините, но чем графоманией страдать лучше делайте обещанный курс. =)
stranger777
21.06.2017 15:59Местные дискуссии указывают на недочёты. Эти указания и сам дискуссионный материал потом можно использовать как упреждающие ответы на человеческие вопросы к подходу. Говоря короче, это часть работы над курсом. :) про автоматизацию вот пришлось расписывать…
Busla
19.06.2017 11:41Ещё веселее, когда запускаешь cmd и делаешь что-то вроде
cd c:\ && dir /b/s | findstr "\.docx$" > list.txt && list.txt
И, конечно, имена файлов на русском из-за дефолтной кодовой страницы 866 превращаются в чушь. И, конечно, я могу исхитриться и сделать удобно
это «что-то вроде» уже много лет как положено делать в powershell, там всё ok с кодировкой
cmd ведёт себя как раз предсказуемо — ровно так же как это было… дцать лет назадstranger777
20.06.2017 11:43это «что-то вроде» уже много лет как положено делать в powershell, там всё ok с кодировкой
Или сделать ярлык на cmd с ключом /U, означающим вывод в Юникоде. Это всё можно, но остаётся вопрос: почему программист, добавлявший эту опцию, не сделал её дефолтной. Сразу. Для того, чтобы сохранить историческое предсказуемое некорректное поведение cmd? Странный ответ. То есть, говоря всё ок, проблему признаёте. Но почему решение не стало нормой? Или уже тогда начинался PowerShell и cmd забросили?
Может быть я чего-то не понимаю.
Как и написано, вариантов масса, включая Everything. Но cmd — это только иллюстрация проблемы. И вот из таких вещей — в более широком смысле — потом вырастают уязвимости типа Heartbleed, пока их не обнаружит более скурпулёзный и предусмотрительный человек.
А вот хороший пример: Code::Blocks, которые подумали об образовательной среде: http://codeblocks.codecutter.org/ и в итоге архив с ней на сайте преподавателя МФТИ, компетентность которого сомнений не вызывает.michael_vostrikov
20.06.2017 13:01Для того, чтобы сохранить историческое предсказуемое некорректное поведение cmd?
Именно для этого. Это называется "обратная совместимость". Когда эта опция появилась, Unicode еще не был настолько распространен. Потому это и опция.
Но почему решение не стало нормой?
Почему не стало? Открываете Проводник, там названия в Unicode отображаются правильно. Программа, ориентированная на пользователей, это Проводник, а не cmd.
И вот из таких вещей — в более широком смысле — потом вырастают уязвимости типа Heartbleed
Это абсолютно из другой оперы. Кодировка по умолчанию, которую вы считаете неправильной, ни в каком смысле не связана с логической ошибкой чтения памяти за пределами буфера.
stranger777
20.06.2017 15:05Это называется «обратная совместимость».
В С++ до сих пор есть морально устаревшая С-функция printf, чтобы огромная кодовая база с её использованием компилировалась. Не очень удобно во всём коде заменять её на современные, безопасные и аккуратные [относительные] аналоги. Это нам обоим известно и понятно. И без этого никуда. Я согласен.
Но в случае с кодировками не надо никаких изменений в текст. Надо просто пакетно использовать iconv и/или сделать её службой. Так можно избежать проблем с конфликтами кодировок и начать говорить себе спасибо много раз за удобство.
Например, в IDE CLion, спасибо JetBrains, эта проблема решена и она сама предлагает конвертацию.
Платишь деньги — получаешь удобство.
Я видел студентов, которые в своих программах писали что-то вроде:
Vybirite punkt menu, потому что если по-русски «привет», то сами понимаете:
Взято из статьи «Один урок программирования». А ведь всем было бы легче, если бы Юникод вытеснил наконец устаревшие кодировки.
Возможно (и скорее всего) у iconv тоже есть проблемы с корректностью кодирования. Но это уже другой вопрос.
И я говорю не о технической стороне Heartbleed, но о том, что она лежала там годами, как и «историческое» поведение cmd, порождающее всякую жуть в выводе.michael_vostrikov
20.06.2017 16:35Но в случае с кодировками не надо никаких изменений в текст. Надо просто пакетно использовать iconv и/или сделать её службой.
От того, что вы сделаете службой стороннюю программу, существующая программа cmd по-другому работать не станет. Вы не сможете изменить поведение программы, не меняя код ее самой или использующей ее другой программы.
Например, в IDE CLion
Простите, когда появилась CLion и когда cmd?
Ну и опять же, зачем вам надо менять что-то в cmd, если это есть в других программах? Командная строка это технический инструмент для специалистов. Почему она должна быть ориентирована на обычных пользователей?
И я говорю не о технической стороне Heartbleed, но о том, что она лежала там годами, как и «историческое» поведение cmd, порождающее всякую жуть в выводе.
Так можно притянуть абсолютно любую вещь, не менявшуюся 2 и более лет. Люди используют автомобили годами, загрязняя окружающую среду. И вот из таких вещей — в более широком смысле — потом вырастают уязвимости типа Heartbleed.
Она лежала там годами, потому что никто не обратил внимания на побочный эффект этого кода. Поведение cmd всем известно, и не меняется из-за обратной совместимости. Потому что иначе существующие программы, которые рассчитывают на вывод в этой однобайтовой кодировке, могут сломаться.
Кстати, а почему вы решили, что в выводе жуть? Потому что ваш текстовый редактор не поддерживает эту кодировку? У меня Notepad++ например сам определяет кодировку и отображает нормально.
если бы Юникод вытеснил наконец устаревшие кодировки.
Что по-вашему нужно делать с тысячами существующих и работающих программ, которые написаны давно и не используют Юникод?
stranger777
20.06.2017 18:09Почему она должна быть ориентирована на обычных пользователей?
Потому что ваш текстовый редактор не поддерживает эту кодировку?
Потому, что мой текстовый редактор, о котором идёт речь — «Блокнот», notepad.exe. И когда стандартные программы в ОС не дружат друг с другом без подкручивания, то это ужасно. Где-то глубоко-глубоко внутри рождается ощущение, что ОС ненадёжна в принципе, потому, что в ней нет разумной согласованности. И тут уже совершенно безразлично, пользователь человек или специалист. Да, я могу подкрутить это несколькими способами, но от этого не легче.
У меня Notepad++ например сам определяет кодировку и отображает нормально.
Да. Значит notepad++ — удобная программа. Для людей. И именно поэтому она так распространена, что по-настоящему удобна.
И снова вопрос: что мешает Microsoft перенять лучшие практики у Notepad++ и сделать удобной если не cmd, то notepad? Так нет же, из версии в версию этот недочёт плывёт и плывёт… Ну, хоть то хорошо, что магазинные Win10 приложения совершенствуют, даже калькулятор — вот это радует и да, его довели до ума, как и «Кино и ТВ», который с очередным обновлением стал делать последовательное воспроизведение файлов из папки.
Что по-вашему нужно делать с тысячами существующих и работающих программ, которые написаны давно и не используют Юникод?
То же, что сделали с Notepad. Или:
— например.#include <iconv.h>
Вариантов масса, опять же. И я не говорю, что всё плохо. Я говорю, что начинать надо не с «Hello, world», а с понимания, что программист работает для людей.
Можно, конечно, работать для продаж, но такой подход рано или поздно станет раздражать людей и продажи упадут, а если изначально работать для людей, то и людям будет не жалко развивать начатое, давая продукту стабильность. Да, я идеалист и признаю это.
Но если мне продают плохой товар, то я и говорю, что он плохой, а если продают хороший, то и говорю, что хороший…michael_vostrikov
20.06.2017 19:46потому, что в ней нет разумной согласованности
Потому что вы считаете, что нет разумной согласованности. Для меня например с cmd все логично и понятно.
И снова вопрос: что мешает Microsoft перенять лучшие практики у Notepad++ и сделать удобной если не cmd, то notepad?
Потому что из миллионов пользователей только единицы просматривают вывод команды dir в блокноте? Для просмотра в консоли кстати есть команда type, и вывод получается в читаемом виде. Ну вот видите, причина то оказывается не в cmd, а в блокноте.
как и «Кино и ТВ», который с очередным обновлением стал делать последовательное воспроизведение файлов из папки
У меня сторонняя программа умела делать это еще на XP. Бесплатная, кстати.
То же, что сделали с Notepad.
Вы про Notepad++? Так его изначально делали как текстовый редактор, и он постоянно развивается, можно новую версию скачать. А старые версии, представьте себе, никто не меняет.
Я вам говорю про существующие программы, которые используются в том виде в котором они есть, и новых версий для них не выпускают.
Или:
#include <iconv.h>
Вы думаете, что подключив один файл, вы магически измените логику работы с однобайтовыми кодировками по всей программе? Вы ошибаетесь. Это потребует много ручного исправления и проверки. Не говоря уже о том, что вам надо сначала надо исходники найти.
Вот допустим есть у меня консольная программа по обработке текста, exe-файл, работает нормально, и тут по желанию одного человека cmd вдруг стал для русских букв выдавать 2 байта вместо одного. А программа рассчитывает на 1 байт на символ. Где вы предлагаете этот include написать?
а с понимания, что программист работает для людей
Да, только у большинства другое понимание "работа для людей". В частности, в него входит принцип "не ломать поведение существующих программ". Особенно по желанию всего пары человек. Особенно, если есть альтернативы.
stranger777
20.06.2017 22:25Вы думаете, что подключив один файл, вы магически измените логику работы с однобайтовыми кодировками по всей программе?
Ну конечно нет :) это утрирование. Точно так, как и пример с cmd — претензия не к конкретно cmd, а просто иллюстрация более широкой проблемы. Проблемы удобства и предсказуемости автоматических систем в принципе.
Никто не хочет, чтобы медицинский прибор «побочными эффектами» наносил вред пациенту. И разрабатывая библиотеку шифрования (которая будет защищать возможно критические данные) было необходимо обращать внимание на побочное поведение.
и тут тоже есть хороший пример: после поста PVS-Studio о тестировании безопасности Tor последний стал непробиваемым для PVS даже после усовершенствований анализатора. Искренние аплодисменты Tor как проекту — люди работают.
Можем, когда хотим.
Это потребует много ручного исправления и проверки. Не говоря уже о том, что вам надо сначала надо исходники найти.
В случае с cmd и конкретной проблемой потребовался один ключ.
И второе: по большому счёту, разве не это — работа программиста? Именно так начались статические анализаторы. Да, создание алгоритма, который корректно заменит текст с учётом целей самой программы — та ещё задачка. Нужна развитая эвристика.
Но и это, в конце концов, можно предлагать как продукт желающим сделать проект лучше.
Печатные машинки всё-таки умерли. А Юникод в современных условиях объективно лучше, чем всё остальное, как текстовый редактор лучше набора текста на бумагу с машинкой…
У меня сторонняя программа умела делать это еще на XP. Бесплатная, кстати.
Когда я сказал про iconv, вы сказали, что она не решит проблему. :) но можно сделать дистрибутив, в котором сервис iconv будет из коробки и уже будет частью ОС.
В остальном… ну, видимо у нас с вами разные мнения. Тут вот про табы с пробелами спорят и обе статьи в плюсе :)
Пора завязывать использовать символы табуляции в коде
Пора завязывать использовать пробелы вместо табуляции в коде
Спасибо за ваше время :) это было интересно. Это уже просто та стадия, после которой понятно, что каждый останется при своём мнении. И да, «работает — не трогай» — это хорошее правило, но и отказываться от устаревшего тоже хорошо. Правы мы оба и поэтому не договоримся до третьего компромиссного мнения.
Ещё раз спасибо! Учту ваши слова, так или иначе.michael_vostrikov
21.06.2017 09:33Проблемы удобства и предсказуемости автоматических систем в принципе.
cmd удобен для своих целей. И тем более был удобен на момент появления. Просто у вас другие представления об удобстве. И такие программы тоже есть, просто это не cmd и не diskpart. У каждого инструмента своя цель, нельзя сделать все программы удобными для всех на все случаи жизни.
было необходимо обращать внимание на побочное поведение.
А разве кто-то спорит? Вы в смысле считаете, что его специально там оставили? Вы ошибаетесь. Просто это побочное поведение было очень неочевидно, и никому не пришла в голову ситуация, что его можно использовать подобным образом. Количество вариантов входных данных и окружения очень велико, нельзя предусмотреть все, а люди имеют свойство ошибаться. Но это не значит, что они не хотят сделать правильно или не думают о пользователях.
и тут тоже есть хороший пример: после поста PVS-Studio о тестировании безопасности Tor последний стал непробиваемым для PVS. Можем, когда хотим.
То есть вы считаете, что люди знают обо ВСЕХ ошибках в своем коде, просто не хотят исправлять? Вы ошибаетесь.
И да, наличие технических ошибок в программе никак не связано с удобством ее использования. В cmd можно исправить все ошибки, которые найдет PVS, только кодировка по умолчанию останется такая же как была.
В случае с cmd и конкретной проблемой потребовался один ключ.
В случае с cmd там уже была встроена поддержка Unicode. Я говорил о тех (работающих) программах, в которых этой поддержки нет.
И второе: по большому счёту, разве не это — работа программиста?
Нет. Работа программиста программировать те функции, для которых предназначена программа. Если функции программы устраивают целевую аудиторию, никто не станет исправлять ее полностью по желанию одного пользователя.
Причем на это нужны время и деньги. У вас есть деньги заплатить программисту за N месяцев работы и тестирования, которые потребует переделка? Так наймите, в чем проблема?
Но я больше имел в виду те программы, для которых исходники недоступны.
Да, создание алгоритма, который корректно заменит текст с учётом целей самой программы — та ещё задачка.
Вы вообще писали что-нибудь сложнее калькулятора? По вашим постам можно сделать вывод что нет. Это в принципе невозможно на текущем уровне развития науки, такая "программа" потребует искусственного интеллекта.
Принцип работы PVS Studio совсем другой, основанный на правилах языка C++. Цели программы она не анализирует.
Когда я сказал про iconv, вы сказали, что она не решит проблему. :) но можно сделать дистрибутив, в котором сервис iconv будет из коробки и уже будет частью ОС.
Она не решит проблему кодировки по умолчанию в cmd. А использовать ее отдельно, для конвертирования файла list.txt, можно уже сейчас.
Если вы сделаете iconv сервисом, это тоже представьте себе не поменяет принцип работы cmd, потому что в ней нет встроенного взаимодействия с этим сервисом. Она как выводила текст на свой экран в кодировке DOS, так и будет выводить.
Не говоря уже о том, что компания не будет тратить деньги на разработку отдельного дистрибутива, если и так уже есть много программ, которые решают эти проблемы.
каждый останется при своём мнении. И да, «работает — не трогай» — это хорошее правило, но и отказываться от устаревшего тоже хорошо
Вы ничего не поняли из того, что я говорил. Есть объективные причины, почему программы работают так. И есть много людей, которых это устраивает. А ваш вариант им будет неудобен или даже бесполезен. Поэтому обобщать в стиле "мне неудобно, значит они не думают о пользователях, значит у них скоро продажи упадут" в корне неправильно.
stranger777
21.06.2017 15:27Вы вообще писали что-нибудь сложнее калькулятора? По вашим постам можно сделать вывод что нет. Это в принципе невозможно на текущем уровне развития науки, такая «программа» потребует искусственного интеллекта.
Писал. И хочу обратить ваше внимание на то, что сам по себе Юникод — это не два байта на символ, строго говоря. Это — стандарт, определяющий соответствие символов и чисел, но не способ их хранения в памяти. Новые символы — новые числа — новый, дополненный стандарт. Любопытно, что именно вчера анонсировали новую версию: http://blog.unicode.org/2017/06/announcing-unicode-standard-version-100.html — с emoji.
UTF-8 — однобайтовая. UTF-(16||32) двух- и четырёх байтовые.
Да, невозможно в современных условиях написать программу, проверяющую корректность собственного выполнения — это масло масляное. Да, существует понятие «идиоматического кода», с которым с точки зрения замены текста работать сложнее.
Да, существуют проблемы выделения памяти, но при последовательном аккуратном подходе, сформулировав строгие правила для нового, исправляющего эти проблемы текста, можно решить и их.
И ещё раз говорю — из этого можно сделать продукт. То есть программу, функцией которой и будут эти аккуратные замены.
Вот я уже показал вам чуть выше, что для Юникода два байта не обязательны, хотя вы почему-то говорите, что Юникод должен сломать однобайтовые ожидания в программах.
Хотя, конечно, с точки зрения удобства нужно вообще 4 байта.
Но покажите мне доказанную теорему, согласно которой один написанный по строгим правилам текст невозможно заменить другим написанным по строгим правилам текста.
Или теорему, утверждающую, что искусственный интеллект для этого необходим.
Напротив, миллионы строк кода направлены как раз на это: преобразование одной информации в другую…
Migrating Windows-Based Programs to Unicode
Что из этого списка по ссылке выше (а это и есть сформулированные для Windows правила) требует искусственного интеллекта? Аналогичные правила можно сформулировать и для Линукса.
Просто никто об этом не подумал лишний раз, как вк не подумал о слепых сразу или девелоперы SSL не подумали, что побочное поведение должно быть в приоритетах. Они, конечно, не хотели оставлять эту ошибку, но результат того или иного неаккуратного отношения налицо.
Unicode был призван решать проблемы, а не создавать их, и стать именно универсальным кодом. И работающие над Юникодом люди работают и над удобством переноса программ на стандарт для людей. Спасибо им за это большое.
И вот об этом я говорю, что хорошо, когда программисты и вообще люди работают для людей.michael_vostrikov
21.06.2017 17:38Юникод — это не два байта на символ, строго говоря
Я говорил об этом в контексте cmd и ключа /U.
UTF-8 — однобайтовая
Здрасьте приехали.
https://ru.wikipedia.org/wiki/UTF-8
Диапазон символов Количество байт 00000000-0000007F 1 00000080-000007FF 2
И ещё раз говорю — из этого можно сделать продукт. То есть программу, функцией которой и будут эти аккуратные замены.
Из этого максимум можно сделать программу, исправляющую один конкретный набор исходных файлов. Еще раз говорю, добавление работы с многобайтовыми кодировками не сводится к замене одних функций на другие. Нужно менять логику программы. Например, вы больше не сможете для получения подстроки из первых 10 символов просто взять первые 10 байт.
Вот я уже показал вам чуть выше, что для Юникода два байта не обязательны, хотя вы почему-то говорите, что Юникод должен сломать однобайтовые ожидания в программах.
Вы не показали. Вы высказали утверждение без доказательств. Это только ваше мнение, причем неверное. Причем это показывает, что вы в принципе не понимаете как работает Unicode и двоичная система, раз считаете, что все символы Unicode возможно пронумеровать одним байтом.
Или теорему, утверждающую, что искусственный интеллект для этого необходим.
Почему обязательно нужна какая-то теорема? Так можно утверждать любую бессмыслицу. Есть теорема, утверждающая, что драконов не существует?
Вот вам логическое рассуждение, на которых и строятся теоремы.
Логику программы, достигающую определенных целей, создает естественный интеллект. Что ее изменить на другую и проверить соответствие изначальным целям, нужен естественный интеллект или его аналог с похожими возможностями, который сможет осознать цели, осознать принципы программирования, написать новую логику, и проверить соответствие изначальным целям. Программы пока осознавать ничего не могут, а значит и нужную логику написать не смогут.
Что из этого списка по ссылке выше требует искусственного интеллекта?
Вообще-то практически все.
Modify your code to use generic data types
Determine which variables declared as char or char* are text, and not pointers to buffers or binary byte arrays.
Don't use generic data types, however, for data that will always be Unicode or always ANSI
Adjust pointer arithmetic. Subtracting char* values yields an answer in terms of bytes; subtracting wchar_t* values yields an answer in terms of 16-bit chunks.Откуда программа узнает, что у меня будет находиться во время работы по указателю char* data — строка на русском языке или двоичное содержимое файла с картинкой?
Откуда программа узнает, что в переменной char* str у меня всегда будет ANSI строка?
Откуда программа знает, надо мне тут менять доступ к 10 символу или мне нужен именно 10 байт?
Вы говорите, писали сложные программы? Напишите программу, которая сможет преобразовать любой исходный код для работы с Unicode. Исходные файлы для тестов можно найти на GitHub.
результат того или иного неаккуратного отношения налицо
Это не неаккуратное отношение. Это высокая сложность программ и количество вариантов использования. Сможете найти уязвимости в OpenSSL, которые на данный момент еще никто не обнаружил? Вы же утверждаете, что это легко, надо только подумать лишний раз.
Кстати, а скиньте исходный код какой-нибудь вашей сложной программы. Я вам покажу, где именно вы не подумали о пользователях, а может даже и пару уязвимостей в ней.
И работающие над Юникодом люди работают и над удобством переноса программ на стандарт для людей.
Это никак не меняет того, что ломать поведение существующих программ неправильно и дорого. И заниматься этим и платить за это будут (или не будут) совсем не создатели Юникода, а разработчики этих программ. Не говоря уже о том, что есть много пользователей, которых, в отличие от вас, работа этих программ вполне устраивает.
stranger777
21.06.2017 20:24раз считаете, что все символы Unicode возможно пронумеровать одним байтом.
Да, с хранением в памяти — моя ошибка.
Однако если посмотреть на количество символов вообще, то можно убедиться, что при желании символы UTF-8 (не Юникода) закодировать в один байт всё-таки можно, диапазон от
U+0000..U+00FF — ровно байт. И в этом смысле она однобайтовая. UTF-16/32, о которых я тоже писал — шире, конечно же. И именно поэтому мы имеем в названиях кодировок именно эти числа.
не сводится к замене одних функций на другие
Да. Именно поэтому я писал о сложной эвристике. Эвристический алгоритм не гарантирует всего и сразу, конечно же. Но даже самые сложные программы начинались с открытия файла. И начать можно с простых замен, а закончить сложными.
Вы же утверждаете, что это легко, надо только подумать лишний раз.
Вы приписываете мне слова, которых я не говорил и мнения, которые я не высказывал. :)
Я сказал, что лишний раз думать — легко. Я сказал, что
«Просто никто об этом не подумал лишний раз», но это не значит, что думать — просто. И это не значит, что приспособить сайт для слепых — легко, конечно же это очень много работы.
И заметил уже, кстати, что ваше мышление очень буквальное. :)
устоявшееся выражение «можем когда хотим» совсем не означает, что другие не хотят (вы это выделяли курсивом): оно означает, что другие могут хотеть сильнее. :) русский язык не так формален, как языки программирования и сейчас мне даже странно указывать на это: я вижу, что вы умный человек и просто придираетесь к словам.
Я также признаю, что написал крайне мало рабочего полезного кода, но калькулятор пишется в один запрос ввода и одну с eval(). Ну ещё можно фильтрацию ввода сделать, чтобы в кривых руках eval не взорвалась чем-нибудь.
Программа по крайней мере сложнее калькулятора и да, в ней есть недочёт безопасности, как минимум один: в одном из вариантов он качает старый nginx. А для того, чтобы скачивался всегда новый пакет, нужно «просто подумать лишний раз». Если вы укажете на что-нибудь ещё, буду благодарен.
Строка, описывающая байтовый массив, подчиняется определённым правилам. Либо из кода, преобразующего, например, строку в байтовый массив можно выделить общие черты, описываемые формально, по ним обнаружить и заменить или не заменять.
Поскольку весь язык формален, то и формальными могут быть описательные характеристики последовательностей его выражений. И каждая задача в языке имеет такое формальное описание — иначе бы у нас не было компиляторов. А раз они есть, формальные, то обнаружить их можно без ИИ.
Это сложно. Но возможно. Подобно тому, как есть генераторы синтаксических анализаторов на основе BNF. Более чем уверен, что последние гораздо сложнее той программы, которая нужна для портирования в Юникод.michael_vostrikov
22.06.2017 00:31при желании символы UTF-8 (не Юникода) закодировать в один байт всё-таки можно, диапазон от U+0000..U+00FF — ровно байт. И в этом смысле она однобайтовая.
UTF-8 это способ записи символов Юникода. Диапазон U+0080..U+00FF в этом способе кодируется двумя байтами.
Диапазон U+0000..U+007F это множество символов ASCII, коды которой появились задолго до Unicode, и сделано так в целях совместимости.
Если кодировать только часть возможных символов, то любая кодировка будет однобайтовой, только толку от этого будет столько же, сколько от обычных однобайтовых кодировок, включая проблему с кракозябрами.
И да, ваша демагогия никак не меняет работу существующих программ.
Да. Именно поэтому я писал о сложной эвристике. И начать можно с простых замен, а закончить сложными.
Это не "сложные замены". Это переписывание логики программы. И нет, демагогия в стиле "замена логики" не научит компьютер эту распознавать цели этой логики. Там char* и там char*. Но в одном нужна работа с байтами, а в другом с символами. А уж если "алгоритм не гарантирует всего и сразу", то для переписывания программы он не годится.
Утверждаете, что можно? Докажите. То есть возьмите и сделайте. Я такого способа не знаю.
Вы приписываете мне слова, которых я не говорил.
Я сказал, что «Просто никто об этом не подумал лишний раз».Я вам и говорю, что это не "просто" в любом смысле этого слова в этом выражении. Подумать лишний раз здесь недостаточно, надо целенаправленно искать именно эту ошибку.
И это не значит, что приспособить сайт для слепых — легко, конечно же это очень много работы.
Додуматься до этого легко. Не путайте объем работ с логической сложностью.
устоявшееся выражение «можем когда хотим» совсем не означает, что другие не хотят (вы это выделяли курсивом): оно означает, что другие могут хотеть сильнее.
просто придираетесь к словамПридираетесь к словам здесь вы. "Хотеть сильнее" означает, что другие не хотят настолько сильно.
И да, вы все равно ошибаетесь. Это не придирка к словам, это принципиально разный смысл. Дело не в желании, а в логической сложности. Вы при всем желании не найдете все неоткрытые уязвимости в OpenSSL.
Если вы укажете на что-нибудь ещё, буду благодарен.
Так вы подумайте лишний раз. Вы же утверждаете, что дело в этом. Или может все-таки дело не в количестве попыток?
Кстати, у вас плохой стиль кода. Почему вы не подумали про пользователей вашего скрипта, которые будут его читать? Вот из-за такого кода и появляются уязвимости типа Heartbleed. И я не шучу.
nginx_centos68_src_installation.sh --help
Никакой справки вообще нет. Я например не в курсе, что означает "Source RPM with mock". От других требуете, а вам значит можно не делать?
Либо из кода, преобразующего, например, строку в байтовый массив можно выделить общие черты
Строка это и есть байтовый массив. В С++ строка это указатель на массив байт типа char*, у которого в конце предполагается байт с кодом 0. Какой смысл разговаривать на эту тему, если вы таких простых вещей не знаете?
Поскольку весь язык формален, то и формальными могут быть описательные характеристики последовательностей его выражений.
Вы можете сколько угодно описывать формально существующие выражения в программе, но вы не сможете на основе этого узнать, какие новые выражения там должны быть.
Вот вам конкретный код.
char search_pos(char* data, int length, char ch) { int i = 0; for (i = 0; i < length; i++) { if (data[i] == ch) { return i; } } return -1; } // вызывающий код char* data = read_file(filename); int pos = search_pos(data, 100, 0x20); process(data, pos);
Надо мне менять здесь
data[i]
на работу с многобайтовыми символами? Как вы определите, filename это текстовый файл и я ищу пробел или filename это двоичный файл и 0x20 обозначает какое-то поле в заголовке?
Примените ваш формальный подход.stranger777
22.06.2017 02:47Строка это и есть байтовый массив. В С++ строка это указатель на массив байт типа char*, у которого в конце предполагается байт с кодом 0. Какой смысл разговаривать на эту тему, если вы таких простых вещей не знаете?
С++? Вы уверены?
Вот тут вы и попались. Я заметил, что вы считаете заранее умнее (точнее, осведомлённее) меня. И это видно по этой цитате. И это зря. Потому, что в C++ есть ещё std::string, (и именно она и есть — строка, в языке C++ и она не оканчивается null terminator), а байтовый массив с null terminator — это C-string, наследие языка си ради всё той же обратной совместимости. И хочется процитировать ваш же вопрос… Но я не буду, потому что понимаю, что человек по своей природе подвержен ошибкам. И я, и вы, тем более ночью. Оба с опечатками. Я вот плюсы забыл в Notepad++.
Что же касается байтового массива, подчиняющегося правилам, то я имел в виду строку кода, именно строку кода, которая инициализирует байтовый массив так, как это принято делать именно с массивами. С точки зрения замен с таким работать сложнее.
Что касается Юникода, то да, именно в UTF-8 — два байта. И это видно в табличке. И я признал свою ошибку. Тем не менее, оторвавшись от UTF-8, можно закодировать в один байт все предоставленные ею (UTF-8) символы. Присвоив первому символу код 00 и FF — последнему. Это очевидно.
Видимо, мы на очень разных языках говорим.
Хелп сделаю. Стиль… мда. Когда писал, казалось, что внутренняя логика наличия/отсутствия отступов и знаков подчёркивания понятна. Теперь свежим взглядом вижу, что чушь. Вот это самая конструктивная часть была. :) над вашим кодом надо подумать.michael_vostrikov
22.06.2017 10:03Потому, что в C++ есть ещё std::string
Это обертка, написанная на C++. Строк как конструкции языка в C++ нет. В отличие от чисел типа integer. И разговор шел в контексте приведенной вами ссылки, по которой примеры содержат char*, а типа std::string там нет.
Что же касается байтового массива, подчиняющегося правилам, то я имел в виду строку кода, именно строку кода
Написали вы абсолютно другое:
Либо из кода, преобразующего, например, строку в байтовый массив можно выделить общие черты
Исходный код состоит из строк. Код, преобразующий строку — означает, код, состоящий из строк и преобразующий строку. Значит, в данном выражении подразумеваются разные строки.
Что касается Юникода, то да, именно в UTF-8 — два байта.
Нет. В UTF-8 символы могут занимать разное количество байт.
Тем не менее, оторвавшись от UTF-8, можно закодировать в один байт все предоставленные ею (UTF-8) символы. Присвоив первому символу код 00 и FF — последнему. Это очевидно.
Нет. В кодировке Unicode можно отобразить 1112064 символа. Одним байтом вы сможете закодировать только 256 символов.
Поэтому это очевидно только вам в силу вашего незнания предмета.
Хелп сделаю
Так смысл не в том, что вы его сделаете когда попросили, а в том, почему вы сразу его не сделали? Наверно у вас были какие-то причины, и вы не делали это специально, чтобы отпугнуть пользователей? Вот и у других так же.
exchg
22.06.2017 11:42Вы не видите что ли, что изобретатель курса абсолютна технически невежественен и опыта разработки ПО не имеет?
michael_vostrikov
22.06.2017 13:54Вижу, и хочу, чтобы он понял, в чем неправ. А то он расскажет на курсе начинающим чего-нибудь не то, а они потом повторять будут, пока сами не поймут. А кому-то с ними работать, или с их кодом. Ну и просто
в интернете кто-то неправхороший повод для применения логических рассуждений)stranger777
22.06.2017 14:50Вы будете смеяться, но у нас с вами абсолютно одинаковые цели. Предыдущий пост (после которого рейтинг пошёл вниз, а карма вверх, что показательно) — о множестве этаких Hello, world курсов, не рассказывающих о сути дела.
Рейтинг минусовали (надо полагать) те, кто о проблеме думать не хотят, а хочет зайти на хабр и получить какое-то очередное готовое решение. А карму поднимали те, кто понимает проблему.
Я признаю, что могу ошибаться и с радостью принимаю поправки, уточнения и прочее, прочее, прочее. И даже это ваше уточнение по Юникоду будет использовано: я расскажу, как ошибся сам и значит уберегу от такой же ошибки других.
Даже хорошие курсы обречены быть в чём-то неточными: «Углублённое изучение C\C++» на степике от технопарка мейл.ру.
Там сказано, что есть ограничение на выравнивание данных. А его уже сняли.
Или, что более существенно, там же сделан акцент на использование gcc, но при этом сказано, что нет единого источника нормы для стиля кодирования на си, а про GNU Coding Standards не рассказано вообще ничего, либо авторы не считают это единым источником нормы, хотя используют GNU-компилятор…
stranger777
22.06.2017 13:42Это обертка, написанная на C++.
И часть стандарта языка C++, но не C.
В кодировке Unicode
В какой из?
Не существует какой-то одной кодировки Unicode, потому, что Юникод — это не конкретная реализация кодировки, а стандарт. Оба мы в чём-то правы и не правы.
почему вы сразу его не сделали?
Потому, что это не критично: человек, имеющий дело со сборкой, почти наверняка знает о mock, либо если не знает — загуглит, название инструмента оставлено целенаправленно.
А вот человек, который рассчитывает на безопасность библиотеки шифрования и получает «побочное поведение» вместе с уязвимостью — это уже другая история.
Или слепой, приходящий в интернет и рассчитывающий, что он приспособлен для экранных дикторов и не получает это удобство как функцию — это тоже другая история.
Я не говорю про какие-то рюшечки и не говорю, что сделать всё сразу легко. Я говорю только, что стремиться работать для людей — нужно и привёл уже огромную массу позитивных примеров, когда проделанная работа приносит результат. Но понимать меня вы усердно не хотите, к сожалению. Видимо я, по своей природе стремящийся ко взаимопониманию, по ошибке перекладываю это качество на других. Учту и это…michael_vostrikov
22.06.2017 14:43И часть стандарта языка C++, но не C.
Это набор стандартных программ (стандартная библиотека). И причем здесь C? В программах на C++ часто для работы с однобайтовым текстом применяются указатели на char. И замена на Unicode может их сломать.
Оба мы в чём-то правы и не правы.
Как бы вам ни хотелось так думать, но нет. Unicode это стандарт кодирования символов, в котором более миллиона разных символов, каждый со своим кодом. Это именно кодировка в стандартном смысле. UTF-8, UTF-16 и другие — это форма представления. Ни в какой форме представления вы не сможете пронумеровать одним байтом, в котором 256 возможных значений, все символы Unicode.
Потому, что это не критично
А, то есть забота о пользователях уже идет лесом? Вы автор, и у вас другое представление о назначении программы. А те, кто не согласен, вас не интересуют. Пусть гуглят, если надо. Так получается?
Только почему вы предъявляете претензии к программе diskpart, если это точно такая же системая утилита для специалистов?
А вот человек, который рассчитывает на безопасность библиотеки шифрования и получает «побочное поведение» вместе с уязвимостью — это уже другая история.
У вас тоже в программе изначально было побочное поведение вместе с уязвимостью. Я вот рассчитываю, что программа не будет мне ставить в систему непроверенное ПО. Почему вы эту уязвимость добавили в первую версию программы, да еще и на публичном сайте выложили?
Я говорю только, что стремиться работать для людей
Я говорю, что вы у других видите соринку, а в своем глазу бревно не замечаете.
А кроме того, что у вас неправильное понимание "работать для людей", причем во многом из-за вашего незнания предмета. Все знают, что надо работать для людей, и ваши напоминания не нужны. И все так делают, в необходимой и достаточной мере. Вам что-то не нравится? Ну погуглите. Значит лично на вас программа не рассчитана.stranger777
22.06.2017 15:08все символы Unicode
Перечитайте то, что я писал.
Я говорил обо всех символах в UTF-8. Юникод целиком, конечно же, гораздо больше… И это не кодировка, в отличие от UTF-8, а стандарт. Особенно огромен этот стандарт теперь, когда в него включили emoji. Ссылку на анонс стандарта я давал, вы её проигнорировали.
Вот вам ещё раз таблица UTF-8, в которой 256 строк:
http://www.utf8-chartable.de/michael_vostrikov
22.06.2017 16:36Я говорил обо всех символах в UTF-8
В UTF-8 нет никаких своих символов. Это способ записи символов Unicode. Прочитайте уже статьи на википедии, ссылки на которые я привел.
И это не кодировка, в отличие от UTF-8, а стандарт.
Приведите, пожалуйста, определения понятий "кодировка" и "Unicode".
Ссылку на анонс стандарта я давал, вы её проигнорировали.
Я ее проигнорировал, потому что emoji никаким образом не относятся к данному диалогу. Ну да, добавили символы. И что?
Вот вам ещё раз таблица UTF-8, в которой 256 строк:
http://www.utf8-chartable.de/А вас вот этот блок не смущает?
Вот вам "таблица UTF-8", в которой 1024 строки:
http://www.utf8-chartable.de/unicode-utf8-table.pl?number=1024stranger777
22.06.2017 21:16Приведите, пожалуйста, определения понятий «кодировка» и «Unicode».
Взято в первоисточнике, на сайте консорциума Юникода
Unicode. (1) The standard for digital representation of the characters used in writing all of the world's languages. Unicode provides a uniform means for storing, searching, and interchanging text in any language. It is used by all modern computers and is the foundation for processing text on the Internet. Unicode is developed and maintained by the Unicode Consortium: http://www.unicode.org.
(2) A label applied to software internationalization and localization standards developed and maintained by the Unicode Consortium.
RFC 6365, о терминологии интернационализации IETF:
https://tools.ietf.org/html/rfc6365
Кодировка (буквальнее — форма кодирования символов и не путаем с character set — набором символов)
character encoding form
A character encoding form is a mapping from a coded character set
(CCS) to the actual code units used to represent the data.
При этом здесь означает не пример Юникода как кодировки, а отсыл к стандарту, как и по всему остальному документу, если присмотреться.
Из стандарта UNICODE, о UTF-8:
UTF-8. A multibyte encoding for text that represents each Unicode character with 1 to 4 bytes, and which is backward-compatible with ASCII. UTF-8 is the predominant form of Unicode in web pages. More technically: (1) The UTF-8 encoding form.
(2) The UTF-8 encoding scheme. (3) “UCS Transformation Format 8,” defined in Annex D of ISO/IEC 10646:2003, technically equivalent to the definitions in the Unicode Standard.
Жирным я выделил свою ошибку. Но, вместе с тем, как видно, UNICODE — это стандарт, то есть описательный документ, а вот UTF-8/16/32 — его реализации. Нет такой кодировки — Юникод. Есть такой стандарт.
Доброго вечера вам. :) который день уже дискуссия)…stranger777
22.06.2017 21:48UPD
Должно быть вот так:
A character encoding form is a mapping from a coded character set
(CCS) to the actual code units used to represent the data.
При этом здесь означает не пример Юникода как кодировки, а отсыл к стандарту, как и по всему остальному документу, если присмотреться.
tehSLy
19.06.2017 11:42По поводу роликов и «интуитивно-понятных интерфейсов, которые непонятны» — я думаю, что многие разрабы и компании просто понимают, что нынешний пользователь, пускай даже за 40/50, это не тот пугливый житель 60-х, а вполне себе современный и образованный(в плане обращения с ПК) человек. В нынешнее время, люди оного возраста спокойно делают селфи, вайны, ведут блог с лайфвидео в ютубе и еще много чего, о чем даже местная можно-молодежная хипстота нечасто заикается. И мне кажется, что времена всех этих обучающих видео канули в лету.
Fox_exe
Основная проблема неудобных интерфейсов и отсуствия реакции программы на нестандартные действия — Это маркетологи, которым надо чтобы оно работало. А багфиксы и «Юзабилити» — откладываются на потом… Но вместо «потом» наступает новый проект, новая программа…