2008/10/22

К вопросам этики и эстетики в программировании. Часть 1. Disclaimer.

Disclaimer: 1) a renunciaction of any claim to or connection with; 2) disavowal; 3) a statement made to save one's own ass.

Вот тут некоторые интересуются, о чём собственно это я пишу? Как программирование связано с эстетикой и при чём здесь этика?
То бишь русская, в частности техническая, интеллигенция никуда не делась - что не может не радовать - и продолжает задавать свои любимые вопросы (; цитат не будет).

За интернетом далеко ходить не надо. Вот ЭТИКА, а вот ЭСТЕТИКА.
Ссылки на подробные объяснения и работы по теме "профессиональная этика" не буду приводить.

А пишу я это всё о тех, кто часто слышит в ответ "ртфм", "stfw", "не тупи" и про "ошибку в днк", и для тех, кто уже начал задаваться вопросами "как правильно писать операторную скобку?", "какое количество отступов лучше использовать?", "обязательно ли указывать return в явном виде в каждой процедуре?", "почему массивы начинаются с ноля?", "зачем учить двоичную арифметику?" и т.д.

Если у вторых вертятся похожие вопросы - задайте их, подумаем вместе.

Первым сразу рекомендую обратиться к статье "Как правильно задавать вопросы" и научиться пользоваться поисковыми машинами.

Успехов.

// 12.2006

2008/10/16

Техническое задание, и как его писать

Техническое задание - самая важная (но не единственная) часть документации любого проекта. Для чего и кого оно необходимо вполне можно почитать в интернетах, попадаются неплохие статьи.
Ниже приведён список литературы, рекомендуемой к прочтению всеми, кто чувствует себя в силах писать техзадания:
* ГОСТ 2.004-88 Общие требования к выполнению конструкторских и технологических документов на печетающих и графических устройствах ЭВМ;
* ГОСТ 2.105-95 Общие требования к текстовым документам;
* ГОСТ 2.106-96 Текстовые документы;
* ГОСТ 2.109-73 Технический проект;
* ГОСТ Р 15.101-98 Порядок выполнения научно-исследовательских работ;
* ГОСТ 34.201-89 Информационная технология. Комплекс стандартов на автоматизированные системы. Виды, комплектность и обозначения документов при создании автоматизированных систем (Взамен ГОСТ 24.101-80, ГОСТ 24.102-80);
* ГОСТ 34.601-90 Информационная технология. Комплекс стандартов на автоматизированные системы. Автоматизированные системы. Стадии создания. (Взамен ГОСТ 24.601-86, ГОСТ 24.602-86);
* ГОСТ 34.602-89 Информационная технология. Комплекс стандартов на автоматизированные системы.Техническое задание на создание автоматизированной системы (Взамен ГОСТ 24.201-85);
* ГОСТ 34.603-92 Информационная технология. Виды испытаний автоматизированных систем (Взамен ГОСТ 24.104-85 в части разд. 3.);
* РД 50-34.698-90 Автоматизированные системы. Требования к содержанию документов.
И это неполный перечень; ознакомиться с документами можно, например, здесь http://www.nist.ru/hr/doc/gost/

Главными для ТЗ-писателя можно считать
ГОСТ 2.105-95 Общие требования к текстовым документам;
ГОСТ 34.602-89 Техническое задание на создание автоматизированной системы;
второй описывает содержание технического задания, а первый - как оно должно быть оформлено.

Успехов. Будут вопросы - задавайте

2008/10/15

К вопросам этики и эстетики в программировании. Часть 0 "Комментарий о комментариях".

Комментарии - одна из самых сложных тем в программировании. В каждом языке программирования существуют конструкции, не влияющие на ход программы и игнорируемые интерпретатором; почти каждое описание языка начинается с их указаний по их использованию (сразу после объявления синтаксиса, эти главы обычно пролистываются); и почти всякий программист хоть раз в жизни горько сожалел об отсутствии "этих бесполезных комментариев".

Комментарии - архинужная и архиважная вещь. Помимо прославления отдельного взятого author и установления его copyright на данный плод трудов, из правильно составленных комментариев обычно можно узнать о лицензии, месте данного кода в пакете, версии файла и пакета, дате, изменениях, содержании файла, используемых алгоритмах, процедурах, функциях, объектах, структуре файла и другие интересные вещи. Примеры см. в пакете pear.php.net.

