IS>>что такое "архитектурная перспектива"? IS>>OMFG — написание тривиальной функиции в 10 строк (10 минут на написание и 20 минут на тестирование) как-то влияет на архитектуру в целом? не было такого и не будет.
FR>Во-первых, незачем нервничать и плеваться злыми аббревиатурами. Во-вторых, если провести аналогию — если в детстве вы некрасиво писали простую букву А, то это совсем никак не повлияет на вашу каллиграфию при написании более сложных текстов, когда вы станете взрослым? Дисциплина и архитектура начинаются с малого. Никто не учится строить здания с проектирования вращающихся небоскребов, не так ли? Если человек одноэтажный дом будет проектировать криво, с ненужными сложностями, его небоскреб рухнет 100%.
Не хотелось бы отрывать вот важных размышнелий специалиста по вращающимся небоскребам, но разговор шел об рекурсии в тривиальных задачах — конкретно мы рассматривали ф-ю вычисления факториала.
Здравствуйте, Igor Sukhov, Вы писали:
IS>Не хотелось бы отрывать вот важных размышнелий специалиста по вращающимся небоскребам, но разговор шел об рекурсии в тривиальных задачах — конкретно мы рассматривали ф-ю вычисления факториала.
Специалисту по вращающимся небоскребам кажется, что обсуждение в этой конкретной ветке началось с упрека в сторону Стива Макконелла. Стив вовсе не имел ввиду рекурсию в задачах, имеющих чисто академическую ценность. Речь шла о его сотруднике, который стал бы вычислять факториал рекурсей, если бы ему попалась такая задача в работею
Здравствуйте, Mika Soukhov, Вы писали:
MS>Проверять вычисления факториала? Хорошо, люди бывают разные. И если кто-то не уверен (кстати, а не такие ли люди кандидаты номер один на увольнение?), что он сможет написать такой код без ошибок, то всегда есть интернет + CopyPaste.
Конечно проверять. Желательно unit-test'ами. Ошибиться можно на пустом месте. Ровно также как и любой другой неважно какой гуру в интернете — также может ошибиться на пустом месте.
На мой взгляд, возможно непросвященный, программист, который проверке собственного кода предпочитает интернет + CopyPaste, и есть кандидат на увольнение. В особенности те наивные вьюноши, которые занимаются бездумным копипастом из MSDN'a — там порой встречается просто отвратительный код, который потом бодро множится.
Здравствуйте, Кэр, Вы писали:
Кэр>Здравствуйте, Mika Soukhov, Вы писали:
MS>>Проверять вычисления факториала? Хорошо, люди бывают разные. И если кто-то не уверен (кстати, а не такие ли люди кандидаты номер один на увольнение?), что он сможет написать такой код без ошибок, то всегда есть интернет + CopyPaste.
Кэр>Конечно проверять. Желательно unit-test'ами. Ошибиться можно на пустом месте. Ровно также как и любой другой неважно какой гуру в интернете — также может ошибиться на пустом месте.
Давай все же не уходить далеко от темы. Тема — факториал. Ты говоришь, что его проверить проще табличным способом. Вот проверка для решения в лоб:
Пока мне, как юнит тест для табличного варианта, чтобы он был проще.
Кэр>На мой взгляд, возможно непросвященный, программист, который проверке собственного кода предпочитает интернет + CopyPaste, и есть кандидат на увольнение. В особенности те наивные вьюноши, которые занимаются бездумным копипастом из MSDN'a — там порой встречается просто отвратительный код, который потом бодро множится.
Мне эта тема (что там происходит с МСДН) не так интересна, как вычисление факториала.
Здравствуйте, Igor Sukhov, Вы писали:
IS>говорить "в общем" я не хочу и поэтому не буду. разве что добавлю — что есть куча достаточно тривиальных задач которые даже я (как человек к-й программирует наверно получше чем 90% здесь присувтвующих) не знаю как решить не-рекусивно.
MS>Пока мне, как юнит тест для табличного варианта, чтобы он был проще.
Что стоит на месте многоточия? Для int'а там очень немного значений. Ты выпишешь их все? Если да — то получаешь альтернативную реализацию факториала. Зачем тебе их две? Чтобы было проще ошибиться?
MS>Мне эта тема (что там происходит с МСДН) не так интересна, как вычисление факториала.
MS>>Пока мне, как юнит тест для табличного варианта, чтобы он был проще.
Кэр>Что стоит на месте многоточия?
Несколько ключевых значений. Например, штук 10-ти хватит вполне.
Кэр>Для int'а там очень немного значений. Ты выпишешь их все? Если да — то получаешь альтернативную реализацию факториала. Зачем тебе их две? Чтобы было проще ошибиться?
Так покажи как нужно написать код юнит теста для табличного способа. Всегда раз узнать что-то интересное и новое.
MS>>Мне эта тема (что там происходит с МСДН) не так интересна, как вычисление факториала.
Кэр>Мне вся эта тема не особо интересна.
.
MS>Так покажи как нужно написать код юнит теста для табличного способа. Всегда раз узнать что-то интересное и новое.
1. Проверка правильных значений. В данном случае можно проверить все правильные исходы.
2. Проверка неверных значений: -1, 14, -17, NaN, Infinity, NegativeInfinity, 2^32, -2^32.
Дальше уже тесты, которые идут к программистам из QA отдела:
3. Проверка на разных платформах, если это нужно.
4. Стресс-тесты.
5. Проверка одновременных вызовов из нескольких потоков.
6. Проверка в разных локалях.
Остальное уже зависит от конкретных ситуаций
Код, писать не буду — сразу говорю
Кэр>>Мне вся эта тема не особо интересна. MS>Что ж ты себя насилуешь?
А кто сказал, что я себя насилую? Так, захожу почитать во время долгой компиляции и подъема проекта
Здравствуйте, Кэр, Вы писали:
MS>>Так покажи как нужно написать код юнит теста для табличного способа. Всегда раз узнать что-то интересное и новое.
Кэр>1. Проверка правильных значений. В данном случае можно проверить все правильные исходы. Кэр>2. Проверка неверных значений: -1, 14, -17, NaN, Infinity, NegativeInfinity, 2^32, -2^32.
И получается тот же самый код, что привел я. И, следовательно, никаких преимуществ в тестировании нет
Кэр>Дальше уже тесты, которые идут к программистам из QA отдела: Кэр>3. Проверка на разных платформах, если это нужно. Кэр>4. Стресс-тесты. Кэр>5. Проверка одновременных вызовов из нескольких потоков. Кэр>6. Проверка в разных локалях. Кэр>Остальное уже зависит от конкретных ситуаций
Кэр>Код, писать не буду — сразу говорю
Это вы такое для факториала делаете? Или ты просто написал все стадии проверки, какие могут быть в природе?
Здравствуйте, Mika Soukhov, Вы писали:
MS>И получается тот же самый код, что привел я. И, следовательно, никаких преимуществ в тестировании нет
Перечитай ветку, я про преимущества тестирования не говорил.
MS>Это вы такое для факториала делаете? Или ты просто написал все стадии проверки, какие могут быть в природе?
Мы факториал не пишем. Ты спросил, как стоило бы тестировать метод факториала — я написал как стоило бы.
Здравствуйте, FractalizeR, Вы писали:
IS>>Не хотелось бы отрывать вот важных размышнелий специалиста по вращающимся небоскребам, но разговор шел об рекурсии в тривиальных задачах — конкретно мы рассматривали ф-ю вычисления факториала.
FR>Специалисту по вращающимся небоскребам кажется, что обсуждение в этой конкретной ветке началось с упрека в сторону Стива Макконелла. Стив вовсе не имел ввиду рекурсию в задачах, имеющих чисто академическую ценность. Речь шла о его сотруднике, который стал бы вычислять факториал рекурсей, если бы ему попалась такая задача в работею
Здравствуйте, NotImplemented, Вы писали:
NI>Здравствуйте, Sergey, Вы писали: S>>Дано: enum { N = x }; x — целочисленный литерал. Требуется объявить массив целых чисел размера N! Язык решения — C++. NI>
NI>template<int N>
NI>struct factorial
NI>{
NI> static const int value = N*factorial<N-1>::value;
NI>};
NI>template<>
NI>struct factorial<0>
NI>{
NI> static const int value = 1;
NI>};
NI>int main()
NI>{
NI> int array[factorial<6>::value];
NI>}
NI>
На D лучше :
long fact(long n)
{
if(n < 2) return 1;
return n * fact(n - 1);
}
void main()
{
int array[fact(6)];
}
Здравствуйте, FractalizeR, Вы писали:
FR>Прежде, чем называть его идиотом, подумайте, в архитектурной перспективе к чему может привести такой стиль программирования. К тому же следует понимать, что такое гипербола в литературе. Если я Вам говорю, что убью всякого, кто наступит мне на мозоль, это не значит, что у меня кортик в заднем кармане брюк и я — хладнокровный убийца.
Вполне может привести к тому что называется функциональной декомпозицей и функциональным программированием, и вполне вероятно что человек холрошо владеющей таким стилем программирования более квалифицирован чем средний программист.
Здравствуйте, freelancer_spb, Вы писали:
_>Грубо говоря рекурсия это плохо потому что сложно, есть алгоритмы в которых с рекурсией становится проще, в остальных случаях если её можно избегать лучше избегать из-за сложности понимания.
Код с рекурсией всегда не сложнее чем без нее, и есть много алгоритмов которые рекурсивно выражаются намного проще, и немало таких для которых вообще не найдено нерекурсивных вариантов.
_>Не все понимают рекурсию, при развитии кода возможно появление рекурсии в рекурсии, циклической рекурсии и т.п.
Угу а многие не понимают указателей, куча людей не понимает сути ООП, это тоже все запретить?
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, freelancer_spb, Вы писали:
_>>Грубо говоря рекурсия это плохо потому что сложно
KP>Грубо говоря, не надо забывать о том, что меньше половины разработчиков вообще понимает что такое рекурсия и как следствие усложнение кода ведет к дополнительным затратам при его поддержке. Если проект пишется не одиночкой, то использование навороченных библиотек поведение которых понимают единицы должно быть запрещено, то же относится и к рекурсиям.
Так же не надо забывать что использование рекурсии и ФВП наоборот существенно упрощает и делает более надежным код.
Здравствуйте, BulatZiganshin, Вы писали:
BZ>не получится, поскольку формула n*f(n-1) не tail-рекурсивна
Нормальные C++ компиляторы, если разрешить инлайнить рекурсивные функции, факториал (и фибоначи ) оптимизируют так что стек практически не используется и скорсть приближается к итеративному варианту (правда код конечно раздувают).
Ну при желании на C++ тоже можно извратится по самое ни хочу, например вплоть до написания compile time интерпретатора лиспа или форта и решения задачи с их помощью
FR>Вполне может привести к тому что называется функциональной декомпозицей и функциональным программированием, и вполне вероятно что человек холрошо владеющей таким стилем программирования более квалифицирован чем средний программист.
Тогда, конечно, у Вас есть собственное объяснение тому, что именно имел ввиду Стив Макконнелл говоря эти слова, не так ли? Не поделитесь с нами своими соображениями?