0

О хорошем коде.

Сегодня к вечеру меня накрыл приступ графомании. И писать вроде хочется, и в то же время, особо не о чем: дом-работа-дом-работа-дом-работа-дача.... :)

Давно, лет 10 назад, на одном форуме, я увидел тему "Как не надо писать код". В противоположность ей я открыл тему "Как надо писать код". Через пару дней в первой теме было несколько страниц сообщений, а в моей - добавилось только одно или 2. После того случая я не раз замечал, что советов "как не надо" - очень много, а вот "как надо" - днем с огнем не сыщешь. Не пойму - это скромность или страх ответственности за свои слова? Полагаю, что второе, поскольку я еще не встречал программера, который бы публично признал себя.... ну пусть не тупым, но , скажем так, тугодумом :)

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

Признаки хорошего кода:
1. Хороший код не пребывает долго в неизменном состоянии, потому что он меняется. Именно из-за этого он и хорош - его легко менять, и если вдруг в программу нужно внести изменения, то (если есть такая возможность) проще их сделать в том месте, где их сделать проще :). Иначе говоря, хороший код - код, который легко дополнять и изменять в случае необходимости.
2. Вытекает из первого - хороший код понятен. Именно поэтому его менять легко, - не боишься чего-то поломать. Если не понимаешь, что и для чего делает код, но вносить изменения необходимо - ощущение такое, что движешься по минному полю. Такой код ужасен.

Ну вот пожалуй, и все признаки, остальное - вторично.

Теперь несколько конкретных приемов, облегчающих жизнь. Приемы применимы к объектно-ориентированным языкам с Си-подобным синтаксисом: C++, C#, Java.

1. Старайтесь в качестве параметра метода передавать интерфейс, а возвращать конкретный тип.
Вот это:
ArrayList foo(Map par);
в большинстве случаев лучше, чем вот это:
List foo(HashMap par);
Лучше по той причине, что наверняка избавит вас от необходимости явного приведения типов от базового к производному.
За исключением тех случаев, где метод может возвращать разные типы, производные от одного базового. Тут, естественно, нужно возвращать интерфейс или базовый класс.

2. Любая сущность должна быть тем, чем она выглядит, а не чем-то другим. Т.е. как минимум, переменную, по смыслу являющейся счетчиком, не стоит называть date или gender (нужно назвать counter), а переменную для хранения даты - не стоит называть counter (нужно назвать date).

3. Вместо синглтонов используйте static. Это в продолжение приема №2. В чем разница между синглтоном и static-классом (в C++ это может быть класс с приватным конструктором и исключительно static-полями и методами)? Имхо, только в том, что static-класс сразу показывает, что он есть на самом деле, в то время как синглтон притворяется обычным классом. Единственное исключение, которое мне приходит в голову, - это случай, когда экземпляр класса должен быть единственным, и при этом он обязан реализовать какой-то интерфейс (к примеру, экземпляр этого класса нужно передать в метод, принимающий экземпляры, реализующие этот интерфейс).

4. Не старайтесь делать "задел на будущее". Реализуйте только тот функционал, который необходим для решения заданной задачи, и ни в коем случае не больше. В моей практике еще не было случая, когда сделанный "про запас" функционал пригодился бы в будущем. В лучшем случае он безболезненно удалялся, в худшем - становился рудиментом, мешающим дальнейшему развитию проекта.

5. Ну и конечно, метод должен выполнять такие действия, которые можно сформулировать естественным языком. Написание метода лучше сразу начать с шапки-комментария, в котором будет описано, что метод делает, какие параметры принимает, и для чего они нужны. Если долго не получается написать такое описание, значит или метод должен быть не один. Очень способствует появлению у кода признака №1 :)

6. Вытекает из 5: методы должны быть короткими. Насколько? Должны целиком помещаться на экране. Аналогично 5 очень способствует появлению у кода признака №1 :)

7. Совет насчет классов: если есть трудности в понимании того, какие у класса должны быть методы и какие поля - нужно написать словесное описание того, что класс должен делать. После того, как написали - прочитайте написанное. Глаголы будут означать методы, необходимые классу, существительные - поля класса. Изредка существительные - это параметры, передаваемые в методы.

Все, графоманский зуд удовлетворен:) Можно идти спать :)

0

Петиция против слежки за учащимися и учителями

Министерство образования подготовило проект Постановления Правительства (http://regulation.gov.ru/project/14194.html?point=view_project&stage=1&stage_id=5259), согласно которому администрации школ и вузов будут обязаны отслеживать активность учеников, студентов, учителей и преподавателей в социальных сетях и на оппозиционных сайтах
Ссылка на петицию против данного законопроекта (на change.org)
0

Рыцарь совка и песка

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

Собственно, главный герой и начальник экспедиции в песчаный карьер:

Начальник экспедиции проводит изучение поверхности карьера и поиск полезных ископаемых (камушков):
Подготовка самосвала к погрузке:
Процесс погрузки на самосвал в разгаре:


0

Прогулка с Тимошкой

На этой неделе в четверг у нас на работе выключали электричество - на весь день. В связи с этим у меня образовался незапланированный "недовыходной". "Недо" - из-за того, что все равно требовалось быть на связи. Зато рабочий день окончился пораньше, и появилась возможность сходить с Тимкой на прогулку в будний день, вечером, до того, как стемнеет. Я как всегда, не расставался со своим телефоном, на который и сделал несколько фоток довольного дитяти. Смотрите, наслаждайтесь! :)

