21 Об ответственности

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 8 мес., 2 нед. назад.

  • Автор
    Сообщения
  • #3599

    Одна из основных причин того, что 98% всех исходников и программного обеспечения являются самым настоящим говном заключается в том, что большинство людей, так или иначе задействованных в процессе разработки программного обеспечения, напрочь лишено чувства ответственности. Это касается всех, начиная от самых низкоуровневых разработчиков драйверов, заканчивая менеджерами проектов и их начальством.

    О чем речь?

    О какой именно ответственности идет речь? Речь идет не о корпоративном патриотизме, не об ответственности перед компанией, начальством, или какими-то конкретными людьми. Речь идет об ответственности, просто об ответственности за свои действия.

    Существует два вида ответственности — «настоящая» и «ненастоящая». «Настоящая» ответственность это такая ответственность, при которой человек прежде всего думает о людях, которые будут пользоваться плодами его деятельности. «Ненастоящая» ответственность это такая ответственность, при которой человек прежде всего думает о том, как выполнить работу так, чтобы начальник остался доволен.

    Каждому человеку, участвующему в разработке программного обеспечения, следует представлять себе некоторую воображаемую личность, которой он передает в пользование все плоды своей деятельности. Если речь идет о программисте, то воображаемая личность — другой программист, который будет использовать классы и функции, разработанные программистом реальным. Если это архитектор, то следует представить второго архитектора, получающего разработки и пытающегося продолжить дело первого архитектора.

    Я говорю о некотором воображаемом пользователе, о котором уже не раз упоминал ранее. Это тот, кто пользуется вашими разработками. Это тот, перед кем нужно нести ответственность за все свои действия и решения.

    Предположим…

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

    • …если пользователь смотрит на класс и не понимает как им пользоваться;
    • …если пользователь умудрился с помощью класса завалить программу или хотя бы заставить ее работать некорректно;
    • …если пользователь перенес свою программу на другую платформу, и она не заработала из-за этого класса;
    • …если у пользователя возникли проблемы, возможность возникновения которых не была очевидна при первом знакомстве с классом;
    • …если пользователь смог заставить класс работать с недопустимыми (не валидными) данными из-за того, что в классе не были сделаны соответствующие проверки;
    • …если у пользователя возникли проблемы из-за того, что ему в определенный момент пришлось отказаться от использования этого класса.

    При этом никакие доводы и аргументы не могут быть оправданием для программиста. «Сам дурак, не умеет программировать» — в корне не верное суждение. У программиста нет и не может быть никаких оправданий. Никакие unit-тесты, никакой test driven development, никого не интересуют если у пользователя возникли проблемы.

    Задача ответственного программиста заключается в том, чтобы написать такой класс (функцию, модуль, библиотеку и так далее), чтобы ни у кого не было ни одной возможности его в чем-либо обвинить. Программист должен защитить пользователя со всех сторон. Что бы пользователь не вытворял с классом — это не должно доставить ему никаких неприятностей. Если же пользователь понял, что класс не отвечает его требованиям, то отказ от использования этого класса должен быть легким и безболезненным.

    Разумные рамки

    Следует использовать чувство ответственности перед себе подобными в качестве главного руководства к действию, однако, при этом не стоит забывать и о здравом смысле — не следует брать на себя то, к чему вы не имеете никакого отношения.

    Если программа тормозит у конечного пользователя или ей не хватает ресурсов (конечно же, если требования программы отвечают здравому смыслу, то есть в ней намеренно не поменяли quick sort на пузырек), то это никак не попадает под сферу ответственности разработчиков. Во-первых, у пользователя может быть старое железо. Во-вторых, сложные системы не могут не требовать ресурсов — слона в карман не спрячешь, от этого никуда не деться. Программа, написанная ответственным программистом, требует ровно столько ресурсов, сколько необходимо.

    Безответственность

    Безответственность можно увидеть везде и во всем — она проявляется не только в программировании как таковом. Самое обидное то, что безответственно поступают даже самые крупные корпорации.

    Многие программы, требующие установки, не имеют специальной команды для удаления их из системы. Например, та же Visual Studio 2005. Видимо Microsoft считает, что от ее использования просто невозможно отказаться. Многие программы не удаляются до конца, часто оставляя после себя какой-нибудь мусор в реестре, или даже активные сервисы. Порой, для того чтобы удалить из системы ту или иную программу, приходится обладать определенными знаниями reverse-engineer-а (или, по-русски, извиняюсь за пошлость, хакера).

    Половина производителей звуковых карт во время установки драйверов пытаются впарить вам собственный аудио плеер (или даже делают это вообще без спроса, ассоциируя в системе свой плеер со всеми типами аудио-файлов), на котором кроме огромного логотипа компании ничего нет. Ладно бы еще плеер был хороший. Так ведь нет — дерьмо-дерьмом, до Winamp-а как раком до Китая.

    Некоторые программы совершенно без спроса залезают в автозагрузку, причем так, что не каждый tweaker вообще знает про такие места автозагрузки, не говоря уже о стандартном msconfig.exe.

    *nix-ы — вообще отдельная песня. Заставлять пользователя собственноручно скомпилировать программу перед ее использованием — верх бескультурья и безответственности. Операционная система с таким подходом не может быть ориентирована на нормального здравомыслящего конечного пользователя. Максимум — на лохматого системного администратора с бутылкой пива в руке и беломориной в зубах.

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

    От автора

    В заключении скажу следующее — я не являюсь сторонником Windows или ненавистником *nix-систем, как это могло показаться. Бездарных программ полно везде. Одна программа хороша из тысячи или две — разница не существенная.

Для ответа в этой теме необходимо авторизоваться.