É considerado preguiçoso se eu usar um pacote de álgebra linear para C ++?


11

Primeiro, deixe-me explicar um pouco antes de realmente fazer a pergunta. Eu estudo física e todas as minhas aulas de programação foram em linguagens de programação fáceis como o MATLAB. Por fácil, quero dizer que a linguagem faz muito do seu pensamento ... Nos próximos anos, estarei fazendo cursos de ciência da computação e estou pensando em seguir uma carreira em programação.

Considerando que muitos cursos universitários são em C ++, o uso de um pacote de álgebra linear (Armadillo) com sintaxe semelhante ao MATLAB será considerado preguiçoso?

Atualmente, estou codificando um algoritmo genético e, embora tenha sido rápido no MATLAB, está demorando muito tempo em C ++ sem a ajuda desses pacotes.

Como isso funciona na vida real? Quais pacotes você tem permissão para usar?

Por exemplo, eu não gostaria de desenvolver meu conhecimento de C ++ com o tatu e não ter conhecimento profundo de outros pacotes mais amplamente utilizados, como "vector.h" "algoritmo" "lista" etc.


9
Você tem permissão para usar qualquer coisa que tenha uma licença compatível com o seu projeto. Caso contrário, você está apenas perdendo seu tempo. (O tipo certo de) preguiça é bom
Richard Tingle


Supondo que seu currículo os inclua, duvido que o uso de um pacote de álgebra linear por si só o impeça de aprender <vector>, <algorithm> e <list>.
Brandin

@RichardTingle: é permitido usar qualquer coisa, desde que os superiores não proibi-lo ;-)
Doc Brown

Mude lazypara sensibleno seu título e a resposta é "sim" (supondo que você esteja executando uma tarefa que envolva álgebra linear, é claro).
Jerry Coffin

Respostas:


21

O comentário de Richard já é a maior parte da resposta. Sempre que você estiver programando algo que não seja um exercício de classe, reutilize o máximo de código existente possível, com apenas algumas outras considerações para equilibrar.

As vantagens da reutilização de código são:

  • Você trabalha mais rápido, porque algum trabalho já foi feito.
  • O código existente tem uma boa chance de ser melhor do que qualquer coisa que você escreva do zero, porque provavelmente já existe há mais tempo, foi melhor testado e melhor otimizado.
  • Freqüentemente, o código existente está em um domínio com o qual você não está familiarizado. Por exemplo, você está fazendo simulações de física, mas isso não significa que você saiba muito sobre como fazer álgebra linear eficiente para a computação. Usar código escrito por outras pessoas significa que você pode confiar na experiência delas.

Há apenas algumas coisas a considerar:

  • Licenciamento. O autor do código que você deseja reutilizar detém os direitos autorais, e você não pode usar o código sem a permissão dele. As bibliotecas vêm com uma licença que informa o que você pode fazer com elas e, se você deseja usar a biblioteca, precisa cumprir a licença. O Armadillo está sob a Mozilla Public License 2.0, o que significa que você pode usá-lo livremente.
  • Integração. Se o seu projeto for maior, pode ser bastante complexo integrar bibliotecas de terceiros. Dependendo da quantidade de uso que você obtém da biblioteca, pode não valer a pena.
  • Distribuição. Se uma biblioteca estiver disponível apenas como DLLs ou precisar de algum registro no sistema, mas seu método de distribuição precisar consistir em "copiar este executável em algum lugar", talvez você não consiga usar a biblioteca.

Como diz o ditado, em um programador, a preguiça é uma virtude.


1
Você toca nisso, mas como a pergunta menciona o trabalho em sala de aula, é importante não usar um pacote ou biblioteca para a peça que você está tentando aprender. Se você estiver tentando aprender como construir uma rede neural, sinta-se à vontade para usar uma biblioteca para análise de argumentos, arquive io, mas escreva a rede neural.
Alan Shutko

3
Um ponto importante que falta na sua lista é a manutenção futura. Ao considerar o uso de uma lib de terceiros, ela é de código fechado ou de código aberto, mas é muito complexa para permitir manutenção futura pela própria organização, é necessário garantir que o fornecedor da biblioteca forneça serviços de manutenção futuros (incluindo a evolução da lib ) por um certo período de tempo. Essa é uma das principais razões pelas quais certas empresas de software não usam determinadas bibliotecas e preferem criar suas próprias, mesmo que isso pareça um desperdício à primeira vista.
Doc Brown

1

O que você quer dizer com "permitido"? Eu acho que posso adicionar algo aqui que pode ajudar a esclarecer um equívoco de alguns alunos iniciantes: você é solicitado a escrever seu próprio código e algoritmos etc. etc. na universidade, porque está aprendendo um curso e deseja consolidar o que você aprendeu nas aulas escrevendo realmente o código. Essa codificação é um auxiliar do seu processo de aprendizagem . Por exemplo, depois de aprender uma estrutura / algoritmo de dados específica, você escreve seu próprio código para ver como ele realmente funciona e aprofundar sua compreensão. Isso faz sentido.

Quando você está desenvolvendo um projeto de programação da vida real, não está escrevendo código como um auxiliar para aprender alguns conceitos / conhecimentos; você está tentando produzir um produto de engenharia. Engenharia não é realmente sobre invenção, mas sobre os fundamentos apresentados por outros já, para atender a uma necessidade prática específica. Dizem que a programação é 80% de leitura / reutilização de bibliotecas / códigos de outras pessoas e 20% de criação da sua. Pode ser um pouco exagerado, mas você recebe o espírito.

No seu caso, se você estiver executando um projeto de programação para um curso e solicitar explicitamente a codificação de seu próprio algoritmo, você não desejaria usar bibliotecas externas. Se você estiver executando seu próprio projeto de engenharia, use o maior número possível de bibliotecas antes de tentar criar o seu.

Deixe essa distinção clara e você entenderá o que está fazendo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.