0

В чем был виноват Сердюков

Тут недавно под крымский шумок, незаметно, амнистировали тов. Сердюкова.

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

Как-то по дороге в Москву (я ехал в командировку) зашел обычный вагонный разговор "обо всем". То да сё, разговор свернул на политику, на Украине тогда еще тишина была, и чего-то вспомнился Сердюков... Я посетовал своему собеседнику о том, что никак не могу догнать, за что же тов. Сердюкова обидели. То что за ним что-то было - это вполне вероятно, поскольку я не верю, что в нашей стране могут на такую должность поставить человека, на которого нет чемодана компромата... Ну так все ж там (наверху) такие... И ведь ничего конкретного ему не предъявили - до сих пор свидетелем проходил, лишь недавно какое-то обвинение появилось... Ну и т.д. в том же духе. В ответ мой собеседник сделал круглые глаза и сказал: "Как, вы не знаете?". И рассказал примерно следующее...

Есть такой тов. Зубков. Когда-то о нем было что-то слышно, когда народ гадал, кого же наш ВВП (Вождь Великий и Прекрасный) назовет своим приЁмником. Так вот, тов. Зубков очень хороший друг ВВП. Т.е. не просто хороший, а хороший со словом очень. А у тов. Зубкова есть зять, и зять этот - не кто иной, как тов. Сердюков. То есть, Сердюков женат на дочери Зубкова. И по словам моего собеседника , Сердюков повадился ходить налево (догадайтесь, куда - правильно, к тов. Васильевой). Его старшие пацаны пару раз предупредили, но , видимо, сперматоксикоз - вещь серьезная и способна заглушить инстинкт самосохранения. Короче, товарищ Сердюков не внял советам... Ну, собственно то , что с ним происходило - результат такого его поведения... Его просто поставили на место и хорошенько унизили.

И эта история мне показалась наиболее вероятной и все объясняющей... Как правильно нужно перевернуть фразу "только бизнес, ничего личного"? "Только личное, никакого бизнеса"? Вот и тут то же самое...

Оригинал.

0

О нематериальном

Давно хотелось сесть и накатать что-нибудь этакое в наш забытый бложек :)
Сейчас поздний вечер, минут 15 назад мы уложили спать нашего сыночка Тимошеньку... Наверно было бы правильнее выложить сюда его фотки, вместо написания графоманских текстов. Я это уже давно сам себе обещаю сделать, но все ленюсь подключить телефон к компу и проделать простейшие манипуляции...

Ну вот, немножко повинился, а теперь попробую запечатлеть несколько тезисов, созревших в моем измученном программизмом мозге.
Речь пойдет об информации. Все ее используют, и наверно мало кому придет в голову, что информация - нематериальная штука. Ну почему-то Википедия так думает...

Наверняка можно сказать следующее:
1. Информация не имеет массы (магнитная пленка не изменит массу, независимо от того, что на ней написано).
2. Информация является таковой лишь в присутствии субъекта - существа, способного ее воспринимать. Если имеется запись на неизвестном нам языке, либо зашифрованная неизвестным ключом по неизвестному алгоритму - для нас это всего лишь "белый шум".
3. Информация и материальный мир связаны через носители. Пока что я не могу себе представить, как информация может существовать без носителя :)
4. Информация и материальный мир связаны принципом неопределенности Гейзенберга. Звучит дико, но мне кажется, это правда. Можно написать вот такую "бытовую" формулировку принципа неопределенности: получая информацию об окружающем мире, мы изменяем мир. К примеру, что бы измерить некоторую физическую величину, необходимо часть этой величины использовать для ее отображения, в итоге исходное значение будет немного изменено.

З.Ы. Вероятно, первый коммент будет такой: "Лучше бы опубликовал фотки ребенка!" :)

0

Петиция против строительства ВСМ-2

Подпишите, пож-ста петицию

"Президенту РФ В.В.Путину: Требуем пересмотреть план строительства ВСМ-2 "Москва-Казань"!"

на Change.org.


При строительстве под снос пойдут порядка 2500 муниципальных, частных и дачных домов, в т. ч. несколько школ.
На мой взгляд, это строительство - просто очередной распил бюджетных денег (которых и так немного), и от которого больше вреда, чем пользы.

Подписать можно здесь:

http://www.change.org/ru/петиции/президенту-рф-в-в-пу..