2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5, 6  След.
 
 Re: Как правильно писать программы?
Сообщение08.07.2010, 16:48 
Заслуженный участник
Аватара пользователя


03/06/09
1497
SSerge в сообщении #337966 писал(а):
Системы контроля версий не зря придуманы. Очень рекомендую.

+1

(Оффтоп)

Не знаю бед после того, как открыл для себя git. Применяю ко всему подряд: программы, тексты, рефераты, курсовики,..
А когда над проектом работают одновременно более 1 человека, то СКВ просто цены нет.

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


30/01/09
6591
ewert в сообщении #337900 писал(а):
Могу предложить совсем простенькую задачку -- запрограммировать решение линейного дифура второго порядка с постоянными коэффициентами: $y''(x)+ay'(x)+by(x)=0$ (входные данные -- коэффициенты уравнения, начальные условия и точка наблюдения; все рабочие формулы общеизвестны). Вы удивитесь, насколько это нетривиально.

Отнюдь. Берёшь несколько толстых книг с мудрёнными названиями типа "Устойчивость методов Рунге-Кутты для жёстких систем". Изучаешь. Что непонятно - на форуме подскажут.

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


06/10/08
6422
мат-ламер в сообщении #338062 писал(а):
Отнюдь. Берёшь несколько толстых книг с мудрёнными названиями типа "Устойчивость методов Рунге-Кутты для жёстких систем". Изучаешь. Что непонятно - на форуме подскажут.
Я бы это уравнение символьно решал, без всякого Рунге-Кутта. Коэффициенты постоянные, вторая степень, все хорошо.

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


30/01/09
6591
Xaositect в сообщении #338065 писал(а):
мат-ламер в сообщении #338062 писал(а):
Отнюдь. Берёшь несколько толстых книг с мудрёнными названиями типа "Устойчивость методов Рунге-Кутты для жёстких систем". Изучаешь. Что непонятно - на форуме подскажут.
Я бы это уравнение символьно решал, без всякого Рунге-Кутта. Коэффициенты постоянные, вторая степень, все хорошо.
Ха! А я даже на то, что коэффициенты постоянные не обратил внимание. Если решать символьно, то возникают нюансы. Вроде корни хар. ур-ия непрерывно зависят от коэфициентов, а тип решения вдруг скачком меняется при переходе от двух действительных корней к одному и далее к двум комплексным.

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


11/05/08
32166
мат-ламер в сообщении #338073 писал(а):
Вроде корни хар. ур-ия непрерывно зависят от коэфициентов, а тип решения вдруг скачком меняется при переходе от двух действительных корней к одному и далее к двум комплексным.

Вот именно. И в момент этого перехода формулы для решения задачи Коши теряют устойчивость.

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


04/06/10
117
Sonic86 в сообщении #337924 писал(а):
Насколько я помню к хорошему коду относится код с комментариями команд и правильно названных переменных?
И писаный в web.

-- Пт июл 09, 2010 15:22:22 --

Sonic86 в сообщении #337729 писал(а):
Не ну я обдумывал. Я даже разбил все на 2 совсем разных модуля и писал сначала один модуль, потом второй... Но это тоже запомнить надо - некоторые функции я переписал несколько раз... Часть я обдумывал по ходу дела...
Так разбивали на модули или нет? Разбить на модули — значит продумать их интерфейс. Интерфейс должен быть простым, чтоб его легко можно было запомнить. И продуманным. Чтоб не переписывать по нескольку раз.

-- Пт июл 09, 2010 15:23:31 --

Maslov в сообщении #337731 писал(а):
Sonic86 в сообщении #337729 писал(а):
... некоторые функции я переписал несколько раз...
И это правильно. Называется умным словом "рефакторинг" :)
Только вот при правильном разбитии на модули реfuckторинга не понадобится.

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


08/04/08
8556
wolf.ram писал(а):
И писаный в web.

Угу, понятно. Значит будет почти хороший код :-)
wolf.ram писал(а):
Так разбивали на модули или нет? Разбить на модули — значит продумать их интерфейс. Интерфейс должен быть простым, чтоб его легко можно было запомнить. И продуманным. Чтоб не переписывать по нескольку раз.

Разбивал на логические модули, в программе их просто не оформлял. Первый модуль переписал полностью с целью оптимизации.
Да уже ладно - неважно. Дожить бы до конца и успеть все сделать.
А в следующий раз умнее буду.

Кстати, перечитал код через 3 дня в давно нечитанном месте и обнаружил еще одну тупую ошибку. Это тоже значит полезно...

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение09.07.2010, 13:07 
Админ форума
Аватара пользователя


19/03/10
8952
 ! 
wolf.ram в сообщении #338162 писал(а):
Только вот при правильном разбитии на модули реfuckторинга не понадобится.

wolf.ram, обращаю Ваше внимание на следующий пункт Правил форума:
Цитата:
I. Нарушения и санкции

1) Нарушением считается:
а) Размещение текстовых и визуальных сообщений нецензурного, оскорбительного, клеветнического, порнографического содержания

Английская ненормативная лексика недопустима точно так же, как и русская.

На первый раз -- замечание.

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


