Программирование в науке: Программирование в науке: актуальность и востребованность

Содержание

Программирование в науке: актуальность и востребованность

0
 
69
 
0

Информатика

29 июня 10:34

Программирование часто упоминают в прикладном контексте. Кажется, с его помощью создают только мобильные приложения, интернет-системы и спецэффекты для кино. Но первоначально программирование предназначалось для решения научных задач. Кроме того, программирование само — наука, узнать о которой будет полезно тем, кто решил связать карьеру с компьютерной разработкой.

Общая информация

Научное программирование — высокоориентированный стиль
программирования для научных расчетов. От других видов программирования
его отличают предельные корректность и стабильность
конечного продукта, строгое разделение научной и интерфейсной частей,
индивидуальность алгоритмов, а также преобладание эффективности над
универсальностью.

Научное программирование лежит в основе любого современного
глобального исследования. Все передовые технологии — от квантовых
компьютеров до космических программ — были бы невозможны без
специалистов в области научного программирования, способных предоставить
ученым надежный и точный инструмент для совершения открытий.

Ряд отраслей науки непосредственно зависят от уровня развития
научного программирования. Так, своего исполнения ждут беспилотный
транспорт, «умные» системы управления городским и сельским хозяйством,
фондовыми биржами; ждут робототехника, генная инженерия, искусственный
интеллект, превосходящий возможности человека.

Специализации

Ученые используют различные языки программирования, выбор которых
зависит от типа задачи и предпочтений автора. Исторически первым
высокоуровневым языком программирования является Fortran, на нем
написано много отлаженных библиотек математической статистики и
библиотек для решения дифференциальных уравнений, что актуально для
экономики и биологии соответственно.

Более простым синтаксисом обладает Python, также подходящий для
программирования математических вычислений. Язык Python привлекается для
обработки данных в математике, физике, экономике, биологии, химии и
умеет работать с некоторыми другими «научными» языками: Fortran, C++,
C#.

В свою очередь C# позволяет
программировать на платформе .NET, адаптировать программу к общеязыковой
исполняющей среде (CLR) и ускорить разработку в рамках оперативных
научных сессий.

Будущее профессии программист-ученый

Программирование двигает науку, которая двигает технический прогресс.
Изобретения, которые считались революционными вчера, в XXI веке служат
бытовым потребностям: СВЧ-печь, мобильный телефон, 8-битная домашняя
ЭВМ. От программиста-ученого зависит, каких вершин достигнет наука
сегодня и какие из них завтра войдут в каждый дом.

Далее на Naked Science.

Автор: Денис Стригун

Источник: Naked Science

полувековое легаси и Fortran 77 / Хабр

Александр Нозик, физик и программист, руководитель Nuclear Physics Methods Laboratory в JetBrains Research, заместитель заведующего Лабораторией методов ядерно-физических экспериментов и магистерской программой в МФТИ — о том, как перевести научный код на современный стек и почему в науку тяжело внедрять новые инструменты. Статья написана на основе выпуска подкаста «Люди и код» от Skillbox (декабрь 2021 года).

— Александр, расскажите, чем занимаетесь и какие задачи решаете?

— Моё основное место работы — Московский физико-технический институт (МФТИ), также известный как Физтех. Помимо этого, я работаю в Институте ядерных исследований РАН и JetBrains Research — это сообщество лабораторий, связанных с JetBrains. Компания поддерживает лаборатории и таким образом собирает вокруг себя научное сообщество. 

Я занимаюсь физикой нейтрино, это основное направление моей научной деятельности. Но в последние годы больше разрабатываю софт и библиотеки для научных исследований.

— Чем наука отличается от коммерческой разработки с точки зрения задач? Как это влияет на выбор инструментов и языков программирования?

— Наука всегда была и остаётся «быстрее, выше, сильнее» остальных сфер. Учёные часто решают те же задачи, что и в коммерческой разработке, но на гораздо большем масштабе. Вспомним интернет-протокол HTTP: изначально его создавали, чтобы научные центры могли обмениваться большими объёмами данных. В одном из коридоров ЦЕРНа даже висит табличка: «В этой комнате придумали интернет». 

В экспериментах по ускорению частиц на Большом адронном коллайдере, если мне не изменяет память, генерируется 25 ГБ данных в минуту. Для коммерческих проектов это просто непостижимо. Мы работаем с такими объёмами данных, которых больше нигде нет. 

Анализ данных и так называемый Data Science уже стали частью промышленности. «Так называемый», потому что до сих пор нет чёткого определения, что это за наука такая. Тем не менее всю методологию и новые инструменты разрабатывают учёные, потому что только они могут оперировать сложными математическими моделями.

Важная особенность науки в том, что в ней очень мало профессиональных программистов. Поэтому инструменты, которые используют учёные, должны быть не только самыми гибкими и быстрыми, но и простыми. Иначе учёные-непрограммисты, такого наваяют, что потом никто не сможет это разобрать. Собственно, нечто подобное уже случилось в физике, и теперь научное сообщество решает эту проблему.

