Re[6]: Факториал
От: Igor Sukhov  
Дата: 29.11.07 12:41
Оценка:
IS>>что такое "архитектурная перспектива"?
IS>>OMFG — написание тривиальной функиции в 10 строк (10 минут на написание и 20 минут на тестирование) как-то влияет на архитектуру в целом? не было такого и не будет.

FR>Во-первых, незачем нервничать и плеваться злыми аббревиатурами. Во-вторых, если провести аналогию — если в детстве вы некрасиво писали простую букву А, то это совсем никак не повлияет на вашу каллиграфию при написании более сложных текстов, когда вы станете взрослым? Дисциплина и архитектура начинаются с малого. Никто не учится строить здания с проектирования вращающихся небоскребов, не так ли? Если человек одноэтажный дом будет проектировать криво, с ненужными сложностями, его небоскреб рухнет 100%.


Не хотелось бы отрывать вот важных размышнелий специалиста по вращающимся небоскребам, но разговор шел об рекурсии в тривиальных задачах — конкретно мы рассматривали ф-ю вычисления факториала.
* thriving in a production environment *
Re[2]: Факториал
От: AntZ  
Дата: 29.11.07 12:57
Оценка:
T>Есть кайф... Вот как можно вычислить факториал на Haskell. Я люблю этот язык ))

...

T>Взято отсюда: http://absurdopedia.wikia.com/wiki/Haskell


Круто! Почувствуй себя никчемным программером Я бы так не смог
Re[7]: Факториал
От: FractalizeR  
Дата: 29.11.07 13:00
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:

IS>Не хотелось бы отрывать вот важных размышнелий специалиста по вращающимся небоскребам, но разговор шел об рекурсии в тривиальных задачах — конкретно мы рассматривали ф-ю вычисления факториала.


Специалисту по вращающимся небоскребам кажется, что обсуждение в этой конкретной ветке началось с упрека в сторону Стива Макконелла. Стив вовсе не имел ввиду рекурсию в задачах, имеющих чисто академическую ценность. Речь шла о его сотруднике, который стал бы вычислять факториал рекурсей, если бы ему попалась такая задача в работею
Re[6]: Факториал
От: Кэр  
Дата: 30.11.07 09:31
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>Проверять вычисления факториала? Хорошо, люди бывают разные. И если кто-то не уверен (кстати, а не такие ли люди кандидаты номер один на увольнение?), что он сможет написать такой код без ошибок, то всегда есть интернет + CopyPaste.


Конечно проверять. Желательно unit-test'ами. Ошибиться можно на пустом месте. Ровно также как и любой другой неважно какой гуру в интернете — также может ошибиться на пустом месте.

На мой взгляд, возможно непросвященный, программист, который проверке собственного кода предпочитает интернет + CopyPaste, и есть кандидат на увольнение. В особенности те наивные вьюноши, которые занимаются бездумным копипастом из MSDN'a — там порой встречается просто отвратительный код, который потом бодро множится.
Re[7]: Факториал
От: Mika Soukhov Stock#
Дата: 30.11.07 09:47
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>Здравствуйте, Mika Soukhov, Вы писали:


MS>>Проверять вычисления факториала? Хорошо, люди бывают разные. И если кто-то не уверен (кстати, а не такие ли люди кандидаты номер один на увольнение?), что он сможет написать такой код без ошибок, то всегда есть интернет + CopyPaste.


Кэр>Конечно проверять. Желательно unit-test'ами. Ошибиться можно на пустом месте. Ровно также как и любой другой неважно какой гуру в интернете — также может ошибиться на пустом месте.


Давай все же не уходить далеко от темы. Тема — факториал. Ты говоришь, что его проверить проще табличным способом. Вот проверка для решения в лоб:

FactorialTest()
{
  Dictionary testValues = { {-1, NaN}, {0, 1}, {1, 1}, .... };
  for (testValue in testValues)
    Assert(Factorial(testValue.Key), testValue.Value);
}


Пока мне, как юнит тест для табличного варианта, чтобы он был проще.

Кэр>На мой взгляд, возможно непросвященный, программист, который проверке собственного кода предпочитает интернет + CopyPaste, и есть кандидат на увольнение. В особенности те наивные вьюноши, которые занимаются бездумным копипастом из MSDN'a — там порой встречается просто отвратительный код, который потом бодро множится.


Мне эта тема (что там происходит с МСДН) не так интересна, как вычисление факториала.
Re[7]: Факториал
От: FractalizeR  
Дата: 30.11.07 10:32
Оценка: :)
Здравствуйте, Igor Sukhov, Вы писали:

IS>говорить "в общем" я не хочу и поэтому не буду. разве что добавлю — что есть куча достаточно тривиальных задач которые даже я (как человек к-й программирует наверно получше чем 90% здесь присувтвующих) не знаю как решить не-рекусивно.


