Как вообще люди думают о программистах? Спросите соседа: «Как отличить плохого программиста от хорошего?». Внятного ответа не получится. Много программистов сидят бездельничают, а им за это ни разу даже замечания не выйдет. Много программистов лопатят днём и ночью, а им тоже ни замечаний, ни благодарностей. Здесь примерно как с врачами — лечит он человека от болезни, а всё равно виноват. Пациенту же не объяснить, что его лечат по технологии, процесс идёт верно, ему нужен результат и сразу.
С программированием так же. Сколько кому я не писал, не было ни одного толкового вопроса или замечания. Заказчик зачастую даже не может оценить степень готовности проекта! Когда проект ещё только в стадии начальной разработки он может ни с того ни с сего требовать сдать работу «завтра» — ведь по его мнению там осталось чуть-чуть. И наоборот, когда я однажды почти доделал сайт (осталось только загрузить авторский контент и добавить эффект выезда закладок), заказчик даже не думал о завершении со всеми вытекающими отсюда…
А всё почему? Причин я знаю только две:
- простой человек воспринимает готовую программу или сайт как картинку на экране монитора. Если красиво — значит хорошо, если некрасиво или вообще командная строка — значит плохо и вообще «ещё работать и работать». То есть человек даже не задумывается о том, что за внешним видом простой строки могут скрываться сотни строчек исходных кодов!
- человек, даже если увидел исходный код программы, где порядка ~3 тысяч строк, с трудом может представить себе, что в нём происходит. Для него это набор непонятных цифробукв. Он никогда не поймёт, каких умственных усилий иногда стоит состряпать конструкцию!
Посмотрите вокруг и найдите хотя бы одного знакомого, который считает аморальным использование пиратских копий ПО? 99% из них не то что не стыдится, даже не задумывается об этой сути. Впрочем это относится не только к ПО, а к любой интеллектуальной собственности. Думаю, за пределами России ситуация если и лучше, то не на много. Интеллектуальная собственность и средства коммуникации слишком быстро вошли в жизнь человечество, что оно не успело к ничему этому привыкнуть.
Словом, ростому пользователю не видны все эти циклы, исключения, сложные логические операции… Он видит только готовый результат. И всё равно зачастую недоволен. Уверен, почти никто из этих пользователей не понимает, за что с него берут деньги за покупку. Именно для таких в сущности и придумана лицензия ОЕМ (это когда софт продаётся вместе компьютером). Так они и не заметят, что в стоимость компьютера входит не только его аппаратная часть.
Самое неблагодарное то, что программа должна быть идеальна, чтобы пользователь хотя бы ею пользовался. И это ещё не значит, что пользователь будет любить программу. Программы Nero, Photoshop, AutoCAD или Maple любят многие, но оглянитесь вокруг: много ли у них фанатичных поклонников? Неужели на каждом углу мы видим фан-клубы их пользователей? Или они ходят на митинги с плакатами, шапками, футболками и шарфами с логотипами любимых продуктов? 😀 Другое дело футбол — там болельщиков хоть стреляй.
А ещё бывает кидалово, защититься от него крайне сложно. В виду виртуальности многих операций их наличие сложно доказать. Да и не перевелись на нашем свете «интеллектуально пожилые» люди, которым вы даже не сможете объяснить суть того, что с вами сделали. Нет физического предмета — нет кражи, а?
Хотя одну идею для веб-программистов я всё же могу подкинуть. Основывается она на том, что большинство заказчиков неграмотны в такой же степени, как и другие пользователи. Даже если они имеют доступ к исходному коду, они не в состоянии с ним работать. Максимум что они смогут сделать — это скопировать рабочий скрипт на сервер. Как поступаю я? Допустим есть сайт следующей структуры:
- index.php — главный скрипт
- file.php — какой-нибудь второстепенный скрипт в корневом каталоге
- /data/ — каталог для всего на свете, в первую очередь для контента
- /sys/ — каталог для системных настроек и других важных файлов
Мы смело можем встроить в index.php или file.php нечто следующее:
if ($url==’http://site.com/index.php?sekret=kill_any’) {
delete_any_file(‘/sys/важный_файл_сносящий_работу_сайта’);
}
Или для базы что-то:
$query = "DELETE FROM table WHERE id = '".$id."'";
Естественно прямых ссылок с таким url’ом (см. первый пример) на сайте не будет, об её существовании будете знать только вы. Ну и имена переменных не должны быть такими явными. Но ведь покупатель-простак, решивший вас кинуть, совсем не разберётся в дебрях исходного кода. Только после того, как заказчик расплатится вы можете ему прислать исправленную копию сайта без этой намеренной дыры.
Конечно, конокрад кодокрад-преступник сразу перезальёт свежую копию на сервер. Но вы снова зайдёте по этой ссылке и нарушите работу. До тех пор, пока он не исправит ошибку, это будет неизбежно. Ему придётся или отдать вам ваши кровные, или обратиться к другому программисту. Вам с этого ничего, но вы всё же накажете афериста.
В чём преимущества именно такого подхода? Во-первых то, что это защита «от дурака» — некоторые даже более-менее разбирающиеся в коде аферисты не подумают искать такую маленькую лазейку, а будут искать классические дыры. Во-вторых, эта возможность реализуется проще, чем даже sql-инъекции, поэтому подойдёт неопытным программистам. Мне, например 😀
Берегите себя!
Я бы все-таки поспорил с этим советом для защиты от кидалова. Но потому как расписывать долго, решил написать на эту тему пост у себя в блоге.