Дело в том, что физики пишут вычислительный код на C++, а потом оборачивают его в код на Python. И мне кажется, этот подход себя изжил: на Python очень сложно поддерживать большую кодовую базу, а тут размеры проектов растут именно на стороне пользователей кода — учёных. Поэтому такие системы потихоньку рассыпаются и последние пять лет инженеры и учёные ищут более гибкие и простые альтернативы.

— А в других науках используют такую же связку языков?

— Да, везде примерно то же самое, но с небольшой разницей. Например, биоинформатика как отдельная область появилась относительно недавно. В отличие от физиков, которым пришлось «пересаживаться» на Python, там сразу стали работать на современных языках. Но в большинстве наук всё ещё используют библиотеки C, Fortran и С++, а над ними пишут надстройку на Python. И там сейчас те же самые проблемы с гибкостью.

Кроме Python в разных областях науки пишут или пытались писать на других языках.

R. Его используют в статистике. Это узкоспециализированный язык, который отлично подходит для решения статистических задач. Но часто нам надо не только получить данные, но и сделать веб-сервис, чтобы пользователь имел доступ к этим данным. Написать его на R — дело непростое.

Julia. Это довольно интересный язык со множеством конструктивных особенностей. Попробуйте его, если вам не хватает скорости или гибкости в Python. Хотя и у Julia есть недостаток: его набор инструментов всё ещё нестабильный.

Julia придумали как альтернативу Python и MATLAB. Последний до сих пор используют, но это проприетарная, «неживая» система. Как только вы выходите за рамки привычных задач, то сразу ощущаете его ограниченность.

Swift. Из Swift тоже пытались сделать универсальный язык, но он так и не вышел за рамки iOS. А потом появился Kotlin, который по синтаксису сильно напоминает Swift, но при этом подходит для решения более широкого спектра задач и позволяет работать с библиотеками из Java, JavaScript и C.

Java. Раньше я программировал на Java — это классный язык, который часто несправедливо ругают. Его создавали для энтерпрайза, поэтому там чересчур затянутая «церемония»: чтобы собрать простое приложение, надо написать много дополнительного кода. Да, это упрощает поддержку и повышает стабильность приложения, но сильно усложняет сам процесс программирования.

Kotlin. Сейчас я много пишу на Kotlin. Он обладает достоинствами Java, но избавляет программиста от доброй половины «церемоний», и потому, на мой взгляд, у него большие перспективы.

Какие основные проблемы в научном IT и как их пытаются решить 

— Вы упомянули, что в науке было много всего наворочено. Интересно, это относится только к библиотекам на Fortran и С++ или к чему-то ещё? И в чём там главные проблемы?

— Это очень большая проблема, которую нам ещё долго предстоит разгребать. Дело в том, что однажды разработка превратилась в отдельную профессиональную область. 40 лет назад, когда программирование только зарождалось, физики были самыми крутыми программистами. Они работали на здоровенных машинах размером со шкаф, и всем всё было понятно. Но 15–20 лет назад оказалось, что software engineering — это самостоятельная инженерная область. 

Учёные сильно отстали, потому что продолжали разрабатывать ПО в том же стиле, в котором делали это на допотопных мейнфреймах. Они придумывали замечательные алгоритмы, но совсем не думали о поддержке кода, тестировании, CI/CD и тем более об архитектуре.

Например, системы сбора данных совершенно не умеют взаимодействовать друг с другом. Их писали разные программисты, которые иногда специально делали так, чтобы системы не могли общаться между собой. Если два эксперимента выполнены на разных системах, то учёному придётся обрабатывать их результаты по отдельности. Более того, на изучение каждой системы может уйти несколько лет — настолько они сложные. 

Из-за того, что в науке не внедряли современные подходы к проектированию ПО и не использовали новые инструменты, у нас накопились миллионы строк легаси. Там можно встретить хорошие и даже гениальные алгоритмы, но понять их будет практически невозможно. Чтобы почувствовать всю боль, найдите программу на Fortran 77 и попробуйте понять, что там происходит. 

Для справки: в Fortran 77 длина имени переменной ограничена восемью символами. Это значит, что, когда заканчиваются все подходящие имена переменных, программа становится нечитаемой. В ход идут числобуквенные идентификаторы, с которыми код становится только запутанней. А ведь большая часть программ в науке всё ещё написана на Fortran.

Относительно недавно учёные поняли, что нужно инвестировать в software engineering, уделять внимание архитектуре и осваивать современные инструменты, а не городить свои велосипеды. К моему удивлению, за последние два года появилось много групп инженеров, которые целенаправленно продвигают современный подход в науке.

— Расскажите немного, что это за группы и чем они занимаются?

— К ним относятся наша лаборатория в Физтехе и в JetBrains Research. Мы пытались продвигать новый подход в ИЯИ РАН ещё восемь лет назад, но столкнулись с сопротивлением. Нельзя просто прийти к учёным и сказать: «Мы хотим написать новую программу, которая будет делать то же самое, что и ваша старая, только гораздо удобнее». Вам ответят: «А у нас и так всё хорошо работает». И никого не волнует, что 80% своего времени они тратят на совершенно бесполезные вещи. Тем не менее в некоторых отраслях стоимость поддержки становится критичной и научное сообщество обращает на это внимание.