Хотелось бы подчеркнуть, что комментарии никоим образом не заменяют и не подменяют необходимость документирования программного комплекса, общего хода работ и т.п.. Комментарии не являются заменой технической документации! При составлении техдокументации нельзя уповать на системы механического документирования (типа DoxyDoc), которые собирают подобие документации из комментариев в коде. Документирование - отдельный вид работ, который не рассматривается здесь, но, весьма вероятно, далее я напишу и об этом, и о ГОСТах на составление ТД, которые никто не отменял.

Вернёмся к сложности комментариев. Казалось бы, пока ничего сложного, написал что-нибудь эдакое:
// myfile.php, v.0.2, 2006, (c)me
и комментарий готов. Ан нет; комментарию, помимо свойства краткости, должно быть присуще свойство полноты, либо достаточности. Комментария должно быть достаточно для понимания другим равноквалифицированным специалистом исходящих данных об описываемом объекте. Например:
// myfile.php, v.0.2, main file of MyProject - part 0 - examples' Remark for comments, 2006, (c)me

Ещё одно свойство комментариев - отсутствие избыточности и тавтологии. Например, нет необходимости писать такой комментарий в подобной ситуации:
// Create Objects
function createObj( $objName )

Но, если б эта функция, например, была бы методом некоего класса, комментарий мог бы выглядеть так:
/**
Factory method, фабричный метод
@param $objName имя класса объекта, string
@return $ret ссылка на новый объект требуемого класса
*/
function & createObj( $objName )
{
$ret = & new $objName;
return $ret;
}
Пояснения: а) фабричный метод - один из паттернов проектирования (design pattern), здесь не рассматривается. См. соответсвующую литературу. б) Использован синтаксис PHP. в) Стиль комментариев: DoxyDoc, опции Java, C.
Из данного комментария мы можем почерпнуть информацию о целевом назначении метода, о принимаемых параметрах и возвращаемых значениях. И таким образом, не вдаваясь в детали реализации, положившись на профессональную честность автора в области обезбаживания собственного кода, можем использовать программный интерфейс для собственных нужд. (Если на то есть соответствующее разрешение, лицензия.)

Кстати, совсем не дурно было бы составлять комментарии не только на Вашем родном языке, но и на одном из "языков межнационального общения" принятых ООН, в соответствии с предполагаемым ареалом распространения Вашего кода. И очень хорошо, когда комментарий написан грамотно! Повторяю: грамотно.

Можно ли обойтись без комментариев, не писать их? Угадали, конечно можно! Некоторые авторы именно так и поступают. Я сам знаю лично несколько человек.
По поводу отсутствия комментариев существует несколько мнений. Если не принимать во внимание оскорбительные мнения типа "автор кода - лентяй", можно выделить три точки зрения:
1) либо автор - гений, и он способен держать в собственной памяти все назначения переменных, функций, именования объектов и его голова от этого не пухнет;
2) либо автор считает, что написанный им код настолько ясен и доступен для понимания, что нет необходимости его документировать и комментировать;
3) либо автор предполагает, что код не будет использоваться ещё где- и когда-либо, и просто решил сэкономаить время на писании комментариев.
Первый случай обычно можно узнать по конструкциям типа if(!isset($var) && $var===true), третий - по сваленному в кучу неформатированному коду, второй - когда Вы просматриваете файл и видите исходящий от кода свет, на Вас снисходит благодать и Вы чувствуете переход в godmode, и в каждой руке по бфг9000, и фулплейт, и уже нет небходимости жать IDDQAIDKFA...

Wake up!
Write comments!
// праснис! пешы каменты!

#####################
# (c)me, 2005-2006, 24-26.11.2006
# К вопросам этики и эстетики в программировании, часть 0
#

2008/10/14

Сегодня у нас будет ещё пара статей из давно начатого и постепенно пишушегося цикла "К вопросам этики и эстетики в программировании".
А так же, если успею, начало нового "Пишем вместе". Писать будем ЦМС за два часа, но во второй части. В первой - теория.

2008/10/02

польза

http://www.skillz.ru/
именно блог здесь http://www.skillz.ru/dev/
мне понравилось. склад технической информации. с человекопонятными объяснениями. автор знает, о чем пишет. рекомендую.
да, популярные темы, но не копипаста

зы: нет, мне не платили за рекламу цсм