Я начинаю свою аспирантуру в области машиностроения и буду работать над проектами в области вычислительной науки. Я заметил , что там была некоторая дискуссия о преимуществах и недостатках реализации собственных алгоритмов здесь . Отличается ли анализ затрат и выгод от реализации ваших собственных алгоритмов от использования библиотек, когда вы начинающий аспирант?
10
Ответы:
На мой взгляд, будучи аспирантом начала не меняет ответ Дэвид Ketcheson здесь на этот вопрос вы связаны в вашем посте.
Код минимальных версий алгоритмов, которые вы хотите изучить. Затем отложите их в сторону. Кодирование ваших собственных алгоритмов наиболее полезно для обучения, но для исследовательского (или производственного) кода, если ваши цели исследования не состоят в том, чтобы написать программное обеспечение, улучшающее современные библиотеки (если они вообще существуют), вы ' лучше использовать библиотеки. Библиотеки, вероятно, будут лучше документированы, более масштабируемы и более надежны, чем то, что вы сами кодируете, если только вы (или не стали) действительно хороши в кодировании. Кроме того, библиотеки могут быть протестированы и отлажены для вас (хотя, конечно, это зависит от того, кто написал библиотеку ...). Вы будете нести ответственность за поддержку, отладку и тестирование любого кода, который вы пишете для своей диссертации, и, чтобы сэкономить время, это поможет минимизировать объем кода, который вам нужно написать.
Единственные другие сценарии, о которых я могу думать (то есть, могут быть другие):
источник
Я бы хотел еще больше расширить вдумчивый ответ Джеффа . В частности, я хочу дать вам немного больше представления о ценности ваших усилий по программированию, а не о ваших исследовательских усилиях в начале вашей карьеры в качестве академика.
Вы обнаружите, что способность писать программное обеспечение для расширения ваших научных исследований сделает вас ценным членом практически любой исследовательской группы. Однако это время не обязательно будет считаться «ценным» для ваших академических коллег или тех, кто нанимает на академические должности.
Из исследования 2011 года, проведенного в Принстоне, "Обзор практики вычислительной науки" :
Это не означает, что это не очень хорошая идея для реализации или редизайна базовой библиотеки или приложений, но если вы собираетесь заниматься какой-либо серьезной разработкой программного обеспечения (более 25% времени вы работаете с кодом), оставьте эти три мысли в уме.
Сложность и риск растут в геометрической прогрессии в зависимости от размера проекта и количества разработчиков. Пока вы не написали или не работали с более крупными программами или командами разработчиков, выходящими за пределы вашей лаборатории, вам будет трудно хорошо оценить это и правильно спрогнозировать усилия.
Тебе нужно быть хорошим. Для написания полезного программного обеспечения требуется определенная степень зрелости, как программиста, так и ученого. Вы должны знать, каковы важные функции, где находятся числовые риски, и уметь прогнозировать усилия по программированию для данного набора функций и надежности. Конечно, единственный способ добиться успеха - это тратить время на проекты, которыми вы не руководите или которые могут благополучно провалиться или быть отсроченными, что подводит меня к моему последнему пункту.
Хотя многие исследовательские лаборатории и промышленные должности высоко ценят опыт программирования, научное программирование может стать потенциальным вредом для вашей академической карьеры, даже если ваше программное обеспечение приносит пользу науке больше, чем ваши статьи. Все это время вы тратите на изучение того, как правильно программировать, программировать, документировать свой код и делать его надежным, что превращается в статьи, которые не пишутся. В этом случае консультант не всегда будет иметь в виду интересы своего ученика, поскольку это один из тех случаев, когда ученик может выполнять работу, которая приносит пользу группе консультанта, без учета счетчика цитирования студента. Найдите одного или нескольких доверенных наставников в интересующей вас области и убедитесь, что у вас есть четкое понимание того, какой вклад считается ценным. academia.stackexchange.com это отличное место, чтобы задать дополнительный вопрос по этому вопросу.
В качестве сноски: число проектов с одним человеком, которые значительно продвигают любое вычислительное поле, неуклонно уменьшается, будь то область применения или что-то более техническое, такое как плотная линейная алгебра. Все большее число программных пакетов, которые образуют «хлеб с маслом» вычислительных исследований, старше 10 лет и более. Научный код, который не достиг такого уровня зрелости, имеет тенденцию иметь больше ошибок, меньше возможностей и редкую документацию. Старайтесь избегать работы с незрелым кодом, который активно не поддерживается, независимо от его возраста.
источник
Я думаю, что анализ затрат и выгод зависит от желаемой научной компьютерной грамотности, которую вы хотите достичь во время обучения.
Для большинства ученых, которые работают с компьютерами, достаточно опытных в научных вычислениях, для этого требуется: глубокое (абстрактное) понимание основных используемых алгоритмов и навыки программирования, позволяющие эффективно использовать библиотеки программного обеспечения (создание программного обеспечения, создание ссылок, использование списки рассылки).
Напротив, если вы планируете стать экспертом в области научных вычислений, вам потребуется глубокое понимание численных методов, арифметики с плавающей точкой и вычислительных технологий. Вы можете выучить теорию этих тем из книг, однако для развития и поддержания передовых навыков необходим опыт на практике. Следовательно, было бы хорошей идеей программировать все, что вы используете во время обучения (например, если вы хотите готовить, как повар: вы учитесь, есть то, что готовите, и часто готовить!)
Какой правильный уровень мастерства зависит от вашей карьеры. Посмотрите, какой уровень навыков используют работающие люди в вашей области.
источник