Atualmente, estou investindo pesadamente em estruturas de dados e algoritmos e tentando resolver alguns quebra-cabeças de programação.
Estou tentando codificar e resolver com Java e Clojure.
Estou perdendo meu tempo? devo investir mais em tecnologias e estruturas que já conheço para obter um conhecimento mais profundo (os detalhes) e poder codificá-los mais rapidamente?
Ao estudar estruturas de dados e algoritmos, vou me tornar um programador melhor ou esses assuntos são importantes apenas durante os anos de faculdade?
learning
algorithms
data-structures
Quíron
fonte
fonte
Respostas:
É inteiramente possível gastar a maior parte / toda a sua carreira fazendo um trabalho significativo e útil, com apenas um conhecimento mínimo de algoritmos e estruturas de dados.
O nível mínimo de conhecimento para algoritmos e estruturas de dados, para ter sucesso, exigirá que você:
Não há * máximo * . Se você quiser, pode levar o seu estudo ao nível de doutorado e além. Sua utilidade está diretamente relacionada ao tipo de trabalho que você está interessado em ter e a qual tipo de trabalho você acha mais interessante e gratificante.
Dito isto, como uma diretriz aproximada (mas não absoluta), quanto mais baixo nível, mais uso de recursos e menos automatizado o idioma, a estrutura e o aplicativo em que você estiver trabalhando, maior será o nível de habilidade exigido. algoritmos e estruturas de dados. Por exemplo, implementar o algoritmo de Ukkonen em montagem provavelmente, mas não necessariamente, significará que você desejará uma compreensão em nível de mestrado do algoritmo e das estruturas de dados envolvidas.
Na sua situação específica, passando de um background de desenvolvimento Java para trabalhar no iOs, todas as outras coisas iguais, espere uma demanda um pouco maior no seu entendimento geral de algoritmos e estruturas de dados. Você poderá executar com eficiência em um dispositivo com menos recursos disponíveis. Além disso, espere adicionar duas novas categorias ao seu arsenal - principalmente, você precisará saber mais sobre gerenciamento de memória.
fonte
Nah. Se você está apenas começando, tente entender coisas importantes como a programação da interface do usuário e isso apenas o impede. Eventualmente, você precisa ir lá e aprender estruturas maiores ... como usar as estruturas de dados e algoritmos que OUTRAS pessoas escreveram. Quando você está começando, é bom manter os problemas de escopo limitado.
Algoritmos e estruturas de dados são basicamente a base de tudo, mesmo que você provavelmente nunca escreva um dos seus depois de passar do estágio iniciante. Conhecê-los, ou pelo menos conhecê-los, fará de você um desenvolvedor melhor no final. Você saberá quando e por que usar cada um, porque saberá como eles funcionam. Além disso, tornar seus algoritmos e estruturas de dados genéricos para que eles possam trabalhar com qualquer tipo ou tipo com a interface X é realmente algo que você usará para o resto de sua carreira.
Eu vejo muitas pessoas pulando para coisas como o Qt que acabam fazendo perguntas que mostram zero conhecimento de C ++ (por exemplo). Eles estão tentando pular muitas etapas e, no final, levam mais tempo para aprender. Eu diria que você está no caminho certo.
fonte
Você não está perdendo seu tempo.
Se, no decorrer do seu trabalho, você precisar usar uma ferramenta ou estrutura que não usou anteriormente, aprenderá e usará.
No entanto, se você precisar usar uma estrutura de dados ou algoritmo que você não usou anteriormente, é provável que você nem saiba que ele existe e resolverá seu problema usando alguma técnica horrivelmente subótima que exige muito mais esforço e escala terrivelmente.
O que estou tentando dizer é que esse é o tipo de coisa que você não aprenderá apenas fazendo, você precisa aprender aprendendo , seja em uma situação acadêmica ou através de investimento pessoal, como você fazendo agora.
fonte
Na prática, esteja ciente de quais são as estruturas de dados disponíveis, quais são suas características de complexidade, onde obter boas implementações delas e onde você mantém sua cópia da Introdução aos Algoritmos para consultar os detalhes posteriormente.
fonte
Se é isso que faz você feliz, então você definitivamente deve ficar com ela. Se você está preocupado por não estar aplicando teoria suficiente, considere um projeto muito teórico. Crie uma pequena linguagem de programação, como Potion , do zero. Uma implementação completa usará tabelas Hash, gráficos, árvores e uma enorme variedade de algoritmos. Se parecer interessante, você pode se aprofundar na otimização, geração de código nativo ou extensibilidade do usuário.
Você se tornará um programador melhor quando permanecer interessado e focado, não quando trabalhar em projetos que parecem práticos, mas um pouco chatos.
Abaixo da toca do coelho, Dorothy!
fonte
Passei muito tempo pesquisando em C / C ++ com o OpenGL. Conheço bem as linguagens e a API ... e me tornei um desenvolvedor e programador razoável por causa dessa experiência. Dito isto, o conhecimento algorítmico real necessário para resolver vários problemas encontrados, que eu apenas consegui entender.
Falando da experiência pessoal, focar na criação de aplicativos será um desperdício de tempo, se você não conhecer a teoria por trás dos domínios problemáticos que pertencem ao que você está tentando construir.
Para muitos tipos diferentes de software, esses domínios se originam dos fundamentos que você aprende ao estudar algoritmos, além de sua própria teoria específica de nicho (por exemplo, álgebra linear em computação gráfica, teoria dos números / informações em criptografia, etc.).
Você não precisa necessariamente se tornar um bruxo computacional por trás de tudo, mas fazer o que estava fazendo no momento deste post é um caminho muito, muito necessário para seguir pelo menos uma vez na jornada de programação - independentemente de não são autodidatas.
fonte
Acho que se você não os conhece bem, não encontrará motivos para usá-los. Parece que encontro usos para eles o tempo todo. Mas tenho que admitir que, com as melhorias nos genéricos nas últimas meia dúzia de anos, a necessidade de criar a sua própria ocorre com cada vez menos frequência. Isso ainda não remove os benefícios de saber como e quando usá-los e eles podem simplificar bastante o código complicado.
fonte