Главная страница проекта ИНФОРМАТИКА-21

Наука Школе

Отзыв о с/к Введение в современное программирование

Приводимое ниже сообщение опубликовано 28 февраля 2006 в форуме проекта Информатика-21. Автор — А.Грушин, слушатель первой версии спецкурса 2001 г., выпускник кафедры математики физфака МГУ, ныне сотрудник легендарного Института прикладной математики (ИПМ) им. Келдыша.

"... Проект Информатика-21, как мне кажется, отнюдь не сводится к установке BlackBox'а на все компьютеры где бы то ни было - в школе, институте и т.д.
Я пришёл на спецкурс, читаемый уважаемым Ф.В.Ткачёвым на физфаке МГУ, в самом начале, это была пилотная версия, так сказать. Тогда мне было просто интересно, много нового, причём нового не потому, что недавно открыли, а потому, что стандартный курс программирования на факультете фактически ничего не давал - всё сводилось к освоению Ворда, Интернета и нескольким семинарам по C/C++ и MatLab (говорю за первый поток, на втором потоке преподавал Задков, и, по слухам, подавался предмет на порядок лучше). Всё, что мне из этого потом пригодилось - это MatLab, действительно полезное приобретение, но для успешной работы всё же недостаточно.
Соответственно структура курса - от самого простого, базового (грамотное написание программного кода, пред- и пост-условия, основные типы данных, объекты+методы), последовательно, к сложному (полиморфизм, инкапсуляция, модульность) - пришлась очень кстати и даже не самым умным студентам (т.е. мне :) ) удалось овладеть хотя бы азами программирования, причём правильного программирования (на мой взгляд, об этом - чуть ниже).
Сразу оговорюсь – освоить удалось отнюдь не всё, что давал нам Ф.В.Ткачёв и в этом виноват только я сам (хех, глупый был), но уже по мне можно провести нижнюю грань того, что можно вынести из читаемого курса (верхнюю грань сможет, наверное, провести сам Фёдор Васильевич, взяв наиболее успешных студентов).
Во что всё это вылилось?

В работе сейчас использую Fortran – традиция-с ? + объективная необходимость работы на многопроцессорных суперЭВМ, работающих под *nix’ами. Уже при первом знакомстве с этим языком программирования стало понятно, что “здесь вам не тут” и многое из того, к чему я привык в BlackBox’е и считал разумным, необходимым и достаточным минимумом возможностей, в Fortran’е отсутствует, несмотря на регулярные “обновления” языка. Автоматическое управление памятью, наследование (не нашёл, но может плохо искал), методы – нет, но можно и обойтись.
Плюс трудно находимые и не всегда понятные причины различий результатов от сборок Debug-Release.
Непонятно, также, как бороться с модулями – не слишком разумное решение имена всех процедур и глобальных переменных из всех используемых модулей сливать в одно множество и потом барахтаться с пересечениями, куда логичней подход ИмяМодуля(delimiter)ИмяПроцедуры. Но в принципе, и с этим можно смириться.
Так вот, если взять множества средств и возможностей этих двух языков (извините за дилетантство) и выделить пересечение, то сухим остатком вполне можно пользоваться! Типы в Fortran’е есть, указатели похожи на BlackBox’овские, можно скрывать что угодно внутри модуля от шаловливого доступа извне, со скрипом использовать модули.
Что ещё нужно? Добавляем сюда технику осторожного программирования, отказываемся сразу от всех остальных возможностей Fortran’а “and we ready to go”.
За последние 2 года интенсивного самостоятельного программирования приходилось не раз и не два довольно серьёзно корректировать алгоритм, изменять множество уравнений модели, корректировать исходные предположения, потом менять всё назад, опять корректировать, вычленять из этих действий знаменатель и удалять всё лишнее. И ни разу за всё это время у меня не возникало серьёзных проблем в плане программирования, были скорее проблемы с пониманием физики описываемых моделью процессов и математикой самой модели, и я их довольно успешно решал.
Не в последнюю очередь потому что, за спиной стоял надёжный как гвоздь код, в котором я был уверен, были чёткие типы данных, структурировано собравшие в себе основные физические сущности, которые по мере необходимости расширялись или лишались каких-либо полей.
Всему этому я научился у info21 и за что давно хотел сказать ему огромное спасибо.