09/08/09
3438
С.Петербург
wolf.ram в сообщении #338162 писал(а):
Только вот при правильном разбитии на модули реfuckторинга не понадобится.
Вне зависимости от качества проектирования программы, польза от рефакторинга есть всегда:
С. Макконнелл в книге "Совершенный код" на стр. 108 писал(а):
Если первая попытка создания проекта кажется вполне удачной, не останавливайтесь! Вторая попытка почти всегда оказывается лучше первой, и при каждой попытке вы будете узнавать что-то такое, что позволит вам улучшить общий проект.
...
Во многих случаях, решив проблему с помощью одного подхода, вы получите знания, которые позволят решить проблему иным, более эффективным способом.

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


08/04/08
8556
Почитал часть 3 книги Макконелла. Первые главы слишком общие и написаны слишком неточным языком. Хотя м.б. мое требование неадекватно и завышено. Автор почему-то использует конструкции типа "Автор такой-то считает что ..." :roll:
Кажется я далек от совершенства и вообще не программист.
До обработок ошибок и проверки утверждений я додумался сам. А классами, методами и даже структурами и пр. я жаль не пользуюсь, так что мне еще расти и расти... :|
Насчет имен переменных я с автором несогласен. Ни за что не буду переменные цикла for писать IndexEdge например. Буду писать for(j=0;j<CntEdg;j++), поскольку написано j<CntEdg, то это имеет смысл, значит смысл переменной j такой же, как и смысл CntEdg, а смысл CntEdg можно по названию понять. Кроме того, тогда можно писать в одном месте for(j=0;j<CntEdg;j++), а в другом for(j=0;j<CntVer;j++) - смысл индекса меняется, экономятся буковки.
Это я в противоположность тому, что написано на стр. 375 книги.

Нигде не нашел явного указания фигурными скобками (на худой конец begin-end_ом) тела цикла или условия. Я считаю это нужным. М.б. я ошибаюсь тоже.
В общем книжку придется целиком читать и думать.

-- Пн июл 12, 2010 13:36:31 --

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

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


03/06/09
1497
Sonic86
Любой стиль кода хорош, если используется единообразно по всему проекту. Не стоит этим голову забивать.

(Оффтоп)

К тому же, если Вы примкнёте к разработке чужого проекта, то, скорее всего, стиль Вам навяжут. Например, есть собственный стиль кода Linux, проектов GNU, git, которого все разработчики должны соблюдать. И цель у этой "стандартизации" не в том, чтобы навязать свои вкусы другим, а в том, чтобы весь код выглядел единообразно, как если бы был написан одним человеком.

 Профиль  
                  
 
 Re: Как правильно писать программы?
Сообщение12.07.2010, 13:06 
Аватара пользователя


01/04/10
910
Sonic86

Рекомендую Вам начать писать модули к опен сорсному ПО, по ходу дела Вам придётся читать исходный код продукта, а вместе с этим Вы постепенно сможете понять зачем нужны структуры данных, стиль и имена.

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


08/04/08
8556
meduza писал(а):
К тому же, если Вы примкнёте к разработке чужого проекта, то, скорее всего, стиль Вам навяжут.

Ага, обязательно. Это даже хорошо. Согласен.

creative писал(а):
Рекомендую Вам начать писать модули к опен сорсному ПО, по ходу дела Вам придётся читать исходный код продукта, а вместе с этим Вы постепенно сможете понять зачем нужны структуры данных, стиль и имена.

Буду надеятся, что я этого избегу :-) а то засосет потом и не вылезешь...

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


02/07/08
322
Sonic86 в сообщении #338716 писал(а):
Ни за что не буду переменные цикла for писать IndexEdge например. Буду писать for(j=0;j<CntEdg;j++), поскольку написано j<CntEdg, то это имеет смысл, значит смысл переменной j такой же, как и смысл CntEdg, а смысл CntEdg можно по названию понять. Кроме того, тогда можно писать в одном месте for(j=0;j<CntEdg;j++), а в другом for(j=0;j<CntVer;j++) - смысл индекса меняется, экономятся буковки.


В условии цикла понятно, что за j, а в теле? А если вы захотите потом с j какие-нибудь операции произвести? Что такое j == k или k = j? А что такое iFoundEdge = iEdge всем сразу понятно.

По поводу экономии буковок - это вообще ужас, уж извините. Их не надо экономить просто потому, что их много специально для этого. Если вы сначала заводите одну переменную, скажем, типа size_t, а потом ей присваиваете всевозможные индексы, то будьте готовы получать ошибки на ровном месте, непонятный и неподдерживаемый код ("а что это за j? что мне с ней делать?") и общее утечку логики работы процедуры.
В общем, настойчивый совет - никогда так не делайте. Дело не в том, что об этом Макконнел пишет, а в том, что он пишет правду в данном случае.

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


26/07/09
1559
Алматы
2Sonic86
Цитата:
А вот почему автор их противопоставляет (назвал тесты альтернативой псевдокоду) я тоже не понял.

Думаю, что можно воспринимать тесты как своеобразную "индуктивную спецификацию", описывающую на частных примерах желаемое поведение программы. E.g., реализовали вы алгоритм умножение натуральных чисел, написали к нему тест, проверяющий выполнение условия $2\times 2=4$; так вот, можно воспринимать этот тест как спецификацию, мол, "пусть программа умеет вычислять $2\times 2=4$, ну и другие числа пусть тоже перемножает по- аналогии". :)

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

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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