![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Тут меня попросили рассказать историю про программирование. Решил попробовать ;)
Давным-давно, в далёкой-далёкой галактике…
Когда я учился на третьем курсе решил я заработать автомат по курсу квантовой механики у покойного ныне профессора Фарзтдинова. И было мне поручено написать программу, которая бы в адекватное время на имеющейся тогда на кафедре машине с процессором 80286 рисовала распределение плотности электронного облака атома водорода.
Как такую задачу решает студент? пишет программу, прямо реализующую имеющуюся математику.
Вот только в той математике имеется интеграл от нуля до бесконечности. Страшно? ничуть! есть же замечательный метод трапеций, интеграл сходится, считаем до некоторого эпсилон (и чем меньше эпсилон, — тем лучше!). И так в каждой вычисляемой точке, коих немало.
Программа получилась что надо: машина гудела минут 20, после чего выводила хорошо известную кривую.
И вот в этот момент я очень удачно попался в лапы замечательному численнику Плавскому. Посмотрел он на моё творение, похмыкал на явные проявления ЧСВ студента, после чего почти за ухо отвёл к шкафу в котором стоял толстенный справочник: схемы вычисления определённых интегралов с заданной точностью по ограниченному числу точек.
В моём случае пришлось использовать 5 точек, в которых вычислялась подинтегральная функция, домножалась на коэффициент из справочника, полученные значения суммировались, и… вместо 20 минут искомая кривая рисовалась практически мгновенно, причём с большей точностью, чем в случае первоначальной 20-минутной программы.
Ergo: прежде, чем писать программу, лучше хорошо подумать как, чем и зачем. Ибо, как сказал классик: «Лучше день потерять, потом за пять минут долететь».
Давным-давно, в далёкой-далёкой галактике…
Когда я учился на третьем курсе решил я заработать автомат по курсу квантовой механики у покойного ныне профессора Фарзтдинова. И было мне поручено написать программу, которая бы в адекватное время на имеющейся тогда на кафедре машине с процессором 80286 рисовала распределение плотности электронного облака атома водорода.
Как такую задачу решает студент? пишет программу, прямо реализующую имеющуюся математику.
Вот только в той математике имеется интеграл от нуля до бесконечности. Страшно? ничуть! есть же замечательный метод трапеций, интеграл сходится, считаем до некоторого эпсилон (и чем меньше эпсилон, — тем лучше!). И так в каждой вычисляемой точке, коих немало.
Программа получилась что надо: машина гудела минут 20, после чего выводила хорошо известную кривую.
И вот в этот момент я очень удачно попался в лапы замечательному численнику Плавскому. Посмотрел он на моё творение, похмыкал на явные проявления ЧСВ студента, после чего почти за ухо отвёл к шкафу в котором стоял толстенный справочник: схемы вычисления определённых интегралов с заданной точностью по ограниченному числу точек.
В моём случае пришлось использовать 5 точек, в которых вычислялась подинтегральная функция, домножалась на коэффициент из справочника, полученные значения суммировались, и… вместо 20 минут искомая кривая рисовалась практически мгновенно, причём с большей точностью, чем в случае первоначальной 20-минутной программы.
Ergo: прежде, чем писать программу, лучше хорошо подумать как, чем и зачем. Ибо, как сказал классик: «Лучше день потерять, потом за пять минут долететь».
(no subject)
Date: 2010-10-08 06:12 pm (UTC)(no subject)
Date: 2010-10-08 07:34 pm (UTC)(no subject)
Date: 2010-10-08 10:10 pm (UTC)но я бы добавил, на всякий случай (мало ли кто зайдет), что эти самые "методы вычисления интегралов" не с потолка взялись, а были кем-то аккуратно выведены и точность их математически доказана.
В каком-то смысле работа программы была частично переложена на чей-то мозг.
И имхо -- это одно из важных правил в программировании: Не заставляй машину делать то, что можешь легко сделать сам.
Также верно и обратное, естественно :)
(no subject)
Date: 2010-10-09 04:52 am (UTC)Ну и тезис «Не заставляй машину делать то, что можешь легко сделать сам» надо уточнять наличием квалификации (читай про «5 минут долететь»). Ибо при её отсутствии самую тупую работу человеку проще и быстрее сделать самому, — знающий напишет минут за 10 скрипт, который минут за 5 сделает работу; незнающему же проще три часа делать то же руками, ибо написание скрипта требует времени на обучение, измеряющееся днями.
Расход времени далее одной задачи при этом никто не считает обычно.
(no subject)
Date: 2010-10-09 10:50 am (UTC)Как-то несколько сиюминутный подход к жизни...
(no subject)
Date: 2010-10-09 12:35 pm (UTC)(no subject)
Date: 2011-01-24 07:01 pm (UTC)(no subject)
Date: 2013-01-12 06:58 am (UTC)(no subject)
Date: 2013-01-12 10:23 am (UTC)Ну и можно вспомнить, то в разных БЭСМах длина слова достигала 56 битов, что делало эпсилон ещё суровее.
А история всего-лишь говорит о том, что для хорошего программиста кроме хорошего знания языков, железа и алгоритмов требуется ещё мудрость и кругозор ;)
(no subject)
Date: 2013-01-12 10:29 am (UTC)Ну и все ж таки, БЭСМ это машина не PC. А для яйцеголовых )))
А по поводу истории... Могу сказать, как один мой знакомый, в программе вычислял вектор "зрения" после чего получал координаты перпендикулярной плоскости, и после чего писал туда текст (3д)... В результате это все жрало немеряно ФПС. А всего то хватило бы перейти в ортогональную проекцию (предварительно запомнив в стэк значения) отрисовать - и заново вернуться к нормальному, перспективному отображению ))) 50-60% скорости терялось на пнях 1ггцвых )))
(no subject)
Date: 2013-01-12 12:27 pm (UTC)Но только если я правильно понял задачу, то необходимо сделать для плоскости с текстом пару-тройку афинных преобразований. Для таких действий процессора микрокалькулятора как бы не избыточно. Особенно, если текст векторный.
(no subject)
Date: 2013-01-12 01:01 pm (UTC)А и что делать... Видеокарта позволяет мгновенно перейти в ортогональный расчет (без нарушения картинки) и так же из него выйти. Зачем гемморой, если ты можешь сразу, двумя командами перевести в удобное для тебя отображение ? Ошибка настолько детская, что может даже Вы не понимаете )))
(no subject)
Date: 2013-01-12 02:48 pm (UTC)Кватернионы — это да, та ещё песня. В другой области (молекулярная динамика), но с ними сталкивался. Фактически, моей фантазии не хватает их работу представить (в отличие от нагляднейших афинных преобразований), но на уровне математики использовать привык, работают.
Что значит «даже вы не понимаете»? (Кстати, не стоит с заглавной буквы писать «вы», не люблю, считаю это излишним англицизмом.) Я визуализацией занимаюсь постольку-поскольку и от описанной области чрезвычайно далёк. Немного владею азами, потому что пришлось однажды маленький, на 6 лекций, спецкурс по компьютерной графике прочитать, но было давно это.
(no subject)
Date: 2013-01-12 03:12 pm (UTC)Ибо одно дело посчитать - другое - визуализивовать. И вот это 0 бооольшая проблема. Не говоря про то, что кварты (ну у нас их так зовут) по сути сами по себе тот еще геммор.
У нас области просто настолько различаються... Ну как... Эээээ... Фитотерапия (лечение травами) и фармакология (химия). И то, зазор в моем примере меньше.
Я вообще Выкать не люблю, но тут уж как есть. Плюс, отучить себя от Вы с большой буквы - тот еще квест )))