|
Советы начинающему программисту...
Последняя редакция 17 марта 2005 года.
|
Введение.
Доброго времени, мой читатель!!!
В настоящее время по ряду каких-либо причин каждый человек сталкивается
с вопросом программирования. Будь то какой-либо офисный пакет - для решения
вопросов оформления данных, либо какой-либо язык программирования - для
выполнения расчетов. Поэтому Вы читаете эту статью - Вы столкнулись с
программированием. И эти советы, надеюсь, помогут Вам в дальнейшем.
Совет 0
Если Вы хотите получить пользу от программирования - не занимайтесь им...
Но если все таки решили - то в путь...
Совет 1
Прежде чем что-либо программировать подумайте существуют ли уже
написанные готовые программы или библиотеки на эту тему и можно ли
их использовать.
Если существуют - используйте. Этим Вы сэкономите свое время. Если
нет - тогда пишите...
Совет 2
Перед тем, как работать с компьютером определитесь, что Вы от него хотите.
В начале всего, позвольте мне вспомнить случай из моей жизни.
Начиналось это все в глубокой древности, когда XT считалась суперкомпьютером
и я изучал языки еще серии "turbo".
Я подошел к человеку работавшему с техникой на профессиональном уровне
(asm, c, turbo-pascal,...) и задал вопрос, который перевернул все мое
понимание о программировании. Я задал ему вопрос: Какой язык программирования
мне начать изучать, чтобы мне потом он мне пригодился в дальнейшем?
На это он мне ответил: - учи Русский язык - язык которым ты свободно можешь
выражать свои мысли.
С тех пор утекло много воды и даже век тысячелетием сменился но. НО!
Этот весьма мудрый совет остается в силе. Вы хотите научиться управлять
компьютером, но прежде всего Вам нужно научиться корректно выражать Ваше
желание. А без знания языка Вашего общения тут никак не обойтись.
Совет 3
Перед тем, как начинать писать какую-либо программу подумайте
где она будет выполняться.
Это позволит Вам сразу настроиться на тот аппаратный уровень,
в котором будет выполняться Ваша программа.
Если это боьшой быстродейственный сервер с почти неограниченным
количеством памяти - это одно, а если это небольшое портативное
устройство, имеющее ограничение по памяти и быстродействию - это
совсем другое.
Совет 4
Используйте, при написании программ, основных 7 управляющих конструкций, которые
позволяют изменить естественный ход выполения команд.
Вначале поясню, что я понимаю под естественным ходом выполнения команд.
Под под естественным ходом выполнения команд понимается процесс, аналогичный
про цессу чтения книги: построчно слева направо и постранично - сверху вниз
(арабы пусть этот текст поймут по своим правилам).
Перечислю эти основные 7 управляющих конструкций:
- Условие (альтернатива или ветвление);
- Множественное ветвление (выбор);
- Цикл "пока";
- Цикл "до";
- Цикл с параметрами;
- Вызов функции или процедуры;
- Переход к метке.
Совет 5
При написании программ всегда старайся структурировать алгоритм.
Под структурированием алгоритма я понимаю необходимость придерживаться
структурных блоков:
- Условия:
if(условие){ команды }
if(условие){ команды } else {команды}
- Множественное ветвление:
switch(параметр) {
case вариант 1:
case вариант 2:
...
case вариант N:
default:
...
}
- Цикл "пока";
while(условие){ команды }
- Цикл "до";
do{
...
}while(условие);
- Цикл с параметрами;
for(инициализация, условие выхода, корректировка){ команды }
- Вызов функции или процедуры;
Функции: результат = Имя(параметры);
Процедуры: Имя(параметры);
- Переход к метке.
goto Имя метки;
Никогда не пренебрегайте графическим выделением структурных блоков
- делайте смещение тела блока при написании программ. Современные
компьютеры имеют достаточно памяти для размещения Вашего исходного
текста. А потерянное время при разборе неструктурированной программы
в дальнейшем будет весьма велико.
Совет 6
Перед написанием программы или модуля продумайте все переменные и
их размерности, которые будут использоваться.
Это прекрасно, когда Ваша программа пользуется всей доступной памятью,
но сколь много памяти не будет, у нее есть свойство заканчиваться в
самый неподходящий момент. Поэтому, если Вам необходимо хранить,
например, номер месяца года (часы, минуты, секунды, и т.д.) - для
этого достаточно всего одного байта.
Совет 7
Старайтесь не использовать одну и ту же переменную для хранения
различных значений.
Это запутает как Вас, так и людей, которые будут работать с Вашим
кодом в дальнейшем.
Совет 8
Старайтесь в Ваших модулях делать один вход и один выход.
Этим Вы сможете предупрежить массу ошибок и улучшить читаемость алгоритма.
Совет 9
Досрочное завершение цикла - вспомогательной логической переменной.
Если нужно произвести завершение цикла выполняйте это используя
вспомогательную переменную логического типа. При проверке условия выхода
из цикла производите проверку и этой переменной на истину. В коде цикла
создайте установку этой переменной в значение истины в том месте, где
нужно организовать досрочное выполнение.
Совет 10
Не нужно использовать значение параметра цикла после его завершения.
Во многих слечаях переменная параметра цикла - локальная и после
завершения цикла память, выделяемая под нее будет освобождена и
в ней может содержаться мусор. В слечае "умного" компилятора (а
в настоящее время уже не осталость экстремалов писать в машинных
кодах) - он может выдать ошибку.
Совет 11
Не возможно обьять необьятное...
Не нужно закладывать в программу решение слишком сложной задачи,
если требуется решить простую.
Совет 12
Как переменную Вы назовете - так она и вести себя будет в дальнейшем.
Используйте для названия переменных не слишком длинные и "говорящие" имена.
Это в дальнейшем позволить повысить читабельность программы.
Совет 13
Пишите, пишите и еще раз пишите комментарии в ваших программах.
По этому совету существует несколько мнений:
"Настоящие программисты комментариев не пишут. Программа сама по себе
является лучшим комментарием."
Вспомню случай из своей жизни. Было дело - как то нашел на дискете
программы в исходных кодах. Сел и начал их просматривать. А программы -
ни единого коментария - ни кто написал - ни что делает... Смотрю -
классно программа написана - делает то что надо и, вроде, стиль есть
и задача - знакомая... Смотрю - думаю как бы этот код "прикрутить"
куда-нибуь... И в конце смотрю копирайт - мой... Вот так...
Вот так - потратил минут 20 на изучение непрокомментированного
своего текста. Не экономьте время на написании комментариев.
Совет 14
Всегда производите начальную инициализацию переменных.
При выделении памяти под переменную - только операционная система
знает что там.
Компилятои среда исполнения - не самые совершенные программы. Поэтому
небольшое усовершенствование Вашей - не помеха.
Совет 15
Старайтесь использовать готовые решения.
Если Вы пишете программу - не изобретайте "велосипед". Существует
масса готовых решений - сходите в библиотеку, посмотрите литературу
на эту тему и запрограммируйте.
Вы потратите времени гораздо меньше на поиск, чем на написание и отладку
собственного алгоритма.
Совет 16
Не спрашивайте у пользователя очевидные и вычисляемые значения.
Пользователь может об этом и не догадываться.
В моей практике встречались программы, которые спрашивали у меня
количество памяти в моем компьютере. Я, конечно, знал и давал им
ответ. Но сколько памяти в компе в интеренет-клубе пользователь может
и не знать.
Кроме этого не нужно спрашивать у пользователя физические
или математические константы. Они не меняются и их можно заложить
в программу.
Совет 17
Дублируйте ввод ВАЖНЫХ значений.
При вводе важных значений, например, пароля на базу данных пользователь
может при вводе допустить ошибку. Дальнейшая работа при этом будет
недоступна. Для исправления такой ситуации попросите пользователя
произвести ввод пароля повторно.
Совет 18
Перед принятием от пользователя ответственных решений "отрезвляйте" его.
Многие действия пользователь выполняет на "автопилоте". И может случайно
разрешить какие - либо действия не полностью осознав сути происходящего.
Пример: пометить несколько файлов и удалить их без права на восстановление.
Пусть Ваша программа в такой ситуации задаст ему дополнительный вопрос.
"Споткнувшись" об него пользователь вспомнит что же он все-таки делает и
уже более точно и уверенно ответит на вопрос.
Совет 19
При рабое с динамическими массивами оговаривайте минимальный и
максимальный размер.
Памятиь компьютера хоть и велика но не безгранична.
Вы не сможете организовать бесконечно большой массив.
Совет 20
Если Вы запрашиваете у пользователя ввод каких-либо данных - проверяйте их.
Ведь пользователь может ТАКОГО навводить....
Проверяйте вводимые им данные. Больше проверок - меньше ошибок и сбоев...
Побольше вставляйте в программу так называемых "защит от дурака".
Совет 21
Не напрягайте пользователя и не "балуйте" машину.
Не поручайте пользователю выполнять рутинные операции - позвольте за
него их выполнить машине. Пользователю будет легче, да и машине
скучать не прийдется. Помните - человек должен думать, а машина работать.
Совет 22
Возможность проверить данные и исправить ошибки.
Перед началом обработки, введенных пользователем, данных произведите
их отображение на экране и дайте возможность пользователю просмотреть
их еще. Может он увидит неточность и исправит ее или согласится и
продолжит дальнейшие вычисления и обработку.
Совет 23
Подскажите пользователю как вводить данные.
При запросе у пользователя каких либо данных в общей форме постарайтесь
в программе описать как же все таки их вводить. Маленькая помощь
не только ускорит ввод, но и позволит пользователю корректно и правильно
ввести значения. Это упростит дальнейшую обработку информации и
уменьшит количесто "ошибок ввода".
Совет 24
Выделяйте ввод ответственных данных.
В настоящее время возможности компьютеров довольно высоки и позволяют
выделить поля ввода как цветом, так и размером.
Выделяйте поля, где необходимо сконцентрироваться на вводимом значении
более контрастным цветом или повышенным размером используемого шрифта.
Совет 25
Не "лепите" воод всех данных в одном окне или форме.
Во первых это не удобно, во вторых не все пользователи
обладают отменным восприятием.
Группируйте вводимые данные по их логическому значению.
Если от пользователя требуется ввести все данные - он то
все равно их введет. Так сделайте для него этот процесс удобным и комфортным.
Совет 26
Не требуйте от пользователя ввода условностей.
Если возможно ввести коды по их значениям - сделайте это.
Пользователю удобнее работать с понятными строковыми значениями, а не
с кодами этих значений.
Совет 27
Помогайте пользователю при вводе данных.
Если у Вас есть возможность программно переключать регистр и
языковую раскладку - помогите пользователю сделать это
автоматически. Чтобы у него "не болела голова" на этот счет.
Как иногда не удобно введя длинную фразу смотреть на нее не в той раскладке
или не в том регистре... Приходится вспоминая всех программистов - ламеров
повторять ввод уже в нужном регистре или раскладке...
Совет 28
Облегчения и пояснения не откладывайте на потом.
При написании программы не откладывайте на потом написание
комментариев, строк помощи и пояснений к программе и
данным, как обычно случается этого "потом" не наступает
НИКОГДА.
Совет 29
В коментариях к переменным описывайте не только ее предназначение но и то, какие действия над ней будут производить.
Это позволит понять логику программного модуля просмотрев
описания переменных и не заглядывая в раздел кода.
Совет 30
Если пользователю приходится просматирвать часто меняющуюся
информацию, то сделайте так, чтобы ее обновление сопровождалось
какм - нибудь индикатором.
Иначе пользователь не поймет в случае, когда параметр не изменяется,
прошло ли обновление или Ваша программа этого не выполнила.
Кроме этого прользователь по условному сигналу (желательно звуковому)
спокойно подойдет к монитору и посмотрит новое значение, а не
будет нервно и вспоминая разработчиков поглядывать на экран в
ожидании скорейшего обновления :-).
Совет 31
Не "скучайте" вместе с пользователем.
Пока пользователь изучает информацию на дисплее компьютера пусть
Ваша программа выполняет действия дальше... Даже на медленном
компьютере используя такие моменты Вы сможите заметно ускорить
выполнение задачи. Пользователи будут от этого просто в восторге...
Совет 32
Предупреждайте некорректный ввод.
Если в поле ввода требуется ввод только числовых данных - произведите
в Вашей программе игнорирование на ввод текста. И наоборот.
Иногда пользователь случайно может ввести некорректный текст или
сделать опечатку, а Ваша программа должна потом будет с этим "бороться"...
Помогите пользователю не допустить некорректный ввод.
Совет 33
Имей в программе "зашитый" контрольный пример.
Имея пример легко будет провести демонтрацию работы Вашей программы
перед заказчиком. Да и пользователю по началу будел легче "поиграться"
с контрольным примером, чтобы разобраться где и что нужно вводить.
Совет 34
Просчитай контрольный пример на калькуляторе.
Вы должны быть полностью уверены в результате. Поэтому не ленитесь
просчитать конечный результат без компьютера.
Совет 35
Уверенность в себе - хорошо, а отладчик лучше.
При написании программы не игнорируйте внешних и встроенных
в систему программирования средств отладки. Сколь бы ни был
огромен Ваш опыт в программировании в программе всегда могут
быть ошибки.
Совет 36
Помечайте в исходной программе места, требующие дополнительной
оптимизации или/и доработки.
Ваша программа может быть уже написана и работать, но в любом
случае возникают куски кода, которые можно было бы доработать.
Как пример могу привести случай из жизни:
В своих программах я использовал простой способ сортировки - пузырьком.
Но знал, что существуют масса других более быстрых способов сортировки.
Поэтому я в своих программах комментарием выделил эти куски кода. И когда
написал более быстрый способ сортировки - то мне было просто сменить вызов
одной функции на другую, ведь помеченные коментариями вызовы найти было
легко.
Совет 37
Разбивайте сложные вычисления на части.
В сложной формуле с массой скобок запутаться очень легко. А проверить
ее вычисление вообще соложно. Поэтому в процессе программирования сложных
формул или логических условий разбивайте ее на составные части.
Вы можете проверить значение каждой части, а потом всего результата.
Совет 38
Избыток скобок в формуле - не ошибка!!!.
Если сомневаетесь в необходимости брать в скобки то или иное действие -
берите. Лишние скобки и Вам подскажут и компилятору последовательность
группировки вычислений.
Совет 39
Открыли скобку - сразу поставьте парную закрывающую скобку.
И тем самым избавитесь от массы времени, потраченного на поиск
парной скобки.
Совет 40
Контролируй логические выражения.
При программировании сложных логических выражений проведите
тестирование всех возможных вариантов.
Совет 41
Не делайте многократно то, что можно сделать один раз.
Используйте такие конструкции как циклы, вызов процедуры или функции.
Кроме того используйте кроссплатформенные средства разработки и выполнения.
Одним из таких языков программирования является Java. Программы, написанные
на этом языке без изменений в коде работают, как в среде Windows, так и в
среде Linux, и других....
Совет 42
Оптимизируйте, оптимизируйте и еще раз оптимизируйте.
Посмотрите пример кода:
for(int i = 0; i < s.strlen(); i++){
...
}
Многие программисты так и пишут. А ведь в нем содержится очень грубая
ошибка оптимизации. Разберем этот пример. При первоначальном входе в цикл
компьютер выделяет память под переменную уикла и инициализирует ее в
начальное значение. Далее выполняет цикл и переходит к проверке условия
завершения. В условии завершения вызывает метод строки s вычисления ее длины.
И проверяет это значение с перенной цикла. Далее .... а далее скажу СТОП!
Ошибка уже пройдена. На языках семейства Паскалевых функция возврата длины
строки выполняется очень быстро т.к. первым значением в памяти, выделяемой под
строку содержится это значение. В языках семейства C или Java признаком
конца строки является '\0' - ноль. Поэтому при вычислении длины строки
перебирается вся строки и вычисляется ее длина. А это при маленьких строках
не много, а при больших - набегает существенно.
Ну далее все понятно.....
Пример оптимального кода:
int l = s.strlen();
for(int i = 0; i < l; i++){
...
}
И наслаждаемся быстротой работы и полетом мысли...
Совет 43
Оцените точность встроенных функций.
Для повышения точности расчетов и уверенности в Вашей программе
проверьте предельные значения и точность встроенных функций. Это
полезно для тригонометрических и других функций.
Совет 44
Спешите медленно.
Не спешите сразу бросаться решать задачу, подождите, исследуйте
программное обеспечение и работы, которые ведутся в этом направлении
сторонними программистами. Может в ближайшее время выйдет библиотека
или программа, где решена Ваша задача наиболее оптимальным способом.
Совет 45
Умейте остановиться.
Совершенствуя алгоритм Вашей программы, знайте меру. Фанатичное увлечение
компьютером - это уже болезнь. Умейте себя останавливать. Всем известная
пословица "Лучшее - враг хорошего" как раз уместна в этом случае...
И еще - компьютер это инструмент достижения цели, а не сама цель...
Совет 46
Программисты - тоже люди.
Помините, что программисты - обыкновенные люди и им тоже свойственно
ошибаться. Если Вы нашли в операционной системе, в программе
компилятора или в другой программе ошибку - дайте знать об этом ее
разработчику...
Совет 47
Не давайте простаивать компьютеру.
Компьютеры в настоящее время достигли невероятной скорости расчетов, но
все еще есть процессы, которые выполняются довольно медленно. Как пример
можно привести работу с потоками ввода-вывода по медленным каналам
или обработка большого количества данных на внешнем носителе.
Поэтому, старайтесь в своих программах выполнять действия пока пользователь
просматривает выведенную информацию.
Совет 48
Красота спасет мир.
Современные системы позволяют вставлять в программы элементы мультимедии.
Используйте такую возможность для оформления Вашей программы графическим
и звуковым материалом. Это пойдет только на пользу, т.к. пользователь
менее устанет при работе с Вашей программой.
Совет 49
Предупреждайте перед выполнением необратимых действий.
Пользователь может по случайности нажать не ту кнопку и "все, что нажито
непосильным трудом" пропадет. Чтобы исключить это - предупредите один
или больше раз о выполняемом действии, его последствиях. Вопросы задавайте
таким образом, чтобы исключить возможность ответа на "автомате".
Совет 50
Соблюдайте авторский стиль.
Пришите программы так, чтобы ее авторство было видно сразу и без явного
указания автора программы.
|
Продолжение следует... Ваши мнения и пожелания, а также любую конструктивную
критику буду рад получить по электронной почте.
|