Вы скромны. Этого у Вас не отнять...
Re[8]: Факториал
От: Кэр  
Дата: 30.11.07 12:02
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>
MS>FactorialTest()
MS>{
MS>  Dictionary testValues = { {-1, NaN}, {0, 1}, {1, 1}, .... };
MS>  for (testValue in testValues)
MS>    Assert(Factorial(testValue.Key), testValue.Value);
MS>}
MS>


MS>Пока мне, как юнит тест для табличного варианта, чтобы он был проще.


Что стоит на месте многоточия? Для int'а там очень немного значений. Ты выпишешь их все? Если да — то получаешь альтернативную реализацию факториала. Зачем тебе их две? Чтобы было проще ошибиться?

MS>Мне эта тема (что там происходит с МСДН) не так интересна, как вычисление факториала.


Мне вся эта тема не особо интересна.
Re[9]: Факториал
От: Mika Soukhov Stock#
Дата: 30.11.07 12:13
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>Здравствуйте, Mika Soukhov, Вы писали:


MS>>
MS>>FactorialTest()
MS>>{
MS>>  Dictionary testValues = { {-1, NaN}, {0, 1}, {1, 1}, .... };
MS>>  for (testValue in testValues)
MS>>    Assert(Factorial(testValue.Key), testValue.Value);
MS>>}
MS>>


MS>>Пока мне, как юнит тест для табличного варианта, чтобы он был проще.


Кэр>Что стоит на месте многоточия?


Несколько ключевых значений. Например, штук 10-ти хватит вполне.

Кэр>Для int'а там очень немного значений. Ты выпишешь их все? Если да — то получаешь альтернативную реализацию факториала. Зачем тебе их две? Чтобы было проще ошибиться?


Так покажи как нужно написать код юнит теста для табличного способа. Всегда раз узнать что-то интересное и новое.

MS>>Мне эта тема (что там происходит с МСДН) не так интересна, как вычисление факториала.


Кэр>Мне вся эта тема не особо интересна.


Что ж ты себя насилуешь?
Re[10]: Факториал
От: Кэр  
Дата: 30.11.07 13:08
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

Кэр>>Что стоит на месте многоточия?

MS>Несколько ключевых значений. Например, штук 10-ти хватит вполне.

Их всего 13
Автор: bkat
Дата: 26.11.07
.

MS>Так покажи как нужно написать код юнит теста для табличного способа. Всегда раз узнать что-то интересное и новое.


1. Проверка правильных значений. В данном случае можно проверить все правильные исходы.
2. Проверка неверных значений: -1, 14, -17, NaN, Infinity, NegativeInfinity, 2^32, -2^32.
Дальше уже тесты, которые идут к программистам из QA отдела:
3. Проверка на разных платформах, если это нужно.
4. Стресс-тесты.
5. Проверка одновременных вызовов из нескольких потоков.
6. Проверка в разных локалях.
Остальное уже зависит от конкретных ситуаций

Код, писать не буду — сразу говорю

Кэр>>Мне вся эта тема не особо интересна.

MS>Что ж ты себя насилуешь?
А кто сказал, что я себя насилую? Так, захожу почитать во время долгой компиляции и подъема проекта
Re[11]: Факториал
От: Mika Soukhov Stock#
Дата: 30.11.07 13:16
Оценка:
Здравствуйте, Кэр, Вы писали:

MS>>Так покажи как нужно написать код юнит теста для табличного способа. Всегда раз узнать что-то интересное и новое.


Кэр>1. Проверка правильных значений. В данном случае можно проверить все правильные исходы.

Кэр>2. Проверка неверных значений: -1, 14, -17, NaN, Infinity, NegativeInfinity, 2^32, -2^32.

И получается тот же самый код, что привел я. И, следовательно, никаких преимуществ в тестировании нет

Кэр>Дальше уже тесты, которые идут к программистам из QA отдела:

Кэр>3. Проверка на разных платформах, если это нужно.
Кэр>4. Стресс-тесты.
Кэр>5. Проверка одновременных вызовов из нескольких потоков.
Кэр>6. Проверка в разных локалях.
Кэр>Остальное уже зависит от конкретных ситуаций

Кэр>Код, писать не буду — сразу говорю


Это вы такое для факториала делаете? Или ты просто написал все стадии проверки, какие могут быть в природе?
Re[12]: Факториал
От: Кэр  
Дата: 30.11.07 13:20
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>И получается тот же самый код, что привел я. И, следовательно, никаких преимуществ в тестировании нет


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

MS>Это вы такое для факториала делаете? Или ты просто написал все стадии проверки, какие могут быть в природе?


