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

10

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

Годрик Провидец
источник
2
У меня был длинный ответ, но после некоторого обсуждения с другим модом я решил удалить его и попросить разъяснений по вашему вопросу. В чем суть вашего вопроса? Это «где я подчеркиваю свое обучение?», «Как бы вы порекомендовали отдавать предпочтение обучению по сравнению с прогрессом моделирования?», «Будет ли выбор библиотек по сравнению с самостоятельно реализованными кодами зависеть от решаемых проблем?» Или «Каковы преимущества / недостатки кодирования моих собственных алгоритмов на гораздо более раннем этапе моей карьеры? ». Мой ответ был слишком широким, и было бы лучше дать вам сфокусированный ответ на более сфокусированный вопрос.
Джефф Оксберри
Я добавил раздел, выделенный жирным шрифтом, чтобы уточнить, что именно я спрашивал, а остальное оставил нетронутым. Если вы чувствуете, что любые другие части должны быть удалены, не стесняйтесь.
Годрик Провидец
Спасибо. Я внесу некоторые изменения, чтобы сфокусировать вопрос, а затем опубликую ответ.
Джефф Оксберри

Ответы:

10

На мой взгляд, будучи аспирантом начала не меняет ответ Дэвид Ketcheson здесь на этот вопрос вы связаны в вашем посте.

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

Единственные другие сценарии, о которых я могу думать (то есть, могут быть другие):

  • Там нет никаких библиотек, которые предоставляют необходимые функции. Попробуйте внести свой вклад в существующие библиотеки с открытым исходным кодом или написать свою собственную библиотеку с открытым исходным кодом, чтобы другие могли получить пользу.
  • Вам нужна дополнительная производительность и вы можете использовать специальную структуру задачи для ее получения. Затем задокументируйте и измените существующую библиотеку или напишите реализацию с более высокой производительностью самостоятельно.
  • Супервайзер настаивает на том, что вы катите свое собственное программное обеспечение. Ну, вы там сами по себе, но я предлагаю поднять вышеприведенные пункты, чтобы убедить их, что вам лучше использовать библиотеки (если это вообще возможно в вашей ситуации).
Джефф Оксберри
источник
10

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

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

Из исследования 2011 года, проведенного в Принстоне, "Обзор практики вычислительной науки" :

Ученые тратят значительное количество времени на исследования программирования. В среднем, по оценкам ученых, 35% их исследовательского времени тратится на программирование / разработку программного обеспечения. Хотя первоначально некоторое время уходит на написание кода заново, значительная часть времени уходит на многие утомительные действия. Например, исследователи в области политики и социологии, которые использовали R / Stata, должны были сделать значительное программирование для преобразования данных переписи в форматы, понятные отдельным пакетам в R / Stata. Некоторым исследователям в области химического машиностроения пришлось перепроектировать недокументированный унаследованный код, который выполнял моделирование пламени, задолго до того, как первоначальные авторы закончили обучение, чтобы адаптировать код для более новых видов топлива ... Несмотря на это, подавляющее большинство этих исследователей считали, что «они тратить больше времени на программирование, чем они должны "

Это не означает, что это не очень хорошая идея для реализации или редизайна базовой библиотеки или приложений, но если вы собираетесь заниматься какой-либо серьезной разработкой программного обеспечения (более 25% времени вы работаете с кодом), оставьте эти три мысли в уме.

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

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

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


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

Арон Ахмадия
источник
Я уже беспокоился о количестве своих бумаг. Поскольку я буду студентом по вычислительной технике для большого числа экспериментальных студентов, вероятно, у меня будет много 2-го и 3-го авторства. Также вероятно, что в начале я буду комбинировать разные программы (код 0D из моей лаборатории, код 2D из другого университета, программное обеспечение Meshing из другой лаборатории в моем университете). Определенно много нужно подумать о том, чтобы войти в это.
Годрик Провидец
6

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

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

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

Какой правильный уровень мастерства зависит от вашей карьеры. Посмотрите, какой уровень навыков используют работающие люди в вашей области.

fcruz
источник