(Или «работает – не работает»)
Я много смотрел, как работают другие люди. И то, что видел, отсекало то лишнее, что делал я сам. Чем больше я видел, тем лучше понимал, что делаю сам.
Леонид Кроль. «Между живой водой и мертвой»
Вообще-то я инженер-строитель. Так что я не только не программист, но никогда им не был. Мало того, мне всегда казалось, что программист – это вообще не специальность. Это, скорее, кодировщик (программа по-английски так и называется – code ), которому понимающие люди ставят задачу, а он всего лишь переводит ее на машинный язык, кодирует, так сказать. Люди они несомненно умные, мне, во всяком случае, глупых «кодировщиков» не попадалось. Но сама работа… Формулируют ему задание, в котором он ничего не понимает, а он должен разработать программу для его выполнения. А чтобы ему в этом помочь, при нем состоит инженер, который знает суть проблемы.
Достаточно неудобная схема, особенно если учесть, что инженерные и программистские мозги работают совершенно по-разному. Программисту нужно все подать на уровне алгоритма: берешь это, умножаешь на то и получаешь, что нужно. Что означает «то», «это» и «что нужно», ему знать не интересно. Получил на вводе «это» и «то», обозначил их идентификаторами «А» и «В», перемножил «А» на «В», присвоил полученное значение идентификатору «С» и вывел его значение на печать. Вот и все.
У инженера все иначе. Нет у него никаких идентификаторов (он и само слово-то с трудом выговаривает), а есть у него внешние нагрузки и перемещения узлов, напряжения и деформации, в общем, «всякая-разная» физико-техническая дребедень. И всю эту дребедень хороший инженер чувствует буквально на уровне подсознания.
Однажды (к тому времени я уже защитился и мне казалось, что я вполне разбираюсь в инженерных расчетах) мой дядя показал мне фокус. Увидев огромный рулон с распечаткой машинного расчета целого здания (я этим расчетом очень гордился, так как часть программы, по которой считали это сооружение, делал я), он ухмыльнулся и достал из ящика логарифмическую линейку.
– Ну и сколько машинного времени вы потратили на этот замечательный расчет? – ухмыляясь, спросил меня дядя.
– Пару недель, наверное. Каждую стену по отдельности насчитывали методом суперэлементов и результаты записывали на диск. Это делали операторы по ночам. По две-три стены за ночь. Потом делали «сшивку», в которой «соединяли» все стены вместе. Затем, получив общие перемещения системы, возвращались назад и считали перемещения и усилия в каждом элементе каждой стены.
– А сколько времени вы разрабатывали программу для расчета этим самым вашим «методом суперэлементов»?
– Смеешься? Ты же сам делал рисунки с этими суперэлементами для моей диссертации. Лет пять делали. Чего спрашиваешь, ты же все сам знаешь!
– Да, смеюсь.
– Над чем?
– Над тобой. А чтобы ты понял, покажу тебе фокус: сделаю расчет этого здания минут за пять. С помощью вот этой самой логарифмической линейки. – И он помахал линейкой у меня перед носом.
В том, что он это может, у меня сомнений не было. Я вполне представлял, что умеет инженер такого класса, как он или мой папа. Но чтобы за пять минут, да такое сложное промышленное здание… Невозможно.
– Да ладно, за пять минут. За вечер, вдвоем с папой, может, и сделаете прикидочный расчет. А за пять минут – нет. Здесь же одних нагрузок десятки. И часть из них динамические – станки, мостовые краны.
– Статические, динамические… Ты время засекай.
Ровно через пять минут передо мной лежал листок, исписанный четким инженерным почерком: перемещения и напряжения в основных узлах системы.
Я развернул рулон с расчетом. Все совпадало, с точностью до 5 %. Стандартная инженерная погрешность!
– Может, тебе сказать, какую арматуру вы насчитали в колоннах и балках? – продолжал насмехаться дядя. – Так для этого мне и пяти минут не надо. Без логарифмической линейки, заметь. Даже считать не придется, и так знаю.
Слов у меня не нашлось. Это и было то самое Гун-Фу, высшее мастерство, которое могло присутствовать во всем: умении строить, лечить, учить, подметать, убирать мусор, мыть посуду. Тут дело было не в том, что человек делает, а в том, как он это делает.
Разумеется, такого Гун-Фу у программиста, который разрабатывает программу, в принципе быть не могло (у него свое Гун-Фу, он чувствует не инженерную конструкцию, а программу). Он действует совершенно иначе – запускает тестовый пример и торжественно приносит результаты инженеру: «смотри, работает». И не удивляет его, что балка под воздействием собственного веса прогибается не вниз, а вверх. Программа же функционирует, результат выдает, а что знак перепутал, ну так это дело «житейское».
Читать дальше