Есть и другие группы. Например, недавно мы познакомились с коллегами из института CASUS Science в Дрездене. Мы тесно сотрудничаем с учёными из «Немецкого электронного синхротрона» (DESY) по фундаментальным и прикладным исследованиям. Ещё геоинформатики в Германии внедряют у себя Big Data, как когда-то это сделали в биоинформатике.

Есть и отдельные инженеры, которых мы знаем по JetBrains Research, в Новосибирске и Петербурге. В ЦЕРНе на Большом адронном коллайдере уже довольно давно работает своя группа. Хотя её основная задача — поддерживать существующие системы, а не разрабатывать новые. ВШЭ и «Яндекс» открыли лабораторию Lambda. Правда, пока они используют только методы machine learning, а software engineering не трогают. 

— Такие группы только разрабатывают софт или ещё проповедуют свои идеи, организовывают конференции?

— Сообщество software engineering начало собираться в российской науке совсем недавно. Люди только осознают, что нужно менять инструментарий, и потихоньку разрабатывают свои программы, оглядываясь на других. 

Мы с коллегами хотим создать сообщество, чтобы обсуждать насущные проблемы IT в науке и обмениваться идеями. Нас поддерживают учёные из других групп, поэтому думаю, что скоро нас станет гораздо больше. 

Ещё важный момент. Софтверные группы при исследовательских центрах и крупных экспериментах действуют уже давно. Но они работают как энтерпрайз: быстро решают конкретную задачу и не думают о развитии направления. А продвигать новые архитектуры, инструменты и подходы надо долго и целенаправленно.

Какие проблемы существуют в обучении учёных программированию

— Наверняка преподаватели старой школы отличаются от аспирантов и молодых учёных 30–35 лет. Кому проще объяснить, что необходим системный подход к инжинирингу и выбору тулинга? 

— С молодёжью, конечно, договориться проще. Уже в школах и институтах они знакомятся с разными инструментами и понимают, что многие вещи можно делать иначе. А вот учёные старой школы с большим трудом вылезают из привычной экосистемы. Не то чтобы они этого не хотели – просто не видят путей. 

Яркий пример: многие сидят на С++ 11 и даже не подозревают об этом. Причём на самом деле они почти не используют возможности C++ 11, а пишут на С++ 98. Если спросить типичного физика, который говорит: «Я знаю С++», про смарт-пойнтеры (необходимую вещь для менеджмента памяти в современном С++), то, скорее всего, он ничего не расскажет. 

Я задаю один и тот же вопрос всем «знатокам»: «Как управлять памятью в С++?» Большинство начинает рассказывать про new, delete и так далее. Но современные программы так не пишут. 

Лучше всего, когда у человека есть хотя бы небольшой опыт промышленной разработки. Я имею в виду не работу в фирме, а практику в веб-разработке или других востребованных областях. С такими инженерами уже можно говорить на одном языке.

— Как помогает государство или бизнес? Ведётся ли какая-то целенаправленная работа по технологическому обучению молодых физиков, математиков и биологов?

В этом направлении работают компании, правда пока не очень слаженно. Бизнесу выгодно развивать научное программирование, потому что, как я уже сказал, наука решает самые сложные задачи. Кто-то из науки переходит в коммерческую разработку, и компании с радостью хантят таких специалистов. Таким образом, мы тренируем людей на своих задачах и тестируем инструменты компаний. 

На Западе в развитие научного тулинга вкладываются гиганты вроде Microsoft и Google, а в России — JetBrains и «Яндекс». Компании поменьше тоже подтягиваются, но пока не знают, с чего начать. Ведь для этого нужно понимать, как работает образование. 

— Вы говорили, что за долгие годы в науке накопилось много легаси-кода. Надо ли его переписывать на современный стек или можно оставить как есть, но при этом сменить прослойку из кода на Python? 

— И то и другое. Я думаю, что рано или поздно все библиотеки придётся переписать, потому что прослойка не решает всех проблем. Как только вы захотите поменять что-нибудь внутри — а не бывает такого кода, который никогда не меняется, — вы застрянете из-за бесконечно долгой поддержки.

Конечно, невозможно переписать в одночасье всю кодовую базу, поэтому пока мы работаем с обёрткой там, где это возможно. Сам С++ подкидывает проблем, потому что очень плохо дружит с другими языками, для него невозможно писать удобные прослойки. Поэтому зачастую получается vendor lock — чтобы подключиться к старому коду на С++, новый тоже приходится писать на плюсах. Я думаю, с этой проблемой скоро разберутся, потому что стоимость поддержки старых программ растёт.

— Как, на ваш взгляд, выглядит идеальная модель научной IT-инфраструктуры? Какими должны быть железо и программный стек, какие инструменты должны использоваться?

