2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5, 6
 
 Re: Как правильно писать программы?
Сообщение02.08.2010, 12:01 


27/07/09
21
Цитата:
Современные технологии программного обеспечения располагают широким репертуаром формальных методов, которые помогают убедиться, что система ведет себя в соответствии с некоторой спецификацией ее поведения, явной или неявной. На одном конце шкалы находятся мощные конструкции, такие как логика Хоара, языки алгебраической спецификации, модальные логики и денотационные семантики. Все они способны выразить самые широкие требования к корректности программ, однако часто очень трудны в использовании и требуют от программистов высочайшей квалификации. На другом конце спектра располагаются намного более скромные методы — настолько скромные, что автоматические алгоримты проверки могут быть встроены в компиляторы, компоновщики или автоматические анализаторы программ, а применять их могут даже программисты, не знакомые с теоретическими основами этих методов. Хорошой известный пример таких облегченных формальных методов — программы проверки моделей — инструменты для поиска ошибок в таких конечных системах, как интегральные схемы или коммуникационные протоколы. Другой пример, приобретающий сейчас популярность — мониторинг во время исполнения, набор приемов, позволяющих системе динамически обнаруживать, что поведение одного из ее компонентов отклоняется от спецификации. Однако же, самый популярный и испытанный облегченный формальный метод — это системы типов, которым в основном и посвящена эта книга.
Продолжение читаем здесь.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение02.08.2010, 14:59 


23/11/09
130
sergey83 в сообщении #341702 писал(а):
А как быть в той ситуации, когда по мере кодирования необходимо вносить изменения во многих местах программы? Например, когда программа должна работать с файлом, но сначала, для отладки, используется команда печати на экран printf(), а потом некоторые из них изменяются на печать в файл fprintf(). При этом если перепутаешь printf и fprintf, то ошибка не сразу бросается в глаза.

Я лично никогда так не делаю, с начало одно а потом что-то изменяется... Это как раз пример где вероятность возникновения ошибок велика. Что мешает сразу писать в файл, а потом проверить его правильность? Я делаю всегда так как должно быть в итоге, обычно поэтапно, но шаги не заменяются кардинально другими! Имхо вы тем самым себе создаете головную боль и дополнительную работу, потому что выгоды от такой "дебажной" замены нет никакой. Проанализируем этот кусок программы:
Допустим я предусмотрел в программе блок кода заменяющий на вывод на экран! Далее проверил результаты, все хорошо, работает. Отлично делаем программу дальше, и тут допустим мне снова надо посмотреть промежуточный результат, я переключаю на вывод на экран и программа не может дальше работать! Потому что последние апгрейды используют файл, а мы смотрим на экране, и из-за этого возникает крах программы. Тут мы понимаем что эта "дебажная" вставка ни к селу ни к городу и избавляемся от нее раз и навсегда! :-)
Вывод: Алгоритм программы должен быть такой как мы хотим его видеть в итоговом результате! А все дебажные вставки должны быть отдельно! В примитивном случае это массаги, в более сложном виде это класс ведения лога или другие специально сделанные для этого классы.
Основной акцент в своем предыдущем посте я делал на слова "продуманность архитектуры программы", "каркас программы", "модуль программы", я еще раз говорю нужно больше продумывать это а не лепить все в один флакон!

-- Пн авг 02, 2010 15:03:22 --

Цитата:
по мере кодирования необходимо вносить изменения во многих местах программы

Данная цитата указывает на полное отсутствие понимания задачи в целом!
Поэтому и возникает необходимость вносить изменения "по мере кодирования".

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение04.08.2010, 13:24 
Заслуженный участник


27/04/09
28128
А ещё есть условная компиляция...

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение15.08.2010, 12:34 


03/06/10
152
Допустим, у программиста работающий код. Но он всё равно решил все выкинуть и написать код заново. Скорее всего он будет более коротким.
А тут есть какие-нибудь рекомендации? Написать код от начала и до конца, не пользуясь копипастом, потом откомпилировать, убрать синтаксические ошибки, затем заново оттестировать? Я слышал, что альпинисты всегда спускаются по другой дороге, а не по той, по которой взошли. Потому что на знакомом маршруте притупляется осторожность и внимание.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение15.08.2010, 12:38 
Заслуженный участник


