Во время зимней сессии 3 курса (2021 г) мы проходили такой предмет как "применение ЭВМ в энергетике". Задания были довольно интересные - от расчёта освещения улиц, до оконечного каскада усилителя мощности на транзисторах. Идея самого предмета научиться пользоваться разными программами на компьютере, уметь программировать и т.д.
Я, как обычно, решил всю курсовую "слабать" на калькуляторе HP PRIME G2. Особенно ту часть, что связана с расчётом усилителя. Типа, выбираешь вариант, а он автоматически по заданным параметрам подбирает транзистор и рассчитывает схему. Мог ли я подумать, что эта ситуация приведёт меня к одному поразившему меня факту - инженеры по ЭВМ из СССР держат высокую планку в области алгоритмических задач по сравнению со "стандартными" программистами из универа. И дело не в сложности кода, а скорее в уровне научного подхода и в отличном знании математического аппарата. Приведу два примера, которые меня большего изумили, но сперва:
Как вообще дело дошло до "СССР"?
Задача по усилителю условно можно было разбить на три части:
- По начальным параметрам определяем какой примерно нам нужен транзистор.
- Подбираем транзистор.
- Рассчитываем коэффициент гармоник с общим коллектором (если он выше заданных по условию - уменьшаем сопротивление источника питания или в крайнем случае меняем транзистор).
Получилась программа, которая рассчитывала 1 и 3 пункт, а 2 пункт - нужно вводить в ручную по характеристикам триодов. Матушка лень, как говориться - двигатель прогресса! И я решил автоматизировать и 2 пункт, заметив, что практически для всех возможных вариантов достаточно три типа транзистора. Решил сделать математическую модель данных транзисторов, но к удивлению обнаружил, что решение нелинейных уравнений, с которыми HP PRIME G2 легко справляется при прямом использования, в режиме программирования имеют другой синтаксис, который не задокументирован в русском руководстве. Время разбираться не было и решил просто реализовать это в ручную, за одно загуглив книги по данной тематики. Вот именно эти книги и заставили меня реально удивиться, они были советского периода (крайне советую приобрести):
"Вычисление функций на ЭВМ" Б.А. Попов, Г.С. Теслер.
"Методы вычислений на ЭВМ" В. В. Иванов.
"Инженерные расчёты на ЭВМ. Справочное пособие" В. А. Троицкий.
"Сборник заданий по практикуму на ЭВМ" В. Н. Касьянов.
"Справочник по расчётам на микрокалькуляторах" В. П. Дьяконов.
Первый пример: матлогика.
Если кто-то из вас читал книгу "50 лет микроэлектроники России" Б. М. Малашевич, то будет со мной согласен с тем, что советские инженеры, разрабатывающие ЭВМ, такие как С.А. Лебедев, Д.И. Юдицкий, Г.В. Кисунько, а также множество программистов, помогавшим им в этом, описываются в книге как профессионалы высочайшего класса. Отчасти это отлично подтверждается в тех справочника, которые я приобрёл! Просто взгляните на параграф 3.3 "обоснование алгоритмов" из книги "сборник заданий по практикуму на ЭВМ" В. Н. Касьянов (стр 34):
"Строгое математическое доказательство правильности работы алгоритма - обычно очень трудная задача, главным образом из-за того, что трудно доказать правильность работы циклов и рекурсивных процедур... Пожалуй, наилучшим реальным подходом к обоснованию алгоритма является метод пошаговой разработки... Обоснование алгоритма будет выглядеть ещё более убедительно, если его дополнить индивидуальными доказательствами..."
И приводиться пример:
Очень простенький алгоритм, ничего особого... Но взгляните на доказательство его эффективности!!! Это офигенно:
Я вообще первый раз в жизни вижу, чтобы алгоритмы доказывались на уровне математической логики. Да, пошаговый метод - это используют все, кто занимается программированием, но чтобы прикреплять к нему метод индукции! Покажите мне хотя бы одного среднестатического программиста, который сможет это сделать? Я уверен, что ребята занимающиеся машинным обучением или поисковыми системами смогут и не только это, но данный пример из практического пособия для технического инженера, где программирование идёт как вспомогательный элемент обучения.
Второй пример: математическое моделирование абстрактных систем
Не знаю на сколько правильно я дал название этому примеру, но у меня именно это возникает в голове от следующего советского подхода к ЭВМ. При разработке вычислительных машин у ребят из 60-80-ых есть традиция создавать математические модели на довольно абстрактные с первого взгляда вещи. Параграф 1.4 "Характеристики задач, методов и ЭВМ" из книги "Методы вычислений на ЭВМ" В. В. Иванов (стр 18). Внимательно прочтите:
Здесь, если кто не по сразу понял, вводится математическая модель некой абстрактной системы "алгоритм-ЭВМ", благодаря который можно найти определенную серию решений поставленной задачи с разными характеристиками по времени, заполнению памяти и погрешностью. То есть, какой алгоритм лучше всего подходит для такого типа ЭВМ, чтобы решить такую-то задачу из такого-то класса сложности. Отчасти это относится к разделу линейного программирования. Не знаю как вам, но для меня всё это читать было странно и не привычно: берётся некий алгоритм, который по факту является просто мысленной конструкцией и соединяется с физической вычислительной машиной в единую модель. Понятно, что данный подход основан на том факте, что в то время ЭВМ все были разной архитектуры и алгоритмы на них выполнялись по разному. Но это показывает уровень инженеров того времени. И ладно, если бы такая математическая модель была бы просто задана как "сферический конь в вакууме", так нет же, там реальное решение задач идет по ней:
Это... офигенно...
Здесь приведено всего два примера, но в этих книгах тьма-тьмущая интересных моментов, которые удивляют! Советую их полистать хотя бы в онлайн.
Неа, я конечно могу быть не прав, и уровень современных программистов такой же, как и в те времена. Пишите в комментариях ваше мнение по этому поводу! Очень интересно почитать на пути в аспирантуру...