2014 dxdy logo

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

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




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

+1

(Оффтоп)

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

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

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

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

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

 
 
 
 Re: Как правильно писать программы?
Сообщение09.07.2010, 08:03 
мат-ламер в сообщении #338073 писал(а):
Вроде корни хар. ур-ия непрерывно зависят от коэфициентов, а тип решения вдруг скачком меняется при переходе от двух действительных корней к одному и далее к двум комплексным.

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

 
 
 
 Re: Как правильно писать программы?
Сообщение09.07.2010, 12:19 
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 
wolf.ram писал(а):
И писаный в web.

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

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

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

 
 
 
 Re: Как правильно писать программы?
Сообщение09.07.2010, 13:07 
Аватара пользователя
 ! 
wolf.ram в сообщении #338162 писал(а):
Только вот при правильном разбитии на модули реfuckторинга не понадобится.

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

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

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

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

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

 
 
 
 Re: Как правильно писать программы?
Сообщение12.07.2010, 12:32 
Почитал часть 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 
Аватара пользователя
Sonic86
Любой стиль кода хорош, если используется единообразно по всему проекту. Не стоит этим голову забивать.

(Оффтоп)

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

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

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

 
 
 
 Re: Как правильно писать программы?
Сообщение12.07.2010, 13:09 
meduza писал(а):
К тому же, если Вы примкнёте к разработке чужого проекта, то, скорее всего, стиль Вам навяжут.

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

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

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

 
 
 
 Re: Как правильно писать программы?
Сообщение13.07.2010, 23:08 
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 
2Sonic86
Цитата:
А вот почему автор их противопоставляет (назвал тесты альтернативой псевдокоду) я тоже не понял.

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

 
 
 [ Сообщений: 84 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group