Мы факториал не пишем. Ты спросил, как стоило бы тестировать метод факториала — я написал как стоило бы.
Re[8]: Факториал
От: Igor Sukhov  
Дата: 01.12.07 07:29
Оценка:
Здравствуйте, FractalizeR, Вы писали:

IS>>Не хотелось бы отрывать вот важных размышнелий специалиста по вращающимся небоскребам, но разговор шел об рекурсии в тривиальных задачах — конкретно мы рассматривали ф-ю вычисления факториала.


FR>Специалисту по вращающимся небоскребам кажется, что обсуждение в этой конкретной ветке началось с упрека в сторону Стива Макконелла. Стив вовсе не имел ввиду рекурсию в задачах, имеющих чисто академическую ценность. Речь шла о его сотруднике, который стал бы вычислять факториал рекурсей, если бы ему попалась такая задача в работею


Ни фига не понял что ты написал.
* thriving in a production environment *
Re[3]: Факториал
От: FR  
Дата: 01.12.07 08:36
Оценка:
Здравствуйте, 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)];
}
Re[4]: Факториал
От: FR  
Дата: 01.12.07 08:43
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>Прежде, чем называть его идиотом, подумайте, в архитектурной перспективе к чему может привести такой стиль программирования. К тому же следует понимать, что такое гипербола в литературе. Если я Вам говорю, что убью всякого, кто наступит мне на мозоль, это не значит, что у меня кортик в заднем кармане брюк и я — хладнокровный убийца.


Вполне может привести к тому что называется функциональной декомпозицей и функциональным программированием, и вполне вероятно что человек холрошо владеющей таким стилем программирования более квалифицирован чем средний программист.
Re[6]: Факториал
От: FR  
Дата: 01.12.07 08:59
Оценка:
Здравствуйте, freelancer_spb, Вы писали:

_>Грубо говоря рекурсия это плохо потому что сложно, есть алгоритмы в которых с рекурсией становится проще, в остальных случаях если её можно избегать лучше избегать из-за сложности понимания.


Код с рекурсией всегда не сложнее чем без нее, и есть много алгоритмов которые рекурсивно выражаются намного проще, и немало таких для которых вообще не найдено нерекурсивных вариантов.

_>Не все понимают рекурсию, при развитии кода возможно появление рекурсии в рекурсии, циклической рекурсии и т.п.


Угу а многие не понимают указателей, куча людей не понимает сути ООП, это тоже все запретить?
Re[7]: Факториал
От: FR  
Дата: 01.12.07 09:00
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Здравствуйте, freelancer_spb, Вы писали:


_>>Грубо говоря рекурсия это плохо потому что сложно


KP>Грубо говоря, не надо забывать о том, что меньше половины разработчиков вообще понимает что такое рекурсия и как следствие усложнение кода ведет к дополнительным затратам при его поддержке. Если проект пишется не одиночкой, то использование навороченных библиотек поведение которых понимают единицы должно быть запрещено, то же относится и к рекурсиям.


Так же не надо забывать что использование рекурсии и ФВП наоборот существенно упрощает и делает более надежным код.
Re[3]: Факториал
От: FR  
Дата: 01.12.07 09:12
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>не получится, поскольку формула n*f(n-1) не tail-рекурсивна


Нормальные C++ компиляторы, если разрешить инлайнить рекурсивные функции, факториал (и фибоначи ) оптимизируют так что стек практически не используется и скорсть приближается к итеративному варианту (правда код конечно раздувают).
Re[4]: Факториал
От: FR  
Дата: 01.12.07 09:13
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>всё-таки по степени изврата c++ до хаскела не дотягивает


BZ>http://www.willamette.edu/~fruehr/haskell/evolution.html


Ну при желании на C++ тоже можно извратится по самое ни хочу, например вплоть до написания compile time интерпретатора лиспа или форта и решения задачи с их помощью
Re[3]: Факториал
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 02.12.07 22:39
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

АК>>Кайф получается в языках с tail recursion

BZ>не получится, поскольку формула n*f(n-1) не tail-рекурсивна

Зато формула
(define (factorial n)
  (define (iter result i)
    (if (> i n)
      result
      (iter (* i result) (+ i 1))))
  (iter 1 1))

tail-рекурсивна, так как является лишь замаскированной итерацией.
-- Андрей
Re[5]: Факториал
От: FractalizeR  
Дата: 02.12.07 23:22
Оценка:
FR>Вполне может привести к тому что называется функциональной декомпозицей и функциональным программированием, и вполне вероятно что человек холрошо владеющей таким стилем программирования более квалифицирован чем средний программист.

Тогда, конечно, у Вас есть собственное объяснение тому, что именно имел ввиду Стив Макконнелл говоря эти слова, не так ли? Не поделитесь с нами своими соображениями?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.