09/08/09
3438
С.Петербург
sergey83 в сообщении #344365 писал(а):
Допустим, у программиста работающий код. Но он всё равно решил все выкинуть и написать код заново.
А почему он так решил? Ему просто заняться нечем, или к коду есть какие-то конкретные претензии? Если есть претензии, то от них, собственно, и зависит, что целесообразнее: "старых помыть или новых родить".

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение15.08.2010, 14:53 


03/06/10
152
Такой вариант. Начальник говорит: "С сегодняшнего дня наша контора аттестована по 5 классу CMM. После того, как один программист код написал, пишется отчет, код выкидывается, а по отчету эту же программу пишет другой программист." Верный путь написания программы находится путем проб и ошибок, переделываний. А второму программисту нужно только написать код по спецификации. Я ожидаю, что у него на это уйдет в 5 раз меньше времени, чем у первого программиста.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение15.08.2010, 15:37 
Заслуженный участник


09/08/09
3438
С.Петербург
sergey83 в сообщении #344391 писал(а):
Такой вариант. Начальник говорит: "С сегодняшнего дня наша контора аттестована по 5 классу CMM. После того, как один программист код написал, пишется отчет, код выкидывается, а по отчету эту же программу пишет другой программист."
Во-первых, в CMM определяются уровни, а не классы.
Во-вторых, компании с таким начальником не светит не только 5-й уровень CMM, но даже второй (первый уровень есть у всех): многократное переписывание кода заново никакой CMM не требуется. А требуется проведение регулярной процедуры анализа кода (code review), в результате которой формируется список замечаний, которые затем устраняются.
sergey83 в сообщении #344391 писал(а):
А второму программисту нужно только написать код по спецификации.
А первый что, без спецификации код писал?
sergey83 в сообщении #344391 писал(а):
Я ожидаю, что у него на это уйдет в 5 раз меньше времени, чем у первого программиста.
И на чём же Ваши ожидания основываются? Есть реальный опыт?

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение15.08.2010, 22:08 


03/06/10
152
Ну надо же было выдумать ситуацию, когда программист знает, что пишет. Написать работающий код, выкинуть, а потом писать заново - хороший пример для эксперимента.
Если пишешь сам, то когда лучше тестировать, когда компилировать для выявления синтаксических ошибок? Почему меньше половины выпускников программистских специальностей не работают программистами. 1С бухгалтеров, web-дизайнеров, а тем более сисадминов я программистами не считаю.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение20.08.2010, 09:12 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
Хочу добавить от себя пару слов насчет длины имен переменных. Имхо, длина идентификатора переменной или константы должна находится в прямой зависимости от ее области видимости. Чем меньше область видимости, тем меньше длина. Поэтому для коротких циклов со счетчиком, таких как for, я всегда пишу:
Используется синтаксис C++
for(int i = start; i < end; ++i)
    a[i] = ....
 

К примеру, если у указателя область видимости - тело цикла, я его назову скорее всего p или ptr, если область видимости - функция, то скорей всего это будет pointer, а если область видимости - класс или файл, то dataPointer или что-то в этом духе. Глобальным константам я обычно даю имена длинные и обязательно состоящие только из заглавных букв.

Что касается написания программ сразу и без ошибок... Да, это очень просто. Например, можно написать архиватор rar:
Используется синтаксис C++
#include <string.h>
#include <process.h>
int main(int n, char **args)
{
    strcpy(args[0], "rar.exe");
    execv(args[0], args);
    return 0;
}
 

Совершенно без ошибок! :) Мораль этой шуточной программы: чем больше используешь готового, уже отлаженного кода, тем меньше ошибок. Если же создается что-то принципиально новое, то тут, имхо, без ошибок сложно обойтись.
Хотя опять же, зависит от языка, который будет при этом использоваться. Думаю, что при написании на C или C++ на кодирование уйдет 20% времени, на отладку - 80%, а при написании на Ada на кодирование уйдет 90% времени, а на отладку - 10%. При этом общее время написания программ (включая кодирование и отладку) на разных языках будет примерно одинаковым.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 84 ]  На страницу Пред.  1, 2, 3, 4, 5, 6

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group