Горячая линия: заповеди программиста

2008-03-17T14:08:00+06:00

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

1. Чем труднее программисту,тем легче пользователю.И наоборот.
Чем больше труда вкладывает программист в программу,тем удобнее ею пользоваться.Так,если писать програмы на Java - это удобно для программиста.Пользователь же должен сначала скачать JRE последней версии,затем - саму программу (а java-бинарники довольно увесисты).Потом эта программа будет много занимать в памяти и на диске.Аналогично, если писать программы на GTK+ - это будет кошмаром для пользователя Linux,если у него старая версия библиотеки и нет подключения к Интернет;в Windows это тоже не будет идеалом.Если писать программы на Ассемблере - они будут быстры,малы и мощны.Впрочем,я всегда выбираю “золотую середину”. Это же правило можно прочитать и как “лучше продумать всё заранее,чем исправлять потом”.Это правило по-своему универсально.
2. Каждая программа должна занимать не более 1.44 Мб места на диске
По статистике,самый используемый в России способ соединения с Интернетом - это диалап.На втором месте - GPRS.Люди,которые сидят через модем или сотовый телефон,не будут скачивать “увесистую” программу.Поэтому вторым правилом для меня всегда был размер программы.В качестве точной границы я взял 1.44 Мб - этот размер знаком многим.Впрочем,даже эта рамка очень высока.
3. Программа должна работать на максимально возможном количестве платформ
Это - основное правило кроссплатформенности.Программа,написанная для одного компьютера,не нужна никому.Пользователь не должен иметь проблем с запуском программы из-за того,что он поставил не ту систему.Можно решать эту проблему по-разному: не использовать платформо-зависимые решения (что снижает оптимизацию,но повышает универсальность),делать порты на другие системы (что повышает оптимизацию,но занимает много времени)…Можно также считать,что,если есть Wine,то нет необходимости писать программы для Linux…Кстати,отсюда идет следующее правило.
4. Никогда не использовать сторонние библиотеки,не поняв досконально их устройства
Каждая сторонняя библиотека - это дополнительные зависимости.Она приносит в программу свои баги,она снижает кроссплатформенность и переносимость.Принимая в свою программу стороннее звено,вы наследуете все его баги,зависимости и оптимизации (чаще - их отсутствие).Часто проще написать функцию самому,чем подключать ее откуда-либо.Программы с 20+ зависимостями - это пример ужасного программмирования,когда не программа пишется для пользователя,а пользователь должен настраивать всю систему для одной программы.Этим грешит подавляющее большинство программ для Linux,кстати.Мой лимит для подключения библиотек - 1-2.Часто я не подключаю чьи-то библиотеки в чистом виде,а урезаю и перерабатываю их (сохраняя копирайты,конечно),удаляя все ненужные мне функции.Минимализм - значит,минимализм во всём.
5. “Никому не требуется памяти больше 1 Мб”
Фраза знаменитого Б.Г.,немного в извращенном виде,прекрасно иллюстрирует это правило.Минимизация использования памяти - вот как можно это назвать.Опять же,пути решения абсолютно различны.Но можно точно сказать,что все интерпретируемые языки справляются с этой задачей плохо a priori,что надо всегда иметь в виду. У меня несколько компьютеров.На том,на котором я работаю ежедневно в данный момент,стоит 512 Мб памяти.На том,на котором я работал два месяца назад,стояло 16 Мб памяти.Стандартный блокнот Windows XP занимает в памяти 2 256 Кб.Минимальный объем памяти для запуска Windows XP - 64 Мб.Теперь представьте,что 3,44% всей памяти компьютера уходит на БЛОКНОТ!!!Мне даже не хочется это комментировать.
6.Неважно,какое сейчас железо считается современным.
Я часто слышу высказывания вроде “Сейчас на каждом компе стоит 512 Мб памяти,крутые процессоры под 4 гигагерца и жесткие диски на 40 гигов”.Мне становится тошно.Никакое современное железо не может служить оправданием корявому программисту.Опять же,подобные цитаты часто используют как контраргумент правилу 1.Один из моих компьютеров был куплен в 1997м году.На нем стоит Celeron 600 и 64 Мб оперативной памяти.Я не собираюсь проводить его апгрейд.Я не собираюсь проводить апгрейд компьютера,чтобы на нем запускалась новая версия того же Блокнота.Я понимаю,что новые возможности техники хороши и нрех ими не пользоваться,выжимая всё из системы.Но я не собираюсь отдавать всю вычислительную мощность моих компов на торрент-клиент или интернет-браузер.Современное железо нужно только играм и программам для обработки видео.Даже обработка аудио уже не требует максимально мощных компов.
7. Украшения не являются обязательными.
Программа может быть лучше другой,если она хорошо выглядит.Но определяющим значением всегда останется функциональность.Я опять же не собираюсь ставить на компьютер красивую,но медленную программу - я буду довольствоваться псевдографической быстротой.Более того - украшения украшениям рознь.Даже в псевдографике возможно создать шедевр.Когда я увидел Doom Roguelike и Cheops,я влюбился в эти игры.Хотя по современным меркам их графика даже графикой не называется (к Cheops это относится в полной мере).Красота не должна мешать работоспособности.Украшения не являются обязательными.На то они и украшения.
8. Не стоит перекладывать на автоматику то,что можно сделать самому.
Комментировать это правило не буду,оно,я думаю,понятно.
9. Неважно,какой ты используешь язык программирования - важно,что ты умеешь делать на нём
Я часто наталкиваюсь на нападки против каких-то языков программирования.В частности,Сишники очень не любят Дельфишников,называют Дельфи “детским языком”,”языком для учёбы”.PHPшники не так рьяно,но тоже достаточно систематично нападают на сторонников Perl.Наконец,у многих вызывает одинаковое ощущение словосочетание “Visual Basic”.:-) Это не очень верно.Выбор языка зависит только от программиста.Можно сделать на perl программу лучше,чем на Ассемблере.Можно сделать на Дельфи программу лучше,чем на Си.Всё зависит от мастерства программиста.
10. Всё,что сделано,может быть взломано.
Взломать можно всё.Поэтому любой алгоритм защиты имеет лишь относительную надёжность,которая зависит от развития вычислительной техники на данный момент.Сейчас компьютеры совершенствуются быстрее,чем создаются новые алгоритмы.Абсолютной защиты не существует.Поэтому смысла в защите своего кода с помощью другого (своего или чужого) кода я не смыслю.

За сим кланяюсь. Ваш Oreolek.