a codificação é importante? [fechadas]

9

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"

Hilal
fonte
32
Você está perguntando a um grupo de programadores se a codificação é importante ... talvez você não obtenha exatamente uma resposta imparcial.
Rachel
25
Com todo o respeito ao idioma de seu professor, se ele não escreve código, ele não está qualificado para ensinar aos outros como escrever código. Se o ensino dele for puramente teórico, ele ainda se beneficiaria de possuir habilidades de codificação.
Robert Harvey
19
Você faria aulas de natação de alguém que não sabia nadar?
Steven A. Lowe
5
@ Steven A. Lowe: acho que o professor não nadador ensina fisiologia aquática, não natação. Ainda assim, se ele não nadar, duvido que ele saiba como é a narcose por nitrogênio.
Javier
4
@Javier: é mais provável que ele esteja ensinando demolições subaquáticas, mas nem mesmo é certificado como SCUBA. O termo técnico para pessoas assim (exceto "professor") é "poseur" ;-)
Steven A. Lowe

Respostas:

27

Você realmente não conhecerá bem o algoritmo até codificá-lo.

Steven A. Lowe
fonte
3
isso não é necessariamente verdade, é possível entender um algoritmo e aplicá-lo a uma situação ou problema sem realmente codificá-lo.
aggietech
10
@aggietech: Acho que a palavra-chave aqui é "bem".
Robert Harvey
2
@aggietech, Robert acertou. Eu posso imitar algoritmos, mas quando realmente tento fazê-los funcionar, descubro quanto tenho que aprender sobre isso.
3
se você está falando de for-loops e bubble-sort, então não é grande coisa, mas há uma enorme diferença entre ler um livro sobre o algoritmo genético e realmente resolver problemas do mundo real com ele
Steven A. Lowe
2
@ Steven, sim, a complexidade tem muito a ver com isso.
19

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.

Eric Wilson
fonte
3
A voz da experiência. Este é o melhor resumo do cargo de professor que acho que já vi.
TehShrike
11
Sim, e eu acrescentaria que você precisa praticar o "fazer" se quiser ensinar os outros a "fazer" bem.
Beth Whitezel
@ BitOff: eu concordo, mas o "if" também é um "only if". Um professor que nunca codifica não tem negócios ensinando desenvolvimento de software, mas pode ser perfeitamente adequado para ensinar, digamos, a teoria da complexidade. Nesse caso, o que ele está ensinando aos alunos é como provar teoremas, portanto, o único requisito é que ele precise ter prática em provar teoremas (não em codificação).
precisa
@ShreevatsaR Sim, eu concordo. E, na verdade, não sou tão rigoroso com o fato de que eles codificam muito na prática. Bons programadores raramente são bons professores. Se o professor souber os pontos da semana, poderá compensá-lo. Temos um programa local que atrai pessoas da indústria para a sala de aula. O professor é especialista em ensino, pode codificar e sabe como extrair as informações da pessoa da indústria para o benefício dos alunos.
Beth Whitezel
16

Ciência da Computação não é mais sobre computadores do que astronomia é sobre telescópios

- Edsger Dijkstra

Eu tendem a concordar.

ElGringoGrande
fonte
2
Ok, mas como isso se relaciona com a pergunta?
Robert Harvey
2
"A codificação é importante para ser bom em ciência da computação?" Se um computador não estiver relacionado, como a codificação física do computador pode ser importante?
ElGringoGrande
11
@ Robert Harvey: Ciência da Computação não é explicitamente sobre computadores, e muitos astrônomos passam pouco tempo olhando através de lentes de vidro. Alguns apenas analisam os resultados. Metade das descobertas importantes na programação de computadores era conhecida antes mesmo de o computador ter surgido.
Orbling
2
@ Robert Harvey: A ciência da computação simplesmente não é sobre como programar, é a ciência da computação. Fora da codificação binária pura, você usa uma linguagem, que é uma abstração, para implementar as teorias e descobertas da ciência da computação. Existem muitas idéias na ciência da computação (por exemplo, computação quântica) que a programação não pode realizar completamente. Tudo o que estou dizendo é que todas as idéias da ciência da computação podem ser expressas de maneira completa e elegante sem o uso de uma linguagem de programação. Cite um que não pode.
ElGringoGrande
3
@Orbling: Muito verdade. Por exemplo, lembre-se de que Turing inventou a noção da máquina universal de Turing antes mesmo de o primeiro computador eletrônico ser criado. O fato de ele não escrever toneladas de código faz dele um cientista da computação incompetente?
Mipadi
11

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.

Bobby Tables
fonte
11
Eu acho que é justo dizer que todos os cientistas de foguetes da NASA têm uma base completa na ciência de foguetes e uma profunda experiência prática com engenharia mecânica e elétrica. Ah, e eles geralmente sabem escrever código também.
Robert Harvey
3
Eu pensaria que eles calcularam trajetórias muitas vezes, não apenas teorizando sobre como.
3
+1, eu acrescentaria outro exemplo - você não precisa ter experiência na produção de vinhos para ser um ótimo somellier (ou seja lá como os caras que provam a degustação de vinhos são chamados).
22410 Jas
2
@ Jas: analogia terrível. Os cientistas da computação não são os receptores do produto final. Eles são os produtores de vinho.
Doppelgreener
11
@Axidos Não, não, eles são os produtores de uva .
Mark C
9

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.

