Quote Originally Posted by Юрка View Post
Хороший программист должен размышлять надо всем. Над выбором переменных и констант, над их именами и комментариями к ним, над названиями функций и подпрограмм, над набором параметров этих функций, над размером подпрограммы (в идеале это страница), над структурой программы, над количеством комментариев в программе, над составом библиотеки вспомогательных программ, над интерфейсом программы, над понятностью кода другому программисту и т.д.
Хороший программист в процессе работы над этим размышлять ни в коем случае не должен. Он должен все это обеспечивать очень быстро - на интуиции и шаблонах. Хороший программист - быстрый программист. Это если говорить о собственно программистах, а не об исследователях и проектировщиках языков и компиляторов/трансляторов.

Я занимался имитационным моделированием морских процессов. Приходилось моделировать распространение звуковой волны в воде и т.д. И надо было в одной модели с заданной точностью моделировать процессы, которые идут на очень разных скоростях. Пришлось придумать метод пересчёта шага по времени (метод дельта T). Там кандидатские и докторские светили.
Это опять-таки нетипичная задача для программиста. Задача для профессионального программиста в даном случае - быстро отыскать наиболее адекватную для данной задачи библиотеку и корректно ее использовать, а не изобретать велосипед. Собственно, динамическая коррекция шага, завязанная на оценку погрешности - стандартная черта большинства профессиональных реализаций, например, численного интегрирования, МКЭ, сеток и т.п.. И там столько тонкостей, в которых можно напахать неочевидным образом, что лучше оставить это математикам-специалистам по конкретному типу численных методов, а не писать с нуля для своей предметной области.

Эта истина выстрадана мной на собственном горьком опыте.