— На этот вопрос нет однозначного ответа, потому что задачи могут быть разные. Например, иногда нужны суперкомпьютеры. Таких задач немного, но они есть, и в них всё завязано на суперкомпьютерах. В большинстве же случаев достаточно мощности персоналок. 

Я думаю, что научная IT-инфраструктура должна как минимум не отставать от коммерческой. Обязательно нужны IDE, автоматическая проверка кода, автоматическое тестирование и continuous integration. Последнюю уже внедрили в большой части проектов, но она ещё не до всех дошла. 

Нужно внедрять микросервисную архитектуру, потому что наш огромный «зоопарк» инструментов практически нереально подружить. Они написаны на разных языках и реализуют разные протоколы, поэтому вряд ли получится наладить коммуникацию между ними. Думаю, мы движемся к веб-сервисам, браузерной визуализации и, возможно, к распределённой архитектуре. Сейчас много говорят о распределённых вычислениях и удалённой разработке, но пока такие проекты находятся в пилотной стадии.

Как помочь науке и какие технологии изучать начинающим учёным

— Какие есть опенсорс-проекты по переводу старых библиотек в новые? Работаете ли вы с контрибьюторами и как волонтёрам подключаться к крупным инициативам?

— Да, буквально недавно мы обсуждали несколько таких задач. Недавно Дмитрий Костюнин из Технологического института Карлсруэ (KIT) выступал с докладом о переводе CORSIKA, одной из основных библиотек для моделирования, со старого Fortran на современный С++. Проект полностью открытый, туда приглашают всех, кто умеет программировать.

Есть много легаси-кода, который надо просто почистить, найти в нём узкие места и так далее. Большая часть кодовой базы, к счастью, уже открыта и лежит на GitHub. Можно поискать эти проекты и присоединиться.

Основная проблема с переводом в том, что большая часть задач написана не на программистском языке. Было несколько попыток привлечь профессиональных программистов к научной разработке. Например, ЦЕРН когда-то пытался, но столкнулся с банальной проблемой: программисты не понимают, чего хотят физики, а физики не могут доступно объяснить задачу программистам. Поэтому куда проще применить машинное обучение, для которого вообще ничего понимать не надо. Собственно, в этом главная прелесть machine learning.

Учёные, которые более-менее разбираются в программировании, должны формулировать задачи так, чтобы программисты их понимали. Вообще, у разработчиков большой интерес к нашей области. Ко мне часто обращаются энтузиасты и просят дать какое-нибудь задание.

— А что бы вы посоветовали тем, кто только приходит в науку или уже пришёл, но без нормальной IT-подготовки? Какой минимум нужно освоить, чтобы делать хорошие вещи?

— Развивайте кругозор и знакомьтесь с разными областями программирования. В первую очередь — с веб-разработкой, потому что именно там используют самые современные технологии. Желательно знать, как работают простые веб-проекты и сервисы.

В научном софте много проблем с архитектурой, поэтому полезно посмотреть, как устроены большие проекты и как в них организуются потоки данных. Послушайте доклады с конференций по коммерческой разработке, попробуйте их понять и подумайте, как эти технологии можно применить в вашей деятельности. 

Разумеется, в инженерии без опыта ничего не сделаешь. Но вообще, это очень хорошая идея — сделать cheat sheet, как максимально быстро перейти на следующий уровень мастерства. 

— Что порекомендуете почитать по этой теме? На кого подписаться, за кем следить?

— Первое, что рекомендую, — подписаться на JetBrains Research. У них есть материалы о computer science и натуральных науках на русском языке, а в Telegram можно найти инвайты на семинары в Zoom. 

ЦЕРН регулярно выпускает доклады по software engineering. Но я не особо за ними слежу, потому что там не столько рассказывают о новых разработках, сколько переосмысливают сделанное.

Что такое научное программирование (и почему оно популярно)

Авторы

Элли Фаллер

Студент

Лорен Хервехе

Персонал

Челси Надь

Директор

Темы

КОНТРОВАЯ ЗЕМЛЯ АНАЛИТИКА

Analytics

Science

Tags

Data Science

Навыки данных

Образование и обучение

В этом посте мы представим научную программу ученые должны научиться кодировать и преимущества чистых и воспроизводимых методов кодирования для открытой науки.

12 января 2021

Мужчина в джинсах и футболке набирает в консоль. Он вводит несколько команд, запускающих сценарий. Нет ошибок, нет красного текста. Все идет гладко.

Это, вероятно, не большинство людей представляют себе геолога. Тем не менее, в наши дни многие геологи тратят столько же времени на монитор компьютера, сколько и на горные образования, точно так же многие современные гидрологи тратят гораздо больше времени на написание кода и изучение баз данных, чем на плавание по рекам.

Такова реальность науки 21 века. Исследования становятся более эффективными, быстрыми и более воспроизводимыми. Это мир, в котором у ученых почти всех дисциплин есть общий инструмент: научное программирование.