Jay Godse
fonte
Excelente resposta, direto ao cerne da questão. O problema é que você precisa aprender os dois: Ciência da Computação e Engenharia de Software relevantes para a indústria. A maioria das universidades ensina uma melhor que a outra, geralmente a primeira - não é fácil alcançá-la, pois a universidade é inerentemente um instituto de pesquisa, que promove a primeira e tem pouco a ver com a segunda. Esse é um problema na maioria dos campos práticos.
Orbling
3

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.

David Thornley
fonte
2

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.

Steven Striga
fonte
5
Sou entusiasta de matemática e viciada em algoritmos. Eu sempre gosto de codificar. No entanto, os algoritmos estão por trás da codificação. Uma caneta e um artigo são suficientes para algoritmos e também para a teoria da computação. O que eu faço hoje em dia é apenas pensar e escrever algoritmos, mas não de codificação
hilal
5
Pegue o que qualquer professor diz com um grão de sal. Se ele é um cara de matemática discreta, leve-o a sério quando ele fala sobre matemática discreta, não quando ele fala sobre programação ou engenharia de software.
David Thornley
11
Os caras de matemática discreta estão entre os mais importantes no campo; a teoria é implementada por codificadores; ela não precisa ser implementada para se provar correta. Pitada de sal, de fato.
Orbling
@Orbling E tome o que dizem aqueles que programam (um grupo amplo) com uma dose semelhante de julgamento suspenso e bom senso.
Mark C
@ Mark C: Bem, sim, eu recomendaria a todos que tomem tudo o que é dito por qualquer pessoa com essas doses.
Orbling
2

Eu teria que dizer "A lógica é importante"

John Hartsock
fonte
2
Ok, mas como isso se relaciona com a pergunta?
Robert Harvey
2

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.

Kurtis
fonte
2

É 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.

JB King
fonte
3
Os professores de inglês devem saber escrever scripts de filmes se estiverem ensinando outras pessoas a escrever scripts de filmes. Mas todos os professores de inglês certamente devem ser capazes de escrever uma tese muito boa, se não um livro real.
Robert Harvey
2
@ Robert Harvey: O professor do OP não disse que não pode codificar, apenas que não. Ele poderia ser um cientista da computação teórico que passa a maior parte do tempo pesquisando. Como JB King apontou, desde que não esteja dando palestras, por exemplo, sobre design de compiladores ou engenharia de software, ele pode muito bem ser experiente e competente em seu campo.
Mipadi
@ Robert Harvey: Eu acho que o @mipadi tem razão, o professor acabou de dizer "Eu nunca codifico " , não que ele seja incapaz.
Orbling
@JB King, @Orbling: aposto que a citação é uma tradução, por isso não a analise literalmente.
Javier
@Javier: Poderia ser, nesse caso seria ainda menos claro.
Orbling
2

Seu professor pode estar certo, pois, para ser um professor, você não precisa codificar, mas sabe muito sobre a teoria. Mas isso não funcionará fora dos perímetros da universidade.

Manoj R
fonte
1

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.

whatsisname
fonte
2
Mas, como você disse, você é um engenheiro mecânico e está falando sobre engenharia de software . Engenheiros constroem coisas. Mas o professor em questão ensina ciência da computação .
Mipadi
1

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.

Peter Turner
fonte
11
Na minha graduação em Computação (com uma universidade entre as 10 melhores no exterior, por isso não é uma coisa esfarrapada), eu diria que pelo menos um terço das minhas aulas não tem programação alguma. Computar é muito mais que código.
Orbling
Ok, bem, aparentemente eu fui para uma das dez melhores universidades também, podemos até ter estudado na mesma universidade e ter feito aulas diferentes com base em gostos ou aversões ou professores de um ou outro grupo aleatoriamente.
Peter Turner
0

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ê.

guiman
fonte
-6

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.

GrandmasterB
fonte
6
Einstein, Aristóteles, Webster, Ayn Rand, Thoreau, Confúcio e Booker T. Washington eram professores. Que declaração inculta.
Jeffo
4
-1 Para um comentário extremamente ofensivo aos professores. Muitas vezes citado, eu sei, mas sempre ridículo. A observação original de George Bernard Shaw foi "Quem pode, faz. Quem não pode, ensina". de Man and Superman, 1903 - ele também disse: "Para mim, a única esperança da salvação humana está no ensino". e foi co-fundador da London School of Economics (LSE), então você julga a opinião dele.
Orbling 23/12/10
2
Einstein nunca conduziu um experimento físico em sua vida - ele descreveu alguns experimentos mentais, realizados por outros e (com uma exceção), exatamente como ele havia previsto. Você diria que Einstein não teve "realização substancial fora da sala de aula"? Por que você assumir que apenas porque o professor não tem implementado nada diretamente utilizável por usuários finais, ele não tem, digamos, pesquisou um novo algoritmo que é usado por programadores no campo? De fato, você parece assumir que o trabalho do professor é ensinar aos alunos como codificar !
precisa
3
Cara, muitos dos meus professores de ciência da computação (do MIT) foram incríveis e têm contribuído imensamente para a sociedade, e eles fazem "fazer coisas em seu campo" - um monte! Mas o campo deles tem muito pouco a ver com codificação, e eles codificam no máximo muito raramente, se é que o fazem. (Sério, você espera que alguém que trabalhe com computação quântica escreva código para computadores quânticos que nem existem?) Você parece ter uma visão muito estreita da ciência da computação. (Lembre-se de que é ciência da computação , não engenharia .)
#
2
@GrandmasterB: Se um professor de ciências da computação se concentra na teoria da computação, é muito provável que ele raramente precise escrever código. Isso não significa que ele não esteja fazendo nada em seu campo - ele provavelmente está publicando artigos sobre teoria computacional! Você está confundindo programação com ciência da computação .
Mipadi