Estou estudando Java, até agora está tudo bem, mas me veio uma pequena preocupação.
Eu tenho dificuldades em matemática, eu deveria melhorar isso para programar melhor? Ter um vasto conhecimento em matemática faz alguma diferença?
Estou estudando Java, até agora está tudo bem, mas me veio uma pequena preocupação.
Eu tenho dificuldades em matemática, eu deveria melhorar isso para programar melhor? Ter um vasto conhecimento em matemática faz alguma diferença?
Na maioria dos casos, não precisa ter um conhecimento profundo de matemática para programar bem. Saber as operações básicas e conjuntos numéricos já vai ser suficiente. É difícil aparecer problemas que necessitem de conhecimentos mais avançados como análise combinatória por exemplo, mas nada que uma busca no Google não resolva. Ter ao menos uma noção vai te ajudar a fazer a pesquisa e chegar na resposta mais rápido, mas dá pra achar sem saber também (só pode demorar mais). A maioria dos sistemas é um CRUD com algumas regras de negócio.
Faz. Exemplos: teoria de conjuntos e funções te dão uma visão diferenciada sobre linguagens de programação e sistemas de tipos. Lógica e técnicas de prova te dão uma visão diferenciada sobre conceitos como recursão. Conceitos de estatística básica como percentis e agregações vão te ajudar a fazer análises de desempenho.
Não é sobre ser capaz de programar, mas sobre ter uma visão mais clara dos conceitos. É a mesma coisa que você pegar um pedreiro e um engenheiro civil: o pedreiro tem uma noção de como construir uma casa as vezes melhor que o engenheiro. Contudo, um engenheiro com muito conhecimento vai entender profundamente o porquê do pedreiro fazer o que faz, e até propor melhorias quando for o caso.
Um exemplo: se você tem duas funções bijetoras que mapeiam membros de um tipo (e.g. classe) para outro, e cuja composição (em qualquer ordem) é igual a função de identidade, você tem um isomorfismo. Se você souber o que é uma função bijetora e o que é a função de identidade, você vai entender o que é um isomorfismo. Você passa a enxergar isomorfismos nos programas e pode ter insights interessantes sobre como organizar o código. Agora, não saber isso não vai te limitar e nem vai te impedir de ganhar bem.
Muito obrigado por responder ^^
Por nada. Pesquisa “matemática” aqui na busca do fórum que vai aparecer outras perguntas parecidas com a sua. Tem mais pontos de vista nas respostas.
Eu não diria “vasto”, mas algum conhecimento matemático ajuda bastante sim. Programação tem uma relação profunda com matemática, e no fundo, é uma forma de matemática aplicada (muitos dizem até que “programação é matemática”, ponto) - aliás, muitos cursos de Ciência da Computação surgiram em Institutos de Matemática e permanecem lá até hoje (na USP, por exemplo), e isso não é coincidência.
Claro que na maioria dos casos você não precisará de um profundo conhecimento teórico, mas eu diria que ter uma boa base ajuda muito.
Para ficar em um exemplo simples, vemos muitos iniciantes fazendo códigos assim:
if (x < 0 && x > 10) { etc... }
O código testa se x é menor que zero e maior que 10. Mas não tem como um número ser ao mesmo tempo menor que zero e maior que 10, então nunca vai entrar neste if. Apesar de não parecer, isso é lógica básica, que no fundo é matemática.
Funções são um conceito matemático (o cálculo lambda, então, nem se fala, e é a base das linguagens funcionais, muito “em moda” hoje em dia). Você não precisa ser especialista em toda a base teórica do cálculo lambda, mas ter uma noção dele ajuda a entender melhor como funcionam essas linguagens (e até mesmo as linguagens que não são puramente funcionais, mas possuem características destas). Muita gente apanha ao usar map/reduce do JavaScript, por exemplo, mais por falta de entendimento deste conceito do que da linguagem em si (sem contar os que tentam usar quando não precisa - e reconhecer quando precisa ou não fica mais fácil se você entende o que eles fazem).
Outro caso simples é para pegar o último dígito de um número, ou percorrer todos os dígitos do mesmo. Muitos - em especial iniciantes - transformam o número em string para isso, mas na verdade não precisa. Para pegar o último dígito é só fazer n % 10 (resto da divisão por 10), e para percorrer todos os dígitos basta fazer um loop, pegar o último dígito e ir dividindo o número por 10, até que ele seja zero. Um algoritmo puramente matemático, em geral costuma ser mais eficiente do que transformar em string e manipulá-la.
Muitos algoritmos possuem comprovação matemática do seu funcionamento - e até do porquê ser melhor ou pior que outros em determinadas condições. Mesmo que você não precise implementar nenhum deles, saber desses fundamentos pode te ajudar a no mínimo escolher melhor qual usar em cada caso.
Mesmo que seja só um “sisteminha de CRUD”, tem muita coisa que pode te ajudar. Qualquer “sisteminha CRUD” vai precisar de queries no banco de dados, e a base do SQL é a álgebra relacional. Pode parecer um monte de “teoria inútil”, mas saber pelo menos um pouco dela me ajuda a escrever e entender melhor as queries. Um JOIN nada mais é que um produto cartesiano, que é um conceito matemático, e saber disso ajuda a entender melhor como funcionam os diferentes tipos de JOIN.
Enfim, podemos resumir - de forma bem grosseira - que matemática é composta por muitas abstrações e regras auto-contidas e bem definidas. E no fundo é o mesmo que fazemos em programação: criamos abstrações (variáveis, funções, classes, arrays e outras estruturas de dados) e as suas regras (este array vai guardar informações X, que estão relacionadas com esse outro array que tem Y, etc), e esta capacidade de abstrair os dados e criar regras e estruturas, e manipulá-las conforme estas regras, é algo que a matemática ajuda muito a desenvolver. Ou seja, mesmo que você não use a teoria matemática diretamente, a capacidade de abstração pode ser adquirida ao estudá-la. E com isso você vai programar melhor.
Na prática não precisa, só noção, o resto é colher requisito.
Muito obrigado por responder : D
Muito obrigado por responder ^^