В этом посте мы познакомим вас с научным программированием и поговорим о том, почему ученые должны учиться кодировать, а также о преимуществах чистых и воспроизводимых методов кодирования для открытой науки.

Что такое научное программирование?

Научное программирование имеет определение, которое, хотя и простое, охватывает огромное количество приложений и отраслей. Технически научное программирование — это любое использование компьютерной программы для научных исследований.

Надпись: Научное программирование — это любое время, когда программирование используется для научных исследований.

Источник: Кристиан Колен

Альтернативный текст: Зеленый код на черном экране с клавиатурой на переднем плане.

 

Большинство ученых, от геологов до зоологов, могут получить пользу от научного программирования. Используя научное программирование, исследователь может увеличить скорость и воспроизводимость своей работы в геометрической прогрессии. Хотя в некоторых вещах люди, безусловно, лучше компьютеров, выполнение массивных вычислений, хранение данных и анализ результатов — это именно то, для чего компьютеры были созданы. Ученые могут использовать компьютеры для автоматизации процессов, которые в противном случае были бы невероятно трудоемкими, утомительными, подверженными ошибкам и сложными для исследователей-людей.

Важно отметить, что компьютеры не делают математических ошибок. Конечно, ошибки все еще могут случаться, но эти ошибки обычно коренятся в человеческой ошибке — компьютеры просто следуют указаниям, поэтому, если в расчетах есть ошибка, компьютер ее не уловит. При этом компьютер может за несколько минут выполнить ряд вычислений, на которые у человека-исследователя ушли бы месяцы или даже годы. Более того, он будет выполнять вычисления точно таким же образом при каждом запуске кода.

Что я могу делать с научным программированием?

Научное программирование может принести пользу ученым и исследователям различными способами. Не вдаваясь в конкретную область (ниже мы приведем вам несколько примеров из области науки о Земле), наиболее важными сверхспособностями научного программирования являются:

  1. Автоматизация трудоемких задач: вам недели, месяцы, годы или просто невозможно будет сделать вручную. Например, если вы хотите отслеживать количество твитов, посвященных недавнему стихийному бедствию, было бы жалко просматривать десятки тысяч каналов один за другим. При использовании кода эта задача может занять всего несколько минут.
  2. Изменить и обновить исследования: Если вы пишете чистый код, его можно модифицировать и запускать снова и снова. Давайте представим, что вы изучаете, как социально-экономические данные связаны с загрязнением воздуха в районе Денвера. Если вы напишете чистый, хорошо прокомментированный сценарий, вам будет легко включить данные переписи следующего года в свои результаты.
  3. Обменивайтесь методами с общественностью и другими исследователями: Кодом легко делиться, что делает науку более открытой и воспроизводимой. Как исследователь, он позволяет вам делиться своими точными методами как с другими учеными, так и с общественностью.
  4. Документирование рабочих процессов: Код позволяет легко документировать рабочий процесс. Вы можете использовать комментарии, чтобы объяснить каждый шаг процесса (для себя в будущем или для других), поэтому, если вам нужно обновить или изменить что-то позже, это будет быстро и просто.
  5. Включить совместную работу: Код упрощает совместную работу. Возвращаясь к предыдущему примеру, если вы изучаете загрязнение воздуха в Денвере, а ваш коллега изучает загрязнение воздуха в Сан-Франциско, вы можете сравнивать модели, обмениваться сценариями и работать вместе.

 

Это довольно невероятный список. Он мощно продвигает науку вперед не только из-за скорости вычислений и расчетов, но и из-за простоты сотрудничества и модификации. От помощи биологам в секвенировании генома человека до предоставления социологам возможности делать более точные экономические прогнозы и до приведенных ниже примеров из области наук о Земле — научное программирование было и остается революционным.

The Cold Springs Fire: пример программного рабочего процесса

Вот пример рабочего процесса, значительно улучшенного с помощью научного программирования.

Вы изучаете пожар в Колд-Спрингс, который произошел в Колорадо в июле 2016 года. Вы хотите понять, как пожар повлиял на растительность, что потребует использования спутниковых изображений (от Landsat, MODIS и NAIP) до и после пожара, с границей огня («шейп-файл») в качестве наложения. Для этого вам, возможно, потребуется сначала изменить систему отсчета координат с помощью координат и проекции — способ выравнивания пространственных данных для передачи на трехмерную поверхность — изображений Landsat, чтобы они соответствовали проекции. граница огня. Затем вы обрезаете изображения, чтобы анализировать данные о растительности только в пределах границы пожара. Затем вы должны удалить облака с изображений, так как эти пиксели будут искажать ваши результаты. Поскольку каждое изображение Landsat содержит несколько уникальных полос, представляющих разные длины волн света, вам необходимо выбрать интересующие полосы. Наконец, вы должны рассчитать нормализованный разностный индекс растительности (NDVI), меру здоровья растительности, и нормализованный коэффициент выгорания (NBR), меру серьезности лесного пожара, используя математические расчеты с определенными комбинациями каналов, и нанести результаты на график.

 