А потом я взглянул, как работали раньше, и был сражён наповал одним COMMON блоком и кучей goto, которые официально до сих пор даже не номинировались на исключение из стандарта языка. Кто видел старый код, тот поймёт, что я имею  виду. Особенно старый код, состоящий из кусков, написанных разными людьми, и на скорую руку сшитый воедино.
Нет, всё понятно – аргумент “Раньше по-другому было нельзя” многое объясняет, нельзя, так нельзя, но на дворе 21-й век и машины давно уже лишены многих ограничений своих почтенных предков. И переучить старых программистов действительно тяжело, да что говорить – порой объяснить преимущество тех же типов в совокупности с грамотным разбиением программы на процедуры над COMMON блоками тяжело.
Понятие модуля тоже где-то на Камчатке восприятия (use copy-paste, stupid).
Мне пока удаётся лишь частично доказать собственным примером, что это вообще можно с успехом применять, об остальном уже и мечтать перестал.
Представим теперь, что кто-то будет учиться программированию на Fortran’е, причём с нуля и имея перед глазами старый, наследственный код. А учиться будут, можно не сомневаться. Я уже наблюдаю одно дарование у нас в отделе, твёрдо уверенное, что старый стиль – он верный самый.

И вот ещё зарисовка:
Приходят к нам в отдел студенты из МИФИ. Физику, судя по всему, знают довольно хорошо, даже отлично. С математикой, вроде, тоже проблем нет.
Спрашиваю, а как вас учили программированию? Отвечают, что мол, прочитали курс численных методов с уклоном на практическую реализацию, т.е., грубо говоря, самому программированию учили никак, но показали несколько алгоритмов решения стандартных задач, вроде решения СЛАУ или ОДУ различными методами и т.д. Кажется, я их правильно понял. Соответственно диплом-то они защитят, благо для этого в отделе имеется достаточное количество рабочих программных блоков, используя которые можно получать определённые результаты.
Но ведь надо и дальше двигаться – после поступления в аспирантуру придётся писать свой код, лично проверять свои предположения, искать ошибки, перерабатывать программы, взаимодействовать с чужими программами.
Не скажу ничего нового, если замечу, что основным рабочим инструментом для теоретика давно стал компьютер, и почему студентов-естественников не учат работать с этим универсальным вычислителем – мне лично не понятно (теперь придётся либо отсылать их в МГУ на прослушивание курса info21, либо самому впрягаться и пытаться объяснить им то, что в своё время худо-бедно смог усвоить).

Так вот, не могу с уверенностью предсказать, что будет, если учиться программированию на языке типа Fortran без выделения упомянутого выше минимума относительно безопасных возможностей языка и отбрасывания остального, но есть мнение, что ничего хорошего из этого не выйдет. Как мне кажется, в самом лучшем случае человек начнёт самостоятельно отбрасывать лишнее и небезопасное, но на это уйдёт время; в худшем – смирится с необходимостью сидеть сутками в Debugger’е и будет считать это вполне нормальной частью рабочего процесса.

Понимаю, что срок моей самостоятельной “деятельности” маленький (2 года – Sic!), опыта ничтожно мало, но у меня и цель другая – показать, что как минимум одна цель проекта жизненно необходима и имеет под собой реальную почву, а именно: сейчас во многих естественнонаучных институтах программированию практически не обучают. Вообще и никак.

Резюмируя:

1) я всеми конечностями за проект, особенно в ВУЗах для, как минимум, физических специальностей (про школу ничего конкретного сказать не могу, но аргументация в предыдущих ~700 постах представляется вполне разумной);

2) Искренне рад успеху спецкурса на физфаке МГУ. Так держать!

3) Было бы интересно послушать мнения других участников проекта – тех, что сидят или сидели за партами (вроде меня). Ведь в конечном итоге ради них (нас :) ) всё и делается;

4) Жду с нетерпением BlackBox под Linux - на текущий момент пуленепробиваемый аргумент, на который мне нечего ответить, это "А работает ли ваш чудо-язык под Linux'ом, да ещё в параллельном режиме?!";

<Ядро Блэкбокса без графической оболочки без проблем работает пол линуксом.
Весь Блэкбокс вместе с графической средой уверенно работает под Linux+Wine.
Именно поэтому упал приоритет работ по полному порту графической среды по gnome.
Инструкции по запуску Блэкбокса по Linux+Wine можно найти в любой из сборок Блэкбокса от «Информатики-21».
Что касается работы на линукс-кластерах, то разумный базовый вариант — просто запуск одного экземпляра Блэкбокса (без графических компонент) на каждом узле кластера с управлением по TCP/IP с внешней рабочей станции.
—прим. info21>

5) Может стоит осветить проект в прессе пошире? ...

<В данный момент Блэкбокс распространяется на CD-ROM с книжками от проекта, которые прекрасно продаются. Это в значительной степени решает проблему.
info21>

Успехов и удачи!

Александр Грушин"

Главная страница проекта ИНФОРМАТИКА-21

Наука Школе