Программирование в химии: интервью с Джузеппе Балакко
Большинство людей ассоциируют IT в первую очередь с разработкой мобильных приложений, веб-сайтов, игр. Но «фронт» работы программистов гораздо шире. Вряд ли вы с ходу назовёте хоть одну сферу, куда ещё не внедрена электроника.
Чтобы доказать это, перенесёмся в мир химии. О том, как из учёного стать крутым программистом, не меняя сферы деятельности, мы поговорили с основателем компании Nucleomatica, разработчиком ПО для спектроскопии ядерного магнитного резонанса iNMR Джузеппе Балакко.
— Джузеппе, начнём с главного — что такое спектроскопия ядерного магнитного резонанса? Где она применяется?
— Спектроскопия ядерного магнитного резонанса (NMR) позволяет оценить молекулярную структуру вещества, его количественный и качественный состав. С середины ХХ века это один из популярнейших аналитических подходов в химии. Конкретной сферы применения нет: NMR востребована как в научных экспериментах, так и в медицине, промышленности.
К примеру, вы нашли волшебный порошок, который превращает автомобиль в трансформер. Естественно, вы захотите узнать, из чего он состоит, и попробовать его воспроизвести. Самый верный способ установить состав — спектроскопия ядерного магнитного резонанса. Также с помощью NMR компания может контролировать поставщиков сырья.
В медицине ядерный магнитный резонанс используется при диагностике заболеваний головного мозга. В сочетании с МРТ он даже заменяет хирургическую биопсию новообразований.
NMR-спектрометр
В основе метода лежит явление ядерного магнитного резонанса. Попробую объяснить упрощённо: все ядра имеют заряд, а некоторые — ещё и полуцелые спины. Возможно, вы помните, как в школьном курсе химии раскладывали «стрелочки» (протоны и нейтроны) по парам в «клеточках» (характеризующих энергетический уровень), а в итоге оставались одинокие «стрелки» и «клетки». В этом случае под действием переменного внешнего поля магнитные ядра могут менять энергетический уровень, поглощая энергию. Преобразования в них можно фиксировать в зависимости от частоты излучения извне. Регистрация этих явлений позволяет построить спектр зависимости и определить состав вещества. Для организации исследования, фиксации и интерпретации результатов используется программирование.
— Программирование в классическом представлении: на популярных языках в общедоступных средах разработки? Или это работа со специальными языками и ПО?
— Нет, самое обычное программирование, но с обширным кругом задач: работа с устройствами ввода-вывода, протоколами, интерфейсами, аналого-цифровыми и цифро-аналоговыми преобразователями, а также представление этой информации пользователю в удобной форме.
Именно поэтому на рынке фактически нет такой профессии, как NMR-программист. Как правило, это или IT-специалисты широкого профиля, или химики с дополнительным образованием. Кроме того, в NMR есть объективные ограничения: высокая точность требует много времени и ресурсов (гелия, запас которого на планете ограничен, сверхпроводящих магнитов и прочего). То есть услуга дорогостоящая. В перспективе, с открытием новых технологий, NMR может стать более доступной и применяться массово, но пока это не так.
— Какие языки программирования вы используете?
— Преимущественно С, так как требуется большая производительность. Но также приходится иметь дело с C++, Lua, Objective-C и веб-набором HTML–CSS–PHP.
По образованию я не программист, а химик, и всем языкам обучался сам. Первым был BASIC, потом я переключился на Pascal, и затем — на C. Когда начинал карьеру, рынок специализированного ПО был очень мал, поэтому пришлось учиться программировать, чтобы решать профессиональные задачи самостоятельно.
— Можете посоветовать книги?
— Для изучения многих языков, в том числе Pascal, C, Python, есть серия книг «Numerical Recipes in…». Это собрание типовых задач и решений. Очень полезно для тех, кто делает первые шаги в программировании, но не хочет тратить много времени на самостоятельный поиск ответов на тривиальные вопросы.
По C рекомендую книгу «C: a Software Engineering Approac» Питера А. Дарнелла. Она как раз посвящена созданию ПО на инженерном уровне, где важна производительность и надёжность.
По Lua могу посоветовать «Programming in Lua» Роберто Иерусалимши: здесь можно найти ответы на все вопросы по языку.
— Ваше мнение, как лучше обучаться: интернет-курсы, книги, навороченные среды разработки?
— Нет универсального ответа — необходимо всё совмещать. У меня был неудачный опыт онлайн-обучения, но преимущественно потому, что я не мог делиться своими соображениями и замечаниями. Но это частный случай, а в перспективе, безусловно, интернет-курсы — эффективный способ. При этом без книг и онлайн-документации обойтись нельзя.
Что касается использования мощных средств разработки новичками, то это может быть даже полезно, если к ним прилагается качественная документация. Главное — никогда не опускать руки. По своему опыту могу сказать: большинство трудностей, с которыми приходится сталкиваться, связаны не столько с программированием, сколько с нежеланием искать несколько вариантов решения.