Подпись: Изображение NAIP места, где произошел пожар в Колд-Спрингс, сделанное после происшествия.

Вручную этот процесс был бы очень утомительным и занял бы дни или даже недели, если у вас много изображений. Вероятно, вам также потребуется приобрести проприетарное программное обеспечение для обработки изображений и выполнения растровых вычислений. Вам нужно будет открыть каждый отдельный набор каналов Landsat и выполнить описанные выше шаги — перепроецировать, обрезать, сложить каналы, маскировать облака и выполнить растровые вычисления. В частности, маскирование облаков было бы головной болью, так как вам нужно было бы визуально искать облака, которые нужно вырезать. Будет повышена вероятность ошибки, когда вы просматриваете каждое изображение, так как вы можете забыть какой-то шаг.

Ваш процесс также будет гораздо менее воспроизводимым, так как другой ученый, желающий повторить ваше исследование, должен иметь то же программное обеспечение, что и вы, и точно следовать вашим шагам. В качестве альтернативы, если вы сделали это программно, вы могли бы легко поделиться своим кодом и рабочим процессом с другими учеными, что позволило бы им повторить ваш процесс за считанные минуты. Как только код будет написан, вы сможете использовать его на любом количестве изображений с минимальными затратами времени.

Надпись: Пример NBR, рассчитанный программно на изображении Landsat.

 

Подпись: Пример NDVI, рассчитанного программно на изображении MODIS.

Дополнительные примеры научного программирования из реальной жизни

Использование научного программирования для изучения пожарного загрязнения и здоровья органов дыхания

Надпись: Воздушный танкер сбрасывает красный огнезащитный состав на населенный пункт в Вашингтоне, чтобы замедлить распространение лесного пожара. Источник: Википедия

Альтернативный текст: Воздушный танкер сбрасывает красный огнезащитный состав на поселок на холмах Вашингтона.

 

У нас есть несколько ученых в Земной лаборатории, которые специализируются на изучении лесных пожаров в Соединенных Штатах. Наша исследовательская группа исследует многие аспекты пожаров, в том числе растения, которые чаще всего горят, такие как инвазивный читграсс, способы защиты сообществ от растущего числа лесных пожаров, способы использования социальных сетей для помощи в реагировании на лесные пожары и то, как различные нарушения леса, такие как нашествие насекомых , ветровые явления и лесозаготовки могут влиять на частоту пожаров.

Большой и часто упускаемой из виду опасностью лесных пожаров является ущерб, который они наносят здоровью человека. Дым от пожаров связан с рядом проблем с дыханием и легкими, поскольку он резко увеличивает количество мелких твердых частиц в воздухе. Мелкие твердые частицы являются одним из самых опасных загрязнителей от лесных пожаров и связаны с раком легких и проблемами с сердцем и легкими.

Воздействие этих мелких частиц на местное население как переносимых по воздуху загрязнителей может быть трудно предсказать и отследить — респираторные заболевания имеют множество причин и зависят от экономических факторов, образа жизни и демографических факторов, а также от загрязнения воздуха. Отделение воздействия загрязнения, связанного с лесными пожарами, на население от выхлопных газов транспортных средств или промышленного загрязнения требует большого количества данных и сложного моделирования.

Научное программирование предлагает решение этой проблемы. Исследователи могут комбинировать источники данных и определять «смешивающие переменные» (переменные, которые вызывают такую ​​же реакцию на здоровье, как дым от лесных пожаров, и отрицательно влияют на точность модели).

Исследователи Лаборатории Земли используют комбинацию данных о госпитализациях и обращениях за неотложной помощью, данных переписи населения США, метеорологических данных и изображений с геостационарных спутников для создания моделей того, как эти частицы влияют на здоровье органов дыхания. Находя алгоритмы или математические правила, которые лучше всего соответствуют данным, модели могут точно предсказать влияние дыма от будущих лесных пожаров на уязвимые группы населения.

Научное программирование жизненно важно для создания этих сложных моделей — человек не может объединить и понять все типы данных без помощи машины. Кроме того, хотя исследователь может вручную вычислить алгоритмы, объясняющие закономерности в данных, это займет непрактично много времени. Таким образом, модели, связывающие загрязнение дымом лесных пожаров с негативными последствиями для здоровья органов дыхания, не могли бы существовать без научного программирования.

Использование научного программирования и социальных сетей для реагирования на стихийные бедствия

Одна из самых сильных сторон научного программирования заключается в том, что оно может выполнять объем работы, который был бы невозможен для одного человека или даже группы людей. Эта сверхдержава ясно видна в этом примере из исследования ученого Лаборатории Земли Лизы Сен-Дени.

Лиз использует Twitter, чтобы помочь службам экстренного реагирования определить возникающие и происходящие чрезвычайные ситуации, о которых они могут не знать.

Когда происходит стихийное бедствие, люди звонят в полицию и другим официальным лицам, но они также обращаются к своему онлайн-сообществу, иногда с жизненно важной информацией. Кроме того, во время стихийных бедствий горячие линии могут быть перегружены звонящими. Социальные сети могут быть единственным каналом связи.

