Estou iniciando meus estudos de pós-graduação em engenharia e trabalhando em projetos de ciências computacionais. Percebi que houve alguma discussão sobre as vantagens e desvantagens de implementar seus próprios algoritmos aqui . A análise de custo-benefício da implementação de seus próprios algoritmos versus o uso de bibliotecas é diferente quando você é um estudante de graduação iniciante?
10
Respostas:
Na minha opinião, ser um estudante de graduação iniciante não altera a resposta de David Ketcheson aqui para a pergunta que você vinculou em sua postagem.
Codifique versões mínimas de algoritmos que você deseja aprender. Em seguida, reserve-os. A codificação de seus próprios algoritmos é mais útil para o aprendizado, mas para o código de pesquisa (ou produção), a menos que seus objetivos de pesquisa sejam escrever um software que melhore as bibliotecas de ponta existentes (se houver), você ' é melhor usar bibliotecas. É provável que as bibliotecas sejam melhor documentadas, mais escalonáveis e mais robustas do que o que você codifica, a menos que seja (ou se torne) realmente bom em codificação. Além disso, é provável que as bibliotecas sejam testadas e depuradas para você (embora, é claro, isso dependa de quem escreveu a biblioteca ...). Você será responsável por apoiar, depurar e testar qualquer código que escrever para sua tese e, para economizar tempo, isso ajuda a minimizar a quantidade de código que você precisa escrever.
Os únicos outros cenários em que consigo pensar (ou seja, podem haver outros) são:
fonte
Eu gostaria de dar um pouco mais de profundidade à resposta pensativa de Geoff . Em particular, quero lhe dar um pouco mais de perspectiva sobre o valor dos seus esforços de programação, em oposição aos seus esforços de pesquisa no início de sua carreira como acadêmico.
Você descobrirá que ser capaz de escrever um software para aumentar sua pesquisa científica fará de você um membro valioso de quase qualquer equipe de pesquisa. No entanto, esse tempo não será necessariamente considerado "valioso" por seus colegas acadêmicos ou por aqueles que estão contratando cargos acadêmicos.
De uma pesquisa de 2011 realizada em Princeton, "Uma pesquisa sobre a prática da ciência computacional" :
Isso não significa que não é uma boa ideia implementar ou redesenhar uma biblioteca ou aplicativos principais, mas se você estiver envolvido em algum desenvolvimento sério de software (mais de 25% do seu tempo trabalhando com código), mantenha esses três pensamentos em mente.
A complexidade e o risco crescem exponencialmente com o tamanho do projeto e o número de desenvolvedores. Até que você tenha escrito ou trabalhado com partes maiores de software ou equipes de desenvolvedores que se estendem além do seu laboratório, será difícil obter uma boa apreciação disso e prever o esforço adequado.
Você precisa ser bom. É preciso uma certa maturidade, tanto como programador quanto como cientista de aplicativos, para escrever software útil. Você precisa saber quais são os recursos importantes, onde estão os riscos numéricos e ser capaz de prever o esforço de programação para um determinado conjunto de recursos e robustez. Obviamente, a única maneira de melhorar é gastar tempo em projetos nos quais você não é o líder ou que pode falhar ou atrasar com segurança, o que me leva ao meu ponto final.
Embora muitos laboratórios de pesquisa e posições industriais valorizem muito a experiência em programação, a programação científica pode atuar como um prejuízo potencial para sua carreira acadêmica, mesmo que seu software beneficie mais a ciência do que seus trabalhos. Todo esse tempo você gasta aprendendo a programar bem, programando, documentando seu código e tornando-o robusto, traduz-se em documentos que não estão sendo escritos. Um orientador nem sempre terá os melhores interesses do aluno em mente aqui, pois esse é um daqueles casos em que o aluno pode fornecer um trabalho que beneficia o grupo do orientador sem beneficiar a contagem de citações do aluno. Procure um ou mais mentores confiáveis no campo em que você está interessado e verifique se você tem um entendimento claro de quais contribuições são consideradas valiosas. academia.stackexchange.com é um excelente lugar para fazer uma pergunta de acompanhamento sobre isso.
Como nota de rodapé: o número de projetos de esforço individual que avançam significativamente em qualquer campo computacional está diminuindo constantemente, seja uma área de aplicação ou algo mais técnico, como álgebra linear densa. Um número crescente de pacotes de software que formam o "pão com manteiga" da pesquisa computacional tem 10 anos ou mais. O código científico que não atingiu esse nível de maturidade tende a ter mais erros, menos recursos e documentação esparsa. Tente evitar trabalhar com código imaturo que não é suportado ativamente, independentemente da idade.
fonte
Acho que a análise de custo-benefício depende da alfabetização científica em computação desejada que você deseja obter durante seus estudos.
Para a maioria dos cientistas que trabalham com computadores proficientes em computação científica é suficiente, isso requer: um entendimento de alto nível (abstrato) dos principais algoritmos utilizados e habilidades de programação que permitem o uso eficaz de bibliotecas de software (criação de software, vinculação, uso de mailing lists).
Por outro lado, se você planeja se tornar um especialista no campo da computação científica, precisará de um profundo conhecimento de métodos numéricos, aritmética de ponto flutuante e tecnologia de computação. Você pode aprender a teoria desses tópicos nos livros, mas é necessário ter experiência na prática para criar e manter habilidades avançadas. Portanto, pode ser uma ótima idéia programar tudo o que você usa enquanto aprende (por exemplo, se você deseja cozinhar como um chef: você aprende comendo o que cozinha e cozinha frequentemente!)
Qual é o nível correto de proficiência depende da sua carreira. Veja qual nível de habilidades é usado pelas pessoas que trabalham em seu campo.
fonte