A codificação é importante para ser bom em ciência da computação? Deve-se implementar o algoritmo para conhecê-lo bem?
Lembro-me do idioma de um professor de cs que " nunca codifico"
A codificação é importante para ser bom em ciência da computação? Deve-se implementar o algoritmo para conhecê-lo bem?
Lembro-me do idioma de um professor de cs que " nunca codifico"
Respostas:
Você realmente não conhecerá bem o algoritmo até codificá-lo.
A codificação não é importante para o seu professor, mas você deve ter em mente que ele não é pago para fazer as coisas. Ele é pago para DIZER coisas (e ESCREVER coisas.)
Sou um ex-professor de matemática, então entendo bem essa dinâmica.
Se você deseja seguir seu caminho e ser um cientista da computação teórico, então sim, a codificação é de menor importância. Mas, se o fizer, lembre-se de manter a humildade, sabendo que seu salário é pago pelos recursos auferidos por aqueles que escolheram fazer as coisas.
Ciência da Computação não é mais sobre computadores do que astronomia é sobre telescópios
- Edsger Dijkstra
Eu tendem a concordar.
Se você está falando sobre ser um acadêmico puro de Ciência da Computação, especializado em conceitos abstratos e fundamentais da Ciência da Computação, não necessariamente.
Para desvendar uma analogia: é como perguntar se todo cientista de foguetes da NASA deveria voar no espaço para ser um "bom cientista de foguetes". Claro que não. Ser astronauta faz parte da indústria de vôos espaciais e é muito prático, mas isso não significa que os cientistas terrestres não sejam tão importantes em seu próprio caminho.
Dito isso, provavelmente é uma boa idéia APLICAR o algoritmo que ele criou, se não realmente o escrever em uma linguagem de programação real. Nesse sentido, você pode pensar no design de algoritmos como um ramo da matemática.
A codificação não é super importante para ser um verdadeiro cientista da computação. E pensar em código pode restringir o pensamento, pois eles procuram desenvolver conceitos abstratos úteis. A maioria dos codificadores excelentes não possui recursos intelectuais para analisar algoritmos complexos ou desenvolver conceitos como linguagens de programação, algoritmos avançados de busca e classificação, teoria finita de autômatos, teoria computacional distribuída, R-Trees, protocolos de tolerância a falhas, protocolos de comunicação confiáveis, digital algoritmos de processamento de sinal, teoria criptográfica, análise e otimização de desempenho, armazenamento em cache eficiente, redução de mapa, protocolos de segurança confiáveis etc. Excelentes codificadores e engenheiros de computação geralmente podem usar essas teorias nos sistemas que estão tentando construir e fazê-lo com bastante eficácia, mas esse é realmente o domínio do engenheiro de sistemas ou programador de computadores.
A codificação é extremamente importante para ser um programador de computador. Também é útil entender como codificar os conceitos abstratos úteis produzidos pelos cientistas da computação no código de trabalho.
Um grande problema na ciência da computação é que eles geralmente precisam encontrar soluções para problemas de matemática que têm pouca utilidade na solução dos problemas de programação atuais. Mesmo se eles codificassem uma solução, ninguém seria capaz de usá-la. Pense na teoria do processamento de sinal digital. Foi inventado por pessoas como Fourier, Hilbert e Shannon, mas a aplicação a problemas computadorizados de DSP não era amplamente possível até cerca de 20 anos atrás.
O grande problema na educação em computação é que a maioria das pessoas ensinadas por cientistas da computação não se tornará cientista da computação. Mas muitos cientistas da computação não entendem isso. A codificação pode não ser importante para eles, mas se você estiver na classe deles, certamente será importante para você.
Outro grande problema na educação em computação é que muitos verdadeiros cientistas da computação não têm experiência industrial para serem úteis no ensino do desenvolvimento de software. Eles estão essencialmente tentando ensinar algo que realmente não sabem. Isso faz com que eles percam credibilidade. Coisas importantes em um ambiente industrial simplesmente não são registradas com alguns desses cientistas da computação.
A codificação longa e curta é importante para a maioria das pessoas que se tornam "cientistas da computação", porque a maioria dessas pessoas se tornará programadores e engenheiros de sistemas de computadores.
Depende do subcampo em que o professor se encontra.
Qualquer pessoa competente em análise numérica é provavelmente um especialista em Fortran. Qualquer professor de IA codificará no Lisp ou Prolog ou algo assim.
Em algumas das áreas mais matemáticas, não há realmente a necessidade de codificar. Eu ainda ficaria um pouco desconfiado.
Parece que ele é um cara mais discreto em matemática ... apenas na matemática e na teoria por trás da ciência da computação. Pegue o que esses tipos de professores têm a dizer com um grão de sal.
Eu teria que dizer "A lógica é importante"
Você pode entender apenas a teoria, mas sempre achei que entendi melhor os algoritmos e 1000x depois de codificá-los (tipo de bolha vs. Quicksort, por exemplo, é ótimo conhecer o Big-O, mas vê-lo na prática com grandes dados -sets fornece uma certa apreciação do mundo real por medir a complexidade computacional).
Uma coisa interessante que descobri é que quanto mais você estuda os aspetos teóricos da ciência da computação, mais fácil se torna a codificação. Em algum momento, você para de pensar nas coisas em um idioma específico, mas as vê apenas como os conceitos mais amplos da ciência da computação.
É como perguntar se todos os professores de inglês deveriam ser capazes de escrever filmes, séries de TV, romances, peças de teatro e poemas em minha mente. Da mesma forma, imagine um professor de matemática que nunca usa números para uma idéia igualmente estranha. Isto é, existem alguns elementos básicos que dão à codificação alguma importância para poder ensinar Ciência da Computação básica. Assim, o professor deve conhecer a sintaxe básica da linguagem e como escrever programas tão sofisticados quanto os cursos que o professor está ministrando. Se o professor estiver ensinando sobre o design do compilador e nunca o escreveu antes, isso seria um grande problema. Imagine um chef cozinhando um bolo que nunca cozinhou ou comeu um bolo anteriormente. Sim carumba.
Embora eu possa ver algumas vantagens em implementar um algoritmo para conhecê-lo, duvido que seja um requisito. Afinal, pode-se imaginar até que ponto da implementação se entende como um algoritmo é implementado? Por exemplo, alguém precisa usar algum algoritmo e implementá-lo sob vários paradigmas, como programação procedural, orientada a objetos e funcional, para realmente conhecê-lo? Eles precisam saber como os compiladores traduzem todo o código e movem os bits em um nível de elétron por elétron para serem bastante pedantes quanto a isso?
"Eu nunca codifico", tem uma implicação de conter o passado e o tempo presente de uma maneira. Também pode haver uma suposição implícita de "codificação" como uma coisa humilde que está abaixo do professor para outra maneira de ver a afirmação que pode levar um tom bastante negativo a ela, que pode não passar muito bem em alguns círculos.
Apesar de ser um desenvolvedor profissional de software, me formei em Engenharia Mecânica.
Você pode ser um bom projetista mecânico com pouca experiência na construção e usinagem de peças, deixando esse trabalho para os mecânicos. Mas saber como construir e usinar peças fará de você um engenheiro significativamente melhor, porque você pode prever dificuldades envolvidas na fabricação e montagem do que estiver projetando.
O mesmo vale para o software. Um "codificador" é um mecânico ou técnico, enquanto um engenheiro de software é, bem, o engenheiro. Para muitos lugares, uma pessoa faz os dois trabalhos. Não é impossível e, para algumas questões muito abstratas, uma posição "somente engenharia" pode funcionar.
Mas para a grande maioria, não há absolutamente nenhum benefício em se recusar a codificar.
A menos que você esteja contemplando e acabe com o problema da parada, sempre há um uso para codificar em todos os aspectos da Ciência da Computação.
A única aula de CS que eu tive sem absolutamente nenhuma programação foi a teoria. Eu imagino que existem muitos físicos por aí que dizem: "Eu nunca experimento", mas provavelmente também são os que dizem: "Eu nunca descubro nada". E ficaria surpreso se eles se importassem.
Como estudante de Ciência da Computação, acho que, a princípio, é melhor entender conceitos que envolvem desenvolvimento de software. Depois de aprender a idéia por trás do software e como ele interage com o computador, é hora de começar a codificar e lidar com problemas específicos de implementação.
Isso é como "Exceções de software", no começo você só lida com elas porque fez algo que não estava autorizado a fazer. Então, quando você os aprender, comece a fazer o mesmo com seu código, para torná-lo mais detalhado.
Bem, acho que pessoas que não se importam com conceitos como os programadores que usam Exceções como um fluxo de trabalho normal em seus aplicativos. Eles sabem como, mas realmente não entendem o porquê.
Eu tenho outro idioma para o seu professor:
Aqueles que podem, fazem, aqueles que não podem, ensinam.
imo, falar é barato. Qualquer pessoa pode tagarelar infinitamente sobre a "teoria" e chamá-la de "ciência da computação". Mas até que seja posta em prática, a teoria não é muito útil, porque não há como validá-la. Eu tomaria a opinião de um prof sobre algo muito mais sério se eu soubesse que ele está realmente resolvido um problema particular no código do que se ele está apenas regurgitando 'teoria' que pode ou não pode ter qualquer evidência de apoio para fazer backup de seu ponto de vista.