Это означает, что такие сайты, как Twitter, могут содержать жизненно важную информацию, которая нужна группам реагирования на стихийные бедствия, но слишком много твитов, чтобы человек (или команда) мог разобраться и при этом достаточно быстро передать информацию группам реагирования. Лиз Сен-Дени знает это по собственному опыту. Она была частью команды во время пожара в комплексе Карлтон в 2014 году, которой было поручено сортировать твиты и составлять ночной отчет. Хотя их отчет был полезен, команда Лизы не успевала за потоком твитов, а респондентам нужна была информация быстрее, чем команда могла ее предоставить. Решение было ясным для Лизы — им нужно было задействовать сверхспособности научных вычислений.

Последние несколько лет Лиз работала над созданием алгоритма фильтрации, который собирает данные из Твиттера и сортирует их по важности. Этот код может выполнять работу целой команды людей, «просматривая» и классифицируя каждый отдельный твит по мере его поступления. безопасно идентифицированы как неважные для лиц, оказывающих первую помощь. «Просмотр» огромного количества быстро движущихся данных и распределение их по категориям — одна из сильных сторон научного программирования.

Будущее научного программирования

Трудно выбрать одну особенно многообещающую область научного программирования, потому что существует так много захватывающих возможностей. Почти в каждой области науки есть инструмент программирования, который является «путем будущего», и написать обо всех из них было бы невозможно.

Многообещающая тенденция, которая приносит пользу почти во всех областях, — это область моделирования. Модели были основой науки на протяжении веков. Они используются в астрономии, науках о Земле и медицине для открытия звездных систем, предсказания лесных пожаров и понимания болезней соответственно. Чем точнее и полнее становятся алгоритмы, лежащие в основе таких моделей, тем лучше будут модели (но ни одна модель не идеальна!).

В современном мире, управляемом данными, наука является почти синонимом научного программирования. Используя мощь массивных компьютеров, проблемы, десятилетиями разочаровывающие научный мир, решаются в считанные мгновения. Увеличение эффективности и скорости полностью изменило большинство областей современной науки. Научное программирование — это, без сомнения, наш путь в будущее.

Если вы готовы начать изучать программирование для науки о Земле, вы можете узнать больше о нашей программе профессиональных сертификатов здесь. Если у вас есть какие-либо вопросы (или у вас есть замечательный пример научного программирования, который мы должны включить), сообщите нам об этом в разделе комментариев ниже!

Связанные статьи

Передовая аналитика Земли

Что такое научное программирование (и почему оно популярно)

Автор:

Элли Фаллер

Автор:

Лорен Хервехе

Автор:

Челси Надь

Экстремальные явления и стихийные бедствия

Математическое моделирование загрязнения воздуха над западной частью США

Автор:

Эллен Консидайн

Экстремальные ситуации и стихийные бедствия

Лесные пожары: быстрорастущая проблема

Автор:

Эллен Консидайн

Компьютерное кодирование в науке

Чтобы быть успешным ученым в академических кругах, уже недостаточно хорошо разбираться в науке. Помимо опыта в экспериментальных методах и анализе данных, ученые также должны преуспеть в публичных выступлениях и письмах. Кроме того, ученые должны иметь возможность успешно объединяться в сети для формирования и поддержания полезного межучрежденческого сотрудничества. Владение компьютерным кодированием, возможно, стало одним из самых важных навыков, необходимых исследователю в науке сегодня. Для этого есть ряд причин, главная из которых заключается в том, что благодаря достижениям в области инструментов и технологий исследователи теперь собирают и работают с большими наборами данных. Эти наборы данных требуют вычислительного кодирования и шагов машинного обучения для беспристрастного крупномасштабного анализа.

Статистический пакет R часто является первым знакомством исследователя с языком кодирования. R стал одним из самых популярных статистических пакетов в научных исследованиях, во многом благодаря тому, что он бесплатный, легко настраиваемый, а аналитические пакеты доступны в онлайн-репозиториях. R работает в среде, используя собственный язык кодирования для выполнения мощных операций с данными и визуализации. Таким образом, аспиранты учатся кодировать и использовать R на раннем этапе своей карьеры. Отсюда R становится воротами к дальнейшему мастерству кодирования.

Кроме того, многие аналитические программы имеют загружаемые версии, которые работают через командную строку. Взаимодействие с программой или компьютером через командную строку относится к случаям, когда команды даются в виде текста, а не с использованием меню или графического интерфейса. Они часто имеют открытый исходный код, бесплатны и допускают большую настройку и индивидуальный анализ. Например, доступна для загрузки версия BLAST (Basic Local Alignment Search Tool) для командной строки. BLAST — это инструмент, который ищет предоставленную пользователем последовательность ДНК или белка в именованной базе данных, чтобы идентифицировать похожие последовательности или области сходства последовательностей. Его часто используют для идентификации сходных генов или белков у разных видов. Версия для командной строки обеспечивает гораздо большую гибкость, чем веб-инструмент. Например, пользователи могут создавать свои собственные базы данных и настраивать, как и какую информацию выводить на выходе. Экспоненциальное увеличение количества данных, которые теперь могут собирать исследователи, делает компьютерное кодирование бесценным аналитическим инструментом. Кодирование также позволяет автоматизировать многие повторяющиеся аналитические задачи. Возрастающее значение кодирования далеко не только для биологии, но широко распространено во всех научных и инженерных дисциплинах.

