Je commence mes études supérieures en génie et je travaillerai sur des projets de science informatique. J'ai remarqué qu'il y a eu des discussions sur les avantages et les inconvénients de la mise en œuvre de vos propres algorithmes ici . L'analyse coûts-avantages de la mise en œuvre de vos propres algorithmes par rapport à l'utilisation de bibliothèques est-elle différente lorsque vous êtes un étudiant diplômé débutant?
10
Réponses:
À mon avis, être un étudiant débutant ne change pas la réponse de David Ketcheson ici à la question que vous avez liée dans votre message.
Codez les versions minimales des algorithmes que vous souhaitez apprendre. Mettez-les ensuite de côté. Le codage de vos propres algorithmes est le plus utile pour l'apprentissage, mais pour le code de recherche (ou de production), à moins que vos objectifs de recherche ne soient d'écrire des logiciels qui améliorent les bibliothèques de pointe (s'il en existe même), vous '' mieux vaut utiliser des bibliothèques. Les bibliothèques sont susceptibles d'être mieux documentées, plus évolutives et plus robustes que ce que vous codez vous-même, sauf si vous êtes (ou devenez) vraiment bon en codage. De plus, les bibliothèques sont susceptibles d'être testées et déboguées pour vous (bien sûr, cela dépend de qui a écrit la bibliothèque ...). Vous serez responsable du support, du débogage et du test de tout code que vous écrivez pour votre thèse, et pour gagner du temps, cela aide à minimiser la quantité de code que vous devez écrire.
Les seuls autres scénarios auxquels je peux penser (c'est-à-dire qu'il peut y en avoir d'autres) sont:
la source
Je voudrais donner un peu plus d'ampleur à la réponse réfléchie de Geoff . En particulier, je veux vous donner un peu plus de perspective sur la valeur de vos efforts de programmation par opposition à vos efforts de recherche au début de votre carrière universitaire.
Vous constaterez qu'être capable d'écrire des logiciels pour augmenter votre recherche scientifique fera de vous un membre précieux de presque n'importe quelle équipe de recherche. Cependant, ce temps ne sera pas nécessairement considéré comme «précieux» par vos pairs universitaires ou ceux qui embauchent pour des postes universitaires.
À partir d'une enquête de recherche menée en 2011 à Princeton, «A Survey of the Practice of Computational Science» :
Cela ne signifie pas que ce n'est pas une bonne idée d'implémenter ou de repenser une bibliothèque ou des applications de base, mais si vous allez vous lancer dans un développement logiciel sérieux (plus de 25% de votre temps à travailler avec du code), conservez ces trois pensées à l'esprit.
La complexité et le risque augmentent de façon exponentielle avec la taille du projet et le nombre de développeurs. Jusqu'à ce que vous ayez écrit ou travaillé avec des logiciels plus importants ou des équipes de développeurs qui s'étendent au-delà de votre laboratoire, il vous sera difficile d'acquérir une bonne appréciation de cela et de prévoir correctement les efforts.
Vous devez être bon. Il faut une certaine maturité, à la fois en tant que programmeur et en tant que scientifique d'application, pour écrire des logiciels utiles. Vous devez savoir quelles sont les fonctionnalités importantes, où sont les risques numériques et être capable de prévoir l'effort de programmation pour un ensemble de fonctionnalités et de robustesse donné. Bien sûr, la seule façon de réussir est de passer du temps sur des projets dont vous n'êtes pas le chef de file ou qui peuvent échouer ou être retardés en toute sécurité, ce qui m'amène à mon dernier point.
Bien que de nombreux laboratoires de recherche et postes industriels accordent une grande valeur à l'expérience en programmation, la programmation scientifique peut nuire potentiellement à votre carrière universitaire, même si votre logiciel profite davantage à la science que vos articles. Tout ce temps que vous passez à apprendre à bien programmer, à programmer, à documenter votre code et à le rendre robuste se traduit par des articles qui ne sont pas en cours d'écriture. Un conseiller n'aura pas toujours à l'esprit les meilleurs intérêts de son élève ici, car c'est l'un de ces cas où l'étudiant peut fournir un travail qui profite au groupe du conseiller sans bénéficier du décompte des citations de l'étudiant. Recherchez un ou plusieurs mentors de confiance dans le domaine qui vous intéresse et assurez-vous de bien comprendre quelles contributions sont considérées comme précieuses. academia.stackexchange.com est un excellent endroit pour poser une question complémentaire à ce sujet.
En tant que note de bas de page: le nombre de projets d'effort d'un seul homme qui font progresser de manière significative n'importe quel domaine de calcul diminue régulièrement, qu'il s'agisse d'un domaine d'application ou de quelque chose de plus technique comme l'algèbre linéaire dense. Un nombre croissant de progiciels qui constituent le "pain et le beurre" de la recherche informatique ont 10 ans ou plus. Le code scientifique qui n'a pas atteint ce niveau de maturité a tendance à avoir plus de bogues, moins de fonctionnalités et une documentation clairsemée. Essayez d'éviter de travailler avec du code immature qui n'est pas activement pris en charge, quel que soit son âge.
la source
Je pense que l'analyse coûts-avantages dépend de la compétence en informatique scientifique souhaitée que vous souhaitez atteindre au cours de vos études.
Pour la plupart des scientifiques qui travaillent avec des ordinateurs, la maîtrise de l'informatique scientifique suffit, cela nécessite: une compréhension de haut niveau (abstraite) des principaux algorithmes utilisés et des compétences en programmation qui vous permettent d'utiliser efficacement les bibliothèques de logiciels (création de logiciels, liaison, utilisation listes de diffusion).
En revanche, si vous prévoyez de devenir un expert dans le domaine du calcul scientifique, vous aurez besoin d'une compréhension approfondie des méthodes numériques, de l'arithmétique à virgule flottante et de la technologie informatique. Vous pouvez apprendre la théorie de ces sujets à partir de livres, mais une expérience par la pratique est nécessaire pour développer et maintenir des compétences avancées. Par conséquent, ce pourrait être une bonne idée de programmer tout ce que vous utilisez pendant que vous apprenez (par exemple si vous voulez cuisiner comme un chef: vous apprenez en mangeant ce que vous cuisinez et en cuisinant souvent!)
Le niveau de compétence correct dépend de votre carrière. Découvrez le niveau de compétences utilisé par les travailleurs de votre domaine.
la source