Какие существуют способы обучения кодированию?

Существует множество способов научиться программировать, и важно определить, какой метод лучше всего подходит для вас. Сначала вы должны решить, какой компьютерный язык вы собираетесь изучать. Некоторые из наиболее крупных и рекомендуемых языков для науки включают Python, Perl и Scala. Многие академические учреждения предлагают вводные курсы по кодированию, которые могут стать отличной отправной точкой для изучения основ кодирования. В некоторых случаях эти курсы могут быть прогрессивными, например, начиная с Python для начинающих и переходя к среднему уровню. Стоит отметить, что эти курсы ориентированы на студентов из всех дисциплин, поэтому могут быть части класса, которые не применимы к вашей собственной работе очевидным образом.

Другой метод изучения кода — бесплатные онлайн-курсы, учебные пособия и специальные блоги. Быстрый онлайн-поиск по запросу «изучить код онлайн» даст вам, казалось бы, бесчисленное количество вариантов. Лучше всего просматривать сайты, чтобы определить тот, который лучше всего соответствует вашему уровню опыта и преподает материал, который имеет отношение к вам лично. Преимущество онлайн-курсов и учебных пособий заключается в том, что они позволяют вам работать в своем собственном темпе и выбирать классы, которые вы найдете полезными. Некоторые учащиеся доводят самоконтролируемое обучение до крайности и изучают код по учебникам. Есть много доступных учебников, некоторые из которых адаптированы к конкретным дисциплинам. Эти учебники описывают основы языка кодирования, а затем переходят к соответствующим примерам и практическим упражнениям с использованием предоставленных наборов данных.

Еще один способ научиться кодированию на практике — найти своего собственного Йоду кодирования, который готов без жалоб отвечать на вопросы и давать советы. Тем не менее, таких персонажей немного, и их обычно следует рассматривать как дополнение к вашему собственному обучению, поскольку они обеспечивают более практическое руководство, чем фундаментальное обучение.

С чего начать и где получить помощь

Лучше всего начать с отдела информационных технологий (ITS) вашего учреждения, особенно если в нем есть научно-исследовательское отделение. ITS может предоставить вам необходимые физические ресурсы. Например, они могут настроить виртуальные машины (ВМ), которые разрешают удаленный доступ к обслуживаемой среде. Эти виртуальные машины особенно полезны, если вы в основном используете Windows, но для ваших аналитических инструментов требуется операционная система Linux. Поскольку эти виртуальные машины настраиваются и обслуживаются обученными экспертами, они могут помочь в установке программ, обеспечении их работы и устранении неполадок. Если вы столкнетесь с ошибками (что, вероятно, произойдет в самом начале), Интернет — ваш друг. Хотя может быть трудно найти точный ответ, который вы ищете, существует множество онлайн-форумов и блогов, полных людей, готовых помочь. Наконец, многие доступные пакеты имеют открытый исходный код и доступны в онлайн-репозиториях, что означает, что они разработаны исследователями и доступны научному сообществу. Как следствие, любой анализ, который вы пытаетесь провести, скорее всего, не только уже был сделан ранее, но и инструмент доступен в Интернете вместе с учебной документацией.

Владение компьютерным кодированием стало несомненным преимуществом для исследователей на всех этапах их карьеры и в разных дисциплинах. Однако многим трудно овладеть этим навыком, особенно когда вы только начинаете. Я определенно обнаружил, что есть крутая кривая обучения, полная разочарования, особенно в практическом применении знаний учебника к моим собственным данным. При этом обучение кодированию стоит затраченных усилий и принесет дивиденды в виде аналитической мощности и масштаба. Существует множество способов научиться кодированию, и важно выбрать лучший из них, который подходит именно вам.

Дополнительная информация:
Основная команда R (2013). R: Язык и среда для статистических вычислений. R Foundation for Statistical Computing, Вена, Австрия. URL-адрес www.R-project.org/.

участников Википедии. «Интерфейс командной строки.» Википедия, свободная энциклопедия. Википедия, Бесплатная энциклопедия, 3 ноября 2016 г. Интернет. 3 ноября 2016 г.

участников Википедии. «Графический пользовательский интерфейс». Википедия, свободная энциклопедия. Википедия, Бесплатная энциклопедия, 14 ноября 2016 г. Интернет. 14 ноября 2016 г.

участников Википедии. «Питон (язык программирования)». Википедия, свободная энциклопедия. Википедия, Бесплатная энциклопедия, 20 ноября 2016 г. Интернет. 20 ноября 2016 г.

участников Википедии.